{"openapi":"3.0.0","info":{"description":"SendFox email marketing API - contacts with engagement filters and bulk actions, contact tags, lists, campaigns with scheduling and statistics, forms, automations, sender domains and custom contact fields (SendFox)","version":"1.4.0"},"servers":[{"description":"SendFox email marketing API - contacts with engagement filters and bulk actions, contact tags, lists, campaigns with scheduling and statistics, forms, automations, sender domains and custom contact fields (SendFox)","url":"https://api.apirails.com/sendfox"}],"paths":{"/contacts":{"get":{"tags":["Contacts"],"parameters":[{"name":"count_only","in":"query","description":"Count Only","required":false,"schema":{"type":"boolean","example":"","items":{"type":"string","enum":[true,false]}}},{"name":"email","in":"query","description":"Email","required":false,"schema":{"type":"string","example":""}},{"name":"filter[created_after]","in":"query","description":"Filter Created After","required":false,"schema":{"type":"string","example":""}},{"name":"filter[created_before]","in":"query","description":"Filter Created Before","required":false,"schema":{"type":"string","example":""}},{"name":"filter[in_list_ids]","in":"query","description":"Filter In List Ids","required":false,"schema":{"type":"array","example":""}},{"name":"filter[last_clicked_after]","in":"query","description":"Filter Last Clicked After","required":false,"schema":{"type":"string","example":""}},{"name":"filter[last_clicked_before]","in":"query","description":"Filter Last Clicked Before","required":false,"schema":{"type":"string","example":""}},{"name":"filter[last_opened_after]","in":"query","description":"Filter Last Opened After","required":false,"schema":{"type":"string","example":""}},{"name":"filter[last_opened_before]","in":"query","description":"Filter Last Opened Before","required":false,"schema":{"type":"string","example":""}},{"name":"filter[last_sent_after]","in":"query","description":"Filter Last Sent After","required":false,"schema":{"type":"string","example":""}},{"name":"filter[last_sent_before]","in":"query","description":"Filter Last Sent Before","required":false,"schema":{"type":"string","example":""}},{"name":"filter[never_clicked]","in":"query","description":"Filter Never Clicked","required":false,"schema":{"type":"boolean","example":"","items":{"type":"string","enum":[true,false]}}},{"name":"filter[never_opened]","in":"query","description":"Filter Never Opened","required":false,"schema":{"type":"boolean","example":"","items":{"type":"string","enum":[true,false]}}},{"name":"filter[never_sent]","in":"query","description":"Filter Never Sent","required":false,"schema":{"type":"boolean","example":"","items":{"type":"string","enum":[true,false]}}},{"name":"filter[not_in_list_ids]","in":"query","description":"Filter Not In List Ids","required":false,"schema":{"type":"array","example":""}},{"name":"filter[not_tag_ids]","in":"query","description":"Filter Not Tag Ids","required":false,"schema":{"type":"array","example":""}},{"name":"filter[status]","in":"query","description":"Filter Status","required":false,"schema":{"type":"string","example":"","items":{"type":"string","enum":["active","engaged","inactive","new","unconfirmed","unsubscribed","bounced","invalid"]}}},{"name":"filter[tag_ids]","in":"query","description":"Filter Tag Ids","required":false,"schema":{"type":"array","example":""}},{"name":"per_page","in":"query","description":"Per Page","required":false,"schema":{"type":"number","example":""}},{"name":"query","in":"query","description":"Query","required":false,"schema":{"type":"string","example":""}},{"name":"unsubscribed","in":"query","description":"Unsubscribed","required":false,"schema":{"type":"boolean","example":"","items":{"type":"string","enum":[true,false]}}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://sendfox.com/developer/docs/#operation/listContacts","api_endpoint":"https://api.sendfox.com/contacts"},"summary":"List contacts","description":"Returns a paginated list of contacts (100 per page by default, up to 1000 via `per_page`). Supports engagement filtering through `filter[...]` query parameters, so you can answer questions like \"who last opened over a year ago\" without paging the whole account. All filter conditions are AND-ed. Pass `count_only=true` to get just the number of matches - the cheapest way to size an audience before acting on it.","security":[{"bearerAuth":[]}]},"post":{"tags":["Contacts"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://sendfox.com/developer/docs/#operation/createContact","api_endpoint":"https://api.sendfox.com/contacts"},"summary":"Create a new contact","description":"Create a new contact","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"contact_fields":{"type":"array","description":"Contact Fields","items":{"type":"object","properties":{"name":{"type":"string","description":"Name"},"value":{"type":"string","description":"Value"}}}},"email":{"type":"string","description":"Email","required":true},"first_name":{"type":"string","description":"First Name"},"ip_address":{"type":"string","description":"Ip Address"},"last_name":{"type":"string","description":"Last Name"},"lists":{"type":"array","description":"Array of list IDs to add the contact to","items":{"type":"number"}}}},"example":{"contact_fields":[{"name":"field","value":"x"}],"email":"user@example.com","first_name":"string","ip_address":"string","last_name":"string","lists":[1,2]}}}}}},"/contacts/{id}":{"get":{"tags":["Contacts"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://sendfox.com/developer/docs/#operation/getContact","api_endpoint":"https://api.sendfox.com/contacts/{id}"},"summary":"Get a specific contact","description":"Get a specific contact","security":[{"bearerAuth":[]}]},"patch":{"tags":["Contacts"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://sendfox.com/developer/docs/#operation/updateContact","api_endpoint":"https://api.sendfox.com/contacts/{id}"},"summary":"Update a contact","description":"Update contact details including name, list memberships, and custom fields","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"contact_fields":{"type":"array","description":"Contact Fields","items":{"type":"object","properties":{"name":{"type":"string","description":"Name"},"value":{"type":"string","description":"Value"}}}},"first_name":{"type":"string","description":"First Name"},"last_name":{"type":"string","description":"Last Name"},"lists":{"type":"array","description":"Array of list IDs (replaces all current list memberships)","items":{"type":"number"}}}},"example":{"contact_fields":[{"name":"field","value":"x"}],"first_name":"string","last_name":"string","lists":[1,2]}}}}},"delete":{"tags":["Contacts"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://sendfox.com/developer/docs/#operation/deleteContact","api_endpoint":"https://api.sendfox.com/contacts/{id}"},"summary":"Delete a contact","description":"Soft-deletes a contact and cancels any scheduled deliverables","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{}},"example":{}}}}}},"/contacts/{id}/activity":{"get":{"tags":["Contacts"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://sendfox.com/developer/docs/#operation/getContactActivity","api_endpoint":"https://api.sendfox.com/contacts/{id}/activity"},"summary":"Get email activity for a contact","description":"Returns paginated email deliverables and contact-level engagement summary","security":[{"bearerAuth":[]}]}},"/contacts/batch":{"post":{"tags":["Contacts"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://sendfox.com/developer/docs/#operation/batchImportContacts","api_endpoint":"https://api.sendfox.com/contacts/batch"},"summary":"Batch import contacts","description":"Import up to 1,000 contacts in a single request. Creates new contacts or updates existing ones.","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"contacts":{"type":"array","description":"Contacts","required":true,"items":{"type":"object","properties":{"email":{"type":"string","description":"Email","required":true},"first_name":{"type":"string","description":"First Name"},"last_name":{"type":"string","description":"Last Name"},"lists":{"type":"array","description":"Lists"}}}}}},"example":{"contacts":[{"name":"field","value":"x"}]}}}}}},"/contacts/bulk-actions":{"post":{"tags":["Contacts"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://sendfox.com/developer/docs/#operation/createBulkContactAction","api_endpoint":"https://api.sendfox.com/contacts/bulk-actions"},"summary":"Apply a tag or list change to every contact matching a filter","description":"Queues one action against every contact the filter matches, applied in chunks in the background. Returns immediately with an id to poll. **Run with `dry_run: true` first.** A dry run reports how many contacts match and changes nothing - it is the only way to catch a filter that matches more than intended, and a bulk write is not undoable. An empty filter (which would match the whole account) is rejected unless it is a dry run. Per-campaign conditions (`opened_campaign_id`, `not_opened_campaign_id`, `clicked_campaign_id`) are available here but not on `GET /contacts`, because they are resolved in the background rather than inside a request. Bulk delete and bulk unsubscribe are deliberately not offered.","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"action":{"type":"string","description":"Action","required":true,"enum":["apply_tag","remove_tag","add_to_list","remove_from_list"]},"dry_run":{"type":"boolean","description":"When true, only count the matches - nothing is modified","enum":[true,false]},"filter":{"type":"object","description":"An engagement filter over the account's contacts. Every condition is AND-ed. Omitting the object entirely means \"all contacts\".","properties":{"clicked_campaign_id":{"type":"number","description":"Bulk actions only - not available on GET /contacts"},"created_after":{"type":"string","description":"Created After"},"created_before":{"type":"string","description":"Created Before"},"in_list_ids":{"type":"array","description":"In List Ids"},"last_clicked_after":{"type":"string","description":"Last Clicked After"},"last_clicked_before":{"type":"string","description":"Last Clicked Before"},"last_opened_after":{"type":"string","description":"Last Opened After"},"last_opened_before":{"type":"string","description":"Excludes contacts who never opened - use never_opened for those"},"last_sent_after":{"type":"string","description":"Last Sent After"},"last_sent_before":{"type":"string","description":"Last Sent Before"},"never_clicked":{"type":"boolean","description":"Never Clicked","enum":[true,false]},"never_opened":{"type":"boolean","description":"Never Opened","enum":[true,false]},"never_sent":{"type":"boolean","description":"Never Sent","enum":[true,false]},"not_in_list_ids":{"type":"array","description":"Not In List Ids"},"not_opened_campaign_id":{"type":"number","description":"Contacts the campaign sent to who did not open it. Bulk actions only - not available on GET /contacts"},"not_tag_ids":{"type":"array","description":"Not Tag Ids"},"opened_campaign_id":{"type":"number","description":"Bulk actions only - not available on GET /contacts"},"status":{"type":"string","description":"Status","enum":["active","engaged","inactive","new","unconfirmed","unsubscribed","bounced","invalid"]},"tag_ids":{"type":"array","description":"Tag Ids"}}},"target_id":{"type":"number","description":"The tag id (apply_tag/remove_tag) or list id (add_to_list/remove_from_list)","required":true}}},"example":{"action":"apply_tag","dry_run":"","filter":{},"target_id":1}}}}}},"/contacts/bulk-actions/{id}":{"get":{"tags":["Contacts"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://sendfox.com/developer/docs/#operation/getBulkContactAction","api_endpoint":"https://api.sendfox.com/contacts/bulk-actions/{id}"},"summary":"Check the progress of a bulk contact action","description":"For a dry run, matched_count is the answer and nothing was modified. A run whose match set exceeds the per-request ceiling fails without applying anything.","security":[{"bearerAuth":[]}]}},"/contacts/unsubscribed":{"get":{"tags":["Contacts"],"parameters":[{"name":"query","in":"query","description":"Query","required":false,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://sendfox.com/developer/docs/#operation/listUnsubscribedContacts","api_endpoint":"https://api.sendfox.com/contacts/unsubscribed"},"summary":"List unsubscribed contacts","description":"List unsubscribed contacts","security":[{"bearerAuth":[]}]}},"/unsubscribe":{"patch":{"tags":["Contacts"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://sendfox.com/developer/docs/#operation/unsubscribeContact","api_endpoint":"https://api.sendfox.com/unsubscribe"},"summary":"Unsubscribe a contact by email","description":"Unsubscribe a contact by email","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"email":{"type":"string","description":"Email","required":true}}},"example":{"email":"user@example.com"}}}}}},"/contact-tags":{"get":{"tags":["Contact Tags"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://sendfox.com/developer/docs/#operation/listContactTags","api_endpoint":"https://api.sendfox.com/contact-tags"},"summary":"List contact tags","description":"Lists the account's tags, newest first, each with its contact count. Distinct from the legacy /tags endpoints, which operate on lists.","security":[{"bearerAuth":[]}]},"post":{"tags":["Contact Tags"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://sendfox.com/developer/docs/#operation/createContactTag","api_endpoint":"https://api.sendfox.com/contact-tags"},"summary":"Create a contact tag","description":"Creates a tag. A brand color is auto-assigned when none is provided. Tag names are unique per account.","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"color":{"type":"string","description":"Optional brand palette hex color; auto-assigned when omitted."},"name":{"type":"string","description":"Name","required":true}}},"example":{"color":"string","name":"string"}}}}}},"/contact-tags/{id}":{"get":{"tags":["Contact Tags"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://sendfox.com/developer/docs/#operation/getContactTag","api_endpoint":"https://api.sendfox.com/contact-tags/{id}"},"summary":"Get a contact tag","description":"Get a contact tag","security":[{"bearerAuth":[]}]},"patch":{"tags":["Contact Tags"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://sendfox.com/developer/docs/#operation/updateContactTag","api_endpoint":"https://api.sendfox.com/contact-tags/{id}"},"summary":"Update a contact tag","description":"Update a contact tag","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"color":{"type":"string","description":"Color"},"name":{"type":"string","description":"Name"}}},"example":{"color":"string","name":"string"}}}}},"delete":{"tags":["Contact Tags"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://sendfox.com/developer/docs/#operation/deleteContactTag","api_endpoint":"https://api.sendfox.com/contact-tags/{id}"},"summary":"Delete a contact tag","description":"Deletes the tag. Tagged contacts are kept - only the tag and its attachments (including campaign audience use) are removed.","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{}},"example":{}}}}}},"/contacts/{contact_id}/tags":{"get":{"tags":["Contact Tags"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://sendfox.com/developer/docs/#operation/listContactTagsForContact","api_endpoint":"https://api.sendfox.com/contacts/{contact_id}/tags"},"summary":"List a contact's tags","description":"List a contact's tags","security":[{"bearerAuth":[]}]}},"/contacts/{contact_id}/tags/{tag_id}":{"post":{"tags":["Contact Tags"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://sendfox.com/developer/docs/#operation/attachContactTag","api_endpoint":"https://api.sendfox.com/contacts/{contact_id}/tags/{tag_id}"},"summary":"Attach a tag to a contact","description":"Idempotent. Returns the contact's tags after the change.","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{}},"example":{}}}}},"delete":{"tags":["Contact Tags"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://sendfox.com/developer/docs/#operation/detachContactTag","api_endpoint":"https://api.sendfox.com/contacts/{contact_id}/tags/{tag_id}"},"summary":"Remove a tag from a contact","description":"Remove a tag from a contact","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{}},"example":{}}}}}},"/campaigns":{"get":{"tags":["Campaigns"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://sendfox.com/developer/docs/#operation/listCampaigns","api_endpoint":"https://api.sendfox.com/campaigns"},"summary":"List campaigns","description":"Returns a paginated list of campaigns (100 per page)","security":[{"bearerAuth":[]}]},"post":{"tags":["Campaigns"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://sendfox.com/developer/docs/#operation/createCampaign","api_endpoint":"https://api.sendfox.com/campaigns"},"summary":"Create a new campaign","description":"Creates a campaign as a draft. To send it, use the send endpoint or provide scheduled_at. Subject lines cannot start with \"RE:\" or \"FWD:\". At least one list is required if scheduled_at is provided.","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"excluded_contact_tags":{"type":"array","description":"Tag IDs whose contacts should be excluded from the send. Exclusion wins over inclusion.","items":{"type":"number"}},"excluded_lists":{"type":"array","description":"List IDs whose contacts should be excluded from the send. Exclusion wins over inclusion.","items":{"type":"number"}},"from_email":{"type":"string","description":"From Email","required":true},"from_name":{"type":"string","description":"From Name","required":true},"html":{"type":"string","description":"Email body HTML content","required":true},"lists":{"type":"array","description":"Array of list IDs to send to","items":{"type":"number"}},"preview_text":{"type":"string","description":"Inbox preview snippet shown beneath the subject line. Optional."},"scheduled_at":{"type":"string","description":"Schedule send time (omit for draft). Must include at least one list."},"subject":{"type":"string","description":"Subject","required":true},"title":{"type":"string","description":"Title","required":true},"to_contact_tags":{"type":"array","description":"Tag IDs whose contacts should receive the campaign. Can be combined with lists.","items":{"type":"number"}}}},"example":{"excluded_contact_tags":[1,2],"excluded_lists":[1,2],"from_email":"user@example.com","from_name":"string","html":"string","lists":[1,2],"preview_text":"string","scheduled_at":"2026-01-15T00:00:00Z","subject":"string","title":"string","to_contact_tags":[1,2]}}}}}},"/campaigns/{id}":{"get":{"tags":["Campaigns"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://sendfox.com/developer/docs/#operation/getCampaign","api_endpoint":"https://api.sendfox.com/campaigns/{id}"},"summary":"Get a specific campaign","description":"Get a specific campaign","security":[{"bearerAuth":[]}]},"patch":{"tags":["Campaigns"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://sendfox.com/developer/docs/#operation/updateCampaign","api_endpoint":"https://api.sendfox.com/campaigns/{id}"},"summary":"Update a draft campaign","description":"Only draft campaigns (not yet sent) can be updated. All fields are optional.","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"excluded_contact_tags":{"type":"array","description":"Replaces the excluded tag audience (contacts carrying these tags are removed from the send).","items":{"type":"number"}},"excluded_lists":{"type":"array","description":"Replaces the excluded lists (contacts in these lists are removed from the send).","items":{"type":"number"}},"from_email":{"type":"string","description":"From Email"},"from_name":{"type":"string","description":"From Name"},"html":{"type":"string","description":"Html"},"lists":{"type":"array","description":"Replaces all list assignments","items":{"type":"number"}},"preview_text":{"type":"string","description":"Inbox preview snippet. Pass null to clear."},"scheduled_at":{"type":"string","description":"Set to null to unschedule, or a datetime to schedule"},"subject":{"type":"string","description":"Subject"},"title":{"type":"string","description":"Title"},"to_contact_tags":{"type":"array","description":"Replaces the included tag audience (contacts carrying these tags receive the campaign).","items":{"type":"number"}}}},"example":{"excluded_contact_tags":[1,2],"excluded_lists":[1,2],"from_email":"user@example.com","from_name":"string","html":"string","lists":[1,2],"preview_text":"string","scheduled_at":"2026-01-15T00:00:00Z","subject":"string","title":"string","to_contact_tags":[1,2]}}}}},"delete":{"tags":["Campaigns"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://sendfox.com/developer/docs/#operation/deleteCampaign","api_endpoint":"https://api.sendfox.com/campaigns/{id}"},"summary":"Delete a draft campaign","description":"Only draft campaigns (not yet sent) can be deleted. Uses soft delete.","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{}},"example":{}}}}}},"/campaigns/{id}/send":{"post":{"tags":["Campaigns"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://sendfox.com/developer/docs/#operation/sendCampaign","api_endpoint":"https://api.sendfox.com/campaigns/{id}/send"},"summary":"Send a campaign immediately","description":"Schedules a draft campaign for immediate sending. The campaign must: - Not already be sent or scheduled - Have at least one list assigned - Not be a confirmation (double opt-in) email - those are delivered to each contact as they subscribe, never as a broadcast - The user must not be in a warmup/throttle period All existing abuse prevention applies automatically: content approval workflow, sending throttles, spam detection, and bounce rate monitoring.","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{}},"example":{}}}}}},"/campaigns/{id}/stats":{"get":{"tags":["Campaigns"],"parameters":[{"name":"include_link_stats","in":"query","description":"Include Link Stats","required":false,"schema":{"type":"boolean","example":"","items":{"type":"string","enum":[true,false]}}},{"name":"link_limit","in":"query","description":"Link Limit","required":false,"schema":{"type":"number","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://sendfox.com/developer/docs/#operation/getCampaignStats","api_endpoint":"https://api.sendfox.com/campaigns/{id}/stats"},"summary":"Get campaign performance statistics","description":"Returns sent count and open/click/bounce/unsubscribe/spam counts and rates, all read from stored counters. Pass `include_link_stats=true` to also get `link_stats` - the campaign's links ranked by click count. That part is opt-in because it counts rows in `email_link_clicks` once per link rather than reading a counter, so leaving it off keeps this endpoint as cheap as it has always been.","security":[{"bearerAuth":[]}]}},"/campaigns/{id}/engagement":{"get":{"tags":["Campaigns"],"parameters":[{"name":"type","in":"query","description":"Type","required":true,"schema":{"type":"string","example":"","items":{"type":"string","enum":["openers","clickers","non_openers","bounced","unsubscribed"]}}},{"name":"per_page","in":"query","description":"Per Page","required":false,"schema":{"type":"number","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://sendfox.com/developer/docs/#operation/listCampaignEngagement","api_endpoint":"https://api.sendfox.com/campaigns/{id}/engagement"},"summary":"List the contacts behind a campaign's engagement","description":"Returns the contacts in one of a sent campaign's engagement groups. non_openers covers contacts the campaign actually sent to who did not open it - queued and cancelled deliverables are excluded, since they never had the chance.","security":[{"bearerAuth":[]}]}},"/campaigns/{id}/resend":{"post":{"tags":["Campaigns"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://sendfox.com/developer/docs/#operation/resendCampaign","api_endpoint":"https://api.sendfox.com/campaigns/{id}/resend"},"summary":"Clone a sent campaign at part of its original audience","description":"Creates a new draft with the original's content, sender, and exclusions, aimed at the chosen slice of the original audience. Omit scheduled_at to leave it as a draft. The source campaign's lists are deliberately not carried over - the engagement segment is the audience.","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"audience":{"type":"string","description":"Audience","required":true,"enum":["non_openers","openers","clickers"]},"scheduled_at":{"type":"string","description":"Optional send time; omit to leave the resend as a draft"},"subject":{"type":"string","description":"Optional new subject line; defaults to the original's"},"title":{"type":"string","description":"Optional internal name; defaults to \"Resend: <original title>\""}}},"example":{"audience":"non_openers","scheduled_at":"2026-01-15T00:00:00Z","subject":"string","title":"string"}}}}}},"/forms":{"get":{"tags":["Forms"],"parameters":[{"name":"query","in":"query","description":"Query","required":false,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://sendfox.com/developer/docs/#operation/listForms","api_endpoint":"https://api.sendfox.com/forms"},"summary":"List forms","description":"List forms","security":[{"bearerAuth":[]}]},"post":{"tags":["Forms"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://sendfox.com/developer/docs/#operation/createForm","api_endpoint":"https://api.sendfox.com/forms"},"summary":"Create a new form","description":"Creates a subscription form linked to one or more lists. Free users are limited to 1 form.","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"gdpr_required":{"type":"boolean","description":"Whether GDPR consent checkbox is required","enum":[true,false]},"lists":{"type":"array","description":"Array of list IDs to attach","required":true,"items":{"type":"number"}},"redirect_url":{"type":"string","description":"URL to redirect to after subscription"},"title":{"type":"string","description":"Title","required":true}}},"example":{"gdpr_required":"","lists":[1,2],"redirect_url":"string","title":"string"}}}}}},"/forms/{id}":{"get":{"tags":["Forms"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://sendfox.com/developer/docs/#operation/getForm","api_endpoint":"https://api.sendfox.com/forms/{id}"},"summary":"Get a specific form","description":"Get a specific form","security":[{"bearerAuth":[]}]},"patch":{"tags":["Forms"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://sendfox.com/developer/docs/#operation/updateForm","api_endpoint":"https://api.sendfox.com/forms/{id}"},"summary":"Update a form","description":"Update a form","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"gdpr_required":{"type":"boolean","description":"Gdpr Required","enum":[true,false]},"lists":{"type":"array","description":"Replaces all list assignments","items":{"type":"number"}},"redirect_url":{"type":"string","description":"Redirect Url"},"title":{"type":"string","description":"Title"}}},"example":{"gdpr_required":"","lists":[1,2],"redirect_url":"string","title":"string"}}}}},"delete":{"tags":["Forms"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://sendfox.com/developer/docs/#operation/deleteForm","api_endpoint":"https://api.sendfox.com/forms/{id}"},"summary":"Delete a form","description":"Soft-deletes the form","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{}},"example":{}}}}}},"/me":{"get":{"tags":["Users"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://sendfox.com/developer/docs/#operation/getCurrentUser","api_endpoint":"https://api.sendfox.com/me"},"summary":"Get current user information","description":"Get current user information","security":[{"bearerAuth":[]}]}},"/contact-fields":{"get":{"tags":["Contact Fields"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://sendfox.com/developer/docs/#operation/listContactFields","api_endpoint":"https://api.sendfox.com/contact-fields"},"summary":"List user contact fields","description":"Returns custom contact fields defined by the user (20 per page)","security":[{"bearerAuth":[]}]},"post":{"tags":["Contact Fields"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://sendfox.com/developer/docs/#operation/createContactField","api_endpoint":"https://api.sendfox.com/contact-fields"},"summary":"Create a custom contact field","description":"Creates a custom field for contacts. The `name` is auto-generated from the `label` as a slug. Valid field type IDs: text, number, date (use the UUID constants from the contact_field_types table).","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"contact_field_type_id":{"type":"string","description":"UUID of the field type (text, number, or date)","required":true},"label":{"type":"string","description":"Human-readable field label","required":true}}},"example":{"contact_field_type_id":"string","label":"string"}}}}}},"/contact-fields/{id}":{"get":{"tags":["Contact Fields"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://sendfox.com/developer/docs/#operation/getContactField","api_endpoint":"https://api.sendfox.com/contact-fields/{id}"},"summary":"Get a specific contact field","description":"Get a specific contact field","security":[{"bearerAuth":[]}]},"patch":{"tags":["Contact Fields"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://sendfox.com/developer/docs/#operation/updateContactField","api_endpoint":"https://api.sendfox.com/contact-fields/{id}"},"summary":"Update a contact field label","description":"Updates the label and auto-regenerates the name slug. Note: `contact_field_type_id` is immutable and cannot be changed after creation.","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"label":{"type":"string","description":"Label","required":true}}},"example":{"label":"string"}}}}},"delete":{"tags":["Contact Fields"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://sendfox.com/developer/docs/#operation/deleteContactField","api_endpoint":"https://api.sendfox.com/contact-fields/{id}"},"summary":"Delete a contact field","description":"Permanently deletes the contact field","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{}},"example":{}}}}}},"/lists":{"get":{"tags":["Lists"],"parameters":[{"name":"query","in":"query","description":"Query","required":false,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://sendfox.com/developer/docs/#operation/listContactLists","api_endpoint":"https://api.sendfox.com/lists"},"summary":"List contact lists","description":"List contact lists","security":[{"bearerAuth":[]}]},"post":{"tags":["Lists"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://sendfox.com/developer/docs/#operation/createContactList","api_endpoint":"https://api.sendfox.com/lists"},"summary":"Create a new contact list","description":"Create a new contact list","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"name":{"type":"string","description":"Name","required":true}}},"example":{"name":"string"}}}}}},"/lists/{id}":{"get":{"tags":["Lists"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://sendfox.com/developer/docs/#operation/getContactList","api_endpoint":"https://api.sendfox.com/lists/{id}"},"summary":"Get a specific contact list","description":"Returns list details including average open and click rates","security":[{"bearerAuth":[]}]},"patch":{"tags":["Lists"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://sendfox.com/developer/docs/#operation/updateContactList","api_endpoint":"https://api.sendfox.com/lists/{id}"},"summary":"Update a contact list","description":"Update a contact list","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"name":{"type":"string","description":"Name","required":true}}},"example":{"name":"string"}}}}},"delete":{"tags":["Lists"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://sendfox.com/developer/docs/#operation/deleteContactList","api_endpoint":"https://api.sendfox.com/lists/{id}"},"summary":"Delete a contact list","description":"Soft-deletes a list. Returns 409 if the list is used by forms, landing pages, or automations.","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{}},"example":{}}}}}},"/lists/{list_id}/contacts":{"get":{"tags":["Lists"],"parameters":[{"name":"query","in":"query","description":"Query","required":false,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://sendfox.com/developer/docs/#operation/listContactsInList","api_endpoint":"https://api.sendfox.com/lists/{list_id}/contacts"},"summary":"Get contacts in a list","description":"Get contacts in a list","security":[{"bearerAuth":[]}]},"post":{"tags":["Lists"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://sendfox.com/developer/docs/#operation/addContactToList","api_endpoint":"https://api.sendfox.com/lists/{list_id}/contacts"},"summary":"Add a contact to a list","description":"Adds an existing contact to a list. If the contact is already in the list, no duplicate is created.","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"contact_id":{"type":"number","description":"ID of the contact to add","required":true}}},"example":{"contact_id":1}}}}}},"/lists/{list_id}/contacts/{contact_id}":{"delete":{"tags":["Lists"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://sendfox.com/developer/docs/#operation/removeContactFromList","api_endpoint":"https://api.sendfox.com/lists/{list_id}/contacts/{contact_id}"},"summary":"Remove a contact from a list","description":"Remove a contact from a list","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{}},"example":{}}}}}},"/domains":{"get":{"tags":["Domains"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://sendfox.com/developer/docs/#operation/listDomains","api_endpoint":"https://api.sendfox.com/domains"},"summary":"List sender domains","description":"Returns a paginated list of the user's whitelabel/sender domains","security":[{"bearerAuth":[]}]},"post":{"tags":["Domains"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://sendfox.com/developer/docs/#operation/createDomain","api_endpoint":"https://api.sendfox.com/domains"},"summary":"Add a sender domain","description":"Adds a new sender domain and creates the corresponding SendGrid whitelabel domain. Requires an active subscription and SendGrid subuser.","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"domain":{"type":"string","description":"Domain name (e.g., example.com). Do not include @ or protocol.","required":true}}},"example":{"domain":"string"}}}}}},"/domains/{id}":{"get":{"tags":["Domains"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://sendfox.com/developer/docs/#operation/getDomain","api_endpoint":"https://api.sendfox.com/domains/{id}"},"summary":"Get domain with DNS records","description":"Returns domain details including DNS records needed for verification","security":[{"bearerAuth":[]}]},"delete":{"tags":["Domains"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://sendfox.com/developer/docs/#operation/deleteDomain","api_endpoint":"https://api.sendfox.com/domains/{id}"},"summary":"Delete a sender domain","description":"Removes the domain from SendGrid and soft-deletes locally","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{}},"example":{}}}}}},"/domains/{id}/validate":{"post":{"tags":["Domains"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://sendfox.com/developer/docs/#operation/validateDomain","api_endpoint":"https://api.sendfox.com/domains/{id}/validate"},"summary":"Validate domain DNS records","description":"Triggers DNS validation for the domain via SendGrid. Returns whether validation passed and any errors for specific DNS records.","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{}},"example":{}}}}}},"/automations":{"get":{"tags":["Automations"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://sendfox.com/developer/docs/#operation/listAutomations","api_endpoint":"https://api.sendfox.com/automations"},"summary":"List automations","description":"List automations","security":[{"bearerAuth":[]}]},"post":{"tags":["Automations"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://sendfox.com/developer/docs/#operation/createAutomation","api_endpoint":"https://api.sendfox.com/automations"},"summary":"Create an automation","description":"Create an automation","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"active":{"type":"boolean","description":"Active","enum":[true,false]},"title":{"type":"string","description":"Title","required":true},"trigger_campaign_id":{"type":"number","description":"Required when trigger_type is open_campaign or click_campaign"},"trigger_list_id":{"type":"number","description":"Required when trigger_type is apply_list"},"trigger_type":{"type":"string","description":"Trigger Type","enum":["apply_list","open_campaign","click_campaign"]}}},"example":{"active":"","title":"string","trigger_campaign_id":1,"trigger_list_id":1,"trigger_type":"apply_list"}}}}}},"/automations/{id}":{"get":{"tags":["Automations"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://sendfox.com/developer/docs/#operation/getAutomation","api_endpoint":"https://api.sendfox.com/automations/{id}"},"summary":"Get a specific automation","description":"Returns automation with triggers, items, and campaign stats","security":[{"bearerAuth":[]}]},"patch":{"tags":["Automations"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://sendfox.com/developer/docs/#operation/updateAutomation","api_endpoint":"https://api.sendfox.com/automations/{id}"},"summary":"Update an automation","description":"Update title, trigger, or active status. Activating reschedules stale deliverables.","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"active":{"type":"boolean","description":"Active","enum":[true,false]},"title":{"type":"string","description":"Title"},"trigger_campaign_id":{"type":"number","description":"Trigger Campaign Id"},"trigger_list_id":{"type":"number","description":"Trigger List Id"},"trigger_type":{"type":"string","description":"Trigger Type","enum":["apply_list","open_campaign","click_campaign"]}}},"example":{"active":"","title":"string","trigger_campaign_id":1,"trigger_list_id":1,"trigger_type":"apply_list"}}}}},"delete":{"tags":["Automations"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://sendfox.com/developer/docs/#operation/deleteAutomation","api_endpoint":"https://api.sendfox.com/automations/{id}"},"summary":"Delete an automation","description":"Soft-deletes the automation and cancels all scheduled deliverables","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{}},"example":{}}}}}},"/automations/{id}/emails":{"post":{"tags":["Automations"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://sendfox.com/developer/docs/#operation/createAutomationEmail","api_endpoint":"https://api.sendfox.com/automations/{id}/emails"},"summary":"Add an email to an automation","description":"Add an email to an automation","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"delay_hours":{"type":"number","description":"Hours to wait before sending (default 24, first email defaults to 0)"},"from_email":{"type":"string","description":"From Email","required":true},"from_name":{"type":"string","description":"From Name","required":true},"html":{"type":"string","description":"Html","required":true},"subject":{"type":"string","description":"Subject","required":true}}},"example":{"delay_hours":"","from_email":"user@example.com","from_name":"string","html":"string","subject":"string"}}}}}},"/automation-emails/{id}":{"patch":{"tags":["Automations"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://sendfox.com/developer/docs/#operation/updateAutomationEmail","api_endpoint":"https://api.sendfox.com/automation-emails/{id}"},"summary":"Update an automation email","description":"Update an automation email","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"delay_hours":{"type":"number","description":"Delay Hours"},"from_email":{"type":"string","description":"From Email"},"from_name":{"type":"string","description":"From Name"},"html":{"type":"string","description":"Html"},"send_order":{"type":"number","description":"Send Order"},"subject":{"type":"string","description":"Subject"}}},"example":{"delay_hours":"","from_email":"user@example.com","from_name":"string","html":"string","send_order":1,"subject":"string"}}}}},"delete":{"tags":["Automations"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://sendfox.com/developer/docs/#operation/deleteAutomationEmail","api_endpoint":"https://api.sendfox.com/automation-emails/{id}"},"summary":"Remove an email from an automation","description":"Remove an email from an automation","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{}},"example":{}}}}}}},"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer"}}},"security":[{"bearerAuth":[]}]}