tinysend
newsletter and email platform for humans and agents — lists, subscribers, posts, mailboxes, webhooks, automations
https://id.tinysend.com/api/auth
1.0-draft
Ed25519
6/28/2026
list_lists_subscribersList subscribers
create_lists_subscribersAdd a subscriber
get_lists_subscribersGet subscriber details
update_lists_subscribersUpdate subscriber
delete_lists_subscribersRemove subscriber
import_lists_subscribersBulk import subscribers
list_lists_subscribers_exportExport subscribers as CSV
list_lists_postsList posts
create_lists_postsCreate a draft post
Discovery
curl https://id.tinysend.com/.well-known/agent-configurationRegister an Agent
curl -X POST https://id.tinysend.comhttps://id.tinysend.com/api/auth/agent/register \
-H "Content-Type: application/json" \
-d '{
"name": "my-agent",
"public_key": "<your-ed25519-public-key>",
"mode": "delegated"
}'get_lists_postsGet post details with stats
update_lists_postsUpdate draft post
delete_lists_postsDelete draft post
send_lists_postsSends post to all active subscribers on the list. If sending would exceed the plan limit, returns 402 with MPP payment challenge (agents can pay inline) or upgrade URL.
list_lists_senderWho emails are sent from: tinysend default, your own domain, or gmail (coming soon). Includes DNS records with found/not-found status and a plain-language next step.
set_lists_sendertype=tinysend resets to the default. type=custom_domain needs name, email (local part), domain — creates the domain in Postmark and returns the DNS records to add. type=gmail is coming soon.
delete_lists_senderReset sender to tinysend default
check_lists_senderTriggers a fresh Postmark verification. The cron does this every minute anyway — use this for an immediate check after adding records.
list_lists_site_domainCustom domain for the public newsletter site. Includes the DNS records to add, found/not-found per record, and a plain-language next step. Verification and SSL run automatically every minute; the owner gets an email when the site is live.
create_lists_site_domainSubdomains (news.acme.com) need one CNAME. Naked domains (acme.com) also get a TXT record for the security certificate and need ALIAS/flattened-CNAME support at the DNS provider; set www_enabled to serve www too.
delete_lists_site_domainThe site keeps working at its tinysend.com subdomain.
check_lists_site_domainTriggers a fresh DNS + certificate check. The cron does this every minute anyway — use this for an immediate check after adding records.
list_lists_domainWho emails are sent from: tinysend default, your own domain, or gmail (coming soon). Includes DNS records with found/not-found status and a plain-language next step.
set_lists_domaintype=tinysend resets to the default. type=custom_domain needs name, email (local part), domain — creates the domain in Postmark and returns the DNS records to add. type=gmail is coming soon.
delete_lists_domainReset sender to tinysend default
check_lists_domainTriggers a fresh Postmark verification. The cron does this every minute anyway — use this for an immediate check after adding records.
invite_listsInvite waitlist entries
list_lists_statsWaitlist stats
join_listsJoin a waitlist
list_listsList all lists
create_listsCreate a list
get_listsGet list details
update_listsUpdate list settings
delete_listsDelete a list
list_mailboxes_emailsList emails
create_mailboxes_emailsCreate outbound email
get_mailboxes_emailsGet email detail
update_mailboxes_emailsUpdate email status
list_mailboxesList all mailboxes
create_mailboxesCreate a mailbox
get_mailboxesGet mailbox details
update_mailboxesUpdate mailbox settings
delete_mailboxesDeactivate a mailbox
create_emailsOne-off email to a single recipient, sent synchronously from a mailbox via the Postmark transactional stream. The from address must be an existing mailbox (root tinysend.com or a verified custom domain). Supports Idempotency-Key header — a repeated key returns the original send instead of sending twice.
get_emailsGet a transactional email
list_contactsList contacts for project
get_contactsGet contact details
update_contactsUpdate contact notes
list_contacts_listsLists this contact belongs to
list_contacts_activityRecent activity timeline for a contact
list_contacts_emailsEmails delivered to this contact
list_statsProject-level aggregate stats
get_statsPer-list aggregate stats
list_webhooksList webhook subscriptions
create_webhooksCreate a webhook subscription
get_webhooksGet webhook subscription details
update_webhooksUpdate a webhook subscription
delete_webhooksDelete a webhook subscription
list_webhooks_deliveriesRecent delivery log for a webhook
test_webhooksSend a test event to the webhook
list_automationsList automations
create_automationsCreate automation
get_automationsGet automation
update_automationsUpdate automation
delete_automationsDelete automation
list_invitesList pending invites for the caller
create_invites_approveApprove an invite
create_invites_rejectReject an invite
create_sdk_feedbackSubmit in-app feedback (TinysendKit)
create_sdk_subscribeSubscribe an email to a list (TinysendKit, double opt-in)
list_usageGet current billing period usage
list_settings_overageGet overage billing settings
create_settings_overageEnable or disable overage billing. When enabling, a spending cap is required.
create_billing_subscribeCreate a Stripe subscription programmatically. For agents with virtual cards or any API client that has a Stripe payment method. Pass a payment_method_id obtained from Stripe.js or the Stripe API.
list_tools_disposableKeyless. No API key required.
list_tools_blacklistKeyless. No API key required.
list_tools_deliverabilityKeyless. No API key required. Returns a 0-100 score and fix records.
create_tools_inbox_testKeyless. Returns a one-time address; send a real email to it, then GET the result for a spam score.
get_tools_inbox_testKeyless. Returns received=false until the email lands, then the spam score + report.