https://api.unisender.com/en/api/<method> and pass the key in the form body. The free plan includes API access.
- The English docs are gone.
unisender.com/en/support/api/answers410 Gone. The Russian pages under/ru/support/api/still document every method in full, and the field names are identical. - Wrong key versus no key. A wrong key answers
401 invalid_api_key; no key at all answers403 access_denied. Both are treated as auth errors, so a missing credential surfaces as one either way. - Double opt-in.
contacts.subscribetakesdouble_optinof 0, 3 or 4, and 0 is the default. 0 sends a confirmation email and the contact staysinvited, outside the list, until they accept; aninvitedaddress cannot be mailed. 3 adds the contact asnewwith no email, for consent you already hold. 4 adds a contact who is alreadyneworactivesilently and sends the invitation to anyone else. Any other value is refused. Omittingdouble_optintherefore sends an email. - Unsubscribe versus exclude.
contacts.unsubscribemarks the contact unsubscribed, and only the contact can reverse that from a confirmation email.contacts.excludeonly removes them from the given lists, and they can be subscribed again later. - Imports skip some addresses.
contacts.importtakes at most 500 rows per call. List membership is a column: addemail_list_idstofield_nameswith comma-separated list ids in each row. Unisender deliberately skips role addresses (sales@,no-reply@) and spam traps and counts them underinvalid(androle_based), with the reason inlog, so an import that inserts fewer rows than it was sent is normal, not a failure. Imports send no email. - Exports are asynchronous.
contacts.exportreturns atask_uuidand posts the file to yournotify_urlwhen it is ready. Unisender’sasync/getTaskResultmethod reports the task and, once it iscompleted, afile_to_downloadURL; this plugin does not wrap it yet, so pass anotify_urlyou can receive. - Sending limits.
messages.sendEmailaccepts a body up to 1 MB, is limited to 1,000 messages a day and 60 calls a minute.messages.createEmailaccepts a body up to 8 MB. The general allowance is 1,200 calls a minute. - Delivery status is short-lived.
messages.statustakes up to 500email_idvalues frommessages.sendEmail, and Unisender keeps those records for one month. A status beginningerr_is a failure,ok_is a success or still in progress, andnot_sentis its own case. - A campaign without
start_timesends immediately.campaigns.createneeds amessage_idfrommessages.createEmail, andcampaigns.listneeds afromdate and returns at most 10,000 rows a page.
- 19 typed API operations
Setup
1
Install
2
Add the plugin
corsair.ts
multiTenancy: true, scope calls with corsair.withTenant(id). See Quick start for KEK + Hub keys, and Multi-tenancy for account isolation.3
Choose authentication
- API Key (Recommended)
No setup required yet. When you make your first request as a tenant, Corsair prompts for the API key.More: API Key
4
Connect a tenant
Mint a connect link and send the tenant to it. Hub hosts the page and delivers the result to your app — see Connect / OAuth.
Example API calls
List contact listsWhat’s next
API reference
Every
unisender.api.* operation with input and output types.Connect / OAuth
createLink, Hub delivery, and tenant connect flows.
Use with agents
Expose this plugin’s operations as MCP tools.