Animo for AI agents
Read this first — before writing any code. This guide is for AI coding agents (Claude and others) asked to build, set up, or operate events with Animo. Its purpose is to keep you from rebuilding things Animo already does. Animo is a complete events platform: ticketing, payments (Mollie), VAT, invoicing, attendee CRM, lifecycle emails, approval workflows, QR check-in, and hosted event & registration pages all exist and are battle-tested. Your job is to orchestrate and present — not to reimplement the platform. If you read nothing else, read the contract below.The contract
You are integrating with Animo, an events platform that already handles ticketing, payments (Mollie), VAT, invoicing, attendee CRM, confirmation/lifecycle emails, approval workflows, QR check-in, and hosted event & form pages. Orchestrate and present — do not rebuild these.Never build
Payment or checkout flows · VAT/tax calculation · invoicing · ticket issuance, QR codes, or door scanning · attendee or lead storage · confirmation/lifecycle emails · custom forms that submit into Animo.Decide with one question — what is this thing?
The thing is… Rule Who builds it Money — tickets, payment, refunds, VAT, invoices Always Animo-hosted. Link or embed. Animo Data of record — registrations, leads, sponsorship / waitlist / contact submissions Animo-hosted form or activation, embedded or linked Animo hosts, you frame Presentation — marketing pages, schedules, speaker bios, calendars Build freely; pull content via GETYou Two supported modes
- Fully Managed — you call the API to set up and operate; Animo hosts everything the attendee sees. This is the default. Start here.
- Custom Site + Animo Checkout — you build the marketing site; every money and data-of-record path links or embeds to Animo.
Not supported — do not attempt
Your own payment UI or Mollie integration · completing payment outside Animo’s hosted checkout (“headless paid”) · custom-built forms that POST submissions or leads into Animo · polling for leads/submissions. There is no submission/lead ingest endpoint and no checkout URL for completing payment yourself. If a requirement seems to need one of these, stop and surface the limitation — do not code around it.
Supported patterns at a glance
| Pattern | OK? |
|---|---|
| API setup + link to hosted ticket/checkout pages | ✅ |
API orders/create (paid ticket) + redirect attendee to /o/{order-id}/checkout | ✅ |
API form definitions (POST /forms/create) + attach form_id to ticket types | ✅ |
Custom site + GET for display + links to Animo | ✅ |
| Webhook receiver that persists events | ✅ |
| Your own payment form or direct Mollie integration | ❌ |
| Custom form POSTing submissions/leads into Animo | ❌ |
Polling the API for leads/submissions (no GET — use webhooks) | ❌ |
orders/create for paid tickets — use it, then redirect to /o/{order-id}/checkout. What’s forbidden is collecting payment yourself. “Headless paid orders” means completing payment outside Animo’s hosted checkout — that path has no checkout URL, not API-driven paid registration.
On forms: defining a form via the Forms API (POST /forms/create) and attaching it to a ticket type is supported and encouraged. Collecting answers on your own frontend and posting them into Animo is not — answers are captured on the hosted ticket/activation flow.
Why the money path is off-limits
Animo’s price is a function ofticket count × customer type (business vs. consumer) × country × online-vs-in-person. That is tax law encoded in software. Reimplementing it produces invoices that are confidently wrong in ways nobody catches until one is disputed. The same logic extends to data of record: there is no API to write a submission or lead into Animo, so any “custom form that posts to Animo” is a fragile bridge across a gap that does not exist. Hosted-and-linked is not a limitation to work around — it is the correct architecture.
Before you call the API
First-contact gotchas documented elsewhere that bite agents who only read this file:- Pro plan required. Without it,
GET /api/v1/companiesreturns200with an emptydataarray — not a403. An empty list means “no Pro plan,” not “bad token.” See API index — Plan requirement. {company}in API paths is a sqid; public URLs use slugs. Don’t interchange them — get the sqid fromGET /api/v1/companies, build public URLs from theslugfields. See Conventions — Public URLs.- Paid ticket public pages 404 until Mollie is connected. A paid ticket type with no connected payment provider has no working signup page.
- Event
slugis ignored on create — it’s derived fromname. Use theidfrom the create response;PATCHthe slug afterward if you need a specific one.
The two supported modes
Mode 1 — Fully Managed (default)
You call the API; Animo hosts the entire attendee experience.- You build: no separate site. You orchestrate API calls to set up and run the event. You still shape what attendees see through the API — event page copy, ticket types, pricing, email templates — you just don’t build a frontend.
- Animo owns: event page, ticket shop, checkout, payments, forms, emails, approvals, scanning — everything.
- Best for: private or marketing events, individuals, fast turnaround, anyone without a hard branding requirement.
- Attendees go to: the hosted event page —
https://app.animo.co/{company-slug}/event/{event-slug}.
Mode 2 — Custom Site + Animo Checkout
You build the marketing site on your own design and domain; every money and data-of-record path links or embeds to Animo.- You build: marketing/landing pages, schedules, speaker bios, a calendar — all presentation, populated via
GET. - Animo owns: the entire money path (ticket pages, checkout, payments, VAT, invoices) and the entire data-of-record path (hosted forms/activations for sponsorship, waitlist, contact).
- Best for: professional or paid public events that need a bespoke brand.
- How you connect to Animo:
- Tickets → link to the hosted ticket signup page:
https://app.animo.co/{company-slug}/event/{event-slug}/{ticket-type-slug}(append?qty=1to pre-select quantity). See Conventions — Public URLs. - Forms (sponsorship, waitlist, contact) → embed or link the Animo-hosted activation. Get the activation
slugfromGET /api/v1/{company}/activationsand link to the company-scoped URLhttps://app.animo.co/{company-slug}/{activation-slug}(the default — always works for published activations). Link to that base URL, not/form—/formis where attendees land after sign-up, not a cold-traffic entry point. See Conventions — Activation form page for the event-scoped variant. Do not build a custom form that posts into Animo — see Known API gaps.
- Tickets → link to the hosted ticket signup page:
What the AI’s job actually is
Setup is only one of several jobs. These are orthogonal to the two modes above — any of them applies on top of either mode. Most real engagements are one or two of these, not all five.Operate — ongoing, no building (highest value, lowest cost)
The AI as an ops console, not a builder. Approve or reject pending registrations, monitor sign-ups, pull attendee lists, shift event dates, swap copy on pages and emails. This is the cheapest and most common mode — reach for it before assuming a setup or build task.- Read events, ticket types, orders.
PATCHevents (dates, details), ticket types, orders (approve/reject).PATCHcomms templates to update email copy;PATCH/POSTevent pages to update content. Customize Animo’s templates — don’t send parallel lifecycle emails from your own app; Animo already sends them.
Provision — one-time setup
Create events, ticket types, forms, and pages from a spec. Build the structure, attach forms to ticket types, set up comms templates, then hand off to Operate.Integrate — webhook-driven
Onform-submitted, activation-submitted, lead-created, meeting-booked, etc., route the event to Slack / Sheets / CRM / email. The AI builds a thin receiver, not a site.
Important: there is no GET backfill for leads, submissions, or meetings. Webhooks are the only way to obtain this data — you must persist every webhook event when it arrives. See Webhooks.
Sync / pull — Animo as source of truth → your site
The inverse of Provision: read events, ticket types, and pages, then generate or refresh a static site, calendar, or directory from them. Great for multi-event calendars.Bulk / templated — one spec → many events
Recurring series, multi-vertical programs, franchise/decentralized editions. One spec fans out to many events via repeated Provision calls.Prompt recipes
Copy-paste starting prompts for each job. Adjust names, dates, and the company sqid.Operate — approve pending registrations
Provision — set up a new event
Custom site — link out to Animo
Integrate — webhook receiver
Sync — refresh a calendar
Capability map & known gaps
What the API supports today, and the edges not to wander into. Always treat the endpoint docs and Conventions as the source of truth.| Capability | Status |
|---|---|
| Read user, companies, events, activations, ticket types, orders, forms | ✅ GET |
| Create/update events, ticket types, forms, event pages, comms templates | ✅ |
| Create/update orders (free tickets) | ✅ |
Create paid orders, then redirect attendee to hosted checkout (/o/{order-id}/checkout) | ✅ |
| Approve/reject orders, shift dates, edit copy (Operate) | ✅ PATCH |
| Register webhooks for submissions, leads, meetings | ✅ |
| Payment collection / VAT / invoicing | 🚫 Animo-hosted only — never build |
| Completing payment outside hosted checkout (“headless paid”) | 🚫 No checkout URL for this — always redirect to /o/{order-id}/checkout |
| Custom form that posts into Animo | 🚫 No submission/lead ingest endpoint — embed/link the hosted activation instead |
GET leads / submissions / meetings | 🚫 Not exposed — use webhooks and persist |
orders/create form payload | ⚠️ Not yet persisted server-side; send order-level fields only |
| Delete events / ticket types / orders / forms | ⚠️ Routes missing — cannot delete via API |
Related
- API index — API overview and endpoint index
- Authentication — tokens and scopes
- Conventions — IDs, dates, errors, public URLs
- Webhooks — outbound events (the only path to lead/submission data)
- Changelog — version history and known limitations