{"openapi":"3.1.0","info":{"title":"Pivotal API","version":"1.0.0","description":"Customer onboarding & CS platform — public API. Bearer auth, JSON in / JSON out, cursor pagination, soft deletes.","contact":{"name":"Pivotal","url":"https://my.pivotal.app"}},"servers":[{"url":"https://my.pivotal.app","description":"Production"}],"security":[{"BearerAuth":[]}],"components":{"securitySchemes":{"BearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"pivotal_…","description":"Bearer token from /admin/api-keys. Prefix `pivotal_` for live, `pivotal_test_` for test."}},"schemas":{"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"type":{"type":"string","enum":["invalid_request_error","authentication_error","permission_error","rate_limit_error","not_found","conflict","internal_error"]},"code":{"type":"string"},"message":{"type":"string"},"field":{"type":"string"}},"required":["type","code","message"]}},"required":["error"]},"Me":{"type":"object","properties":{"object":{"type":"string","enum":["me"]},"api_key":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"prefix":{"type":"string"},"scopes":{"type":"array","items":{"type":"string"}},"rate_limit_tier":{"type":"string"}},"required":["id","name","prefix","scopes","rate_limit_tier"]},"organization":{"type":"object","properties":{"id":{"type":"string"},"slug":{"type":"string"},"name":{"type":"string"}},"required":["id","slug","name"]}},"required":["object","api_key","organization"]},"Health":{"type":"object","properties":{"status":{"type":"string","enum":["ok"]},"timestamp":{"type":"string"}},"required":["status","timestamp"]},"CustomerList":{"type":"object","properties":{"object":{"type":"string","enum":["list"]},"data":{"type":"array","items":{"$ref":"#/components/schemas/Customer"}},"has_more":{"type":"boolean"},"next_cursor":{"type":"string","nullable":true}},"required":["object","data","has_more","next_cursor"]},"Customer":{"type":"object","properties":{"object":{"type":"string","enum":["customer"]},"id":{"type":"string","example":"clxabc123"},"display_id":{"type":"integer","example":42},"name":{"type":"string","example":"Acme Co."},"slug":{"type":"string","nullable":true},"domain":{"type":"string","nullable":true},"status":{"type":"string","example":"active"},"plan":{"type":"string","nullable":true},"mrr":{"type":"integer","nullable":true,"description":"Monthly recurring revenue in cents."},"monthly_orders":{"type":"integer","nullable":true},"hubspot_company_id":{"type":"string","nullable":true},"hubspot_deal_id":{"type":"string","nullable":true},"stripe_customer_id":{"type":"string","nullable":true},"intercom_company_id":{"type":"string","nullable":true},"slack_channel_id":{"type":"string","nullable":true},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["object","id","display_id","name","slug","domain","status","plan","mrr","monthly_orders","hubspot_company_id","hubspot_deal_id","stripe_customer_id","intercom_company_id","slack_channel_id","created_at","updated_at"]},"CustomerCreate":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":255},"slug":{"type":"string","minLength":1,"maxLength":120},"domain":{"type":"string","maxLength":255},"status":{"type":"string","enum":["active","onboarding","at_risk","churned","low_touch"]},"plan":{"type":"string","maxLength":120},"mrr":{"type":"integer","minimum":0},"monthly_orders":{"type":"integer","minimum":0},"hubspot_company_id":{"type":"string"},"hubspot_deal_id":{"type":"string"},"stripe_customer_id":{"type":"string"},"intercom_company_id":{"type":"string"},"slack_channel_id":{"type":"string"}},"required":["name"]},"CustomerUpdate":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":255},"slug":{"type":"string","minLength":1,"maxLength":120},"domain":{"type":"string","maxLength":255},"status":{"type":"string","enum":["active","onboarding","at_risk","churned","low_touch"]},"plan":{"type":"string","maxLength":120},"mrr":{"type":"integer","minimum":0},"monthly_orders":{"type":"integer","minimum":0},"hubspot_company_id":{"type":"string"},"hubspot_deal_id":{"type":"string"},"stripe_customer_id":{"type":"string"},"intercom_company_id":{"type":"string"},"slack_channel_id":{"type":"string"}}},"Deleted":{"type":"object","properties":{"object":{"type":"string","enum":["deleted"]},"id":{"type":"string"},"display_id":{"type":"integer"},"deleted":{"type":"boolean","enum":[true]}},"required":["object","id","display_id","deleted"]},"ContactList":{"type":"object","properties":{"object":{"type":"string","enum":["list"]},"data":{"type":"array","items":{"$ref":"#/components/schemas/Contact"}}},"required":["object","data"]},"Contact":{"type":"object","properties":{"object":{"type":"string","enum":["contact"]},"id":{"type":"string"},"display_id":{"type":"integer"},"customer_id":{"type":"string"},"name":{"type":"string"},"email":{"type":"string","format":"email"},"title":{"type":"string","nullable":true},"is_primary":{"type":"boolean"},"labels":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["object","id","display_id","customer_id","name","email","title","is_primary","labels","created_at","updated_at"]},"ContactCreate":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":255},"email":{"type":"string","maxLength":255,"format":"email"},"title":{"type":"string","maxLength":255},"is_primary":{"type":"boolean"},"labels":{"type":"array","items":{"type":"string"}}},"required":["name","email"]},"ContactUpdate":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":255},"email":{"type":"string","maxLength":255,"format":"email"},"title":{"type":"string","maxLength":255},"is_primary":{"type":"boolean"},"labels":{"type":"array","items":{"type":"string"}}}},"DeletedContact":{"type":"object","properties":{"object":{"type":"string","enum":["deleted"]},"id":{"type":"string"},"display_id":{"type":"integer"},"deleted":{"type":"boolean","enum":[true]}},"required":["object","id","display_id","deleted"]},"OnboardingList":{"type":"object","properties":{"object":{"type":"string","enum":["list"]},"data":{"type":"array","items":{"$ref":"#/components/schemas/Onboarding"}},"has_more":{"type":"boolean"},"next_cursor":{"type":"string","nullable":true}},"required":["object","data","has_more","next_cursor"]},"Onboarding":{"type":"object","properties":{"object":{"type":"string","enum":["onboarding"]},"id":{"type":"string"},"display_id":{"type":"integer"},"customer_id":{"type":"string"},"template_id":{"type":"string","nullable":true},"phase":{"type":"string","enum":["before_getting_started","program_design","review","program_buildout","internal_qa","launch","completed"]},"state":{"type":"string","enum":["active","paused","at_risk","waiting"]},"started_at":{"type":"string","format":"date-time"},"completed_at":{"type":"string","nullable":true,"format":"date-time"},"target_launch_date":{"type":"string","nullable":true,"format":"date-time"},"csm_id":{"type":"string","nullable":true},"se_id":{"type":"string","nullable":true},"designer_id":{"type":"string","nullable":true},"product_ops_id":{"type":"string","nullable":true},"notes":{"type":"string","nullable":true},"waiting_on_customer":{"type":"boolean"},"waiting_on_customer_since":{"type":"string","nullable":true,"format":"date-time"},"wizard_completed_at":{"type":"string","nullable":true,"format":"date-time"},"reminder_email":{"type":"boolean"},"reminder_slack":{"type":"boolean"},"reminder_frequency_days":{"type":"integer"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["object","id","display_id","customer_id","template_id","phase","state","started_at","completed_at","target_launch_date","csm_id","se_id","designer_id","product_ops_id","notes","waiting_on_customer","waiting_on_customer_since","wizard_completed_at","reminder_email","reminder_slack","reminder_frequency_days","created_at","updated_at"]},"OnboardingCreate":{"type":"object","properties":{"customer_id":{"type":"string","description":"Numeric display_id or cuid of the parent customer."},"template_id":{"type":"string"},"phase":{"type":"string","enum":["before_getting_started","program_design","review","program_buildout","internal_qa","launch","completed"]},"state":{"type":"string","enum":["active","paused","at_risk","waiting"]},"target_launch_date":{"type":"string","format":"date-time"},"csm_id":{"type":"string","nullable":true},"se_id":{"type":"string","nullable":true},"designer_id":{"type":"string","nullable":true},"product_ops_id":{"type":"string","nullable":true},"notes":{"type":"string"},"reminder_email":{"type":"boolean"},"reminder_slack":{"type":"boolean"},"reminder_frequency_days":{"type":"integer","minimum":1,"maximum":30}},"required":["customer_id"]},"OnboardingUpdate":{"type":"object","properties":{"template_id":{"type":"string","nullable":true},"phase":{"type":"string","enum":["before_getting_started","program_design","review","program_buildout","internal_qa","launch","completed"]},"state":{"type":"string","enum":["active","paused","at_risk","waiting"]},"target_launch_date":{"type":"string","nullable":true,"format":"date-time"},"completed_at":{"type":"string","nullable":true,"format":"date-time"},"csm_id":{"type":"string","nullable":true},"se_id":{"type":"string","nullable":true},"designer_id":{"type":"string","nullable":true},"product_ops_id":{"type":"string","nullable":true},"notes":{"type":"string","nullable":true},"waiting_on_customer":{"type":"boolean"},"reminder_email":{"type":"boolean"},"reminder_slack":{"type":"boolean"},"reminder_frequency_days":{"type":"integer","minimum":1,"maximum":30}}},"DeletedOnboarding":{"type":"object","properties":{"object":{"type":"string","enum":["deleted"]},"id":{"type":"string"},"display_id":{"type":"integer"},"deleted":{"type":"boolean","enum":[true]}},"required":["object","id","display_id","deleted"]}},"parameters":{}},"paths":{"/api/v1/me":{"get":{"tags":["Meta"],"operationId":"getMe","summary":"Get current identity","description":"Returns the API key's identity, organization, scopes, and rate-limit tier. Hit this first to confirm a newly-minted key is wired up correctly.","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Me"}}}}}}},"/api/v1/health":{"get":{"tags":["Meta"],"operationId":"getHealth","summary":"Liveness probe","description":"Unauthenticated. Returns 200 if the process is up. Use this for uptime monitoring; for a deeper integration probe see /api/health/deep on the canonical host.","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Health"}}}}}}},"/api/v1/customers":{"get":{"tags":["Customers"],"operationId":"listCustomers","summary":"List customers","description":"Returns customers in the calling org, newest first. Cursor-paginated — pass `next_cursor` from a previous response back as `cursor` to get the next page.","parameters":[{"schema":{"type":"string","example":"25","description":"1–100, default 25."},"required":false,"description":"1–100, default 25.","name":"limit","in":"query"},{"schema":{"type":"string","format":"date-time","description":"Pagination cursor from a previous response (ISO timestamp)."},"required":false,"description":"Pagination cursor from a previous response (ISO timestamp).","name":"cursor","in":"query"},{"schema":{"type":"string","enum":["active","onboarding","at_risk","churned","low_touch"],"example":"active"},"required":false,"name":"status","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerList"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"tags":["Customers"],"operationId":"createCustomer","summary":"Create a customer","description":"Adds a customer to the calling org. `name` is the only required field; `slug` must be unique within the org and shows up in human-facing URLs.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerCreate"}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Customer"}}}},"400":{"description":"Invalid request body","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict (duplicate slug)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/customers/{id}":{"get":{"tags":["Customers"],"operationId":"getCustomer","summary":"Retrieve a customer","description":"Fetch one customer by numeric `display_id` (shareable, appears in URLs) or canonical cuid `id`.","parameters":[{"schema":{"type":"string","example":"42","description":"Numeric display_id or canonical cuid id."},"required":true,"description":"Numeric display_id or canonical cuid id.","name":"id","in":"path"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Customer"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Customer not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"patch":{"tags":["Customers"],"operationId":"updateCustomer","summary":"Update a customer","description":"Partial update. Send only the fields you want to change.","parameters":[{"schema":{"type":"string","example":"42","description":"Numeric display_id or canonical cuid id."},"required":true,"description":"Numeric display_id or canonical cuid id.","name":"id","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerUpdate"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Customer"}}}},"400":{"description":"Invalid request body","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Customer not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict (duplicate slug)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"delete":{"tags":["Customers"],"operationId":"deleteCustomer","summary":"Delete a customer","description":"Soft delete — the row is hidden from reads but preserved for audit. Idempotent.","parameters":[{"schema":{"type":"string","example":"42","description":"Numeric display_id or canonical cuid id."},"required":true,"description":"Numeric display_id or canonical cuid id.","name":"id","in":"path"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Deleted"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Customer not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/customers/{customerId}/contacts":{"get":{"tags":["Contacts"],"operationId":"listCustomerContacts","summary":"List a customer's contacts","description":"Primary contact first, then most recently created.","parameters":[{"schema":{"type":"string","example":"42","description":"Numeric display_id or cuid of the parent customer."},"required":true,"description":"Numeric display_id or cuid of the parent customer.","name":"customerId","in":"path"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactList"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Customer not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"tags":["Contacts"],"operationId":"createCustomerContact","summary":"Add a contact to a customer","description":"Email is lowercased on the way in and unique per customer.","parameters":[{"schema":{"type":"string","example":"42","description":"Numeric display_id or cuid of the parent customer."},"required":true,"description":"Numeric display_id or cuid of the parent customer.","name":"customerId","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactCreate"}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Contact"}}}},"400":{"description":"Invalid request body","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Customer not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Email already exists for this customer","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/contacts/{id}":{"get":{"tags":["Contacts"],"operationId":"getContact","summary":"Retrieve a contact","parameters":[{"schema":{"type":"string","example":"12","description":"Numeric display_id or cuid of the contact."},"required":true,"description":"Numeric display_id or cuid of the contact.","name":"id","in":"path"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Contact"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Contact not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"patch":{"tags":["Contacts"],"operationId":"updateContact","summary":"Update a contact","description":"Partial update. Send only the fields you want to change.","parameters":[{"schema":{"type":"string","example":"12","description":"Numeric display_id or cuid of the contact."},"required":true,"description":"Numeric display_id or cuid of the contact.","name":"id","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactUpdate"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Contact"}}}},"400":{"description":"Invalid request body","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Contact not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Email already exists for this customer","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"delete":{"tags":["Contacts"],"operationId":"deleteContact","summary":"Delete a contact","description":"Soft delete — preserved for audit, hidden from reads.","parameters":[{"schema":{"type":"string","example":"12","description":"Numeric display_id or cuid of the contact."},"required":true,"description":"Numeric display_id or cuid of the contact.","name":"id","in":"path"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeletedContact"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Contact not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/onboardings":{"get":{"tags":["Onboardings"],"operationId":"listOnboardings","summary":"List onboardings","description":"Filter by `customer_id`, `state`, or `phase`. `state=waiting` is derived from `waiting_on_customer = true`. Cursor-paginated.","parameters":[{"schema":{"type":"string","example":"25","description":"1–100, default 25."},"required":false,"description":"1–100, default 25.","name":"limit","in":"query"},{"schema":{"type":"string","format":"date-time","description":"Pagination cursor from a previous response (ISO timestamp)."},"required":false,"description":"Pagination cursor from a previous response (ISO timestamp).","name":"cursor","in":"query"},{"schema":{"type":"string","description":"Filter by customer (display_id or cuid)."},"required":false,"description":"Filter by customer (display_id or cuid).","name":"customer_id","in":"query"},{"schema":{"type":"string","enum":["active","paused","at_risk","waiting"]},"required":false,"name":"state","in":"query"},{"schema":{"type":"string","enum":["before_getting_started","program_design","review","program_buildout","internal_qa","launch","completed"]},"required":false,"name":"phase","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OnboardingList"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"tags":["Onboardings"],"operationId":"createOnboarding","summary":"Create an onboarding","description":"Defaults: phase=before_getting_started, state=active, reminders on, frequency 1 day.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OnboardingCreate"}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Onboarding"}}}},"400":{"description":"Invalid request body","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Customer not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/customers/{customerId}/onboardings":{"get":{"tags":["Onboardings"],"operationId":"listCustomerOnboardings","summary":"List a customer's onboardings","description":"Newest first. Not paginated — a customer rarely has more than a handful.","parameters":[{"schema":{"type":"string","example":"42","description":"Numeric display_id or cuid of the parent customer."},"required":true,"description":"Numeric display_id or cuid of the parent customer.","name":"customerId","in":"path"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OnboardingList"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Customer not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/onboardings/{id}":{"get":{"tags":["Onboardings"],"operationId":"getOnboarding","summary":"Retrieve an onboarding","parameters":[{"schema":{"type":"string","example":"17","description":"Numeric display_id or cuid of the onboarding."},"required":true,"description":"Numeric display_id or cuid of the onboarding.","name":"id","in":"path"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Onboarding"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Onboarding not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"patch":{"tags":["Onboardings"],"operationId":"updateOnboarding","summary":"Update an onboarding","description":"Partial update. Setting `state=waiting` flips `waiting_on_customer=true`; setting any other state clears it.","parameters":[{"schema":{"type":"string","example":"17","description":"Numeric display_id or cuid of the onboarding."},"required":true,"description":"Numeric display_id or cuid of the onboarding.","name":"id","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OnboardingUpdate"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Onboarding"}}}},"400":{"description":"Invalid request body","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Onboarding not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"delete":{"tags":["Onboardings"],"operationId":"deleteOnboarding","summary":"Delete an onboarding","description":"Soft delete — preserved for audit, hidden from reads.","parameters":[{"schema":{"type":"string","example":"17","description":"Numeric display_id or cuid of the onboarding."},"required":true,"description":"Numeric display_id or cuid of the onboarding.","name":"id","in":"path"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeletedOnboarding"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Onboarding not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}}}