{"openapi":"3.1.0","info":{"title":"Woodpecker (BYOK) API","version":"0.1.0","description":"Woodpecker (BYOK) lets an AI assistant read your own Woodpecker data through the Woodpecker API with a key you supply (Woodpecker API key (needs the API add-on)). Read-only: 8 tools (list_campaigns, get_campaign_stats, list_prospects, list_mailboxes, list_users, list_linkedin_accounts, list_blacklisted_emails, list_blacklisted_domains). The BYOK key travels with each request, is used for that one...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-woodpecker.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-woodpecker/docs"},"termsOfService":"https://connectorbay.com/byok-woodpecker/terms"},"servers":[{"url":"https://byok-woodpecker.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-woodpecker/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_campaigns":{"post":{"operationId":"list_campaigns","summary":"List Woodpecker campaigns with status, folder, sender addresses and daily limit. Filter by status. Returns an empty answ","description":"List Woodpecker campaigns with status, folder, sender addresses and daily limit. Filter by status. Returns an empty answer when none match. Use for \"Which Woodpecker campaigns are running\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"status":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated statuses to keep: RUNNING, DRAFT, EDITED, PAUSED, STOPPED, COMPLETED.","title":"Status"},"id":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated campaign ids to keep.","title":"Id"}},"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_stats":{"post":{"operationId":"get_campaign_stats","summary":"Get one Woodpecker campaign with its statistics: prospects, delivered, bounced, opened, clicked, replied, opted out and ","description":"Get one Woodpecker campaign with its statistics: prospects, delivered, bounced, opened, clicked, replied, opted out and interest counts. Email-step content is left out. Use for \"How is Woodpecker campaign 12345 performing\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"id":{"description":"A single numeric campaign id (several ids return a list without statistics).","maxLength":20,"title":"Id","type":"string"}},"required":["id"],"title":"get_campaign_statsArguments","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_prospects":{"post":{"operationId":"list_prospects","summary":"List Woodpecker prospects (up to 1000 per page) with name, email, company, title, global status and last contact date. F","description":"List Woodpecker prospects (up to 1000 per page) with name, email, company, title, global status and last contact date. Filter by status, interest or activity. Use for \"Which Woodpecker prospects have replied\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"status":{"anyOf":[{"enum":["ACTIVE","BOUNCED","REPLIED","BLACKLIST","INVALID"],"type":"string"},{"type":"null"}],"default":null,"description":"Global prospect status.","title":"Status"},"contacted":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"True for prospects that were ever contacted.","title":"Contacted"},"interested":{"anyOf":[{"enum":["INTERESTED","MAYBE-LATER","NOT-INTERESTED","NOT-MARKED"],"type":"string"},{"type":"null"}],"default":null,"description":"Interest level set in any campaign.","title":"Interested"},"activity":{"anyOf":[{"enum":["OPENED","NOT-OPENED","CLICKED","NOT-CLICKED"],"type":"string"},{"type":"null"}],"default":null,"description":"Email activity filter.","title":"Activity"},"sort":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Sort fields, '+' ascending or '-' descending before the name, for example -last_contacted. Comma-separated.","title":"Sort"},"per_page":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"How many prospects per page (1 to 1000; API default 100).","title":"Per Page"},"page":{"anyOf":[{"maximum":100000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"}},"title":"list_prospectsArguments","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_mailboxes":{"post":{"operationId":"list_mailboxes","summary":"List the email accounts connected to Woodpecker (SMTP and IMAP) with provider, address, errors, daily limit, sent today ","description":"List the email accounts connected to Woodpecker (SMTP and IMAP) with provider, address, errors, daily limit, sent today and warm-up status. Passwords are never returned. Use for \"Which mailboxes are connected to Woodpecker and are any in error\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_mailboxesArguments","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_users":{"post":{"operationId":"list_users","summary":"List the active users of your Woodpecker account (50 per page) with name, email and role. Use for \"Who are the users on ","description":"List the active users of your Woodpecker account (50 per page) with name, email and role. Use for \"Who are the users on my Woodpecker account\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"sort":{"anyOf":[{"enum":["+id","-id"],"type":"string"},{"type":"null"}],"default":null,"description":"+id or -id.","title":"Sort"},"page":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Page number, starting at 0.","title":"Page"}},"title":"list_usersArguments","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_linkedin_accounts":{"post":{"operationId":"list_linkedin_accounts","summary":"List the LinkedIn accounts connected to Woodpecker with connection status, name and subscription level. Use for \"Are my ","description":"List the LinkedIn accounts connected to Woodpecker with connection status, name and subscription level. Use for \"Are my LinkedIn accounts connected to Woodpecker\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"status":{"anyOf":[{"enum":["CONNECTED","DISCONNECTED","WAITING_FOR_CONNECTION"],"type":"string"},{"type":"null"}],"default":null,"description":"Only accounts with this connection status.","title":"Status"}},"title":"list_linkedin_accountsArguments","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_blacklisted_emails":{"post":{"operationId":"list_blacklisted_emails","summary":"List emails on the Woodpecker do-not-contact list, optionally checking specific addresses (wildcard * allowed). Up to 50","description":"List emails on the Woodpecker do-not-contact list, optionally checking specific addresses (wildcard * allowed). Up to 500 per page. Use for \"Is jane@example.com on the Woodpecker blacklist\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"email_filter":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated emails to check; use * as a wildcard, for example jimothy@woodpecker*.","title":"Email Filter"},"per_page":{"anyOf":[{"maximum":500,"minimum":1,"type":"integer"},{"type":"null"}],"default":100,"description":"How many emails per page (1 to 500).","title":"Per Page"},"page":{"anyOf":[{"maximum":100000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number.","title":"Page"}},"title":"list_blacklisted_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/list_blacklisted_domains":{"post":{"operationId":"list_blacklisted_domains","summary":"List domains on the Woodpecker do-not-contact list. Use for \"Which domains are blacklisted in Woodpecker\".","description":"List domains on the Woodpecker do-not-contact list. Use for \"Which domains are blacklisted in Woodpecker\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"domain_filter":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated domains to check; use * as a wildcard, for example woodpecker*.","title":"Domain Filter"},"per_page":{"anyOf":[{"maximum":500,"minimum":1,"type":"integer"},{"type":"null"}],"default":100,"description":"How many domains per page (1 to 500).","title":"Per Page"},"page":{"anyOf":[{"maximum":100000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number.","title":"Page"}},"title":"list_blacklisted_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}}}}