{"openapi":"3.1.0","info":{"title":"Parabel Stage API","version":"1.0.0","description":"Start with business email on your own domain. Browser setup: https://app.parabel.so/start/email. HTTP-capable agents can prepare without an installed connector; assistants that only read the web should share the browser setup link. Stage reserves a Parabel-hosted preview address; it does not register or verify a customer domain. After claiming, the owner lands in Mail → People, explores the inbox and chooses Set up email when ready to connect their domain, verify DNS and configure receiving. Provision and prepare Mail and Contacts for free, without payment or an API key. Live communication starts when the owner claims the firm and activates the Workspace ($20/month, whole team, no per-seat fee); account monitoring is optional at $10 per account per month. Once the owner accepts, Abel may start and end it for accounts with ongoing work within the monthly limit. No clock runs during preparation. The create response carries these terms as commercial. Hand claim_url to the human for WorkOS authentication and explicit ownership claim. Server-to-server only. All data responses are private/no-store. Never expose drop_token to the browser. Staged firms expire after 14 days. The owner authorizes a single bounded 7-day read/stage MCP continuation on claim."},"servers":[{"url":"https://app.parabel.so"}],"externalDocs":{"url":"https://app.parabel.so/developers/stage"},"paths":{"/api/stage":{"post":{"operationId":"createStagedFirm","summary":"Create a free firm before a human account exists","security":[{},{"StageAppKey":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"Strongly recommended. Anonymous callers: random 32–128 characters A–Z, a–z, 0–9, _ or -. App keys: 8–128 characters. Same source/key and body recover the original response; changing the body returns 409.","schema":{"type":"string","minLength":8,"maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateFirm"}}}},"responses":{"201":{"description":"Save drop_token privately; share only claim_url with the intended owner.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatedFirm"}}}},"400":{"description":"See error code. Respect Retry-After for 429; keep the same key for identical retries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"See error code. Respect Retry-After for 429; keep the same key for identical retries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"See error code. Respect Retry-After for 429; keep the same key for identical retries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"See error code. Respect Retry-After for 429; keep the same key for identical retries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"See error code. Respect Retry-After for 429; keep the same key for identical retries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"See error code. Respect Retry-After for 429; keep the same key for identical retries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"See error code. Respect Retry-After for 429; keep the same key for identical retries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"See error code. Respect Retry-After for 429; keep the same key for identical retries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"See error code. Respect Retry-After for 429; keep the same key for identical retries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"See error code. Respect Retry-After for 429; keep the same key for identical retries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"get":{"operationId":"getStagedFirm","summary":"Read the active pre-claim firm and clients","security":[{"DropToken":[]}],"responses":{"200":{"description":"Active firm snapshot","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FirmSnapshot"}}}},"400":{"description":"See error code. Respect Retry-After for 429; keep the same key for identical retries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"See error code. Respect Retry-After for 429; keep the same key for identical retries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"See error code. Respect Retry-After for 429; keep the same key for identical retries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"See error code. Respect Retry-After for 429; keep the same key for identical retries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"See error code. Respect Retry-After for 429; keep the same key for identical retries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"See error code. Respect Retry-After for 429; keep the same key for identical retries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"See error code. Respect Retry-After for 429; keep the same key for identical retries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"See error code. Respect Retry-After for 429; keep the same key for identical retries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"See error code. Respect Retry-After for 429; keep the same key for identical retries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"See error code. Respect Retry-After for 429; keep the same key for identical retries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/stage/apps/program":{"get":{"operationId":"describeStageAppProgram","summary":"Read the app building blocks and review criteria without an account","security":[],"responses":{"200":{"description":"Program guide","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"See error code. Respect Retry-After for 429; keep the same key for identical retries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"See error code. Respect Retry-After for 429; keep the same key for identical retries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"See error code. Respect Retry-After for 429; keep the same key for identical retries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"See error code. Respect Retry-After for 429; keep the same key for identical retries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"See error code. Respect Retry-After for 429; keep the same key for identical retries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"See error code. Respect Retry-After for 429; keep the same key for identical retries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"See error code. Respect Retry-After for 429; keep the same key for identical retries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"See error code. Respect Retry-After for 429; keep the same key for identical retries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"See error code. Respect Retry-After for 429; keep the same key for identical retries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"See error code. Respect Retry-After for 429; keep the same key for identical retries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/stage/apps/check":{"post":{"operationId":"checkStageApp","summary":"Validate a manifest and receive non-blocking advice without an account","security":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppManifestInput"}}}},"responses":{"200":{"description":"Validation and advisory review; nothing stored","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"See error code. Respect Retry-After for 429; keep the same key for identical retries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"See error code. Respect Retry-After for 429; keep the same key for identical retries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"See error code. Respect Retry-After for 429; keep the same key for identical retries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"See error code. Respect Retry-After for 429; keep the same key for identical retries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"See error code. Respect Retry-After for 429; keep the same key for identical retries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"See error code. Respect Retry-After for 429; keep the same key for identical retries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"See error code. Respect Retry-After for 429; keep the same key for identical retries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"See error code. Respect Retry-After for 429; keep the same key for identical retries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"See error code. Respect Retry-After for 429; keep the same key for identical retries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"See error code. Respect Retry-After for 429; keep the same key for identical retries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/stage/apps":{"post":{"operationId":"prepareStageApp","summary":"Prepare an app version; never installs or runs","security":[{"DropToken":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"description":"Unique per operation; reuse with exactly the same request for a retry.","schema":{"type":"string","minLength":8,"maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppManifestInput"}}}},"responses":{"201":{"description":"Prepare an app version; never installs or runs","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PreparedApp"}}}},"400":{"description":"See error code. Respect Retry-After for 429; keep the same key for identical retries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"See error code. Respect Retry-After for 429; keep the same key for identical retries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"See error code. Respect Retry-After for 429; keep the same key for identical retries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"See error code. Respect Retry-After for 429; keep the same key for identical retries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"See error code. Respect Retry-After for 429; keep the same key for identical retries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"See error code. Respect Retry-After for 429; keep the same key for identical retries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"See error code. Respect Retry-After for 429; keep the same key for identical retries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"See error code. Respect Retry-After for 429; keep the same key for identical retries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"See error code. Respect Retry-After for 429; keep the same key for identical retries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"See error code. Respect Retry-After for 429; keep the same key for identical retries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/stage/apps/records":{"post":{"operationId":"seedStageAppRecord","summary":"Seed one isolated preparation record","security":[{"DropToken":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"description":"Unique per operation; reuse with exactly the same request for a retry.","schema":{"type":"string","minLength":8,"maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRecordInput"}}}},"responses":{"201":{"description":"Seed one isolated preparation record","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PreparationResult"}}}},"400":{"description":"See error code. Respect Retry-After for 429; keep the same key for identical retries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"See error code. Respect Retry-After for 429; keep the same key for identical retries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"See error code. Respect Retry-After for 429; keep the same key for identical retries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"See error code. Respect Retry-After for 429; keep the same key for identical retries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"See error code. Respect Retry-After for 429; keep the same key for identical retries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"See error code. Respect Retry-After for 429; keep the same key for identical retries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"See error code. Respect Retry-After for 429; keep the same key for identical retries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"See error code. Respect Retry-After for 429; keep the same key for identical retries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"See error code. Respect Retry-After for 429; keep the same key for identical retries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"See error code. Respect Retry-After for 429; keep the same key for identical retries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/stage/automations":{"post":{"operationId":"prepareStageAutomation","summary":"Prepare a named-preset automation for human review after claim","security":[{"DropToken":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"description":"Unique per operation; reuse with exactly the same request for a retry.","schema":{"type":"string","minLength":8,"maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AutomationPreparationInput"}}}},"responses":{"201":{"description":"Prepare a named-preset automation for human review after claim","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PreparationResult"}}}},"400":{"description":"See error code. Respect Retry-After for 429; keep the same key for identical retries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"See error code. Respect Retry-After for 429; keep the same key for identical retries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"See error code. Respect Retry-After for 429; keep the same key for identical retries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"See error code. Respect Retry-After for 429; keep the same key for identical retries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"See error code. Respect Retry-After for 429; keep the same key for identical retries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"See error code. Respect Retry-After for 429; keep the same key for identical retries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"See error code. Respect Retry-After for 429; keep the same key for identical retries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"See error code. Respect Retry-After for 429; keep the same key for identical retries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"See error code. Respect Retry-After for 429; keep the same key for identical retries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"See error code. Respect Retry-After for 429; keep the same key for identical retries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/stage/clients":{"post":{"operationId":"upsertStageClient","summary":"Create or update a client (maximum 50)","security":[{"DropToken":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"description":"Unique per operation; reuse with exactly the same request for a retry.","schema":{"type":"string","minLength":8,"maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientInput"}}}},"responses":{"200":{"description":"Updated existing record","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientResult"}}}},"201":{"description":"Create or update a client (maximum 50)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientResult"}}}},"400":{"description":"See error code. Respect Retry-After for 429; keep the same key for identical retries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"See error code. Respect Retry-After for 429; keep the same key for identical retries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"See error code. Respect Retry-After for 429; keep the same key for identical retries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"See error code. Respect Retry-After for 429; keep the same key for identical retries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"See error code. Respect Retry-After for 429; keep the same key for identical retries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"See error code. Respect Retry-After for 429; keep the same key for identical retries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"See error code. Respect Retry-After for 429; keep the same key for identical retries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"See error code. Respect Retry-After for 429; keep the same key for identical retries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"See error code. Respect Retry-After for 429; keep the same key for identical retries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"See error code. Respect Retry-After for 429; keep the same key for identical retries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/stage/stakeholders":{"post":{"operationId":"upsertStageStakeholder","summary":"Create or update a stakeholder (maximum 200)","security":[{"DropToken":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"description":"Unique per operation; reuse with exactly the same request for a retry.","schema":{"type":"string","minLength":8,"maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StakeholderInput"}}}},"responses":{"200":{"description":"Updated existing record","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StakeholderResult"}}}},"201":{"description":"Create or update a stakeholder (maximum 200)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StakeholderResult"}}}},"400":{"description":"See error code. Respect Retry-After for 429; keep the same key for identical retries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"See error code. Respect Retry-After for 429; keep the same key for identical retries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"See error code. Respect Retry-After for 429; keep the same key for identical retries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"See error code. Respect Retry-After for 429; keep the same key for identical retries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"See error code. Respect Retry-After for 429; keep the same key for identical retries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"See error code. Respect Retry-After for 429; keep the same key for identical retries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"See error code. Respect Retry-After for 429; keep the same key for identical retries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"See error code. Respect Retry-After for 429; keep the same key for identical retries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"See error code. Respect Retry-After for 429; keep the same key for identical retries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"See error code. Respect Retry-After for 429; keep the same key for identical retries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/stage/mail/seed":{"post":{"operationId":"seedStageMail","summary":"Seed illustrative preview mail; never sends","security":[{"DropToken":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"description":"Unique per operation; reuse with exactly the same request for a retry.","schema":{"type":"string","minLength":8,"maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MailSeedInput"}}}},"responses":{"201":{"description":"Seed illustrative preview mail; never sends","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MailSeedResult"}}}},"400":{"description":"See error code. Respect Retry-After for 429; keep the same key for identical retries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"See error code. Respect Retry-After for 429; keep the same key for identical retries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"See error code. Respect Retry-After for 429; keep the same key for identical retries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"See error code. Respect Retry-After for 429; keep the same key for identical retries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"See error code. Respect Retry-After for 429; keep the same key for identical retries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"See error code. Respect Retry-After for 429; keep the same key for identical retries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"See error code. Respect Retry-After for 429; keep the same key for identical retries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"See error code. Respect Retry-After for 429; keep the same key for identical retries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"See error code. Respect Retry-After for 429; keep the same key for identical retries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"See error code. Respect Retry-After for 429; keep the same key for identical retries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/stage/mail/reply":{"post":{"operationId":"replyToStageMail","summary":"Unavailable for Workspace-contract firms","security":[{"DropToken":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"description":"Unique per operation; reuse with exactly the same request for a retry.","schema":{"type":"string","minLength":8,"maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MailReplyInput"}}}},"responses":{"202":{"description":"Send a real authorized 1:1 reply (maximum 20/day)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MailReplyResult"}}}},"400":{"description":"See error code. Respect Retry-After for 429; keep the same key for identical retries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"See error code. Respect Retry-After for 429; keep the same key for identical retries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Workspace-contract preparation cannot send. Nothing was sent.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"See error code. Respect Retry-After for 429; keep the same key for identical retries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"See error code. Respect Retry-After for 429; keep the same key for identical retries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"See error code. Respect Retry-After for 429; keep the same key for identical retries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"See error code. Respect Retry-After for 429; keep the same key for identical retries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"See error code. Respect Retry-After for 429; keep the same key for identical retries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"See error code. Respect Retry-After for 429; keep the same key for identical retries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"See error code. Respect Retry-After for 429; keep the same key for identical retries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"See error code. Respect Retry-After for 429; keep the same key for identical retries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"description":"An active preclaim Workspace drop returns 402 workspace_activation_required. Drop-token writes stop at claim (401 unauthorized), so activation does not enable this endpoint. Seed illustrative previews instead; the person can send through Mail after claiming and activating the Workspace. The read/stage continuation cannot send.","x-openai-isConsequential":true}},"/api/stage/upgrade":{"post":{"operationId":"exchangeClaimedStageToken","summary":"Exchange once after explicit human claim","security":[{"DropToken":[]}],"description":"No JSON body required. Returns one read/stage MCP token, valid until 7 days after claim and independent of any AI purchase. Save it immediately. It never permits manage or sending. Use at https://app.parabel.so/api/mcp/mcp. Lost exchange responses require a new owner-authorized connection in Settings.","responses":{"200":{"description":"One-time continuation token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Continuation"}}}},"400":{"description":"See error code. Respect Retry-After for 429; keep the same key for identical retries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"See error code. Respect Retry-After for 429; keep the same key for identical retries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"See error code. Respect Retry-After for 429; keep the same key for identical retries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"See error code. Respect Retry-After for 429; keep the same key for identical retries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"See error code. Respect Retry-After for 429; keep the same key for identical retries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"See error code. Respect Retry-After for 429; keep the same key for identical retries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"See error code. Respect Retry-After for 429; keep the same key for identical retries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"See error code. Respect Retry-After for 429; keep the same key for identical retries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"See error code. Respect Retry-After for 429; keep the same key for identical retries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"See error code. Respect Retry-After for 429; keep the same key for identical retries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}},"components":{"securitySchemes":{"DropToken":{"type":"http","scheme":"bearer","description":"The private drop_token from POST /api/stage. Valid only for this staged firm until claim/expiry, except one post-claim upgrade."},"StageAppKey":{"type":"http","scheme":"bearer","description":"Optional provisioned connector credential pbl_stage_<key_id>_<secret>. Identifies an integration, not the human. Anonymous create needs no credential."}},"schemas":{"AppManifestInput":{"type":"object","properties":{"manifest":{"type":"object","additionalProperties":true}},"required":["manifest"],"additionalProperties":false},"PreparedApp":{"type":"object","properties":{"app_id":{"type":"string","format":"uuid"},"version":{"type":"integer","minimum":1},"manifest_sha256":{"type":"string","pattern":"^[0-9a-f]{64}$"},"installed":{"const":false},"preparation":{"const":true},"review":{"type":"object","additionalProperties":true},"similar_in_directory":{"type":"array","items":{"type":"object","additionalProperties":true}},"note":{"type":"string"}},"required":["app_id","version","manifest_sha256","installed","preparation"],"additionalProperties":false},"AppRecordInput":{"type":"object","properties":{"app_id":{"type":"string","format":"uuid"},"version":{"type":"integer","minimum":1},"manifest_sha256":{"type":"string","pattern":"^[0-9a-f]{64}$"},"values":{"type":"object","additionalProperties":true},"stage":{"type":"string","maxLength":80}},"required":["app_id","version","manifest_sha256","values"],"additionalProperties":false},"AutomationPreparationInput":{"type":"object","properties":{"automation_id":{"type":"string","maxLength":80},"client_ids":{"type":"array","minItems":1,"maxItems":50,"items":{"type":"string","format":"uuid"}},"subject":{"type":"string","maxLength":280},"body":{"type":"string","maxLength":8000},"cadence":{"type":"string","enum":["daily","weekly","monthly","quarterly","annual"]},"day_of_week":{"type":"integer","minimum":0,"maximum":6},"day_of_month":{"type":"integer","minimum":1,"maximum":28},"hour":{"type":"integer","minimum":0,"maximum":23},"minute":{"type":"integer","minimum":0,"maximum":59}},"required":["automation_id","client_ids"],"additionalProperties":false},"PreparationResult":{"type":"object","additionalProperties":true,"description":"Prepared record_id or proposal_id; no execution or sending."},"Error":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false},"CommercialTerms":{"type":"object","additionalProperties":true,"description":"Present when this firm was created under the Workspace contract: free preparation, the monthly Workspace price, optional per-account monitoring, the meaning of the AI budget, and the post-claim connection. Amounts are integer cents. Quote these values rather than remembered ones."},"CreateFirm":{"type":"object","properties":{"firm_name":{"type":"string","maxLength":120,"minLength":1},"name":{"type":"string","maxLength":120,"minLength":1},"source":{"type":"string","maxLength":40},"origin":{"type":"string","maxLength":40},"product":{"type":"string","maxLength":40}},"required":[],"additionalProperties":false,"anyOf":[{"required":["firm_name"]},{"required":["name"]}]},"CreatedFirm":{"type":"object","properties":{"firm_id":{"type":"string","format":"uuid"},"claim_url":{"type":"string","format":"uri"},"preview_url":{"type":"string","format":"uri"},"drop_token":{"type":"string"},"claim_expires_at":{"type":"string"},"mailbox":{"type":"string","format":"email","maxLength":254},"capabilities":{"type":"array","items":{"type":"string"}},"commercial":{"$ref":"#/components/schemas/CommercialTerms"}},"required":["firm_id","claim_url","preview_url","drop_token","claim_expires_at","mailbox","capabilities"],"additionalProperties":false},"ClientInput":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string","maxLength":120,"minLength":1},"notes":{"type":"string","maxLength":4000},"relationship":{"type":"string","enum":["new","existing"]}},"required":["name"],"additionalProperties":false},"StakeholderInput":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"client_id":{"type":"string","format":"uuid"},"name":{"type":"string","maxLength":120,"minLength":1},"email":{"anyOf":[{"type":"string","format":"email","maxLength":254},{"const":""}]},"phone":{"type":"string","maxLength":32},"role":{"type":"string","maxLength":80},"notes":{"type":"string","maxLength":4000}},"required":["client_id","name"],"additionalProperties":false},"MailSeedInput":{"type":"object","properties":{"from_email":{"type":"string","format":"email","maxLength":254},"from_name":{"type":"string","maxLength":120},"subject":{"type":"string","maxLength":200},"body_text":{"type":"string","maxLength":8000,"minLength":1},"client_id":{"type":"string","format":"uuid"}},"required":["from_email","body_text"],"additionalProperties":false},"MailReplyInput":{"type":"object","properties":{"stakeholder_id":{"type":"string","format":"uuid"},"mail_id":{"type":"string","format":"uuid"},"body_text":{"type":"string","maxLength":8000,"minLength":1}},"required":["body_text"],"additionalProperties":false,"anyOf":[{"required":["stakeholder_id"]},{"required":["mail_id"]}]},"ClientResult":{"type":"object","properties":{"client":{"$ref":"#/components/schemas/Record"}},"required":["client"],"additionalProperties":false},"StakeholderResult":{"type":"object","properties":{"stakeholder":{"$ref":"#/components/schemas/Record"}},"required":["stakeholder"],"additionalProperties":false},"Record":{"type":"object","required":["id","name"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"}},"additionalProperties":true},"MailSeedResult":{"type":"object","properties":{"mail_id":{"type":"string","format":"uuid"}},"required":["mail_id"],"additionalProperties":false},"MailReplyResult":{"type":"object","properties":{"delivery_id":{"type":"string","format":"uuid"},"recipient_email":{"type":"string","format":"email","maxLength":254},"state":{"type":"string","enum":["reserved","submitted","uncertain","failed","cancelled"]}},"required":["delivery_id","recipient_email","state"],"additionalProperties":false},"FirmSnapshot":{"type":"object","properties":{"firm_id":{"type":"string","format":"uuid"},"firm_name":{"type":"string"},"mailbox":{"type":["string","null"]},"claim_expires_at":{"type":"string"},"client_count":{"type":"integer"},"stakeholder_count":{"type":"integer"},"clients":{"type":"array","items":{"$ref":"#/components/schemas/Record"}}},"required":["firm_id","firm_name","mailbox","claim_expires_at","client_count","stakeholder_count","clients"],"additionalProperties":false},"Continuation":{"type":"object","properties":{"token":{"type":"string"},"expires_at":{"type":"string"},"scopes":{"type":"array","items":{"type":"string","enum":["read","stage"]}},"label":{"type":"string"}},"required":["token","expires_at","scopes","label"],"additionalProperties":false}}}}