Skip to content

For developers

The hard parts of communications,already done.

One API across voice, messaging, mail, calendar, CRM and commerce. Identity, threading, consent, idempotency and signed webhooks are built in, so the code you write is about your product.

The shape of it

Person first. Channel second.

You don’t send to a phone number and hope it matches someone. You resolve a person, and the engine works out the channel, the consent and the thread.

Samples are illustrative. The full reference is shared with approved partners.

booking.tsIllustrative
// Every call is scoped to one of your clients.
const client = autochat.client(clinic.autochatClientId);

// Find the person, not the phone number.
const maya = await client.contacts.resolve({ phone: "+14035550142" });

// Consent is checked before it sends. A retry never double-texts.
await client.messages.send({
  to: maya.id,
  channel: "sms",
  template: "booking.confirmed",
  data: { when: booking.startsAt },
  idempotencyKey: `booking-${booking.id}`,
});

Primitives

Eight nouns cover most of it.

clients
The businesses you serve. Every request targets exactly one.
contacts
People, resolved across phone, email and social handles.
threads
One ordered history per person, across every channel.
messages
Texts, rich messages and social replies: sent, scheduled or cancelled.
calls
Numbers, routing, recordings and transcripts.
bookings
Availability, holds, confirmations and reschedules.
invoices
Estimates, invoices, payments and receipts.
webhooks
Signed events for everything above.

Built in

Things you won’t have to build.

These are the parts that take a quarter to get right and a year to stop breaking.

  • Idempotent sends

    Pass a key with every send. Retry as often as your queue likes, and the person gets one message.

  • Signed webhooks

    Every event is signed, so you can verify it came from AutoChat before acting on it.

  • A real sandbox

    Test keys run the real delivery pipeline, with signed webhooks included, without contacting a real person.

  • Capability-scoped keys

    Issue a key that can send but can't read contacts, or read but never send. Grant the least it needs.

  • Client scoping, enforced

    Every request names one client. Asking for another workspace's client is refused, not filtered.

  • Consent that fails closed

    The engine checks consent before every send. If it can't check, it doesn't send.

  • Scheduled sends

    Schedule messages ahead and cancel them by ID or by attribute. A send that misses its moment is skipped, not sent late.

  • Threading for free

    Everything you send, and every reply, lands on the right person's thread without you tracking a thing.

  • Agents with context

    The context your AI agents read is the same thread your code reads: one source, never out of sync.

Build on the thread, not the plumbing.

API access comes with test keys and the full reference. Tell us what you're building.