Skip to content

About

πŸ“¬ Unofficial Golang Library for the Instantly.ai API (V2)

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

1 star

Watchers

0 watching

Forks

Latest commit

Β 

History

60 Commits

Folders and files

NameName
Last commit message
Last commit date
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

πŸ“¬Β Β go-instantly

Unofficial Golang Library for the Instantly.ai API (V2).


Release Go Version License


CI / CD Β Β  Build Last Commit Β Β Β Β  Quality Β Β  Coverage
Security Β Β  Scorecard Security Β Β Β Β  Community Β Β  Contributors Bitcoin


Project Navigation

πŸš€Β Installation πŸ§ͺΒ ExamplesΒ &Β Tests πŸ“šΒ Documentation
🀝 Contributing πŸ› οΈΒ CodeΒ Standards ⚑ Benchmarks
πŸ€–Β AIΒ Usage βš–οΈΒ License πŸ‘₯Β Maintainers

πŸ“¦ Installation

go-instantly requires a supported release of Go.

go get github.com/mrz1836/go-instantly

πŸ’‘ Usage

This library targets the Instantly.ai API V2 only. V2 is not backwards compatible with V1 and uses its own credentials β€” a V1 key will not authenticate against V2, so create a V2 API key in your workspace settings and pass it to NewClient. Every request is then authenticated with an Authorization: Bearer <key> header against https://api.instantly.ai.

The SDK is organized AWS-SDK-v2 style: a tiny root package holds the shared Client, and each API resource lives in its own subpackage (email, campaign, account, …). Construct the client once and hand it to a resource service. Importing a resource pulls in only that resource plus the root package and the standard library β€” never testify or the other resources.

package main

import (
	"context"
	"log"

	"github.com/mrz1836/go-instantly"
	"github.com/mrz1836/go-instantly/email"
)

func main() {
	client := instantly.NewClient("[API-KEY]")
	emails := email.New(client)

	err := emails.SendTest(context.Background(), email.SendTestRequest{
		EAccount:           "sender@example.com",
		ToAddressEmailList: "recipient@example.com",
		Subject:            "Testing the sending account",
		Body: email.Body{
			HTML: "<p>Hello from go-instantly.</p>",
			Text: "Hello from go-instantly.",
		},
	})
	if err != nil {
		log.Fatal(err)
	}
}

List endpoints take functional options, so only the filters you actually pass are sent:

page, err := emails.List(ctx,
	email.WithLimit(50),
	email.WithIsUnread(true),
	email.WithMode(email.ModeFocused),
)

Pagination is cursor based. List returns a single page, and ListIter walks every page for you as a range-over-func iterator:

for message, err := range emails.ListIter(ctx, email.WithIsUnread(true)) {
	if err != nil {
		return err
	}
	log.Printf("%s: %s", message.ID, message.Subject)
}

Some endpoints report a failure inside an otherwise successful HTTP 200 response. This library turns those into real errors, so err != nil catches every failure regardless of which shape it arrived in:

var apiErr *instantly.APIError
if errors.As(err, &apiErr) && apiErr.Code == instantly.ErrCodeAccountAuthError {
	// the sending account failed to authenticate
}

πŸ“š Documentation

View the generated documentation, or the Instantly.ai API reference for endpoint details, scopes, and per-endpoint rate limits.

Heads up! go-instantly is intentionally light on dependencies. The only external package it uses is the excellent testify suiteβ€”and that's just for our tests. You can drop this library into your projects without dragging along extra baggage.


Supported API Coverage

Coverage is built one resource at a time against the Instantly V2 OpenAPI spec β€” 171 operations across 127 endpoints in 28 resource groups. Each resource is its own Go package (AWS-SDK-v2 style). 171 / 171 operations Β· 28 / 28 resources ship today (Email, Account, Account-Campaign Mappings, Campaign, Lead, Lead List, Lead Label, Campaign Subsequence, Email Verification, Inbox Placement Test, Inbox Placement Analytics, Inbox Placement Report, SuperSearch Enrichment, Webhook, Webhook Event, Workspace, Workspace Member, Workspace Group Member, Workspace Billing, Block List Entry, Custom Tag, Custom Tag Mapping, API Key, Audit Log, Background Job, CRM Actions, OAuth, DFY Email Account Order) β€” the SDK now covers the entire Instantly.ai V2 API.

  • Email API β€” (email/)
  • Account API β€” (account/)
    • POST /api/v2/accounts - Create account (account.Service.Create)
    • GET /api/v2/accounts - List accounts (account.Service.List / ListIter)
    • GET /api/v2/accounts/{email} - Get account (account.Service.Get)
    • PATCH /api/v2/accounts/{email} - Patch account (account.Service.Update)
    • DELETE /api/v2/accounts/{email} - Delete account (account.Service.Delete)
    • POST /api/v2/accounts/{email}/pause - Pause an account (account.Service.Pause)
    • POST /api/v2/accounts/pause - Pause multiple accounts (account.Service.PauseBulk)
    • POST /api/v2/accounts/{email}/resume - Resume an account (account.Service.Resume)
    • POST /api/v2/accounts/{email}/mark-fixed - Mark an account fixed (account.Service.MarkFixed)
    • POST /api/v2/accounts/move - Move accounts between workspaces (account.Service.Move)
    • POST /api/v2/accounts/warmup/enable - Enable warmup (account.Service.EnableWarmup)
    • POST /api/v2/accounts/warmup/disable - Disable warmup (account.Service.DisableWarmup)
    • POST /api/v2/accounts/warmup-analytics - Warmup analytics (account.Service.WarmupAnalytics)
    • GET /api/v2/accounts/analytics/daily - Daily analytics (account.Service.DailyAnalytics)
    • GET /api/v2/accounts/ctd/status - Custom tracking domain status (account.Service.CtdStatus)
    • POST /api/v2/accounts/test/vitals - Test account vitals (account.Service.TestVitals)
  • Account-Campaign Mappings β€” (accountcampaign/)
    • GET /api/v2/account-campaign-mappings/{email} - Campaigns for an account (accountcampaign.Service.List / ListIter)
  • Campaign API β€” (campaign/)
    • POST /api/v2/campaigns - Create campaign (campaign.Service.Create)
    • GET /api/v2/campaigns - List campaigns (campaign.Service.List / ListIter)
    • GET /api/v2/campaigns/{id} - Get campaign (campaign.Service.Get)
    • PATCH /api/v2/campaigns/{id} - Patch campaign (campaign.Service.Update)
    • DELETE /api/v2/campaigns/{id} - Delete campaign (campaign.Service.Delete)
    • POST /api/v2/campaigns/{id}/activate - Activate/resume (campaign.Service.Activate)
    • POST /api/v2/campaigns/{id}/pause - Pause (campaign.Service.Pause)
    • POST /api/v2/campaigns/{id}/duplicate - Duplicate (campaign.Service.Duplicate)
    • POST /api/v2/campaigns/{id}/share - Share (campaign.Service.Share)
    • POST /api/v2/campaigns/{id}/export - Export to JSON (campaign.Service.Export)
    • POST /api/v2/campaigns/{id}/from-export - Create from export (campaign.Service.CreateFromExport)
    • POST /api/v2/campaigns/{id}/variables - Add variables (campaign.Service.AddVariables)
    • GET /api/v2/campaigns/{id}/sending-status - Sending status (campaign.Service.SendingStatus)
    • GET /api/v2/campaigns/count-launched - Launched count (campaign.Service.CountLaunched)
    • GET /api/v2/campaigns/search-by-contact - Search by contact (campaign.Service.SearchByContact)
    • GET /api/v2/campaigns/analytics - Analytics (campaign.Service.Analytics)
    • GET /api/v2/campaigns/analytics/overview - Analytics overview (campaign.Service.AnalyticsOverview)
    • GET /api/v2/campaigns/analytics/daily - Daily analytics (campaign.Service.DailyAnalytics)
    • GET /api/v2/campaigns/analytics/steps - Steps analytics (campaign.Service.StepsAnalytics)
  • Lead API β€” (lead/)
    • POST /api/v2/leads - Create lead (lead.Service.Create)
    • POST /api/v2/leads/list - List leads, POST-body filters + cursor (lead.Service.List / ListIter)
    • GET /api/v2/leads/{id} - Get lead (lead.Service.Get)
    • PATCH /api/v2/leads/{id} - Patch lead (lead.Service.Update)
    • DELETE /api/v2/leads/{id} - Delete lead (lead.Service.Delete)
    • DELETE /api/v2/leads - Bulk delete, body on DELETE (lead.Service.BulkDelete)
    • POST /api/v2/leads/add - Bulk add (lead.Service.BulkAdd)
    • POST /api/v2/leads/bulk-assign - Bulk assign (lead.Service.BulkAssign)
    • POST /api/v2/leads/move - Move leads (lead.Service.Move)
    • POST /api/v2/leads/merge - Merge leads (lead.Service.Merge)
    • POST /api/v2/leads/update-interest-status - Update interest (lead.Service.UpdateInterestStatus)
    • POST /api/v2/leads/subsequence/remove - Remove from subsequence (lead.Service.RemoveFromSubsequence)
    • POST /api/v2/leads/subsequence/move - Move to subsequence (lead.Service.MoveToSubsequence)
  • Lead List API β€” (leadlist/)
    • POST /api/v2/lead-lists - Create (leadlist.Service.Create)
    • GET /api/v2/lead-lists - List (leadlist.Service.List / ListIter)
    • GET /api/v2/lead-lists/{id} - Get (leadlist.Service.Get)
    • PATCH /api/v2/lead-lists/{id} - Patch (leadlist.Service.Update)
    • DELETE /api/v2/lead-lists/{id} - Delete (leadlist.Service.Delete)
    • GET /api/v2/lead-lists/{id}/verification-stats - Verification stats (leadlist.Service.VerificationStats)
  • Lead Label API β€” (leadlabel/)
    • POST /api/v2/lead-labels - Create (leadlabel.Service.Create)
    • GET /api/v2/lead-labels - List (leadlabel.Service.List / ListIter)
    • GET /api/v2/lead-labels/{id} - Get (leadlabel.Service.Get)
    • PATCH /api/v2/lead-labels/{id} - Patch (leadlabel.Service.Update)
    • DELETE /api/v2/lead-labels/{id} - Delete (leadlabel.Service.Delete)
    • POST /api/v2/lead-labels/ai-reply-label - Test AI reply label (leadlabel.Service.TestAIReplyLabel)
  • Campaign Subsequence API β€” (subsequence/)
    • POST /api/v2/subsequences - Create (subsequence.Service.Create)
    • GET /api/v2/subsequences - List (subsequence.Service.List / ListIter)
    • GET /api/v2/subsequences/{id} - Get (subsequence.Service.Get)
    • PATCH /api/v2/subsequences/{id} - Patch (subsequence.Service.Update)
    • DELETE /api/v2/subsequences/{id} - Delete (subsequence.Service.Delete)
    • POST /api/v2/subsequences/{id}/duplicate - Duplicate (subsequence.Service.Duplicate)
    • POST /api/v2/subsequences/{id}/pause - Pause (subsequence.Service.Pause)
    • POST /api/v2/subsequences/{id}/resume - Resume (subsequence.Service.Resume)
    • GET /api/v2/subsequences/{id}/sending-status - Sending status (subsequence.Service.SendingStatus)
  • Email Verification API β€” (emailverification/)
    • POST /api/v2/email-verification - Create verification (emailverification.Service.Create)
    • GET /api/v2/email-verification/{email} - Check verification (emailverification.Service.Check)
  • Inbox Placement Test API β€” (inboxtest/)
    • POST /api/v2/inbox-placement-tests - Create test (inboxtest.Service.Create)
    • GET /api/v2/inbox-placement-tests - List tests (inboxtest.Service.List / ListIter)
    • GET /api/v2/inbox-placement-tests/{id} - Get test (inboxtest.Service.Get)
    • PATCH /api/v2/inbox-placement-tests/{id} - Patch test (inboxtest.Service.Update)
    • DELETE /api/v2/inbox-placement-tests/{id} - Delete test (inboxtest.Service.Delete)
    • GET /api/v2/inbox-placement-tests/email-service-provider-options - ESP options (inboxtest.Service.ESPOptions)
  • Inbox Placement Analytics API β€” (inboxanalytics/)
    • GET /api/v2/inbox-placement-analytics - List analytics (inboxanalytics.Service.List / ListIter)
    • GET /api/v2/inbox-placement-analytics/{id} - Get analytics (inboxanalytics.Service.Get)
    • POST /api/v2/inbox-placement-analytics/stats-by-test-id - Stats by test id (inboxanalytics.Service.StatsByTestID)
    • POST /api/v2/inbox-placement-analytics/deliverability-insights - Deliverability insights (inboxanalytics.Service.DeliverabilityInsights)
    • POST /api/v2/inbox-placement-analytics/stats-by-date - Stats by date (inboxanalytics.Service.StatsByDate)
  • Inbox Placement Report API β€” (inboxreport/)
    • GET /api/v2/inbox-placement-reports - List reports (inboxreport.Service.List / ListIter)
    • GET /api/v2/inbox-placement-reports/{id} - Get report (inboxreport.Service.Get)
  • SuperSearch Enrichment API β€” (supersearch/)
    • POST /api/v2/supersearch-enrichment/ - Create enrichment (supersearch.Service.Create)
    • GET /api/v2/supersearch-enrichment/{resource_id} - Get enrichment for resource (supersearch.Service.Get)
    • PATCH /api/v2/supersearch-enrichment/{resource_id}/settings - Update settings (supersearch.Service.UpdateSettings)
    • POST /api/v2/supersearch-enrichment/run - Run enrichment (supersearch.Service.Run)
    • POST /api/v2/supersearch-enrichment/ai - Create AI enrichment (supersearch.Service.CreateAI)
    • GET /api/v2/supersearch-enrichment/ai/{resource_id}/in-progress - In-progress AI jobs (supersearch.Service.AIInProgress)
    • POST /api/v2/supersearch-enrichment/count-leads-from-supersearch - Count leads (supersearch.Service.CountLeads)
    • POST /api/v2/supersearch-enrichment/preview-leads-from-supersearch - Preview leads (supersearch.Service.PreviewLeads)
    • POST /api/v2/supersearch-enrichment/enrich-leads-from-supersearch - Enrich leads (supersearch.Service.EnrichLeads)
    • POST /api/v2/supersearch-enrichment/signal-keywords-facet - Facet signal keywords (supersearch.Service.SignalKeywords)
    • GET /api/v2/supersearch-enrichment/history/{resource_id} - Enrichment history (supersearch.Service.History)
  • Webhook API β€” (webhook/)
    • POST /api/v2/webhooks - Create webhook (webhook.Service.Create)
    • GET /api/v2/webhooks - List webhooks (webhook.Service.List / ListIter)
    • GET /api/v2/webhooks/{id} - Get webhook (webhook.Service.Get)
    • PATCH /api/v2/webhooks/{id} - Patch webhook (webhook.Service.Update)
    • DELETE /api/v2/webhooks/{id} - Delete webhook (webhook.Service.Delete)
    • GET /api/v2/webhooks/event-types - List event types (webhook.Service.EventTypes)
    • POST /api/v2/webhooks/{id}/test - Send a test delivery (webhook.Service.Test)
    • POST /api/v2/webhooks/{id}/resume - Resume a disabled webhook (webhook.Service.Resume)
  • Webhook Event API β€” (webhookevent/)
    • GET /api/v2/webhook-events - List events (webhookevent.Service.List / ListIter)
    • GET /api/v2/webhook-events/{id} - Get event (webhookevent.Service.Get)
    • GET /api/v2/webhook-events/summary - Overview summary (webhookevent.Service.Summary)
    • GET /api/v2/webhook-events/summary-by-date - Summary by date (webhookevent.Service.SummaryByDate)
  • Workspace API β€” (workspace/)
    • GET /api/v2/workspaces/current - Get current workspace (workspace.Service.Get)
    • PATCH /api/v2/workspaces/current - Patch workspace (workspace.Service.Update)
    • POST /api/v2/workspaces/current/schedule-for-removal - Schedule removal (workspace.Service.ScheduleRemoval)
    • DELETE /api/v2/workspaces/current/schedule-for-removal - Cancel removal (workspace.Service.CancelRemoval)
    • POST /api/v2/workspaces/current/whitelabel-domain - Set agency domain (workspace.Service.SetAgencyDomain)
    • GET /api/v2/workspaces/current/whitelabel-domain - Get domain info (workspace.Service.DomainInfo)
    • DELETE /api/v2/workspaces/current/whitelabel-domain - Delete agency domain (workspace.Service.DeleteAgencyDomain)
    • POST /api/v2/workspaces/current/change-owner - Change owner (workspace.Service.ChangeOwner)
  • Workspace Member API β€” (workspacemember/)
    • POST /api/v2/workspace-members - Invite member (workspacemember.Service.Create)
    • GET /api/v2/workspace-members - List members (workspacemember.Service.List / ListIter)
    • GET /api/v2/workspace-members/{id} - Get member (workspacemember.Service.Get)
    • PATCH /api/v2/workspace-members/{id} - Patch member (workspacemember.Service.Update)
    • DELETE /api/v2/workspace-members/{id} - Remove member (workspacemember.Service.Delete)
  • Workspace Group Member API β€” (workspacegroup/)
    • POST /api/v2/workspace-group-members - Invite sub workspace (workspacegroup.Service.Create)
    • GET /api/v2/workspace-group-members - List group members (workspacegroup.Service.List / ListIter)
    • GET /api/v2/workspace-group-members/{id} - Get group member (workspacegroup.Service.Get)
    • DELETE /api/v2/workspace-group-members/{id} - Remove group member (workspacegroup.Service.Delete)
    • GET /api/v2/workspace-group-members/admin - Get admin workspace (workspacegroup.Service.Admin)
  • Workspace Billing API β€” (workspacebilling/)
    • GET /api/v2/workspace-billing/plan-details - Plan details (workspacebilling.Service.PlanDetails)
    • GET /api/v2/workspace-billing/subscription-details - Subscription details (workspacebilling.Service.SubscriptionDetails)
  • Block List Entry API β€” (blocklist/)
    • POST /api/v2/block-lists-entries - Create entry (blocklist.Service.Create)
    • GET /api/v2/block-lists-entries - List entries (blocklist.Service.List / ListIter)
    • DELETE /api/v2/block-lists-entries - Delete all entries (blocklist.Service.DeleteAll)
    • GET /api/v2/block-lists-entries/{id} - Get entry (blocklist.Service.Get)
    • PATCH /api/v2/block-lists-entries/{id} - Patch entry (blocklist.Service.Update)
    • DELETE /api/v2/block-lists-entries/{id} - Delete entry (blocklist.Service.Delete)
    • POST /api/v2/block-lists-entries/bulk-create - Bulk create (blocklist.Service.BulkCreate)
    • POST /api/v2/block-lists-entries/bulk-delete - Bulk delete (blocklist.Service.BulkDelete)
    • GET /api/v2/block-lists-entries/download - Download CSV, raw bytes (blocklist.Service.Download)
  • Custom Tag API β€” (customtag/)
    • POST /api/v2/custom-tags - Create tag (customtag.Service.Create)
    • GET /api/v2/custom-tags - List tags (customtag.Service.List / ListIter)
    • GET /api/v2/custom-tags/{id} - Get tag (customtag.Service.Get)
    • PATCH /api/v2/custom-tags/{id} - Patch tag (customtag.Service.Update)
    • DELETE /api/v2/custom-tags/{id} - Delete tag (customtag.Service.Delete)
    • POST /api/v2/custom-tags/toggle-resource - Assign/unassign tags (customtag.Service.Toggle)
  • Custom Tag Mapping API β€” (customtagmapping/)
    • GET /api/v2/custom-tag-mappings - List mappings (customtagmapping.Service.List / ListIter)
  • API Key API β€” (apikey/)
    • POST /api/v2/api-keys - Create API key (apikey.Service.Create)
    • GET /api/v2/api-keys - List API keys (apikey.Service.List / ListIter)
    • DELETE /api/v2/api-keys/{id} - Delete API key (apikey.Service.Delete)
  • Audit Log API β€” (auditlog/)
    • GET /api/v2/audit-logs - List audit logs (auditlog.Service.List / ListIter)
  • Background Job API β€” (backgroundjob/)
    • GET /api/v2/background-jobs - List background jobs (backgroundjob.Service.List / ListIter)
    • GET /api/v2/background-jobs/{id} - Get a background job (backgroundjob.Service.Get)
  • CRM Actions API β€” (crm/)
    • GET /api/v2/crm-actions/phone-numbers - List phone numbers (crm.Service.ListPhoneNumbers)
    • DELETE /api/v2/crm-actions/phone-numbers/{id} - Delete a phone number (crm.Service.DeletePhoneNumber)
  • OAuth API β€” (oauth/)
    • POST /api/v2/oauth/google/init - Start a Google OAuth session (oauth.Service.InitGoogle)
    • POST /api/v2/oauth/microsoft/init - Start a Microsoft OAuth session (oauth.Service.InitMicrosoft)
    • GET /api/v2/oauth/session/status/{sessionId} - Poll session status (oauth.Service.SessionStatus)
  • DFY Email Account Order API β€” (dfy/)
    • POST /api/v2/dfy-email-account-orders - Place (or simulate) an order (dfy.Service.Create)
    • GET /api/v2/dfy-email-account-orders - List orders (dfy.Service.List / ListIter)
    • GET /api/v2/dfy-email-account-orders/accounts - List ordered accounts (dfy.Service.ListAccounts / ListAccountsIter)
    • POST /api/v2/dfy-email-account-orders/accounts/cancel - Cancel accounts (dfy.Service.CancelAccounts)
    • POST /api/v2/dfy-email-account-orders/domains/similar - Generate similar domains (dfy.Service.GenerateSimilarDomains)
    • POST /api/v2/dfy-email-account-orders/domains/check - Check domain availability (dfy.Service.CheckDomains)
    • POST /api/v2/dfy-email-account-orders/domains/pre-warmed-up-list - List pre-warmed-up domains (dfy.Service.PreWarmedUpDomains)

Every V2 resource now ships β€” there is no remaining planned coverage.

Notes on the counts. The Analytics area (7 operations) is cross-cutting β€” 3 endpoints live under Account and 4 under Campaign, so they are counted within those resources rather than as a separate group. Three additional tags β€” CustomPromptTemplate, EmailTemplate, and SalesFlow β€” are declared in the V2 API but currently expose no public endpoints.

Adding a resource? Follow the durable recipe in docs/adding-a-resource.md β€” the email package is the reference implementation.

Client Configuration (Functional Options)

The client is immutable after construction: configure it once with functional options. This is safer than mutating shared state and is the idiomatic Go pattern. Available options:

Option Purpose
WithHTTPClient(*http.Client) Custom transport, proxy, or timeout
WithBaseURL(string) Point at a test server or gateway
WithUserAgent(string) Set the User-Agent header
WithHTTPHeader(key, value) Add an extra header to every request
package main

import (
    "net/http"
    "time"

    "github.com/mrz1836/go-instantly"
)

// ....

client := instantly.NewClient("[API-KEY]",
    instantly.WithHTTPClient(&http.Client{Timeout: 30 * time.Second}),
    instantly.WithUserAgent("my-app/1.0"),
)

// ...

Need an endpoint the typed resource packages do not wrap yet? The low-level plumbing is exported as an escape hatch: client.Get, client.Post, client.Patch, client.Put, client.Delete, client.Do, and client.DoRaw (raw bytes, for CSV and other non-JSON responses).

Development Setup (Getting Started)

Install MAGE-X build tool for development:

# Install MAGE-X for development and building
go install github.com/mrz1836/mage-x/cmd/magex@latest
magex update:install
Library Deployment

This project uses goreleaser for streamlined binary and library deployment to GitHub. To get started, install it via:

brew install goreleaser

The release process is defined in the .goreleaser.yml configuration file.

Then create and push a new Git tag using:

magex version:bump bump=patch push=true branch=master

This process ensures consistent, repeatable releases with properly versioned artifacts and citation metadata.

Build Commands

View all build commands

magex help
GitHub Workflows

All workflows are driven by modular configuration in .github/env/ β€” no YAML editing required.

View all workflows and the control center β†’

Updating Dependencies

To update all dependencies (Go modules, linters, and related tools), run:

magex deps:update

This command ensures all dependencies are brought up to date in a single step, including Go modules and any managed tools. It is the recommended way to keep your development environment and CI in sync with the latest versions.


πŸ§ͺ Examples & Tests

All unit tests and fuzz tests run via GitHub Actions and use Go version 1.25.x. View the configuration file.

Run all tests (fast):

magex test

Run all tests with race detector (slower):

magex test:race

Browse the runnable usage samples in examples/examples.go.

Note: the test suite runs entirely against an in-repo mock router. No test contacts the live Instantly.ai API, and the examples file is illustrative β€” it is compiled, never executed by CI.


⚑ Benchmarks

Run the Go benchmarks:

magex bench

πŸ“Š Performance Results

A benchmark suite now covers the hot paths β€” query encoding and path building (Query.Encode, BuildPath), the response-error probe (checkResponse), cursor iteration (Iterate), the reusable list helpers (JoinPath, ApplyOptions), and a representative resource decode and round-trip (CampaignDecode, CampaignGet). Run magex bench to measure them on your own hardware; numbers vary by machine, so they are reproduced locally rather than pinned here.


πŸ› οΈ Code Standards

Read more about this Go project's code standards.


πŸ€– AI Usage & Assistant Guidelines

Read the AI Usage & Assistant Guidelines for details on how AI is used in this project and how to interact with the AI assistants.


πŸ‘₯ Maintainers

MrZ
MrZ

🀝 Contributing

View the contributing guidelines and please follow the code of conduct.

How can I help?

All kinds of contributions are welcome πŸ™Œ! The most basic way to show your support is to star 🌟 the project, or to raise issues πŸ’¬. You can also support this project by becoming a sponsor on GitHub πŸ‘ or by making a bitcoin donation to ensure this journey continues indefinitely! πŸš€

Stars


πŸ“ License

License

About

πŸ“¬ Unofficial Golang Library for the Instantly.ai API (V2)

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

1 star

Watchers

0 watching

Forks

Releases

Sponsor this project

Packages

Used by

Contributors

Languages