{"openapi":"3.1.0","info":{"title":"SendRaven (BYOK) API","version":"0.1.0","description":"SendRaven (BYOK) lets an AI assistant read your own SendRaven data through the SendRaven API with a key you supply (SendRaven API key (starts with sk_live_)). Read-only: 12 tools (list_emails, get_email, get_email_metrics, list_threads, get_usage, list_audiences, list_segments, count_segment, list_automations, list_campaigns, get_campaign, list_domains). The BYOK key travels with each request, is...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-sendraven.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-sendraven/docs"},"termsOfService":"https://connectorbay.com/byok-sendraven/terms"},"servers":[{"url":"https://byok-sendraven.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-sendraven/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_emails":{"post":{"operationId":"list_emails","summary":"List emails sent through the account, newest first, with sender, recipients, subject, status (queued, sent, delivered, b","description":"List emails sent through the account, newest first, with sender, recipients, subject, status (queued, sent, delivered, bounced, complained, failed ...), and send, open and click times. Use for \"Which emails bounced recently\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"status":{"anyOf":[{"enum":["queued","scheduled","sent","delivered","bounced","complained","rejected","canceled","failed"],"type":"string"},{"type":"null"}],"default":null,"description":"Only messages with exactly this status.","title":"Status"},"to":{"anyOf":[{"maxLength":320,"type":"string"},{"type":"null"}],"default":null,"description":"Only messages sent to this exact address (compared lowercase).","title":"To"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many items to return per page (1 to 100).","title":"Limit"},"cursor":{"anyOf":[{"maxLength":500,"type":"string"},{"type":"null"}],"default":null,"description":"Paging cursor: pass next_cursor from the previous answer unchanged to get the next page.","title":"Cursor"}},"title":"list_emailsArguments","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_email":{"post":{"operationId":"get_email","summary":"Get one email by its message id with its delivery event timeline (send, delivery, bounce, complaint, open, click). Use f","description":"Get one email by its message id with its delivery event timeline (send, delivery, bounce, complaint, open, click). Use for \"What happened to email 7b1f0f3e-0000-4000-8000-000000000001\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"email_id":{"description":"The message id (a UUID) from list_emails; not a provider message id.","maxLength":64,"title":"Email Id","type":"string"}},"required":["email_id"],"title":"get_emailArguments","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_email_metrics":{"post":{"operationId":"get_email_metrics","summary":"Get sending metrics for a period: totals and rates for sent, delivered, opened, clicked, bounced and complaints, plus a ","description":"Get sending metrics for a period: totals and rates for sent, delivered, opened, clicked, bounced and complaints, plus a per-day breakdown. Use for \"What was my email delivery and bounce rate over the last 30 days\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"days":{"anyOf":[{"maximum":365,"minimum":1,"type":"integer"},{"type":"null"}],"default":30,"description":"Length of the window in days (1 to 365).","title":"Days"}},"title":"get_email_metricsArguments","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_threads":{"post":{"operationId":"list_threads","summary":"List email conversations with subject, participants, message count, whether they await a reply and the last message time","description":"List email conversations with subject, participants, message count, whether they await a reply and the last message time. Use for \"Which email conversations are waiting for a reply\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"awaiting_reply":{"anyOf":[{"enum":["true","false"],"type":"string"},{"type":"null"}],"default":null,"description":"true for threads waiting for an answer, false for the rest.","title":"Awaiting Reply"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many items to return per page (1 to 100).","title":"Limit"},"cursor":{"anyOf":[{"maxLength":500,"type":"string"},{"type":"null"}],"default":null,"description":"Paging cursor: pass next_cursor from the previous answer unchanged to get the next page.","title":"Cursor"}},"title":"list_threadsArguments","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_usage":{"post":{"operationId":"get_usage","summary":"Show the plan and usage of the account: plan name, emails included and used in the billing period, period dates, estimat","description":"Show the plan and usage of the account: plan name, emails included and used in the billing period, period dates, estimated cost, and whether sending is locked and why. Use for \"How many emails have I sent this billing period and am I near my plan limit\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"get_usageArguments","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_audiences":{"post":{"operationId":"list_audiences","summary":"List contact audiences with name, number of contacts and creation time. Use for \"Which audiences do I have and how big a","description":"List contact audiences with name, number of contacts and creation time. Use for \"Which audiences do I have and how big are they\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many items to return per page (1 to 100).","title":"Limit"},"cursor":{"anyOf":[{"maxLength":500,"type":"string"},{"type":"null"}],"default":null,"description":"Paging cursor: pass next_cursor from the previous answer unchanged to get the next page.","title":"Cursor"}},"title":"list_audiencesArguments","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_segments":{"post":{"operationId":"list_segments","summary":"List saved segments with their engagement rules (opened or clicked within N days, unengaged exclusion, topic) and audien","description":"List saved segments with their engagement rules (opened or clicked within N days, unengaged exclusion, topic) and audience. Use for \"Which segments have I defined\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_segmentsArguments","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/count_segment":{"post":{"operationId":"count_segment","summary":"Count the contacts currently in one segment. Use for \"How many contacts are in my engaged segment\".","description":"Count the contacts currently in one segment. Use for \"How many contacts are in my engaged segment\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"segment_id":{"description":"The segment's id (a UUID) from list_segments.","maxLength":64,"title":"Segment Id","type":"string"}},"required":["segment_id"],"title":"count_segmentArguments","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_automations":{"post":{"operationId":"list_automations","summary":"List email automations with name, status (draft, active, paused), sender, re-enrollment rule and timestamps. Use for \"Wh","description":"List email automations with name, status (draft, active, paused), sender, re-enrollment rule and timestamps. Use for \"Which of my email automations are active\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many items to return per page (1 to 100).","title":"Limit"},"cursor":{"anyOf":[{"maxLength":500,"type":"string"},{"type":"null"}],"default":null,"description":"Paging cursor: pass next_cursor from the previous answer unchanged to get the next page.","title":"Cursor"}},"title":"list_automationsArguments","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_campaigns":{"post":{"operationId":"list_campaigns","summary":"List email campaigns (broadcasts) with name, subject, status, schedule, recipient and sent counts, and failure reason. U","description":"List email campaigns (broadcasts) with name, subject, status, schedule, recipient and sent counts, and failure reason. Use for \"How did my last email campaigns do\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many items to return per page (1 to 100).","title":"Limit"},"cursor":{"anyOf":[{"maxLength":500,"type":"string"},{"type":"null"}],"default":null,"description":"Paging cursor: pass next_cursor from the previous answer unchanged to get the next page.","title":"Cursor"}},"title":"list_campaignsArguments","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_campaign":{"post":{"operationId":"get_campaign","summary":"Get one campaign by id: subject, sender name, status, schedule, recipient, sent and failed counts, segment rules, A/B va","description":"Get one campaign by id: subject, sender name, status, schedule, recipient, sent and failed counts, segment rules, A/B variants and warnings. The HTML body is not returned. Use for \"Show the details of campaign b1\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"campaign_id":{"description":"The campaign's id (a UUID) from list_campaigns.","maxLength":64,"title":"Campaign Id","type":"string"}},"required":["campaign_id"],"title":"get_campaignArguments","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_domains":{"post":{"operationId":"list_domains","summary":"List sending domains with verification status (pending, verified, failed), risk class and verification time. Use for \"Ar","description":"List sending domains with verification status (pending, verified, failed), risk class and verification time. Use for \"Are my sending domains verified\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_domainsArguments","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}}}}