Forms, Mailboxes & Email Testing Built for your AI agents.
Three critical capabilities in one unified backend: form endpoints they POST to and sail past bot defenses, real mailboxes they send, receive, reply, and read OTP codes from, and disposable inboxes for CI.
GEO-smart leads — every form submission auto-stamped with country, city, region, and timezone.
See Ollastack in action.
Submit a form and watch what happens.
Everything your agents can do.
Forms in, mail out — one backend, one token system, one console. Each surface is in the OpenAPI spec your agent reads itself.
Headless forms
One endpoint. Every submission GEO-stamped, spam-filtered, and agent-aware.
Enterprise Agent Forms
- Zero-Config Geo Stamping: IP, City, Country, Lat/Lng & Timezone.
- ML Spam & Bot Defense: Honeypots, Captcha, rate limits.
- Instant Webhooks: Auto-retries, replay & custom headers.
- Native Integrations: Slack, Sheets, Discord, Webhooks.
Agent Mail
Real email inboxes your agents own.
Full Bidirectional Email
- Real Agent Identities: Send & receive from custom domain.
- Multi-Tenant SMTP: Auto DKIM, SPF & DMARC signing.
- Automated Inbound Routing: Webhooks on email received.
- AI Mailbox Automation: Smart auto-reply & triage rules.
Mail testing for CI
Disposable inboxes on @test.ollastack.com: read OTPs, assert, and test every email.
Automated OTP & E2E Testing
- One-Call Polling:
/waitAPI extracts OTPs under 200ms. - Playwright & Cypress Ready: Assert links & HTML emails in CI.
- Zero Infrastructure: Auto-expiring disposable mailboxes.
- Docker & CI Support: Deterministic email assertions.
TRUSTED BY BUILDERS
Three capabilities. One API. Call them live.
The Forms and Test-inbox demos run for real, right here — no key, no signup.
$ curl -X POST https://login.ollastack.com/api/submit/contact \ -H "Content-Type: application/json" \ -d '{"name":"Ada","email":"ada@example.com","message":"Tell me more"}'
# the response shows here — geo is auto-stamped server-side # claim your agent's identity, then send as it $ curl -X POST https://login.ollastack.com/api/mailboxes \ -H "Authorization: Bearer fmd_<token>" \ -d '{"name":"Support","mode":"agent","handle":"support"}' $ curl -X POST https://login.ollastack.com/api/mailboxes/$ID/send \ -d '{"to":"user@example.com","subject":"Re: your demo","text":"…"}'
{"success": true, "data": {
"address": "support@agent.ollastack.com",
"direction": "outbound", "deliveryStatus": "sent"}} # disposable inbox → wait for the email → read the OTP $ curl -X POST https://login.ollastack.com/api/mailboxes \ -H "Authorization: Bearer fmd_<token>" \ -d '{"name":"signup-ci","mode":"test"}' $ curl "https://login.ollastack.com/api/mailboxes/$ID/wait?timeout=55" \ -H "Authorization: Bearer fmd_<token>"
# click Run — extracts the OTP, exactly like /wait + codes[0] in CI One endpoint. Five ways to call it.
Same URL serves your AI agent, your static HTML form, your React app, your mobile client.
$ curl -X POST https://login.ollastack.com/api/submit/contact \ -H "Authorization: Bearer fmd_<your-agent-token>" \ -H "Content-Type: application/json" \ -d '{"name":"Ada","message":"hi"}' {"success": true, "id": "sub_8f2…", "country": "IN", "city": "Bengaluru"} # tagged in the inbox with the agent's label # every call recorded in the audit log
$ curl -X POST https://login.ollastack.com/api/submit/contact \ -H "Content-Type: application/json" \ -d '{"name":"Ada","message":"hi"}' {"success": true, "id": "sub_8f2…"}
await fetch("https://login.ollastack.com/api/submit/contact", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ name, email, message }), });
<form action="https://login.ollastack.com/api/submit/contact" method="POST"> <input name="email" type="email" required/> <textarea name="message" required></textarea> <button>Send</button> </form>
import { useForm } from "@ollastack/react"; export function Contact() { const [state, handleSubmit] = useForm("contact"); if (state.succeeded) return <p>Thanks!</p>; return ( <form onSubmit={handleSubmit}>...</form> ); }
From API key to your first agent submission in two minutes.
Three small steps. One curl block. Your agent is sending real submissions before your coffee cools.
Create a form
Sign up, click Create form, name it. Your endpoint URL is yours immediately.
→ create your first formConnect your agent
One click mints a scoped, audited token and hands you a paste-ready agent prompt.
→ connect your agentYour agent POSTs
One Bearer-authed POST and the submission lands in your inbox, tagged with the agent's label.
→ docs#fetchCore features, on every plan.
Designed for AI-agent traffic from the ground up.
/api/openapi.json — CORS-open, machine-readable. Agent frameworks consume it directly to discover endpoints and response shapes.Simple, transparent pricing.
Every tier includes the same core features — the monthly submission cap is the main difference. No overage charges.
Free
For testing & personal sites
- ✓ 50 submissions / month
- ✓ Unlimited forms
- ✓ GEO-stamped leads
- ✓ 1 agent token
- ✓ Spam filtering
Solo
For indie hackers & builders
- ✓ 500 submissions / month
- ✓ Unlimited forms & webhooks
- ✓ Full Agent Mail & Test Inboxes
- ✓ 5 agent tokens + audit log
- ✓ Slack & Discord integrations
- ✓ AI Lead Enrichment built-in
Team
For fast-growing agent apps
- ✓ 5,000 submissions / month
- ✓ Unlimited team members
- ✓ Unlimited agent tokens
- ✓ Priority support & custom domains
- ✓ Dedicated IP for Agent Mail
Ready to give your AI agents a real backend?
Get started in two minutes. No credit card required.