Skip to main content
The Senderz public API is the API-key authenticated, server-to-server surface used by the Make connector, partner integrations and custom backends. It covers contact (profile) management, list membership, transactional email and SMS, delivery status, custom event ingest, one-time passcodes, embedded form submissions, outbound webhook subscriptions and reference lookups.

Base URL

Every endpoint in this reference lives under the /api/v1 prefix. A small set of browser-facing assets and redirects is mounted at the domain root instead and is not part of the API:

Authentication

Every request carries two headers. There is no OAuth flow and no bearer token.
X-Sender-Tenant accepts either your workspace slug or the workspace UUID. See Authentication for how to create, rotate and revoke keys, and for the exact failure responses.

Versioning

The current API version is 2026-01. It is returned as apiVersion by GET /public/me. There is no version header and no version segment in the path beyond /api/v1; new fields and endpoints are added compatibly.

The response envelope

Every successful response is wrapped in the same envelope. The shapes documented throughout this reference are the value of data.
Failures use success: false with a human-readable message. Some errors add a machine-readable code you can branch on:
Branch on code where it is present, and on the HTTP status otherwise. Never parse message, which is prose and can change.
Full status-code and error-shape detail lives in Errors and rate limits. List endpoints share one paging shape, documented in Pagination.

Making a request

string
Send application/json on any request with a body.
string
Optional. Up to 64 characters from A-Z, a-z, 0-9, _ and -. If you send a valid value it is used as the request id; otherwise one is generated. It is echoed back on the response as X-Request-Id on every request, valid or not. Log it and quote it to support.
Two request rules apply everywhere:
  • Request bodies are capped at 2 MB. A larger body is rejected before it reaches the handler.
  • Unknown properties are rejected. Bodies are whitelisted against the documented fields, so an unexpected or misspelled key returns 400 rather than being silently ignored.

Endpoint map

Ingest and transactional

Authenticated with the same header pair, but mounted outside /public.

Public API

Reference lookups

Compact lists sized for populating dropdowns and validating input before a send.

Where to start

Authentication

Create a key, set the two headers, and read the rate limits.

Validate connection

One call that proves the credentials work.

Profiles

Create, upsert, update, look up and suppress contacts.

Lists

Enumerate lists and manage membership.

Messages

Transactional email and SMS, plus delivery status.

Event ingest

Record custom events and trigger automations.

OTP API

Send and verify one-time passcodes.

Forms API

The subscribe endpoint behind embedded forms.

Webhooks

Subscribe to outbound events.

Resource dropdowns

Templates, campaigns, fields, senders and event names.

Tags

Enumerate workspace tags and create new ones.

Push subscriptions

Register a browser for web push against a profile.

Rate limits

Two independent limits apply to every request. The tighter one is a shared 60 requests per minute bucket keyed on the caller source IP address, so it is shared with anything else calling from the same address. A second 1,200 requests per minute bucket is keyed on the API key itself. Both are documented in full, with the response headers and the throttled response body, in Authentication.