API-FIRST ยท AGENT FORMS ยท MAILBOXES

Forms, mailboxes & email testing,
Built for your
AI agents.

Three things your agents need, one backend: form endpoints they POST to and sail past the bot defenses, real mailboxes they send, receive, reply, and read OTP codes from, and disposable inboxes for testing email in CI. One token system, one OpenAPI spec they read themselves.

GEO-smart leads โ€” every form submission auto-stamped with country, city, region, and timezone.

HEADLESS FORMS 01

One endpoint. Every submission GEO-stamped, spam-filtered, and agent-aware.

OLLASTACK

ONE PLATFORM ONE BACKEND ยท ONE TOKEN ONE CONSOLE
AGENT MAIL 02

Real email inboxes your agents own. Send, receive, and reply over the API.

TEST INBOXES 03

Disposable inboxes for CI. Read OTPs, assert, and test every email with ease.

BOT DEFENSES
READY
OPENAPI
FRIENDLY
SECURE BY DESIGN
TOKEN AUTH
โœ“ Submission captured!
๐Ÿ“ Location
Bengaluru, India ๐Ÿ‡ฎ๐Ÿ‡ณ
๐Ÿ•’ Time
May 18, 2025, 12:41 PM IST
๐Ÿ”˜ Status
โ— Received
๐Ÿ†” Lead ID
lead_01JXBZQ1KSK6Y2M7T9R1
/ ONE PLATFORM

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.

01 FORMS

Headless forms

One endpoint. Every submission GEO-stamped, spam-filtered, and agent-aware.

POST /v1/forms/{id}/submit
Authorization: Bearer {token}
Content-Type: application/json
{
  "name": "Ada",
  "email": "ada@example.com"
}
โ†’ Call it live
02 AGENT MAIL

Agent Mail

Real email inboxes your agents own.

โœ‰ support@agent.ollastack.com 3
โœ‰ New message from user
2m ago
โœ‰ OTP is 364921
5m ago
โœ‰ Welcome to Ollastack
12m ago
โ†’ View docs
03 TEST INBOXES

Mail testing for CI

Disposable inboxes on @test.ollastack.com: read OTPs, assert, and test every email.

Inbox: test_01HXY2
OTP detected: 364921 Success
Code extracted Success
Assertion passed Success
โ†’ View docs

TRUSTED BY BUILDERS

openapi.json โ†—
$ 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"}'
live sandbox ยท no token needed
# 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":"โ€ฆ"}'
needs a mail token ยท runs in your terminal
{"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>"
live ยท no token needed
# click Run โ€” extracts the OTP, exactly like /wait + codes[0] in CI
$ 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>
  );
}
1
step 1 ยท 30 seconds

Create a form

Sign up, click Create form, name it. Your endpoint URL is yours immediately.

โ†’ create your first form
2
step 2 ยท 60 seconds

Connect your agent

One click mints a scoped, audited token and hands you a paste-ready agent prompt.

โ†’ connect your agent
Bearer tokens built for agents
Agent-typed tokens with a label, an audit log of every call, and a ๐Ÿค– stamp on the submissions they create. Scoped to your account. Revocable in one click.
Spam pipeline that respects authorisation
Honeypot, rate limits, and CAPTCHA apply to anonymous browser traffic. Bearer-authed agent submissions skip them โ€” the token is the trust boundary.
Never lose a lead
Nothing is silently dropped. Every submission blocked by spam or validation is logged and reviewable โ€” un-flag and re-send in one click.
Self-describing API
Public /api/openapi.json โ€” CORS-open, machine-readable. Agent frameworks consume it directly to discover endpoints and response shapes.
Idempotency + signed webhooks
Idempotency keys on every submit. HMAC-signed webhooks with full delivery history, auto-retry with backoff, and one-click replay.
Email + 1,000+ integrations
Slack, Discord, Telegram, Google Sheets, Mailchimp native โ€” no Zapier subscription. Anything else via Zapier, Make, n8n, Activepieces.

Free

For testing & personal sites

$ 0 / month
  • โœ“ 50 submissions / month
  • โœ“ Unlimited forms
  • โœ“ GEO-stamped leads
  • โœ“ 1 agent token
  • โœ“ Spam filtering
Get started free

Team

For fast-growing agent apps

$ 29 / month
  • โœ“ 5,000 submissions / month
  • โœ“ Unlimited team members
  • โœ“ Unlimited agent tokens
  • โœ“ Priority support & custom domains
  • โœ“ Dedicated IP for Agent Mail
Get Team plan

Ready to give your AI agents a real backend?

Get started in two minutes. No credit card required.