RESOURCES
Eight resources. Forty-plus endpoints. Every verb you'd expect.
All endpoints below are namespaced under /api/v1/ and require auth:api token authentication unless marked otherwise. Lifecycle actions (run, pause, resume) are surfaced as POST sub-routes. Log downloads stream the underlying CSV.
Authentication
All authenticated endpoints accept the token via the Authorization: Bearer header (preferred) or the ?api_token= query parameter (legacy). Use POST /user/login to exchange email/password for a fresh token from a programmatic client.
POST/user/loginExchange email + password for an API token. Public endpoint.
GET/meReturns the authenticated user's record. Use this to verify a token.
POST/login-tokenGenerate a one-time login URL the user can click to land authenticated.
Lists
Mailing lists are the primary container for subscribers. Each list ships with a default sender identity, custom fields, and double-opt-in / welcome-email settings. Custom fields are added with the add-field sub-route.
GET/listsPaginated index of lists owned by the token's user.
POST/listsCreate a new list. Required: name, from_email, from_name, subject + contact block.
GET/lists/:uidFetch a single list with its fields and stats.
PATCH/lists/:uidUpdate list metadata, sender identity, or opt-in settings.
POST/lists/:uid/add-fieldAdd a custom field. Type is text, number, or datetime.
DELETE/lists/:uidPermanently delete a list and all its subscribers.
Subscribers
Subscribers belong to a list and carry custom field values, tags, and an open/click history. Status is one of subscribed, unsubscribed, or unconfirmed. Tag operations are additive and idempotent.
GET/subscribers?list_uid=…Paginated index. Filter with open=yes|no, click=yes|no.
POST/subscribersCreate. Required: list_uid, EMAIL. Custom fields as uppercase params.
GET/subscribers/:idFetch a single subscriber by id or email.
GET/subscribers/email/:emailFind every list that has a subscriber with this email.
PATCH/subscribers/:idUpdate fields, tags, or status.
POST/subscribers/:id/add-tagAdd comma-separated tags.
POST/subscribers/:id/remove-tagRemove comma-separated tags.
PATCH/lists/:list_uid/subscribers/:id/subscribeMark subscribed.
PATCH/lists/:list_uid/subscribers/:id/unsubscribeMark unsubscribed.
PATCH/lists/:list_uid/subscribers/email/:email/unsubscribeUnsubscribe by email when you don't have the id.
DELETE/subscribers/:idHard delete from the list.
Campaigns
Campaigns are the unit of sending. Create one with HTML content + tracking flags, transition through run / pause / resume, then download tracking, open, click, bounce, feedback, and unsubscribe logs as CSV.
GET/campaignsPaginated index. Pass per_page, page.
POST/campaignsCreate. Required: list_uid, name, subject, from_*, html.
GET/campaigns/:uidFetch a single campaign with stats.
PATCH/campaigns/:uidUpdate content, subject, or tracking flags.
POST/campaigns/:uid/runQueue the campaign for delivery.
POST/campaigns/:uid/pausePause an in-flight campaign.
POST/campaigns/:uid/resumeResume a paused campaign.
GET/campaigns/:uid/tracking-log/downloadStream the tracking CSV.
GET/campaigns/:uid/{open,click,bounce,feedback,unsubscribe}-log/downloadStream the per-event CSV (one route per event type).
DELETE/campaigns/:uidDelete a campaign (only when not in progress).
Automations
Automations are visual flows of triggers, conditions, and actions. The API exposes the read view plus two ways to fire flows from external systems: execute to run an entire automation, or api/call to trigger an "API call" node mid-flow.
GET/automationsIndex of automations the token's user owns.
POST/automations/:uid/executeTrigger an automation for a subscriber. Useful for transactional flows.
POST/automations/:uid/api/callFire an "API call" trigger node mid-flow with custom payload.
Sending servers
Sending servers are the configurable transports (SMTP, Amazon SES, SendGrid, Mailgun, Postmark, custom drivers from plugins). Manage them programmatically when provisioning new tenants or rotating credentials.
GET/sending_serversIndex of configured sending servers.
POST/sending_serversCreate a new sending server. Driver-specific config under settings.
GET/sending_servers/:uidFetch a single sending server.
PATCH/sending_servers/:uidUpdate settings or rotate credentials.
DELETE/sending_servers/:uidRemove a sending server (campaigns referencing it must be re-routed first).
Adding a new transport (Postal MTA, custom HTTP API, …) is a REGISTRY hook — ship it as a plugin instead of patching core.
Customers ADMIN
Customer endpoints are restricted to admin tokens. Use them to provision tenant accounts, manage subscriptions, switch plans, or generate one-time login URLs for support/impersonation.
GET/customersPaginated index of all customers.
POST/customersCreate a new customer + user account.
GET/customers/by-email/:emailLook up a customer by email.
PATCH/customers/:uidUpdate customer profile / contact / quota.
PATCH/customers/:uid/{enable,disable}Suspend or re-activate access without deleting data.
POST/customers/:uid/change-plan/:plan_uidSwitch a customer to a different plan (charges, prorations, sub renewal).
POST/customers/:uid/assign-plan/:plan_uidAssign a plan without billing flow (admin override).
POST/customers/:uid/subscription/updateUpdate an active subscription's parameters.
POST/login-tokenGenerate a one-time login URL for the target customer.
Subscriptions ADMIN
Subscriptions tie a customer to a plan + billing cadence. Use these endpoints when integrating with external billing systems or auditing recurring revenue.
GET/subscriptionsIndex of all active subscriptions.
POST/subscriptionsCreate a subscription record (typically driven by your gateway webhook).
GET/subscriptions/:uidFetch a single subscription with its renewal history.
PATCH/subscriptions/:uidAdjust quota, cadence, or end date.
Files
Upload images and other assets for use in campaign content. The endpoint accepts multipart/form-data and returns a public URL you can reference in HTML body.
POST/file/uploadUpload a file. Returns { "url": "..." }.
Plugins & upgrades ADMIN
Programmatically install plugins from a download URL, run remote core upgrades in a two-step request flow (so step 2 lands on a fresh PHP worker), or refresh the license. Useful for fleet operators managing many AcelleMail tenants.
POST/plugins/installInstall a plugin from a download URL.
POST/upgrade/runBegin a remote core upgrade (downloads + extracts).
POST/upgrade/run-fileApply a single migration step.
POST/upgrade/finalizeFinalize an upgrade. Must be called as a fresh request after run.
POST/license/refreshRefresh CodeCanyon license info (mirrors Admin → License).