Guides

Authentication

Every request carries an API key as a bearer token. The key decides the account, and its level decides what it can do. ChatGPT and Claude don't need one: they connect to the MCP server with OAuth.

Send the key

Create keys on the dashboard's API keys page. They start with mc_ and are shown once: MailCheap only keeps their hash, their first characters and when they were last used. The REST API and the MCP server take the same header. An account has up to 20 active keys.

Header
Authorization: Bearer mc_…

Two levels

LevelCan
Full accessEvery endpoint and MCP tool, including creating and revoking keys. Keep it on a server or in your AI assistant's settings.
Signups onlyOnly add_contact (POST /api/v1/contacts), for signup forms. It can go in a web page: that endpoint answers browsers, and the key can't read or send anything.

A signups only key calling anything else gets 403 forbidden. Keys made before levels existed are signups only. Revoked keys get 401 unauthorized.

A signup form

With a signups only key, from the browser. Pass the visitor's IP from a server to limit signups per visitor.

JavaScript
await fetch("https://app.tacoandtell.com/api/v1/contacts", {
  method: "POST",
  headers: {
    Authorization: "Bearer mc_your_signups_only_key",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({ email: form.email.value, source: "website" }),
});

Rate limits

Each key gets 300 requests a minute across REST and MCP. Some actions have their own limit, for each key and for the account: its keys, connected apps and dashboard share the account's, so more keys don't raise it. Over a limit the answer is 429 rate_limited; wait and retry.

add_contact600 an hour, 5 per visitor in 10 minutes
update_newsletter3 slug changes a day per account
check_newsletter_slug300 an hour
send_welcome_test_email20 an hour
create_campaign60 an hour
duplicate_campaign60 an hour
send_test_email30 an hour
schedule_campaign30 an hour
send_campaign30 an hour
send_campaign_to_more30 an hour
resume_campaign30 an hour
preview_campaign_cleanup30 an hour
delete_contact120 an hour
import_contacts120 an hour
export_contacts30 an hour
add_domain10 an hour
check_domain60 an hour
upload_image60 an hour
create_api_key10 an hour
change_plan30 an hour
open_billing_portal30 an hour

Plans

This server is self-hosted without billing: no plans and no limits on emails or subscribers. The billing endpoints answer 404 billing_off.