# Add attendees with an API key

A host's own registration form can add attendees to an event without a session.
The host makes a key in the dashboard, under the event's API keys; it is shown once
and names the event. Call from your server, never from a browser.

```
POST https://convova.app/api/integrations/attendees
Authorization: Bearer <key>

{ "externalTicketId": "reg-1042", "email": "ana@example.com", "source": "luma",
  "ticketTypeName": "General", "name": "Ana Ruiz", "organization": "Northlight",
  "title": "Producer" }
```

- `externalTicketId`, `email`, `source`, and `ticketTypeName` are required; `name`,
  `organization`, and `title` are optional.
- `source` is `luma` or `eventbrite`, the platform the ticket was sold on; use it
  even for your own form, and keep `externalTicketId` unique per registration.
- `ticketTypeName` must match a ticket type the event already has, ignoring case.
- The call is idempotent on `externalTicketId`: the answer says `created` or
  `skipped`, so it is safe to retry.
- The person gets an unclaimed ticket and no email. They find it in the Convova app
  when they sign in with that address, and the sign-in email goes out at their
  first check-in.
- 401: the key is missing or revoked. 400: a field is invalid, or the ticket type
  does not exist; the message says which.
