Skip to main content

API Overview

The Mumara ONE REST API lets your own applications, such as your CRM, website backend, data pipeline or automation tool, work with your account without using the app: add contacts, manage lists, create broadcasts, read statistics, set up sending domains and more.

Mumara ONE runs on Mumara Campaigns, and the REST API is the Mumara Campaigns API. The API reference documents every endpoint, parameter and response, and applies to Mumara ONE as written; only the base URL is different. This page covers what you need to know before you start, and what's different in Mumara ONE.

Base URLs​

https://one.mumara.com/api/v2/    V2 (recommended)
https://one.mumara.com/api/ V1

Always use https://.

Authentication​

Every request needs an API key. Create one under Setup → API Keys, where you also choose what the key may do, which IP addresses may use it and its rate limit. See API Keys.

Send the key as a Bearer token:

Authorization: Bearer YOUR_API_KEY

V2 accepts the key only in this header. V1 also accepts it as an api_token parameter, but the header is safer: keys in URLs end up in logs and browser history.

To check that a key works, ask for your own profile:

curl https://one.mumara.com/api/v2/me \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Accept: application/json"

A working key returns "success": true and your account details in data. A 401 means the key is missing, wrong or switched off, or your IP address isn't in the key's Allowed IPs.

V1 and V2​

V2V1
Base URLhttps://one.mumara.com/api/v2/https://one.mumara.com/api/
StyleResources and HTTP methods, such as GET /lists and POST /contactsNamed actions, such as GET /getLists and POST /addContact
AuthenticationAuthorization: Bearer header onlyBearer header or api_token parameter
Request bodiesJSONJSON or form fields
Responsessuccess, data, meta and messagestatus and result
ErrorsAn HTTP status plus an error object with a code"status": "error", sometimes with HTTP 200
Pagingpage and per_pagelimit_start and limit_count on list endpoints that support them

Use V2 for new integrations. Use V1 only for what V2 doesn't cover yet, listed under What the API covers.

Requests​

  • Send request bodies as JSON, with Content-Type: application/json.
  • Send Accept: application/json, so errors come back as JSON too.
  • Resource IDs go in the path, for example GET /api/v2/lists/12.
  • Dates in V2 responses use ISO 8601 with a time zone offset, for example 2026-08-01T09:30:00+00:00.
  • Some V2 resources have batch endpoints, such as POST /contacts/batch for up to 1,000 contacts in one request, and DELETE /suppressions/batch. Prefer them to many single requests.

Responses​

A V2 request for a single item returns it in data:

{
"success": true,
"data": {
"id": 12,
"name": "Newsletter",
"owner_name": "Example Store",
"owner_email": "news@example.com",
"reply_email": "support@example.com",
"subscribers_count": 1520,
"created_at": "2026-08-01T09:30:00+00:00",
"updated_at": "2026-09-20T14:02:11+00:00"
}
}

Creating something returns HTTP 201 with the new item in data and a message, such as "List created successfully". Updating and deleting return 200 with a message.

V1 responses look like this:

{
"status": "success",
"result": []
}

Pagination​

V2 list endpoints are paged. Pass page (from 1) and per_page (1 to 100, default 25):

curl "https://one.mumara.com/api/v2/contacts?page=2&per_page=100" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Accept: application/json"

The response has the items in data and the paging details in meta:

{
"success": true,
"data": [],
"meta": {
"current_page": 2,
"per_page": 100,
"total": 1520,
"last_page": 16,
"from": 101,
"to": 200
}
}
FieldMeaning
current_pageThe page you asked for.
per_pageItems per page.
totalItems across all pages.
last_pageThe number of the last page. Stop when current_page reaches it.
from, toThe positions of the first and last items on this page, or null for an empty page.

V1 list endpoints that support paging take limit_start (how many items to skip, default 0) and limit_count (how many to return, default 25). The API reference says which endpoints support them.

Errors​

V2 errors have "success": false and an error object:

{
"success": false,
"error": {
"code": "VALIDATION_ERROR",
"message": "The given data was invalid.",
"details": {
"email": ["The email field is required."]
}
}
}
HTTP statuscodeWhat it means
401UNAUTHORIZEDThe key is missing, wrong or switched off, or the request came from an IP address the key doesn't allow.
403FORBIDDENThe key isn't allowed to do this. Check its permissions under Setup → API Keys.
404NOT_FOUNDThe item doesn't exist, or doesn't belong to your account.
409CONFLICTThe request clashes with something that exists, such as a duplicate.
422VALIDATION_ERRORA field is missing or invalid. details lists the problems by field.
429Too many requests. See Rate limits.
5xxSomething went wrong on our side. Retry later, with a growing delay.

A few responses don't follow the V2 format, so check the HTTP status first:

  • A path that doesn't exist returns 404 with "status": "error" and a list of suggested_uris.
  • A 429 has a short JSON body without success or error.

V1 errors return "status": "error" and the reason in result. Some return HTTP 200, so always check status in V1 responses.

Rate limits​

Each API key may make as many requests per minute as its Rate limit, which you set on the key under Setup → API Keys. Every response tells you where you stand:

HeaderMeaning
X-RateLimit-LimitRequests this key may make per minute.
X-RateLimit-RemainingRequests left in the current minute.
Retry-AfterOn a 429 only: seconds to wait before trying again.
X-RateLimit-ResetOn a 429 only: when you can try again, as a Unix timestamp.

When X-RateLimit-Remaining gets low, slow down. After a 429, wait for Retry-After before sending the next request, rather than retrying straight away. The limit counts per key, so give each integration its own key.

What the API covers​

In V2:

AreaEndpointsNotes
Lists/lists
Contacts/contacts, /contacts/batch
Custom fields/custom-fields, /lists/{listId}/custom-fields
Segments/segmentsAlso counts the contacts in a segment.
Suppressions/suppressions, /suppressions/batch
Broadcasts/broadcastsCreate and manage the emails themselves.
Drip campaigns/dripsList, view and delete.
Triggers/triggersList, view, update and delete. See Triggers.
Web forms/web-formsIncludes the embed code for a form.
Groups/groups/{module}The groups that organise lists, broadcasts and so on.
Spin tags/spin-tags
Broadcast statistics/stats/broadcasts/{id}/...Summary, opens, clicks, bounces, unsubscribes, complaints and logs.
Sending domains/sending-domainsAdd and verify domains, read DNS records, switch features, rotate DKIM keys. See Sending Domains.
Your profile/meRead and update your own account details.

Only in V1, for now:

ToUse
Schedule a broadcast to sendPOST /api/broadcastSchedule
Import contacts from a filePOST /api/importContacts
Create a triggerPOST /api/addTrigger
Create a drip campaignPOST /api/addDrip
Read your activity logsGET /api/getActivityLogs

Parts of the reference you don't need​

The reference also documents endpoints for self-hosted Mumara Campaigns that don't apply to Mumara ONE:

  • Sending nodes, bounce mailboxes, bounce rules and FBL accounts. Mumara ONE runs your sending servers, bounce handling and feedback loops for you.
  • Users. These are for administrators of a Mumara Campaigns installation.
  • Webhooks (/v2/webhooks). This is a separate feature: webhooks created there don't appear under Actions → Webhooks and don't send the email events described in Webhooks. Create your webhooks in the app.
  • Sending single emails (/sendEmail, /v2/email/send). In Mumara ONE, send transactional email through a Bridge with the Sending API.

The REST API and the Sending API​

Mumara ONE has two APIs. They do different jobs and use different credentials:

REST API (this page)Sending API
What it's forManaging your account: contacts, lists, campaigns, statistics, domainsSending one transactional email
Addresshttps://one.mumara.com/api/v2/ and /api/POST https://api.mumara.com/sendEmail
CredentialAn API key from Setup → API KeysA Bridge's One Connect Key from Transactional → Bridges
PermissionsChosen per keyThe key can only send through its Bridge
Rate-limit headersYesNo; sending counts against your plan's transactional allowance

An API key doesn't work on the Sending API, and a One Connect Key doesn't work on the REST API.

Events: use webhooks, not polling​

To learn about deliveries, bounces, opens, clicks and complaints as they happen, set up webhooks under Actions → Webhooks instead of polling the statistics endpoints. Mumara ONE then sends each event to your URL, signed so you can verify it.

Good practice​

  • Call the API from your server, never from a browser or a mobile app. Anyone who has the key can act on your account.
  • One key per integration, with only the permissions it needs. See API Keys.
  • Handle errors by HTTP status, and retry 429 and 5xx responses with a growing delay.
  • Page through large lists with per_page=100 rather than many small pages.
  • Use batch endpoints when you add or remove many contacts or suppressions.

Next steps​