What are SendFox's API Endpoints?

SendFox's REST API lives at https://api.sendfox.com: create a token in Settings → API tokens on a paid plan, then call the contact, list, and campaign endpoints.

How do I authenticate with the SendFox API?

  • Base URL: all endpoints build from https://api.sendfox.com.
  • Authentication: send a personal access token in the Authorization: Bearer header—see how to get access tokens.
  • Plan requirement: the API is included with paid plans. On the Free plan every endpoint returns HTTP 402 with "API access requires a paid plan."
  • Rate limit: 60 requests per minute per account. Responses carry X-RateLimit-* headers, and going over returns HTTP 429 with a Retry-After header.
  • Full reference: this article covers the most-used endpoints; the complete, always-current reference (including forms, automations, custom contact fields, and domains) is at sendfox.com/developer/docs.

User

GET /me

Gets information for the authenticated user.

Lists

GET /lists

Gets paginated contact lists.

GET /lists/{list_id}

Gets a list by ID.

POST /lists

Creates a new list.

Parameter    
name required The name of the list.

DELETE /lists/{list_id}/contacts/{contact_id}

Removes a contact from a list.

Parameter    
list_id required ID of the list.
contact_id required ID of the contact.

GET /lists/{list_id}/unsubscribes

Gets everyone who has stopped receiving a list, with when they stopped. Each contact includes list_unsubscribed_at (this list only) and unsubscribed_scope (list, account or both).

PATCH /lists/{list_id}/unsubscribe

Unsubscribes a contact from one list only. Their other lists and their account-wide status stay as they are, and re-adding them to the list later doesn’t start sending again. There is no matching resubscribe endpoint.

Parameter    
email required Email of a contact already on this list.

Contacts

GET /contacts

Gets paginated contacts.

GET /contacts/{contact_id}

Gets a contact by ID.

GET /contacts?email={contact_email}

Gets a contact by email address.

POST /contacts

Creates a new contact.

Parameter    
email required Contact email address.
first_name optional Contact first name.
last_name optional Contact last name.
lists optional Array of list IDs to add the contact to, e.g. lists[]=123&lists[]=456

PATCH /unsubscribe

Unsubscribes a contact from all your emails (account-wide). To stop just one list, use PATCH /lists/{list_id}/unsubscribe. For how unsubscribing works for your subscribers, see how unsubscribing and resubscribing work.

Parameter    
email required The email of the contact.

Campaigns

GET /campaigns

Gets paginated campaigns.

GET /campaigns/{campaign_id}

Gets a campaign by ID.

POST /campaigns/{campaign_id}/send-test

Sends a test of a campaign to the addresses you give; the campaign stays a draft. Test sends share the daily limit of 30 with the Test button in the SendFox editor.

Parameter    
emails required Array of up to 30 email addresses to send the test to.

Looking for the AI assistant connection?

This article covers the REST API. If you want to drive SendFox by chatting with Claude, ChatGPT, or Codex, that is the separate MCP server — see how to connect an AI assistant, or sendfox.com/developer/mcp.

They are gated differently. The REST API is included with paid plans, Lifetime included. The MCP server is Pro and Empire only (trials count), so a Lifetime plan can use the REST API but not the AI assistant connection.

What do the API response codes mean?

API responses use standard HTTP response codes (see the MDN reference) with JSON bodies:

  • 2xx (200–299) indicate success.
  • 4xx (400–499) indicate validation or authorization errors—a message is generally provided with details.
  • 5xx (500–599) indicate a server error on our end.

Troubleshooting

Why am I getting HTTP 402 from the API?

  • The response says "API access requires a paid plan." The API is locked on the Free plan. Upgrade to Lifetime or Pro to use it.

HTTP 401 Unauthorized

  • Your token is missing, revoked, or malformed. Create a fresh one—see getting access tokens—and send it as Authorization: Bearer <token>.
  • Still stuck? Visit the SendFox Help Center at help.sendfox.com.

Validation error: "Select at least one active list."

  • This error appears when you create or update a campaign or a form via the API and every list ID in the lists array is archived (or otherwise inactive). Because SendFox syncs only active lists, this would leave the campaign or form with no reachable list, so the request is rejected. Include at least one active list ID in the lists array.
  • When scheduling a campaign, an active list is required—a payload with no active list returns "At least one list or tag is required when scheduling."

Frequently Asked Questions

Are there more endpoints than these?

Yes—forms, automations, custom contact fields, domains, contact tags, bulk contact actions, saved templates and sections, campaign stats, batch contact imports, and more. The complete reference is at sendfox.com/developer/docs.

How do I make my first request?

Follow the step-by-step Postman walkthrough in how to create a SendFox API request.

Can I use the API on the Free plan?

No—every endpoint returns HTTP 402 on the Free plan. API access is included with paid plans.

Still need help? Contact Us Contact Us