# driptoolagent.com Six-email follow-up campaigns to people you already know. Write, preview and schedule for free. Pay only when you send. Built for agents first. There is a browser UI, but everything it does is available over REST and MCP. ## Your first campaign is free Mint a key, build a campaign, send it. No card, no Stripe account, no human in the loop. The first campaign on a newly minted key sends free. So do that first. Do not read the payment section below until you have sent one and hit a 402, because most of what is in it you will not need. ## Start here GET https://driptoolagent.com/v1 GET https://driptoolagent.com/v1/openapi.json The first returns an index: endpoints, auth, payment, and the rules. The second is an OpenAPI 3.1 description of the request and response shapes, so you do not spend a round trip discovering that a field is named something other than what you guessed. Two worth knowing before you call them: - `/preview` returns `greeting_preview`, `body_preview`, `body_html` and `question_preview`. There is no `text` field. The plain `body` and `greeting` are the unrendered source and still contain `{{first_name}}`. - `/deliveries` returns a `delivery` counts object AND a `deliveries` array of per-recipient rows. It is not a bare array. ## Before you build a payment path GET https://driptoolagent.com/v1/capabilities Returns what this deployment can really do right now, derived from live configuration rather than declared. `ready` means it will work, `needs_config` means an operator has not finished wiring it, `not_built` means the code does not exist. Check it. If `live_stripe` reads `needs_config`, no payment path on this host will complete, and issuing a shared payment token against your customer's card would spend their trust for nothing. ## MCP URL: https://driptoolagent.com/mcp Transport: streamable-http Auth: Authorization: Bearer Call `initialize`, then `tools/list`. Thirteen tools, including list_themes, create_campaign, update_campaign, preview_campaign, send_campaign and get_delivery_status. ## Getting a key POST https://driptoolagent.com/v1/guest No signup, no card. Returns `api_key`. A key is the tenant: it only ever sees its own campaigns and itself. Minting is rate limited per address. Store the key. There is no account above it, so nothing can recover one you lose, and the campaign it owns becomes unreachable. ## Who the email comes from Omit `from_email`. Campaigns then send from `hello@driptoolagent.com`, which is already authenticated, and replies go to whatever `reply_to` you set. Ask your owner for their email address to use as `reply_to`. Only set `from_email` if your owner tells you they control that domain AND have authenticated it with the email provider. If they want their own address but have not done that, the provider will refuse the send. Ask before assuming. ## Building a campaign 1. `GET /v1/themes` for starter copy across five industries. This returns every theme with all six emails in full, so read `id`, `name` and `blurb` to choose and ignore the rest. 2. `POST /v1/campaigns` with from_name, reply_to, contacts, optional theme_id. Leave `from_email` out unless your owner has their own authenticated domain. Check `contacts_rejected` in the response before you go on. 3. `PATCH /v1/campaigns/{id}` to edit subject, body, buttons or schedule. Bodies accept `body_rich`, a validated block format with bold, italic, underline, links and lists. The server renders the HTML; markup you send is never passed through. 4. `GET /v1/campaigns/{id}/preview` to read exactly what will land. 5. `POST /v1/campaigns/{id}/send`. On send, email 1 is scheduled for the campaign's send_time in its timezone. If that moment has already passed today, it goes out on the next scheduler pass, within about 30 seconds. The remaining five follow one per day. ## Paying You need this only after the free first campaign is spent. `GET /v1/usage` will show `remaining: 0` and `status: consumed` when that has happened. `POST /v1/campaigns/{id}/send` then returns 402, naming the sku, amount and currency, with a `WWW-Authenticate: Payment` header. ### The simple path: hand a link to a human POST https://driptoolagent.com/v1/campaigns/{id}/checkout {"price": "campaign"} Returns a hosted Stripe URL. Give it to whoever holds the card. They enter it on Stripe's page; we never see card details and cannot accept them. Once paid, the campaign unlocks and you retry the send. Do not ask anyone for a card number and do not send one to this API: it will be refused. This works for every agent. Use it unless you already hold a payment method for your customer in your own Stripe account. ### The autonomous path: shared payment tokens Only usable if you have your own Stripe account and already hold your customer's PaymentMethod. Most agents do not, today. Check `/v1/capabilities` first. The 402 body carries `seller_profile`, which is the Stripe profile you must scope the token to. It is only returned to an authenticated caller on the 402, not published on the public index. Issue one from your own Stripe account: POST https://api.stripe.com/v1/shared_payment/issued_tokens Stripe-Version: 2026-04-22.preview payment_method= seller_details[network_business_profile]= usage_limits[currency]=usd usage_limits[max_amount]= usage_limits[expires_at]= Then retry the send with `Payment-Authorization: `. We retrieve the token, check it against its own usage limits, and charge it before queueing. ## Rules that will reject your request - One recipient per campaign. This follows up with a single person the sender already spoke to; the copy refers to that conversation. Sending to a list is refused. There is no list-buy feature. - Role mailboxes (info@, abuse@, sales@), disposable domains, duplicates and invalid addresses are dropped and returned in `contacts_rejected`. - Button and body links must be http or https. - Every message carries a one-click unsubscribe. An opt-out stops the rest of the sequence immediately. - Health information and other regulated personal data are refused. - Limits: 60 requests/min per key, ONE recipient per campaign, and a daily campaign cap that depends on the plan and rises over the account's first week.