All integrations

SendFox

MARKETING · MARKETING

Contacts, lists, campaigns, automations, and their email activity in the account they connected.

Acts as the person, not as itself

Each user connects their own account. Every call carries both identities — the agent and the person it is acting for — so the agent can never reach past what that individual can already do.

Credentials never touch the agent

Tokens live in the vault and attach server-side at call time. The agent holds a session, not a secret, and revoking access does not mean rotating a key.

Every call on the record

Who asked, which agent acted, which action ran, and the verdict that let it through — one audit trail across every integration, not one per vendor.

What an agent can do

Each action is granted on its own. An agent allowed to read is not thereby allowed to write, and the scope beside each row is what the acting user must have connected for it to run at all.

sendfox_delete_automation_emails_by_idWRITE

Remove an email from an automation via DELETE /automation-emails/{id}

api
sendfox_delete_automations_by_idWRITE

Delete an automation -- Soft-deletes the automation and cancels all scheduled deliverables via DELETE /automations/{id}

api
sendfox_delete_campaigns_by_idWRITE

Delete a draft campaign -- Only draft campaigns (not yet sent) can be deleted. Uses soft delete. via DELETE /campaigns/{id}

api
sendfox_delete_contact_fields_by_idWRITE

Delete a contact field -- Permanently deletes the contact field via DELETE /contact-fields/{id}

api
sendfox_delete_contact_tags_by_idWRITE

Delete a contact tag -- Deletes the tag. Tagged contacts are kept — only the tag and its attachments (including campaign audience use) are removed. via DELETE /contact-tags/{id}

api
sendfox_delete_contacts_by_contact_id_tags_by_tag_idWRITE

Remove a tag from a contact via DELETE /contacts/{contact_id}/tags/{tag_id}

api
sendfox_delete_contacts_by_idWRITE

Delete a contact -- Soft-deletes a contact and cancels any scheduled deliverables via DELETE /contacts/{id}

api
sendfox_delete_domains_by_idWRITE

Delete a sender domain -- Removes the domain from SendGrid and soft-deletes locally via DELETE /domains/{id}

api
sendfox_delete_forms_by_idWRITE

Delete a form -- Soft-deletes the form via DELETE /forms/{id}

api
sendfox_delete_lists_by_idWRITE

Delete a contact list -- Soft-deletes a list. Returns 409 if the list is used by forms, landing pages, or automations. via DELETE /lists/{id}

api
sendfox_delete_lists_by_list_id_contacts_by_contact_idWRITE

Remove a contact from a list via DELETE /lists/{list_id}/contacts/{contact_id}

api
sendfox_get_automationsREAD

List automations via GET /automations

api
sendfox_get_automations_by_idREAD

Get a specific automation -- Returns automation with triggers, items, and campaign stats via GET /automations/{id}

api
sendfox_get_campaign_sectionsREAD

List saved campaign sections -- Returns only content owned by the authenticated account, including saved HTML. Shared gallery content is not included. This endpoint does not publish, modify or send content. Results are ordered by descending ID, 20 per page. via GET /campaign-sections

api
sendfox_get_campaign_sections_by_idREAD

Get a saved campaign section -- Returns only content owned by the authenticated account, including saved HTML. Shared gallery content is not included. This endpoint does not publish, modify or send content. via GET /campaign-sections/{id}

api
sendfox_get_campaign_templatesREAD

List saved campaign templates -- Returns only content owned by the authenticated account, including saved HTML. Shared gallery content is not included. This endpoint does not publish, modify or send content. Results are ordered by descending ID, 20 per page. via GET /campaign-templates

api
sendfox_get_campaign_templates_by_idREAD

Get a saved campaign template -- Returns only content owned by the authenticated account, including saved HTML. Shared gallery content is not included. This endpoint does not publish, modify or send content. via GET /campaign-templates/{id}

api
sendfox_get_campaignsREAD

List campaigns -- Returns a paginated list of campaigns (100 per page) via GET /campaigns

api
sendfox_get_campaigns_by_idREAD

Get a specific campaign via GET /campaigns/{id}

api
sendfox_get_campaigns_by_id_engagementREAD

List the contacts behind a campaign's engagement -- 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. via GET /campaigns/{id}/engagement

api
sendfox_get_campaigns_by_id_statsREAD

Get campaign performance statistics -- 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. via GET /campaigns/{id}/stats

api
sendfox_get_campaigns_statsREAD

Get statistics for multiple campaigns -- Returns stored counts and rates for one to 100 distinct owned campaigns in request order. The entire request fails with the same validation error for missing, deleted or foreign IDs. Does not return link stats or query individual delivery events. via GET /campaigns/stats

api
sendfox_get_contact_fieldsREAD

List user contact fields -- Returns custom contact fields defined by the user (20 per page) via GET /contact-fields

api
sendfox_get_contact_fields_by_idREAD

Get a specific contact field via GET /contact-fields/{id}

api
sendfox_get_contact_tagsREAD

List contact tags -- Lists the account's tags, newest first, each with its contact count. Distinct from the legacy /tags endpoints, which operate on lists. via GET /contact-tags

api
sendfox_get_contact_tags_by_idREAD

Get a contact tag via GET /contact-tags/{id}

api
sendfox_get_contactsREAD

List contacts -- 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. via GET /contacts

api
sendfox_get_contacts_bulk_actions_by_idREAD

Check the progress of a bulk contact action -- 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. via GET /contacts/bulk-actions/{id}

api
sendfox_get_contacts_by_contact_id_tagsREAD

List a contact's tags via GET /contacts/{contact_id}/tags

api
sendfox_get_contacts_by_idREAD

Get a specific contact via GET /contacts/{id}

api
sendfox_get_contacts_by_id_activityREAD

Get email activity for a contact -- Returns paginated email deliverables and contact-level engagement summary via GET /contacts/{id}/activity

api
sendfox_get_contacts_unsubscribedREAD

List unsubscribed contacts via GET /contacts/unsubscribed

api
sendfox_get_domainsREAD

List sender domains -- Returns a paginated list of the user's whitelabel/sender domains via GET /domains

api
sendfox_get_domains_by_idREAD

Get domain with DNS records -- Returns domain details including DNS records needed for verification via GET /domains/{id}

api
sendfox_get_formsREAD

List forms via GET /forms

api
sendfox_get_forms_by_idREAD

Get a specific form via GET /forms/{id}

api
sendfox_get_listsREAD

List contact lists via GET /lists

api
sendfox_get_lists_by_idREAD

Get a specific contact list -- Returns list details including average open and click rates via GET /lists/{id}

api
sendfox_get_lists_by_list_id_contactsREAD

Get contacts in a list via GET /lists/{list_id}/contacts

api
sendfox_get_meREAD

Get current user information via GET /me

api
sendfox_patch_automation_emails_by_idWRITE

Update an automation email via PATCH /automation-emails/{id}

api
sendfox_patch_automations_by_idWRITE

Update an automation -- Update title, trigger, or active status. Activating reschedules stale deliverables. via PATCH /automations/{id}

api
sendfox_patch_campaigns_by_idWRITE

Update a draft campaign -- Only draft campaigns (not yet sent) can be updated. All fields are optional. via PATCH /campaigns/{id}

api
sendfox_patch_contact_fields_by_idWRITE

Update a contact field label -- Updates the label and auto-regenerates the name slug. Note: `contact_field_type_id` is immutable and cannot be changed after creation. via PATCH /contact-fields/{id}

api
sendfox_patch_contact_tags_by_idWRITE

Update a contact tag via PATCH /contact-tags/{id}

api
sendfox_patch_contacts_by_idWRITE

Update a contact -- Update contact details including name, list memberships, and custom fields via PATCH /contacts/{id}

api
sendfox_patch_forms_by_idWRITE

Update a form via PATCH /forms/{id}

api
sendfox_patch_lists_by_idWRITE

Update a contact list via PATCH /lists/{id}

api
sendfox_patch_unsubscribeWRITE

Unsubscribe a contact by email via PATCH /unsubscribe

api
sendfox_post_automationsWRITE

Create an automation via POST /automations

api
sendfox_post_automations_by_id_emailsWRITE

Add an email to an automation via POST /automations/{id}/emails

api
sendfox_post_campaignsWRITE

Create a new campaign -- 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. via POST /campaigns

api
sendfox_post_campaigns_by_id_resendWRITE

Clone a sent campaign at part of its original audience -- 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. via POST /campaigns/{id}/resend

api
sendfox_post_campaigns_by_id_sendWRITE

Send a campaign immediately -- 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. via POST /campaigns/{id}/send

api
sendfox_post_contact_fieldsWRITE

Create a custom contact field -- Creates a custom field for contacts. The `name` is auto-generated from the `label` as a slug. Provide `type` (`text`, `number`, or `date`) or the existing `contact_field_type_id` UUID. If both are provided, they must identify the same type. UUIDs are the same for every account: | Type | `contact_field_type_id` | | ------ | -------------------------------------- | | text | `0abe5601-7738-43c8-858f-81911ecf89ee` | | number | `e43c6471-b3ff-4541-80c5-964c62decd15` | | date | `fe7dd76c-5113-4159-bc7c-0dbf0ed8d404` | The value is immutable after creation and is not returned by any endpoint - responses carry the human-readable `type` (`text`, `number`, `date`) instead. via POST /contact-fields

api
sendfox_post_contact_tagsWRITE

Create a contact tag -- Creates a tag. A brand color is auto-assigned when none is provided. Tag names are unique per account. via POST /contact-tags

api
sendfox_post_contactsWRITE

Create a new contact via POST /contacts

api
sendfox_post_contacts_batchWRITE

Batch import contacts -- Import up to 1,000 contacts in a single request. Creates new contacts or updates existing ones. via POST /contacts/batch

api
sendfox_post_contacts_bulk_actionsWRITE

Apply a tag or list change to every contact matching a filter -- 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. via POST /contacts/bulk-actions

api
sendfox_post_contacts_by_contact_id_tags_by_tag_idWRITE

Attach a tag to a contact -- Idempotent. Returns the contact's tags after the change. via POST /contacts/{contact_id}/tags/{tag_id}

api
sendfox_post_domainsWRITE

Add a sender domain -- Adds a new sender domain and creates the corresponding SendGrid whitelabel domain. Requires an active subscription and SendGrid subuser. via POST /domains

api
sendfox_post_domains_by_id_validateWRITE

Validate domain DNS records -- Triggers DNS validation for the domain via SendGrid. Returns whether validation passed and any errors for specific DNS records. via POST /domains/{id}/validate

api
sendfox_post_formsWRITE

Create a new form -- Creates a subscription form linked to one or more lists. Free users are limited to 1 form. via POST /forms

api
sendfox_post_listsWRITE

Create a new contact list via POST /lists

api
sendfox_post_lists_by_list_id_contactsWRITE

Add a contact to a list -- Adds an existing contact to a list. If the contact is already in the list, no duplicate is created. via POST /lists/{list_id}/contacts

api

Put SendFox behind one governed endpoint.

Same permissions, same audit trail, whatever else you connect next.