Draft a signup from a plain-language description
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.
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.
Authorization
ApiKey Long-lived org-scoped API key. Generate one from your account dashboard. Pass as Authorization: Bearer sgn_live_….
In: header
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
application/problem+json
application/problem+json
curl -X POST "https://example.com/signups/from-description" \ -H "Content-Type: application/json" \ -d '{ "description": "Saturday potluck for my soccer team after practice, around 20 people. Need salads, sides, desserts, and drinks." }'{
"draft": {
"title": "string",
"description": "string",
"category": "potluck",
"suggestedDate": "string",
"timeSlots": [
{
"label": "string",
"startTime": "string",
"endTime": "string",
"capacity": 1
}
],
"itemList": [
{
"name": "string",
"quantityNeeded": 1,
"notes": "string"
}
],
"reminderCadence": "none",
"estimatedParticipants": 1
}
}{
"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
}
}{
"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
}
}Create a new signup POST
Subject to the per-org daily ceiling (50 signups created per day, regardless of tier). Pass an `Idempotency-Key` header to make retries safe.
Cancel a signup (soft-delete) DELETE
Marks the signup as `closed`. Participants are NOT auto-notified — that flow is intentionally separate so an agent's DELETE never blasts the roster by accident. Send a notification message via the dashboard or a future `:cancel` action endpoint.