Create a new signup
Subject to the per-org daily ceiling (50 signups created per day, regardless of tier). Pass an `Idempotency-Key` header to make retries safe.
Subject to the per-org daily ceiling (50 signups created per day, regardless of tier). Pass an Idempotency-Key header to make retries safe.
Authorization
ApiKey Long-lived org-scoped API key. Generate one from your account dashboard. Pass as Authorization: Bearer sgn_live_….
In: header
Header Parameters
Opaque client-supplied key, ≤ 200 chars. Same key + same body within 24h returns the original response. Same key + different body returns 422.
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
curl -X POST "https://example.com/signups" \ -H "Content-Type: application/json" \ -d '{ "title": "string", "eventDate": "2019-08-24T14:15:22Z" }'{
"id": "550e8400-e29b-41d4-a716-446655440100",
"organizationId": "org_123",
"slug": "fall-fundraiser-a1b2",
"title": "Fall fundraiser",
"status": "published",
"eventDate": "2026-09-15T17:00:00Z",
"signupCloseDate": "2019-08-24T14:15:22Z",
"location": "string",
"isPrivate": true,
"createdAt": "2019-08-24T14:15:22Z",
"updatedAt": "2019-08-24T14:15:22Z",
"description": "string",
"maxParticipants": 0,
"requiresPhone": true,
"eventWideCustomField": {
"name": "string",
"required": true,
"type": "short"
}
}{
"type": "https://thesignup.app/problems/not-found",
"title": "Not found",
"status": 404,
"detail": "string",
"code": "missing_credentials",
"errors": [
{
"path": "string",
"message": "string"
}
],
"cause": {
"property1": null,
"property2": null
}
}{
"type": "https://thesignup.app/problems/not-found",
"title": "Not found",
"status": 404,
"detail": "string",
"code": "missing_credentials",
"errors": [
{
"path": "string",
"message": "string"
}
],
"cause": {
"property1": null,
"property2": null
}
}{
"type": "https://thesignup.app/problems/not-found",
"title": "Not found",
"status": 404,
"detail": "string",
"code": "missing_credentials",
"errors": [
{
"path": "string",
"message": "string"
}
],
"cause": {
"property1": null,
"property2": null
}
}{
"type": "https://thesignup.app/problems/not-found",
"title": "Not found",
"status": 404,
"detail": "string",
"code": "missing_credentials",
"errors": [
{
"path": "string",
"message": "string"
}
],
"cause": {
"property1": null,
"property2": null
}
}{
"type": "https://thesignup.app/problems/not-found",
"title": "Not found",
"status": 404,
"detail": "string",
"code": "missing_credentials",
"errors": [
{
"path": "string",
"message": "string"
}
],
"cause": {
"property1": null,
"property2": null
}
}List signups for the calling organization GET
Cursor-paginated. Default page size is 20; max is 100. Stable order is `eventDate DESC, id DESC`. Pass the `nextCursor` from a previous response to advance.
Draft a signup from a plain-language description POST
Returns a structured draft (title, time slots, items, reminder cadence) ready for review. Free-tier orgs are capped at 3 lifetime drafts across the in-app wizard and this endpoint combined; the cap returns 402 with an `upgrade_required` payload. The draft is *not* saved — pass it to `POST /v1/signups` to create the actual signup.