Quick start (for AI agents)
Everything you can do in the UI REST API·CLI·MCP works too. All three use the same API key, so AI agents like Claude Code can call Send as a tool. You only pay for emails sent ($0.002 each), and contacts are unlimited.
1. API key
Create one in Settings → API keys. The key is shown only once, at creation. Pass it as an environment variable or save it in the CLI.
export SEND_API_KEY=sd_live_… npx send.ad login --key $SEND_API_KEY # saved to ~/.sendad/config.json npx send.ad whoami
2. Sender details and brand profile
Before your first send, you need a company name, address, and phone number (the legal footer). Your brand profile (tone, products, links) is the raw material the AI works with.
curl
curl -X PUT https://send.ad/api/v1/workspace -H "Authorization: Bearer $SEND_API_KEY" -H "content-type: application/json" \\
-d '{"company_name":"Hanbit Inc.","address":"123 Market St, San Francisco, CA …","phone":"415-000-0000","brand_profile":{"tone":"friendly and polite","products":[{"name":"Hanbit Gift Set","url":"https://hanbit.kr/gift","price":"$59"}]}}'3. Add contacts
curl
npx send.ad contacts import ./mailchimp-export.csv --list customers
# or
curl -X POST https://send.ad/api/v1/contacts/bulk -H "Authorization: Bearer $SEND_API_KEY" -H "content-type: application/json" \\
-d '{"contacts":[{"email":"kim@example.com","first_name":"Minsu","tags":["VIP"]}],"list_ids":["<list-uuid>"]}'4. A campaign from a one-line brief
curl
npx send.ad ai "20% off holiday gift sets, through 11/25, free shipping" --list customers # → 3 subject lines · preview URL · cost estimate. Add --send to send right away, or --at to schedule.
Node.js
const r = await fetch('https://send.ad/api/v1/ai/campaign', { method: 'POST', headers: { authorization: \`Bearer \${process.env.SEND_API_KEY}\`, 'content-type': 'application/json' },
body: JSON.stringify({ brief: '20% off holiday gift sets, through 11/25', list_names: ['customers'], send: false }) })
const { campaign, preview_url, estimate } = await r.json()
// send after reviewing
await fetch(\`https://send.ad/api/v1/campaigns/\${campaign.id}/send\`, { method: 'POST', headers: { authorization: \`Bearer \${process.env.SEND_API_KEY}\` } })Python
import os, requests
H = {"Authorization": f"Bearer {os.environ['SEND_API_KEY']}"}
r = requests.post("https://send.ad/api/v1/ai/campaign", headers=H, json={"brief": "20% off holiday gift sets, through 11/25", "list_names": ["customers"], "send": False}).json()
print(r["preview_url"], r["estimate"])
requests.post(f"https://send.ad/api/v1/campaigns/{r['campaign']['id']}/send", headers=H)5. Results
npx send.ad campaigns report <id> curl https://send.ad/api/v1/campaigns/<id>/report -H "Authorization: Bearer $SEND_API_KEY"
OpenAPI spec: /api/v1/openapi.json · AI-readable summary: /llms.txt · Agent skills: /skill.md