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: Bearerheader—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 aRetry-Afterheader. - 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 | ||
| 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 | ||
| 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 | ||
| 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
listsarray 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 thelistsarray. - 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.