{"openapi":"3.1.0","info":{"title":"Instantly Setup (BYOK) API","version":"0.1.0","description":"Instantly Setup (BYOK) lets an AI assistant read your own Instantly Setup data through the Instantly Setup API with a key you supply (API v2 key (needs read scopes such as inbox_placement_tests:read)). Read-only: 11 tools (list_inbox_placement_tests, get_inbox_placement_test, list_inbox_placement_results, list_inbox_placement_reports, list_esp_options, check_tracking_domain, list_custom_tags,...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-instantly-setup.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-instantly-setup/docs"},"termsOfService":"https://connectorbay.com/byok-instantly-setup/terms"},"servers":[{"url":"https://byok-instantly-setup.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-instantly-setup/docs"},"security":[{"upstreamKey":[]}],"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"Optional. A Pro API key raises rate limits; no credentials are required."},"upstreamKey":{"type":"apiKey","in":"header","name":"X-Upstream-Key","description":"Your own key for the service this connector wraps (bring your own key). Used for that one call only; never stored, logged or cached."}},"schemas":{"Error":{"type":"object","properties":{"ok":{"const":false},"error":{"type":"object"}}}}},"paths":{"/v1/tools/list_inbox_placement_tests":{"post":{"operationId":"list_inbox_placement_tests","summary":"List inbox placement (deliverability) tests with name, status, type, delivery mode, sending method, campaign and schedul","description":"List inbox placement (deliverability) tests with name, status, type, delivery mode, sending method, campaign and schedule times. Email subject, body and recipients are not returned. Use for \"Which Instantly inbox placement tests are running\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"How many items to return (1 to 100).","title":"Limit"},"starting_after":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Paging cursor: pass next_starting_after from the previous answer (leave empty for the first page).","title":"Starting After"},"search":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only tests whose name matches this text.","title":"Search"},"status":{"anyOf":[{"maximum":3,"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Only tests with this status code (1, 2 or 3).","title":"Status"},"sort_order":{"anyOf":[{"enum":["asc","desc"],"type":"string"},{"type":"null"}],"default":null,"description":"Sort order by id: asc or desc.","title":"Sort Order"}},"title":"list_inbox_placement_testsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_inbox_placement_test":{"post":{"operationId":"get_inbox_placement_test","summary":"Get one inbox placement test with name, status, type, delivery mode, sending method, campaign and schedule times. Use fo","description":"Get one inbox placement test with name, status, type, delivery mode, sending method, campaign and schedule times. Use for \"Show Instantly inbox placement test 0190aaaa-0000-7000-8000-000000000001\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"test_id":{"description":"The inbox placement test id.","maxLength":80,"title":"Test Id","type":"string"}},"required":["test_id"],"title":"get_inbox_placement_testArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_inbox_placement_results":{"post":{"operationId":"list_inbox_placement_results","summary":"List per-message inbox placement results for a test: whether it landed in spam, sender and recipient ESP codes, region a","description":"List per-message inbox placement results for a test: whether it landed in spam, sender and recipient ESP codes, region and type codes and SPF, DKIM and DMARC pass flags. Recipient and sender addresses are not returned. Use for \"Did my Instantly test emails land in spam and pass SPF, DKIM and DMARC\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"test_id":{"description":"The inbox placement test id, from list_inbox_placement_tests.","maxLength":80,"title":"Test Id","type":"string"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"How many items to return (1 to 100).","title":"Limit"},"starting_after":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Paging cursor: pass next_starting_after from the previous answer (leave empty for the first page).","title":"Starting After"},"date_from":{"anyOf":[{"maxLength":10,"type":"string"},{"type":"null"}],"default":null,"description":"Only records from this date, YYYY-MM-DD.","title":"Date From"},"date_to":{"anyOf":[{"maxLength":10,"type":"string"},{"type":"null"}],"default":null,"description":"Only records up to this date, YYYY-MM-DD.","title":"Date To"}},"required":["test_id"],"title":"list_inbox_placement_resultsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_inbox_placement_reports":{"post":{"operationId":"list_inbox_placement_reports","summary":"List domain reputation reports for a test: sending domain, IP, domain and IP blacklist counts and SpamAssassin score. Us","description":"List domain reputation reports for a test: sending domain, IP, domain and IP blacklist counts and SpamAssassin score. Use for \"Is my Instantly sending domain blacklisted and what is its SpamAssassin score\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"test_id":{"description":"The inbox placement test id, from list_inbox_placement_tests.","maxLength":80,"title":"Test Id","type":"string"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"How many items to return (1 to 100).","title":"Limit"},"starting_after":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Paging cursor: pass next_starting_after from the previous answer (leave empty for the first page).","title":"Starting After"},"date_from":{"anyOf":[{"maxLength":10,"type":"string"},{"type":"null"}],"default":null,"description":"Only records from this date, YYYY-MM-DD.","title":"Date From"},"date_to":{"anyOf":[{"maxLength":10,"type":"string"},{"type":"null"}],"default":null,"description":"Only records up to this date, YYYY-MM-DD.","title":"Date To"},"skip_spam_assassin_report":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":true,"description":"True to leave out the detailed SpamAssassin report.","title":"Skip Spam Assassin Report"},"skip_blacklist_report":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":true,"description":"True to leave out the detailed blacklist report.","title":"Skip Blacklist Report"}},"required":["test_id"],"title":"list_inbox_placement_reportsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_esp_options":{"post":{"operationId":"list_esp_options","summary":"List the recipient email service provider options usable in inbox placement tests (region, sub-region, type and ESP). Us","description":"List the recipient email service provider options usable in inbox placement tests (region, sub-region, type and ESP). Use for \"Which ESPs can Instantly inbox placement tests target\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_esp_optionsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/check_tracking_domain":{"post":{"operationId":"check_tracking_domain","summary":"Check a custom tracking domain: whether it is set up and whether its CNAME and SSL are valid. Use for \"Is my Instantly c","description":"Check a custom tracking domain: whether it is set up and whether its CNAME and SSL are valid. Use for \"Is my Instantly custom tracking domain configured correctly\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"host":{"description":"The custom tracking domain host, for example 'track.example.com'.","maxLength":253,"title":"Host","type":"string"}},"required":["host"],"title":"check_tracking_domainArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_custom_tags":{"post":{"operationId":"list_custom_tags","summary":"List custom tags (labels used on accounts and campaigns) with label, description and dates. Use for \"Which custom tags e","description":"List custom tags (labels used on accounts and campaigns) with label, description and dates. Use for \"Which custom tags exist in my Instantly workspace\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"How many items to return (1 to 100).","title":"Limit"},"starting_after":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Paging cursor: pass next_starting_after from the previous answer (leave empty for the first page).","title":"Starting After"},"search":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only tags matching this text.","title":"Search"}},"title":"list_custom_tagsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_lead_labels":{"post":{"operationId":"list_lead_labels","summary":"List lead labels (interest statuses) with label, positive, neutral or negative interest, description and AI usage flag. ","description":"List lead labels (interest statuses) with label, positive, neutral or negative interest, description and AI usage flag. Use for \"Which lead labels are defined in Instantly\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"How many items to return (1 to 100).","title":"Limit"},"starting_after":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Paging cursor: pass next_starting_after from the previous answer (leave empty for the first page).","title":"Starting After"},"search":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only labels matching this text.","title":"Search"},"interest_status":{"anyOf":[{"enum":["positive","neutral","negative"],"type":"string"},{"type":"null"}],"default":null,"description":"Only labels with this interest: positive, neutral or negative.","title":"Interest Status"}},"title":"list_lead_labelsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_subsequences":{"post":{"operationId":"list_subsequences","summary":"List campaign subsequences with name, parent campaign, status code, daily limit mode and limit and creation time. Sequen","description":"List campaign subsequences with name, parent campaign, status code, daily limit mode and limit and creation time. Sequence steps are not returned. Use for \"Which Instantly subsequences exist for my campaigns\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"How many items to return (1 to 100).","title":"Limit"},"starting_after":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Paging cursor: pass next_starting_after from the previous answer (leave empty for the first page).","title":"Starting After"},"parent_campaign":{"anyOf":[{"maxLength":80,"type":"string"},{"type":"null"}],"default":null,"description":"Only subsequences of this campaign id.","title":"Parent Campaign"},"search":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only subsequences matching this text.","title":"Search"}},"title":"list_subsequencesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_webhooks":{"post":{"operationId":"list_webhooks","summary":"List webhooks with name, event type, campaign filter, status and creation time. Target URLs and headers are not returned","description":"List webhooks with name, event type, campaign filter, status and creation time. Target URLs and headers are not returned. Use for \"Which Instantly webhooks are configured\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"How many items to return (1 to 100).","title":"Limit"},"starting_after":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Paging cursor: pass next_starting_after from the previous answer (leave empty for the first page).","title":"Starting After"},"campaign":{"anyOf":[{"maxLength":80,"type":"string"},{"type":"null"}],"default":null,"description":"Only webhooks for this campaign id.","title":"Campaign"},"event_type":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Only webhooks for this event type, for example reply_received.","title":"Event Type"}},"title":"list_webhooksArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_webhook_event_types":{"post":{"operationId":"list_webhook_event_types","summary":"List the webhook event types Instantly can send, with id, label and type. Use for \"Which webhook events does Instantly s","description":"List the webhook event types Instantly can send, with id, label and type. Use for \"Which webhook events does Instantly support\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_webhook_event_typesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}}}}