{"openapi":"3.1.0","info":{"title":"WeddingBoard API","version":"1.0.0","description":"Implemented versioned interfaces. Mutations with requestId use a stable UUID across retries. After 409, reload and ask the person to review; never silently rebase an approved change. Timestamps use ISO 8601. Monetary amounts are integer cents. Mobile account tokens and scoped integration keys are distinct credentials."},"servers":[{"url":"/api/v1"}],"components":{"securitySchemes":{"twilioSignature":{"type":"apiKey","in":"header","name":"X-Twilio-Signature","description":"Twilio SDK signature over the exact configured URL and all submitted fields."},"bearerAuth":{"type":"http","scheme":"bearer","description":"wb_live_ scoped key or Clerk session JWT. Account-only routes reject API keys."}}},"paths":{"/keepsake-purchases":{"get":{"summary":"Read only the current named buyer’s personal purchase history; existing business finance access does not grant another buyer’s orders","security":[{"bearerAuth":[]}],"x-authentication":{"kind":"named-account"},"parameters":[{"name":"X-Workspace-Id","in":"header","schema":{"type":"string"}},{"name":"id","in":"query","schema":{"type":"string","minLength":1,"maxLength":100}},{"name":"offset","in":"query","schema":{"default":0,"type":"integer","minimum":0,"maximum":9007199254740991}},{"name":"limit","in":"query","schema":{"default":20,"type":"integer","minimum":1,"maximum":50}}],"responses":{"200":{"description":"Current authorized result; private, no-store."},"400":{"description":"Invalid reviewed input."},"403":{"description":"A named account is required."},"404":{"description":"Unknown or unauthorized private purchase."},"409":{"description":"Changed revision, quote, provider state, unavailable activation, or unsafe retry."}}},"post":{"summary":"Prepare a frozen approved-artwork quote, explicitly approve its exact total, cancel an unpaid purchase, or retry the original safe step; stable request UUID","security":[{"bearerAuth":[]}],"x-authentication":{"kind":"named-account"},"parameters":[{"name":"X-Workspace-Id","in":"header","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","oneOf":[{"type":"object","properties":{"operation":{"type":"string","const":"PREPARE"},"data":{"type":"object","properties":{"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"versionId":{"type":"string","minLength":1,"maxLength":100},"approvalHash":{"type":"string","pattern":"^[a-f0-9]{64}$"},"productId":{"type":"string","minLength":1,"maxLength":100},"productRevision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"quantity":{"type":"integer","minimum":1,"maximum":20},"crop":{"type":"object","properties":{"centerX":{"type":"number","minimum":0,"maximum":1},"centerY":{"type":"number","minimum":0,"maximum":1},"zoom":{"type":"number","minimum":1,"maximum":5},"rotation":{"anyOf":[{"type":"number","const":0},{"type":"number","const":90},{"type":"number","const":180},{"type":"number","const":270}]}},"required":["centerX","centerY","zoom","rotation"],"additionalProperties":false},"shipping":{"type":"object","properties":{"name":{"type":"string","minLength":2,"maxLength":80},"line1":{"type":"string","minLength":2,"maxLength":100},"line2":{"type":"string","maxLength":100},"city":{"type":"string","minLength":1,"maxLength":80},"state":{"type":"string","pattern":"^[A-Z]{2}$"},"postalCode":{"type":"string","pattern":"^\\d{5}(-\\d{4})?$"},"country":{"type":"string","const":"US"},"phone":{"type":"string","pattern":"^\\d{10}$"}},"required":["name","line1","line2","city","state","postalCode","country","phone"],"additionalProperties":false},"email":{"type":"string","maxLength":254,"format":"email","pattern":"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"},"giftNote":{"default":"","type":"string","maxLength":500},"termsAccepted":{"type":"boolean","const":true}},"required":["requestId","versionId","approvalHash","productId","productRevision","quantity","crop","shipping","email","termsAccepted"],"additionalProperties":false}},"required":["operation","data"],"additionalProperties":false},{"type":"object","properties":{"operation":{"type":"string","enum":["APPROVE","CANCEL","RETRY"]},"data":{"type":"object","properties":{"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"id":{"type":"string","minLength":1,"maxLength":100},"expectedRevision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"quoteHash":{"type":"string","pattern":"^[a-f0-9]{64}$"},"confirmed":{"type":"boolean","const":true}},"required":["requestId","id","expectedRevision","confirmed"],"additionalProperties":false}},"required":["operation","data"],"additionalProperties":false}]}}}},"responses":{"200":{"description":"Current authorized result; private, no-store."},"400":{"description":"Invalid reviewed input."},"403":{"description":"A named account is required."},"404":{"description":"Unknown or unauthorized private purchase."},"409":{"description":"Changed revision, quote, provider state, unavailable activation, or unsafe retry."}}}},"/keepsake-purchases/catalog":{"get":{"summary":"List activated certified single-surface products and current product revisions","security":[{"bearerAuth":[]}],"x-authentication":{"kind":"named-account"},"parameters":[{"name":"X-Workspace-Id","in":"header","schema":{"type":"string"}}],"responses":{"200":{"description":"Current authorized result; private, no-store."},"400":{"description":"Invalid reviewed input."},"403":{"description":"A named account is required."},"404":{"description":"Unknown or unauthorized private purchase."},"409":{"description":"Changed revision, quote, provider state, unavailable activation, or unsafe retry."}}},"post":{"summary":"Configured verified commerce operators only: save a reviewed certified product revision; never alters retained order snapshots","security":[{"bearerAuth":[]}],"x-authentication":{"kind":"named-account"},"parameters":[{"name":"X-Workspace-Id","in":"header","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":100},"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"sku":{"type":"string","pattern":"^[A-Z0-9_-]{3,50}$"},"title":{"type":"string","minLength":3,"maxLength":120},"description":{"type":"string","maxLength":2000},"category":{"type":"string","enum":["ART_PRINT","WALL_ART","CARD"]},"widthInches":{"type":"number","minimum":2,"maximum":30},"heightInches":{"type":"number","minimum":2,"maximum":30},"minimumDpi":{"default":150,"type":"integer","minimum":100,"maximum":300},"unitCents":{"type":"integer","minimum":100,"maximum":100000},"shippingCents":{"type":"integer","minimum":0,"maximum":10000},"maximumLabCents":{"type":"integer","exclusiveMinimum":0,"maximum":100000},"taxCode":{"type":"string","pattern":"^txcd_\\d+$"},"labMapping":{"type":"object","properties":{"productUID":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"productNodeIDs":{"minItems":1,"maxItems":100,"type":"array","items":{"type":"integer","minimum":0,"maximum":9007199254740991}},"itemAttributes":{"maxItems":40,"type":"array","items":{"type":"object","properties":{"attributeUID":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"value":{"type":"string","maxLength":200}},"required":["attributeUID"],"additionalProperties":false}},"orderAttributes":{"maxItems":20,"type":"array","items":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991}},"shippingCents":{"type":"integer","minimum":0,"maximum":100000},"surfaces":{"minItems":1,"maxItems":8,"type":"array","items":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":80},"widthInches":{"type":"number","minimum":0.5,"maximum":40},"heightInches":{"type":"number","minimum":0.5,"maximum":40}},"required":["name","widthInches","heightInches"],"additionalProperties":false}},"album":{"type":"object","properties":{"bookAttributeUID":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"interiorNodeID":{"type":"integer","minimum":0,"maximum":9007199254740991},"cover":{"type":"string","enum":["MATERIAL","CAMEO","COMBO_FRONT"]},"coverNodeID":{"type":"integer","minimum":0,"maximum":9007199254740991},"coverWidthInches":{"type":"number","minimum":0.5,"maximum":40},"coverHeightInches":{"type":"number","minimum":0.5,"maximum":40}},"required":["bookAttributeUID","interiorNodeID","cover"],"additionalProperties":false}},"required":["productUID","productNodeIDs","itemAttributes","orderAttributes","shippingCents"],"additionalProperties":false},"active":{"type":"boolean"},"certificationReviewed":{"type":"boolean","const":true}},"required":["expectedRevision","requestId","sku","title","description","category","widthInches","heightInches","unitCents","shippingCents","maximumLabCents","taxCode","labMapping","active","certificationReviewed"],"additionalProperties":false}}}},"responses":{"200":{"description":"Current authorized result; private, no-store."},"400":{"description":"Invalid reviewed input."},"403":{"description":"A named account is required."},"404":{"description":"Unknown or unauthorized private purchase."},"409":{"description":"Changed revision, quote, provider state, unavailable activation, or unsafe retry."}}}},"/keepsake-purchases/payment":{"post":{"summary":"Return a short-lived current Stripe Payment Element session only for the named buyer and unexpired approved order; the client secret is never persisted in evidence","security":[{"bearerAuth":[]}],"x-authentication":{"kind":"named-account"},"parameters":[{"name":"X-Workspace-Id","in":"header","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":100}},"required":["id"],"additionalProperties":false}}}},"responses":{"200":{"description":"Current authorized result; private, no-store."},"400":{"description":"Invalid reviewed input."},"403":{"description":"A named account is required."},"404":{"description":"Unknown or unauthorized private purchase."},"409":{"description":"Changed revision, quote, provider state, unavailable activation, or unsafe retry."}}}},"/keepsake-purchases/support":{"get":{"summary":"Configured verified commerce operators only: inspect orders, attempts, immutable financial receipts and certified catalog","security":[{"bearerAuth":[]}],"x-authentication":{"kind":"named-account"},"parameters":[{"name":"X-Workspace-Id","in":"header","schema":{"type":"string"}}],"responses":{"200":{"description":"Current authorized result; private, no-store."},"400":{"description":"Invalid reviewed input."},"403":{"description":"A named account is required."},"404":{"description":"Unknown or unauthorized private purchase."},"409":{"description":"Changed revision, quote, provider state, unavailable activation, or unsafe retry."}}},"post":{"summary":"Reconcile the verified original payment/tax/refund/lab/dispute identity, record findings, recover a safe saved step or approve a full refund; physical cancellation remains explicit","security":[{"bearerAuth":[]}],"x-authentication":{"kind":"named-account"},"parameters":[{"name":"X-Workspace-Id","in":"header","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"id":{"type":"string","minLength":1,"maxLength":100},"expectedRevision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"operation":{"type":"string","enum":["RECONCILE_PAYMENT","RECONCILE_LAB","RECONCILE_TAX","RECONCILE_TAX_REVERSAL","RECONCILE_REFUND","RECONCILE_DISPUTE","REFUND","RETRY","NOTE"]},"providerId":{"type":"string","maxLength":200},"reason":{"type":"string","minLength":5,"maxLength":1500},"confirmed":{"type":"boolean","const":true}},"required":["requestId","id","expectedRevision","operation","reason","confirmed"],"additionalProperties":false}}}},"responses":{"200":{"description":"Current authorized result; private, no-store."},"400":{"description":"Invalid reviewed input."},"403":{"description":"A named account is required."},"404":{"description":"Unknown or unauthorized private purchase."},"409":{"description":"Changed revision, quote, provider state, unavailable activation, or unsafe retry."}}}},"/keepsakes":{"get":{"security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Private no-store result. Images return image/png bytes. Exact original storage pointers are never returned to clients."},"400":{"description":"Invalid input, image not ready, generation not activated or missing explicit approval."},"401":{"description":"Named account authentication required."},"403":{"description":"Business API keys cannot impersonate an artwork approver."},"404":{"description":"Artwork absent, foreign, revoked or outside current membership."},"409":{"description":"Source, revision, reviewed cost, approval or website draft changed."}},"summary":"List private keepsake designs, retained versions and source uploads","description":"Use id plus optional version/before for detail, weddingId/archived/after for a 30-item board, or sources with weddingId/after for private originals. Full workspace permission is required; wedding participation never grants another business’s private artwork."},"post":{"security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Private no-store result. Images return image/png bytes. Exact original storage pointers are never returned to clients."},"400":{"description":"Invalid input, image not ready, generation not activated or missing explicit approval."},"401":{"description":"Named account authentication required."},"403":{"description":"Business API keys cannot impersonate an artwork approver."},"404":{"description":"Artwork absent, foreign, revoked or outside current membership."},"409":{"description":"Source, revision, reviewed cost, approval or website draft changed."}},"summary":"Create, review, approve, restore or revoke exact keepsake images; explicitly copy approved art to a quiet website draft","description":"Monograms use deterministic original SVG composition and actual PNG outputs. Paid portraits require server preview hash, source-transfer permission, exact cost approval and enrolled usage budget. Storage recovery reuses retained provider bytes. Unknown provider outcomes never auto-regenerate. IMAGE download=true requires the current exact unrevoked approval. Website copies become independent WEBSITE_IMAGE assets and never auto-publish.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","oneOf":[{"type":"object","properties":{"operation":{"type":"string","const":"SAVE"},"input":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":120},"weddingId":{"type":"string","minLength":1,"maxLength":120},"title":{"type":"string","minLength":2,"maxLength":120},"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"definition":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","const":"MONOGRAM"},"names":{"type":"string","minLength":1,"maxLength":80},"initials":{"type":"string","minLength":1,"maxLength":5},"dateLabel":{"type":"string","maxLength":50},"caption":{"type":"string","maxLength":100},"style":{"type":"string","enum":["BOTANICAL","ARCH","MODERN"]},"ink":{"type":"string","pattern":"^#[a-fA-F0-9]{6}$"},"paper":{"type":"string","pattern":"^#[a-fA-F0-9]{6}$"},"accent":{"type":"string","pattern":"^#[a-fA-F0-9]{6}$"},"shape":{"type":"string","enum":["SQUARE","PORTRAIT"]},"transparent":{"default":false,"type":"boolean"}},"required":["kind","names","initials","dateLabel","caption","style","ink","paper","accent","shape"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"ARTWORK"},"sourceAssetId":{"type":"string","minLength":1,"maxLength":120},"caption":{"type":"string","maxLength":500}},"required":["kind","sourceAssetId","caption"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"PORTRAIT"},"sourceAssetId":{"type":"string","minLength":1,"maxLength":120},"prompt":{"type":"string","minLength":10,"maxLength":2000},"style":{"type":"string","enum":["WATERCOLOR","EDITORIAL","ILLUSTRATION"]},"shape":{"type":"string","enum":["SQUARE","PORTRAIT"]}},"required":["kind","sourceAssetId","prompt","style","shape"],"additionalProperties":false}]},"rightsConfirmed":{"type":"boolean","const":true},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["weddingId","title","expectedRevision","definition","rightsConfirmed","requestId"],"additionalProperties":false}},"required":["operation","input"]},{"type":"object","properties":{"operation":{"type":"string","const":"PORTRAIT_PREVIEW"},"input":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":120},"weddingId":{"type":"string","minLength":1,"maxLength":120},"title":{"type":"string","minLength":2,"maxLength":120},"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"definition":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","const":"MONOGRAM"},"names":{"type":"string","minLength":1,"maxLength":80},"initials":{"type":"string","minLength":1,"maxLength":5},"dateLabel":{"type":"string","maxLength":50},"caption":{"type":"string","maxLength":100},"style":{"type":"string","enum":["BOTANICAL","ARCH","MODERN"]},"ink":{"type":"string","pattern":"^#[a-fA-F0-9]{6}$"},"paper":{"type":"string","pattern":"^#[a-fA-F0-9]{6}$"},"accent":{"type":"string","pattern":"^#[a-fA-F0-9]{6}$"},"shape":{"type":"string","enum":["SQUARE","PORTRAIT"]},"transparent":{"default":false,"type":"boolean"}},"required":["kind","names","initials","dateLabel","caption","style","ink","paper","accent","shape"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"ARTWORK"},"sourceAssetId":{"type":"string","minLength":1,"maxLength":120},"caption":{"type":"string","maxLength":500}},"required":["kind","sourceAssetId","caption"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"PORTRAIT"},"sourceAssetId":{"type":"string","minLength":1,"maxLength":120},"prompt":{"type":"string","minLength":10,"maxLength":2000},"style":{"type":"string","enum":["WATERCOLOR","EDITORIAL","ILLUSTRATION"]},"shape":{"type":"string","enum":["SQUARE","PORTRAIT"]}},"required":["kind","sourceAssetId","prompt","style","shape"],"additionalProperties":false}]},"rightsConfirmed":{"type":"boolean","const":true}},"required":["weddingId","title","expectedRevision","definition","rightsConfirmed"],"additionalProperties":false}},"required":["operation","input"]},{"type":"object","properties":{"operation":{"type":"string","const":"PORTRAIT_START"},"input":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":120},"weddingId":{"type":"string","minLength":1,"maxLength":120},"title":{"type":"string","minLength":2,"maxLength":120},"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"definition":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","const":"MONOGRAM"},"names":{"type":"string","minLength":1,"maxLength":80},"initials":{"type":"string","minLength":1,"maxLength":5},"dateLabel":{"type":"string","maxLength":50},"caption":{"type":"string","maxLength":100},"style":{"type":"string","enum":["BOTANICAL","ARCH","MODERN"]},"ink":{"type":"string","pattern":"^#[a-fA-F0-9]{6}$"},"paper":{"type":"string","pattern":"^#[a-fA-F0-9]{6}$"},"accent":{"type":"string","pattern":"^#[a-fA-F0-9]{6}$"},"shape":{"type":"string","enum":["SQUARE","PORTRAIT"]},"transparent":{"default":false,"type":"boolean"}},"required":["kind","names","initials","dateLabel","caption","style","ink","paper","accent","shape"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"ARTWORK"},"sourceAssetId":{"type":"string","minLength":1,"maxLength":120},"caption":{"type":"string","maxLength":500}},"required":["kind","sourceAssetId","caption"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"PORTRAIT"},"sourceAssetId":{"type":"string","minLength":1,"maxLength":120},"prompt":{"type":"string","minLength":10,"maxLength":2000},"style":{"type":"string","enum":["WATERCOLOR","EDITORIAL","ILLUSTRATION"]},"shape":{"type":"string","enum":["SQUARE","PORTRAIT"]}},"required":["kind","sourceAssetId","prompt","style","shape"],"additionalProperties":false}]},"rightsConfirmed":{"type":"boolean","const":true},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"reviewedHash":{"type":"string","pattern":"^[a-f0-9]{64}$"},"approvedCostCents":{"type":"integer","minimum":1,"maximum":10000},"providerTransferApproved":{"type":"boolean","const":true}},"required":["weddingId","title","expectedRevision","definition","rightsConfirmed","requestId","reviewedHash","approvedCostCents","providerTransferApproved"],"additionalProperties":false}},"required":["operation","input"]},{"type":"object","properties":{"operation":{"type":"string","const":"APPROVAL_PREVIEW"},"input":{"type":"object","properties":{"versionId":{"type":"string","minLength":1,"maxLength":120}},"required":["versionId"],"additionalProperties":false}},"required":["operation","input"]},{"type":"object","properties":{"operation":{"type":"string","const":"APPROVE"},"input":{"type":"object","properties":{"versionId":{"type":"string","minLength":1,"maxLength":120},"reviewedHash":{"type":"string","pattern":"^[a-f0-9]{64}$"},"rightsConfirmed":{"type":"boolean","const":true},"confirmed":{"type":"boolean","const":true},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["versionId","reviewedHash","rightsConfirmed","confirmed","requestId"],"additionalProperties":false}},"required":["operation","input"]},{"type":"object","properties":{"operation":{"type":"string","const":"CONTROL"},"input":{"oneOf":[{"type":"object","properties":{"operation":{"type":"string","const":"RESTORE"},"versionId":{"type":"string","minLength":1,"maxLength":120},"expectedRevision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["operation","versionId","expectedRevision","requestId"],"additionalProperties":false},{"type":"object","properties":{"operation":{"type":"string","const":"ARCHIVE"},"id":{"type":"string","minLength":1,"maxLength":120},"expectedRevision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"archived":{"type":"boolean"},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["operation","id","expectedRevision","archived","requestId"],"additionalProperties":false},{"type":"object","properties":{"operation":{"type":"string","const":"REVOKE"},"approvalHash":{"type":"string","pattern":"^[a-f0-9]{64}$"},"reason":{"type":"string","minLength":3,"maxLength":1000},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["operation","approvalHash","reason","requestId"],"additionalProperties":false},{"type":"object","properties":{"operation":{"type":"string","const":"RETRY_RENDER"},"versionId":{"type":"string","minLength":1,"maxLength":120},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["operation","versionId","requestId"],"additionalProperties":false},{"type":"object","properties":{"operation":{"type":"string","const":"CANCEL_PORTRAIT"},"jobId":{"type":"string","minLength":1,"maxLength":120},"reason":{"type":"string","minLength":3,"maxLength":1000},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["operation","jobId","reason","requestId"],"additionalProperties":false},{"type":"object","properties":{"operation":{"type":"string","const":"ABANDON_UNKNOWN_PORTRAIT"},"jobId":{"type":"string","minLength":1,"maxLength":120},"reason":{"type":"string","minLength":10,"maxLength":1000},"confirmed":{"type":"boolean","const":true},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["operation","jobId","reason","confirmed","requestId"],"additionalProperties":false}]}},"required":["operation","input"]},{"type":"object","properties":{"operation":{"type":"string","const":"WEBSITE_PREVIEW"},"input":{"type":"object","properties":{"versionId":{"type":"string","minLength":1,"maxLength":120},"approvalHash":{"type":"string","pattern":"^[a-f0-9]{64}$"},"placement":{"type":"string","enum":["HERO","GALLERY"]},"alt":{"type":"string","minLength":1,"maxLength":300}},"required":["versionId","approvalHash","placement","alt"],"additionalProperties":false}},"required":["operation","input"]},{"type":"object","properties":{"operation":{"type":"string","const":"WEBSITE_COPY"},"input":{"type":"object","properties":{"versionId":{"type":"string","minLength":1,"maxLength":120},"approvalHash":{"type":"string","pattern":"^[a-f0-9]{64}$"},"placement":{"type":"string","enum":["HERO","GALLERY"]},"alt":{"type":"string","minLength":1,"maxLength":300},"reviewedHash":{"type":"string","pattern":"^[a-f0-9]{64}$"},"publicUseApproved":{"type":"boolean","const":true},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["versionId","approvalHash","placement","alt","reviewedHash","publicUseApproved","requestId"],"additionalProperties":false}},"required":["operation","input"]},{"type":"object","properties":{"operation":{"type":"string","const":"IMAGE"},"input":{"anyOf":[{"type":"object","properties":{"kind":{"type":"string","const":"SOURCE"},"weddingId":{"type":"string"},"assetId":{"type":"string"}},"required":["kind","weddingId","assetId"]},{"type":"object","properties":{"kind":{"type":"string","const":"VERSION"},"versionId":{"type":"string"},"download":{"default":false,"type":"boolean"},"approvalHash":{"type":"string"}},"required":["kind","versionId"]}]}},"required":["operation","input"]}]}}}}}},"/keepsakes/uploads":{"post":{"security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"weddingId","in":"query","required":true,"schema":{"type":"string"}},{"name":"filename","in":"query","required":true,"schema":{"type":"string","maxLength":160}},{"name":"rightsConfirmed","in":"query","required":true,"schema":{"type":"boolean","const":true}}],"responses":{"200":{"description":"Private no-store result. Images return image/png bytes. Exact original storage pointers are never returned to clients."},"400":{"description":"Invalid input, image not ready, generation not activated or missing explicit approval."},"401":{"description":"Named account authentication required."},"403":{"description":"Business API keys cannot impersonate an artwork approver."},"404":{"description":"Artwork absent, foreign, revoked or outside current membership."},"409":{"description":"Source, revision, reviewed cost, approval or website draft changed."}},"summary":"Retain one private, rights-confirmed original artwork or portrait reference","description":"Raw JPEG, PNG or WebP bytes; 20 MB input limit, 40 million decoded pixels, 64–12,000 pixels per edge. Original bytes and checksum are retained privately; output processing strips metadata. Portrait references require at least 256 pixels on each edge.","requestBody":{"required":true,"content":{"application/octet-stream":{"schema":{"type":"string","format":"binary"}}}}}},"/shared-media":{"get":{"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Authorized domain result. Private account and wedding scope are checked again in the service."},"400":{"description":"Invalid input or activation/consent/usage gate."},"404":{"description":"Unknown, foreign or revoked resource."},"409":{"description":"Changed revision or reviewed snapshot."}},"summary":"Read account-contributed and authorized shared wedding media","parameters":[{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string"}},{"name":"weddingId","in":"query","required":true,"schema":{"type":"string"}},{"name":"page","in":"query","schema":{"type":"integer","minimum":1}}]},"post":{"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Authorized domain result. Private account and wedding scope are checked again in the service."},"400":{"description":"Invalid input or activation/consent/usage gate."},"404":{"description":"Unknown, foreign or revoked resource."},"409":{"description":"Changed revision or reviewed snapshot."}},"summary":"Submit or moderate a scoped post/gallery link, remove/retry an owned upload, set uploader matching permission, or approve owner search limits","parameters":[{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["action","value"],"properties":{"action":{"enum":["post","moderate","remove","retry","permission","policy"]},"value":{"type":"object"}}}}}}}},"/shared-media/uploads":{"post":{"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Authorized domain result. Private account and wedding scope are checked again in the service."},"400":{"description":"Invalid input or activation/consent/usage gate."},"404":{"description":"Unknown, foreign or revoked resource."},"409":{"description":"Changed revision or reviewed snapshot."}},"summary":"Upload an original as a named couple/vendor contributor; 8 MB, private until post approval","parameters":[{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","required":["weddingId","requestId","file"],"properties":{"weddingId":{"type":"string"},"requestId":{"type":"string","format":"uuid"},"file":{"type":"string","format":"binary"}}}}}}}},"/self-photos":{"get":{"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Authorized domain result. Private account and wedding scope are checked again in the service."},"400":{"description":"Invalid input or activation/consent/usage gate."},"404":{"description":"Unknown, foreign or revoked resource."},"409":{"description":"Changed revision or reviewed snapshot."}},"summary":"Read only the signed-in adult’s consent and currently permitted possible matches","parameters":[{"name":"weddingId","in":"query","schema":{"type":"string"}}]},"post":{"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Authorized domain result. Private account and wedding scope are checked again in the service."},"400":{"description":"Invalid input or activation/consent/usage gate."},"404":{"description":"Unknown, foreign or revoked resource."},"409":{"description":"Changed revision or reviewed snapshot."}},"summary":"Preview a bounded photo batch and exact cost, approve that snapshot, or withdraw consent even after wedding access ends","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["action","value"],"properties":{"action":{"enum":["preview","start","withdraw"]},"value":{"type":"object","description":"consentId. Preview accepts beforeMediaId cursor. Start also requires requestId UUID, reviewed SHA-256 reviewHash, exact approvedCents and same optional cursor."}}}}}}}},"/self-photos/enrollment":{"post":{"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Authorized domain result. Private account and wedding scope are checked again in the service."},"400":{"description":"Invalid input or activation/consent/usage gate."},"404":{"description":"Unknown, foreign or revoked resource."},"409":{"description":"Changed revision or reviewed snapshot."}},"summary":"Explicit adult own-portrait consent; no identity verification. JPEG/PNG up to 5 MB.","parameters":[{"name":"X-Workspace-Id","in":"header","required":false,"schema":{"type":"string"},"description":"Connected workspace, or instead provide a current household invitation token in the private form."}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","required":["weddingId","requestId","consentVersion","adultSelf","consent","portrait"],"properties":{"weddingId":{"type":"string"},"requestId":{"type":"string","format":"uuid"},"consentVersion":{"const":"self-photo-search-1"},"adultSelf":{"const":"true"},"consent":{"const":"true"},"invitationToken":{"type":"string"},"portrait":{"type":"string","format":"binary"}}}}}}}},"/self-photos/{id}/media/{mediaId}":{"get":{"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Authorized domain result. Private account and wedding scope are checked again in the service."},"400":{"description":"Invalid input or activation/consent/usage gate."},"404":{"description":"Unknown, foreign or revoked resource."},"409":{"description":"Changed revision or reviewed snapshot."}},"summary":"Stream a possible match after current consent, identity and photo/event checks; no original or signed bucket URL","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"mediaId","in":"path","required":true,"schema":{"type":"string"}}]}},"/assigned-work":{"get":{"security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Current named-member projection or exact authorized mutation replay. Private no-store."},"400":{"description":"Invalid review or command."},"401":{"description":"Named account session required."},"404":{"description":"Foreign, unassigned, revoked, expired or ungranted record/section."},"409":{"description":"Changed record, policy or membership revision. Reload and explicitly review."}},"summary":"Read a named teammate’s assigned business work with current per-section grants","description":"Without id: kind=CLIENT|WEDDING|LEAD, q, after, limit. With id: kind, id, section, after, limit. Section names: overview, notes, tasks, timeline, guests, guest-contacts, files, budget, proposals, agreements, invoices, expenses. Records and individual fields are projected from current membership-bound assignments. Business API keys cannot impersonate a teammate."},"post":{"security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Current named-member projection or exact authorized mutation replay. Private no-store."},"400":{"description":"Invalid review or command."},"401":{"description":"Named account session required."},"404":{"description":"Foreign, unassigned, revoked, expired or ungranted record/section."},"409":{"description":"Changed record, policy or membership revision. Reload and explicitly review."}},"summary":"Apply reviewed scoped note append, project-task edit or guest edit through canonical transaction services","description":"Original requestId, current source revision/hash and exact assignment are checked before mutation and replay. Published schedules, signed records, financial history and billing are never changed by these commands.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","oneOf":[{"type":"object","properties":{"operation":{"type":"string","const":"NOTE"},"input":{"type":"object","properties":{"kind":{"type":"string","enum":["CLIENT","WEDDING","LEAD"]},"id":{"type":"string","minLength":1,"maxLength":100},"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"note":{"type":"string","minLength":1,"maxLength":4000},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"approved":{"type":"boolean","const":true}},"required":["kind","id","expectedRevision","note","requestId","approved"],"additionalProperties":false}},"required":["operation","input"],"additionalProperties":false},{"type":"object","properties":{"operation":{"type":"string","const":"TASK"},"input":{"type":"object","properties":{"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"weddingId":{"type":"string","minLength":1,"maxLength":100},"id":{"type":"string","minLength":1,"maxLength":100},"expectedRevision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"title":{"type":"string","minLength":1,"maxLength":180},"notes":{"type":"string","maxLength":4000},"dueDate":{"anyOf":[{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},{"type":"null"}]},"done":{"type":"boolean"},"approved":{"type":"boolean","const":true}},"required":["requestId","weddingId","title","notes","dueDate","done","approved"],"additionalProperties":false}},"required":["operation","input"],"additionalProperties":false},{"type":"object","properties":{"operation":{"type":"string","const":"GUEST"},"input":{"type":"object","properties":{"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"weddingId":{"type":"string","minLength":1,"maxLength":100},"id":{"type":"string","minLength":1,"maxLength":100},"expectedHash":{"type":"string","pattern":"^[a-f0-9]{64}$"},"fields":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":200},"rsvp":{"type":"string","enum":["INVITED","ATTENDING","DECLINED","MAYBE"]},"mealChoice":{"type":"string","maxLength":200},"dietary":{"type":"string","maxLength":2000},"household":{"type":"string","maxLength":200}},"required":["name","rsvp","mealChoice","dietary","household"],"additionalProperties":false},"approved":{"type":"boolean","const":true}},"required":["requestId","weddingId","id","expectedHash","fields","approved"],"additionalProperties":false}},"required":["operation","input"],"additionalProperties":false}]}}}}}},"/assigned-work/files":{"get":{"security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Current named-member projection or exact authorized mutation replay. Private no-store."},"400":{"description":"Invalid review or command."},"401":{"description":"Named account session required."},"404":{"description":"Foreign, unassigned, revoked, expired or ungranted record/section."},"409":{"description":"Changed record, policy or membership revision. Reload and explicitly review."}},"summary":"Get a short-lived download for an individually granted migrated project document","description":"Query id and revision. The current project assignment, files.read grant, selected document ID, document revision and ready private asset are checked. Legacy public URLs and isolated gallery/guest/export/signature artifacts are not returned."}},"/workspace-scopes":{"get":{"security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Current named-member projection or exact authorized mutation replay. Private no-store."},"400":{"description":"Invalid review or command."},"401":{"description":"Named account session required."},"404":{"description":"Foreign, unassigned, revoked, expired or ungranted record/section."},"409":{"description":"Changed record, policy or membership revision. Reload and explicitly review."}},"summary":"Administrator assignment editor and paginated source choices","description":"Query optional membershipId, kind=CLIENT|WEDDING|LEAD|DOCUMENT, q, after, limit. Owners and administrators only; target must be limited staff or contractor."},"post":{"security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Current named-member projection or exact authorized mutation replay. Private no-store."},"400":{"description":"Invalid review or command."},"401":{"description":"Named account session required."},"404":{"description":"Foreign, unassigned, revoked, expired or ungranted record/section."},"409":{"description":"Changed record, policy or membership revision. Reload and explicitly review."}},"summary":"Preview and save an explicit member access policy or inspect their read-only desk","description":"preview computes the current matched set and review hash. save rechecks exact source membership and policy revision and preserves an audit receipt. Configured tag rules need explicit approval for future matches. desk derives the recipient identity from a current authorized membership and cannot execute mutations as that person.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","oneOf":[{"type":"object","properties":{"operation":{"type":"string","const":"preview"},"input":{"type":"object","properties":{"membershipId":{"type":"string","minLength":1,"maxLength":100},"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"policy":{"type":"object","properties":{"version":{"type":"number","const":1},"enabled":{"type":"boolean"},"clientIds":{"maxItems":500,"type":"array","items":{"type":"string","minLength":1,"maxLength":100}},"weddingIds":{"maxItems":500,"type":"array","items":{"type":"string","minLength":1,"maxLength":100}},"leadIds":{"maxItems":500,"type":"array","items":{"type":"string","minLength":1,"maxLength":100}},"tagRules":{"maxItems":50,"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","enum":["CLIENT","WEDDING","LEAD"]},"tag":{"type":"string","minLength":1,"maxLength":80}},"required":["kind","tag"],"additionalProperties":false}},"grants":{"maxItems":15,"type":"array","items":{"type":"string","enum":["contacts.read","notes.read","notes.append","tasks.read","tasks.write","timeline.read","guests.read","guests.write","guest-contacts.read","files.read","finance.budget","finance.proposals","finance.agreements","finance.invoices","finance.expenses"]}},"documentIds":{"maxItems":500,"type":"array","items":{"type":"string","minLength":1,"maxLength":100}},"expiresAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}]}},"required":["version","enabled","clientIds","weddingIds","leadIds","tagRules","grants","documentIds","expiresAt"],"additionalProperties":false}},"required":["membershipId","expectedRevision","policy"],"additionalProperties":false}},"required":["operation","input"],"additionalProperties":false},{"type":"object","properties":{"operation":{"type":"string","const":"save"},"input":{"type":"object","properties":{"membershipId":{"type":"string","minLength":1,"maxLength":100},"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"policy":{"type":"object","properties":{"version":{"type":"number","const":1},"enabled":{"type":"boolean"},"clientIds":{"maxItems":500,"type":"array","items":{"type":"string","minLength":1,"maxLength":100}},"weddingIds":{"maxItems":500,"type":"array","items":{"type":"string","minLength":1,"maxLength":100}},"leadIds":{"maxItems":500,"type":"array","items":{"type":"string","minLength":1,"maxLength":100}},"tagRules":{"maxItems":50,"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","enum":["CLIENT","WEDDING","LEAD"]},"tag":{"type":"string","minLength":1,"maxLength":80}},"required":["kind","tag"],"additionalProperties":false}},"grants":{"maxItems":15,"type":"array","items":{"type":"string","enum":["contacts.read","notes.read","notes.append","tasks.read","tasks.write","timeline.read","guests.read","guests.write","guest-contacts.read","files.read","finance.budget","finance.proposals","finance.agreements","finance.invoices","finance.expenses"]}},"documentIds":{"maxItems":500,"type":"array","items":{"type":"string","minLength":1,"maxLength":100}},"expiresAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}]}},"required":["version","enabled","clientIds","weddingIds","leadIds","tagRules","grants","documentIds","expiresAt"],"additionalProperties":false},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"reviewedHash":{"type":"string","pattern":"^[a-f0-9]{64}$"},"approved":{"type":"boolean","const":true},"futureTagMatchesApproved":{"type":"boolean"},"contentAccessReviewed":{"type":"boolean","const":true}},"required":["membershipId","expectedRevision","policy","requestId","reviewedHash","approved","futureTagMatchesApproved","contentAccessReviewed"],"additionalProperties":false}},"required":["operation","input"],"additionalProperties":false},{"type":"object","properties":{"operation":{"type":"string","const":"desk"},"membershipId":{"type":"string"},"detail":{"type":"boolean"},"input":{}},"required":["operation","membershipId","detail","input"],"additionalProperties":false}]}}}}}},"/party-layouts":{"get":{"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Current owned party records and saved directory layout."},"403":{"description":"Named full workspace membership required."},"404":{"description":"Foreign or unavailable wedding."},"409":{"description":"Saved layout revision or selected party member changed."}},"summary":"Read private wedding-party display and contact directory; invited connected businesses do not inherit access","parameters":[{"name":"weddingId","in":"query","required":true,"schema":{"type":"string","minLength":1,"maxLength":100}}]},"post":{"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Current owned party records and saved directory layout."},"403":{"description":"Named full workspace membership required."},"404":{"description":"Foreign or unavailable wedding."},"409":{"description":"Saved layout revision or selected party member changed."}},"summary":"Save reviewed portrait/directory/story display and ordering; current guest-visible people only are projected into the private Guest Hub, never private contacts","requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"weddingId":{"type":"string","minLength":1,"maxLength":100},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"definition":{"type":"object","properties":{"style":{"default":"PORTRAITS","type":"string","enum":["PORTRAITS","DIRECTORY","STORY"]},"groupBy":{"default":"NONE","type":"string","enum":["NONE","SIDE","ROLE"]},"showIntroductions":{"default":true,"type":"boolean"},"showPhotos":{"default":true,"type":"boolean"},"orderIds":{"default":[],"maxItems":1000,"type":"array","items":{"type":"string","minLength":1,"maxLength":100}}},"additionalProperties":false},"guestDisplayApproved":{"type":"boolean","const":true}},"required":["weddingId","requestId","expectedRevision","definition","guestDisplayApproved"],"additionalProperties":false}}}}}},"/venue-assets":{"get":{"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Current private asset or resumable upload state."},"400":{"description":"Unsupported file or invalid upload metadata."},"404":{"description":"This business cannot access the wedding or file."},"409":{"description":"The request, checksum, upload state, or included storage limit changed."},"503":{"description":"Private venue storage requires activation."}},"summary":"List this business's wedding venue assets","parameters":[{"in":"query","name":"weddingId","required":true,"schema":{"type":"string"}},{"in":"query","name":"cursor","required":false,"schema":{"type":"string"}}]},"post":{"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Current private asset or resumable upload state."},"400":{"description":"Unsupported file or invalid upload metadata."},"404":{"description":"This business cannot access the wedding or file."},"409":{"description":"The request, checksum, upload state, or included storage limit changed."},"503":{"description":"Private venue storage requires activation."}},"summary":"Start or resume a private venue upload with an immutable file checksum","requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"weddingId":{"type":"string","minLength":1,"maxLength":100},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"type":"string","minLength":1,"maxLength":160},"kind":{"type":"string","enum":["VENUE","OBJECT","FLOOR_PLAN","SOURCE"]},"format":{"type":"string","enum":["GLB","SPLAT","PNG","JPEG","ZIP"]},"bytes":{"type":"integer","exclusiveMinimum":0,"maximum":134217728},"sha256":{"type":"string","pattern":"^[a-f0-9]{64}$"}},"required":["weddingId","requestId","name","kind","format","bytes","sha256"],"additionalProperties":false}}}}}},"/venue-assets/{id}/parts":{"post":{"security":[{"bearerAuth":[]}],"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Current private asset or resumable upload state."},"400":{"description":"Unsupported file or invalid upload metadata."},"404":{"description":"This business cannot access the wedding or file."},"409":{"description":"The request, checksum, upload state, or included storage limit changed."},"503":{"description":"Private venue storage requires activation."}},"summary":"Authorize one checksummed multipart upload part","requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"partNumber":{"type":"integer","minimum":1,"maximum":16},"checksum":{"type":"string","pattern":"^[A-Za-z0-9+/]{43}=$"}},"required":["partNumber","checksum"],"additionalProperties":false}}}}}},"/venue-assets/{id}/complete":{"post":{"security":[{"bearerAuth":[]}],"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Current private asset or resumable upload state."},"400":{"description":"Unsupported file or invalid upload metadata."},"404":{"description":"This business cannot access the wedding or file."},"409":{"description":"The request, checksum, upload state, or included storage limit changed."},"503":{"description":"Private venue storage requires activation."}},"summary":"Verify uploaded bytes, inspect the self-contained model, and make it available"}},"/venue-assets/{id}/abort":{"post":{"security":[{"bearerAuth":[]}],"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Current private asset or resumable upload state."},"400":{"description":"Unsupported file or invalid upload metadata."},"404":{"description":"This business cannot access the wedding or file."},"409":{"description":"The request, checksum, upload state, or included storage limit changed."},"503":{"description":"Private venue storage requires activation."}},"summary":"Cancel an incomplete upload; ready models remain immutable for saved layouts"}},"/venue-assets/{id}/file":{"get":{"security":[{"bearerAuth":[]}],"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"302":{"description":"Authorized redirect to a private S3 URL that expires in 60 seconds; never cache."},"404":{"description":"This business cannot access the wedding or file."}},"summary":"Read a ready model or floor plan with current private-business authorization"}},"/venue-jobs":{"get":{"security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Workspace-Id","in":"header","description":"Required with an account token. API keys already bind a business.","schema":{"type":"string"}},{"name":"weddingId","in":"query","required":true,"schema":{"type":"string"}},{"name":"after","in":"query","schema":{"type":"string"}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":50,"default":12}}],"summary":"List venue generation jobs and configured per-job quotes","responses":{"200":{"description":"Private safe job status without provider URLs or credentials."},"400":{"description":"Invalid input, source file, or usage approval."},"401":{"description":"Expired or revoked credential."},"404":{"description":"Wedding, source or job is unavailable in this business."},"409":{"description":"Price or revision changed, or request identity was reused with different content."}}},"post":{"security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Workspace-Id","in":"header","description":"Required with an account token. API keys already bind a business.","schema":{"type":"string"}}],"summary":"Approve and queue one private venue capture or custom 3D object","description":"Requires projects:read and assets:write. Exact approvedCostCents must match the current configured quote and spending cap. Idempotency is bound to the business, submitting actor and requestId. Pending or uncertain requests never trigger a replacement billable provider task.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["weddingId","requestId","name","kind","approvedCostCents","sharingApproved"],"properties":{"weddingId":{"type":"string"},"requestId":{"type":"string","format":"uuid"},"name":{"type":"string","maxLength":120},"kind":{"enum":["DECOR_TEXT","DECOR_IMAGE","CAPTURE_IMPORT","CAPTURE_PHOTOS"]},"approvedCostCents":{"type":"integer","minimum":0,"maximum":100000},"sharingApproved":{"const":true},"prompt":{"type":"string","minLength":10,"maxLength":1024,"description":"Required for DECOR_TEXT."},"sourceAssetId":{"type":"string","description":"Private READY PNG/JPEG for DECOR_IMAGE or ZIP for CAPTURE_PHOTOS, from this wedding."},"captureId":{"type":"string","description":"Required for CAPTURE_IMPORT. Capture externalId must be bound to this business and wedding."},"format":{"enum":["GLB","SPLAT"],"description":"Required for CAPTURE_IMPORT."},"mode":{"enum":["photo","splat"],"description":"Required for CAPTURE_PHOTOS. Splat requires camera poses."},"frameCount":{"type":"integer","minimum":20,"maximum":5000,"description":"Required for CAPTURE_PHOTOS; must match archive."}}}}}},"responses":{"200":{"description":"Private safe job status without provider URLs or credentials."},"202":{"description":"Persisted job and usage reservation. Does not claim the provider has started or completed."},"400":{"description":"Invalid input, source file, or usage approval."},"401":{"description":"Expired or revoked credential."},"404":{"description":"Wedding, source or job is unavailable in this business."},"409":{"description":"Price or revision changed, or request identity was reused with different content."}}}},"/venue-jobs/{id}":{"get":{"security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Workspace-Id","in":"header","description":"Required with an account token. API keys already bind a business.","schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"summary":"Read a private venue processing request","responses":{"200":{"description":"Private safe job status without provider URLs or credentials."},"400":{"description":"Invalid input, source file, or usage approval."},"401":{"description":"Expired or revoked credential."},"404":{"description":"Wedding, source or job is unavailable in this business."},"409":{"description":"Price or revision changed, or request identity was reused with different content."}}},"post":{"security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Workspace-Id","in":"header","description":"Required with an account token. API keys already bind a business.","schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"summary":"Wake the same queued or processing attempt","description":"Requires assets:write and current expectedRevision. Never resets a SUBMITTING, UNCERTAIN, FAILED or READY job or submits a replacement request. Provider polling remains in the durable worker.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["expectedRevision"],"properties":{"expectedRevision":{"type":"integer","minimum":0}}}}}},"responses":{"200":{"description":"Private safe job status without provider URLs or credentials."},"400":{"description":"Invalid input, source file, or usage approval."},"401":{"description":"Expired or revoked credential."},"404":{"description":"Wedding, source or job is unavailable in this business."},"409":{"description":"Price or revision changed, or request identity was reused with different content."}}}},"/venue-shares":{"get":{"security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Workspace-Id","in":"header","description":"Required with an account bearer token. Scoped API keys already bind a business. Same-origin browser sessions use the current business.","schema":{"type":"string"}},{"name":"weddingId","in":"query","required":true,"schema":{"type":"string"}},{"name":"planId","in":"query","required":true,"schema":{"type":"string"}}],"summary":"List the latest 30 saved venue walkthrough links","description":"Requires projects:read and assets:read. Same-origin signed-in browser sessions are also supported. Active link paths grant access to their frozen geometry and expressly included uploaded files; handle them as private links.","responses":{"200":{"description":"Private link metadata or revocation confirmation. Active link paths are returned only to authorized business members or scoped credentials."},"400":{"description":"Invalid input or missing explicit sharing approval."},"401":{"description":"Authentication expired or was revoked."},"403":{"description":"Missing scope or browser mutation has no matching Origin."},"404":{"description":"Plan or link is unavailable in this business."},"409":{"description":"Saved revision changed, request identity conflicts, or secure-link setup is unavailable."}}},"post":{"security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Workspace-Id","in":"header","description":"Required with an account bearer token. Scoped API keys already bind a business. Same-origin browser sessions use the current business.","schema":{"type":"string"}}],"summary":"Create an expiring walkthrough from the exact reviewed saved plan","description":"Requires projects:write and assets:read. Same requestId and content replay the original link. Different content conflicts. Snapshot excludes guest assignments, business/financial/vendor references, private notes and tracing images. Uploaded venue captures/custom models are included only when includeUploadedFiles is true. Cookie-authenticated browser mutations require a matching Origin.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["weddingId","planId","expectedRevision","requestId","title","expiresInDays","includeUploadedFiles","sharingApproved"],"properties":{"weddingId":{"type":"string","minLength":1,"maxLength":100},"planId":{"type":"string","minLength":1,"maxLength":100},"expectedRevision":{"type":"integer","minimum":1},"requestId":{"type":"string","format":"uuid"},"title":{"type":"string","minLength":1,"maxLength":120},"expiresInDays":{"type":"integer","minimum":1,"maximum":90},"includeUploadedFiles":{"type":"boolean"},"sharingApproved":{"const":true}}}}}},"responses":{"200":{"description":"Private link metadata or revocation confirmation. Active link paths are returned only to authorized business members or scoped credentials."},"201":{"description":"Immutable saved walkthrough link, expiry and reviewed plan revision."},"400":{"description":"Invalid input or missing explicit sharing approval."},"401":{"description":"Authentication expired or was revoked."},"403":{"description":"Missing scope or browser mutation has no matching Origin."},"404":{"description":"Plan or link is unavailable in this business."},"409":{"description":"Saved revision changed, request identity conflicts, or secure-link setup is unavailable."}}},"delete":{"security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Workspace-Id","in":"header","description":"Required with an account bearer token. Scoped API keys already bind a business. Same-origin browser sessions use the current business.","schema":{"type":"string"}}],"summary":"Turn off an existing walkthrough link","description":"Requires projects:write and assets:read. Repeated revocation is idempotent. New visits and asset grants stop; already-issued file URLs expire within 60 seconds and previously downloaded files cannot be recalled. Cookie-authenticated browser mutations require a matching Origin.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["weddingId","planId","shareId"],"properties":{"weddingId":{"type":"string","minLength":1,"maxLength":100},"planId":{"type":"string","minLength":1,"maxLength":100},"shareId":{"type":"string","minLength":1,"maxLength":100}}}}}},"responses":{"200":{"description":"Private link metadata or revocation confirmation. Active link paths are returned only to authorized business members or scoped credentials."},"400":{"description":"Invalid input or missing explicit sharing approval."},"401":{"description":"Authentication expired or was revoked."},"403":{"description":"Missing scope or browser mutation has no matching Origin."},"404":{"description":"Plan or link is unavailable in this business."},"409":{"description":"Saved revision changed, request identity conflicts, or secure-link setup is unavailable."}}}},"/venue-layouts":{"get":{"security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Workspace-Id","in":"header","description":"Required for account bearer tokens; scoped API keys bind one business. Same-origin browser sessions use their current business.","schema":{"type":"string"}},{"name":"weddingId","in":"query","required":true,"schema":{"type":"string"}},{"name":"id","in":"query","schema":{"type":"string"}},{"name":"after","in":"query","schema":{"type":"string"}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":50,"default":12}}],"summary":"List saved venue layouts or read one full layout","description":"Requires projects:read and assets:read. weddingId is required. Without id returns paginated metadata; with id returns the full saved layout, private business references and seating assignments. References remain subject to their own API scopes when followed.","responses":{"200":{"description":"Scoped venue layouts or the saved/applied plan, including its revision."},"400":{"description":"Invalid command, missing requestId or reviewed seating revision, or malformed geometry."},"401":{"description":"Expired or revoked authentication."},"403":{"description":"Missing required scopes or invalid browser Origin."},"404":{"description":"Wedding, plan, cursor or linked record belongs to another business or is unavailable."},"409":{"description":"Layout/seating revision changed or save requestId was reused with different content."}}},"post":{"security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Workspace-Id","in":"header","description":"Required for account bearer tokens; scoped API keys bind one business. Same-origin browser sessions use their current business.","schema":{"type":"string"}}],"summary":"Save a venue layout or apply its reviewed seating","description":"Requires projects:write and assets:read. SAVE requires a request UUID and invokes the same validated save service used by the editor, retaining its idempotency receipt and exact revision. APPLY requires the current saved layout revision and reviewedSeatingRevision, invokes the existing seating transaction and does not alter signed or financial records. Cookie-authenticated mutations require a matching Origin. All source assets and business references are validated by the shared service.","requestBody":{"required":true,"content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"operation":{"type":"string","enum":["SAVE"]},"input":{"type":"object","properties":{"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"weddingId":{"type":"string","minLength":1,"maxLength":100},"id":{"type":"string","minLength":1,"maxLength":100},"revision":{"type":"integer","minimum":0,"maximum":9007199254740991},"seatingBasisRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"name":{"type":"string","minLength":1,"maxLength":120},"layout":{"type":"object","properties":{"units":{"type":"string","enum":["METERS"]},"snap":{"type":"number","minimum":0.05,"maximum":5},"clearance":{"type":"number","minimum":0,"maximum":5},"rooms":{"minItems":1,"maxItems":20,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":100},"name":{"type":"string","minLength":1,"maxLength":100},"width":{"type":"number","minimum":2,"maximum":500},"height":{"type":"number","minimum":2,"maximum":500},"ceilingHeight":{"type":"number","minimum":1,"maximum":40},"wallColor":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"},"floorColor":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"},"boundary":{"minItems":3,"maxItems":50,"type":"array","items":{"type":"object","properties":{"x":{"type":"number","minimum":0,"maximum":500},"y":{"type":"number","minimum":0,"maximum":500}},"required":["x","y"],"additionalProperties":false}},"openings":{"maxItems":80,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":100},"edge":{"type":"integer","minimum":0,"maximum":49},"offset":{"type":"number","minimum":0,"maximum":500},"width":{"type":"number","minimum":0.1,"maximum":100},"height":{"type":"number","minimum":0.1,"maximum":30},"sill":{"type":"number","minimum":0,"maximum":30},"kind":{"type":"string","enum":["DOOR","WINDOW"]}},"required":["id","edge","offset","width","height","sill","kind"],"additionalProperties":false}},"capture":{"type":"object","properties":{"assetId":{"type":"string","minLength":1,"maxLength":100},"format":{"type":"string","enum":["GLB","SPLAT"]},"x":{"type":"number","minimum":-500,"maximum":500},"y":{"type":"number","minimum":-500,"maximum":500},"elevation":{"type":"number","minimum":-100,"maximum":100},"scale":{"type":"number","minimum":0.0001,"maximum":10000},"rotation":{"type":"number","minimum":0,"maximum":359},"pitch":{"type":"number","minimum":-180,"maximum":180},"roll":{"type":"number","minimum":-180,"maximum":180},"opacity":{"type":"number","minimum":0,"maximum":1},"visible":{"type":"boolean"},"calibrated":{"type":"boolean"}},"required":["assetId","format","x","y","elevation","scale","rotation","opacity","visible","calibrated"],"additionalProperties":false},"floorPlanReference":{"type":"object","properties":{"assetId":{"type":"string","minLength":1,"maxLength":100},"x":{"type":"number","minimum":-500,"maximum":500},"y":{"type":"number","minimum":-500,"maximum":500},"width":{"type":"number","minimum":0,"exclusiveMinimum":true,"maximum":500},"height":{"type":"number","minimum":0,"exclusiveMinimum":true,"maximum":500},"opacity":{"type":"number","minimum":0,"maximum":1},"visible":{"type":"boolean"}},"required":["assetId","x","y","width","height","opacity","visible"],"additionalProperties":false},"measurementsConfirmed":{"type":"boolean"}},"required":["id","name","width","height"],"additionalProperties":false}},"objects":{"maxItems":500,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":100},"roomId":{"type":"string","minLength":1,"maxLength":100},"kind":{"type":"string","enum":["ROUND_TABLE","TABLE","STAGE","DANCE_FLOOR","BAR","DOOR","AISLE","SOFA","CHAIR","OTHER"]},"label":{"type":"string","minLength":1,"maxLength":100},"x":{"type":"number","minimum":0,"maximum":500},"y":{"type":"number","minimum":0,"maximum":500},"width":{"type":"number","minimum":0.1,"maximum":100},"height":{"type":"number","minimum":0.1,"maximum":100},"rotation":{"type":"number","minimum":0,"maximum":359},"capacity":{"type":"integer","minimum":0,"maximum":500},"layer":{"default":1,"type":"integer","minimum":0,"maximum":20},"group":{"default":"","type":"string","maxLength":80},"locked":{"default":false,"type":"boolean"},"resourceId":{"default":null,"nullable":true,"type":"string"},"resourceQuantity":{"default":1,"type":"integer","minimum":1,"maximum":10000},"vendorId":{"default":null,"nullable":true,"type":"string"},"setupTaskId":{"default":null,"nullable":true,"type":"string"},"teardown":{"default":"","type":"string","maxLength":500},"budgetItemId":{"nullable":true,"type":"string","minLength":1,"maxLength":100},"reservationId":{"nullable":true,"type":"string","minLength":1,"maxLength":100},"showChairs":{"type":"boolean"},"catalogId":{"type":"string","minLength":1,"maxLength":100},"circulationObstacle":{"type":"boolean"},"verticalHeight":{"type":"number","minimum":0.01,"maximum":40},"elevation":{"type":"number","minimum":0,"maximum":40},"color":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"},"modelAssetId":{"type":"string","minLength":1,"maxLength":100},"supportObjectId":{"type":"string","minLength":1,"maxLength":100}},"required":["id","roomId","kind","label","x","y","width","height","rotation","capacity","layer","group","locked","resourceId","resourceQuantity","vendorId","setupTaskId","teardown"],"additionalProperties":false}},"seating":{"maxItems":5000,"type":"array","items":{"type":"object","properties":{"guestId":{"type":"string","minLength":1,"maxLength":100},"objectId":{"type":"string","minLength":1,"maxLength":100}},"required":["guestId","objectId"],"additionalProperties":false}},"paths":{"maxItems":30,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":100},"roomId":{"type":"string","minLength":1,"maxLength":100},"label":{"type":"string","minLength":1,"maxLength":100},"width":{"type":"number","minimum":0.3,"maximum":10},"points":{"minItems":2,"maxItems":50,"type":"array","items":{"type":"object","properties":{"x":{"type":"number","minimum":0,"maximum":500},"y":{"type":"number","minimum":0,"maximum":500}},"required":["x","y"],"additionalProperties":false}}},"required":["id","roomId","label","width","points"],"additionalProperties":false}},"seatingRules":{"type":"object","properties":{"keepHouseholdsTogether":{"type":"boolean"},"includeAwaiting":{"type":"boolean"},"lockedGuestIds":{"maxItems":5000,"type":"array","items":{"type":"string","minLength":1,"maxLength":100}},"together":{"maxItems":200,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":100},"label":{"type":"string","minLength":1,"maxLength":100},"guestIds":{"minItems":2,"maxItems":100,"type":"array","items":{"type":"string","minLength":1,"maxLength":100}}},"required":["id","label","guestIds"],"additionalProperties":false}},"apart":{"maxItems":200,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":100},"guestIds":{"minItems":2,"maxItems":100,"type":"array","items":{"type":"string","minLength":1,"maxLength":100}}},"required":["id","guestIds"],"additionalProperties":false}},"tables":{"maxItems":1000,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":100},"guestId":{"type":"string","minLength":1,"maxLength":100},"objectIds":{"maxItems":500,"type":"array","items":{"type":"string","minLength":1,"maxLength":100}}},"required":["id","guestId","objectIds"],"additionalProperties":false}}},"required":["keepHouseholdsTogether","includeAwaiting","lockedGuestIds","together","apart","tables"],"additionalProperties":false},"displayUnits":{"type":"string","enum":["METERS","FEET"]},"cameraBookmarks":{"maxItems":30,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":100},"name":{"type":"string","minLength":1,"maxLength":80},"roomId":{"type":"string","minLength":1,"maxLength":100},"position":{"type":"object","properties":{"x":{"type":"number","minimum":-1000,"maximum":1000},"y":{"type":"number","minimum":-100,"maximum":1000},"z":{"type":"number","minimum":-1000,"maximum":1000}},"required":["x","y","z"],"additionalProperties":false},"target":{"type":"object","properties":{"x":{"type":"number","minimum":-1000,"maximum":1000},"y":{"type":"number","minimum":-100,"maximum":1000},"z":{"type":"number","minimum":-1000,"maximum":1000}},"required":["x","y","z"],"additionalProperties":false}},"required":["id","name","roomId","position","target"],"additionalProperties":false}}},"required":["units","snap","clearance","rooms","objects","seating"],"additionalProperties":false}},"required":["requestId","weddingId","revision","name","layout"],"additionalProperties":false}},"required":["operation","input"],"additionalProperties":false},{"type":"object","properties":{"operation":{"type":"string","enum":["APPLY"]},"input":{"type":"object","properties":{"weddingId":{"type":"string","minLength":1,"maxLength":100},"id":{"type":"string","minLength":1,"maxLength":100},"revision":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":9007199254740991},"reviewedSeatingRevision":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["weddingId","id","revision","reviewedSeatingRevision"],"additionalProperties":false}},"required":["operation","input"],"additionalProperties":false}]}}}},"responses":{"200":{"description":"Scoped venue layouts or the saved/applied plan, including its revision."},"400":{"description":"Invalid command, missing requestId or reviewed seating revision, or malformed geometry."},"401":{"description":"Expired or revoked authentication."},"403":{"description":"Missing required scopes or invalid browser Origin."},"404":{"description":"Wedding, plan, cursor or linked record belongs to another business or is unavailable."},"409":{"description":"Layout/seating revision changed or save requestId was reused with different content."}}}},"/budget-plans":{"get":{"security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string"}},{"name":"weddingId","in":"query","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Private planned budget; all money fields are integer USD cents."},"400":{"description":"Unsupported amounts, unmapped categories or missing review."},"401":{"description":"Named operator required."},"404":{"description":"Project foreign or unavailable."},"409":{"description":"The reviewed target or an explicitly expected category value changed."}},"summary":"Read the owned project planning target and fixed category amounts"},"post":{"security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Private planned budget; all money fields are integer USD cents."},"400":{"description":"Unsupported amounts, unmapped categories or missing review."},"401":{"description":"Named operator required."},"404":{"description":"Project foreign or unavailable."},"409":{"description":"The reviewed target or an explicitly expected category value changed."}},"summary":"Preview and apply reviewed category budgets without changing actual business financial records","description":"ADD_MISSING preserves populated categories; REPLACE_SELECTED changes only listed categories. Optional targetCents is separately reviewed, and null explicitly clears that planning target. Every apply needs the exact current source hash and request identity. CHANGE_CATEGORIES requires the expected previous amount (null means absent) for every edit or deletion. Shared wedding participants cannot read another business’s private budget.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","oneOf":[{"type":"object","properties":{"operation":{"type":"string","const":"PREVIEW"},"input":{"type":"object","properties":{"weddingId":{"type":"string","minLength":1,"maxLength":120},"lines":{"minItems":1,"maxItems":14,"type":"array","items":{"type":"object","properties":{"category":{"type":"string","enum":["PHOTOGRAPHER","VIDEOGRAPHER","CATERER","FLORIST","DJ","BAND","VENUE","HAIR_MAKEUP","OFFICIANT","RENTALS","STATIONERY","TRANSPORT","CAKE","OTHER"]},"amountCents":{"type":"integer","minimum":0,"maximum":2000000000}},"required":["category","amountCents"],"additionalProperties":false}},"mode":{"type":"string","enum":["ADD_MISSING","REPLACE_SELECTED"]},"targetCents":{"anyOf":[{"type":"integer","minimum":0,"maximum":2000000000},{"type":"null"}]}},"required":["weddingId","lines","mode"],"additionalProperties":false}},"required":["operation","input"]},{"type":"object","properties":{"operation":{"type":"string","const":"APPLY"},"input":{"type":"object","properties":{"weddingId":{"type":"string","minLength":1,"maxLength":120},"lines":{"minItems":1,"maxItems":14,"type":"array","items":{"type":"object","properties":{"category":{"type":"string","enum":["PHOTOGRAPHER","VIDEOGRAPHER","CATERER","FLORIST","DJ","BAND","VENUE","HAIR_MAKEUP","OFFICIANT","RENTALS","STATIONERY","TRANSPORT","CAKE","OTHER"]},"amountCents":{"type":"integer","minimum":0,"maximum":2000000000}},"required":["category","amountCents"],"additionalProperties":false}},"mode":{"type":"string","enum":["ADD_MISSING","REPLACE_SELECTED"]},"targetCents":{"anyOf":[{"type":"integer","minimum":0,"maximum":2000000000},{"type":"null"}]},"reviewedHash":{"type":"string","pattern":"^[a-f0-9]{64}$"},"confirmed":{"type":"boolean","const":true},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["weddingId","lines","mode","reviewedHash","confirmed","requestId"],"additionalProperties":false}},"required":["operation","input"]},{"type":"object","properties":{"operation":{"type":"string","const":"CHANGE_CATEGORIES"},"input":{"type":"object","properties":{"weddingId":{"type":"string","minLength":1,"maxLength":120},"changes":{"minItems":1,"maxItems":14,"type":"array","items":{"type":"object","properties":{"category":{"type":"string","enum":["PHOTOGRAPHER","VIDEOGRAPHER","CATERER","FLORIST","DJ","BAND","VENUE","HAIR_MAKEUP","OFFICIANT","RENTALS","STATIONERY","TRANSPORT","CAKE","OTHER"]},"expectedCents":{"anyOf":[{"type":"integer","minimum":0,"maximum":2000000000},{"type":"null"}]},"amountCents":{"anyOf":[{"type":"integer","minimum":0,"maximum":2000000000},{"type":"null"}]}},"required":["category","expectedCents","amountCents"],"additionalProperties":false}},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["weddingId","changes","requestId"],"additionalProperties":false}},"required":["operation","input"]}]}}}}}},"/branding":{"get":{"security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Current safe brand settings, exact preview or idempotent saved revision. Private no-store."},"400":{"description":"Invalid brand fields."},"403":{"description":"Named owner or administrator required; scoped API keys cannot impersonate an administrator."},"404":{"description":"Foreign, revoked or unauthorized workspace."},"409":{"description":"Current brand, uploaded logo or contact source changed; review again."}},"summary":"Read current business branding settings as an owner or administrator"},"post":{"security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Current safe brand settings, exact preview or idempotent saved revision. Private no-store."},"400":{"description":"Invalid brand fields."},"403":{"description":"Named owner or administrator required; scoped API keys cannot impersonate an administrator."},"404":{"description":"Foreign, revoked or unauthorized workspace."},"409":{"description":"Current brand, uploaded logo or contact source changed; review again."}},"summary":"Preview and approve a business brand revision without changing billing","description":"Plain-text settings and validated secure logo/contact data. Previously approved emails retain their exact frozen brand. Signed documents and payment records are unchanged.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","oneOf":[{"type":"object","properties":{"operation":{"type":"string","const":"preview"},"data":{"type":"object","properties":{"options":{"type":"object","properties":{"version":{"type":"number","const":1},"enabled":{"type":"boolean"},"emailEnabled":{"type":"boolean"},"showLogo":{"type":"boolean"},"showContact":{"type":"boolean"},"hidePlatformAttribution":{"type":"boolean"},"businessName":{"type":"string","minLength":1,"maxLength":160},"tagline":{"type":"string","maxLength":240},"accent":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"},"emailFooter":{"type":"string","maxLength":1200}},"required":["version","enabled","emailEnabled","showLogo","showContact","hidePlatformAttribution","businessName","tagline","accent","emailFooter"],"additionalProperties":false},"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["options","expectedRevision"],"additionalProperties":false}},"required":["operation","data"],"additionalProperties":false},{"type":"object","properties":{"operation":{"type":"string","const":"save"},"data":{"type":"object","properties":{"options":{"type":"object","properties":{"version":{"type":"number","const":1},"enabled":{"type":"boolean"},"emailEnabled":{"type":"boolean"},"showLogo":{"type":"boolean"},"showContact":{"type":"boolean"},"hidePlatformAttribution":{"type":"boolean"},"businessName":{"type":"string","minLength":1,"maxLength":160},"tagline":{"type":"string","maxLength":240},"accent":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"},"emailFooter":{"type":"string","maxLength":1200}},"required":["version","enabled","emailEnabled","showLogo","showContact","hidePlatformAttribution","businessName","tagline","accent","emailFooter"],"additionalProperties":false},"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"reviewedHash":{"type":"string","pattern":"^[a-f0-9]{64}$"},"approved":{"type":"boolean","const":true}},"required":["options","expectedRevision","requestId","reviewedHash","approved"],"additionalProperties":false}},"required":["operation","data"],"additionalProperties":false}]}}}}}},"/vendor-portals":{"get":{"summary":"Read authorized wedding portal invitations, presets, selected private documents, contribution reviews and entrance configuration","security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string"}},{"name":"weddingId","in":"query","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Private workbench projection; no invitation tokens, code hashes or sessions."},"404":{"description":"Unavailable workspace or wedding."}}},"post":{"summary":"Manage scoped invitations, rotate/revoke access, version permission presets, review private file contributions or configure a branded login launcher","security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["action","value"],"properties":{"action":{"enum":["grant","control","template","entry","review","contribution-settings","contribution-review"]},"value":{"type":"object","description":"grant: weddingId, optional id, expectedRevision, requestId UUID, label, role, expiresInDays, taskIds/timelineItemIds/documentIds, viewFullTimeline and canUpdateTimeline/canCompleteTasks/canReadMessages/canPostMessages/canUploadFiles booleans, optional accessCode or removeCode. control: weddingId/id/expectedRevision/requestId/action REVOKE or ROTATE. template: optional id, name, expectedRevision, requestId, permissions, archived. entry: expectedRevision, enabled, origins exact HTTPS allowlist. review: weddingId/id/expectedRevision/status ACCEPTED, REJECTED or REMOVED. contribution-settings: weddingId/grantId/expectedRevision/requestId, allowLinks and up to10 published formVersionIds. contribution-review: weddingId/grantId/id/expectedRevision/requestId, status ACCEPTED/NEEDS_CHANGES/REJECTED and feedback note."}}}}}},"responses":{"200":{"description":"Saved result. A new/rotated invitation token appears only on its first committed response; retry receipts never retain secrets."},"400":{"description":"Invalid permissions, document scope, expiration or origin."},"404":{"description":"Foreign or revoked authority."},"409":{"description":"Revision or idempotency conflict."}}}},"/audit":{"get":{"summary":"Read permitted business audit metadata as a named owner or administrator","description":"Sources are business events, CRM history and signature lifecycle. Never returns raw event payloads or identity-private note, assistant, account, personal purchase or face-search activity. Missing actors remain explicitly unrecorded. This is not a backup or complete historical audit guarantee.","security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string"}},{"name":"source","in":"query","schema":{"type":"string","enum":["EVENTS","CRM","SIGNATURES"],"default":"EVENTS"}},{"name":"kind","in":"query","schema":{"type":"string","maxLength":100},"description":"Case-insensitive event name substring."},{"name":"recordId","in":"query","schema":{"type":"string","maxLength":160}},{"name":"from","in":"query","schema":{"type":"string","format":"date"},"description":"Inclusive UTC date."},{"name":"through","in":"query","schema":{"type":"string","format":"date"},"description":"Inclusive UTC date."},{"name":"after","in":"query","schema":{"type":"string"},"description":"Opaque cursor bound to this source and filters."},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":40}}],"responses":{"200":{"description":"Private retained metadata and optional nextCursor. Current authorization; Cache-Control private, no-store."},"400":{"description":"Invalid filters or mismatched cursor."},"401":{"description":"Current account session required."},"403":{"description":"Named account authority required."},"404":{"description":"Unavailable account, workspace or authority."}}}},"/account/activity":{"get":{"summary":"Read only the authenticated account’s verified session events","description":"No account selector or workspace-owner override. Only signature-verified provider events retained after capture activation; no historical sign-in, location or device inference. Session references are one-way hashes. No session-revocation mutation.","security":[{"bearerAuth":[]}],"parameters":[{"name":"kind","in":"query","schema":{"type":"string","enum":["session.created","session.ended","session.removed","session.revoked"]}},{"name":"after","in":"query","schema":{"type":"string"},"description":"Opaque cursor bound to this source and filters."},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":40}}],"responses":{"200":{"description":"Private retained metadata and optional nextCursor. Current authorization; Cache-Control private, no-store."},"400":{"description":"Invalid filters or mismatched cursor."},"401":{"description":"Current account session required."},"403":{"description":"Named account authority required."},"404":{"description":"Unavailable account, workspace or authority."}}}},"/file-library":{"get":{"security":[{"bearerAuth":[]}],"x-authentication":"named-private-workspace-operator","description":"Requires a named account session, X-Workspace-Id and current full business workspace access. Shared wedding participation and unattributed integration keys do not grant access. Results are private/no-store.","responses":{"200":{"description":"Authorized result or exact idempotent replay."},"400":{"description":"Invalid fields, stale revision or changed reviewed source."},"401":{"description":"Sign in with a named account."},"404":{"description":"Unknown, foreign, archived or unavailable source."},"413":{"description":"Body exceeds the documented limit."}},"summary":"List reusable originals or private folders, inspect version history, or authorize an exact version download","parameters":[{"name":"q","in":"query","schema":{"default":"","type":"string","maxLength":120}},{"name":"folderId","in":"query","schema":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"}},{"name":"unfiled","in":"query","schema":{"default":false,"type":"boolean"}},{"name":"archived","in":"query","schema":{"default":false,"type":"boolean"}},{"name":"page","in":"query","schema":{"default":1,"type":"integer","minimum":1,"maximum":10000}},{"name":"folders","in":"query","schema":{"type":"boolean"},"description":"true lists private folder hierarchy, including recoverable archives."},{"name":"id","in":"query","schema":{"type":"string"},"description":"Reusable document ID; returns its history."},{"name":"version","in":"query","schema":{"type":"string"},"description":"Exact retained version selected in a history response."},{"name":"download","in":"query","schema":{"type":"string"},"description":"Exact reusable version ID; returns a private URL valid for 60 seconds."}]},"post":{"security":[{"bearerAuth":[]}],"x-authentication":"named-private-workspace-operator","description":"Requires a named account session, X-Workspace-Id and current full business workspace access. Shared wedding participation and unattributed integration keys do not grant access. Results are private/no-store.","responses":{"200":{"description":"Authorized result or exact idempotent replay."},"400":{"description":"Invalid fields, stale revision or changed reviewed source."},"401":{"description":"Sign in with a named account."},"404":{"description":"Unknown, foreign, archived or unavailable source."},"413":{"description":"Body exceeds the documented limit."}},"summary":"Manage folders, review and capture reusable originals, restore/archive/recover, and make reviewed independent project copies","requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","oneOf":[{"type":"object","properties":{"operation":{"type":"string","const":"FOLDER"},"input":{"oneOf":[{"type":"object","properties":{"operation":{"type":"string","const":"SAVE"},"id":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},"expectedRevision":{"type":"integer","minimum":0,"maximum":2000000000},"name":{"type":"string","minLength":1,"maxLength":100},"parentId":{"anyOf":[{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},{"type":"null"}]},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["operation","expectedRevision","name","parentId","requestId"],"additionalProperties":false},{"type":"object","properties":{"operation":{"type":"string","enum":["ARCHIVE","RECOVER"]},"id":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},"expectedRevision":{"type":"integer","minimum":0,"maximum":2000000000},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["operation","id","expectedRevision","requestId"],"additionalProperties":false},{"type":"object","properties":{"operation":{"type":"string","const":"MOVE_FILE"},"kind":{"type":"string","enum":["PROJECT","REUSABLE"]},"id":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},"expectedRevision":{"type":"integer","minimum":0,"maximum":2000000000},"folderId":{"anyOf":[{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},{"type":"null"}]},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["operation","kind","id","expectedRevision","folderId","requestId"],"additionalProperties":false}]}},"required":["operation","input"],"additionalProperties":false},{"type":"object","properties":{"operation":{"type":"string","const":"CAPTURE_PREVIEW"},"input":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},"expectedRevision":{"type":"integer","minimum":0,"maximum":2000000000},"label":{"type":"string","minLength":1,"maxLength":120},"description":{"default":"","type":"string","maxLength":2000},"folderId":{"anyOf":[{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},{"type":"null"}]},"sourceDocumentId":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},"sourceRevision":{"type":"integer","exclusiveMinimum":0,"maximum":2000000000}},"required":["expectedRevision","label","sourceDocumentId","sourceRevision"],"additionalProperties":false}},"required":["operation","input"],"additionalProperties":false},{"type":"object","properties":{"operation":{"type":"string","const":"CAPTURE"},"input":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},"expectedRevision":{"type":"integer","minimum":0,"maximum":2000000000},"label":{"type":"string","minLength":1,"maxLength":120},"description":{"default":"","type":"string","maxLength":2000},"folderId":{"anyOf":[{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},{"type":"null"}]},"sourceDocumentId":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},"sourceRevision":{"type":"integer","exclusiveMinimum":0,"maximum":2000000000},"reviewedHash":{"type":"string","pattern":"^[a-f0-9]{64}$"},"reuseConfirmed":{"type":"boolean","const":true},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["expectedRevision","label","sourceDocumentId","sourceRevision","reviewedHash","reuseConfirmed","requestId"],"additionalProperties":false}},"required":["operation","input"],"additionalProperties":false},{"type":"object","properties":{"operation":{"type":"string","const":"CONTROL"},"input":{"oneOf":[{"type":"object","properties":{"operation":{"type":"string","const":"METADATA"},"id":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},"expectedRevision":{"type":"integer","minimum":0,"maximum":2000000000},"label":{"type":"string","minLength":1,"maxLength":120},"description":{"default":"","type":"string","maxLength":2000},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["operation","id","expectedRevision","label","requestId"],"additionalProperties":false},{"type":"object","properties":{"operation":{"type":"string","enum":["ARCHIVE","RECOVER"]},"id":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},"expectedRevision":{"type":"integer","minimum":0,"maximum":2000000000},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["operation","id","expectedRevision","requestId"],"additionalProperties":false},{"type":"object","properties":{"operation":{"type":"string","const":"RESTORE"},"id":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},"expectedRevision":{"type":"integer","minimum":0,"maximum":2000000000},"versionId":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["operation","id","expectedRevision","versionId","requestId"],"additionalProperties":false}]}},"required":["operation","input"],"additionalProperties":false},{"type":"object","properties":{"operation":{"type":"string","const":"COPY_PREVIEW"},"input":{"type":"object","properties":{"versionId":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},"weddingId":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},"label":{"type":"string","minLength":1,"maxLength":120},"folderId":{"default":null,"anyOf":[{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},{"type":"null"}]}},"required":["versionId","weddingId","label"],"additionalProperties":false}},"required":["operation","input"],"additionalProperties":false},{"type":"object","properties":{"operation":{"type":"string","const":"COPY"},"input":{"type":"object","properties":{"versionId":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},"weddingId":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},"label":{"type":"string","minLength":1,"maxLength":120},"folderId":{"default":null,"anyOf":[{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},{"type":"null"}]},"reviewedHash":{"type":"string","pattern":"^[a-f0-9]{64}$"},"confirmed":{"type":"boolean","const":true},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["versionId","weddingId","label","reviewedHash","confirmed","requestId"],"additionalProperties":false}},"required":["operation","input"],"additionalProperties":false}]}}}}}},"/file-library/uploads":{"post":{"security":[{"bearerAuth":[]}],"x-authentication":"named-private-workspace-operator","description":"Requires a named account session, X-Workspace-Id and current full business workspace access. Shared wedding participation and unattributed integration keys do not grant access. Results are private/no-store.","responses":{"200":{"description":"Authorized result or exact idempotent replay."},"400":{"description":"Invalid fields, stale revision or changed reviewed source."},"401":{"description":"Sign in with a named account."},"404":{"description":"Unknown, foreign, archived or unavailable source."},"413":{"description":"Body exceeds the documented limit."}},"summary":"Upload or replace a reusable original after explicit reuse confirmation","parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"label","in":"query","required":true,"schema":{"type":"string"}},{"name":"filename","in":"query","required":true,"schema":{"type":"string"}},{"name":"contentType","in":"query","required":true,"schema":{"type":"string"}},{"name":"id","in":"query","schema":{"type":"string"}},{"name":"description","in":"query","schema":{"type":"string"}},{"name":"folderId","in":"query","schema":{"type":"string"}},{"name":"expectedRevision","in":"query","required":true,"schema":{"type":"integer","minimum":0},"description":"Zero for new originals; current content revision for replacement."},{"name":"reuseConfirmed","in":"query","required":true,"schema":{"type":"boolean","const":true}}],"requestBody":{"required":true,"content":{"application/octet-stream":{"schema":{"type":"string","format":"binary","description":"Supported planning document or image original, 1 byte to 9MiB; server computes and verifies SHA-256."}}}}}},"/galleries/{id}/curation":{"post":{"summary":"Curate a reviewed collection selection atomically","description":"Requires assets:write or a full workspace member. MOVE, VISIBILITY, TAGS, DETAILS and RETRY share the web workbench service. expectedRevision is the gallery mediaRevision; requestId must remain stable on retries. At most 250 active photographs. Folder privacy remains effective when individual visibility is changed. Originals, order history and approved production versions remain intact. RETRY only queues failed previews with available originals; media processing requires configured storage and workers.","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-Workspace-Id","in":"header","description":"Required for account bearer sessions; scoped API keys select their bound workspace.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","oneOf":[{"type":"object","properties":{"galleryId":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"mediaIds":{"minItems":1,"maxItems":250,"type":"array","items":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"}},"operation":{"type":"string","const":"MOVE"},"folderId":{"anyOf":[{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},{"type":"null"}]}},"required":["galleryId","expectedRevision","requestId","mediaIds","operation","folderId"],"additionalProperties":false},{"type":"object","properties":{"galleryId":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"mediaIds":{"minItems":1,"maxItems":250,"type":"array","items":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"}},"operation":{"type":"string","const":"VISIBILITY"},"hidden":{"type":"boolean"}},"required":["galleryId","expectedRevision","requestId","mediaIds","operation","hidden"],"additionalProperties":false},{"type":"object","properties":{"galleryId":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"mediaIds":{"minItems":1,"maxItems":250,"type":"array","items":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"}},"operation":{"type":"string","const":"TAGS"},"mode":{"type":"string","enum":["ADD","REMOVE"]},"tags":{"minItems":1,"maxItems":50,"type":"array","items":{"type":"string","minLength":1,"maxLength":100}}},"required":["galleryId","expectedRevision","requestId","mediaIds","operation","mode","tags"],"additionalProperties":false},{"type":"object","properties":{"galleryId":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"mediaIds":{"type":"array","prefixItems":[{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"}]},"operation":{"type":"string","const":"DETAILS"},"caption":{"type":"string","maxLength":1000},"personTags":{"maxItems":50,"type":"array","items":{"type":"string","minLength":1,"maxLength":100}},"folderId":{"anyOf":[{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},{"type":"null"}]},"hidden":{"type":"boolean"},"sortOrder":{"type":"integer","minimum":0,"maximum":1000000}},"required":["galleryId","expectedRevision","requestId","mediaIds","operation","caption","personTags","folderId","hidden","sortOrder"],"additionalProperties":false},{"type":"object","properties":{"galleryId":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"mediaIds":{"minItems":1,"maxItems":250,"type":"array","items":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"}},"operation":{"type":"string","const":"RETRY"}},"required":["galleryId","expectedRevision","requestId","mediaIds","operation"],"additionalProperties":false}]}}}},"responses":{"200":{"description":"Saved revision, affected file count and operation; an exact retry returns its original receipt."},"400":{"description":"Invalid batch or tag limit; no partial changes committed."},"401":{"description":"Expired or revoked credential."},"403":{"description":"Missing assets:write scope."},"404":{"description":"Unavailable workspace, gallery, chapter or photograph."},"409":{"description":"Stale media revision or reused request identity with changed input."}}}},"/galleries/{id}/album-review":{"post":{"summary":"Resolve or reopen an album review note without changing the approved design","description":"Full private workspace member or assets:write credential. The current album revision, original note revision and expected resolved state must match. Approved albums require a new draft before reopening review. Stable requestId replays return their original receipt after current access is checked. The private web studio uses this same domain service. Couple feedback submissions use the separately password-scoped public proof session and explicitly queue a studio notification.","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"galleryId":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},"albumId":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},"commentId":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},"expectedAlbumRevision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"noteRevision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"expectedResolved":{"type":"boolean"},"resolved":{"type":"boolean"},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["galleryId","albumId","commentId","expectedAlbumRevision","noteRevision","expectedResolved","resolved","requestId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Saved note resolution and album revision."},"400":{"description":"Invalid review change."},"401":{"description":"Invalid or revoked credential."},"403":{"description":"Missing assets:write scope."},"404":{"description":"Unavailable private album or note."},"409":{"description":"Album or resolution changed, approved record, or altered retry."}}}},"/galleries/{id}/production-cases/{caseId}/messages":{"get":{"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"caseId","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string"}},{"name":"after","in":"query","schema":{"type":"string"}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":50,"default":30}}],"responses":{"200":{"description":"Private case conversation or idempotent reply receipt."},"400":{"description":"Invalid input."},"404":{"description":"Unavailable private case, gallery or cursor."},"409":{"description":"Case revision changed, altered retry or resolved case requires explicit reopening."}},"summary":"Read public-facing support replies for an owned physical order","description":"assets:read or full private membership. Returns newest messages first with nextCursor; private studio notes and funding decisions are excluded."},"post":{"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"caseId","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string"}}],"responses":{"200":{"description":"Private case conversation or idempotent reply receipt."},"400":{"description":"Invalid input."},"404":{"description":"Unavailable private case, gallery or cursor."},"409":{"description":"Case revision changed, altered retry or resolved case requires explicit reopening."}},"summary":"Post an explicitly customer-visible studio reply","description":"assets:write or full private membership. Uses the same revision-checked domain service as the studio. requestId must remain stable on retry; reopen:true explicitly reopens a resolved case. A reply never cancels production, issues money, or approves another lab order.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"caseId":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},"expectedRevision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"body":{"type":"string","minLength":1,"maxLength":3000},"reopen":{"default":false,"type":"boolean"},"galleryId":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"}},"required":["caseId","expectedRevision","requestId","body","galleryId"],"additionalProperties":false}}}}}},"/projects/{id}/inventory":{"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"get":{"summary":"Read event inventory or an exact outstanding serial list","description":"Current named full-workspace member only; generic API keys and shared participants cannot read private stock. q searches the whole event by stock name, destination or assigned serial. phase selects active/prepare/packed/out/flagged/history/all; page is 1-based, 25 rows. Stock search returns 30 choices. Passing only reservationId returns that owned event reservation with up to 500 outstanding serials. Cached flagged rows include queued stock reviews; current capacity is rechecked for displayed rows and all packing writes.","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Exact filtered totals, bounded rows, phase counts, stock choices and six recent retained reviews"},"404":{"description":"Unavailable workspace, project or reservation"}}},"post":{"summary":"Review and apply event packing or return batches","description":"Same named operator authorization as GET. Preview freezes up to 20 distinct reservation commands and labels for 30 minutes under the original requestId. Apply requires its original reviewer, exact reviewedHash and confirmed:true. Every line reuses the existing inventory mutation service and durable request receipt. Partial batches preserve completed movements and report pending lines. Replaying an interrupted review cannot count returns twice; stale reservations require fresh review. No billing, wage or payment effects.","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"operation":{"const":"preview"},"data":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"weddingId":{"type":"string","minLength":1,"maxLength":200},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"reason":{"type":"string","minLength":3,"maxLength":1000},"lines":{"minItems":1,"maxItems":20,"type":"array","items":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","const":"TRANSITION"},"reservationId":{"type":"string","minLength":1,"maxLength":200},"expectedRevision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"status":{"type":"string","enum":["PACKED","OUT","RESERVED"]}},"required":["kind","reservationId","expectedRevision","status"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"RETURN"},"reservationId":{"type":"string","minLength":1,"maxLength":200},"expectedRevision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"intact":{"default":0,"type":"integer","minimum":0,"maximum":100000},"damaged":{"default":0,"type":"integer","minimum":0,"maximum":100000},"lost":{"default":0,"type":"integer","minimum":0,"maximum":100000},"unclassified":{"default":0,"type":"integer","minimum":0,"maximum":100000},"units":{"default":[],"maxItems":500,"type":"array","items":{"type":"object","properties":{"unitId":{"type":"string","minLength":1,"maxLength":200},"condition":{"type":"string","enum":["INTACT","DAMAGED","LOST","UNCLASSIFIED"]}},"required":["unitId","condition"],"additionalProperties":false}}},"required":["kind","reservationId","expectedRevision","intact","damaged","lost","unclassified","units"],"additionalProperties":false}]}}},"required":["weddingId","requestId","reason","lines"],"additionalProperties":false}}},{"type":"object","properties":{"operation":{"const":"apply"},"data":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"weddingId":{"type":"string","minLength":1,"maxLength":200},"reviewId":{"type":"string","minLength":1,"maxLength":200},"reviewedHash":{"type":"string","minLength":64,"maxLength":64},"confirmed":{"type":"boolean","const":true}},"required":["weddingId","reviewId","reviewedHash","confirmed"],"additionalProperties":false}}}]}}}},"responses":{"200":{"description":"Retained reviewed lines with per-line movement receipts and errors"},"400":{"description":"Invalid quantities, status or serials"},"404":{"description":"Current private authority required"},"409":{"description":"Changed or reused review"}}}},"/couple-planning-spaces":{"get":{"security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string"}},{"name":"sharedWeddingId","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Private reviewed planning spaces or idempotent connection result."},"404":{"description":"Current named couple-workspace authority or active shared participation is unavailable."},"409":{"description":"Changed review, reused request, existing connection or project-capacity conflict."}},"summary":"List accepted couple invitations and explicit existing planning-space choices"},"post":{"security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Private reviewed planning spaces or idempotent connection result."},"404":{"description":"Current named couple-workspace authority or active shared participation is unavailable."},"409":{"description":"Changed review, reused request, existing connection or project-capacity conflict."}},"summary":"Explicitly create or reuse a private couple plan for an accepted shared wedding","description":"Named couple workspace administrator required. Exact source review, current participation, request replay and active-project capacity enforced. Creating copies only reviewed shared event details; reuse preserves private details. Never merges by names or email and never copies another business’s notes, contacts or financial records.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","oneOf":[{"type":"object","properties":{"operation":{"type":"string","const":"create"},"sharedWeddingId":{"type":"string","minLength":1,"maxLength":100},"reviewedHash":{"type":"string","minLength":64,"maxLength":64},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"confirmed":{"type":"boolean","const":true},"partnerOneName":{"type":"string","minLength":1,"maxLength":150},"partnerTwoName":{"default":"","type":"string","maxLength":150}},"required":["operation","sharedWeddingId","reviewedHash","requestId","confirmed","partnerOneName"],"additionalProperties":false},{"type":"object","properties":{"operation":{"type":"string","const":"reuse"},"sharedWeddingId":{"type":"string","minLength":1,"maxLength":100},"reviewedHash":{"type":"string","minLength":64,"maxLength":64},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"confirmed":{"type":"boolean","const":true},"weddingId":{"type":"string","minLength":1,"maxLength":100},"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["operation","sharedWeddingId","reviewedHash","requestId","confirmed","weddingId","expectedRevision"],"additionalProperties":false}]}}}}}},"/project-communication":{"get":{"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Authorized private result or exact original idempotent replay."},"400":{"description":"Invalid input."},"403":{"description":"A named workspace account session is required."},"404":{"description":"Private project, contact or booking is unavailable."},"409":{"description":"The source changed or original delivery needs reconciliation."}},"summary":"Search active private projects and their explicit client or partner recipients","description":"Named full workspace member and X-Workspace-Id. No email matching or shared-wedding lookup. Cursor pagination defaults to 30, maximum 50.","parameters":[{"name":"search","in":"query","schema":{"type":"string"}},{"name":"after","in":"query","schema":{"type":"string"}},{"name":"weddingId","in":"query","schema":{"type":"string"}}]},"post":{"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Authorized private result or exact original idempotent replay."},"400":{"description":"Invalid input."},"403":{"description":"A named workspace account session is required."},"404":{"description":"Private project, contact or booking is unavailable."},"409":{"description":"The source changed or original delivery needs reconciliation."}},"summary":"Use an explicitly reviewed project recipient for a one-off questionnaire or booking","description":"Creates or refreshes one stable PROJECT_CONTACT for this exact project and optional CRM partner; no inquiry merge, workflow enrollment, sharing, signature or financial change. Same idempotency request returns the original contact.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"weddingId":{"type":"string","minLength":1,"maxLength":200},"contactId":{"default":null,"anyOf":[{"type":"string","minLength":1,"maxLength":200},{"type":"null"}]},"requestId":{"type":"string","minLength":8,"maxLength":200},"reviewedHash":{"type":"string","pattern":"^[a-f0-9]{64}$"},"approved":{"type":"boolean","const":true}},"required":["weddingId","requestId","reviewedHash","approved"],"additionalProperties":false}}}}}},"/project-communication/preview":{"post":{"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Authorized private result or exact original idempotent replay."},"400":{"description":"Invalid input."},"403":{"description":"A named workspace account session is required."},"404":{"description":"Private project, contact or booking is unavailable."},"409":{"description":"The source changed or original delivery needs reconciliation."}},"summary":"Review the authoritative private project contact before selection","requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"weddingId":{"type":"string","minLength":1,"maxLength":200},"contactId":{"default":null,"anyOf":[{"type":"string","minLength":1,"maxLength":200},{"type":"null"}]}},"required":["weddingId"],"additionalProperties":false}}}}}},"/booking-journeys/{id}/deliveries":{"get":{"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Authorized private result or exact original idempotent replay."},"400":{"description":"Invalid input."},"403":{"description":"A named workspace account session is required."},"404":{"description":"Private project, contact or booking is unavailable."},"409":{"description":"The source changed or original delivery needs reconciliation."}},"summary":"Read booking invitation email receipts with provider status","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"after","in":"query","schema":{"type":"string"}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":50}}],"description":"Returns safe receipt metadata, never the invitation secret. Queued, sent, delivered, failed, cancelled and uncertain remain distinct."},"post":{"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Authorized private result or exact original idempotent replay."},"400":{"description":"Invalid input."},"403":{"description":"A named workspace account session is required."},"404":{"description":"Private project, contact or booking is unavailable."},"409":{"description":"The source changed or original delivery needs reconciliation."}},"summary":"Approve the exact reviewed booking invitation email","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"token":{"type":"string","pattern":"^[a-f0-9]{64}$"},"subject":{"type":"string","minLength":1,"maxLength":200,"pattern":"^[^\\r\\n]+$"},"body":{"type":"string","minLength":1,"maxLength":12000},"requestId":{"type":"string","minLength":8,"maxLength":200},"reviewedHash":{"type":"string","pattern":"^[a-f0-9]{64}$"},"approved":{"type":"boolean","const":true}},"required":["token","subject","body","requestId","reviewedHash","approved"],"additionalProperties":false}}}},"description":"Named full operator. One durable delivery per access generation; changed source or message requires fresh review. Uncertain previous attempts must be reconciled before replacement. Revocation, expiry, recipient changes, origin changes and workflow holds are checked again before dispatch. Queues through the existing studio outbox; no provider setup is implied."}},"/booking-journeys/{id}/deliveries/preview":{"post":{"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Authorized private result or exact original idempotent replay."},"400":{"description":"Invalid input."},"403":{"description":"A named workspace account session is required."},"404":{"description":"Private project, contact or booking is unavailable."},"409":{"description":"The source changed or original delivery needs reconciliation."}},"summary":"Review exact recipient, current application URL and invitation email","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"token":{"type":"string","pattern":"^[a-f0-9]{64}$"},"subject":{"type":"string","minLength":1,"maxLength":200,"pattern":"^[^\\r\\n]+$"},"body":{"type":"string","minLength":1,"maxLength":12000}},"required":["token","subject","body"],"additionalProperties":false}}}},"description":"Possession of a private link alone grants no operator access. Requires the named workspace session and current active project, contact and invitation. Response is private and must not be cached."}},"/galleries/{id}/collection":{"post":{"summary":"Browse a bounded private gallery collection","description":"Read-only query shared by studio web browsing. Requires assets:read/current full workspace access. PAGE returns at most 100 scalar photo records, totals and a keyset cursor bound to scope, filters, gallery/media revision and deterministic order. IDS returns only permitted ids up to selectionLimit (maximum 5000), with an explicit capped flag. LOOKUP resolves at most 250 selected ids without discarding unavailableIds. DETAIL loads one current original's capture/version family in pages of 100 (beforeVersion for earlier versions). SLIDE navigates the complete filtered PHOTO collection forward/back with wrap. CURATED, UPLOAD, CAPTURE and alphabetical FILENAME ordering use id tie-breakers; capture nulls sort last. Browsing never returns storage keys, original bytes or signed downloads. Existing download/purchase services independently enforce PIN, payment, file variants and current source access. Public gallery/delivery browser requests use path-local handlers because their password sessions are path-scoped. Existing native management pagination is unchanged.","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"operation":{"default":"PAGE","type":"string","enum":["PAGE","IDS","DETAIL","LOOKUP","SLIDE"]},"query":{"default":"","type":"string","maxLength":150},"folder":{"default":"ALL","type":"string","maxLength":100},"visibility":{"default":"ALL","type":"string","enum":["ALL","VISIBLE","PRIVATE"]},"state":{"default":"ALL","type":"string","enum":["ALL","READY","PENDING","PROCESSING","FAILED"]},"kind":{"default":"ALL","type":"string","enum":["ALL","PHOTO","VIDEO"]},"sort":{"default":"CURATED","type":"string","enum":["CURATED","FILENAME","CAPTURE","UPLOAD"]},"ids":{"maxItems":5000,"type":"array","items":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"}},"mediaId":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},"beforeVersion":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"direction":{"default":"NEXT","type":"string","enum":["NEXT","PREVIOUS"]},"limit":{"default":48,"type":"integer","minimum":1,"maximum":100},"selectionLimit":{"default":250,"type":"integer","minimum":1,"maximum":5000},"cursor":{"anyOf":[{"type":"string","maxLength":3000},{"type":"null"}]},"expectedRevision":{"type":"object","properties":{"gallery":{"type":"integer","minimum":0,"maximum":9007199254740991},"media":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["gallery","media"],"additionalProperties":false}},"additionalProperties":false}}}},"responses":{"200":{"description":"items, total, nextCursor, revision, ids/capped, unavailableIds, and scoped detail comments/versions."},"400":{"description":"Invalid query or selection limit."},"401":{"description":"Revoked/expired credential."},"403":{"description":"Missing assets:read scope."},"404":{"description":"Unavailable workspace, gallery or photograph."},"409":{"description":"Scope, collection revision, filter or cursor changed. Refresh; retain selected ids for explicit review."}}}},"/gallery-orders/{token}/checkout-recovery":{"post":{"summary":"Check and resume the original private gallery checkout","description":"The 64-hex private receipt token authorizes this operation; no workspace id or Clerk session is required. Retrieves or recovers only the original connected-account session, verifies the frozen order, and reconciles completed/expired receipts idempotently. Never creates a session, order, charge or refund. A verified open session can return checkoutUrl. Confirmed expiry returns a current storefront review destination when invitation access remains available. Album-only receipts never expose the full gallery; legacy or rotated proof invitations require the original/current invitation. Provider outages leave the prior order intact. Current tax quote and prepaid funding must remain valid before resuming included-package payments.","security":[],"parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","pattern":"^[a-f0-9]{64}$"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"expectedSnapshotHash":{"type":"string","pattern":"^[a-f0-9]{64}$"}},"required":["expectedSnapshotHash"],"additionalProperties":false}}}},"responses":{"200":{"description":"Current state, optional verified original checkoutUrl and eligible fresh-review destination. A completed payment returns no checkout URL."},"400":{"description":"The original checkout could not be confirmed or cannot safely resume. No new charge was opened."},"404":{"description":"Invalid or rotated receipt token."},"409":{"description":"Snapshot or provider session identity changed; refresh the original receipt."},"500":{"description":"Provider unavailable or awaiting activation; no new checkout was created."}}}},"/studio-home":{"get":{"summary":"Read a private, audience-aware studio home","description":"analytics:read. Bounded previews (4 projects, 4 appointments, 6 tasks, 4 galleries) with exact separate counts; date-only deadlines use the workspace timezone. No shared participant access.","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Private studio summary, asOf and timezone"},"401":{"description":"Sign in required"},"403":{"description":"Scope required"},"404":{"description":"Workspace unavailable"}}}},"/gallery-releases":{"get":{"security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string"}},{"name":"galleryId","in":"query","required":true,"schema":{"type":"string","minLength":1,"maxLength":100}}],"responses":{"200":{"description":"Current named full workspace operator only. Private no-store result; normal reads exclude encrypted tokens and sender credentials."},"400":{"description":"Invalid release, private original, expired invitation or unsafe retry."},"404":{"description":"Foreign gallery or unavailable authority."},"409":{"description":"Stale review, changed exact manifest or changed idempotent request."}},"summary":"Read gallery delivery milestones, latest 50 immutable manifests and recipient receipts"},"post":{"security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Current named full workspace operator only. Private no-store result; normal reads exclude encrypted tokens and sender credentials."},"400":{"description":"Invalid release, private original, expired invitation or unsafe retry."},"404":{"description":"Foreign gallery or unavailable authority."},"409":{"description":"Stale review, changed exact manifest or changed idempotent request."}},"summary":"Review and approve a frozen sneak peek/full delivery, withdraw invitations, control original notices or retrieve a current private recipient link","description":"Preview returns reviewHash and exact recipient messages without sending. Commit requires the same input plus approved:true, reviewHash and requestId UUID. Scheduled email uses only recipient-scoped links. Active source/grant/authority/suppression checks apply at send and access; original provider retries stop at 23 hours. Notice cancellation leaves link access; release withdrawal revokes every grant from that release. Existing whole-gallery links are independent.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","oneOf":[{"type":"object","properties":{"action":{"type":"string","const":"preview"},"value":{"type":"object","properties":{"galleryId":{"type":"string","minLength":1,"maxLength":100},"expectedGalleryRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"expectedStageRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"stage":{"type":"string","enum":["SNEAK_PEEK","DELIVERED"]},"title":{"type":"string","minLength":2,"maxLength":120},"mediaIds":{"maxItems":20000,"type":"array","items":{"type":"string","minLength":1,"maxLength":100}},"publishGallery":{"type":"boolean"},"expiresAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"scheduledAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"subject":{"type":"string","minLength":2,"maxLength":160},"message":{"type":"string","minLength":1,"maxLength":4000},"recipients":{"minItems":1,"maxItems":25,"type":"array","items":{"type":"object","properties":{"key":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"type":"string","minLength":1,"maxLength":120},"role":{"type":"string","enum":["COUPLE","VENDOR","GUEST"]},"email":{"anyOf":[{"type":"string","maxLength":254,"format":"email","pattern":"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"},{"type":"null"}]},"sendEmail":{"type":"boolean"},"scope":{"type":"string","enum":["RELEASE","SELECTED"]},"mediaIds":{"maxItems":2000,"type":"array","items":{"type":"string","minLength":1,"maxLength":100}},"downloadPolicy":{"type":"string","enum":["NONE","WEB","ORIGINAL"]},"usageTerms":{"type":"string","maxLength":3000},"password":{"type":"string","maxLength":80}},"required":["key","name","role","email","sendEmail","scope","mediaIds","downloadPolicy","usageTerms","password"],"additionalProperties":false}}},"required":["galleryId","expectedGalleryRevision","expectedStageRevision","stage","title","mediaIds","publishGallery","expiresAt","scheduledAt","subject","message","recipients"],"additionalProperties":false}},"required":["action","value"]},{"type":"object","properties":{"action":{"type":"string","const":"commit"},"value":{"type":"object","properties":{"galleryId":{"type":"string","minLength":1,"maxLength":100},"expectedGalleryRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"expectedStageRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"stage":{"type":"string","enum":["SNEAK_PEEK","DELIVERED"]},"title":{"type":"string","minLength":2,"maxLength":120},"mediaIds":{"maxItems":20000,"type":"array","items":{"type":"string","minLength":1,"maxLength":100}},"publishGallery":{"type":"boolean"},"expiresAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"scheduledAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"subject":{"type":"string","minLength":2,"maxLength":160},"message":{"type":"string","minLength":1,"maxLength":4000},"recipients":{"minItems":1,"maxItems":25,"type":"array","items":{"type":"object","properties":{"key":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"type":"string","minLength":1,"maxLength":120},"role":{"type":"string","enum":["COUPLE","VENDOR","GUEST"]},"email":{"anyOf":[{"type":"string","maxLength":254,"format":"email","pattern":"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"},{"type":"null"}]},"sendEmail":{"type":"boolean"},"scope":{"type":"string","enum":["RELEASE","SELECTED"]},"mediaIds":{"maxItems":2000,"type":"array","items":{"type":"string","minLength":1,"maxLength":100}},"downloadPolicy":{"type":"string","enum":["NONE","WEB","ORIGINAL"]},"usageTerms":{"type":"string","maxLength":3000},"password":{"type":"string","maxLength":80}},"required":["key","name","role","email","sendEmail","scope","mediaIds","downloadPolicy","usageTerms","password"],"additionalProperties":false}},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"reviewHash":{"type":"string","minLength":64,"maxLength":64},"approved":{"type":"boolean","const":true}},"required":["galleryId","expectedGalleryRevision","expectedStageRevision","stage","title","mediaIds","publishGallery","expiresAt","scheduledAt","subject","message","recipients","requestId","reviewHash","approved"],"additionalProperties":false}},"required":["action","value"]},{"type":"object","properties":{"action":{"type":"string","const":"withdraw"},"value":{"type":"object","properties":{"galleryId":{"type":"string","minLength":1,"maxLength":100},"releaseId":{"type":"string","minLength":1,"maxLength":100},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"expectedStageRevision":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["galleryId","releaseId","requestId","expectedStageRevision"]}},"required":["action","value"]},{"type":"object","properties":{"action":{"type":"string","const":"notice"},"value":{"type":"object","properties":{"galleryId":{"type":"string","minLength":1,"maxLength":100},"noticeId":{"type":"string","minLength":1,"maxLength":100},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"action":{"type":"string","enum":["CANCEL","RETRY"]}},"required":["galleryId","noticeId","requestId","action"]}},"required":["action","value"]},{"type":"object","properties":{"action":{"type":"string","const":"link"},"value":{"type":"object","properties":{"galleryId":{"type":"string","minLength":1,"maxLength":100},"noticeId":{"type":"string","minLength":1,"maxLength":100}},"required":["galleryId","noticeId"],"additionalProperties":false}},"required":["action","value"]}]}}}}}},"/event-programs":{"get":{"security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string"}},{"name":"weddingId","in":"query","required":true,"schema":{"type":"string","minLength":1,"maxLength":100}},{"name":"eventId","in":"query","required":true,"schema":{"type":"string","minLength":1,"maxLength":100}}],"responses":{"200":{"description":"Authorized private event program with revision, saved draft, published guest projection and retained history."},"400":{"description":"Invalid definition or local time."},"404":{"description":"Unavailable record or current workspace authority."},"409":{"description":"Changed event, program, review hash or request identity."}},"summary":"Read a private event program and exact publication preview"},"post":{"security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Authorized private event program with revision, saved draft, published guest projection and retained history."},"400":{"description":"Invalid definition or local time."},"404":{"description":"Unavailable record or current workspace authority."},"409":{"description":"Changed event, program, review hash or request identity."}},"summary":"Save a quiet draft, publish to currently invited guests, hide or restore a program","requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"weddingId":{"type":"string","minLength":1,"maxLength":100},"eventId":{"type":"string","minLength":1,"maxLength":100},"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"expectedEventRevision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"operation":{"type":"string","enum":["SAVE","PUBLISH","UNPUBLISH","RESTORE"]},"definition":{"type":"object","properties":{"timezone":{"type":"string"},"welcome":{"type":"string","maxLength":2000},"hosts":{"maxItems":30,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":100},"name":{"type":"string","minLength":1,"maxLength":120},"role":{"type":"string","maxLength":100}},"required":["id","name","role"],"additionalProperties":false}},"moments":{"maxItems":200,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":100},"date":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"time":{"type":"string","pattern":"^([01]\\d|2[0-3]):[0-5]\\d$"},"durationMin":{"type":"integer","minimum":0,"maximum":1440},"title":{"type":"string","minLength":1,"maxLength":160},"location":{"type":"string","maxLength":300},"notes":{"type":"string","maxLength":1000},"hostId":{"anyOf":[{"type":"string","minLength":1,"maxLength":100},{"type":"null"}]}},"required":["id","date","time","durationMin","title","location","notes","hostId"],"additionalProperties":false}},"privateNotes":{"type":"string","maxLength":4000}},"required":["timezone","welcome","hosts","moments","privateNotes"],"additionalProperties":false},"restoreRevision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"reviewedHash":{"type":"string","pattern":"^[a-f0-9]{64}$"},"confirmed":{"type":"boolean","const":true}},"required":["weddingId","eventId","expectedRevision","expectedEventRevision","requestId","operation"],"additionalProperties":false}}}}}},"/consultation-reminders":{"get":{"security":[{"bearerAuth":[]}],"summary":"Read private new-booking reminder policy and optional appointment plan/history","description":"Named account session, X-Workspace-Id and full private scheduling access are required. Existing appointments are not silently enrolled.","parameters":[{"name":"bookingId","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Authorized result or exact original idempotent replay."},"400":{"description":"Invalid input, stale revision/source, or unavailable operation."},"404":{"description":"Unavailable appointment."},"429":{"description":"Wait before retrying."}}},"post":{"security":[{"bearerAuth":[]}],"summary":"Save defaults for future bookings or explicitly approve a current appointment reminder plan","description":"Named full private business operator. Per-booking changes bind current source hash and revision. A client pause cannot be overridden by an operator.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","oneOf":[{"type":"object","properties":{"kind":{"type":"string","const":"POLICY"},"input":{"type":"object","properties":{"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"enabled":{"type":"boolean"},"offsetsMinutes":{"maxItems":3,"type":"array","items":{"type":"integer","minimum":15,"maximum":10080}},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["expectedRevision","enabled","offsetsMinutes","requestId"],"additionalProperties":false}},"required":["kind","input"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"BOOKING"},"input":{"type":"object","properties":{"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"enabled":{"type":"boolean"},"offsetsMinutes":{"maxItems":3,"type":"array","items":{"type":"integer","minimum":15,"maximum":10080}},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"bookingId":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},"expectedSourceHash":{"type":"string","pattern":"^[a-f0-9]{64}$"}},"required":["expectedRevision","enabled","offsetsMinutes","requestId","bookingId","expectedSourceHash"],"additionalProperties":false}},"required":["kind","input"],"additionalProperties":false}]}}}},"responses":{"200":{"description":"Authorized result or exact original idempotent replay."},"400":{"description":"Invalid input, stale revision/source, or unavailable operation."},"404":{"description":"Unavailable appointment."},"429":{"description":"Wait before retrying."}}}},"/public/consultations/{token}/calendar":{"get":{"security":[],"summary":"Download the exact current private appointment calendar snapshot","description":"Returns one RFC5545 entry, stable UID, UTC start/end and cancellation state. No private notes or business calendar feed. It is a snapshot, not a subscription.","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","pattern":"^[a-f0-9]{48}$"},"description":"Private consultation management capability; never a business-wide calendar token."}],"responses":{"200":{"description":"Private appointment.ics file.","headers":{"Cache-Control":{"schema":{"type":"string","const":"private, no-store"}},"X-Robots-Tag":{"schema":{"type":"string","const":"noindex, nofollow"}}},"content":{"text/calendar":{"schema":{"type":"string"}}}},"400":{"description":"Invalid input, stale revision/source, or unavailable operation."},"404":{"description":"Unavailable appointment."},"429":{"description":"Wait before retrying."}}}},"/public/consultations/{token}/reminders":{"get":{"security":[],"summary":"Read the attendee’s saved reminder preference","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","pattern":"^[a-f0-9]{48}$"},"description":"Private consultation management capability; never a business-wide calendar token."}],"responses":{"200":{"description":"Authorized result or exact original idempotent replay."},"400":{"description":"Invalid input, stale revision/source, or unavailable operation."},"404":{"description":"Unavailable appointment."},"429":{"description":"Wait before retrying."}}},"post":{"security":[],"summary":"Pause or resume future reminders using the private appointment capability","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","pattern":"^[a-f0-9]{48}$"},"description":"Private consultation management capability; never a business-wide calendar token."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"expectedRevision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"enabled":{"type":"boolean"}},"required":["expectedRevision","requestId","enabled"],"additionalProperties":false}}}},"responses":{"200":{"description":"Authorized result or exact original idempotent replay."},"400":{"description":"Invalid input, stale revision/source, or unavailable operation."},"404":{"description":"Unavailable appointment."},"429":{"description":"Wait before retrying."}}}},"/gallery-local-imports":{"get":{"security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string"}},{"name":"galleryId","in":"query","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Authorized private import preview/retained result; no original file bytes or provider credentials."},"400":{"description":"Invalid original, unsafe path or unsupported size."},"404":{"description":"Foreign gallery/folder or unauthorized private operator."},"409":{"description":"Changed duplicate review, bound original or idempotent request."}},"summary":"Read last 20 authorized local-gallery import reviews and exact retained paths"},"post":{"security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Authorized private import preview/retained result; no original file bytes or provider credentials."},"400":{"description":"Invalid original, unsafe path or unsupported size."},"404":{"description":"Foreign gallery/folder or unauthorized private operator."},"409":{"description":"Changed duplicate review, bound original or idempotent request."}},"summary":"Preview exact verified-checksum matches and path-preserving chapters, then approve an original-file import","description":"Named full private workspace operator. Up to500 files, each with original relative path, filename, bytes, media type, full8MiB multipart checksum, sampled/resume identity and UPLOAD/SKIP decision. Commit requires approved:true, reviewHash and stable requestId. Completion of existing multipart upload services rejects checksums differing from the retained review. Existing approved identities resume without duplicating uploads; fresh request identities deliberately create a separate copy.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","oneOf":[{"type":"object","properties":{"action":{"type":"string","const":"preview"},"value":{"type":"object","properties":{"galleryId":{"type":"string","minLength":1,"maxLength":100},"baseFolderId":{"anyOf":[{"type":"string","minLength":1,"maxLength":100},{"type":"null"}]},"preserveFolders":{"type":"boolean"},"files":{"minItems":1,"maxItems":500,"type":"array","items":{"type":"object","properties":{"key":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"path":{"type":"string","minLength":1,"maxLength":1000},"filename":{"type":"string","minLength":1,"maxLength":200},"bytes":{"type":"integer","exclusiveMinimum":0,"maximum":2000000000},"contentType":{"type":"string","enum":["image/jpeg","image/png","image/webp","image/tiff","image/heic","video/mp4","video/quicktime"]},"fingerprint":{"type":"string","pattern":"^[a-f0-9]{64}$"},"checksum":{"type":"string","pattern":"^[A-Za-z0-9+/]{43}=-[1-9]\\d{0,2}$"},"decision":{"type":"string","enum":["UPLOAD","SKIP"]}},"required":["key","requestId","path","filename","bytes","contentType","fingerprint","checksum","decision"],"additionalProperties":false}}},"required":["galleryId","baseFolderId","preserveFolders","files"],"additionalProperties":false}},"required":["action","value"]},{"type":"object","properties":{"action":{"type":"string","const":"commit"},"value":{"type":"object","properties":{"galleryId":{"type":"string","minLength":1,"maxLength":100},"baseFolderId":{"anyOf":[{"type":"string","minLength":1,"maxLength":100},{"type":"null"}]},"preserveFolders":{"type":"boolean"},"files":{"minItems":1,"maxItems":500,"type":"array","items":{"type":"object","properties":{"key":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"path":{"type":"string","minLength":1,"maxLength":1000},"filename":{"type":"string","minLength":1,"maxLength":200},"bytes":{"type":"integer","exclusiveMinimum":0,"maximum":2000000000},"contentType":{"type":"string","enum":["image/jpeg","image/png","image/webp","image/tiff","image/heic","video/mp4","video/quicktime"]},"fingerprint":{"type":"string","pattern":"^[a-f0-9]{64}$"},"checksum":{"type":"string","pattern":"^[A-Za-z0-9+/]{43}=-[1-9]\\d{0,2}$"},"decision":{"type":"string","enum":["UPLOAD","SKIP"]}},"required":["key","requestId","path","filename","bytes","contentType","fingerprint","checksum","decision"],"additionalProperties":false}},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"reviewHash":{"type":"string","minLength":64,"maxLength":64},"approved":{"type":"boolean","const":true}},"required":["galleryId","baseFolderId","preserveFolders","files","requestId","reviewHash","approved"],"additionalProperties":false}},"required":["action","value"]}]}}}}}},"/gallery-favorites":{"post":{"summary":"Archive or restore my own named selection, or export currently permitted filenames","description":"Requires a current private gallery viewer session, including password/verified recovery enrollment when configured. X-Gallery-Session is the opaque viewer session issued by the gallery entrance/recovery, not the public invitation token, a Clerk session or a workspace API key. The value.token in the request separately identifies its gallery. Current gallery access and viewer scope are checked again inside the operation. Restoring is limited to the same viewer and eight active lists; hidden/replaced photos are excluded. CSV includes stable media IDs and formula-safe filenames; Lightroom output retains exact filenames and reports repeated names.","parameters":[{"name":"X-Gallery-Session","in":"header","required":true,"schema":{"type":"string","pattern":"^[a-f0-9]{64}$"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","oneOf":[{"type":"object","properties":{"action":{"type":"string","const":"archive"},"value":{"type":"object","properties":{"token":{"type":"string","pattern":"^[a-f0-9]{64}$"},"id":{"type":"string","minLength":1,"maxLength":100},"expectedRevision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["token","id","expectedRevision","requestId"],"additionalProperties":false}},"required":["action","value"]},{"type":"object","properties":{"action":{"type":"string","const":"restore"},"value":{"type":"object","properties":{"token":{"type":"string","pattern":"^[a-f0-9]{64}$"},"archiveId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["token","archiveId","requestId"],"additionalProperties":false}},"required":["action","value"]},{"type":"object","properties":{"action":{"type":"string","const":"export"},"value":{"type":"object","properties":{"token":{"type":"string","pattern":"^[a-f0-9]{64}$"},"mediaIds":{"minItems":1,"maxItems":5000,"type":"array","items":{"type":"string","minLength":1,"maxLength":100}},"format":{"type":"string","enum":["CSV","LIGHTROOM"]}},"required":["token","mediaIds","format"],"additionalProperties":false}},"required":["action","value"]}]}}}},"responses":{"200":{"description":"Authorized private viewer result. No source download permission is implied by filename export."},"400":{"description":"Invalid selection or eight-list capacity reached."},"401":{"description":"Current gallery session header required."},"404":{"description":"Foreign/expired gallery, viewer or selection."},"409":{"description":"Selection changed, restore already consumed, or selected photo no longer permitted."}}}},"/finance/collections":{"get":{"security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string"}},{"name":"view","in":"query","schema":{"type":"string"},"description":"ALL, OUTSTANDING (default), PAID, DRAFT or VOID"},{"name":"from","in":"query","schema":{"type":"string"},"description":"Inclusive ISO date in UTC"},{"name":"through","in":"query","schema":{"type":"string"},"description":"Inclusive ISO date in UTC"},{"name":"q","in":"query","schema":{"type":"string"}},{"name":"after","in":"query","schema":{"type":"string"},"description":"Opaque cursor bound to workspace and filters"},{"name":"limit","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Authorized current invoice collection result. Paid/outstanding are ledger principal views; reminder queued/sent/delivered are distinct."},"400":{"description":"Invalid settings, controlled booking invoice or recipient stop prevents enrollment."},"401":{"description":"Expired or revoked credential."},"403":{"description":"Missing finance scope or messages:write for reminder enrollment."},"404":{"description":"Foreign invoice or unavailable current workspace authority."},"409":{"description":"Stale settings, changed reviewed source or idempotency conflict."}},"summary":"Read current invoices filtered by paid/outstanding state and inclusive due-date range"}},"/finance/collections/{id}":{"get":{"security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Authorized current invoice collection result. Paid/outstanding are ledger principal views; reminder queued/sent/delivered are distinct."},"400":{"description":"Invalid settings, controlled booking invoice or recipient stop prevents enrollment."},"401":{"description":"Expired or revoked credential."},"403":{"description":"Missing finance scope or messages:write for reminder enrollment."},"404":{"description":"Foreign invoice or unavailable current workspace authority."},"409":{"description":"Stale settings, changed reviewed source or idempotency conflict."}},"summary":"Read current private collection settings, source-change warning and exact delivery history"},"post":{"security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Authorized current invoice collection result. Paid/outstanding are ledger principal views; reminder queued/sent/delivered are distinct."},"400":{"description":"Invalid settings, controlled booking invoice or recipient stop prevents enrollment."},"401":{"description":"Expired or revoked credential."},"403":{"description":"Missing finance scope or messages:write for reminder enrollment."},"404":{"description":"Foreign invoice or unavailable current workspace authority."},"409":{"description":"Stale settings, changed reviewed source or idempotency conflict."}},"summary":"Preview then explicitly approve invoice instructions and a bounded due-date reminder policy","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["operation","input"],"properties":{"operation":{"enum":["PREVIEW","SAVE"]},"input":{"type":"object","description":"invoiceId, expectedRevision (0 before first save), definition {version:1,instructions<=4000,remindersEnabled,recipient,offsetDays 1..5 unique integers -30..30 (positive=days before due),sendTime08:00..19:59,timezone}. SAVE also requires requestId UUID, reviewedHash from PREVIEW, approved true. Reminders bind current primary recipient, terms and author authority; revoked authority, source changes, invoice settlement, unresolved payment and recipient stop prevent dispatch. No charge or ledger write."}}}}}}}},"/vendor-payments":{"get":{"security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string"}},{"name":"weddingId","in":"query","required":true,"schema":{"type":"string","minLength":1,"maxLength":100}},{"name":"view","in":"query","required":false,"schema":{"default":"ALL","type":"string","enum":["ALL","OVERDUE","UPCOMING","PAID"]}},{"name":"on","in":"query","required":false,"schema":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"}},{"name":"category","in":"query","required":false,"schema":{"type":"string","maxLength":60}},{"name":"historyPage","in":"query","required":false,"schema":{"default":1,"type":"integer","minimum":1,"maximum":10000}}],"responses":{"200":{"description":"Current private operational vendor-payment schedule or exact idempotent mutation receipt. No transfer of funds."},"400":{"description":"Invalid totals, currency, linked adjustment or retained installment."},"404":{"description":"Unavailable private workspace or booked vendor."},"409":{"description":"Changed source, schedule revision or request identity."}},"summary":"Read dated vendor installments, currency-separated balances and paginated immutable payment history"},"post":{"security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Current private operational vendor-payment schedule or exact idempotent mutation receipt. No transfer of funds."},"400":{"description":"Invalid totals, currency, linked adjustment or retained installment."},"404":{"description":"Unavailable private workspace or booked vendor."},"409":{"description":"Changed source, schedule revision or request identity."}},"summary":"Review/save vendor installments or record an actual payment, linked refund or correction","requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","oneOf":[{"type":"object","properties":{"mode":{"type":"string","const":"preview"},"value":{"type":"object","properties":{"weddingId":{"type":"string","minLength":1,"maxLength":100},"vendorBookingId":{"type":"string","minLength":1,"maxLength":100},"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"definition":{"type":"object","properties":{"currency":{"type":"string","pattern":"^[A-Z]{3}$"},"contractCents":{"type":"integer","minimum":0,"maximum":1000000000},"notes":{"type":"string","maxLength":4000},"installments":{"minItems":1,"maxItems":50,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":100},"label":{"type":"string","minLength":1,"maxLength":120},"dueOn":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"amountCents":{"type":"integer","exclusiveMinimum":0,"maximum":1000000000}},"required":["id","label","dueOn","amountCents"],"additionalProperties":false}}},"required":["currency","contractCents","notes","installments"],"additionalProperties":false}},"required":["weddingId","vendorBookingId","expectedRevision","definition"],"additionalProperties":false}},"required":["mode","value"],"additionalProperties":false},{"type":"object","properties":{"mode":{"type":"string","const":"command"},"value":{"oneOf":[{"type":"object","properties":{"weddingId":{"type":"string","minLength":1,"maxLength":100},"vendorBookingId":{"type":"string","minLength":1,"maxLength":100},"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"definition":{"type":"object","properties":{"currency":{"type":"string","pattern":"^[A-Z]{3}$"},"contractCents":{"type":"integer","minimum":0,"maximum":1000000000},"notes":{"type":"string","maxLength":4000},"installments":{"minItems":1,"maxItems":50,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":100},"label":{"type":"string","minLength":1,"maxLength":120},"dueOn":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"amountCents":{"type":"integer","exclusiveMinimum":0,"maximum":1000000000}},"required":["id","label","dueOn","amountCents"],"additionalProperties":false}}},"required":["currency","contractCents","notes","installments"],"additionalProperties":false},"operation":{"type":"string","const":"SAVE"},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"reviewedHash":{"type":"string","pattern":"^[a-f0-9]{64}$"},"confirmed":{"type":"boolean","const":true}},"required":["weddingId","vendorBookingId","expectedRevision","definition","operation","requestId","reviewedHash","confirmed"],"additionalProperties":false},{"type":"object","properties":{"operation":{"type":"string","const":"ENTRY"},"weddingId":{"type":"string","minLength":1,"maxLength":100},"scheduleId":{"type":"string","minLength":1,"maxLength":100},"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"kind":{"type":"string","enum":["PAYMENT","REFUND","REVERSAL"]},"installmentId":{"type":"string","minLength":1,"maxLength":100},"originalEntryId":{"anyOf":[{"type":"string","minLength":1,"maxLength":100},{"type":"null"}]},"amountCents":{"type":"integer","exclusiveMinimum":0,"maximum":1000000000},"occurredOn":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"method":{"type":"string","enum":["BANK_TRANSFER","CHECK","CARD","CASH","OTHER"]},"reference":{"type":"string","maxLength":160},"note":{"type":"string","minLength":3,"maxLength":2000},"confirmed":{"type":"boolean","const":true}},"required":["operation","weddingId","scheduleId","expectedRevision","requestId","kind","installmentId","originalEntryId","amountCents","occurredOn","method","reference","note","confirmed"],"additionalProperties":false}]}},"required":["mode","value"],"additionalProperties":false}]}}}}}},"/finance/receipts":{"get":{"security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Workspace-Id","in":"header","description":"Required for account bearer tokens; scoped API keys already bind one workspace.","schema":{"type":"string"}},{"name":"invoiceId","in":"query","schema":{"type":"string"}},{"name":"after","in":"query","schema":{"type":"string"}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":50}}],"responses":{"200":{"description":"Current private receipt result; payment evidence and email delivery remain distinct."},"400":{"description":"Unsupported unsettled or historical source, uncertain delivery, missing review or changed receipt context."},"401":{"description":"Expired or revoked credential."},"403":{"description":"Missing finance scope or messages:write for queue/control."},"404":{"description":"Record unavailable in this workspace."},"409":{"description":"Stale reviewed content or idempotency conflict."}},"summary":"Read eligible recorded payments, refunds and corrections with latest retained delivery attempts"},"post":{"security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Workspace-Id","in":"header","description":"Required for account bearer tokens; scoped API keys already bind one workspace.","schema":{"type":"string"}}],"responses":{"200":{"description":"Current private receipt result; payment evidence and email delivery remain distinct."},"400":{"description":"Unsupported unsettled or historical source, uncertain delivery, missing review or changed receipt context."},"401":{"description":"Expired or revoked credential."},"403":{"description":"Missing finance scope or messages:write for queue/control."},"404":{"description":"Record unavailable in this workspace."},"409":{"description":"Stale reviewed content or idempotency conflict."}},"summary":"Preview, explicitly approve or control one exact client acknowledgment from immutable settlement evidence","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["operation","input"],"properties":{"operation":{"enum":["PREVIEW","QUEUE","CONTROL"]},"input":{"type":"object","description":"PREVIEW: ledgerEntryId. QUEUE: ledgerEntryId, reviewedHash returned by preview, approved:true, requestId UUID. CONTROL: noticeId, payloadHash, operation CANCEL or RETRY, confirmed:true, requestId UUID. Only known unattempted failures or queued original attempts can retry. Provider uncertainty is not permission for a replacement send. Private notes, provider identifiers, fees and internal bank references are excluded from client wording."}}}}}}}},"/finance/receipts/{id}":{"get":{"security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Workspace-Id","in":"header","description":"Required for account bearer tokens; scoped API keys already bind one workspace.","schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"download","in":"query","schema":{"enum":["text"]}}],"responses":{"200":{"description":"Current private receipt result; payment evidence and email delivery remain distinct."},"400":{"description":"Unsupported unsettled or historical source, uncertain delivery, missing review or changed receipt context."},"401":{"description":"Expired or revoked credential."},"403":{"description":"Missing finance scope or messages:write for queue/control."},"404":{"description":"Record unavailable in this workspace."},"409":{"description":"Stale reviewed content or idempotency conflict."}},"summary":"Read or download an integrity-checked retained client receipt acknowledgment"}},"/gallery-purchases":{"get":{"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Customer-safe records matched to current provider-verified account emails; no internal costs, provider credentials or unrelated business data."},"400":{"description":"Invalid filter or export exceeds5000records."},"401":{"description":"Current account session required. Integration credentials are not customer identity."},"404":{"description":"Unverified email, foreign purchase or unavailable cursor."}},"summary":"Read or export my verified gallery purchases across studios without granting studio-workspace access","description":"Refreshes current account-verified emails before querying. Includes paid/refunded, processing and authorized/returned package records; excludes unpaid carts. Gallery expiry does not destroy customer financial history or confer renewed download access. CSV retains exact amounts with separate credit/cash refund columns.","parameters":[{"name":"galleryId","in":"query","schema":{"type":"string"}},{"name":"email","in":"query","schema":{"type":"string","format":"email"}},{"name":"from","in":"query","schema":{"type":"string","format":"date"}},{"name":"to","in":"query","schema":{"type":"string","format":"date"}},{"name":"after","in":"query","schema":{"type":"string"}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}},{"name":"format","in":"query","schema":{"enum":["json","csv"]}}]},"post":{"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Customer-safe records matched to current provider-verified account emails; no internal costs, provider credentials or unrelated business data."},"400":{"description":"Invalid filter or export exceeds5000records."},"401":{"description":"Current account session required. Integration credentials are not customer identity."},"404":{"description":"Unverified email, foreign purchase or unavailable cursor."}},"summary":"Recover one original receipt link only for a current verified receipt email on my account","requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":100}},"required":["id"],"additionalProperties":false}}}}}},"/document-deliveries":{"get":{"security":[{"bearerAuth":[]}],"x-authentication":"named-private-workspace-operator","description":"A named session and X-Workspace-Id identify a current full workspace operator. Workflow approval additionally requires an owner/admin and the original publisher remains authorized. Preview binds one immutable source, one current CRM recipient, the message and expiry policy. Responses never expose private storage pointers or bearer access tokens.","responses":{"200":{"description":"Authorized preview, history or exact idempotent approval/revocation receipt."},"400":{"description":"Invalid fields or workflow authority."},"401":{"description":"Named account session required."},"404":{"description":"Foreign, restricted or unavailable source."},"409":{"description":"Source, recipient, run or revision changed since review."}},"summary":"Read private selected-file delivery and access history","parameters":[{"name":"leadId","in":"query","schema":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"}},{"name":"after","in":"query","schema":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"}},{"name":"limit","in":"query","schema":{"default":30,"type":"integer","minimum":1,"maximum":100}}]},"post":{"security":[{"bearerAuth":[]}],"x-authentication":"named-private-workspace-operator","description":"A named session and X-Workspace-Id identify a current full workspace operator. Workflow approval additionally requires an owner/admin and the original publisher remains authorized. Preview binds one immutable source, one current CRM recipient, the message and expiry policy. Responses never expose private storage pointers or bearer access tokens.","responses":{"200":{"description":"Authorized preview, history or exact idempotent approval/revocation receipt."},"400":{"description":"Invalid fields or workflow authority."},"401":{"description":"Named account session required."},"404":{"description":"Foreign, restricted or unavailable source."},"409":{"description":"Source, recipient, run or revision changed since review."}},"summary":"Preview and approve exact file sharing, revoke a link, or approve a prepared FILE_SHARE workflow step","requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","oneOf":[{"type":"object","properties":{"operation":{"type":"string","const":"PREVIEW"},"input":{"type":"object","properties":{"source":{"type":"object","properties":{"kind":{"type":"string","enum":["PROJECT","REUSABLE"]},"versionId":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"}},"required":["kind","versionId"],"additionalProperties":false},"leadId":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},"subject":{"type":"string","minLength":1,"maxLength":160},"body":{"type":"string","minLength":1,"maxLength":12000},"expiresInDays":{"type":"integer","minimum":1,"maximum":90}},"required":["source","leadId","subject","body","expiresInDays"],"additionalProperties":false}},"required":["operation","input"],"additionalProperties":false},{"type":"object","properties":{"operation":{"type":"string","const":"APPROVE"},"input":{"type":"object","properties":{"source":{"type":"object","properties":{"kind":{"type":"string","enum":["PROJECT","REUSABLE"]},"versionId":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"}},"required":["kind","versionId"],"additionalProperties":false},"leadId":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},"subject":{"type":"string","minLength":1,"maxLength":160},"body":{"type":"string","minLength":1,"maxLength":12000},"expiresInDays":{"type":"integer","minimum":1,"maximum":90},"reviewedHash":{"type":"string","pattern":"^[a-f0-9]{64}$"},"approved":{"type":"boolean","const":true},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["source","leadId","subject","body","expiresInDays","reviewedHash","approved","requestId"],"additionalProperties":false}},"required":["operation","input"],"additionalProperties":false},{"type":"object","properties":{"operation":{"type":"string","const":"REVOKE"},"input":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},"expectedRevision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"reason":{"type":"string","minLength":3,"maxLength":500},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["id","expectedRevision","reason","requestId"],"additionalProperties":false}},"required":["operation","input"],"additionalProperties":false},{"type":"object","properties":{"operation":{"type":"string","const":"WORKFLOW_PREVIEW"},"input":{"type":"object","properties":{"artifactId":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"}},"required":["artifactId"],"additionalProperties":false}},"required":["operation","input"],"additionalProperties":false},{"type":"object","properties":{"operation":{"type":"string","const":"WORKFLOW_APPROVE"},"input":{"type":"object","properties":{"artifactId":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},"reviewedHash":{"type":"string","pattern":"^[a-f0-9]{64}$"},"approved":{"type":"boolean","const":true},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["artifactId","reviewedHash","approved","requestId"],"additionalProperties":false}},"required":["operation","input"],"additionalProperties":false}]}}}}}},"/public/document-deliveries/{token}":{"get":{"summary":"Read minimal metadata or download one checksum-verified private original with an unexpired bearer capability","security":[],"parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","pattern":"^[a-f0-9]{64}$"}},{"name":"download","in":"query","schema":{"type":"boolean"},"description":"true returns the exact original bytes as a private no-store attachment."}],"description":"Possession of the link grants this single retained version. Every read checks revocation, expiry, original recipient identity and source integrity; workflow cancellation closes its grants. Downloads check the original checksum and recheck authority immediately before admission. No login is required; forwarded links remain usable until closed. Responses are private/no-store and noindex.","responses":{"200":{"description":"Minimal metadata or original attachment bytes."},"404":{"description":"Unavailable, expired, revoked or changed authority."},"429":{"description":"Per-token request limit exceeded."}}}},"/schedule-review-invitations":{"get":{"security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string"}},{"name":"weddingId","in":"query","required":true,"schema":{"type":"string"}},{"name":"offset","in":"query","schema":{"type":"integer","minimum":0}}],"responses":{"200":{"description":"Authorized review invitation result; queued, provider-sent, delivered and review decisions remain distinct."},"400":{"description":"Invalid input or unavailable operational email."},"404":{"description":"Foreign record or unauthorized actor."},"409":{"description":"Stale review, changed source or idempotency conflict."}},"summary":"Read exact retained reviewer emails, current review state and delivery receipts"},"post":{"security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Authorized review invitation result; queued, provider-sent, delivered and review decisions remain distinct."},"400":{"description":"Invalid input or unavailable operational email."},"404":{"description":"Foreign record or unauthorized actor."},"409":{"description":"Stale review, changed source or idempotency conflict."}},"summary":"Prepare independent private review copies, approve each exact email, revoke or reconcile an original receipt","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["operation","value"],"properties":{"operation":{"enum":["prepare","control"]},"value":{"type":"object","description":"prepare: weddingId, expectedRevision, requestId UUID, expiresAt UTC, message and1..8 distinct recipients(name,email,role,roles,itemIds,required,allowSuggestions). control: weddingId,id,expectedRevision,requestId UUID,operation APPROVE/CANCEL/RETRY/RECONCILE,reviewedHash,confirmed true; RECONCILE also requires original providerId. Current named full workspace operator required. Source changes, responses, expiry, revocation, removed sender access and delivery suppression stop pending mail."}}}}}}}},"/vendor-readiness":{"get":{"security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string"}},{"name":"weddingId","in":"query","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Current scoped readiness result; queued is not delivered."},"400":{"description":"Invalid deadline, unavailable recipient or request."},"404":{"description":"Foreign wedding or unauthorized operations role."},"409":{"description":"Revision or idempotency conflict."}},"summary":"Read wedding vendor confirmation requests, overdue/reconfirmation states and notification status"},"post":{"security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Current scoped readiness result; queued is not delivered."},"400":{"description":"Invalid deadline, unavailable recipient or request."},"404":{"description":"Foreign wedding or unauthorized operations role."},"409":{"description":"Revision or idempotency conflict."}},"summary":"Owner/admin creates, reissues or cancels a deadline-bound confirmation request; same authorized web service","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["action","value"],"properties":{"action":{"enum":["save","cancel"]},"value":{"type":"object","description":"save: weddingId, id UUID, recipientId, expectedRevision, requestId UUID, title, details, dueAt exact ISO instant, sendNotice boolean, remindBeforeHours 0-168. cancel: weddingId/id/expectedRevision/requestId. Reissue resets response and requires a fresh confirmation against the current published schedule."}}}}}}}},"/couple-portal-preview":{"get":{"summary":"Preview the exact couple-facing page without sharing or payment capabilities","description":"Named full workspace access and ownership of the client project are required. Uses the same allowlisted projection as the live couple page. Coordination plans expose only the latest published snapshot; a never-published plan returns AWAITING_PUBLICATION, while projects without a plan return an explicitly labeled LEGACY_WORKING schedule. Proposal prices posted for this couple remain visible; private business notes, resource assignments and vendor costs are excluded. Payment tokens are null and readOnly is true. No public sharing state or business record is changed.","security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string"}},{"name":"weddingId","in":"query","required":true,"schema":{"type":"string","minLength":1,"maxLength":120}}],"responses":{"200":{"description":"Private no-store preview with weddingId, sharingEnabled, readOnly and portal; no live shareId or payment token."},"401":{"description":"A named account session is required."},"403":{"description":"Service credentials cannot impersonate a named portal operator."},"404":{"description":"The project or full workspace permission is unavailable."}}}},"/day-of/{sharedWeddingId}/realtime":{"post":{"summary":"Issue short-lived subscribe-only invalidation tokens for accepted named assignments; each renewal checks current authority and every refresh reads through authorization","description":"Requires a current named Clerk session and X-Workspace-Id. Scoped business keys are rejected. Limited members may act only within explicitly assigned shared weddings and accepted named bindings; this does not grant private business records or paid seats. Responses are private no-store. Each source retains its own version; no atomic cross-domain or offline claim.","security":[{"bearerAuth":[]}],"x-authentication":"named-shared-wedding-member","x-max-body-bytes":32768,"parameters":[{"name":"sharedWeddingId","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":120}},{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string","minLength":1,"maxLength":120}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"bindingIds":{"minItems":1,"maxItems":20,"type":"array","items":{"type":"string","minLength":1,"maxLength":120}}},"required":["bindingIds"],"additionalProperties":false}}}},"responses":{"200":{"description":"Current scoped result or unchanged original request receipt. No source capability or storage URL is returned.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid or duplicate query/body fields"},"401":{"description":"Current account session required"},"403":{"description":"Unattributed business keys are not accepted"},"404":{"description":"Unknown, revoked or unavailable named assignment"},"409":{"description":"Changed revision, source, original request or current authority; refresh for deliberate review"},"413":{"description":"JSON body exceeds32768bytes"},"415":{"description":"application/json required"}}}},"/day-of/{sharedWeddingId}":{"get":{"summary":"Read bounded named wedding-day cards with per-source freshness and a final authority check","description":"Requires a current named Clerk session and X-Workspace-Id. Scoped business keys are rejected. Limited members may act only within explicitly assigned shared weddings and accepted named bindings; this does not grant private business records or paid seats. Responses are private no-store. Each source retains its own version; no atomic cross-domain or offline claim.","security":[{"bearerAuth":[]}],"x-authentication":"named-shared-wedding-member","x-max-body-bytes":32768,"parameters":[{"name":"sharedWeddingId","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":120}},{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string","minLength":1,"maxLength":120}},{"name":"after","in":"query","required":false,"schema":{"type":"string","minLength":1,"maxLength":2048}},{"name":"limit","in":"query","required":false,"schema":{"default":10,"type":"integer","minimum":1,"maximum":20}}],"responses":{"200":{"description":"Current scoped result or unchanged original request receipt. No source capability or storage URL is returned.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid or duplicate query/body fields"},"401":{"description":"Current account session required"},"403":{"description":"Unattributed business keys are not accepted"},"404":{"description":"Unknown, revoked or unavailable named assignment"},"409":{"description":"Changed revision, source, original request or current authority; refresh for deliberate review"},"413":{"description":"JSON body exceeds32768bytes"},"415":{"description":"application/json required"}}}},"/day-of/{sharedWeddingId}/bindings":{"get":{"summary":"Read your accepted assignments and source-owned retained invitation history","description":"Requires a current named Clerk session and X-Workspace-Id. Scoped business keys are rejected. Limited members may act only within explicitly assigned shared weddings and accepted named bindings; this does not grant private business records or paid seats. Responses are private no-store. Each source retains its own version; no atomic cross-domain or offline claim.","security":[{"bearerAuth":[]}],"x-authentication":"named-shared-wedding-member","x-max-body-bytes":32768,"parameters":[{"name":"sharedWeddingId","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":120}},{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string","minLength":1,"maxLength":120}},{"name":"after","in":"query","required":false,"schema":{"type":"string","minLength":1,"maxLength":2048}},{"name":"limit","in":"query","required":false,"schema":{"default":10,"type":"integer","minimum":1,"maximum":20}}],"responses":{"200":{"description":"Current scoped result or unchanged original request receipt. No source capability or storage URL is returned.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid or duplicate query/body fields"},"401":{"description":"Current account session required"},"403":{"description":"Unattributed business keys are not accepted"},"404":{"description":"Unknown, revoked or unavailable named assignment"},"409":{"description":"Changed revision, source, original request or current authority; refresh for deliberate review"},"413":{"description":"JSON body exceeds32768bytes"},"415":{"description":"application/json required"}}}},"/day-of/{sharedWeddingId}/sources":{"get":{"summary":"Choose your own coordination/photo grants or hospitality work already claimed by your account","description":"Requires a current named Clerk session and X-Workspace-Id. Scoped business keys are rejected. Limited members may act only within explicitly assigned shared weddings and accepted named bindings; this does not grant private business records or paid seats. Responses are private no-store. Each source retains its own version; no atomic cross-domain or offline claim.","security":[{"bearerAuth":[]}],"x-authentication":"named-shared-wedding-member","x-max-body-bytes":32768,"parameters":[{"name":"sharedWeddingId","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":120}},{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string","minLength":1,"maxLength":120}},{"name":"kind","in":"query","required":true,"schema":{"type":"string","enum":["COORDINATION","PHOTOGRAPHY","CATERING","TRANSPORT"]}},{"name":"after","in":"query","required":false,"schema":{"type":"string","minLength":1,"maxLength":2048}},{"name":"limit","in":"query","required":false,"schema":{"default":10,"type":"integer","minimum":1,"maximum":20}}],"responses":{"200":{"description":"Current scoped result or unchanged original request receipt. No source capability or storage URL is returned.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid or duplicate query/body fields"},"401":{"description":"Current account session required"},"403":{"description":"Unattributed business keys are not accepted"},"404":{"description":"Unknown, revoked or unavailable named assignment"},"409":{"description":"Changed revision, source, original request or current authority; refresh for deliberate review"},"413":{"description":"JSON body exceeds32768bytes"},"415":{"description":"application/json required"}}}},"/day-of/access/reviews":{"post":{"summary":"Review exact named assignment permissions before issuing or connecting; sends no invitation email","description":"Requires a current named Clerk session and X-Workspace-Id. Scoped business keys are rejected. Limited members may act only within explicitly assigned shared weddings and accepted named bindings; this does not grant private business records or paid seats. Responses are private no-store. Each source retains its own version; no atomic cross-domain or offline claim.","security":[{"bearerAuth":[]}],"x-authentication":"named-shared-wedding-member","x-max-body-bytes":32768,"parameters":[{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string","minLength":1,"maxLength":120}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","oneOf":[{"type":"object","properties":{"kind":{"type":"string","const":"ISSUE"},"sharedWeddingId":{"type":"string","minLength":1,"maxLength":120},"source":{"type":"object","properties":{"kind":{"type":"string","enum":["COORDINATION","PHOTOGRAPHY"]},"id":{"type":"string","minLength":1,"maxLength":120},"expectedAccessRevision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991}},"required":["kind","id","expectedAccessRevision"],"additionalProperties":false},"intendedEmail":{"type":"string","maxLength":254,"format":"email","pattern":"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"},"capabilities":{"minItems":1,"maxItems":11,"type":"array","items":{"type":"string","enum":["schedule.read","schedule.ack","readiness.write","actuals.write","execution.read","execution.write","incidents.report","incidents.resolve_assigned","handoffs.read","handoffs.accept","handoffs.complete","photography.read","photography.complete","catering.read","catering.ack","manifest.read","manifest.ack","riders.board"]}},"expiresAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["kind","sharedWeddingId","source","intendedEmail","capabilities","expiresAt","requestId"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"CONNECT"},"sharedWeddingId":{"type":"string","minLength":1,"maxLength":120},"source":{"type":"object","properties":{"kind":{"type":"string","enum":["CATERING","TRANSPORT"]},"id":{"type":"string","minLength":1,"maxLength":120},"expectedAccessRevision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991}},"required":["kind","id","expectedAccessRevision"],"additionalProperties":false},"capabilities":{"minItems":1,"maxItems":11,"type":"array","items":{"type":"string","enum":["schedule.read","schedule.ack","readiness.write","actuals.write","execution.read","execution.write","incidents.report","incidents.resolve_assigned","handoffs.read","handoffs.accept","handoffs.complete","photography.read","photography.complete","catering.read","catering.ack","manifest.read","manifest.ack","riders.board"]}},"expiresAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["kind","sharedWeddingId","source","capabilities","expiresAt","requestId"],"additionalProperties":false}]}}}},"responses":{"200":{"description":"Current scoped result or unchanged original request receipt. No source capability or storage URL is returned.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid or duplicate query/body fields"},"401":{"description":"Current account session required"},"403":{"description":"Unattributed business keys are not accepted"},"404":{"description":"Unknown, revoked or unavailable named assignment"},"409":{"description":"Changed revision, source, original request or current authority; refresh for deliberate review"},"413":{"description":"JSON body exceeds32768bytes"},"415":{"description":"application/json required"}}}},"/day-of/access/apply":{"post":{"summary":"Apply the unchanged access review; new invitations remain pending until the verified named person accepts","description":"Requires a current named Clerk session and X-Workspace-Id. Scoped business keys are rejected. Limited members may act only within explicitly assigned shared weddings and accepted named bindings; this does not grant private business records or paid seats. Responses are private no-store. Each source retains its own version; no atomic cross-domain or offline claim.","security":[{"bearerAuth":[]}],"x-authentication":"named-shared-wedding-member","x-max-body-bytes":32768,"parameters":[{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string","minLength":1,"maxLength":120}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"reviewId":{"type":"string","minLength":1,"maxLength":120},"reviewedHash":{"type":"string","pattern":"^[a-f0-9]{64}$"},"approved":{"type":"boolean","const":true},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["reviewId","reviewedHash","approved","requestId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Current scoped result or unchanged original request receipt. No source capability or storage URL is returned.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid or duplicate query/body fields"},"401":{"description":"Current account session required"},"403":{"description":"Unattributed business keys are not accepted"},"404":{"description":"Unknown, revoked or unavailable named assignment"},"409":{"description":"Changed revision, source, original request or current authority; refresh for deliberate review"},"413":{"description":"JSON body exceeds32768bytes"},"415":{"description":"application/json required"}}}},"/day-of/access/{bindingId}/invitation":{"get":{"summary":"Read the exact invitation only with the intended email currently verified and a participating selected workspace","description":"Requires a current named Clerk session and X-Workspace-Id. Scoped business keys are rejected. Limited members may act only within explicitly assigned shared weddings and accepted named bindings; this does not grant private business records or paid seats. Responses are private no-store. Each source retains its own version; no atomic cross-domain or offline claim.","security":[{"bearerAuth":[]}],"x-authentication":"named-shared-wedding-member","x-max-body-bytes":32768,"parameters":[{"name":"bindingId","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":120}},{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string","minLength":1,"maxLength":120}}],"responses":{"200":{"description":"Current scoped result or unchanged original request receipt. No source capability or storage URL is returned.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid or duplicate query/body fields"},"401":{"description":"Current account session required"},"403":{"description":"Unattributed business keys are not accepted"},"404":{"description":"Unknown, revoked or unavailable named assignment"},"409":{"description":"Changed revision, source, original request or current authority; refresh for deliberate review"},"413":{"description":"JSON body exceeds32768bytes"},"415":{"description":"application/json required"}}}},"/day-of/access/{bindingId}/accept":{"post":{"summary":"Explicitly accept into the selected participating workspace; URL possession grants no access","description":"Requires a current named Clerk session and X-Workspace-Id. Scoped business keys are rejected. Limited members may act only within explicitly assigned shared weddings and accepted named bindings; this does not grant private business records or paid seats. Responses are private no-store. Each source retains its own version; no atomic cross-domain or offline claim.","security":[{"bearerAuth":[]}],"x-authentication":"named-shared-wedding-member","x-max-body-bytes":32768,"parameters":[{"name":"bindingId","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":120}},{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string","minLength":1,"maxLength":120}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"expectedRevision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"scopeHash":{"type":"string","pattern":"^[a-f0-9]{64}$"},"approved":{"type":"boolean","const":true},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["expectedRevision","scopeHash","approved","requestId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Current scoped result or unchanged original request receipt. No source capability or storage URL is returned.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid or duplicate query/body fields"},"401":{"description":"Current account session required"},"403":{"description":"Unattributed business keys are not accepted"},"404":{"description":"Unknown, revoked or unavailable named assignment"},"409":{"description":"Changed revision, source, original request or current authority; refresh for deliberate review"},"413":{"description":"JSON body exceeds32768bytes"},"415":{"description":"application/json required"}}}},"/day-of/access/{bindingId}/revoke":{"post":{"summary":"End named access while retaining history and independently controlled original public links","description":"Requires a current named Clerk session and X-Workspace-Id. Scoped business keys are rejected. Limited members may act only within explicitly assigned shared weddings and accepted named bindings; this does not grant private business records or paid seats. Responses are private no-store. Each source retains its own version; no atomic cross-domain or offline claim.","security":[{"bearerAuth":[]}],"x-authentication":"named-shared-wedding-member","x-max-body-bytes":32768,"parameters":[{"name":"bindingId","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":120}},{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string","minLength":1,"maxLength":120}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"expectedRevision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"reason":{"type":"string","minLength":3,"maxLength":500},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["expectedRevision","reason","requestId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Current scoped result or unchanged original request receipt. No source capability or storage URL is returned.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid or duplicate query/body fields"},"401":{"description":"Current account session required"},"403":{"description":"Unattributed business keys are not accepted"},"404":{"description":"Unknown, revoked or unavailable named assignment"},"409":{"description":"Changed revision, source, original request or current authority; refresh for deliberate review"},"413":{"description":"JSON body exceeds32768bytes"},"415":{"description":"application/json required"}}}},"/day-of/{sharedWeddingId}/assignments/{bindingId}":{"get":{"summary":"Read current named assignment capabilities without source tokens","description":"Requires a current named Clerk session and X-Workspace-Id. Scoped business keys are rejected. Limited members may act only within explicitly assigned shared weddings and accepted named bindings; this does not grant private business records or paid seats. Responses are private no-store. Each source retains its own version; no atomic cross-domain or offline claim.","security":[{"bearerAuth":[]}],"x-authentication":"named-shared-wedding-member","x-max-body-bytes":32768,"parameters":[{"name":"sharedWeddingId","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":120}},{"name":"bindingId","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":120}},{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string","minLength":1,"maxLength":120}}],"responses":{"200":{"description":"Current scoped result or unchanged original request receipt. No source capability or storage URL is returned.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid or duplicate query/body fields"},"401":{"description":"Current account session required"},"403":{"description":"Unattributed business keys are not accepted"},"404":{"description":"Unknown, revoked or unavailable named assignment"},"409":{"description":"Changed revision, source, original request or current authority; refresh for deliberate review"},"413":{"description":"JSON body exceeds32768bytes"},"415":{"description":"application/json required"}}}},"/day-of/{sharedWeddingId}/assignments/{bindingId}/coordination":{"get":{"summary":"Read scoped schedule, assigned incidents or handoffs with independent pagination and exact source revision","description":"Requires a current named Clerk session and X-Workspace-Id. Scoped business keys are rejected. Limited members may act only within explicitly assigned shared weddings and accepted named bindings; this does not grant private business records or paid seats. Responses are private no-store. Each source retains its own version; no atomic cross-domain or offline claim.","security":[{"bearerAuth":[]}],"x-authentication":"named-shared-wedding-member","x-max-body-bytes":32768,"parameters":[{"name":"sharedWeddingId","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":120}},{"name":"bindingId","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":120}},{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string","minLength":1,"maxLength":120}},{"name":"section","in":"query","required":false,"schema":{"default":"SCHEDULE","type":"string","enum":["SCHEDULE","INCIDENTS","HANDOFFS"]}},{"name":"after","in":"query","required":false,"schema":{"type":"string","minLength":1,"maxLength":4000}},{"name":"limit","in":"query","required":false,"schema":{"default":30,"type":"integer","minimum":1,"maximum":50}},{"name":"summary","in":"query","required":false,"schema":{"default":false,"type":"boolean"}}],"responses":{"200":{"description":"Current scoped result or unchanged original request receipt. No source capability or storage URL is returned.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid or duplicate query/body fields"},"401":{"description":"Current account session required"},"403":{"description":"Unattributed business keys are not accepted"},"404":{"description":"Unknown, revoked or unavailable named assignment"},"409":{"description":"Changed revision, source, original request or current authority; refresh for deliberate review"},"413":{"description":"JSON body exceeds32768bytes"},"415":{"description":"application/json required"}}}},"/day-of/{sharedWeddingId}/assignments/{bindingId}/coordination/acknowledge":{"post":{"summary":"Record this named person reading the exact current published schedule revision","description":"Requires a current named Clerk session and X-Workspace-Id. Scoped business keys are rejected. Limited members may act only within explicitly assigned shared weddings and accepted named bindings; this does not grant private business records or paid seats. Responses are private no-store. Each source retains its own version; no atomic cross-domain or offline claim.","security":[{"bearerAuth":[]}],"x-authentication":"named-shared-wedding-member","x-max-body-bytes":32768,"parameters":[{"name":"sharedWeddingId","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":120}},{"name":"bindingId","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":120}},{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string","minLength":1,"maxLength":120}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"publishedRevision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991}},"required":["requestId","publishedRevision"],"additionalProperties":false}}}},"responses":{"200":{"description":"Current scoped result or unchanged original request receipt. No source capability or storage URL is returned.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid or duplicate query/body fields"},"401":{"description":"Current account session required"},"403":{"description":"Unattributed business keys are not accepted"},"404":{"description":"Unknown, revoked or unavailable named assignment"},"409":{"description":"Changed revision, source, original request or current authority; refresh for deliberate review"},"413":{"description":"JSON body exceeds32768bytes"},"415":{"description":"application/json required"}}}},"/day-of/{sharedWeddingId}/assignments/{bindingId}/coordination/readiness":{"post":{"summary":"Save readiness and arrival under their own status revision; never enroll messaging consent","description":"Requires a current named Clerk session and X-Workspace-Id. Scoped business keys are rejected. Limited members may act only within explicitly assigned shared weddings and accepted named bindings; this does not grant private business records or paid seats. Responses are private no-store. Each source retains its own version; no atomic cross-domain or offline claim.","security":[{"bearerAuth":[]}],"x-authentication":"named-shared-wedding-member","x-max-body-bytes":32768,"parameters":[{"name":"sharedWeddingId","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":120}},{"name":"bindingId","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":120}},{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string","minLength":1,"maxLength":120}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"expectedStatusRevision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"checkIn":{"type":"string","enum":["NOT_CHECKED_IN","EN_ROUTE","ON_SITE","RUNNING_LATE","NEED_HELP"]},"readiness":{"type":"string","enum":["PENDING","CONFIRMED","DECLINED"]}},"required":["requestId","expectedStatusRevision","checkIn","readiness"],"additionalProperties":false}}}},"responses":{"200":{"description":"Current scoped result or unchanged original request receipt. No source capability or storage URL is returned.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid or duplicate query/body fields"},"401":{"description":"Current account session required"},"403":{"description":"Unattributed business keys are not accepted"},"404":{"description":"Unknown, revoked or unavailable named assignment"},"409":{"description":"Changed revision, source, original request or current authority; refresh for deliberate review"},"413":{"description":"JSON body exceeds32768bytes"},"415":{"description":"application/json required"}}}},"/day-of/{sharedWeddingId}/assignments/{bindingId}/coordination/actuals":{"post":{"summary":"Record or correct actual start/finish; this remains separate from Live Mode DONE","description":"Requires a current named Clerk session and X-Workspace-Id. Scoped business keys are rejected. Limited members may act only within explicitly assigned shared weddings and accepted named bindings; this does not grant private business records or paid seats. Responses are private no-store. Each source retains its own version; no atomic cross-domain or offline claim.","security":[{"bearerAuth":[]}],"x-authentication":"named-shared-wedding-member","x-max-body-bytes":32768,"parameters":[{"name":"sharedWeddingId","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":120}},{"name":"bindingId","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":120}},{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string","minLength":1,"maxLength":120}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"itemId":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},"publishedRevision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"action":{"type":"string","enum":["START","FINISH","CORRECT"]},"startedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}]},"finishedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}]},"reason":{"type":"string","maxLength":1000}},"required":["requestId","expectedRevision","itemId","publishedRevision","action","startedAt","finishedAt","reason"],"additionalProperties":false}}}},"responses":{"200":{"description":"Current scoped result or unchanged original request receipt. No source capability or storage URL is returned.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid or duplicate query/body fields"},"401":{"description":"Current account session required"},"403":{"description":"Unattributed business keys are not accepted"},"404":{"description":"Unknown, revoked or unavailable named assignment"},"409":{"description":"Changed revision, source, original request or current authority; refresh for deliberate review"},"413":{"description":"JSON body exceeds32768bytes"},"415":{"description":"application/json required"}}}},"/day-of/{sharedWeddingId}/assignments/{bindingId}/coordination/execution":{"post":{"summary":"Set one currently assigned published moment Pending, In progress or Done with separately accepted execution permission, publication revision, execution CAS and a stable request ID; never records actual times or publishes a delay","description":"Requires a current named Clerk session and X-Workspace-Id. Scoped business keys are rejected. Limited members may act only within explicitly assigned shared weddings and accepted named bindings; this does not grant private business records or paid seats. Responses are private no-store. Each source retains its own version; no atomic cross-domain or offline claim.","security":[{"bearerAuth":[]}],"x-authentication":"named-shared-wedding-member","x-max-body-bytes":32768,"parameters":[{"name":"sharedWeddingId","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":120}},{"name":"bindingId","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":120}},{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string","minLength":1,"maxLength":120}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"itemId":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},"publishedRevision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"expectedExecutionRevision":{"type":"integer","minimum":0,"maximum":2000000000},"status":{"type":"string","enum":["PENDING","IN_PROGRESS","DONE"]}},"required":["requestId","itemId","publishedRevision","expectedExecutionRevision","status"],"additionalProperties":false}}}},"responses":{"200":{"description":"Current scoped result or unchanged original request receipt. No source capability or storage URL is returned.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid or duplicate query/body fields"},"401":{"description":"Current account session required"},"403":{"description":"Unattributed business keys are not accepted"},"404":{"description":"Unknown, revoked or unavailable named assignment"},"409":{"description":"Changed revision, source, original request or current authority; refresh for deliberate review"},"413":{"description":"JSON body exceeds32768bytes"},"415":{"description":"application/json required"}}}},"/day-of/{sharedWeddingId}/assignments/{bindingId}/coordination/incidents":{"post":{"summary":"Report a private coordination incident to the owning source; reporting does not grant broad incident visibility","description":"Requires a current named Clerk session and X-Workspace-Id. Scoped business keys are rejected. Limited members may act only within explicitly assigned shared weddings and accepted named bindings; this does not grant private business records or paid seats. Responses are private no-store. Each source retains its own version; no atomic cross-domain or offline claim.","security":[{"bearerAuth":[]}],"x-authentication":"named-shared-wedding-member","x-max-body-bytes":32768,"parameters":[{"name":"sharedWeddingId","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":120}},{"name":"bindingId","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":120}},{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string","minLength":1,"maxLength":120}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"title":{"type":"string","minLength":1,"maxLength":160},"detail":{"type":"string","minLength":1,"maxLength":3000},"severity":{"type":"string","enum":["INFO","WARNING","CRITICAL"]}},"required":["requestId","title","detail","severity"],"additionalProperties":false}}}},"responses":{"200":{"description":"Current scoped result or unchanged original request receipt. No source capability or storage URL is returned.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid or duplicate query/body fields"},"401":{"description":"Current account session required"},"403":{"description":"Unattributed business keys are not accepted"},"404":{"description":"Unknown, revoked or unavailable named assignment"},"409":{"description":"Changed revision, source, original request or current authority; refresh for deliberate review"},"413":{"description":"JSON body exceeds32768bytes"},"415":{"description":"application/json required"}}}},"/day-of/{sharedWeddingId}/assignments/{bindingId}/coordination/incidents/update":{"post":{"summary":"Update only an explicitly assigned incident under its current revision","description":"Requires a current named Clerk session and X-Workspace-Id. Scoped business keys are rejected. Limited members may act only within explicitly assigned shared weddings and accepted named bindings; this does not grant private business records or paid seats. Responses are private no-store. Each source retains its own version; no atomic cross-domain or offline claim.","security":[{"bearerAuth":[]}],"x-authentication":"named-shared-wedding-member","x-max-body-bytes":32768,"parameters":[{"name":"sharedWeddingId","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":120}},{"name":"bindingId","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":120}},{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string","minLength":1,"maxLength":120}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"incidentId":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},"status":{"type":"string","enum":["OPEN","ACKNOWLEDGED","RESOLVED"]},"resolution":{"type":"string","maxLength":3000}},"required":["requestId","expectedRevision","incidentId","status","resolution"],"additionalProperties":false}}}},"responses":{"200":{"description":"Current scoped result or unchanged original request receipt. No source capability or storage URL is returned.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid or duplicate query/body fields"},"401":{"description":"Current account session required"},"403":{"description":"Unattributed business keys are not accepted"},"404":{"description":"Unknown, revoked or unavailable named assignment"},"409":{"description":"Changed revision, source, original request or current authority; refresh for deliberate review"},"413":{"description":"JSON body exceeds32768bytes"},"415":{"description":"application/json required"}}}},"/day-of/{sharedWeddingId}/assignments/{bindingId}/coordination/handoffs/accept":{"post":{"summary":"Accept an exact scoped responsibility handoff","description":"Requires a current named Clerk session and X-Workspace-Id. Scoped business keys are rejected. Limited members may act only within explicitly assigned shared weddings and accepted named bindings; this does not grant private business records or paid seats. Responses are private no-store. Each source retains its own version; no atomic cross-domain or offline claim.","security":[{"bearerAuth":[]}],"x-authentication":"named-shared-wedding-member","x-max-body-bytes":32768,"parameters":[{"name":"sharedWeddingId","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":120}},{"name":"bindingId","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":120}},{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string","minLength":1,"maxLength":120}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"handoffId":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"}},"required":["requestId","expectedRevision","handoffId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Current scoped result or unchanged original request receipt. No source capability or storage URL is returned.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid or duplicate query/body fields"},"401":{"description":"Current account session required"},"403":{"description":"Unattributed business keys are not accepted"},"404":{"description":"Unknown, revoked or unavailable named assignment"},"409":{"description":"Changed revision, source, original request or current authority; refresh for deliberate review"},"413":{"description":"JSON body exceeds32768bytes"},"415":{"description":"application/json required"}}}},"/day-of/{sharedWeddingId}/assignments/{bindingId}/coordination/handoffs/complete":{"post":{"summary":"Complete an accepted scoped handoff without silently resolving an incident","description":"Requires a current named Clerk session and X-Workspace-Id. Scoped business keys are rejected. Limited members may act only within explicitly assigned shared weddings and accepted named bindings; this does not grant private business records or paid seats. Responses are private no-store. Each source retains its own version; no atomic cross-domain or offline claim.","security":[{"bearerAuth":[]}],"x-authentication":"named-shared-wedding-member","x-max-body-bytes":32768,"parameters":[{"name":"sharedWeddingId","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":120}},{"name":"bindingId","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":120}},{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string","minLength":1,"maxLength":120}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"handoffId":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"}},"required":["requestId","expectedRevision","handoffId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Current scoped result or unchanged original request receipt. No source capability or storage URL is returned.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid or duplicate query/body fields"},"401":{"description":"Current account session required"},"403":{"description":"Unattributed business keys are not accepted"},"404":{"description":"Unknown, revoked or unavailable named assignment"},"409":{"description":"Changed revision, source, original request or current authority; refresh for deliberate review"},"413":{"description":"JSON body exceeds32768bytes"},"415":{"description":"application/json required"}}}},"/day-of/{sharedWeddingId}/assignments/{bindingId}/photography":{"get":{"summary":"Read assigned photographs and independently timed coverage with bounded version-bound pages","description":"Requires a current named Clerk session and X-Workspace-Id. Scoped business keys are rejected. Limited members may act only within explicitly assigned shared weddings and accepted named bindings; this does not grant private business records or paid seats. Responses are private no-store. Each source retains its own version; no atomic cross-domain or offline claim.","security":[{"bearerAuth":[]}],"x-authentication":"named-shared-wedding-member","x-max-body-bytes":32768,"parameters":[{"name":"sharedWeddingId","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":120}},{"name":"bindingId","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":120}},{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string","minLength":1,"maxLength":120}},{"name":"kind","in":"query","required":false,"schema":{"default":"ALL","type":"string","enum":["ALL","SHOT","FAMILY"]}},{"name":"state","in":"query","required":false,"schema":{"default":"ALL","type":"string","enum":["ALL","OPEN","COMPLETE"]}},{"name":"after","in":"query","required":false,"schema":{"type":"string","minLength":1,"maxLength":4000}},{"name":"limit","in":"query","required":false,"schema":{"default":30,"type":"integer","minimum":1,"maximum":30}},{"name":"blockAfter","in":"query","required":false,"schema":{"type":"string","minLength":1,"maxLength":4000}},{"name":"coverageAfter","in":"query","required":false,"schema":{"type":"string","minLength":1,"maxLength":4000}},{"name":"summary","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"string","const":"true"},{"type":"string","const":"false"}]}}],"responses":{"200":{"description":"Current scoped result or unchanged original request receipt. No source capability or storage URL is returned.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid or duplicate query/body fields"},"401":{"description":"Current account session required"},"403":{"description":"Unattributed business keys are not accepted"},"404":{"description":"Unknown, revoked or unavailable named assignment"},"409":{"description":"Changed revision, source, original request or current authority; refresh for deliberate review"},"413":{"description":"JSON body exceeds32768bytes"},"415":{"description":"application/json required"}}}},"/day-of/{sharedWeddingId}/assignments/{bindingId}/photography/completion":{"post":{"summary":"Complete or reopen one permitted photograph using exact generation, fingerprint and progress revision","description":"Requires a current named Clerk session and X-Workspace-Id. Scoped business keys are rejected. Limited members may act only within explicitly assigned shared weddings and accepted named bindings; this does not grant private business records or paid seats. Responses are private no-store. Each source retains its own version; no atomic cross-domain or offline claim.","security":[{"bearerAuth":[]}],"x-authentication":"named-shared-wedding-member","x-max-body-bytes":32768,"parameters":[{"name":"sharedWeddingId","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":120}},{"name":"bindingId","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":120}},{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string","minLength":1,"maxLength":120}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"itemId":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},"generation":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"fingerprint":{"type":"string","pattern":"^[a-f0-9]{64}$"},"completed":{"type":"boolean"}},"required":["requestId","itemId","generation","expectedRevision","fingerprint","completed"],"additionalProperties":false}}}},"responses":{"200":{"description":"Current scoped result or unchanged original request receipt. No source capability or storage URL is returned.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid or duplicate query/body fields"},"401":{"description":"Current account session required"},"403":{"description":"Unattributed business keys are not accepted"},"404":{"description":"Unknown, revoked or unavailable named assignment"},"409":{"description":"Changed revision, source, original request or current authority; refresh for deliberate review"},"413":{"description":"JSON body exceeds32768bytes"},"415":{"description":"application/json required"}}}},"/day-of/{sharedWeddingId}/assignments/{bindingId}/catering":{"get":{"summary":"Read the exact named catering packet with bounded attendee pages; retained stale packets remain clearly identified","description":"Requires a current named Clerk session and X-Workspace-Id. Scoped business keys are rejected. Limited members may act only within explicitly assigned shared weddings and accepted named bindings; this does not grant private business records or paid seats. Responses are private no-store. Each source retains its own version; no atomic cross-domain or offline claim.","security":[{"bearerAuth":[]}],"x-authentication":"named-shared-wedding-member","x-max-body-bytes":32768,"parameters":[{"name":"sharedWeddingId","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":120}},{"name":"bindingId","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":120}},{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string","minLength":1,"maxLength":120}},{"name":"after","in":"query","required":false,"schema":{"type":"string","minLength":1,"maxLength":4000}},{"name":"limit","in":"query","required":false,"schema":{"default":30,"type":"integer","minimum":1,"maximum":50}},{"name":"summary","in":"query","required":false,"schema":{"default":false,"type":"boolean"}}],"responses":{"200":{"description":"Current scoped result or unchanged original request receipt. No source capability or storage URL is returned.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid or duplicate query/body fields"},"401":{"description":"Current account session required"},"403":{"description":"Unattributed business keys are not accepted"},"404":{"description":"Unknown, revoked or unavailable named assignment"},"409":{"description":"Changed revision, source, original request or current authority; refresh for deliberate review"},"413":{"description":"JSON body exceeds32768bytes"},"415":{"description":"application/json required"}}}},"/day-of/{sharedWeddingId}/assignments/{bindingId}/catering/acknowledge":{"post":{"summary":"Acknowledge one exact current packet and immutable note","description":"Requires a current named Clerk session and X-Workspace-Id. Scoped business keys are rejected. Limited members may act only within explicitly assigned shared weddings and accepted named bindings; this does not grant private business records or paid seats. Responses are private no-store. Each source retains its own version; no atomic cross-domain or offline claim.","security":[{"bearerAuth":[]}],"x-authentication":"named-shared-wedding-member","x-max-body-bytes":32768,"parameters":[{"name":"sharedWeddingId","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":120}},{"name":"bindingId","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":120}},{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string","minLength":1,"maxLength":120}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"packetId":{"type":"string","minLength":1,"maxLength":120},"snapshotHash":{"type":"string","pattern":"^[a-f0-9]{64}$"},"sourceHash":{"type":"string","pattern":"^[a-f0-9]{64}$"},"note":{"default":"","type":"string","maxLength":2000},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"approved":{"type":"boolean","const":true}},"required":["packetId","snapshotHash","sourceHash","requestId","approved"],"additionalProperties":false}}}},"responses":{"200":{"description":"Current scoped result or unchanged original request receipt. No source capability or storage URL is returned.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid or duplicate query/body fields"},"401":{"description":"Current account session required"},"403":{"description":"Unattributed business keys are not accepted"},"404":{"description":"Unknown, revoked or unavailable named assignment"},"409":{"description":"Changed revision, source, original request or current authority; refresh for deliberate review"},"413":{"description":"JSON body exceeds32768bytes"},"415":{"description":"application/json required"}}}},"/day-of/{sharedWeddingId}/assignments/{bindingId}/transport":{"get":{"summary":"Read the current acknowledged driver manifest and bounded passenger progress","description":"Requires a current named Clerk session and X-Workspace-Id. Scoped business keys are rejected. Limited members may act only within explicitly assigned shared weddings and accepted named bindings; this does not grant private business records or paid seats. Responses are private no-store. Each source retains its own version; no atomic cross-domain or offline claim.","security":[{"bearerAuth":[]}],"x-authentication":"named-shared-wedding-member","x-max-body-bytes":32768,"parameters":[{"name":"sharedWeddingId","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":120}},{"name":"bindingId","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":120}},{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string","minLength":1,"maxLength":120}},{"name":"after","in":"query","required":false,"schema":{"type":"string","minLength":1,"maxLength":4000}},{"name":"limit","in":"query","required":false,"schema":{"default":30,"type":"integer","minimum":1,"maximum":50}},{"name":"summary","in":"query","required":false,"schema":{"default":false,"type":"boolean"}}],"responses":{"200":{"description":"Current scoped result or unchanged original request receipt. No source capability or storage URL is returned.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid or duplicate query/body fields"},"401":{"description":"Current account session required"},"403":{"description":"Unattributed business keys are not accepted"},"404":{"description":"Unknown, revoked or unavailable named assignment"},"409":{"description":"Changed revision, source, original request or current authority; refresh for deliberate review"},"413":{"description":"JSON body exceeds32768bytes"},"415":{"description":"application/json required"}}}},"/day-of/{sharedWeddingId}/assignments/{bindingId}/transport/acknowledge":{"post":{"summary":"Acknowledge this exact current manifest","description":"Requires a current named Clerk session and X-Workspace-Id. Scoped business keys are rejected. Limited members may act only within explicitly assigned shared weddings and accepted named bindings; this does not grant private business records or paid seats. Responses are private no-store. Each source retains its own version; no atomic cross-domain or offline claim.","security":[{"bearerAuth":[]}],"x-authentication":"named-shared-wedding-member","x-max-body-bytes":32768,"parameters":[{"name":"sharedWeddingId","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":120}},{"name":"bindingId","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":120}},{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string","minLength":1,"maxLength":120}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"manifestId":{"type":"string","minLength":1,"maxLength":120},"snapshotHash":{"type":"string","pattern":"^[a-f0-9]{64}$"},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"approved":{"type":"boolean","const":true}},"required":["manifestId","snapshotHash","requestId","approved"],"additionalProperties":false}}}},"responses":{"200":{"description":"Current scoped result or unchanged original request receipt. No source capability or storage URL is returned.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid or duplicate query/body fields"},"401":{"description":"Current account session required"},"403":{"description":"Unattributed business keys are not accepted"},"404":{"description":"Unknown, revoked or unavailable named assignment"},"409":{"description":"Changed revision, source, original request or current authority; refresh for deliberate review"},"413":{"description":"JSON body exceeds32768bytes"},"415":{"description":"application/json required"}}}},"/day-of/{sharedWeddingId}/assignments/{bindingId}/transport/boarding":{"post":{"summary":"Record a rider status with prior manifest acknowledgment, boarding permission, open boarding state and rider revision","description":"Requires a current named Clerk session and X-Workspace-Id. Scoped business keys are rejected. Limited members may act only within explicitly assigned shared weddings and accepted named bindings; this does not grant private business records or paid seats. Responses are private no-store. Each source retains its own version; no atomic cross-domain or offline claim.","security":[{"bearerAuth":[]}],"x-authentication":"named-shared-wedding-member","x-max-body-bytes":32768,"parameters":[{"name":"sharedWeddingId","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":120}},{"name":"bindingId","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":120}},{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string","minLength":1,"maxLength":120}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"manifestId":{"type":"string","minLength":1,"maxLength":120},"sourceHash":{"type":"string","pattern":"^[a-f0-9]{64}$"},"riderId":{"type":"string","minLength":1,"maxLength":120},"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"status":{"type":"string","enum":["CHECKED_IN","BOARDED","RESERVED"]},"reason":{"type":"string","minLength":3,"maxLength":1000},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["manifestId","sourceHash","riderId","expectedRevision","status","reason","requestId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Current scoped result or unchanged original request receipt. No source capability or storage URL is returned.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid or duplicate query/body fields"},"401":{"description":"Current account session required"},"403":{"description":"Unattributed business keys are not accepted"},"404":{"description":"Unknown, revoked or unavailable named assignment"},"409":{"description":"Changed revision, source, original request or current authority; refresh for deliberate review"},"413":{"description":"JSON body exceeds32768bytes"},"415":{"description":"application/json required"}}}},"/day-of/{sharedWeddingId}/assignments/{bindingId}/photography/images/{assetId}":{"get":{"summary":"Read one exact permitted reference image with checksums and current authority repeated after bounded storage IO","description":"Requires a current named Clerk session and X-Workspace-Id. Scoped business keys are rejected. Limited members may act only within explicitly assigned shared weddings and accepted named bindings; this does not grant private business records or paid seats. Responses are private no-store. Each source retains its own version; no atomic cross-domain or offline claim.","security":[{"bearerAuth":[]}],"x-authentication":"named-shared-wedding-member","x-max-body-bytes":32768,"parameters":[{"name":"sharedWeddingId","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":120}},{"name":"bindingId","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":120}},{"name":"assetId","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":120}},{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string","minLength":1,"maxLength":120}}],"responses":{"200":{"description":"Verified JPEG, PNG, WebP or AVIF preview, at most20MiB; private no-store and nosniff. No signed storage redirect.","content":{"image/jpeg":{"schema":{"type":"string","format":"binary"}},"image/png":{"schema":{"type":"string","format":"binary"}},"image/webp":{"schema":{"type":"string","format":"binary"}},"image/avif":{"schema":{"type":"string","format":"binary"}}}},"404":{"description":"Image, source or current named access unavailable"}}},"head":{"summary":"Read permitted reference preview headers under the same current named authorization","description":"Requires a current named Clerk session and X-Workspace-Id. Scoped business keys are rejected. Limited members may act only within explicitly assigned shared weddings and accepted named bindings; this does not grant private business records or paid seats. Responses are private no-store. Each source retains its own version; no atomic cross-domain or offline claim.","security":[{"bearerAuth":[]}],"x-authentication":"named-shared-wedding-member","x-max-body-bytes":32768,"parameters":[{"name":"sharedWeddingId","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":120}},{"name":"bindingId","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":120}},{"name":"assetId","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":120}},{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string","minLength":1,"maxLength":120}}],"responses":{"200":{"description":"Current scoped result or unchanged original request receipt. No source capability or storage URL is returned.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid or duplicate query/body fields"},"401":{"description":"Current account session required"},"403":{"description":"Unattributed business keys are not accepted"},"404":{"description":"Unknown, revoked or unavailable named assignment"},"409":{"description":"Changed revision, source, original request or current authority; refresh for deliberate review"},"413":{"description":"JSON body exceeds32768bytes"},"415":{"description":"application/json required"}}}},"/projects/{id}/design/images":{"post":{"summary":"Upload a permitted reference directly to private storage; exact retries retain the source and metadata-free preview","description":"Named full workspace access required. Maximum 8 MiB and 60 megapixels. Binary source, requestId UUID, filename, rightsConfirmed=true query. An immutable original and normalized PNG preview are retained; only preview is selectable for review. Reuse the original request and bytes after an uncertain response. Never accepts remote URLs.","security":[{"bearerAuth":[]}],"x-authentication":"named-private-workspace-operator","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":100}},{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string","minLength":1,"maxLength":100}},{"name":"requestId","in":"query","required":true,"schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},{"name":"filename","in":"query","required":true,"schema":{"type":"string","minLength":1,"maxLength":160}},{"name":"rightsConfirmed","in":"query","required":true,"schema":{"type":"boolean","const":true}}],"responses":{"200":{"description":"Current private result or original saved revision; responses use private no-store.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input or source permission confirmation."},"401":{"description":"Current named account session required."},"403":{"description":"Unattributed business keys are rejected."},"404":{"description":"Foreign, missing or unavailable wedding/board."},"413":{"description":"Image exceeds 8 MiB."},"500":{"description":"Provider, changed source or save could not complete; reload and inspect the current revision before retrying."}},"requestBody":{"required":true,"content":{"application/octet-stream":{"schema":{"type":"string","format":"binary"}}}}}},"/projects/{id}/design/legacy":{"get":{"summary":"Page through retained earlier inspiration references and private recovery status","description":"Requires an attributable Clerk account session, X-Workspace-Id and current full workspace access. OAuth connection setup/disconnection requires an administrator. Guest and shared-wedding membership alone do not grant private design records.","security":[{"bearerAuth":[]}],"x-authentication":"named-private-workspace-operator","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":100}},{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string","minLength":1,"maxLength":100}},{"name":"page","in":"query","required":false,"schema":{"default":1,"type":"integer","minimum":1,"maximum":10000}}],"responses":{"200":{"description":"Current private result or original saved revision; responses use private no-store.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input or source permission confirmation."},"401":{"description":"Current named account session required."},"403":{"description":"Unattributed business keys are rejected."},"404":{"description":"Foreign, missing or unavailable wedding/board."},"413":{"description":"JSON body exceeds 200,000 bytes."},"500":{"description":"Provider, changed source or save could not complete; reload and inspect the current revision before retrying."}}},"post":{"summary":"Review and recover a retained legacy image, select a private replacement, or queue explicit public-copy cleanup","description":"Requires an attributable Clerk account session, X-Workspace-Id and current full workspace access. OAuth connection setup/disconnection requires an administrator. Guest and shared-wedding membership alone do not grant private design records.","security":[{"bearerAuth":[]}],"x-authentication":"named-private-workspace-operator","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":100}},{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string","minLength":1,"maxLength":100}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"imageId":{"type":"string","minLength":1,"maxLength":100},"reviewedHash":{"type":"string","minLength":64,"maxLength":64},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"confirmed":{"type":"boolean","const":true},"operation":{"type":"string","enum":["recover","replace","cleanup"]},"assetId":{"type":"string","minLength":1,"maxLength":100}},"required":["imageId","reviewedHash","requestId","confirmed","operation"],"additionalProperties":false}}}},"responses":{"200":{"description":"Current private result or original saved revision; responses use private no-store.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input or source permission confirmation."},"401":{"description":"Current named account session required."},"403":{"description":"Unattributed business keys are rejected."},"404":{"description":"Foreign, missing or unavailable wedding/board."},"413":{"description":"JSON body exceeds 200,000 bytes."},"500":{"description":"Provider, changed source or save could not complete; reload and inspect the current revision before retrying."}}}},"/projects/{id}/design":{"get":{"summary":"List design boards with pagination or read an immutable saved revision","description":"Requires an attributable Clerk account session, X-Workspace-Id and current full workspace access. OAuth connection setup/disconnection requires an administrator. Guest and shared-wedding membership alone do not grant private design records.","security":[{"bearerAuth":[]}],"x-authentication":"named-private-workspace-operator","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":100}},{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string","minLength":1,"maxLength":100}},{"name":"boardId","in":"query","required":false,"schema":{"type":"string","minLength":1,"maxLength":100}},{"name":"revision","in":"query","required":false,"schema":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991}},{"name":"page","in":"query","required":false,"schema":{"default":1,"type":"integer","exclusiveMinimum":0,"maximum":10000}},{"name":"limit","in":"query","required":false,"schema":{"default":20,"type":"integer","exclusiveMinimum":0,"maximum":50}}],"responses":{"200":{"description":"Current private result or original saved revision; responses use private no-store.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input or source permission confirmation."},"401":{"description":"Current named account session required."},"403":{"description":"Unattributed business keys are rejected."},"404":{"description":"Foreign, missing or unavailable wedding/board."},"413":{"description":"JSON body exceeds 200,000 bytes."},"500":{"description":"Provider, changed source or save could not complete; reload and inspect the current revision before retrying."}}},"post":{"summary":"Save a quiet design revision, create a bounded reviewer capability, comment, resolve or revoke without sending messages","description":"Requires an attributable Clerk account session, X-Workspace-Id and current full workspace access. OAuth connection setup/disconnection requires an administrator. Guest and shared-wedding membership alone do not grant private design records.","security":[{"bearerAuth":[]}],"x-authentication":"named-private-workspace-operator","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":100}},{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string","minLength":1,"maxLength":100}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","oneOf":[{"type":"object","properties":{"operation":{"type":"string","const":"save"},"data":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":100},"title":{"type":"string","minLength":1,"maxLength":160},"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"content":{"type":"object","properties":{"brief":{"type":"string","maxLength":4000},"cards":{"maxItems":100,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":100},"title":{"type":"string","minLength":1,"maxLength":160},"notes":{"type":"string","maxLength":3000},"sourceUrl":{"anyOf":[{"type":"string","const":""},{"type":"string","maxLength":2000,"format":"uri"}]},"assetId":{"anyOf":[{"type":"string","minLength":1,"maxLength":100},{"type":"null"}]},"palette":{"maxItems":10,"type":"array","items":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"}},"sectionId":{"anyOf":[{"type":"string","minLength":1,"maxLength":100},{"type":"null"}]},"attribution":{"type":"string","maxLength":300},"pinterest":{"type":"object","properties":{"pinId":{"type":"string","pattern":"^\\d{1,40}$"},"boardId":{"type":"string","pattern":"^\\d{1,40}$"},"importedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"}},"required":["pinId","boardId","importedAt"],"additionalProperties":false}},"required":["id","title","notes","sourceUrl","assetId","palette"],"additionalProperties":false}},"sections":{"maxItems":20,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":100},"title":{"type":"string","minLength":1,"maxLength":100},"description":{"type":"string","maxLength":1000}},"required":["id","title","description"],"additionalProperties":false}}},"required":["brief","cards"],"additionalProperties":false},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["title","expectedRevision","content","requestId"],"additionalProperties":false}},"required":["operation","data"]},{"type":"object","properties":{"operation":{"type":"string","const":"share"},"boardId":{"type":"string","minLength":1},"data":{"type":"object","properties":{"expectedRevision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"label":{"type":"string","minLength":1,"maxLength":120},"canApprove":{"type":"boolean"},"expiresAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"token":{"type":"string","pattern":"^[0-9a-f]{64}$"}},"required":["expectedRevision","label","canApprove","expiresAt","requestId","token"],"additionalProperties":false}},"required":["operation","boardId","data"]},{"type":"object","properties":{"operation":{"type":"string","const":"comment"},"boardId":{"type":"string","minLength":1},"data":{"type":"object","properties":{"revision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"cardId":{"anyOf":[{"type":"string","minLength":1,"maxLength":100},{"type":"null"}]},"body":{"type":"string","minLength":1,"maxLength":3000},"name":{"type":"string","minLength":1,"maxLength":120},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["revision","cardId","body","name","requestId"],"additionalProperties":false}},"required":["operation","boardId","data"]},{"type":"object","properties":{"operation":{"type":"string","const":"revoke"},"boardId":{"type":"string","minLength":1},"data":{"type":"object","properties":{"id":{"type":"string","minLength":1},"expectedRevision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991}},"required":["id","expectedRevision"]}},"required":["operation","boardId","data"]},{"type":"object","properties":{"operation":{"type":"string","const":"resolve"},"boardId":{"type":"string","minLength":1},"data":{"type":"object","properties":{"id":{"type":"string","minLength":1},"expectedRevision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991}},"required":["id","expectedRevision"]}},"required":["operation","boardId","data"]}]}}}},"responses":{"200":{"description":"Current private result or original saved revision; responses use private no-store.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input or source permission confirmation."},"401":{"description":"Current named account session required."},"403":{"description":"Unattributed business keys are rejected."},"404":{"description":"Foreign, missing or unavailable wedding/board."},"413":{"description":"JSON body exceeds 200,000 bytes."},"500":{"description":"Provider, changed source or save could not complete; reload and inspect the current revision before retrying."}}}},"/projects/{id}/design/pinterest":{"get":{"summary":"Browse authorized Pinterest boards or board Pins with an opaque provider bookmark","description":"Requires an attributable Clerk account session, X-Workspace-Id and current full workspace access. OAuth connection setup/disconnection requires an administrator. Guest and shared-wedding membership alone do not grant private design records.","security":[{"bearerAuth":[]}],"x-authentication":"named-private-workspace-operator","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":100}},{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string","minLength":1,"maxLength":100}},{"name":"boardId","in":"query","required":false,"schema":{"type":"string","pattern":"^\\d{1,40}$"}},{"name":"bookmark","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}]}}],"responses":{"200":{"description":"Current private result or original saved revision; responses use private no-store.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input or source permission confirmation."},"401":{"description":"Current named account session required."},"403":{"description":"Unattributed business keys are rejected."},"404":{"description":"Foreign, missing or unavailable wedding/board."},"413":{"description":"JSON body exceeds 200,000 bytes."},"500":{"description":"Provider, changed source or save could not complete; reload and inspect the current revision before retrying."}}},"post":{"summary":"Import up to ten authorized Pins into reviewable draft references; optional verified private JPEG snapshots require image rights confirmation and a reviewed usage cap","description":"Requires an attributable Clerk account session, X-Workspace-Id and current full workspace access. OAuth connection setup/disconnection requires an administrator. Guest and shared-wedding membership alone do not grant private design records.","security":[{"bearerAuth":[]}],"x-authentication":"named-private-workspace-operator","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":100}},{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string","minLength":1,"maxLength":100}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"boardId":{"type":"string","pattern":"^\\d{1,40}$"},"pinIds":{"minItems":1,"maxItems":10,"type":"array","items":{"type":"string","pattern":"^\\d{1,40}$"}},"includeImages":{"type":"boolean"},"allowedToUseImages":{"type":"boolean"},"maxChargeCents":{"type":"integer","minimum":0,"maximum":100000}},"required":["boardId","pinIds","includeImages","allowedToUseImages","maxChargeCents"],"additionalProperties":false}}}},"responses":{"200":{"description":"Current private result or original saved revision; responses use private no-store.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input or source permission confirmation."},"401":{"description":"Current named account session required."},"403":{"description":"Unattributed business keys are rejected."},"404":{"description":"Foreign, missing or unavailable wedding/board."},"413":{"description":"JSON body exceeds 200,000 bytes."},"500":{"description":"Provider, changed source or save could not complete; reload and inspect the current revision before retrying."}}}},"/projects/{id}/design/pinterest/imports":{"get":{"summary":"Recover a retained private Pinterest import by jobId, or page through wedding import history","description":"Requires an attributable Clerk account session, X-Workspace-Id and current full workspace access. OAuth connection setup/disconnection requires an administrator. Guest and shared-wedding membership alone do not grant private design records.","security":[{"bearerAuth":[]}],"x-authentication":"named-private-workspace-operator","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":100}},{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string","minLength":1,"maxLength":100}},{"name":"jobId","in":"query","required":false,"schema":{"type":"string","minLength":1,"maxLength":100}},{"name":"page","in":"query","required":false,"schema":{"default":1,"type":"integer","minimum":1,"maximum":1000}}],"responses":{"200":{"description":"Current private result or original saved revision; responses use private no-store.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input or source permission confirmation."},"401":{"description":"Current named account session required."},"403":{"description":"Unattributed business keys are rejected."},"404":{"description":"Foreign, missing or unavailable wedding/board."},"413":{"description":"JSON body exceeds 200,000 bytes."},"500":{"description":"Provider, changed source or save could not complete; reload and inspect the current revision before retrying."}}},"post":{"summary":"Queue up to 100 selected Pins, advance one saved step, or revision-check pause/resume; exact request retries preserve partial results and reviewed image charges","description":"Requires an attributable Clerk account session, X-Workspace-Id and current full workspace access. OAuth connection setup/disconnection requires an administrator. Guest and shared-wedding membership alone do not grant private design records.","security":[{"bearerAuth":[]}],"x-authentication":"named-private-workspace-operator","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":100}},{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string","minLength":1,"maxLength":100}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","oneOf":[{"type":"object","properties":{"operation":{"type":"string","const":"start"},"input":{"type":"object","properties":{"boardId":{"type":"string","pattern":"^\\d{1,40}$"},"pinIds":{"minItems":1,"maxItems":100,"type":"array","items":{"type":"string","pattern":"^\\d{1,40}$"}},"includeImages":{"type":"boolean"},"allowedToUseImages":{"type":"boolean"},"maxChargeCents":{"type":"integer","minimum":0,"maximum":100000},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["boardId","pinIds","includeImages","allowedToUseImages","maxChargeCents","requestId"],"additionalProperties":false}},"required":["operation","input"]},{"type":"object","properties":{"operation":{"type":"string","const":"advance"},"input":{"type":"object","properties":{"jobId":{"type":"string","minLength":1,"maxLength":100}},"required":["jobId"],"additionalProperties":false}},"required":["operation","input"]},{"type":"object","properties":{"operation":{"type":"string","const":"pause"},"input":{"type":"object","properties":{"jobId":{"type":"string","minLength":1,"maxLength":100},"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["jobId","expectedRevision","requestId"],"additionalProperties":false}},"required":["operation","input"]},{"type":"object","properties":{"operation":{"type":"string","const":"resume"},"input":{"type":"object","properties":{"jobId":{"type":"string","minLength":1,"maxLength":100},"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["jobId","expectedRevision","requestId"],"additionalProperties":false}},"required":["operation","input"]}]}}}},"responses":{"200":{"description":"Current private result or original saved revision; responses use private no-store.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input or source permission confirmation."},"401":{"description":"Current named account session required."},"403":{"description":"Unattributed business keys are rejected."},"404":{"description":"Foreign, missing or unavailable wedding/board."},"413":{"description":"JSON body exceeds 200,000 bytes."},"500":{"description":"Provider, changed source or save could not complete; reload and inspect the current revision before retrying."}}}},"/workflows/control":{"get":{"security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Current authorized result, or exact mutation replay. Private no-store."},"400":{"description":"Invalid request."},"401":{"description":"Sign in or reconnect."},"403":{"description":"Required current permission missing."},"404":{"description":"Unavailable or foreign record."},"409":{"description":"Revision, original content or authority changed. Reload and explicitly review."}},"x-authentication":"named-account-session","description":"Named Clerk account session required; unattributed business API keys are rejected. Current private-workspace authority is rechecked.","summary":"Review workspace automation switch and pending work; owner/admin only"},"post":{"security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Current authorized result, or exact mutation replay. Private no-store."},"400":{"description":"Invalid request."},"401":{"description":"Sign in or reconnect."},"403":{"description":"Required current permission missing."},"404":{"description":"Unavailable or foreign record."},"409":{"description":"Revision, original content or authority changed. Reload and explicitly review."}},"x-authentication":"named-account-session","description":"Named Clerk account session required; unattributed business API keys are rejected. Current private-workspace authority is rechecked.","summary":"Apply the exact reviewed workspace pause or resume; original run positions and delivery receipts retained","requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"enabled":{"type":"boolean"},"reason":{"type":"string","minLength":3,"maxLength":300},"reviewedHash":{"type":"string","pattern":"^[a-f0-9]{64}$"},"approved":{"type":"boolean","const":true}},"required":["requestId","expectedRevision","enabled","reason","reviewedHash","approved"],"additionalProperties":false}}}}}},"/companion/crm":{"get":{"security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string"}},{"name":"kind","in":"query","required":true,"schema":{"type":"string"}},{"name":"id","in":"query","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Current authorized result, or exact mutation replay. Private no-store."},"400":{"description":"Invalid request."},"401":{"description":"Sign in or reconnect."},"403":{"description":"Required current permission missing."},"404":{"description":"Unavailable or foreign record."},"409":{"description":"Revision, original content or authority changed. Reload and explicitly review."}},"summary":"Read current private lead/client fields and CRM revision"},"post":{"security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Current authorized result, or exact mutation replay. Private no-store."},"400":{"description":"Invalid request."},"401":{"description":"Sign in or reconnect."},"403":{"description":"Required current permission missing."},"404":{"description":"Unavailable or foreign record."},"409":{"description":"Revision, original content or authority changed. Reload and explicitly review."}},"summary":"Create or edit a private relationship through existing CRM services with reviewed revision and idempotency","requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","oneOf":[{"type":"object","properties":{"operation":{"type":"string","const":"create"},"kind":{"type":"string","enum":["LEAD","CLIENT"]},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"fields":{"type":"object","propertyNames":{"type":"string","maxLength":80},"additionalProperties":{"type":"string","maxLength":12000}},"approved":{"type":"boolean","const":true}},"required":["operation","kind","requestId","fields","approved"],"additionalProperties":false},{"type":"object","properties":{"operation":{"type":"string","const":"edit"},"kind":{"type":"string","enum":["LEAD","CLIENT"]},"id":{"type":"string","minLength":1,"maxLength":100},"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"fields":{"type":"object","propertyNames":{"type":"string","maxLength":80},"additionalProperties":{"type":"string","maxLength":12000}},"approved":{"type":"boolean","const":true}},"required":["operation","kind","id","expectedRevision","requestId","fields","approved"],"additionalProperties":false}]}}}}}},"/companion/guests":{"get":{"security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string"}},{"name":"weddingId","in":"query","required":true,"schema":{"type":"string"}},{"name":"id","in":"query","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Current authorized result, or exact mutation replay. Private no-store."},"400":{"description":"Invalid request."},"401":{"description":"Sign in or reconnect."},"403":{"description":"Required current permission missing."},"404":{"description":"Unavailable or foreign record."},"409":{"description":"Revision, original content or authority changed. Reload and explicitly review."}},"summary":"Read current guest and managed-RSVP state with a content hash"},"post":{"security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Current authorized result, or exact mutation replay. Private no-store."},"400":{"description":"Invalid request."},"401":{"description":"Sign in or reconnect."},"403":{"description":"Required current permission missing."},"404":{"description":"Unavailable or foreign record."},"409":{"description":"Revision, original content or authority changed. Reload and explicitly review."}},"summary":"Apply a reviewed guest edit; conflict if seating, household or RSVP authority changed","requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"weddingId":{"type":"string","minLength":1,"maxLength":100},"id":{"type":"string","minLength":1,"maxLength":100},"expectedHash":{"type":"string","pattern":"^[a-f0-9]{64}$"},"fields":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":200},"rsvp":{"type":"string","enum":["INVITED","ATTENDING","DECLINED","MAYBE"]},"mealChoice":{"type":"string","maxLength":200},"dietary":{"type":"string","maxLength":2000},"household":{"type":"string","maxLength":200}},"required":["name","rsvp","mealChoice","dietary","household"],"additionalProperties":false},"approved":{"type":"boolean","const":true}},"required":["requestId","weddingId","id","expectedHash","fields","approved"],"additionalProperties":false}}}}}},"/companion/tasks":{"post":{"security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Current authorized result, or exact mutation replay. Private no-store."},"400":{"description":"Invalid request."},"401":{"description":"Sign in or reconnect."},"403":{"description":"Required current permission missing."},"404":{"description":"Unavailable or foreign record."},"409":{"description":"Revision, original content or authority changed. Reload and explicitly review."}},"summary":"Create or edit a project task, due date, notes or completion against its reviewed revision","requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"weddingId":{"type":"string","minLength":1,"maxLength":100},"id":{"type":"string","minLength":1,"maxLength":100},"expectedRevision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"title":{"type":"string","minLength":1,"maxLength":180},"notes":{"type":"string","maxLength":4000},"dueDate":{"anyOf":[{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},{"type":"null"}]},"done":{"type":"boolean"},"approved":{"type":"boolean","const":true}},"required":["requestId","weddingId","title","notes","dueDate","done","approved"],"additionalProperties":false}}}}}},"/companion/conversations":{"get":{"security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string"}},{"name":"id","in":"query","required":true,"schema":{"type":"string"}},{"name":"before","in":"query","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Current authorized result, or exact mutation replay. Private no-store."},"400":{"description":"Invalid request."},"401":{"description":"Sign in or reconnect."},"403":{"description":"Required current permission missing."},"404":{"description":"Unavailable or foreign record."},"409":{"description":"Revision, original content or authority changed. Reload and explicitly review."}},"summary":"Page private email history and authorized ready email attachments"}},"/companion/push-target":{"get":{"security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string"}},{"name":"projectId","in":"query","required":false,"schema":{"type":"string"}},{"name":"aggregateId","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Current authorized result, or exact mutation replay. Private no-store."},"400":{"description":"Invalid request."},"401":{"description":"Sign in or reconnect."},"403":{"description":"Required current permission missing."},"404":{"description":"Unavailable or foreign record."},"409":{"description":"Revision, original content or authority changed. Reload and explicitly review."}},"summary":"Resolve a notification’s exact project after current authorization; provide projectId or coordination aggregateId"}},"/companion/invitations":{"post":{"security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Current authorized result, or exact mutation replay. Private no-store."},"400":{"description":"Invalid request."},"401":{"description":"Sign in or reconnect."},"403":{"description":"Required current permission missing."},"404":{"description":"Unavailable or foreign record."},"409":{"description":"Revision, original content or authority changed. Reload and explicitly review."}},"x-authentication":"named-account-session","description":"Current verified account email must match the invitation. Preview requires no selected workspace. Wedding acceptance requires X-Workspace-Id for an existing workspace. No billable seat is inferred.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","oneOf":[{"type":"object","properties":{"operation":{"type":"string","const":"preview"},"data":{"type":"object","properties":{"kind":{"type":"string","enum":["WORKSPACE","WEDDING"]},"token":{"type":"string","pattern":"^[a-zA-Z0-9_-]{43}$"}},"required":["kind","token"],"additionalProperties":false}},"required":["operation","data"],"additionalProperties":false},{"type":"object","properties":{"operation":{"type":"string","const":"accept"},"data":{"type":"object","properties":{"kind":{"type":"string","enum":["WORKSPACE","WEDDING"]},"token":{"type":"string","pattern":"^[a-zA-Z0-9_-]{43}$"},"reviewedHash":{"type":"string","pattern":"^[a-f0-9]{64}$"},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"approved":{"type":"boolean","const":true}},"required":["kind","token","reviewedHash","requestId","approved"],"additionalProperties":false}},"required":["operation","data"],"additionalProperties":false}]}}}}}},"/shared-conversations/{id}/files/{attachmentId}":{"get":{"security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"attachmentId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Current authorized result, or exact mutation replay. Private no-store."},"400":{"description":"Invalid request."},"401":{"description":"Sign in or reconnect."},"403":{"description":"Required current permission missing."},"404":{"description":"Unavailable or foreign record."},"409":{"description":"Revision, original content or authority changed. Reload and explicitly review."}},"x-authentication":"named-account-session","description":"Named Clerk account session required; unattributed business API keys are rejected. Current private-workspace authority is rechecked.","summary":"Return a short-lived private file URL only to a currently authorized thread participant"}},"/booking-journeys/{id}/signers":{"post":{"security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Current authorized result, or exact mutation replay. Private no-store."},"400":{"description":"Invalid request."},"401":{"description":"Sign in or reconnect."},"403":{"description":"Required current permission missing."},"404":{"description":"Unavailable or foreign record."},"409":{"description":"Revision, original content or authority changed. Reload and explicitly review."}},"x-authentication":"named-account-session","description":"Named Clerk account session required; unattributed business API keys are rejected. Current private-workspace authority is rechecked.","summary":"Issue, replace or revoke one reviewed secondary signer capability while retaining executed evidence","requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"recipientId":{"type":"string","minLength":1,"maxLength":200},"expectedRevision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"expectedGeneration":{"type":"integer","minimum":0,"maximum":9007199254740991},"expectedEmail":{"type":"string","format":"email","pattern":"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"token":{"anyOf":[{"type":"string","pattern":"^[a-f0-9]{64}$"},{"type":"null"}]},"reason":{"type":"string","minLength":3,"maxLength":1000},"approved":{"type":"boolean","const":true}},"required":["recipientId","expectedRevision","expectedGeneration","expectedEmail","requestId","token","reason","approved"],"additionalProperties":false}}}}}},"/booking-journeys/workflow-artifacts/{id}":{"get":{"security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Current authorized result, or exact mutation replay. Private no-store."},"400":{"description":"Invalid request."},"401":{"description":"Sign in or reconnect."},"403":{"description":"Required current permission missing."},"404":{"description":"Unavailable or foreign record."},"409":{"description":"Revision, original content or authority changed. Reload and explicitly review."}},"x-authentication":"named-account-session","description":"Named Clerk account session required; unattributed business API keys are rejected. Current private-workspace authority is rechecked.","summary":"Review the current named recipient and expiry of a prepared booking invitation"},"post":{"security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Current authorized result, or exact mutation replay. Private no-store."},"400":{"description":"Invalid request."},"401":{"description":"Sign in or reconnect."},"403":{"description":"Required current permission missing."},"404":{"description":"Unavailable or foreign record."},"409":{"description":"Revision, original content or authority changed. Reload and explicitly review."}},"x-authentication":"named-account-session","description":"Named Clerk account session required; unattributed business API keys are rejected. Current private-workspace authority is rechecked.","summary":"Reveal the exact approved invitation; revoked, replaced, expired or stale authority is rejected","requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"expectedSourceHash":{"type":"string","pattern":"^[a-f0-9]{64}$"},"approved":{"type":"boolean","const":true}},"required":["requestId","expectedSourceHash","approved"],"additionalProperties":false}}}}}},"/scheduling/events/followups":{"post":{"security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string"}}],"x-authentication":"named-account-session","responses":{"200":{"description":"Current result or exact mutation replay; no-store."},"400":{"description":"Invalid input."},"403":{"description":"Named account required."},"404":{"description":"Foreign, unpublished or unavailable record."},"409":{"description":"Changed revision, funding or capacity; review again."},"429":{"description":"Rate limit reached."}},"summary":"Retry a failed original post-confirmation workflow enrollment after reviewing its current error; owner/admin only","requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"deliveryId":{"type":"string","minLength":1,"maxLength":100},"expectedAttempts":{"type":"integer","minimum":0,"maximum":9007199254740991},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"approved":{"type":"boolean","const":true}},"required":["deliveryId","expectedAttempts","requestId","approved"],"additionalProperties":false}}}}}},"/scheduling/events":{"get":{"security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string"}},{"name":"after","in":"query","schema":{"type":"string"}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":30}}],"x-authentication":"named-account-session","responses":{"200":{"description":"Current result or exact mutation replay; no-store."},"400":{"description":"Invalid input."},"403":{"description":"Named account required."},"404":{"description":"Foreign, unpublished or unavailable record."},"409":{"description":"Changed revision, funding or capacity; review again."},"429":{"description":"Rate limit reached."}},"summary":"Page owned mini-session event pages and bounded available slot choices"},"post":{"security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string"}}],"x-authentication":"named-account-session","responses":{"200":{"description":"Current result or exact mutation replay; no-store."},"400":{"description":"Invalid input."},"403":{"description":"Named account required."},"404":{"description":"Foreign, unpublished or unavailable record."},"409":{"description":"Changed revision, funding or capacity; review again."},"429":{"description":"Rate limit reached."}},"summary":"Save a reviewed event page and exact slot order; individual slot terms and reservations remain unchanged","requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":100},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"title":{"type":"string","minLength":2,"maxLength":160},"description":{"type":"string","maxLength":4000},"followup":{"anyOf":[{"type":"object","properties":{"workflowId":{"type":"string","minLength":1,"maxLength":100},"revision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"graphHash":{"type":"string","pattern":"^[a-f0-9]{64}$"}},"required":["workflowId","revision","graphHash"],"additionalProperties":false},{"type":"null"}]},"journey":{"anyOf":[{"type":"object","properties":{"versionId":{"type":"string","minLength":1,"maxLength":200},"versionHash":{"type":"string","pattern":"^[a-f0-9]{64}$"}},"required":["versionId","versionHash"],"additionalProperties":false},{"type":"null"}]},"sessionIds":{"minItems":1,"maxItems":100,"type":"array","items":{"type":"string","minLength":1,"maxLength":100}},"published":{"type":"boolean"},"allowTransfers":{"type":"boolean"},"transferCutoffMinutes":{"type":"integer","minimum":0,"maximum":10080},"approved":{"type":"boolean","const":true}},"required":["requestId","expectedRevision","title","description","sessionIds","published","allowTransfers","transferCutoffMinutes","approved"],"additionalProperties":false}}}}}},"/scheduling/events/{id}":{"get":{"security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"x-authentication":"named-account-session","responses":{"200":{"description":"Current result or exact mutation replay; no-store."},"400":{"description":"Invalid input."},"403":{"description":"Named account required."},"404":{"description":"Foreign, unpublished or unavailable record."},"409":{"description":"Changed revision, funding or capacity; review again."},"429":{"description":"Rate limit reached."}},"summary":"Read one private mini-session event editor with every selected slot"}},"/scheduling/events/public/{token}":{"get":{"security":[],"parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Current result or exact mutation replay; no-store."},"400":{"description":"Invalid input."},"403":{"description":"Named account required."},"404":{"description":"Foreign, unpublished or unavailable record."},"409":{"description":"Changed revision, funding or capacity; review again."},"429":{"description":"Rate limit reached."}},"summary":"Read only published event times, public descriptions, prices and remaining capacity; no attendee data"}},"/scheduling/mini-transfers":{"post":{"security":[],"responses":{"200":{"description":"Current result or exact mutation replay; no-store."},"400":{"description":"Invalid input."},"403":{"description":"Named account required."},"404":{"description":"Foreign, unpublished or unavailable record."},"409":{"description":"Changed revision, funding or capacity; review again."},"429":{"description":"Rate limit reached."}},"summary":"Use a private reservation capability to list, review or approve one compatible slot transfer","description":"Treat the body token as a secret and redact it from logs. Approval requires the exact preview hash and stable requestId. Transfers preserve the original invoices and due dates, take no new payment and fail closed on unavailable capacity, changed authority or funding. A network or 5xx result must retry the identical command.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","oneOf":[{"type":"object","properties":{"operation":{"type":"string","const":"options"},"data":{"type":"object","properties":{"token":{"type":"string","pattern":"^[a-f0-9]{48}$"}},"required":["token"],"additionalProperties":false}},"required":["operation","data"],"additionalProperties":false},{"type":"object","properties":{"operation":{"type":"string","const":"preview"},"data":{"type":"object","properties":{"token":{"type":"string","pattern":"^[a-f0-9]{48}$"},"targetSessionId":{"type":"string","minLength":1,"maxLength":100}},"required":["token","targetSessionId"],"additionalProperties":false}},"required":["operation","data"],"additionalProperties":false},{"type":"object","properties":{"operation":{"type":"string","const":"apply"},"data":{"type":"object","properties":{"token":{"type":"string","pattern":"^[a-f0-9]{48}$"},"targetSessionId":{"type":"string","minLength":1,"maxLength":100},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"reviewedHash":{"type":"string","pattern":"^[a-f0-9]{64}$"},"approved":{"type":"boolean","const":true}},"required":["token","targetSessionId","requestId","reviewedHash","approved"],"additionalProperties":false}},"required":["operation","data"],"additionalProperties":false}]}}}}}},"/files":{"get":{"security":[{"bearerAuth":[]}],"x-authentication":"named-private-workspace-operator","description":"Requires a named account session, X-Workspace-Id and current full workspace access. Shared wedding or guest access does not grant these private records. All responses are private/no-store.","responses":{"200":{"description":"Authorized result, or replay of the same exact request."},"400":{"description":"Invalid or oversized fields."},"401":{"description":"Sign in with a named account session."},"403":{"description":"Unattributed API keys cannot edit document history."},"404":{"description":"Unknown, foreign, isolated-purpose or unavailable file."},"413":{"description":"Upload or request exceeds its bound."}},"summary":"Search private files by name, label or project; page through active documents, archive or assets","parameters":[{"name":"q","in":"query","schema":{"default":"","type":"string","maxLength":120}},{"name":"weddingId","in":"query","schema":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"}},{"name":"folderId","in":"query","schema":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"}},{"name":"unfiled","in":"query","schema":{"default":false,"type":"boolean"}},{"name":"view","in":"query","schema":{"default":"active","type":"string","enum":["active","archived","assets"]}},{"name":"page","in":"query","schema":{"default":1,"type":"integer","minimum":1,"maximum":10000}},{"name":"limit","in":"query","schema":{"default":30,"type":"integer","minimum":1,"maximum":50}}]}},"/documents/{id}":{"get":{"security":[{"bearerAuth":[]}],"x-authentication":"named-private-workspace-operator","description":"Requires a named account session, X-Workspace-Id and current full workspace access. Shared wedding or guest access does not grant these private records. All responses are private/no-store.","responses":{"200":{"description":"Authorized result, or replay of the same exact request."},"400":{"description":"Invalid or oversized fields."},"401":{"description":"Sign in with a named account session."},"403":{"description":"Unattributed API keys cannot edit document history."},"404":{"description":"Unknown, foreign, isolated-purpose or unavailable file."},"413":{"description":"Upload or request exceeds its bound."}},"summary":"Read paginated immutable file history; download=true returns the exact authorized current or requested revision URL","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"page","in":"query","schema":{"type":"integer","minimum":1}},{"name":"download","in":"query","schema":{"type":"boolean"}},{"name":"revision","in":"query","schema":{"type":"integer","minimum":1}}]},"post":{"security":[{"bearerAuth":[]}],"x-authentication":"named-private-workspace-operator","description":"Requires a named account session, X-Workspace-Id and current full workspace access. Shared wedding or guest access does not grant these private records. All responses are private/no-store.","responses":{"200":{"description":"Authorized result, or replay of the same exact request."},"400":{"description":"Invalid or oversized fields."},"401":{"description":"Sign in with a named account session."},"403":{"description":"Unattributed API keys cannot edit document history."},"404":{"description":"Unknown, foreign, isolated-purpose or unavailable file."},"413":{"description":"Upload or request exceeds its bound."}},"summary":"Rename, restore as a new revision, archive or recover with revision and idempotency protection","requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","oneOf":[{"type":"object","properties":{"weddingId":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"expectedRevision":{"type":"integer","minimum":0,"maximum":2000000000},"id":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},"operation":{"type":"string","const":"rename"},"label":{"type":"string","minLength":1,"maxLength":120},"note":{"default":"","type":"string","maxLength":1000}},"required":["weddingId","requestId","expectedRevision","id","operation","label"],"additionalProperties":false},{"type":"object","properties":{"weddingId":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"expectedRevision":{"type":"integer","minimum":0,"maximum":2000000000},"id":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},"operation":{"type":"string","const":"restore"},"sourceRevision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"note":{"default":"","type":"string","maxLength":1000}},"required":["weddingId","requestId","expectedRevision","id","operation","sourceRevision"],"additionalProperties":false},{"type":"object","properties":{"weddingId":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"expectedRevision":{"type":"integer","minimum":0,"maximum":2000000000},"id":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},"operation":{"type":"string","const":"archive"},"note":{"default":"","type":"string","maxLength":1000}},"required":["weddingId","requestId","expectedRevision","id","operation"],"additionalProperties":false},{"type":"object","properties":{"weddingId":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"expectedRevision":{"type":"integer","minimum":0,"maximum":2000000000},"id":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},"operation":{"type":"string","const":"recover"},"note":{"default":"","type":"string","maxLength":1000}},"required":["weddingId","requestId","expectedRevision","id","operation"],"additionalProperties":false}]}}}}}},"/projects/{id}/documents":{"post":{"security":[{"bearerAuth":[]}],"x-authentication":"named-private-workspace-operator","description":"Requires a named account session, X-Workspace-Id and current full workspace access. Shared wedding or guest access does not grant these private records. All responses are private/no-store.","responses":{"200":{"description":"Authorized result, or replay of the same exact request."},"400":{"description":"Invalid or oversized fields."},"401":{"description":"Sign in with a named account session."},"403":{"description":"Unattributed API keys cannot edit document history."},"404":{"description":"Unknown, foreign, isolated-purpose or unavailable file."},"413":{"description":"Upload or request exceeds its bound."}},"summary":"Upload or replace a private project document with a verified original and preserved history","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","required":["file","requestId","expectedRevision"],"properties":{"file":{"type":"string","format":"binary","description":"Supported planning documents and images, max 9MiB."},"requestId":{"type":"string","format":"uuid"},"expectedRevision":{"type":"integer","minimum":0},"id":{"type":"string","description":"Existing document ID for replacement; omitted for new uploads."},"label":{"type":"string","maxLength":120},"note":{"type":"string","maxLength":1000}}}}}}}},"/projects/{id}/layouts/{planId}/recovery":{"post":{"summary":"Review an earlier layout, explicitly remap retired links and restore geometry with seating into a new private draft","description":"Named active account with full access to the owning workspace required. Foreign records return 404. Shared-wedding participation alone grants no private gift or website access. Responses are private, no-store.","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string"}},{"name":"planId","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","oneOf":[{"type":"object","properties":{"kind":{"type":"string","const":"preview"},"input":{"type":"object","properties":{"weddingId":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},"id":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},"sourceRevision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"expectedRevision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"mappings":{"maxItems":1000,"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","enum":["GUEST","RESOURCE","VENDOR","TASK","BUDGET","RESERVATION"]},"sourceId":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},"replacementId":{"anyOf":[{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},{"type":"null"}]}},"required":["kind","sourceId","replacementId"],"additionalProperties":false}}},"required":["weddingId","id","sourceRevision","expectedRevision","mappings"],"additionalProperties":false}},"required":["kind","input"]},{"type":"object","properties":{"kind":{"type":"string","const":"apply"},"input":{"type":"object","properties":{"weddingId":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},"id":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},"sourceRevision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"expectedRevision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"mappings":{"maxItems":1000,"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","enum":["GUEST","RESOURCE","VENDOR","TASK","BUDGET","RESERVATION"]},"sourceId":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},"replacementId":{"anyOf":[{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},{"type":"null"}]}},"required":["kind","sourceId","replacementId"],"additionalProperties":false}},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"reviewHash":{"type":"string","pattern":"^[a-f0-9]{64}$"},"confirmed":{"type":"boolean","const":true}},"required":["weddingId","id","sourceRevision","expectedRevision","mappings","requestId","reviewHash","confirmed"],"additionalProperties":false}},"required":["kind","input"]}]}}}},"responses":{"200":{"description":"Current authorized result or idempotently replayed mutation."},"400":{"description":"Invalid field, explicit confirmation or selected source."},"401":{"description":"Named account session required."},"403":{"description":"Anonymous business key cannot attribute this mutation."},"404":{"description":"Unavailable workspace or record."},"409":{"description":"Current revision or exact reviewed source changed."}}}},"/projects/{id}/gifts":{"get":{"summary":"Search private received gifts and thank-you status with pagination","description":"Named active account with full access to the owning workspace required. Foreign records return 404. Shared-wedding participation alone grants no private gift or website access. Responses are private, no-store.","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string"}},{"name":"q","in":"query","schema":{"default":"","type":"string","maxLength":160}},{"name":"status","in":"query","schema":{"default":"all","type":"string","enum":["all","to-write","drafted","sent","archived"]}},{"name":"page","in":"query","schema":{"default":1,"type":"integer","minimum":1,"maximum":10000}},{"name":"limit","in":"query","schema":{"default":25,"type":"integer","minimum":1,"maximum":50}}],"responses":{"200":{"description":"Current authorized result or idempotently replayed mutation."},"400":{"description":"Invalid field, explicit confirmation or selected source."},"401":{"description":"Named account session required."},"403":{"description":"Anonymous business key cannot attribute this mutation."},"404":{"description":"Unavailable workspace or record."},"409":{"description":"Current revision or exact reviewed source changed."}}},"post":{"summary":"Record, edit, archive, recover or track gifts; prepare an approved-address writing packet without sending","description":"Named active account with full access to the owning workspace required. Foreign records return 404. Shared-wedding participation alone grants no private gift or website access. Responses are private, no-store.","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","oneOf":[{"type":"object","properties":{"kind":{"type":"string","const":"command"},"input":{"oneOf":[{"type":"object","properties":{"weddingId":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"operation":{"type":"string","const":"create"},"fromName":{"type":"string","minLength":1,"maxLength":160},"description":{"anyOf":[{"type":"string","maxLength":3000},{"type":"null"}]},"value":{"anyOf":[{"type":"integer","minimum":0,"maximum":2000000000},{"type":"null"}]},"currency":{"type":"string","pattern":"^[A-Z]{3}$"},"receivedAt":{"anyOf":[{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},{"type":"null"}]},"notes":{"anyOf":[{"type":"string","maxLength":5000},{"type":"null"}]},"householdId":{"anyOf":[{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},{"type":"null"}]}},"required":["weddingId","requestId","operation","fromName","description","value","currency","receivedAt","notes","householdId"],"additionalProperties":false},{"type":"object","properties":{"weddingId":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"id":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"operation":{"type":"string","const":"edit"},"fromName":{"type":"string","minLength":1,"maxLength":160},"description":{"anyOf":[{"type":"string","maxLength":3000},{"type":"null"}]},"value":{"anyOf":[{"type":"integer","minimum":0,"maximum":2000000000},{"type":"null"}]},"currency":{"type":"string","pattern":"^[A-Z]{3}$"},"receivedAt":{"anyOf":[{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},{"type":"null"}]},"notes":{"anyOf":[{"type":"string","maxLength":5000},{"type":"null"}]},"householdId":{"anyOf":[{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},{"type":"null"}]}},"required":["weddingId","requestId","id","expectedRevision","operation","fromName","description","value","currency","receivedAt","notes","householdId"],"additionalProperties":false},{"type":"object","properties":{"weddingId":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"id":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"operation":{"type":"string","const":"archive"}},"required":["weddingId","requestId","id","expectedRevision","operation"],"additionalProperties":false},{"type":"object","properties":{"weddingId":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"id":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"operation":{"type":"string","const":"recover"}},"required":["weddingId","requestId","id","expectedRevision","operation"],"additionalProperties":false},{"type":"object","properties":{"weddingId":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"id":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"operation":{"type":"string","const":"thank-you"},"draft":{"type":"string","maxLength":5000},"sent":{"type":"boolean"},"method":{"anyOf":[{"type":"string","enum":["HANDWRITTEN","EMAIL","OTHER"]},{"type":"null"}]},"householdId":{"anyOf":[{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},{"type":"null"}]}},"required":["weddingId","requestId","id","expectedRevision","operation","draft","sent","method","householdId"],"additionalProperties":false},{"type":"object","properties":{"weddingId":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"operation":{"type":"string","const":"bulk-sent"},"gifts":{"minItems":1,"maxItems":50,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["id","expectedRevision"],"additionalProperties":false}},"method":{"type":"string","enum":["HANDWRITTEN","EMAIL","OTHER"]},"confirmed":{"type":"boolean","const":true}},"required":["weddingId","requestId","operation","gifts","method","confirmed"],"additionalProperties":false}]}},"required":["kind","input"]},{"type":"object","properties":{"kind":{"type":"string","const":"packet"},"input":{"type":"object","properties":{"weddingId":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},"gifts":{"minItems":1,"maxItems":50,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["id","expectedRevision"],"additionalProperties":false}}},"required":["weddingId","gifts"],"additionalProperties":false}},"required":["kind","input"]}]}}}},"responses":{"200":{"description":"Current authorized result or idempotently replayed mutation."},"400":{"description":"Invalid field, explicit confirmation or selected source."},"401":{"description":"Named account session required."},"403":{"description":"Anonymous business key cannot attribute this mutation."},"404":{"description":"Unavailable workspace or record."},"409":{"description":"Current revision or exact reviewed source changed."}}}},"/projects/{id}/website/planning-import":{"get":{"summary":"Read selected-field candidates from published timeline and eligible hospitality records","description":"Named active account with full access to the owning workspace required. Foreign records return 404. Shared-wedding participation alone grants no private gift or website access. Responses are private, no-store.","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Current authorized result or idempotently replayed mutation."},"400":{"description":"Invalid field, explicit confirmation or selected source."},"401":{"description":"Named account session required."},"403":{"description":"Anonymous business key cannot attribute this mutation."},"404":{"description":"Unavailable workspace or record."},"409":{"description":"Current revision or exact reviewed source changed."}}},"post":{"summary":"Preview exact public cards or append an explicitly approved section to the quiet website draft","description":"Named active account with full access to the owning workspace required. Foreign records return 404. Shared-wedding participation alone grants no private gift or website access. Responses are private, no-store.","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","oneOf":[{"type":"object","properties":{"kind":{"type":"string","const":"preview"},"input":{"type":"object","properties":{"weddingId":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},"expectedRevision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"kind":{"type":"string","enum":["schedule","travel","party"]},"sourceIds":{"minItems":1,"maxItems":40,"type":"array","items":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"}},"title":{"type":"string","minLength":1,"maxLength":100}},"required":["weddingId","expectedRevision","kind","sourceIds","title"],"additionalProperties":false}},"required":["kind","input"]},{"type":"object","properties":{"kind":{"type":"string","const":"apply"},"input":{"type":"object","properties":{"weddingId":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},"expectedRevision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"kind":{"type":"string","enum":["schedule","travel","party"]},"sourceIds":{"minItems":1,"maxItems":40,"type":"array","items":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"}},"title":{"type":"string","minLength":1,"maxLength":100},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"reviewHash":{"type":"string","pattern":"^[a-f0-9]{64}$"},"confirmedPublicFields":{"type":"boolean","const":true}},"required":["weddingId","expectedRevision","kind","sourceIds","title","requestId","reviewHash","confirmedPublicFields"],"additionalProperties":false}},"required":["kind","input"]}]}}}},"responses":{"200":{"description":"Current authorized result or idempotently replayed mutation."},"400":{"description":"Invalid field, explicit confirmation or selected source."},"401":{"description":"Named account session required."},"403":{"description":"Anonymous business key cannot attribute this mutation."},"404":{"description":"Unavailable workspace or record."},"409":{"description":"Current revision or exact reviewed source changed."}}}},"/shared-weddings/{id}/control":{"get":{"summary":"Read shared administration, the explicitly pinned operations source and current multi-party handoff reviews","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Named connected business administrator view; no private business records."}}},"post":{"summary":"Preview, offer or decide a reviewed shared wedding administration or source handoff","description":"ADMIN requires offering and receiving businesses. SOURCE requires the proposed source business to offer its own linked project; canonical administrator, current source business and proposed source business must approve. Administrative handoff retains source-bound access. Source replacement explicitly retires named shared day-of access and section scopes; original private records remain. Current authorization, exact source hash, revisions and request receipts apply.","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","oneOf":[{"type":"object","properties":{"kind":{"type":"string","const":"preview"},"input":{"type":"object","properties":{"sharedWeddingId":{"type":"string","minLength":1,"maxLength":100},"kind":{"type":"string","enum":["ADMIN","SOURCE"]},"targetPlannerId":{"type":"string","minLength":1,"maxLength":100},"targetWeddingId":{"default":null,"anyOf":[{"type":"string","minLength":1,"maxLength":100},{"type":"null"}]}},"required":["sharedWeddingId","kind","targetPlannerId"],"additionalProperties":false}},"required":["kind","input"]},{"type":"object","properties":{"kind":{"type":"string","const":"command"},"input":{"oneOf":[{"type":"object","properties":{"operation":{"type":"string","const":"OFFER"},"sharedWeddingId":{"type":"string","minLength":1,"maxLength":100},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"kind":{"type":"string","enum":["ADMIN","SOURCE"]},"targetPlannerId":{"type":"string","minLength":1,"maxLength":100},"targetWeddingId":{"default":null,"anyOf":[{"type":"string","minLength":1,"maxLength":100},{"type":"null"}]},"reviewedHash":{"type":"string","pattern":"^[a-f0-9]{64}$"},"reason":{"type":"string","minLength":3,"maxLength":1000},"expiresInDays":{"default":7,"type":"integer","minimum":1,"maximum":14},"confirmed":{"type":"boolean","const":true}},"required":["operation","sharedWeddingId","requestId","kind","targetPlannerId","reviewedHash","reason","confirmed"],"additionalProperties":false},{"type":"object","properties":{"operation":{"type":"string","const":"DECIDE"},"sharedWeddingId":{"type":"string","minLength":1,"maxLength":100},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"id":{"type":"string","minLength":1,"maxLength":100},"expectedRevision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"reviewedHash":{"type":"string","pattern":"^[a-f0-9]{64}$"},"decision":{"type":"string","enum":["APPROVE","DECLINE","CANCEL"]},"confirmed":{"type":"boolean","const":true}},"required":["operation","sharedWeddingId","requestId","id","expectedRevision","reviewedHash","decision","confirmed"],"additionalProperties":false}]}},"required":["kind","input"]}]}}}},"responses":{"200":{"description":"Reviewed source, pending approval, exact authorized replay or committed handoff."},"400":{"description":"Invalid approval or source."},"404":{"description":"Current business administrator or explicit participation unavailable."},"409":{"description":"Source, permissions, publication, approvals or review revision changed."}}}},"/shared-weddings/{id}":{"get":{"summary":"Read the authorized shared event projection, exact source hash and recent detail history","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Only shared event details; no private business records."},"404":{"description":"No current participation or member assignment."}}},"post":{"summary":"Save reviewed event details or explicitly change/end a business participation","description":"Named account required. Detail edits bind the current revision and source hash. ACCESS/REMOVE require the canonical owning workspace administrator; LEAVE requires the departing business administrator and excludes the canonical owner. Idempotency and current authorization apply on replay.","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","oneOf":[{"type":"object","properties":{"kind":{"type":"string","const":"details"},"input":{"type":"object","properties":{"title":{"type":"string","minLength":2,"maxLength":150},"date":{"default":"","anyOf":[{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},{"type":"string","const":""}]},"timezone":{"type":"string","maxLength":80},"venueName":{"default":"","type":"string","maxLength":200},"venueAddress":{"default":"","type":"string","maxLength":500},"id":{"type":"string","minLength":1,"maxLength":100},"expectedRevision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"reviewedHash":{"type":"string","pattern":"^[a-f0-9]{64}$"},"confirmed":{"type":"boolean","const":true}},"required":["title","timezone","id","expectedRevision","requestId","reviewedHash","confirmed"]}},"required":["kind","input"]},{"type":"object","properties":{"kind":{"type":"string","const":"participant"},"input":{"oneOf":[{"type":"object","properties":{"operation":{"type":"string","const":"ACCESS"},"sharedWeddingId":{"type":"string","minLength":1,"maxLength":100},"participantId":{"type":"string","minLength":1,"maxLength":100},"expectedRevision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"canEditDetails":{"type":"boolean"},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"confirmed":{"type":"boolean","const":true}},"required":["operation","sharedWeddingId","participantId","expectedRevision","canEditDetails","requestId","confirmed"],"additionalProperties":false},{"type":"object","properties":{"operation":{"type":"string","const":"REMOVE"},"sharedWeddingId":{"type":"string","minLength":1,"maxLength":100},"participantId":{"type":"string","minLength":1,"maxLength":100},"expectedRevision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"confirmed":{"type":"boolean","const":true}},"required":["operation","sharedWeddingId","participantId","expectedRevision","requestId","confirmed"],"additionalProperties":false},{"type":"object","properties":{"operation":{"type":"string","const":"LEAVE"},"sharedWeddingId":{"type":"string","minLength":1,"maxLength":100},"participantId":{"type":"string","minLength":1,"maxLength":100},"expectedRevision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"confirmed":{"type":"boolean","const":true}},"required":["operation","sharedWeddingId","participantId","expectedRevision","requestId","confirmed"],"additionalProperties":false}]}},"required":["kind","input"]}]}}}},"responses":{"200":{"description":"Saved result or exact authorized replay."},"400":{"description":"Invalid approval, attempt to leave as canonical owner or unavailable permission."},"404":{"description":"No authorized workspace/participation."},"409":{"description":"Reviewed details or participation permissions changed."}}}},"/exports":{"get":{"summary":"List only the current named account’s unexpired or retained export jobs; owner for business records","tags":["Private exports"],"security":[{"bearerAuth":[]}],"parameters":[{"name":"offset","in":"query","schema":{"type":"integer","minimum":0}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":50}}],"responses":{"200":{"description":"Jobs, included datasets, exclusions and pagination"},"403":{"description":"API keys cannot use private exports"}}},"post":{"summary":"Request, cancel or resume a versioned private export with idempotency","tags":["Private exports"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","oneOf":[{"type":"object","properties":{"operation":{"type":"string","const":"CREATE"},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"mode":{"type":"string","enum":["BUSINESS","PERSONAL"]},"confirmed":{"type":"boolean","const":true}},"required":["operation","requestId","mode","confirmed"],"additionalProperties":false},{"type":"object","properties":{"operation":{"type":"string","enum":["RETRY","CANCEL"]},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"id":{"type":"string","minLength":1,"maxLength":100},"expectedRevision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991}},"required":["operation","requestId","id","expectedRevision"],"additionalProperties":false}]}}}},"responses":{"200":{"description":"Durable job identity and revision; preparation is asynchronous"},"409":{"description":"Stale job revision or concurrent export limit"}}}},"/exports/{id}/download":{"get":{"summary":"Stream a ready, unexpired private package after checking its original named authority","tags":["Private exports"],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"ZIP archive","content":{"application/zip":{"schema":{"type":"string","format":"binary"}}}},"404":{"description":"Unavailable, expired, cancelled, or authority changed"}}}},"/client-health":{"get":{"summary":"Read current private client-attention sources and proposal conversion; analytics:read","security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Workspace-Id","in":"header","schema":{"type":"string"}},{"name":"kind","in":"query","schema":{"type":"string","enum":["INQUIRY","REPLY","PROPOSAL","SIGNATURE","INVOICE","TASK"]}},{"name":"view","in":"query","schema":{"default":"attention","type":"string","enum":["attention","snoozed","all"]}},{"name":"q","in":"query","schema":{"default":"","type":"string","maxLength":100}},{"name":"cohortDays","in":"query","schema":{"default":90,"type":"integer","minimum":1,"maximum":365}},{"name":"offset","in":"query","schema":{"default":0,"type":"integer","minimum":0,"maximum":9007199254740991}},{"name":"limit","in":"query","schema":{"default":40,"type":"integer","minimum":1,"maximum":100}},{"name":"revision","in":"query","schema":{"type":"string","pattern":"^[a-f0-9]{64}$"}}],"responses":{"200":{"description":"Current source-bound page, attention rule settings, proposal issue cohort, source revision and nextOffset."},"409":{"description":"Source revision changed or record bound exceeded; no truncated totals."}}},"post":{"summary":"Review workspace attention rules or source-bound snooze/resume; named full-access account required, owner/admin for settings","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","oneOf":[{"type":"object","properties":{"operation":{"type":"string","const":"settings"},"data":{"type":"object","properties":{"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"policy":{"type":"object","properties":{"version":{"type":"number","const":1},"inquiryHours":{"anyOf":[{"type":"integer","minimum":1,"maximum":8760},{"type":"null"}]},"replyHours":{"anyOf":[{"type":"integer","minimum":1,"maximum":8760},{"type":"null"}]},"proposalDays":{"anyOf":[{"type":"integer","minimum":0,"maximum":365},{"type":"null"}]},"signatureDays":{"anyOf":[{"type":"integer","minimum":0,"maximum":365},{"type":"null"}]},"invoiceOverdueDays":{"anyOf":[{"type":"integer","minimum":0,"maximum":365},{"type":"null"}]},"invoiceWithoutDueDays":{"anyOf":[{"type":"integer","minimum":0,"maximum":365},{"type":"null"}]},"taskOverdueDays":{"anyOf":[{"type":"integer","minimum":0,"maximum":365},{"type":"null"}]},"eventPriorityDays":{"type":"integer","minimum":0,"maximum":365},"countAutomatedReplies":{"type":"boolean"},"includeResolvedConversations":{"type":"boolean"}},"required":["version","inquiryHours","replyHours","proposalDays","signatureDays","invoiceOverdueDays","invoiceWithoutDueDays","taskOverdueDays","eventPriorityDays","countAutomatedReplies","includeResolvedConversations"],"additionalProperties":false},"approved":{"type":"boolean","const":true}},"required":["requestId","expectedRevision","policy","approved"],"additionalProperties":false}},"required":["operation","data"],"additionalProperties":false},{"type":"object","properties":{"operation":{"type":"string","const":"decision"},"data":{"type":"object","properties":{"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"key":{"type":"string","minLength":3,"maxLength":250},"sourceHash":{"type":"string","pattern":"^[a-f0-9]{64}$"},"action":{"type":"string","enum":["SNOOZE","RESUME"]},"until":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"reason":{"type":"string","minLength":3,"maxLength":600},"approved":{"type":"boolean","const":true}},"required":["requestId","key","sourceHash","action","until","reason","approved"],"additionalProperties":false}},"required":["operation","data"],"additionalProperties":false}]}}}},"responses":{"200":{"description":"Original result retained for exact request replay."},"403":{"description":"Named current membership or administrator authority required."},"404":{"description":"Source unavailable or already resolved."},"409":{"description":"Source or policy revision changed; review current records."}}}},"/notes":{"get":{"summary":"Search and filter your own personal notes","description":"Named full workspace operator only. Every note query includes both workspace and author identity; even owner/admin cannot read another author. Business API keys are rejected. Mutations need requestId and expectedRevision, with no shared events or client notes.","security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string"}},{"name":"q","in":"query","required":false,"schema":{"type":"string"}},{"name":"tag","in":"query","required":false,"schema":{"type":"string"}},{"name":"clientId","in":"query","required":false,"schema":{"type":"string"}},{"name":"status","in":"query","required":false,"schema":{"enum":["ACTIVE","ARCHIVED","ALL"]}},{"name":"pinned","in":"query","required":false,"schema":{"enum":["all","yes"]}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":50}}],"responses":{"200":{"description":"Current authorized result; private/no-store."},"201":{"description":"Original created result; idempotent retries retain its identity."},"400":{"description":"Invalid details or required review."},"401":{"description":"Sign in with your current named account session."},"403":{"description":"Workspace integration keys cannot substitute for a person."},"404":{"description":"Foreign or unavailable record/membership."},"409":{"description":"The revision, terms or original request changed."}}},"post":{"summary":"Create your own note; expectedRevision must be zero and id omitted","description":"Named full workspace operator only. Every note query includes both workspace and author identity; even owner/admin cannot read another author. Business API keys are rejected. Mutations need requestId and expectedRevision, with no shared events or client notes.","security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"title":{"default":"","type":"string","maxLength":180},"body":{"type":"string","minLength":1,"maxLength":40000},"tags":{"maxItems":30,"type":"array","items":{"type":"string"}},"clientId":{"default":null,"anyOf":[{"type":"string","minLength":1,"maxLength":100},{"type":"null"}]},"noteDate":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"pinned":{"default":false,"type":"boolean"},"id":{"type":"string","minLength":1,"maxLength":100},"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["body","noteDate","expectedRevision","requestId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Current authorized result; private/no-store."},"201":{"description":"Original created result; idempotent retries retain its identity."},"400":{"description":"Invalid details or required review."},"401":{"description":"Sign in with your current named account session."},"403":{"description":"Workspace integration keys cannot substitute for a person."},"404":{"description":"Foreign or unavailable record/membership."},"409":{"description":"The revision, terms or original request changed."}}}},"/notes/{id}":{"get":{"summary":"Read your exact author-owned note","description":"Named full workspace operator only. Every note query includes both workspace and author identity; even owner/admin cannot read another author. Business API keys are rejected. Mutations need requestId and expectedRevision, with no shared events or client notes.","security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":100}}],"responses":{"200":{"description":"Current authorized result; private/no-store."},"201":{"description":"Original created result; idempotent retries retain its identity."},"400":{"description":"Invalid details or required review."},"401":{"description":"Sign in with your current named account session."},"403":{"description":"Workspace integration keys cannot substitute for a person."},"404":{"description":"Foreign or unavailable record/membership."},"409":{"description":"The revision, terms or original request changed."}}},"put":{"summary":"Save all reviewed note fields at the current revision","description":"Named full workspace operator only. Every note query includes both workspace and author identity; even owner/admin cannot read another author. Business API keys are rejected. Mutations need requestId and expectedRevision, with no shared events or client notes.","security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":100}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"title":{"default":"","type":"string","maxLength":180},"body":{"type":"string","minLength":1,"maxLength":40000},"tags":{"maxItems":30,"type":"array","items":{"type":"string"}},"clientId":{"default":null,"anyOf":[{"type":"string","minLength":1,"maxLength":100},{"type":"null"}]},"noteDate":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"pinned":{"default":false,"type":"boolean"},"id":{"type":"string","minLength":1,"maxLength":100},"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["body","noteDate","expectedRevision","requestId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Current authorized result; private/no-store."},"201":{"description":"Original created result; idempotent retries retain its identity."},"400":{"description":"Invalid details or required review."},"401":{"description":"Sign in with your current named account session."},"403":{"description":"Workspace integration keys cannot substitute for a person."},"404":{"description":"Foreign or unavailable record/membership."},"409":{"description":"The revision, terms or original request changed."}}},"patch":{"summary":"Pin, unpin, archive or restore your own note","description":"Named full workspace operator only. Every note query includes both workspace and author identity; even owner/admin cannot read another author. Business API keys are rejected. Mutations need requestId and expectedRevision, with no shared events or client notes.","security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":100}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":100},"expectedRevision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"operation":{"type":"string","enum":["PIN","UNPIN","ARCHIVE","RESTORE"]}},"required":["id","expectedRevision","requestId","operation"],"additionalProperties":false}}}},"responses":{"200":{"description":"Current authorized result; private/no-store."},"201":{"description":"Original created result; idempotent retries retain its identity."},"400":{"description":"Invalid details or required review."},"401":{"description":"Sign in with your current named account session."},"403":{"description":"Workspace integration keys cannot substitute for a person."},"404":{"description":"Foreign or unavailable record/membership."},"409":{"description":"The revision, terms or original request changed."}}}},"/notes/clients":{"get":{"summary":"Search active client choices for a personal association","description":"Named full workspace operator only. Every note query includes both workspace and author identity; even owner/admin cannot read another author. Business API keys are rejected. Mutations need requestId and expectedRevision, with no shared events or client notes.","security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string"}},{"name":"q","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Current authorized result; private/no-store."},"201":{"description":"Original created result; idempotent retries retain its identity."},"400":{"description":"Invalid details or required review."},"401":{"description":"Sign in with your current named account session."},"403":{"description":"Workspace integration keys cannot substitute for a person."},"404":{"description":"Foreign or unavailable record/membership."},"409":{"description":"The revision, terms or original request changed."}}}},"/preferences/navigation":{"get":{"summary":"Read your sidebar pins and permitted destinations","description":"Named active workspace member only. Preferences belong to this identity in this workspace. Paths must be in the current authorized navigation allowlist. Unpinning changes presentation only; null pinned restores default grouped navigation.","security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Current authorized result; private/no-store."},"201":{"description":"Original created result; idempotent retries retain its identity."},"400":{"description":"Invalid details or required review."},"401":{"description":"Sign in with your current named account session."},"403":{"description":"Workspace integration keys cannot substitute for a person."},"404":{"description":"Foreign or unavailable record/membership."},"409":{"description":"The revision, terms or original request changed."}}},"put":{"summary":"Save your own ordered sidebar pins","description":"Named active workspace member only. Preferences belong to this identity in this workspace. Paths must be in the current authorized navigation allowlist. Unpinning changes presentation only; null pinned restores default grouped navigation.","security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"pinned":{"anyOf":[{"maxItems":80,"type":"array","items":{"type":"string","minLength":1,"maxLength":100}},{"type":"null"}]}},"required":["requestId","expectedRevision","pinned"],"additionalProperties":false}}}},"responses":{"200":{"description":"Current authorized result; private/no-store."},"201":{"description":"Original created result; idempotent retries retain its identity."},"400":{"description":"Invalid details or required review."},"401":{"description":"Sign in with your current named account session."},"403":{"description":"Workspace integration keys cannot substitute for a person."},"404":{"description":"Foreign or unavailable record/membership."},"409":{"description":"The revision, terms or original request changed."}}}},"/referrals":{"get":{"summary":"Read your professional referral code, claims and subscription credit delivery","description":"Named verified professional workspace owner only; couple workspaces and API keys cannot claim financial rewards. A code/claim does not charge, grant paid entitlements or award credit. Terms are frozen on reviewed claim; reviewer verification and external billing activation govern credit delivery.","security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Current authorized result; private/no-store."},"201":{"description":"Original created result; idempotent retries retain its identity."},"400":{"description":"Invalid details or required review."},"401":{"description":"Sign in with your current named account session."},"403":{"description":"Workspace integration keys cannot substitute for a person."},"404":{"description":"Foreign or unavailable record/membership."},"409":{"description":"The revision, terms or original request changed."}}},"post":{"summary":"Create a personal business referral code or record reviewed incoming referral terms","description":"Named verified professional workspace owner only; couple workspaces and API keys cannot claim financial rewards. A code/claim does not charge, grant paid entitlements or award credit. Terms are frozen on reviewed claim; reviewer verification and external billing activation govern credit delivery.","security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","oneOf":[{"type":"object","properties":{"operation":{"type":"string","const":"CREATE_CODE"},"data":{"type":"object","properties":{"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["requestId"],"additionalProperties":false}},"required":["operation","data"],"additionalProperties":false},{"type":"object","properties":{"operation":{"type":"string","const":"CLAIM"},"data":{"type":"object","properties":{"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"code":{"type":"string","pattern":"^[A-Z0-9]{12}$"},"termsHash":{"type":"string","pattern":"^[a-f0-9]{64}$"},"reviewed":{"type":"boolean","const":true}},"required":["requestId","code","termsHash","reviewed"],"additionalProperties":false}},"required":["operation","data"],"additionalProperties":false}]}}}},"responses":{"200":{"description":"Current authorized result; private/no-store."},"201":{"description":"Original created result; idempotent retries retain its identity."},"400":{"description":"Invalid details or required review."},"401":{"description":"Sign in with your current named account session."},"403":{"description":"Workspace integration keys cannot substitute for a person."},"404":{"description":"Foreign or unavailable record/membership."},"409":{"description":"The revision, terms or original request changed."}}}},"/template-studio":{"get":{"security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Private no-store result. Commands use current named membership, revision checks and request receipts; copies are independent."},"400":{"description":"Invalid template, missing review, changed revision or unsupported import."},"401":{"description":"Named account authentication required."},"403":{"description":"Business API keys cannot act as a named editor or moderator."},"404":{"description":"Missing, foreign, revoked or ungranted source."}},"summary":"List authorized private templates, inspect exact versions, or read private contract drafts and moderator submissions","description":"Query id and optional version for one template; q/kind/after/archived for a paginated board; projectDraft for a private contract draft; moderation for the operator-only review queue. Named VIEW/COPY grants pin exact immutable versions; EDIT grants expose retained history. The web studio also provides source discovery and public approved community browsing."},"post":{"security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Private no-store result. Commands use current named membership, revision checks and request receipts; copies are independent."},"400":{"description":"Invalid template, missing review, changed revision or unsupported import."},"401":{"description":"Named account authentication required."},"403":{"description":"Business API keys cannot act as a named editor or moderator."},"404":{"description":"Missing, foreign, revoked or ungranted source."}},"summary":"Save, independently copy, share, revoke, review, withdraw or apply templates and fixed-amount budget worksheets","description":"Every source copy and application needs its exact server preview hash. Timeline application accepts APPEND or REPLACE_UNPROTECTED; review lists resolved dates/times and retained/removed moments, protects fixed/executed moments and prerequisites, and checks current execution/resource sources. Replacement retains an undo checkpoint, including a legacy pre-plan baseline, and never deletes published moment rows or dispatches messages. Budget worksheets require explicit category mapping, reviewed ADD_MISSING or REPLACE_SELECTED behavior, and an optional separately reviewed project target change; actual financial history is never copied. FILE sources retain filename/content hash from a reviewed studio JSON file up to 80 KB. A contract application produces a private TemplateProjectDraft; POST requires a second explicit review before creating unsigned client-portal terms. No operation issues signature requests, moves money, sends communication or publishes a timeline. Community approval requires a different configured moderator; public discovery is separately activated.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","oneOf":[{"type":"object","properties":{"kind":{"type":"string","const":"source"},"input":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","const":"FILE"},"id":{"type":"string","minLength":1,"maxLength":100},"definition":{"type":"object","properties":{"title":{"type":"string","minLength":2,"maxLength":120},"description":{"type":"string","minLength":10,"maxLength":2000},"tags":{"default":[],"maxItems":12,"type":"array","items":{"type":"string","minLength":1,"maxLength":40}},"content":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","const":"TIMELINE"},"items":{"minItems":1,"maxItems":200,"type":"array","items":{"type":"object","properties":{"key":{"type":"string","pattern":"^[a-zA-Z][a-zA-Z0-9_-]{0,59}$"},"title":{"type":"string","minLength":1,"maxLength":180},"time":{"type":"string","pattern":"^([01]\\d|2[0-3]):[0-5]\\d$"},"durationMin":{"type":"integer","minimum":0,"maximum":1440},"dayOffset":{"type":"integer","minimum":-365,"maximum":365},"bufferMin":{"default":0,"type":"integer","minimum":0,"maximum":240},"fixed":{"default":false,"type":"boolean"},"dependsOn":{"default":[],"maxItems":50,"type":"array","items":{"type":"string","pattern":"^[a-zA-Z][a-zA-Z0-9_-]{0,59}$"}},"roles":{"default":[],"maxItems":30,"type":"array","items":{"type":"string","minLength":1,"maxLength":60}},"location":{"default":"","type":"string","maxLength":180},"notes":{"default":"","type":"string","maxLength":5000}},"required":["key","title","time","durationMin","dayOffset"],"additionalProperties":false}}},"required":["kind","items"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"CHECKLIST"},"items":{"minItems":1,"maxItems":300,"type":"array","items":{"type":"object","properties":{"key":{"type":"string","pattern":"^[a-zA-Z][a-zA-Z0-9_-]{0,59}$"},"title":{"type":"string","minLength":1,"maxLength":200},"notes":{"default":"","type":"string","maxLength":5000},"relativeDays":{"default":null,"anyOf":[{"type":"integer","minimum":-3650,"maximum":3650},{"type":"null"}]}},"required":["key","title"],"additionalProperties":false}}},"required":["kind","items"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"FORM"},"definition":{"anyOf":[{"type":"object","properties":{"projectTypeId":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}]},"purpose":{"type":"string","enum":["INQUIRY","QUESTIONNAIRE"]},"title":{"type":"string","minLength":2,"maxLength":160},"intro":{"default":"","type":"string","maxLength":2000},"submitLabel":{"default":"Send your answers","type":"string","minLength":1,"maxLength":50},"successMessage":{"default":"Thank you. Your answers are safely with the team.","type":"string","minLength":1,"maxLength":500},"fields":{"maxItems":40,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z][a-zA-Z0-9_]{0,39}$"},"label":{"type":"string","minLength":1,"maxLength":100},"type":{"type":"string","enum":["TEXT","TEXTAREA","EMAIL","PHONE","NUMBER","DATE","SELECT","MULTISELECT","CHECKBOX"]},"required":{"default":false,"type":"boolean"},"options":{"default":[],"maxItems":30,"type":"array","items":{"type":"string","minLength":1,"maxLength":100}},"mapTo":{"default":"custom","type":"string","enum":["custom","coupleNames","email","phone","eventDate","message"]},"showWhen":{"default":null,"anyOf":[{"type":"object","properties":{"fieldId":{"type":"string","pattern":"^[a-zA-Z][a-zA-Z0-9_]{0,39}$"},"equals":{"type":"string","maxLength":200}},"required":["fieldId","equals"]},{"type":"null"}]}},"required":["id","label","type"]}},"schemaVersion":{"not":{}}},"required":["purpose","title","fields"]},{"type":"object","properties":{"projectTypeId":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}]},"purpose":{"type":"string","enum":["INQUIRY","QUESTIONNAIRE"]},"title":{"type":"string","minLength":2,"maxLength":160},"intro":{"default":"","type":"string","maxLength":2000},"submitLabel":{"default":"Send your answers","type":"string","minLength":1,"maxLength":50},"successMessage":{"default":"Thank you. Your answers are safely with the team.","type":"string","minLength":1,"maxLength":500},"fields":{"maxItems":40,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z][a-zA-Z0-9_]{0,39}$"},"label":{"type":"string","minLength":1,"maxLength":100},"type":{"type":"string","enum":["TEXT","TEXTAREA","EMAIL","PHONE","NUMBER","DATE","SELECT","MULTISELECT","CHECKBOX"]},"required":{"default":false,"type":"boolean"},"options":{"default":[],"maxItems":30,"type":"array","items":{"type":"string","minLength":1,"maxLength":100}},"mapTo":{"default":"custom","type":"string","enum":["custom","coupleNames","email","phone","eventDate","message"]},"showWhen":{"default":null,"anyOf":[{"type":"object","properties":{"fieldId":{"type":"string","pattern":"^[a-zA-Z][a-zA-Z0-9_]{0,39}$"},"equals":{"type":"string","maxLength":200}},"required":["fieldId","equals"]},{"type":"null"}]}},"required":["id","label","type"]}},"schemaVersion":{"type":"number","const":2},"sections":{"minItems":1,"maxItems":12,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z][a-zA-Z0-9_]{0,39}$"},"title":{"type":"string","minLength":1,"maxLength":100},"description":{"default":"","type":"string","maxLength":1000},"fieldIds":{"maxItems":40,"type":"array","items":{"type":"string","pattern":"^[a-zA-Z][a-zA-Z0-9_]{0,39}$"}}},"required":["id","title","fieldIds"],"additionalProperties":false}}},"required":["purpose","title","fields","schemaVersion","sections"],"additionalProperties":false}]}},"required":["kind","definition"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"EMAIL"},"subject":{"type":"string","minLength":1,"maxLength":200},"body":{"type":"string","minLength":1,"maxLength":20000}},"required":["kind","subject","body"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"PROPOSAL"},"definition":{"type":"object","properties":{"schemaVersion":{"type":"number","const":2},"title":{"type":"string","minLength":2,"maxLength":160},"introduction":{"type":"string","maxLength":3000},"sections":{"maxItems":12,"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","enum":["TEXT","HIGHLIGHT","CHECKLIST"]},"heading":{"type":"string","maxLength":160},"body":{"type":"string","maxLength":4000}},"required":["kind","heading","body"]}},"cover":{"anyOf":[{"type":"object","properties":{"assetId":{"type":"string","minLength":1,"maxLength":100},"alt":{"type":"string","minLength":1,"maxLength":200},"caption":{"default":"","type":"string","maxLength":500}},"required":["assetId","alt"],"additionalProperties":false},{"type":"null"}]},"images":{"maxItems":12,"type":"array","items":{"type":"object","properties":{"assetId":{"type":"string","minLength":1,"maxLength":100},"alt":{"type":"string","minLength":1,"maxLength":200},"caption":{"default":"","type":"string","maxLength":500}},"required":["assetId","alt"],"additionalProperties":false}},"fixedLines":{"maxItems":30,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":80},"description":{"type":"string","minLength":1,"maxLength":300},"quantity":{"type":"integer","minimum":1,"maximum":10000},"unitCents":{"type":"integer","minimum":0,"maximum":99999999}},"required":["id","description","quantity","unitCents"]}},"groups":{"maxItems":12,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,32}$"},"label":{"type":"string","minLength":1,"maxLength":160},"description":{"type":"string","maxLength":1000},"minSelections":{"type":"integer","minimum":0,"maximum":20},"maxSelections":{"type":"integer","minimum":1,"maximum":20},"options":{"minItems":1,"maxItems":20,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,32}$"},"label":{"type":"string","minLength":1,"maxLength":160},"description":{"type":"string","maxLength":1500},"unitCents":{"type":"integer","minimum":0,"maximum":99999999},"quantity":{"type":"object","properties":{"min":{"type":"integer","minimum":1,"maximum":10000},"max":{"type":"integer","minimum":1,"maximum":10000},"step":{"type":"integer","minimum":1,"maximum":10000},"default":{"type":"integer","minimum":1,"maximum":10000}},"required":["min","max","step","default"],"additionalProperties":false},"defaultSelected":{"type":"boolean"},"imageAssetId":{"default":null,"anyOf":[{"type":"string","minLength":1,"maxLength":100},{"type":"null"}]}},"required":["id","label","description","unitCents","quantity","defaultSelected"],"additionalProperties":false}}},"required":["id","label","description","minSelections","maxSelections","options"],"additionalProperties":false}},"discountCents":{"type":"integer","minimum":0,"maximum":99999999},"taxLabel":{"type":"string","minLength":1,"maxLength":100},"taxBasisPoints":{"type":"integer","minimum":0,"maximum":3000},"terms":{"type":"string","minLength":1,"maxLength":8000},"currency":{"type":"string","const":"usd"},"installments":{"minItems":1,"maxItems":12,"type":"array","items":{"type":"object","properties":{"label":{"type":"string","minLength":1,"maxLength":100},"basisPoints":{"type":"integer","minimum":1,"maximum":10000},"dueDate":{"anyOf":[{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},{"type":"string","const":""}]},"dueRule":{"type":"object","properties":{"basis":{"type":"string","enum":["SIGNATURE","WEDDING"]},"offsetDays":{"type":"integer","minimum":-730,"maximum":730}},"required":["basis","offsetDays"]}},"required":["label","basisPoints","dueDate"]}}},"required":["schemaVersion","title","introduction","sections","cover","images","fixedLines","groups","discountCents","taxBasisPoints","terms","currency","installments"],"additionalProperties":false}},"required":["kind","definition"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"CONTRACT"},"body":{"type":"string","minLength":1,"maxLength":8000}},"required":["kind","body"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"BUDGET"},"currency":{"type":"string","const":"USD"},"targetCents":{"anyOf":[{"type":"integer","minimum":0,"maximum":2000000000},{"type":"null"}]},"rows":{"minItems":1,"maxItems":100,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":120},"label":{"type":"string","minLength":1,"maxLength":150},"category":{"anyOf":[{"type":"string","enum":["PHOTOGRAPHER","VIDEOGRAPHER","CATERER","FLORIST","DJ","BAND","VENUE","HAIR_MAKEUP","OFFICIANT","RENTALS","STATIONERY","TRANSPORT","CAKE","OTHER"]},{"type":"null"}]},"amountCents":{"type":"integer","minimum":0,"maximum":2000000000},"notes":{"type":"string","maxLength":1000}},"required":["id","label","category","amountCents","notes"],"additionalProperties":false}}},"required":["kind","currency","targetCents","rows"],"additionalProperties":false}]}},"required":["title","description","content"],"additionalProperties":false}},"required":["kind","id","definition"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"VERSION"},"id":{"type":"string","minLength":1,"maxLength":100}},"required":["kind","id"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"COMMUNITY"},"id":{"type":"string","minLength":1,"maxLength":100}},"required":["kind","id"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"STARTER"},"id":{"type":"string","minLength":1,"maxLength":100}},"required":["kind","id"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"LIBRARY"},"id":{"type":"string","minLength":1,"maxLength":100}},"required":["kind","id"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["WEDDING_TIMELINE","WEDDING_BUDGET","LEGACY_TIMELINE","FORM","EMAIL","PROPOSAL","CONTRACT"]},"id":{"type":"string","minLength":1,"maxLength":100}},"required":["kind","id"],"additionalProperties":false}]}},"required":["kind","input"]},{"type":"object","properties":{"kind":{"type":"string","const":"command"},"input":{"oneOf":[{"type":"object","properties":{"operation":{"type":"string","const":"SAVE"},"id":{"type":"string","minLength":1,"maxLength":100},"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"definition":{"type":"object","properties":{"title":{"type":"string","minLength":2,"maxLength":120},"description":{"type":"string","minLength":10,"maxLength":2000},"tags":{"default":[],"maxItems":12,"type":"array","items":{"type":"string","minLength":1,"maxLength":40}},"content":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","const":"TIMELINE"},"items":{"minItems":1,"maxItems":200,"type":"array","items":{"type":"object","properties":{"key":{"type":"string","pattern":"^[a-zA-Z][a-zA-Z0-9_-]{0,59}$"},"title":{"type":"string","minLength":1,"maxLength":180},"time":{"type":"string","pattern":"^([01]\\d|2[0-3]):[0-5]\\d$"},"durationMin":{"type":"integer","minimum":0,"maximum":1440},"dayOffset":{"type":"integer","minimum":-365,"maximum":365},"bufferMin":{"default":0,"type":"integer","minimum":0,"maximum":240},"fixed":{"default":false,"type":"boolean"},"dependsOn":{"default":[],"maxItems":50,"type":"array","items":{"type":"string","pattern":"^[a-zA-Z][a-zA-Z0-9_-]{0,59}$"}},"roles":{"default":[],"maxItems":30,"type":"array","items":{"type":"string","minLength":1,"maxLength":60}},"location":{"default":"","type":"string","maxLength":180},"notes":{"default":"","type":"string","maxLength":5000}},"required":["key","title","time","durationMin","dayOffset"],"additionalProperties":false}}},"required":["kind","items"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"CHECKLIST"},"items":{"minItems":1,"maxItems":300,"type":"array","items":{"type":"object","properties":{"key":{"type":"string","pattern":"^[a-zA-Z][a-zA-Z0-9_-]{0,59}$"},"title":{"type":"string","minLength":1,"maxLength":200},"notes":{"default":"","type":"string","maxLength":5000},"relativeDays":{"default":null,"anyOf":[{"type":"integer","minimum":-3650,"maximum":3650},{"type":"null"}]}},"required":["key","title"],"additionalProperties":false}}},"required":["kind","items"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"FORM"},"definition":{"anyOf":[{"type":"object","properties":{"projectTypeId":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}]},"purpose":{"type":"string","enum":["INQUIRY","QUESTIONNAIRE"]},"title":{"type":"string","minLength":2,"maxLength":160},"intro":{"default":"","type":"string","maxLength":2000},"submitLabel":{"default":"Send your answers","type":"string","minLength":1,"maxLength":50},"successMessage":{"default":"Thank you. Your answers are safely with the team.","type":"string","minLength":1,"maxLength":500},"fields":{"maxItems":40,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z][a-zA-Z0-9_]{0,39}$"},"label":{"type":"string","minLength":1,"maxLength":100},"type":{"type":"string","enum":["TEXT","TEXTAREA","EMAIL","PHONE","NUMBER","DATE","SELECT","MULTISELECT","CHECKBOX"]},"required":{"default":false,"type":"boolean"},"options":{"default":[],"maxItems":30,"type":"array","items":{"type":"string","minLength":1,"maxLength":100}},"mapTo":{"default":"custom","type":"string","enum":["custom","coupleNames","email","phone","eventDate","message"]},"showWhen":{"default":null,"anyOf":[{"type":"object","properties":{"fieldId":{"type":"string","pattern":"^[a-zA-Z][a-zA-Z0-9_]{0,39}$"},"equals":{"type":"string","maxLength":200}},"required":["fieldId","equals"]},{"type":"null"}]}},"required":["id","label","type"]}},"schemaVersion":{"not":{}}},"required":["purpose","title","fields"]},{"type":"object","properties":{"projectTypeId":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}]},"purpose":{"type":"string","enum":["INQUIRY","QUESTIONNAIRE"]},"title":{"type":"string","minLength":2,"maxLength":160},"intro":{"default":"","type":"string","maxLength":2000},"submitLabel":{"default":"Send your answers","type":"string","minLength":1,"maxLength":50},"successMessage":{"default":"Thank you. Your answers are safely with the team.","type":"string","minLength":1,"maxLength":500},"fields":{"maxItems":40,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z][a-zA-Z0-9_]{0,39}$"},"label":{"type":"string","minLength":1,"maxLength":100},"type":{"type":"string","enum":["TEXT","TEXTAREA","EMAIL","PHONE","NUMBER","DATE","SELECT","MULTISELECT","CHECKBOX"]},"required":{"default":false,"type":"boolean"},"options":{"default":[],"maxItems":30,"type":"array","items":{"type":"string","minLength":1,"maxLength":100}},"mapTo":{"default":"custom","type":"string","enum":["custom","coupleNames","email","phone","eventDate","message"]},"showWhen":{"default":null,"anyOf":[{"type":"object","properties":{"fieldId":{"type":"string","pattern":"^[a-zA-Z][a-zA-Z0-9_]{0,39}$"},"equals":{"type":"string","maxLength":200}},"required":["fieldId","equals"]},{"type":"null"}]}},"required":["id","label","type"]}},"schemaVersion":{"type":"number","const":2},"sections":{"minItems":1,"maxItems":12,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z][a-zA-Z0-9_]{0,39}$"},"title":{"type":"string","minLength":1,"maxLength":100},"description":{"default":"","type":"string","maxLength":1000},"fieldIds":{"maxItems":40,"type":"array","items":{"type":"string","pattern":"^[a-zA-Z][a-zA-Z0-9_]{0,39}$"}}},"required":["id","title","fieldIds"],"additionalProperties":false}}},"required":["purpose","title","fields","schemaVersion","sections"],"additionalProperties":false}]}},"required":["kind","definition"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"EMAIL"},"subject":{"type":"string","minLength":1,"maxLength":200},"body":{"type":"string","minLength":1,"maxLength":20000}},"required":["kind","subject","body"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"PROPOSAL"},"definition":{"type":"object","properties":{"schemaVersion":{"type":"number","const":2},"title":{"type":"string","minLength":2,"maxLength":160},"introduction":{"type":"string","maxLength":3000},"sections":{"maxItems":12,"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","enum":["TEXT","HIGHLIGHT","CHECKLIST"]},"heading":{"type":"string","maxLength":160},"body":{"type":"string","maxLength":4000}},"required":["kind","heading","body"]}},"cover":{"anyOf":[{"type":"object","properties":{"assetId":{"type":"string","minLength":1,"maxLength":100},"alt":{"type":"string","minLength":1,"maxLength":200},"caption":{"default":"","type":"string","maxLength":500}},"required":["assetId","alt"],"additionalProperties":false},{"type":"null"}]},"images":{"maxItems":12,"type":"array","items":{"type":"object","properties":{"assetId":{"type":"string","minLength":1,"maxLength":100},"alt":{"type":"string","minLength":1,"maxLength":200},"caption":{"default":"","type":"string","maxLength":500}},"required":["assetId","alt"],"additionalProperties":false}},"fixedLines":{"maxItems":30,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":80},"description":{"type":"string","minLength":1,"maxLength":300},"quantity":{"type":"integer","minimum":1,"maximum":10000},"unitCents":{"type":"integer","minimum":0,"maximum":99999999}},"required":["id","description","quantity","unitCents"]}},"groups":{"maxItems":12,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,32}$"},"label":{"type":"string","minLength":1,"maxLength":160},"description":{"type":"string","maxLength":1000},"minSelections":{"type":"integer","minimum":0,"maximum":20},"maxSelections":{"type":"integer","minimum":1,"maximum":20},"options":{"minItems":1,"maxItems":20,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,32}$"},"label":{"type":"string","minLength":1,"maxLength":160},"description":{"type":"string","maxLength":1500},"unitCents":{"type":"integer","minimum":0,"maximum":99999999},"quantity":{"type":"object","properties":{"min":{"type":"integer","minimum":1,"maximum":10000},"max":{"type":"integer","minimum":1,"maximum":10000},"step":{"type":"integer","minimum":1,"maximum":10000},"default":{"type":"integer","minimum":1,"maximum":10000}},"required":["min","max","step","default"],"additionalProperties":false},"defaultSelected":{"type":"boolean"},"imageAssetId":{"default":null,"anyOf":[{"type":"string","minLength":1,"maxLength":100},{"type":"null"}]}},"required":["id","label","description","unitCents","quantity","defaultSelected"],"additionalProperties":false}}},"required":["id","label","description","minSelections","maxSelections","options"],"additionalProperties":false}},"discountCents":{"type":"integer","minimum":0,"maximum":99999999},"taxLabel":{"type":"string","minLength":1,"maxLength":100},"taxBasisPoints":{"type":"integer","minimum":0,"maximum":3000},"terms":{"type":"string","minLength":1,"maxLength":8000},"currency":{"type":"string","const":"usd"},"installments":{"minItems":1,"maxItems":12,"type":"array","items":{"type":"object","properties":{"label":{"type":"string","minLength":1,"maxLength":100},"basisPoints":{"type":"integer","minimum":1,"maximum":10000},"dueDate":{"anyOf":[{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},{"type":"string","const":""}]},"dueRule":{"type":"object","properties":{"basis":{"type":"string","enum":["SIGNATURE","WEDDING"]},"offsetDays":{"type":"integer","minimum":-730,"maximum":730}},"required":["basis","offsetDays"]}},"required":["label","basisPoints","dueDate"]}}},"required":["schemaVersion","title","introduction","sections","cover","images","fixedLines","groups","discountCents","taxBasisPoints","terms","currency","installments"],"additionalProperties":false}},"required":["kind","definition"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"CONTRACT"},"body":{"type":"string","minLength":1,"maxLength":8000}},"required":["kind","body"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"BUDGET"},"currency":{"type":"string","const":"USD"},"targetCents":{"anyOf":[{"type":"integer","minimum":0,"maximum":2000000000},{"type":"null"}]},"rows":{"minItems":1,"maxItems":100,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":120},"label":{"type":"string","minLength":1,"maxLength":150},"category":{"anyOf":[{"type":"string","enum":["PHOTOGRAPHER","VIDEOGRAPHER","CATERER","FLORIST","DJ","BAND","VENUE","HAIR_MAKEUP","OFFICIANT","RENTALS","STATIONERY","TRANSPORT","CAKE","OTHER"]},{"type":"null"}]},"amountCents":{"type":"integer","minimum":0,"maximum":2000000000},"notes":{"type":"string","maxLength":1000}},"required":["id","label","category","amountCents","notes"],"additionalProperties":false}}},"required":["kind","currency","targetCents","rows"],"additionalProperties":false}]}},"required":["title","description","content"],"additionalProperties":false},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["operation","expectedRevision","definition","requestId"],"additionalProperties":false},{"type":"object","properties":{"operation":{"type":"string","const":"COPY"},"source":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","const":"FILE"},"id":{"type":"string","minLength":1,"maxLength":100},"definition":{"type":"object","properties":{"title":{"type":"string","minLength":2,"maxLength":120},"description":{"type":"string","minLength":10,"maxLength":2000},"tags":{"default":[],"maxItems":12,"type":"array","items":{"type":"string","minLength":1,"maxLength":40}},"content":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","const":"TIMELINE"},"items":{"minItems":1,"maxItems":200,"type":"array","items":{"type":"object","properties":{"key":{"type":"string","pattern":"^[a-zA-Z][a-zA-Z0-9_-]{0,59}$"},"title":{"type":"string","minLength":1,"maxLength":180},"time":{"type":"string","pattern":"^([01]\\d|2[0-3]):[0-5]\\d$"},"durationMin":{"type":"integer","minimum":0,"maximum":1440},"dayOffset":{"type":"integer","minimum":-365,"maximum":365},"bufferMin":{"default":0,"type":"integer","minimum":0,"maximum":240},"fixed":{"default":false,"type":"boolean"},"dependsOn":{"default":[],"maxItems":50,"type":"array","items":{"type":"string","pattern":"^[a-zA-Z][a-zA-Z0-9_-]{0,59}$"}},"roles":{"default":[],"maxItems":30,"type":"array","items":{"type":"string","minLength":1,"maxLength":60}},"location":{"default":"","type":"string","maxLength":180},"notes":{"default":"","type":"string","maxLength":5000}},"required":["key","title","time","durationMin","dayOffset"],"additionalProperties":false}}},"required":["kind","items"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"CHECKLIST"},"items":{"minItems":1,"maxItems":300,"type":"array","items":{"type":"object","properties":{"key":{"type":"string","pattern":"^[a-zA-Z][a-zA-Z0-9_-]{0,59}$"},"title":{"type":"string","minLength":1,"maxLength":200},"notes":{"default":"","type":"string","maxLength":5000},"relativeDays":{"default":null,"anyOf":[{"type":"integer","minimum":-3650,"maximum":3650},{"type":"null"}]}},"required":["key","title"],"additionalProperties":false}}},"required":["kind","items"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"FORM"},"definition":{"anyOf":[{"type":"object","properties":{"projectTypeId":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}]},"purpose":{"type":"string","enum":["INQUIRY","QUESTIONNAIRE"]},"title":{"type":"string","minLength":2,"maxLength":160},"intro":{"default":"","type":"string","maxLength":2000},"submitLabel":{"default":"Send your answers","type":"string","minLength":1,"maxLength":50},"successMessage":{"default":"Thank you. Your answers are safely with the team.","type":"string","minLength":1,"maxLength":500},"fields":{"maxItems":40,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z][a-zA-Z0-9_]{0,39}$"},"label":{"type":"string","minLength":1,"maxLength":100},"type":{"type":"string","enum":["TEXT","TEXTAREA","EMAIL","PHONE","NUMBER","DATE","SELECT","MULTISELECT","CHECKBOX"]},"required":{"default":false,"type":"boolean"},"options":{"default":[],"maxItems":30,"type":"array","items":{"type":"string","minLength":1,"maxLength":100}},"mapTo":{"default":"custom","type":"string","enum":["custom","coupleNames","email","phone","eventDate","message"]},"showWhen":{"default":null,"anyOf":[{"type":"object","properties":{"fieldId":{"type":"string","pattern":"^[a-zA-Z][a-zA-Z0-9_]{0,39}$"},"equals":{"type":"string","maxLength":200}},"required":["fieldId","equals"]},{"type":"null"}]}},"required":["id","label","type"]}},"schemaVersion":{"not":{}}},"required":["purpose","title","fields"]},{"type":"object","properties":{"projectTypeId":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}]},"purpose":{"type":"string","enum":["INQUIRY","QUESTIONNAIRE"]},"title":{"type":"string","minLength":2,"maxLength":160},"intro":{"default":"","type":"string","maxLength":2000},"submitLabel":{"default":"Send your answers","type":"string","minLength":1,"maxLength":50},"successMessage":{"default":"Thank you. Your answers are safely with the team.","type":"string","minLength":1,"maxLength":500},"fields":{"maxItems":40,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z][a-zA-Z0-9_]{0,39}$"},"label":{"type":"string","minLength":1,"maxLength":100},"type":{"type":"string","enum":["TEXT","TEXTAREA","EMAIL","PHONE","NUMBER","DATE","SELECT","MULTISELECT","CHECKBOX"]},"required":{"default":false,"type":"boolean"},"options":{"default":[],"maxItems":30,"type":"array","items":{"type":"string","minLength":1,"maxLength":100}},"mapTo":{"default":"custom","type":"string","enum":["custom","coupleNames","email","phone","eventDate","message"]},"showWhen":{"default":null,"anyOf":[{"type":"object","properties":{"fieldId":{"type":"string","pattern":"^[a-zA-Z][a-zA-Z0-9_]{0,39}$"},"equals":{"type":"string","maxLength":200}},"required":["fieldId","equals"]},{"type":"null"}]}},"required":["id","label","type"]}},"schemaVersion":{"type":"number","const":2},"sections":{"minItems":1,"maxItems":12,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z][a-zA-Z0-9_]{0,39}$"},"title":{"type":"string","minLength":1,"maxLength":100},"description":{"default":"","type":"string","maxLength":1000},"fieldIds":{"maxItems":40,"type":"array","items":{"type":"string","pattern":"^[a-zA-Z][a-zA-Z0-9_]{0,39}$"}}},"required":["id","title","fieldIds"],"additionalProperties":false}}},"required":["purpose","title","fields","schemaVersion","sections"],"additionalProperties":false}]}},"required":["kind","definition"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"EMAIL"},"subject":{"type":"string","minLength":1,"maxLength":200},"body":{"type":"string","minLength":1,"maxLength":20000}},"required":["kind","subject","body"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"PROPOSAL"},"definition":{"type":"object","properties":{"schemaVersion":{"type":"number","const":2},"title":{"type":"string","minLength":2,"maxLength":160},"introduction":{"type":"string","maxLength":3000},"sections":{"maxItems":12,"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","enum":["TEXT","HIGHLIGHT","CHECKLIST"]},"heading":{"type":"string","maxLength":160},"body":{"type":"string","maxLength":4000}},"required":["kind","heading","body"]}},"cover":{"anyOf":[{"type":"object","properties":{"assetId":{"type":"string","minLength":1,"maxLength":100},"alt":{"type":"string","minLength":1,"maxLength":200},"caption":{"default":"","type":"string","maxLength":500}},"required":["assetId","alt"],"additionalProperties":false},{"type":"null"}]},"images":{"maxItems":12,"type":"array","items":{"type":"object","properties":{"assetId":{"type":"string","minLength":1,"maxLength":100},"alt":{"type":"string","minLength":1,"maxLength":200},"caption":{"default":"","type":"string","maxLength":500}},"required":["assetId","alt"],"additionalProperties":false}},"fixedLines":{"maxItems":30,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":80},"description":{"type":"string","minLength":1,"maxLength":300},"quantity":{"type":"integer","minimum":1,"maximum":10000},"unitCents":{"type":"integer","minimum":0,"maximum":99999999}},"required":["id","description","quantity","unitCents"]}},"groups":{"maxItems":12,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,32}$"},"label":{"type":"string","minLength":1,"maxLength":160},"description":{"type":"string","maxLength":1000},"minSelections":{"type":"integer","minimum":0,"maximum":20},"maxSelections":{"type":"integer","minimum":1,"maximum":20},"options":{"minItems":1,"maxItems":20,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,32}$"},"label":{"type":"string","minLength":1,"maxLength":160},"description":{"type":"string","maxLength":1500},"unitCents":{"type":"integer","minimum":0,"maximum":99999999},"quantity":{"type":"object","properties":{"min":{"type":"integer","minimum":1,"maximum":10000},"max":{"type":"integer","minimum":1,"maximum":10000},"step":{"type":"integer","minimum":1,"maximum":10000},"default":{"type":"integer","minimum":1,"maximum":10000}},"required":["min","max","step","default"],"additionalProperties":false},"defaultSelected":{"type":"boolean"},"imageAssetId":{"default":null,"anyOf":[{"type":"string","minLength":1,"maxLength":100},{"type":"null"}]}},"required":["id","label","description","unitCents","quantity","defaultSelected"],"additionalProperties":false}}},"required":["id","label","description","minSelections","maxSelections","options"],"additionalProperties":false}},"discountCents":{"type":"integer","minimum":0,"maximum":99999999},"taxLabel":{"type":"string","minLength":1,"maxLength":100},"taxBasisPoints":{"type":"integer","minimum":0,"maximum":3000},"terms":{"type":"string","minLength":1,"maxLength":8000},"currency":{"type":"string","const":"usd"},"installments":{"minItems":1,"maxItems":12,"type":"array","items":{"type":"object","properties":{"label":{"type":"string","minLength":1,"maxLength":100},"basisPoints":{"type":"integer","minimum":1,"maximum":10000},"dueDate":{"anyOf":[{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},{"type":"string","const":""}]},"dueRule":{"type":"object","properties":{"basis":{"type":"string","enum":["SIGNATURE","WEDDING"]},"offsetDays":{"type":"integer","minimum":-730,"maximum":730}},"required":["basis","offsetDays"]}},"required":["label","basisPoints","dueDate"]}}},"required":["schemaVersion","title","introduction","sections","cover","images","fixedLines","groups","discountCents","taxBasisPoints","terms","currency","installments"],"additionalProperties":false}},"required":["kind","definition"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"CONTRACT"},"body":{"type":"string","minLength":1,"maxLength":8000}},"required":["kind","body"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"BUDGET"},"currency":{"type":"string","const":"USD"},"targetCents":{"anyOf":[{"type":"integer","minimum":0,"maximum":2000000000},{"type":"null"}]},"rows":{"minItems":1,"maxItems":100,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":120},"label":{"type":"string","minLength":1,"maxLength":150},"category":{"anyOf":[{"type":"string","enum":["PHOTOGRAPHER","VIDEOGRAPHER","CATERER","FLORIST","DJ","BAND","VENUE","HAIR_MAKEUP","OFFICIANT","RENTALS","STATIONERY","TRANSPORT","CAKE","OTHER"]},{"type":"null"}]},"amountCents":{"type":"integer","minimum":0,"maximum":2000000000},"notes":{"type":"string","maxLength":1000}},"required":["id","label","category","amountCents","notes"],"additionalProperties":false}}},"required":["kind","currency","targetCents","rows"],"additionalProperties":false}]}},"required":["title","description","content"],"additionalProperties":false}},"required":["kind","id","definition"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"VERSION"},"id":{"type":"string","minLength":1,"maxLength":100}},"required":["kind","id"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"COMMUNITY"},"id":{"type":"string","minLength":1,"maxLength":100}},"required":["kind","id"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"STARTER"},"id":{"type":"string","minLength":1,"maxLength":100}},"required":["kind","id"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"LIBRARY"},"id":{"type":"string","minLength":1,"maxLength":100}},"required":["kind","id"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["WEDDING_TIMELINE","WEDDING_BUDGET","LEGACY_TIMELINE","FORM","EMAIL","PROPOSAL","CONTRACT"]},"id":{"type":"string","minLength":1,"maxLength":100}},"required":["kind","id"],"additionalProperties":false}]},"reviewedHash":{"type":"string","pattern":"^[a-f0-9]{64}$"},"definition":{"type":"object","properties":{"title":{"type":"string","minLength":2,"maxLength":120},"description":{"type":"string","minLength":10,"maxLength":2000},"tags":{"default":[],"maxItems":12,"type":"array","items":{"type":"string","minLength":1,"maxLength":40}},"content":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","const":"TIMELINE"},"items":{"minItems":1,"maxItems":200,"type":"array","items":{"type":"object","properties":{"key":{"type":"string","pattern":"^[a-zA-Z][a-zA-Z0-9_-]{0,59}$"},"title":{"type":"string","minLength":1,"maxLength":180},"time":{"type":"string","pattern":"^([01]\\d|2[0-3]):[0-5]\\d$"},"durationMin":{"type":"integer","minimum":0,"maximum":1440},"dayOffset":{"type":"integer","minimum":-365,"maximum":365},"bufferMin":{"default":0,"type":"integer","minimum":0,"maximum":240},"fixed":{"default":false,"type":"boolean"},"dependsOn":{"default":[],"maxItems":50,"type":"array","items":{"type":"string","pattern":"^[a-zA-Z][a-zA-Z0-9_-]{0,59}$"}},"roles":{"default":[],"maxItems":30,"type":"array","items":{"type":"string","minLength":1,"maxLength":60}},"location":{"default":"","type":"string","maxLength":180},"notes":{"default":"","type":"string","maxLength":5000}},"required":["key","title","time","durationMin","dayOffset"],"additionalProperties":false}}},"required":["kind","items"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"CHECKLIST"},"items":{"minItems":1,"maxItems":300,"type":"array","items":{"type":"object","properties":{"key":{"type":"string","pattern":"^[a-zA-Z][a-zA-Z0-9_-]{0,59}$"},"title":{"type":"string","minLength":1,"maxLength":200},"notes":{"default":"","type":"string","maxLength":5000},"relativeDays":{"default":null,"anyOf":[{"type":"integer","minimum":-3650,"maximum":3650},{"type":"null"}]}},"required":["key","title"],"additionalProperties":false}}},"required":["kind","items"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"FORM"},"definition":{"anyOf":[{"type":"object","properties":{"projectTypeId":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}]},"purpose":{"type":"string","enum":["INQUIRY","QUESTIONNAIRE"]},"title":{"type":"string","minLength":2,"maxLength":160},"intro":{"default":"","type":"string","maxLength":2000},"submitLabel":{"default":"Send your answers","type":"string","minLength":1,"maxLength":50},"successMessage":{"default":"Thank you. Your answers are safely with the team.","type":"string","minLength":1,"maxLength":500},"fields":{"maxItems":40,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z][a-zA-Z0-9_]{0,39}$"},"label":{"type":"string","minLength":1,"maxLength":100},"type":{"type":"string","enum":["TEXT","TEXTAREA","EMAIL","PHONE","NUMBER","DATE","SELECT","MULTISELECT","CHECKBOX"]},"required":{"default":false,"type":"boolean"},"options":{"default":[],"maxItems":30,"type":"array","items":{"type":"string","minLength":1,"maxLength":100}},"mapTo":{"default":"custom","type":"string","enum":["custom","coupleNames","email","phone","eventDate","message"]},"showWhen":{"default":null,"anyOf":[{"type":"object","properties":{"fieldId":{"type":"string","pattern":"^[a-zA-Z][a-zA-Z0-9_]{0,39}$"},"equals":{"type":"string","maxLength":200}},"required":["fieldId","equals"]},{"type":"null"}]}},"required":["id","label","type"]}},"schemaVersion":{"not":{}}},"required":["purpose","title","fields"]},{"type":"object","properties":{"projectTypeId":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}]},"purpose":{"type":"string","enum":["INQUIRY","QUESTIONNAIRE"]},"title":{"type":"string","minLength":2,"maxLength":160},"intro":{"default":"","type":"string","maxLength":2000},"submitLabel":{"default":"Send your answers","type":"string","minLength":1,"maxLength":50},"successMessage":{"default":"Thank you. Your answers are safely with the team.","type":"string","minLength":1,"maxLength":500},"fields":{"maxItems":40,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z][a-zA-Z0-9_]{0,39}$"},"label":{"type":"string","minLength":1,"maxLength":100},"type":{"type":"string","enum":["TEXT","TEXTAREA","EMAIL","PHONE","NUMBER","DATE","SELECT","MULTISELECT","CHECKBOX"]},"required":{"default":false,"type":"boolean"},"options":{"default":[],"maxItems":30,"type":"array","items":{"type":"string","minLength":1,"maxLength":100}},"mapTo":{"default":"custom","type":"string","enum":["custom","coupleNames","email","phone","eventDate","message"]},"showWhen":{"default":null,"anyOf":[{"type":"object","properties":{"fieldId":{"type":"string","pattern":"^[a-zA-Z][a-zA-Z0-9_]{0,39}$"},"equals":{"type":"string","maxLength":200}},"required":["fieldId","equals"]},{"type":"null"}]}},"required":["id","label","type"]}},"schemaVersion":{"type":"number","const":2},"sections":{"minItems":1,"maxItems":12,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z][a-zA-Z0-9_]{0,39}$"},"title":{"type":"string","minLength":1,"maxLength":100},"description":{"default":"","type":"string","maxLength":1000},"fieldIds":{"maxItems":40,"type":"array","items":{"type":"string","pattern":"^[a-zA-Z][a-zA-Z0-9_]{0,39}$"}}},"required":["id","title","fieldIds"],"additionalProperties":false}}},"required":["purpose","title","fields","schemaVersion","sections"],"additionalProperties":false}]}},"required":["kind","definition"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"EMAIL"},"subject":{"type":"string","minLength":1,"maxLength":200},"body":{"type":"string","minLength":1,"maxLength":20000}},"required":["kind","subject","body"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"PROPOSAL"},"definition":{"type":"object","properties":{"schemaVersion":{"type":"number","const":2},"title":{"type":"string","minLength":2,"maxLength":160},"introduction":{"type":"string","maxLength":3000},"sections":{"maxItems":12,"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","enum":["TEXT","HIGHLIGHT","CHECKLIST"]},"heading":{"type":"string","maxLength":160},"body":{"type":"string","maxLength":4000}},"required":["kind","heading","body"]}},"cover":{"anyOf":[{"type":"object","properties":{"assetId":{"type":"string","minLength":1,"maxLength":100},"alt":{"type":"string","minLength":1,"maxLength":200},"caption":{"default":"","type":"string","maxLength":500}},"required":["assetId","alt"],"additionalProperties":false},{"type":"null"}]},"images":{"maxItems":12,"type":"array","items":{"type":"object","properties":{"assetId":{"type":"string","minLength":1,"maxLength":100},"alt":{"type":"string","minLength":1,"maxLength":200},"caption":{"default":"","type":"string","maxLength":500}},"required":["assetId","alt"],"additionalProperties":false}},"fixedLines":{"maxItems":30,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":80},"description":{"type":"string","minLength":1,"maxLength":300},"quantity":{"type":"integer","minimum":1,"maximum":10000},"unitCents":{"type":"integer","minimum":0,"maximum":99999999}},"required":["id","description","quantity","unitCents"]}},"groups":{"maxItems":12,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,32}$"},"label":{"type":"string","minLength":1,"maxLength":160},"description":{"type":"string","maxLength":1000},"minSelections":{"type":"integer","minimum":0,"maximum":20},"maxSelections":{"type":"integer","minimum":1,"maximum":20},"options":{"minItems":1,"maxItems":20,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,32}$"},"label":{"type":"string","minLength":1,"maxLength":160},"description":{"type":"string","maxLength":1500},"unitCents":{"type":"integer","minimum":0,"maximum":99999999},"quantity":{"type":"object","properties":{"min":{"type":"integer","minimum":1,"maximum":10000},"max":{"type":"integer","minimum":1,"maximum":10000},"step":{"type":"integer","minimum":1,"maximum":10000},"default":{"type":"integer","minimum":1,"maximum":10000}},"required":["min","max","step","default"],"additionalProperties":false},"defaultSelected":{"type":"boolean"},"imageAssetId":{"default":null,"anyOf":[{"type":"string","minLength":1,"maxLength":100},{"type":"null"}]}},"required":["id","label","description","unitCents","quantity","defaultSelected"],"additionalProperties":false}}},"required":["id","label","description","minSelections","maxSelections","options"],"additionalProperties":false}},"discountCents":{"type":"integer","minimum":0,"maximum":99999999},"taxLabel":{"type":"string","minLength":1,"maxLength":100},"taxBasisPoints":{"type":"integer","minimum":0,"maximum":3000},"terms":{"type":"string","minLength":1,"maxLength":8000},"currency":{"type":"string","const":"usd"},"installments":{"minItems":1,"maxItems":12,"type":"array","items":{"type":"object","properties":{"label":{"type":"string","minLength":1,"maxLength":100},"basisPoints":{"type":"integer","minimum":1,"maximum":10000},"dueDate":{"anyOf":[{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},{"type":"string","const":""}]},"dueRule":{"type":"object","properties":{"basis":{"type":"string","enum":["SIGNATURE","WEDDING"]},"offsetDays":{"type":"integer","minimum":-730,"maximum":730}},"required":["basis","offsetDays"]}},"required":["label","basisPoints","dueDate"]}}},"required":["schemaVersion","title","introduction","sections","cover","images","fixedLines","groups","discountCents","taxBasisPoints","terms","currency","installments"],"additionalProperties":false}},"required":["kind","definition"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"CONTRACT"},"body":{"type":"string","minLength":1,"maxLength":8000}},"required":["kind","body"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"BUDGET"},"currency":{"type":"string","const":"USD"},"targetCents":{"anyOf":[{"type":"integer","minimum":0,"maximum":2000000000},{"type":"null"}]},"rows":{"minItems":1,"maxItems":100,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":120},"label":{"type":"string","minLength":1,"maxLength":150},"category":{"anyOf":[{"type":"string","enum":["PHOTOGRAPHER","VIDEOGRAPHER","CATERER","FLORIST","DJ","BAND","VENUE","HAIR_MAKEUP","OFFICIANT","RENTALS","STATIONERY","TRANSPORT","CAKE","OTHER"]},{"type":"null"}]},"amountCents":{"type":"integer","minimum":0,"maximum":2000000000},"notes":{"type":"string","maxLength":1000}},"required":["id","label","category","amountCents","notes"],"additionalProperties":false}}},"required":["kind","currency","targetCents","rows"],"additionalProperties":false}]}},"required":["title","description","content"],"additionalProperties":false},"confirmed":{"type":"boolean","const":true},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["operation","source","reviewedHash","definition","confirmed","requestId"],"additionalProperties":false},{"type":"object","properties":{"operation":{"type":"string","const":"ARCHIVE"},"id":{"type":"string","minLength":1,"maxLength":100},"expectedRevision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"archived":{"type":"boolean"},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["operation","id","expectedRevision","archived","requestId"],"additionalProperties":false},{"type":"object","properties":{"operation":{"type":"string","const":"SHARE"},"id":{"type":"string","minLength":1,"maxLength":100},"versionId":{"type":"string","minLength":1,"maxLength":100},"expectedAccessRevision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"membershipId":{"type":"string","minLength":1,"maxLength":100},"capability":{"type":"string","enum":["VIEW","COPY","EDIT"]},"confirmed":{"type":"boolean","const":true},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["operation","id","versionId","expectedAccessRevision","membershipId","capability","confirmed","requestId"],"additionalProperties":false},{"type":"object","properties":{"operation":{"type":"string","const":"REVOKE"},"id":{"type":"string","minLength":1,"maxLength":100},"grantId":{"type":"string","minLength":1,"maxLength":100},"expectedAccessRevision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["operation","id","grantId","expectedAccessRevision","requestId"],"additionalProperties":false},{"type":"object","properties":{"operation":{"type":"string","const":"SUBMIT"},"id":{"type":"string","minLength":1,"maxLength":100},"versionId":{"type":"string","minLength":1,"maxLength":100},"reviewedHash":{"type":"string","pattern":"^[a-f0-9]{64}$"},"authorLabel":{"type":"string","minLength":2,"maxLength":100},"rightsConfirmed":{"type":"boolean","const":true},"privacyConfirmed":{"type":"boolean","const":true},"license":{"type":"string","const":"COPY_AND_ADAPT"},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["operation","id","versionId","reviewedHash","authorLabel","rightsConfirmed","privacyConfirmed","license","requestId"],"additionalProperties":false},{"type":"object","properties":{"operation":{"type":"string","const":"WITHDRAW"},"id":{"type":"string","minLength":1,"maxLength":100},"submissionId":{"type":"string","minLength":1,"maxLength":100},"expectedRevision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"reason":{"type":"string","minLength":3,"maxLength":1000},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["operation","id","submissionId","expectedRevision","reason","requestId"],"additionalProperties":false},{"type":"object","properties":{"operation":{"type":"string","const":"MODERATE"},"submissionId":{"type":"string","minLength":1,"maxLength":100},"expectedRevision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"reviewedHash":{"type":"string","pattern":"^[a-f0-9]{64}$"},"decision":{"type":"string","enum":["APPROVE","REJECT","HIDE"]},"reason":{"type":"string","minLength":3,"maxLength":1000},"confirmed":{"type":"boolean","const":true},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["operation","submissionId","expectedRevision","reviewedHash","decision","reason","confirmed","requestId"],"additionalProperties":false}]}},"required":["kind","input"]},{"type":"object","properties":{"kind":{"type":"string","const":"application-preview"},"input":{"type":"object","properties":{"versionId":{"type":"string","minLength":1,"maxLength":100},"weddingId":{"default":null,"anyOf":[{"type":"string","minLength":1,"maxLength":100},{"type":"null"}]},"budgetMode":{"type":"string","enum":["ADD_MISSING","REPLACE_SELECTED"]},"setBudgetTarget":{"type":"boolean"},"timelineMode":{"type":"string","enum":["APPEND","REPLACE_UNPROTECTED"]}},"required":["versionId"],"additionalProperties":false}},"required":["kind","input"]},{"type":"object","properties":{"kind":{"type":"string","const":"apply"},"input":{"type":"object","properties":{"versionId":{"type":"string","minLength":1,"maxLength":100},"weddingId":{"default":null,"anyOf":[{"type":"string","minLength":1,"maxLength":100},{"type":"null"}]},"budgetMode":{"type":"string","enum":["ADD_MISSING","REPLACE_SELECTED"]},"setBudgetTarget":{"type":"boolean"},"timelineMode":{"type":"string","enum":["APPEND","REPLACE_UNPROTECTED"]},"reviewedHash":{"type":"string","pattern":"^[a-f0-9]{64}$"},"confirmed":{"type":"boolean","const":true},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["versionId","reviewedHash","confirmed","requestId"],"additionalProperties":false}},"required":["kind","input"]},{"type":"object","properties":{"kind":{"type":"string","const":"project-draft"},"input":{"oneOf":[{"type":"object","properties":{"operation":{"type":"string","const":"SAVE"},"id":{"type":"string","minLength":1,"maxLength":100},"expectedRevision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"title":{"type":"string","minLength":2,"maxLength":120},"body":{"type":"string","minLength":1,"maxLength":8000},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["operation","id","expectedRevision","title","body","requestId"],"additionalProperties":false},{"type":"object","properties":{"operation":{"type":"string","const":"POST"},"id":{"type":"string","minLength":1,"maxLength":100},"expectedRevision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"reviewedHash":{"type":"string","pattern":"^[a-f0-9]{64}$"},"confirmed":{"type":"boolean","const":true},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["operation","id","expectedRevision","reviewedHash","confirmed","requestId"],"additionalProperties":false}]}},"required":["kind","input"]}]}}}}}},"/pricing":{"get":{"summary":"Read own-business pricing worksheets, retained revisions and paginated comparable proposal sources; finance:read and analytics:read","security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Workspace-Id","in":"header","schema":{"type":"string"}},{"name":"id","in":"query","schema":{"type":"string","minLength":1,"maxLength":100}},{"name":"revision","in":"query","schema":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991}},{"name":"lookbackMonths","in":"query","schema":{"default":24,"type":"integer","minimum":1,"maximum":24}},{"name":"q","in":"query","schema":{"default":"","type":"string","maxLength":100}},{"name":"after","in":"query","schema":{"type":"string","minLength":1,"maxLength":100}},{"name":"limit","in":"query","schema":{"default":30,"type":"integer","minimum":1,"maximum":100}}],"responses":{"200":{"description":"Own active package choices, source proposals, retained worksheet and nextCursor."},"404":{"description":"Foreign or unavailable worksheet/source."}}},"post":{"summary":"Preview source-grounded cost/history guidance or save an explicitly reviewed immutable revision; saving requires named full-access operator, never changes prices","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","oneOf":[{"type":"object","properties":{"operation":{"type":"string","const":"preview"},"data":{"type":"object","properties":{"version":{"type":"number","const":1},"title":{"type":"string","minLength":2,"maxLength":160},"packageId":{"type":"string","minLength":1,"maxLength":100},"packageRevision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"lookbackMonths":{"type":"integer","minimum":1,"maximum":24},"proposalIds":{"maxItems":100,"type":"array","items":{"type":"string","minLength":1,"maxLength":100}},"comparabilityNote":{"type":"string","minLength":10,"maxLength":3000},"costs":{"type":"object","properties":{"laborMinutes":{"type":"integer","minimum":0,"maximum":300000},"ownerHourlyCents":{"type":"integer","minimum":0,"maximum":99999999},"directCents":{"type":"integer","minimum":0,"maximum":99999999},"annualOverheadCents":{"type":"integer","minimum":0,"maximum":99999999},"annualBookings":{"type":"integer","minimum":1,"maximum":10000},"marginBasisPoints":{"type":"integer","minimum":0,"maximum":8000},"processingBasisPoints":{"type":"integer","minimum":0,"maximum":2000},"processingFlatCents":{"type":"integer","minimum":0,"maximum":10000},"paymentsPerBooking":{"type":"integer","minimum":1,"maximum":100},"assumptions":{"type":"string","minLength":10,"maxLength":4000}},"required":["laborMinutes","ownerHourlyCents","directCents","annualOverheadCents","annualBookings","marginBasisPoints","processingBasisPoints","processingFlatCents","paymentsPerBooking","assumptions"],"additionalProperties":false}},"required":["version","title","packageId","packageRevision","lookbackMonths","proposalIds","comparabilityNote","costs"],"additionalProperties":false}},"required":["operation","data"],"additionalProperties":false},{"type":"object","properties":{"operation":{"type":"string","const":"save"},"data":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":100},"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"definition":{"type":"object","properties":{"version":{"type":"number","const":1},"title":{"type":"string","minLength":2,"maxLength":160},"packageId":{"type":"string","minLength":1,"maxLength":100},"packageRevision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"lookbackMonths":{"type":"integer","minimum":1,"maximum":24},"proposalIds":{"maxItems":100,"type":"array","items":{"type":"string","minLength":1,"maxLength":100}},"comparabilityNote":{"type":"string","minLength":10,"maxLength":3000},"costs":{"type":"object","properties":{"laborMinutes":{"type":"integer","minimum":0,"maximum":300000},"ownerHourlyCents":{"type":"integer","minimum":0,"maximum":99999999},"directCents":{"type":"integer","minimum":0,"maximum":99999999},"annualOverheadCents":{"type":"integer","minimum":0,"maximum":99999999},"annualBookings":{"type":"integer","minimum":1,"maximum":10000},"marginBasisPoints":{"type":"integer","minimum":0,"maximum":8000},"processingBasisPoints":{"type":"integer","minimum":0,"maximum":2000},"processingFlatCents":{"type":"integer","minimum":0,"maximum":10000},"paymentsPerBooking":{"type":"integer","minimum":1,"maximum":100},"assumptions":{"type":"string","minLength":10,"maxLength":4000}},"required":["laborMinutes","ownerHourlyCents","directCents","annualOverheadCents","annualBookings","marginBasisPoints","processingBasisPoints","processingFlatCents","paymentsPerBooking","assumptions"],"additionalProperties":false}},"required":["version","title","packageId","packageRevision","lookbackMonths","proposalIds","comparabilityNote","costs"],"additionalProperties":false},"reviewedHash":{"type":"string","pattern":"^[a-f0-9]{64}$"},"approved":{"type":"boolean","const":true}},"required":["expectedRevision","requestId","definition","reviewedHash","approved"],"additionalProperties":false}},"required":["operation","data"],"additionalProperties":false}]}}}},"responses":{"200":{"description":"Current review hash or idempotent saved worksheet result."},"400":{"description":"Invalid cost assumptions or unsupported price limit."},"403":{"description":"Missing scopes or named membership."},"404":{"description":"Private source is unavailable or outside period."},"409":{"description":"Package, proposal outcome or worksheet revision changed."}}}},"/resources/crew/staffing":{"get":{"summary":"Read role/location staffing counts, confirmed coverage and current eligible candidates","description":"Requires a current named account session and authorized private workspace membership. Scoped integration keys and shared-wedding invitations do not grant access. Mutations retain original request identities and source revision checks; reload before applying a changed review. External provider activation is separate.","security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string"}},{"name":"weddingId","in":"query","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Authorized retained result. Read responses are private and no-store.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid operation or details."},"401":{"description":"Account session required."},"403":{"description":"Named operator required."},"404":{"description":"Unavailable or foreign record."},"409":{"description":"Current revision or original request no longer matches."},"500":{"description":"Changed record, unavailable provider or failed operation; inspect current state before retrying."}}},"put":{"summary":"Save a revision-checked required staffing plan; does not offer or message staff","description":"Requires a current named account session and authorized private workspace membership. Scoped integration keys and shared-wedding invitations do not grant access. Mutations retain original request identities and source revision checks; reload before applying a changed review. External provider activation is separate.","security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"weddingId":{"type":"string","minLength":1,"maxLength":100},"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"requirements":{"maxItems":150,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"label":{"type":"string","minLength":1,"maxLength":120},"role":{"type":"string","minLength":1,"maxLength":60},"location":{"type":"string","maxLength":300},"count":{"type":"integer","minimum":1,"maximum":100},"startsAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"endsAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["id","label","role","location","count","startsAt","endsAt"],"additionalProperties":false}}},"required":["weddingId","expectedRevision","requestId","requirements"],"additionalProperties":false}}}},"responses":{"200":{"description":"Authorized retained result. Read responses are private and no-store.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid operation or details."},"401":{"description":"Account session required."},"403":{"description":"Named operator required."},"404":{"description":"Unavailable or foreign record."},"409":{"description":"Current revision or original request no longer matches."},"500":{"description":"Changed record, unavailable provider or failed operation; inspect current state before retrying."}}}},"/resources/crew/{id}/sms":{"get":{"summary":"Read current crew operational SMS permission and sender enrollment state","description":"Requires a current named account session and authorized private workspace membership. Scoped integration keys and shared-wedding invitations do not grant access. Mutations retain original request identities and source revision checks; reload before applying a changed review. External provider activation is separate.","security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":100}}],"responses":{"200":{"description":"Authorized retained result. Read responses are private and no-store.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid operation or details."},"401":{"description":"Account session required."},"403":{"description":"Named operator required."},"404":{"description":"Unavailable or foreign record."},"409":{"description":"Current revision or original request no longer matches."},"500":{"description":"Changed record, unavailable provider or failed operation; inspect current state before retrying."}}},"put":{"summary":"Approve reminder timing, quiet hours and per-person delivery cap; only the recipient can verify phone permission","description":"Requires a current named account session and authorized private workspace membership. Scoped integration keys and shared-wedding invitations do not grant access. Mutations retain original request identities and source revision checks; reload before applying a changed review. External provider activation is separate.","security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":100}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"settings":{"type":"object","properties":{"enabled":{"type":"boolean"},"timezone":{"type":"string"},"quietStart":{"type":"string","pattern":"^(?:[01]\\d|2[0-3]):[0-5]\\d$"},"quietEnd":{"type":"string","pattern":"^(?:[01]\\d|2[0-3]):[0-5]\\d$"},"dailyLimit":{"type":"integer","minimum":1,"maximum":10}},"required":["enabled","timezone","quietStart","quietEnd","dailyLimit"],"additionalProperties":false},"approved":{"type":"boolean","const":true}},"required":["expectedRevision","requestId","settings","approved"],"additionalProperties":false}}}},"responses":{"200":{"description":"Authorized retained result. Read responses are private and no-store.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid operation or details."},"401":{"description":"Account session required."},"403":{"description":"Named operator required."},"404":{"description":"Unavailable or foreign record."},"409":{"description":"Current revision or original request no longer matches."},"500":{"description":"Changed record, unavailable provider or failed operation; inspect current state before retrying."}}}},"/galleries/{id}/deliveries":{"get":{"summary":"Read scoped client/vendor delivery permissions without reconstructing private link tokens","description":"Requires a current named account session and authorized private workspace membership. Scoped integration keys and shared-wedding invitations do not grant access. Mutations retain original request identities and source revision checks; reload before applying a changed review. External provider activation is separate.","security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":100}}],"responses":{"200":{"description":"Authorized retained result. Read responses are private and no-store.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid operation or details."},"401":{"description":"Account session required."},"403":{"description":"Named operator required."},"404":{"description":"Unavailable or foreign record."},"409":{"description":"Current revision or original request no longer matches."},"500":{"description":"Changed record, unavailable provider or failed operation; inspect current state before retrying."}}},"post":{"summary":"Create an exact selected-photo delivery with its own expiry, password and download policy","description":"Requires a current named account session and authorized private workspace membership. Scoped integration keys and shared-wedding invitations do not grant access. Mutations retain original request identities and source revision checks; reload before applying a changed review. External provider activation is separate.","security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":100}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"token":{"type":"string","pattern":"^[a-f0-9]{64}$"},"label":{"type":"string","minLength":2,"maxLength":120},"recipient":{"type":"string","minLength":2,"maxLength":200},"purpose":{"type":"string","enum":["CLIENT","VENDOR","COUPLE","GUEST"]},"mediaIds":{"minItems":1,"maxItems":2000,"type":"array","items":{"type":"string","minLength":1,"maxLength":100}},"downloadPolicy":{"type":"string","enum":["NONE","WEB","ORIGINAL"]},"expiresAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"password":{"type":"string","maxLength":100},"usageTerms":{"type":"string","maxLength":5000},"confirmed":{"type":"boolean","const":true}},"required":["requestId","token","label","recipient","purpose","mediaIds","downloadPolicy","expiresAt","password","usageTerms","confirmed"],"additionalProperties":false}}}},"responses":{"200":{"description":"Authorized retained result. Read responses are private and no-store.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid operation or details."},"401":{"description":"Account session required."},"403":{"description":"Named operator required."},"404":{"description":"Unavailable or foreign record."},"409":{"description":"Current revision or original request no longer matches."},"500":{"description":"Changed record, unavailable provider or failed operation; inspect current state before retrying."}}},"delete":{"summary":"Revoke selected-photo delivery; existing signed file URLs expire within a minute","description":"Requires a current named account session and authorized private workspace membership. Scoped integration keys and shared-wedding invitations do not grant access. Mutations retain original request identities and source revision checks; reload before applying a changed review. External provider activation is separate.","security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":100}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"grantId":{"type":"string","pattern":"^[a-f0-9]{64}$"},"expectedRevision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["grantId","expectedRevision","requestId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Authorized retained result. Read responses are private and no-store.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid operation or details."},"401":{"description":"Account session required."},"403":{"description":"Named operator required."},"404":{"description":"Unavailable or foreign record."},"409":{"description":"Current revision or original request no longer matches."},"500":{"description":"Changed record, unavailable provider or failed operation; inspect current state before retrying."}}}},"/galleries/{id}/domains":{"get":{"summary":"Read domain ownership challenges and provider/DNS/TLS activation status","description":"Requires a current named account session and authorized private workspace membership. Scoped integration keys and shared-wedding invitations do not grant access. Mutations retain original request identities and source revision checks; reload before applying a changed review. External provider activation is separate.","security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":100}}],"responses":{"200":{"description":"Authorized retained result. Read responses are private and no-store.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid operation or details."},"401":{"description":"Account session required."},"403":{"description":"Named operator required."},"404":{"description":"Unavailable or foreign record."},"409":{"description":"Current revision or original request no longer matches."},"500":{"description":"Changed record, unavailable provider or failed operation; inspect current state before retrying."}}},"post":{"summary":"Prepare, verify or explicitly activate/suspend/remove a gallery hostname","description":"Requires a current named account session and authorized private workspace membership. Scoped integration keys and shared-wedding invitations do not grant access. Mutations retain original request identities and source revision checks; reload before applying a changed review. External provider activation is separate.","security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":100}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","anyOf":[{"type":"object","properties":{"hostname":{"type":"string","maxLength":253},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"operation":{"type":"string","const":"request"}},"required":["hostname","requestId","operation"],"additionalProperties":false},{"type":"object","properties":{"claimId":{"type":"string","minLength":1,"maxLength":100},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"operation":{"type":"string","const":"verify"}},"required":["claimId","requestId","operation"],"additionalProperties":false},{"type":"object","properties":{"hostname":{"type":"string","maxLength":253},"expectedRevision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"kind":{"type":"string","enum":["ACTIVATE","SUSPEND","RETRY","REMOVE"]},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"operation":{"type":"string","const":"change"}},"required":["hostname","expectedRevision","kind","requestId","operation"],"additionalProperties":false}]}}}},"responses":{"200":{"description":"Authorized retained result. Read responses are private and no-store.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid operation or details."},"401":{"description":"Account session required."},"403":{"description":"Named operator required."},"404":{"description":"Unavailable or foreign record."},"409":{"description":"Current revision or original request no longer matches."},"500":{"description":"Changed record, unavailable provider or failed operation; inspect current state before retrying."}}}},"/galleries/presets":{"get":{"summary":"List up to 100 private studio delivery presets","description":"Requires a current named account session and authorized private workspace membership. Scoped integration keys and shared-wedding invitations do not grant access. Mutations retain original request identities and source revision checks; reload before applying a changed review. External provider activation is separate.","security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Authorized retained result. Read responses are private and no-store.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid operation or details."},"401":{"description":"Account session required."},"403":{"description":"Named operator required."},"404":{"description":"Unavailable or foreign record."},"409":{"description":"Current revision or original request no longer matches."},"500":{"description":"Changed record, unavailable provider or failed operation; inspect current state before retrying."}}},"post":{"summary":"Create, revise or archive a reusable delivery preset","description":"Requires a current named account session and authorized private workspace membership. Scoped integration keys and shared-wedding invitations do not grant access. Mutations retain original request identities and source revision checks; reload before applying a changed review. External provider activation is separate.","security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"type":"string","minLength":1,"maxLength":100},"archived":{"type":"boolean"},"settings":{"type":"object","properties":{"downloadPolicy":{"type":"string","enum":["NONE","WEB","ORIGINAL","PURCHASED"]},"watermarkText":{"type":"string","maxLength":100},"watermarkDownloads":{"default":false,"type":"boolean"},"theme":{"type":"string","enum":["EDITORIAL","GRID","DARK"]},"accentColor":{"type":"string","pattern":"^#[a-fA-F0-9]{6}$"},"singlePriceCents":{"type":"integer","minimum":50,"maximum":1000000},"collectionPriceCents":{"type":"integer","minimum":50,"maximum":10000000},"extensionPriceCents":{"type":"integer","minimum":50,"maximum":1000000},"expiresInDays":{"anyOf":[{"type":"integer","minimum":1,"maximum":3650},{"type":"null"}]},"folders":{"maxItems":30,"type":"array","items":{"type":"object","properties":{"title":{"type":"string","minLength":1,"maxLength":100},"hidden":{"type":"boolean"}},"required":["title","hidden"],"additionalProperties":false}}},"required":["downloadPolicy","watermarkText","theme","accentColor","singlePriceCents","collectionPriceCents","extensionPriceCents","expiresInDays","folders"],"additionalProperties":false}},"required":["id","expectedRevision","requestId","name","archived","settings"],"additionalProperties":false}}}},"responses":{"200":{"description":"Authorized retained result. Read responses are private and no-store.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid operation or details."},"401":{"description":"Account session required."},"403":{"description":"Named operator required."},"404":{"description":"Unavailable or foreign record."},"409":{"description":"Current revision or original request no longer matches."},"500":{"description":"Changed record, unavailable provider or failed operation; inspect current state before retrying."}}},"put":{"summary":"Apply an exact reviewed preset revision to a draft gallery","description":"Requires a current named account session and authorized private workspace membership. Scoped integration keys and shared-wedding invitations do not grant access. Mutations retain original request identities and source revision checks; reload before applying a changed review. External provider activation is separate.","security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"galleryId":{"type":"string","minLength":1,"maxLength":100},"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"presetId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"presetRevision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"reviewed":{"type":"boolean","const":true}},"required":["galleryId","expectedRevision","presetId","presetRevision","requestId","reviewed"],"additionalProperties":false}}}},"responses":{"200":{"description":"Authorized retained result. Read responses are private and no-store.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid operation or details."},"401":{"description":"Account session required."},"403":{"description":"Named operator required."},"404":{"description":"Unavailable or foreign record."},"409":{"description":"Current revision or original request no longer matches."},"500":{"description":"Changed record, unavailable provider or failed operation; inspect current state before retrying."}}}},"/galleries/merchandising":{"get":{"summary":"Read private reusable price lists and optional gallery offers","description":"Requires a current named account session and authorized private workspace membership. Scoped integration keys and shared-wedding invitations do not grant access. Mutations retain original request identities and source revision checks; reload before applying a changed review. External provider activation is separate.","security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string"}},{"name":"galleryId","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Authorized retained result. Read responses are private and no-store.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid operation or details."},"401":{"description":"Account session required."},"403":{"description":"Named operator required."},"404":{"description":"Unavailable or foreign record."},"409":{"description":"Current revision or original request no longer matches."},"500":{"description":"Changed record, unavailable provider or failed operation; inspect current state before retrying."}}},"post":{"summary":"Save reviewed retail pricing, pin an exact list revision, manage coupon terms or publish a timed banner","description":"Requires a current named account session and authorized private workspace membership. Scoped integration keys and shared-wedding invitations do not grant access. Mutations retain original request identities and source revision checks; reload before applying a changed review. External provider activation is separate.","security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","oneOf":[{"type":"object","properties":{"operation":{"type":"string","const":"priceList"},"input":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"type":"string","minLength":1,"maxLength":100},"archived":{"type":"boolean"},"entries":{"minItems":1,"maxItems":200,"type":"array","items":{"type":"object","properties":{"productId":{"type":"string","minLength":1,"maxLength":100},"priceCents":{"type":"integer","minimum":50,"maximum":1000000},"albumUpgradeCents":{"type":"integer","minimum":0,"maximum":1000000}},"required":["productId","priceCents","albumUpgradeCents"],"additionalProperties":false}},"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"reviewed":{"type":"boolean","const":true}},"required":["id","name","archived","entries","expectedRevision","requestId","reviewed"],"additionalProperties":false}},"required":["operation","input"]},{"type":"object","properties":{"operation":{"type":"string","const":"assignment"},"input":{"type":"object","properties":{"galleryId":{"type":"string","minLength":1,"maxLength":100},"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"priceListId":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"priceListRevision":{"anyOf":[{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},{"type":"null"}]},"reviewed":{"type":"boolean","const":true}},"required":["galleryId","expectedRevision","requestId","priceListId","priceListRevision","reviewed"],"additionalProperties":false}},"required":["operation","input"]},{"type":"object","properties":{"operation":{"type":"string","const":"coupon"},"input":{"type":"object","properties":{"galleryId":{"type":"string","minLength":1,"maxLength":100},"code":{"type":"string","pattern":"^[A-Z0-9_-]{3,40}$"},"percentOff":{"type":"integer","minimum":1,"maximum":90},"expiresAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"maxRedemptions":{"type":"integer","minimum":1,"maximum":10000},"active":{"type":"boolean"},"expectedHash":{"anyOf":[{"type":"string","minLength":64,"maxLength":64},{"type":"null"}]},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"reviewed":{"type":"boolean","const":true}},"required":["galleryId","code","percentOff","expiresAt","maxRedemptions","active","expectedHash","requestId","reviewed"],"additionalProperties":false}},"required":["operation","input"]},{"type":"object","properties":{"operation":{"type":"string","const":"banner"},"input":{"type":"object","properties":{"enabled":{"type":"boolean"},"headline":{"type":"string","minLength":1,"maxLength":150},"body":{"type":"string","maxLength":1000},"code":{"type":"string","pattern":"^[A-Z0-9_-]{3,40}$"},"startsAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"endsAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"galleryId":{"type":"string","minLength":1,"maxLength":100},"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"reviewed":{"type":"boolean","const":true}},"required":["enabled","headline","body","code","startsAt","endsAt","galleryId","expectedRevision","requestId","reviewed"],"additionalProperties":false}},"required":["operation","input"]}]}}}},"responses":{"200":{"description":"Authorized retained result. Read responses are private and no-store.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid operation or details."},"401":{"description":"Account session required."},"403":{"description":"Named operator required."},"404":{"description":"Unavailable or foreign record."},"409":{"description":"Current revision or original request no longer matches."},"500":{"description":"Changed record, unavailable provider or failed operation; inspect current state before retrying."}}}},"/galleries/{id}/gifts":{"post":{"summary":"Preview or owner-authorize a studio-funded physical gift, or control its original production attempt","description":"Requires a current named account session and authorized private workspace membership. Scoped integration keys and shared-wedding invitations do not grant access. Mutations retain original request identities and source revision checks; reload before applying a changed review. External provider activation is separate.","security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":100}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","oneOf":[{"type":"object","properties":{"operation":{"type":"string","const":"preview"},"input":{"type":"object","properties":{"galleryId":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"items":{"default":[],"maxItems":20,"type":"array","items":{"type":"object","properties":{"productId":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},"mediaId":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},"albumId":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},"coverMediaId":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},"quantity":{"type":"integer","minimum":1,"maximum":20},"surfaces":{"minItems":1,"maxItems":8,"type":"array","items":{"type":"object","properties":{"mediaId":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},"crop":{"type":"object","properties":{"centerX":{"type":"number","minimum":0,"maximum":1},"centerY":{"type":"number","minimum":0,"maximum":1},"zoom":{"type":"number","minimum":1,"maximum":5},"rotation":{"anyOf":[{"type":"number","const":0},{"type":"number","const":90},{"type":"number","const":180},{"type":"number","const":270}]}},"required":["centerX","centerY","zoom","rotation"],"additionalProperties":false}},"required":["mediaId","crop"],"additionalProperties":false}},"crop":{"default":{"centerX":0.5,"centerY":0.5,"zoom":1,"rotation":0},"type":"object","properties":{"centerX":{"type":"number","minimum":0,"maximum":1},"centerY":{"type":"number","minimum":0,"maximum":1},"zoom":{"type":"number","minimum":1,"maximum":5},"rotation":{"anyOf":[{"type":"number","const":0},{"type":"number","const":90},{"type":"number","const":180},{"type":"number","const":270}]}},"required":["centerX","centerY","zoom","rotation"],"additionalProperties":false}},"required":["productId","quantity"],"additionalProperties":false}},"shipping":{"type":"object","properties":{"name":{"type":"string","minLength":2,"maxLength":80},"line1":{"type":"string","minLength":2,"maxLength":100},"line2":{"type":"string","maxLength":100},"city":{"type":"string","minLength":1,"maxLength":80},"state":{"type":"string","pattern":"^[A-Z]{2}$"},"postalCode":{"type":"string","pattern":"^\\d{5}(-\\d{4})?$"},"country":{"type":"string","const":"US"},"phone":{"type":"string","pattern":"^\\d{10}$"}},"required":["name","line1","line2","city","state","postalCode","country","phone"],"additionalProperties":false},"note":{"type":"string","maxLength":500},"maxCostCents":{"type":"integer","minimum":1,"maximum":1000000},"reviewHash":{"type":"string","minLength":64,"maxLength":64},"approved":{"default":false,"type":"boolean"}},"required":["galleryId","requestId","shipping","note","maxCostCents"],"additionalProperties":false}},"required":["operation","input"]},{"type":"object","properties":{"operation":{"type":"string","const":"authorize"},"input":{"type":"object","properties":{"galleryId":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"items":{"default":[],"maxItems":20,"type":"array","items":{"type":"object","properties":{"productId":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},"mediaId":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},"albumId":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},"coverMediaId":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},"quantity":{"type":"integer","minimum":1,"maximum":20},"surfaces":{"minItems":1,"maxItems":8,"type":"array","items":{"type":"object","properties":{"mediaId":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},"crop":{"type":"object","properties":{"centerX":{"type":"number","minimum":0,"maximum":1},"centerY":{"type":"number","minimum":0,"maximum":1},"zoom":{"type":"number","minimum":1,"maximum":5},"rotation":{"anyOf":[{"type":"number","const":0},{"type":"number","const":90},{"type":"number","const":180},{"type":"number","const":270}]}},"required":["centerX","centerY","zoom","rotation"],"additionalProperties":false}},"required":["mediaId","crop"],"additionalProperties":false}},"crop":{"default":{"centerX":0.5,"centerY":0.5,"zoom":1,"rotation":0},"type":"object","properties":{"centerX":{"type":"number","minimum":0,"maximum":1},"centerY":{"type":"number","minimum":0,"maximum":1},"zoom":{"type":"number","minimum":1,"maximum":5},"rotation":{"anyOf":[{"type":"number","const":0},{"type":"number","const":90},{"type":"number","const":180},{"type":"number","const":270}]}},"required":["centerX","centerY","zoom","rotation"],"additionalProperties":false}},"required":["productId","quantity"],"additionalProperties":false}},"shipping":{"type":"object","properties":{"name":{"type":"string","minLength":2,"maxLength":80},"line1":{"type":"string","minLength":2,"maxLength":100},"line2":{"type":"string","maxLength":100},"city":{"type":"string","minLength":1,"maxLength":80},"state":{"type":"string","pattern":"^[A-Z]{2}$"},"postalCode":{"type":"string","pattern":"^\\d{5}(-\\d{4})?$"},"country":{"type":"string","const":"US"},"phone":{"type":"string","pattern":"^\\d{10}$"}},"required":["name","line1","line2","city","state","postalCode","country","phone"],"additionalProperties":false},"note":{"type":"string","maxLength":500},"maxCostCents":{"type":"integer","minimum":1,"maximum":1000000},"reviewHash":{"type":"string","minLength":64,"maxLength":64},"approved":{"default":false,"type":"boolean"}},"required":["galleryId","requestId","shipping","note","maxCostCents"],"additionalProperties":false}},"required":["operation","input"]},{"type":"object","properties":{"operation":{"type":"string","const":"control"},"input":{"type":"object","properties":{"galleryId":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},"orderId":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"action":{"type":"string","enum":["CANCEL","RETRY"]},"expectedSnapshotHash":{"type":"string","minLength":64,"maxLength":64}},"required":["galleryId","orderId","requestId","action","expectedSnapshotHash"],"additionalProperties":false}},"required":["operation","input"]}]}}}},"responses":{"200":{"description":"Authorized retained result. Read responses are private and no-store.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid operation or details."},"401":{"description":"Account session required."},"403":{"description":"Named operator required."},"404":{"description":"Unavailable or foreign record."},"409":{"description":"Current revision or original request no longer matches."},"500":{"description":"Changed record, unavailable provider or failed operation; inspect current state before retrying."}}}},"/galleries/{id}/archive":{"get":{"summary":"List private studio archives, retrieve the retained manifest or request a short-lived original/ZIP URL","description":"Requires a current named account session and authorized private workspace membership. Scoped integration keys and shared-wedding invitations do not grant access. Mutations retain original request identities and source revision checks; reload before applying a changed review. External provider activation is separate.","security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":100}},{"name":"archiveId","in":"query","required":false,"schema":{"type":"string","format":"uuid"}},{"name":"partId","in":"query","required":false,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Authorized retained result. Read responses are private and no-store.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid operation or details."},"401":{"description":"Account session required."},"403":{"description":"Named operator required."},"404":{"description":"Unavailable or foreign record."},"409":{"description":"Current revision or original request no longer matches."},"500":{"description":"Changed record, unavailable provider or failed operation; inspect current state before retrying."}}},"post":{"summary":"Freeze exact originals including hidden/historical versions into resumable bounded archive jobs","description":"Requires a current named account session and authorized private workspace membership. Scoped integration keys and shared-wedding invitations do not grant access. Mutations retain original request identities and source revision checks; reload before applying a changed review. External provider activation is separate.","security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":100}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"reviewed":{"type":"boolean","const":true}},"required":["requestId","expectedRevision","reviewed"],"additionalProperties":false}}}},"responses":{"200":{"description":"Authorized retained result. Read responses are private and no-store.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid operation or details."},"401":{"description":"Account session required."},"403":{"description":"Named operator required."},"404":{"description":"Unavailable or foreign record."},"409":{"description":"Current revision or original request no longer matches."},"500":{"description":"Changed record, unavailable provider or failed operation; inspect current state before retrying."}}},"patch":{"summary":"Retry failed parts or expire archive links and unfinished jobs","description":"Requires a current named account session and authorized private workspace membership. Scoped integration keys and shared-wedding invitations do not grant access. Mutations retain original request identities and source revision checks; reload before applying a changed review. External provider activation is separate.","security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":100}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"archiveId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"action":{"type":"string","enum":["RETRY","EXPIRE"]}},"required":["archiveId","action"],"additionalProperties":false}}}},"responses":{"200":{"description":"Authorized retained result. Read responses are private and no-store.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid operation or details."},"401":{"description":"Account session required."},"403":{"description":"Named operator required."},"404":{"description":"Unavailable or foreign record."},"409":{"description":"Current revision or original request no longer matches."},"500":{"description":"Changed record, unavailable provider or failed operation; inspect current state before retrying."}}}},"/galleries/{id}/activity":{"get":{"summary":"Read my own gallery activity digest settings and 30 retained summaries","description":"Requires a current named account session and authorized private workspace membership. Scoped integration keys and shared-wedding invitations do not grant access. Mutations retain original request identities and source revision checks; reload before applying a changed review. External provider activation is separate.","security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":100}}],"responses":{"200":{"description":"Authorized retained result. Read responses are private and no-store.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid operation or details."},"401":{"description":"Account session required."},"403":{"description":"Named operator required."},"404":{"description":"Unavailable or foreign record."},"409":{"description":"Current revision or original request no longer matches."},"500":{"description":"Changed record, unavailable provider or failed operation; inspect current state before retrying."}}},"put":{"summary":"Approve or pause hourly/daily gallery activity summaries for my verified account email","description":"Requires a current named account session and authorized private workspace membership. Scoped integration keys and shared-wedding invitations do not grant access. Mutations retain original request identities and source revision checks; reload before applying a changed review. External provider activation is separate.","security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":100}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"galleryId":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"enabled":{"type":"boolean"},"email":{"anyOf":[{"type":"string","format":"email","pattern":"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"},{"type":"null"}]},"cadence":{"type":"string","enum":["HOURLY","DAILY"]},"kinds":{"minItems":1,"maxItems":4,"type":"array","items":{"type":"string","enum":["VIEWS","DOWNLOADS","FAVORITES","PURCHASES"]}},"reviewed":{"type":"boolean","const":true}},"required":["galleryId","expectedRevision","requestId","enabled","email","cadence","kinds","reviewed"],"additionalProperties":false}}}},"responses":{"200":{"description":"Authorized retained result. Read responses are private and no-store.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid operation or details."},"401":{"description":"Account session required."},"403":{"description":"Named operator required."},"404":{"description":"Unavailable or foreign record."},"409":{"description":"Current revision or original request no longer matches."},"500":{"description":"Changed record, unavailable provider or failed operation; inspect current state before retrying."}}}},"/galleries/{id}/campaigns":{"get":{"summary":"Read last 30 campaigns and up to 500 eligible verified contacts","description":"Requires a current named account session and authorized private workspace membership. Scoped integration keys and shared-wedding invitations do not grant access. Mutations retain original request identities and source revision checks; reload before applying a changed review. External provider activation is separate.","security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":100}}],"responses":{"200":{"description":"Authorized retained result. Read responses are private and no-store.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid operation or details."},"401":{"description":"Account session required."},"403":{"description":"Named operator required."},"404":{"description":"Unavailable or foreign record."},"409":{"description":"Current revision or original request no longer matches."},"500":{"description":"Changed record, unavailable provider or failed operation; inspect current state before retrying."}}},"post":{"summary":"Preview a consented audience or queue a reviewed campaign with live purchase, favorites and offer stop rules","description":"Requires a current named account session and authorized private workspace membership. Scoped integration keys and shared-wedding invitations do not grant access. Mutations retain original request identities and source revision checks; reload before applying a changed review. External provider activation is separate.","security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":100}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","oneOf":[{"type":"object","properties":{"operation":{"type":"string","const":"queue"},"input":{"type":"object","properties":{"audience":{"type":"object","properties":{"selection":{"type":"string","enum":["ALL","SELECTED"]},"contactIds":{"maxItems":500,"type":"array","items":{"type":"string","minLength":1,"maxLength":100}},"purchase":{"type":"string","enum":["ANY","NONE","DIGITAL","PHYSICAL"]},"favorites":{"type":"string","enum":["ANY","HAS_SELECTION","NO_SELECTION"]}},"required":["selection","contactIds","purchase","favorites"],"additionalProperties":false},"promotionCode":{"type":"string","pattern":"^[A-Z0-9_-]{3,40}$"},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"title":{"type":"string","minLength":1,"maxLength":100},"subject":{"type":"string","minLength":1,"maxLength":150},"body":{"type":"string","minLength":1,"maxLength":6000},"kind":{"type":"string","enum":["DELIVERY","MARKETING"]},"recipients":{"maxItems":500,"type":"array","items":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100},"email":{"type":"string","maxLength":254,"format":"email","pattern":"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"}},"required":["name","email"],"additionalProperties":false}},"scheduledAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"}},"required":["requestId","title","subject","body","kind","recipients","scheduledAt"],"additionalProperties":false}},"required":["operation","input"]},{"type":"object","properties":{"operation":{"type":"string","const":"preview"},"input":{"type":"object","properties":{"selection":{"type":"string","enum":["ALL","SELECTED"]},"contactIds":{"maxItems":500,"type":"array","items":{"type":"string","minLength":1,"maxLength":100}},"purchase":{"type":"string","enum":["ANY","NONE","DIGITAL","PHYSICAL"]},"favorites":{"type":"string","enum":["ANY","HAS_SELECTION","NO_SELECTION"]}},"required":["selection","contactIds","purchase","favorites"],"additionalProperties":false}},"required":["operation","input"]}]}}}},"responses":{"200":{"description":"Authorized retained result. Read responses are private and no-store.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid operation or details."},"401":{"description":"Account session required."},"403":{"description":"Named operator required."},"404":{"description":"Unavailable or foreign record."},"409":{"description":"Current revision or original request no longer matches."},"500":{"description":"Changed record, unavailable provider or failed operation; inspect current state before retrying."}}},"delete":{"summary":"Cancel unsent deliveries in a queued campaign","description":"Requires a current named account session and authorized private workspace membership. Scoped integration keys and shared-wedding invitations do not grant access. Mutations retain original request identities and source revision checks; reload before applying a changed review. External provider activation is separate.","security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":100}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"}},"required":["id"],"additionalProperties":false}}}},"responses":{"200":{"description":"Authorized retained result. Read responses are private and no-store.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid operation or details."},"401":{"description":"Account session required."},"403":{"description":"Named operator required."},"404":{"description":"Unavailable or foreign record."},"409":{"description":"Current revision or original request no longer matches."},"500":{"description":"Changed record, unavailable provider or failed operation; inspect current state before retrying."}}}},"/network":{"get":{"summary":"Read own public-profile draft, preferred lists, private reviews and introduction queue","description":"Requires a current named account session and authorized private workspace membership. Scoped integration keys and shared-wedding invitations do not grant access. Mutations retain original request identities and source revision checks; reload before applying a changed review. External provider activation is separate.","security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Authorized retained result. Read responses are private and no-store.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid operation or details."},"401":{"description":"Account session required."},"403":{"description":"Named operator required."},"404":{"description":"Unavailable or foreign record."},"409":{"description":"Current revision or original request no longer matches."},"500":{"description":"Changed record, unavailable provider or failed operation; inspect current state before retrying."}}},"post":{"summary":"Publish an opt-in business profile, reviewed recommendation, moderated experience, introduction decision or photo-credit permission","description":"Requires a current named account session and authorized private workspace membership. Scoped integration keys and shared-wedding invitations do not grant access. Mutations retain original request identities and source revision checks; reload before applying a changed review. External provider activation is separate.","security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","oneOf":[{"type":"object","properties":{"operation":{"type":"string","const":"profile"},"input":{"type":"object","properties":{"slug":{"type":"string","pattern":"^[a-z0-9](?:[a-z0-9-]{1,58}[a-z0-9])$"},"name":{"type":"string","minLength":2,"maxLength":140},"category":{"type":"string","enum":["PLANNER","PHOTOGRAPHER","VIDEOGRAPHER","VENUE","FLORIST","CATERER","DJ","BAND","RENTALS","HAIR_MAKEUP","OFFICIANT","TRANSPORT","CAKE","STATIONERY","OTHER"]},"city":{"type":"string","maxLength":100},"region":{"type":"string","maxLength":100},"description":{"type":"string","maxLength":4000},"services":{"maxItems":20,"type":"array","items":{"type":"string","minLength":1,"maxLength":100}},"website":{"anyOf":[{"type":"string","const":""},{"type":"string","maxLength":500,"format":"uri"}]},"publicEmail":{"anyOf":[{"type":"string","const":""},{"type":"string","maxLength":254,"format":"email","pattern":"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"}]},"published":{"type":"boolean"},"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"confirmed":{"type":"boolean","const":true}},"required":["slug","name","category","city","region","description","services","website","publicEmail","published","expectedRevision","requestId","confirmed"],"additionalProperties":false}},"required":["operation","input"]},{"type":"object","properties":{"operation":{"type":"string","const":"list"},"input":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"title":{"type":"string","minLength":2,"maxLength":150},"introduction":{"type":"string","maxLength":3000},"profileSlugs":{"maxItems":100,"type":"array","items":{"type":"string","pattern":"^[a-z0-9](?:[a-z0-9-]{1,58}[a-z0-9])$"}},"published":{"type":"boolean"},"token":{"type":"string","pattern":"^[a-f0-9]{64}$"},"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"confirmed":{"type":"boolean","const":true}},"required":["id","title","introduction","profileSlugs","published","token","expectedRevision","requestId","confirmed"],"additionalProperties":false}},"required":["operation","input"]},{"type":"object","properties":{"operation":{"type":"string","const":"review"},"input":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"profileSlug":{"type":"string","pattern":"^[a-z0-9](?:[a-z0-9-]{1,58}[a-z0-9])$"},"vendorId":{"type":"string","minLength":1,"maxLength":100},"rating":{"type":"integer","minimum":1,"maximum":5},"body":{"type":"string","minLength":20,"maxLength":3000},"publishRequested":{"type":"boolean"},"confirmed":{"type":"boolean","const":true}},"required":["id","expectedRevision","requestId","profileSlug","vendorId","rating","body","publishRequested","confirmed"],"additionalProperties":false}},"required":["operation","input"]},{"type":"object","properties":{"operation":{"type":"string","const":"reply"},"input":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"expectedRevision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"reply":{"type":"string","maxLength":3000},"confirmed":{"type":"boolean","const":true}},"required":["id","expectedRevision","requestId","reply","confirmed"],"additionalProperties":false}},"required":["operation","input"]},{"type":"object","properties":{"operation":{"type":"string","const":"introduction"},"input":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"expectedRevision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"decision":{"type":"string","enum":["CREATE","ATTACH","DISMISS"]},"leadId":{"type":"string","minLength":1,"maxLength":100},"confirmed":{"type":"boolean","const":true}},"required":["id","expectedRevision","requestId","decision","confirmed"],"additionalProperties":false}},"required":["operation","input"]},{"type":"object","properties":{"operation":{"type":"string","const":"credit"},"input":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"galleryId":{"type":"string","minLength":1,"maxLength":100},"mediaId":{"type":"string","minLength":1,"maxLength":100},"profileSlug":{"type":"string","minLength":3,"maxLength":60},"caption":{"type":"string","maxLength":1000},"credit":{"type":"string","minLength":2,"maxLength":200},"creditUrl":{"anyOf":[{"type":"string","const":""},{"type":"string","maxLength":500,"format":"uri"}]},"terms":{"type":"string","minLength":10,"maxLength":3000},"confirmed":{"type":"boolean","const":true}},"required":["id","requestId","galleryId","mediaId","profileSlug","caption","credit","creditUrl","terms","confirmed"],"additionalProperties":false}},"required":["operation","input"]},{"type":"object","properties":{"operation":{"type":"string","const":"creditChange"},"input":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"expectedRevision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"operation":{"type":"string","enum":["ACCEPT","WITHDRAW","REVOKE"]},"confirmed":{"type":"boolean","const":true}},"required":["id","expectedRevision","requestId","operation","confirmed"],"additionalProperties":false}},"required":["operation","input"]}]}}}},"responses":{"200":{"description":"Authorized retained result. Read responses are private and no-store.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid operation or details."},"401":{"description":"Account session required."},"403":{"description":"Named operator required."},"404":{"description":"Unavailable or foreign record."},"409":{"description":"Current revision or original request no longer matches."},"500":{"description":"Changed record, unavailable provider or failed operation; inspect current state before retrying."}}}},"/photography/location-guides":{"get":{"summary":"Read up to 100 private studio location guides","description":"Requires a current named account session and authorized private workspace membership. Scoped integration keys and shared-wedding invitations do not grant access. Mutations retain original request identities and source revision checks; reload before applying a changed review. External provider activation is separate.","security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Authorized retained result. Read responses are private and no-store.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid operation or details."},"401":{"description":"Account session required."},"403":{"description":"Named operator required."},"404":{"description":"Unavailable or foreign record."},"409":{"description":"Current revision or original request no longer matches."},"500":{"description":"Changed record, unavailable provider or failed operation; inspect current state before retrying."}}},"post":{"summary":"Save a revision-checked location guide with explicitly selected gallery photographs","description":"Requires a current named account session and authorized private workspace membership. Scoped integration keys and shared-wedding invitations do not grant access. Mutations retain original request identities and source revision checks; reload before applying a changed review. External provider activation is separate.","security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Workspace-Id","in":"header","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"id":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"title":{"type":"string","minLength":1,"maxLength":150},"published":{"type":"boolean"},"locations":{"maxItems":100,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},"name":{"type":"string","minLength":1,"maxLength":120},"address":{"type":"string","maxLength":240},"style":{"type":"string","maxLength":80},"notes":{"type":"string","maxLength":1500},"permitRequired":{"type":"boolean"},"feeCents":{"type":"integer","minimum":0,"maximum":10000000},"latitude":{"anyOf":[{"type":"number","minimum":-90,"maximum":90},{"type":"null"}]},"longitude":{"anyOf":[{"type":"number","minimum":-180,"maximum":180},{"type":"null"}]},"imageUrls":{"maxItems":10,"type":"array","items":{"type":"string","format":"uri"}},"imageMediaIds":{"maxItems":10,"type":"array","items":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"}}},"required":["id","name","address","style","notes","permitRequired","feeCents","latitude","longitude","imageUrls"],"additionalProperties":false}}},"required":["expectedRevision","title","published","locations"],"additionalProperties":false}}}},"responses":{"200":{"description":"Authorized retained result. Read responses are private and no-store.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid operation or details."},"401":{"description":"Account session required."},"403":{"description":"Named operator required."},"404":{"description":"Unavailable or foreign record."},"409":{"description":"Current revision or original request no longer matches."},"500":{"description":"Changed record, unavailable provider or failed operation; inspect current state before retrying."}}}},"/signing-evidence":{"get":{"summary":"Read administrator signing-request retention policy and recent evidence receipts","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}},"post":{"summary":"Set future retention or place/release an attributable request metadata hold","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","oneOf":[{"type":"object","properties":{"action":{"type":"string","const":"policy"},"input":{"type":"object","properties":{"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"days":{"type":"integer","minimum":7,"maximum":3650},"confirmed":{"type":"boolean","const":true}},"required":["requestId","expectedRevision","days","confirmed"],"additionalProperties":false}},"required":["action","input"]},{"type":"object","properties":{"action":{"type":"string","const":"hold"},"input":{"type":"object","properties":{"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"id":{"type":"string","minLength":1,"maxLength":100},"expectedHold":{"anyOf":[{"type":"string"},{"type":"null"}]},"hold":{"type":"boolean"},"reason":{"type":"string","minLength":3,"maxLength":1000}},"required":["requestId","id","expectedHold","hold","reason"],"additionalProperties":false}},"required":["action","input"]}]}}}},"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}}},"/operations/attention":{"get":{"summary":"List current business integration, import, order and delivery exceptions with original recovery destinations","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":30}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}}},"/workspaces/ownership":{"get":{"summary":"Review current named workspace ownership offers and eligible existing operators","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}},"post":{"summary":"Offer ownership or accept, decline or cancel an exact two-party handoff; private records and seat enrollments are preserved","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","oneOf":[{"type":"object","properties":{"operation":{"type":"string","const":"OFFER"},"data":{"type":"object","properties":{"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"targetMembershipId":{"type":"string","minLength":1,"maxLength":100},"reviewedHash":{"type":"string","pattern":"^[a-f0-9]{64}$"},"reason":{"type":"string","minLength":3,"maxLength":1000},"expiresInDays":{"default":7,"type":"integer","minimum":1,"maximum":14},"confirmed":{"type":"boolean","const":true}},"required":["requestId","targetMembershipId","reviewedHash","reason","confirmed"],"additionalProperties":false}},"required":["operation","data"],"additionalProperties":false},{"type":"object","properties":{"operation":{"type":"string","const":"DECIDE"},"data":{"type":"object","properties":{"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"id":{"type":"string","minLength":1,"maxLength":100},"expectedRevision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"reviewedHash":{"type":"string","pattern":"^[a-f0-9]{64}$"},"decision":{"type":"string","enum":["ACCEPT","DECLINE","CANCEL"]},"confirmed":{"type":"boolean","const":true}},"required":["requestId","id","expectedRevision","reviewedHash","decision","confirmed"],"additionalProperties":false}},"required":["operation","data"],"additionalProperties":false}]}}}},"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}}},"/mailing":{"get":{"summary":"Review household envelope-addressing suggestions and current approval provenance","description":"Requires guests:read for an API key, or a full workspace membership for a Clerk session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"guests:read","parameters":[{"name":"weddingId","in":"query","required":true,"schema":{"type":"string","minLength":1,"maxLength":100}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}},"post":{"summary":"Save exact reviewed envelope lines as a named operator against current household and address","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"weddingId":{"type":"string","minLength":1,"maxLength":100},"householdId":{"type":"string","minLength":1,"maxLength":100},"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"sourceHash":{"type":"string","pattern":"^[a-f0-9]{64}$"},"addressee":{"type":"string","minLength":1,"maxLength":400},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"approved":{"type":"boolean","const":true}},"required":["weddingId","householdId","expectedRevision","sourceHash","addressee","requestId","approved"],"additionalProperties":false}}}},"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}}},"/binders":{"get":{"summary":"Read private role presets and ready cover image choices for an owned project","description":"Requires projects:read for an API key, or a full workspace membership for a Clerk session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"projects:read","parameters":[{"name":"weddingId","in":"query","required":true,"schema":{"type":"string","minLength":1,"maxLength":100}},{"name":"presetId","in":"query","required":false,"schema":{"type":"string","minLength":1,"maxLength":100}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}},"post":{"summary":"Save, archive or restore a reviewed private branded binder preset with revision and request identity","description":"Requires projects:write for an API key, or a full workspace membership for a Clerk session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"projects:write","parameters":[{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"id":{"type":"string","minLength":1,"maxLength":100},"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"name":{"type":"string","minLength":1,"maxLength":120},"definition":{"type":"object","properties":{"role":{"type":"string","enum":["COORDINATOR","COUPLE","PHOTOGRAPHER","VENDOR","CUSTOM"]},"coverTitle":{"type":"string","minLength":1,"maxLength":120},"subtitle":{"default":"","type":"string","maxLength":300},"footer":{"default":"","type":"string","maxLength":300},"timelineSource":{"default":"PUBLISHED","type":"string","enum":["PUBLISHED","DRAFT"]},"paper":{"default":"LETTER","type":"string","enum":["LETTER","A4"]},"theme":{"default":"SAGE","type":"string","enum":["SAGE","INK","CREAM"]},"imageAssetIds":{"default":[],"maxItems":6,"type":"array","items":{"type":"string","minLength":1,"maxLength":100}},"sections":{"minItems":1,"maxItems":6,"type":"array","items":{"type":"string","enum":["RUN_OF_SHOW","CONTACTS","LOGISTICS","SEATING","CREW","OVERVIEW"]}},"includeContactDetails":{"default":false,"type":"boolean"},"includePrivateOverview":{"default":false,"type":"boolean"}},"required":["role","coverTitle","sections"],"additionalProperties":false},"archived":{"default":false,"type":"boolean"}},"required":["requestId","expectedRevision","name","definition"],"additionalProperties":false}}}},"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}}},"/task-board":{"get":{"summary":"Read the private combined business/project task board with current columns and assignments","description":"Requires tasks:read for an API key, or a full workspace membership for a Clerk session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"tasks:read","parameters":[{"name":"weddingId","in":"query","required":false,"schema":{"type":"string","minLength":1,"maxLength":100}},{"name":"assignedMembershipId","in":"query","required":false,"schema":{"type":"string","minLength":1,"maxLength":100}},{"name":"source","in":"query","required":false,"schema":{"default":"ALL","type":"string","enum":["ALL","PROJECT","BUSINESS"]}},{"name":"status","in":"query","required":false,"schema":{"default":"OPEN","type":"string","enum":["OPEN","DONE","ALL","ARCHIVED"]}},{"name":"q","in":"query","required":false,"schema":{"default":"","type":"string","maxLength":100}},{"name":"columnKey","in":"query","required":false,"schema":{"type":"string","minLength":1,"maxLength":100}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"maximum":9007199254740991}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100}},{"name":"revision","in":"query","required":false,"schema":{"type":"string"}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}},"post":{"summary":"Save a business task, move or prioritize authorized work, or configure task columns as a named administrator","description":"Requires tasks:write for an API key, or a full workspace membership for a Clerk session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"tasks:write","parameters":[{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","oneOf":[{"type":"object","properties":{"operation":{"type":"string","const":"COLUMNS"},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"columns":{"minItems":2,"maxItems":16,"type":"array","items":{"type":"object","properties":{"key":{"type":"string","pattern":"^[a-zA-Z0-9_-]{3,100}$"},"name":{"type":"string","minLength":1,"maxLength":50},"complete":{"type":"boolean"}},"required":["key","name","complete"],"additionalProperties":false}}},"required":["operation","requestId","expectedRevision","columns"],"additionalProperties":false},{"type":"object","properties":{"operation":{"type":"string","const":"BUSINESS"},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"id":{"type":"string","minLength":1,"maxLength":100},"expectedBoardRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"title":{"type":"string","minLength":1,"maxLength":180},"notes":{"type":"string","maxLength":4000},"dueDate":{"anyOf":[{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},{"type":"null"}]},"columnKey":{"type":"string","minLength":1,"maxLength":100},"priority":{"type":"string","enum":["URGENT","HIGH","NORMAL","LOW"]},"assignedMembershipId":{"anyOf":[{"type":"string","minLength":1,"maxLength":100},{"type":"null"}]},"archived":{"default":false,"type":"boolean"}},"required":["operation","requestId","expectedRevision","expectedBoardRevision","title","notes","dueDate","columnKey","priority","assignedMembershipId"],"additionalProperties":false},{"type":"object","properties":{"operation":{"type":"string","const":"MOVE"},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"source":{"type":"string","enum":["PROJECT","BUSINESS"]},"id":{"type":"string","minLength":1,"maxLength":100},"expectedBoardRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"columnKey":{"type":"string","minLength":1,"maxLength":100},"priority":{"type":"string","enum":["URGENT","HIGH","NORMAL","LOW"]},"assignedMembershipId":{"anyOf":[{"type":"string","minLength":1,"maxLength":100},{"type":"null"}]}},"required":["operation","requestId","expectedRevision","source","id","expectedBoardRevision","columnKey","priority","assignedMembershipId"],"additionalProperties":false}]}}}},"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}}},"/task-schedules":{"get":{"summary":"Read current private tasks, assignments and recurring schedules with independent task/schedule cursors","description":"Requires tasks:read for an API key, or a full workspace membership for a Clerk session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"tasks:read","parameters":[{"name":"weddingId","in":"query","required":false,"schema":{"type":"string","minLength":1,"maxLength":100}},{"name":"assignedMembershipId","in":"query","required":false,"schema":{"type":"string","minLength":1,"maxLength":100}},{"name":"status","in":"query","required":false,"schema":{"default":"OPEN","type":"string","enum":["OPEN","DONE","ALL"]}},{"name":"scheduleAfter","in":"query","required":false,"schema":{"type":"string","minLength":1,"maxLength":100}},{"name":"after","in":"query","required":false,"schema":{"type":"string","minLength":1,"maxLength":100}},{"name":"limit","in":"query","required":false,"schema":{"default":50,"type":"integer","minimum":1,"maximum":100}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}},"post":{"summary":"Save or control a recurring project task, or assign a reviewed current task","description":"Requires tasks:write for an API key, or a full workspace membership for a Clerk session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"tasks:write","parameters":[{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","oneOf":[{"type":"object","properties":{"operation":{"type":"string","const":"SAVE"},"data":{"type":"object","properties":{"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"id":{"type":"string","minLength":1,"maxLength":100},"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"weddingId":{"type":"string","minLength":1,"maxLength":100},"title":{"type":"string","minLength":1,"maxLength":180},"notes":{"type":"string","maxLength":4000},"assignedMembershipId":{"anyOf":[{"type":"string","minLength":1,"maxLength":100},{"type":"null"}]},"rule":{"type":"object","properties":{"frequency":{"type":"string","enum":["DAILY","WEEKLY","MONTHLY"]},"interval":{"type":"integer","minimum":1,"maximum":52},"startsOn":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"endsOn":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"timezone":{"type":"string","minLength":1,"maxLength":100},"weekdays":{"maxItems":7,"type":"array","items":{"type":"integer","minimum":0,"maximum":6}},"excludedDates":{"maxItems":200,"type":"array","items":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"}}},"required":["frequency","interval","startsOn","endsOn","timezone","weekdays","excludedDates"],"additionalProperties":false}},"required":["requestId","expectedRevision","weddingId","title","notes","assignedMembershipId","rule"],"additionalProperties":false}},"required":["operation","data"],"additionalProperties":false},{"type":"object","properties":{"operation":{"type":"string","const":"CONTROL"},"data":{"type":"object","properties":{"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"id":{"type":"string","minLength":1,"maxLength":100},"expectedRevision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"operation":{"type":"string","enum":["PAUSE","RESUME"]},"catchUp":{"default":false,"type":"boolean"}},"required":["requestId","id","expectedRevision","operation"],"additionalProperties":false}},"required":["operation","data"],"additionalProperties":false},{"type":"object","properties":{"operation":{"type":"string","const":"ASSIGN"},"data":{"type":"object","properties":{"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"id":{"type":"string","minLength":1,"maxLength":100},"expectedRevision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"assignedMembershipId":{"anyOf":[{"type":"string","minLength":1,"maxLength":100},{"type":"null"}]}},"required":["requestId","id","expectedRevision","assignedMembershipId"],"additionalProperties":false}},"required":["operation","data"],"additionalProperties":false}]}}}},"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}}},"/calendar":{"get":{"summary":"Read the private month, week, day or agenda calendar, including selected external sources, task deadlines and accepted crew shifts","description":"Requires calendar:read for an API key, or a full workspace membership for a Clerk session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"calendar:read","parameters":[{"name":"date","in":"query","required":true,"schema":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"}},{"name":"view","in":"query","required":false,"schema":{"default":"month","type":"string","enum":["month","week","day","agenda"]}},{"name":"source","in":"query","required":false,"schema":{"default":"all","type":"string","enum":["all","appointments","projects","tasks","crew","external"]}},{"name":"offset","in":"query","required":false,"schema":{"default":0,"type":"integer","minimum":0,"maximum":9007199254740991}},{"name":"limit","in":"query","required":false,"schema":{"default":50,"type":"integer","minimum":1,"maximum":100}},{"name":"revision","in":"query","required":false,"schema":{"type":"string","pattern":"^[a-f0-9]{64}$"}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}}},"/insights":{"get":{"summary":"Read private inquiry cohorts, reply time, workload, workflow backlog and recorded gallery cash","description":"Requires analytics:read for an API key, or a full workspace membership for a Clerk session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"analytics:read","parameters":[{"name":"from","in":"query","required":true,"schema":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"}},{"name":"to","in":"query","required":true,"schema":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"maximum":9007199254740991}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100}},{"name":"revision","in":"query","required":false,"schema":{"type":"string"}},{"name":"format","in":"query","required":false,"schema":{"type":"string","enum":["json","csv"]}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}}},"/search":{"get":{"summary":"Search private workspace records with per-kind cursors","description":"Requires search:read for an API key, or a full workspace membership for a Clerk session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"search:read","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":1,"maxLength":200}},{"name":"kind","in":"query","required":false,"schema":{"type":"string","enum":["PROJECT","CLIENT","VENDOR","LEAD","TASK","BUSINESS_TASK","DOCUMENT","ASSET","AGREEMENT","INVOICE","GALLERY"]}},{"name":"limit","in":"query","required":false,"schema":{"default":8,"type":"integer","minimum":1,"maximum":100}},{"name":"after","in":"query","required":false,"schema":{"type":"string","minLength":1,"maxLength":100}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}}},"/workflows/project-link":{"get":{"summary":"Review the explicitly linked project for a booking workflow held before project creation","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"runId","in":"query","required":true,"schema":{"type":"string","minLength":1,"maxLength":100}},{"name":"expectedRevision","in":"query","required":true,"schema":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}},"post":{"summary":"Approve the exact project handoff for the remaining saved workflow; retains original recipient, version, prior artifacts and an idempotent audit","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"runId":{"type":"string","minLength":1,"maxLength":100},"expectedRevision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"weddingId":{"type":"string","minLength":1,"maxLength":100},"reviewedHash":{"type":"string","pattern":"^[a-f0-9]{64}$"},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"approved":{"type":"boolean","const":true},"reason":{"type":"string","minLength":3,"maxLength":500}},"required":["runId","expectedRevision","weddingId","reviewedHash","requestId","approved","reason"],"additionalProperties":false}}}},"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}}},"/project-workflows":{"get":{"summary":"Review the exact project client or selected contact for a workflow","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"weddingId","in":"query","required":true,"schema":{"type":"string","minLength":1,"maxLength":100}},{"name":"contactId","in":"query","required":false,"schema":{"default":null,"anyOf":[{"type":"string","minLength":1,"maxLength":100},{"type":"null"}]}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}},"post":{"summary":"Start an approved published project workflow with a pinned recipient and idempotent request","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"requestId":{"type":"string","minLength":8,"maxLength":200},"workflowId":{"type":"string","minLength":1,"maxLength":100},"weddingId":{"type":"string","minLength":1,"maxLength":100},"contactId":{"anyOf":[{"type":"string","minLength":1,"maxLength":100},{"type":"null"}]},"expectedPublishedRevision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"recipientHash":{"type":"string","pattern":"^[a-f0-9]{64}$"},"approved":{"type":"boolean","const":true},"dateAnchors":{"default":{},"type":"object","properties":{"appointmentId":{"type":"string","minLength":1,"maxLength":100},"agreementId":{"type":"string","minLength":1,"maxLength":100},"paymentReceiptId":{"type":"string","minLength":1,"maxLength":100}},"additionalProperties":false}},"required":["requestId","workflowId","weddingId","contactId","expectedPublishedRevision","recipientHash","approved"],"additionalProperties":false}}}},"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}}},"/finance/reports":{"get":{"summary":"Read cash-basis monthly and lifetime project reports; per-currency totals, prior-year comparison and review rows","description":"Requires finance:read for an API key, or a full workspace membership for a Clerk session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"finance:read","parameters":[{"name":"year","in":"query","required":true,"schema":{"type":"integer","minimum":2000,"maximum":2200}},{"name":"weddingId","in":"query","required":false,"schema":{"type":"string","minLength":1,"maxLength":100}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}},"post":{"summary":"Retain a revision-checked source attribution or previously unknown fee/tax annotation","description":"Requires finance:write for an API key, or a full workspace membership for a Clerk session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"finance:write","parameters":[{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"source":{"type":"string","enum":["CASH","EXPENSE"]},"sourceId":{"type":"string","minLength":1,"maxLength":240},"sourceHash":{"type":"string","pattern":"^[a-f0-9]{64}$"},"expectedReviewId":{"anyOf":[{"type":"string","minLength":1,"maxLength":100},{"type":"null"}]},"weddingId":{"anyOf":[{"type":"string","minLength":1,"maxLength":100},{"type":"null"}]},"feeCents":{"anyOf":[{"type":"integer","minimum":-99999999,"maximum":99999999},{"type":"null"}]},"taxCents":{"anyOf":[{"type":"integer","minimum":-99999999,"maximum":99999999},{"type":"null"}]},"note":{"type":"string","minLength":3,"maxLength":2000}},"required":["requestId","source","sourceId","sourceHash","expectedReviewId","weddingId","feeCents","taxCents","note"],"additionalProperties":false}}}},"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}}},"/finance/refund-tax":{"get":{"summary":"List recent confirmed refunds eligible for exact included-tax allocation","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}},"post":{"summary":"Owner review of returned tax, bounded by the original frozen invoice tax","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"entryId":{"type":"string","minLength":1,"maxLength":100},"sourceHash":{"type":"string","pattern":"^[a-f0-9]{64}$"},"includedTaxCents":{"type":"integer","minimum":0,"maximum":99999999},"reason":{"type":"string","minLength":3,"maxLength":2000},"confirmed":{"type":"boolean","const":true}},"required":["requestId","entryId","sourceHash","includedTaxCents","reason","confirmed"],"additionalProperties":false}}}},"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}}},"/intake/routing":{"get":{"summary":"Read bounded private inquiry preparation history; accepted, prepared and started are distinct states","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"captureId","in":"query","required":false,"schema":{"type":"string","minLength":1,"maxLength":100}},{"name":"leadId","in":"query","required":false,"schema":{"type":"string","minLength":1,"maxLength":100}},{"name":"state","in":"query","required":false,"schema":{"type":"string","enum":["PENDING","PREPARING","PREPARED","HELD","STARTED","CANCELLED"]}},{"name":"after","in":"query","required":false,"schema":{"type":"string","minLength":1,"maxLength":4000}},{"name":"limit","in":"query","required":false,"schema":{"default":20,"type":"integer","minimum":1,"maximum":20}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}}},"/intake/routing/choices":{"get":{"summary":"List published questionnaire or workflow choices in the exact retained inquiry-review context; this selects and starts nothing","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"captureId","in":"query","required":true,"schema":{"type":"string","minLength":1,"maxLength":100}},{"name":"intakeReviewId","in":"query","required":true,"schema":{"type":"string","minLength":1,"maxLength":100}},{"name":"intakeReviewedHash","in":"query","required":true,"schema":{"type":"string","pattern":"^[a-f0-9]{64}$"}},{"name":"kind","in":"query","required":true,"schema":{"type":"string","enum":["FORM","WORKFLOW"]}},{"name":"q","in":"query","required":false,"schema":{"default":"","type":"string","maxLength":100}},{"name":"after","in":"query","required":false,"schema":{"type":"string","minLength":1,"maxLength":4000}},{"name":"limit","in":"query","required":false,"schema":{"default":20,"type":"integer","minimum":1,"maximum":20}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}}},"/intake/routing/existing-work":{"get":{"summary":"Inspect bounded existing work before deliberately attaching an inquiry; no existing run or questionnaire is replaced","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"captureId","in":"query","required":true,"schema":{"type":"string","minLength":1,"maxLength":100}},{"name":"intakeReviewId","in":"query","required":true,"schema":{"type":"string","minLength":1,"maxLength":100}},{"name":"intakeReviewedHash","in":"query","required":true,"schema":{"type":"string","pattern":"^[a-f0-9]{64}$"}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}}},"/intake/routing/reviews":{"get":{"summary":"Read at most five saved named preparation/start reviews for recovery without exposing form capabilities","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"captureId","in":"query","required":true,"schema":{"type":"string","minLength":1,"maxLength":100}},{"name":"intakeReviewId","in":"query","required":false,"schema":{"type":"string","minLength":1,"maxLength":100}},{"name":"intentId","in":"query","required":false,"schema":{"type":"string","minLength":1,"maxLength":100}},{"name":"kind","in":"query","required":false,"schema":{"type":"string","enum":["PREPARE","START"]}},{"name":"after","in":"query","required":false,"schema":{"type":"string","minLength":1,"maxLength":4000}},{"name":"limit","in":"query","required":false,"schema":{"default":5,"type":"integer","minimum":1,"maximum":5}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}}},"/intake/routing/{id}":{"get":{"summary":"Read one scoped preparation intent, exact selected versions, safe results and current action eligibility","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}}},"/intake/{id}/routing-reviews":{"post":{"summary":"Review exact questionnaire/workflow publications and optional disclosed prefill; prepares no request and starts no workflow","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"intakeReviewId":{"type":"string","minLength":1,"maxLength":100},"intakeReviewedHash":{"type":"string","pattern":"^[a-f0-9]{64}$"},"expectedCaptureRevision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"selection":{"type":"object","properties":{"primaryForm":{"anyOf":[{"type":"object","properties":{"formId":{"type":"string","minLength":1,"maxLength":100},"expectedPublishedRevision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"prefillFieldIds":{"maxItems":40,"type":"array","items":{"type":"string","pattern":"^[a-zA-Z][a-zA-Z0-9_]{0,39}$"}}},"required":["formId","expectedPublishedRevision","prefillFieldIds"],"additionalProperties":false},{"type":"null"}]},"workflow":{"anyOf":[{"type":"object","properties":{"workflowId":{"type":"string","minLength":1,"maxLength":100},"expectedPublishedRevision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"dateAnchors":{"type":"object","properties":{"appointmentId":{"type":"string","minLength":1,"maxLength":100},"agreementId":{"type":"string","minLength":1,"maxLength":100},"paymentReceiptId":{"type":"string","minLength":1,"maxLength":100}},"additionalProperties":false}},"required":["workflowId","expectedPublishedRevision"],"additionalProperties":false},{"type":"null"}]}},"required":["primaryForm","workflow"],"additionalProperties":false},"requestId":{"type":"string","minLength":8,"maxLength":120}},"required":["intakeReviewId","intakeReviewedHash","expectedCaptureRevision","selection","requestId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}},"x-max-body-bytes":32768}},"/intake/{id}/routed-decisions":{"post":{"summary":"Explicitly accept the retained inquiry and atomically record selected preparation; ordinary acceptance remains unchanged and this sends nothing","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"reviewId":{"type":"string","minLength":1,"maxLength":100},"expectedCaptureRevision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"reviewedHash":{"type":"string","pattern":"^[a-f0-9]{64}$"},"approved":{"type":"boolean","const":true},"routingReviewId":{"type":"string","minLength":1,"maxLength":100},"routingReviewedHash":{"type":"string","pattern":"^[a-f0-9]{64}$"},"requestId":{"type":"string","minLength":8,"maxLength":120}},"required":["reviewId","expectedCaptureRevision","reviewedHash","approved","routingReviewId","routingReviewedHash","requestId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}},"x-max-body-bytes":32768}},"/intake/routing/{id}/retry":{"post":{"summary":"Retry eligible held preparation with its original selected versions and exact request identity","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"expectedRevision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"reason":{"type":"string","minLength":3,"maxLength":500},"requestId":{"type":"string","minLength":8,"maxLength":120}},"required":["expectedRevision","reason","requestId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}},"x-max-body-bytes":32768}},"/intake/routing/{id}/start-review":{"post":{"summary":"Review starting the exact prepared workflow, its initial recipient, possible effects and stop rules","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"expectedRevision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"expectedRunRevision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"requestId":{"type":"string","minLength":8,"maxLength":120}},"required":["expectedRevision","expectedRunRevision","requestId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}},"x-max-body-bytes":32768}},"/intake/routing/{id}/start":{"post":{"summary":"Explicitly authorize the reviewed prepared workflow once; automatic email additionally requires owner/admin and published approval; SMS consent and spending remain separate","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"expectedRevision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"expectedRunRevision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"requestId":{"type":"string","minLength":8,"maxLength":120},"startReviewId":{"type":"string","minLength":1,"maxLength":100},"reviewedHash":{"type":"string","pattern":"^[a-f0-9]{64}$"},"approved":{"type":"boolean","const":true}},"required":["expectedRevision","expectedRunRevision","requestId","startReviewId","reviewedHash","approved"],"additionalProperties":false}}}},"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}},"x-max-body-bytes":32768}},"/intake/routing/{id}/cancel":{"post":{"summary":"Cancel future preparation/execution and revoke unfinished routed questionnaires while retaining accepted responses and attempted-delivery history","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"expectedRevision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"reason":{"type":"string","minLength":3,"maxLength":500},"requestId":{"type":"string","minLength":8,"maxLength":120}},"required":["expectedRevision","reason","requestId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}},"x-max-body-bytes":32768}},"/intake/routing/forms/{id}/reveal":{"post":{"summary":"Deliberately reveal an authorized prepared questionnaire capability under its exact result and access generation; no-store and no-referrer","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"expectedResultHash":{"type":"string","pattern":"^[a-f0-9]{64}$"},"expectedAccessGeneration":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991}},"required":["expectedResultHash","expectedAccessGeneration"],"additionalProperties":false}}}},"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}},"x-max-body-bytes":32768}},"/intake/routing/forms/{id}/revoke":{"post":{"summary":"Revoke an unfinished routed questionnaire with a named reason and exact access generation; retained responses and original issuance stay immutable","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"expectedAccessGeneration":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"reason":{"type":"string","minLength":3,"maxLength":500},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["expectedAccessGeneration","reason","requestId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}},"x-max-body-bytes":32768}},"/intake/aliases":{"get":{"summary":"Read bounded private receiving address labels and generations; no address capabilities are returned","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"after","in":"query","required":false,"schema":{"type":"string","minLength":1,"maxLength":100}},{"name":"limit","in":"query","required":false,"schema":{"default":20,"type":"integer","minimum":1,"maximum":50}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}},"post":{"summary":"A named owner or admin prepares a private receiving address under the configured account and domain; creating it does not activate live email","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"label":{"type":"string","minLength":1,"maxLength":120},"requestId":{"type":"string","minLength":8,"maxLength":120}},"required":["label","requestId"],"additionalProperties":false}}}},"responses":{"201":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}}},"/intake/aliases/{id}":{"post":{"summary":"Rename, rotate, disable or enable one private receiving address under its exact generation and original request identity; old pending deliveries cannot inherit a newer generation","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","oneOf":[{"type":"object","properties":{"expectedGeneration":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"action":{"type":"string","const":"RENAME"},"label":{"type":"string","minLength":1,"maxLength":120},"requestId":{"type":"string","minLength":8,"maxLength":120}},"required":["expectedGeneration","action","label","requestId"],"additionalProperties":false},{"type":"object","properties":{"expectedGeneration":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"action":{"type":"string","enum":["ROTATE","DISABLE","ENABLE"]},"requestId":{"type":"string","minLength":8,"maxLength":120}},"required":["expectedGeneration","action","requestId"],"additionalProperties":false}]}}}},"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}}},"/intake/aliases/{id}/address":{"post":{"summary":"A named owner or admin deliberately reveals the current private receiving capability; no-store and no-referrer, with actual receiving availability separate from address preparation","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"expectedGeneration":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991}},"required":["expectedGeneration"],"additionalProperties":false}}}},"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}}},"/intake/deliveries":{"get":{"summary":"Read bounded private original-retrieval receipts without raw URLs, address tokens or provider credentials; captured and accepted are separate states","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"after","in":"query","required":false,"schema":{"type":"string","minLength":1,"maxLength":100}},{"name":"aliasId","in":"query","required":false,"schema":{"type":"string","minLength":1,"maxLength":100}},{"name":"state","in":"query","required":false,"schema":{"type":"string","enum":["PENDING","FETCHING","CAPTURED","HELD","REJECTED"]}},{"name":"limit","in":"query","required":false,"schema":{"default":20,"type":"integer","minimum":1,"maximum":50}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}}},"/intake/deliveries/{id}":{"get":{"summary":"Read one private original-retrieval result and its permitted original link; no original payload or signed transport URL in this projection","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}}},"/intake/deliveries/{id}/retry":{"post":{"summary":"Retry an eligible held retrieval using the same account/email identity, exact revision and actor-bound request; revoked generations and completed originals never restart","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"expectedRevision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"requestId":{"type":"string","minLength":8,"maxLength":120}},"required":["expectedRevision","requestId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}}},"/intake":{"get":{"summary":"Read the private retained-intake queue; captured and accepted are distinct states","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"after","in":"query","required":false,"schema":{"type":"string","minLength":1,"maxLength":100}},{"name":"limit","in":"query","required":false,"schema":{"default":20,"type":"integer","minimum":1,"maximum":50}},{"name":"state","in":"query","required":false,"schema":{"type":"string","enum":["OPEN","ACCEPTED","DISMISSED"]}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}},"post":{"summary":"Retain a bounded operator-supplied pasted forward or original RFC822 email privately; this does not create a lead, verify its sender or send a message","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"requestId":{"type":"string","minLength":8,"maxLength":120},"displayFilename":{"default":"Forwarded inquiry.txt","type":"string","minLength":1,"maxLength":160},"material":{"oneOf":[{"type":"object","properties":{"version":{"type":"number","const":1},"format":{"type":"string","const":"PASTED_FORWARD"},"text":{"type":"string","minLength":1,"maxLength":100000}},"required":["version","format","text"],"additionalProperties":false},{"type":"object","properties":{"version":{"type":"number","const":1},"format":{"type":"string","const":"RFC822"},"rawBase64":{"type":"string","minLength":4,"maxLength":1398104,"pattern":"^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$"}},"required":["version","format","rawBase64"],"additionalProperties":false}]}},"required":["requestId","material"],"additionalProperties":false}}}},"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"201":{"description":"Retained encrypted source receipt or exact replay","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"JSON envelope exceeds2,000,000 bytes or original message exceeds1,048,576 bytes"},"415":{"description":"application/json is required"}},"x-max-body-bytes":2000000,"x-original-message-max-bytes":1048576}},"/intake/{id}":{"get":{"summary":"Read safe original text, parser suggestions and bounded immutable review history; provider transport observations are separate from unverified forwarded identity","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"reviewAfter","in":"query","required":false,"schema":{"type":"string","minLength":1,"maxLength":100}},{"name":"reviewLimit","in":"query","required":false,"schema":{"default":5,"type":"integer","minimum":1,"maximum":10}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}}},"/intake/{id}/reviews":{"post":{"summary":"Prepare an exact actor-bound decision with corrected fields and explicit duplicate review; this sends nothing and starts no workflow","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"expectedCaptureRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"decision":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","const":"CREATE_LEAD"},"marketplace":{"type":"string","enum":["THE_KNOT","WEDDINGWIRE","ZOLA","UNKNOWN"]},"contact":{"type":"object","properties":{"coupleNames":{"type":"string","minLength":1,"maxLength":160},"email":{"anyOf":[{"type":"string","maxLength":254,"format":"email","pattern":"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"},{"type":"null"}]},"phone":{"anyOf":[{"type":"string","maxLength":60},{"type":"null"}]},"eventDate":{"anyOf":[{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},{"type":"null"}]},"venue":{"anyOf":[{"type":"string","maxLength":300},{"type":"null"}]},"guestCount":{"anyOf":[{"type":"integer","minimum":0,"maximum":1000000},{"type":"null"}]},"budget":{"anyOf":[{"type":"integer","minimum":0,"maximum":2000000000},{"type":"null"}]},"message":{"anyOf":[{"type":"string","maxLength":10000},{"type":"null"}]}},"required":["coupleNames","email","phone","eventDate","venue","guestCount","budget","message"],"additionalProperties":false},"projectTypeId":{"anyOf":[{"type":"string","minLength":1,"maxLength":100},{"type":"null"}]},"expectedTypeRevision":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"fields":{"type":"object","propertyNames":{"type":"string","pattern":"^[a-zA-Z][a-zA-Z0-9_]{0,39}$"},"additionalProperties":{"anyOf":[{"type":"string","maxLength":5000},{"type":"boolean"},{"type":"number"},{"maxItems":30,"type":"array","items":{"type":"string","maxLength":100}}]}},"acknowledgeDuplicates":{"type":"boolean"}},"required":["kind","marketplace","contact","projectTypeId","expectedTypeRevision","fields","acknowledgeDuplicates"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"ATTACH_EVIDENCE"},"marketplace":{"type":"string","enum":["THE_KNOT","WEDDINGWIRE","ZOLA","UNKNOWN"]},"leadId":{"type":"string","minLength":1,"maxLength":100},"expectedLeadRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"note":{"type":"string","minLength":3,"maxLength":1000}},"required":["kind","marketplace","leadId","expectedLeadRevision","note"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"DISMISS"},"reason":{"type":"string","minLength":3,"maxLength":1000}},"required":["kind","reason"],"additionalProperties":false}]},"requestId":{"type":"string","minLength":8,"maxLength":120}},"required":["expectedCaptureRevision","decision","requestId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}}},"/intake/{id}/decisions":{"post":{"summary":"Approve the unchanged original review once: create a real inquiry, attach additional evidence without changing contact details, or dismiss while retaining history","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"reviewId":{"type":"string","minLength":1,"maxLength":100},"expectedCaptureRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"reviewedHash":{"type":"string","pattern":"^[a-f0-9]{64}$"},"approved":{"type":"boolean","const":true},"requestId":{"type":"string","minLength":8,"maxLength":120}},"required":["reviewId","expectedCaptureRevision","reviewedHash","approved","requestId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}}},"/intake/leads":{"get":{"summary":"Find a bounded private existing-inquiry destination for explicit evidence attachment; matching never merges records","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":2,"maxLength":100}},{"name":"after","in":"query","required":false,"schema":{"type":"string","minLength":1,"maxLength":100}},{"name":"limit","in":"query","required":false,"schema":{"default":10,"type":"integer","minimum":1,"maximum":25}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}}},"/inquiry-sources":{"get":{"summary":"Read immutable recorded source summaries with current named workspace access; historical source labels are not retroactively verified","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"leadId","in":"query","required":false,"schema":{"type":"string","minLength":1,"maxLength":100}},{"name":"after","in":"query","required":false,"schema":{"type":"string","minLength":1,"maxLength":100}},{"name":"limit","in":"query","required":false,"schema":{"default":20,"type":"integer","minimum":1,"maximum":50}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}}},"/inquiry-sources/{id}":{"get":{"summary":"Read one exact private retained source envelope and its original evidence links","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}}},"/leads/{id}/sources":{"get":{"summary":"Read the original and additional inquiry evidence without reparenting sources after a merge","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"after","in":"query","required":false,"schema":{"type":"string","minLength":1,"maxLength":100}},{"name":"limit","in":"query","required":false,"schema":{"default":20,"type":"integer","minimum":1,"maximum":50}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}}},"/radar/{id}/convert":{"post":{"summary":"Convert this captured Radar signal once with current named authority and retain original source evidence; old conversions replay without synthetic provenance","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{},"additionalProperties":false}}}},"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}}},"/projects/{id}/source":{"get":{"summary":"Read the current deliberate source assignment and its bounded append-only history","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"beforeRevision","in":"query","required":false,"schema":{"type":"integer","exclusiveMinimum":0,"maximum":2147483647}},{"name":"limit","in":"query","required":false,"schema":{"default":20,"type":"integer","minimum":1,"maximum":50}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}},"post":{"summary":"Owner/admin reviews and assigns or clears one private project source with exact project/source revisions; another project for the same client does not inherit it","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","oneOf":[{"type":"object","properties":{"operation":{"type":"string","const":"preview"},"data":{"type":"object","properties":{"sourceId":{"anyOf":[{"type":"string","minLength":1,"maxLength":100},{"type":"null"}]},"expectedProjectRevision":{"type":"integer","minimum":0,"maximum":2147483647},"expectedAssignmentRevision":{"type":"integer","minimum":0,"maximum":2147483647},"reason":{"type":"string","minLength":3,"maxLength":500}},"required":["sourceId","expectedProjectRevision","expectedAssignmentRevision","reason"],"additionalProperties":false}},"required":["operation","data"],"additionalProperties":false},{"type":"object","properties":{"operation":{"type":"string","const":"assign"},"data":{"type":"object","properties":{"sourceId":{"anyOf":[{"type":"string","minLength":1,"maxLength":100},{"type":"null"}]},"expectedProjectRevision":{"type":"integer","minimum":0,"maximum":2147483647},"expectedAssignmentRevision":{"type":"integer","minimum":0,"maximum":2147483647},"reason":{"type":"string","minLength":3,"maxLength":500},"reviewedHash":{"type":"string","pattern":"^[a-f0-9]{64}$"},"approved":{"type":"boolean","const":true},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["sourceId","expectedProjectRevision","expectedAssignmentRevision","reason","reviewedHash","approved","requestId"],"additionalProperties":false}},"required":["operation","data"],"additionalProperties":false}]}}}},"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}}},"/attribution":{"get":{"summary":"Read bounded invoice principal cash by current deliberate source assignment in separate currencies; exclude tips, unproven legacy paid flags and unsupported receipt lineage, with visible reconciliation holds","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"from","in":"query","required":true,"schema":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"}},{"name":"to","in":"query","required":true,"schema":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"}},{"name":"currency","in":"query","required":false,"schema":{"type":"string","pattern":"^[a-zA-Z]{3}$"}},{"name":"sourceKind","in":"query","required":false,"schema":{"type":"string","enum":["FORM","RADAR","FORWARDED_EMAIL","UNASSIGNED"]}},{"name":"projectId","in":"query","required":false,"schema":{"type":"string","minLength":1,"maxLength":100}},{"name":"after","in":"query","required":false,"schema":{"type":"string","maxLength":3000}},{"name":"limit","in":"query","required":false,"schema":{"default":50,"type":"integer","minimum":1,"maximum":100}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}}},"/attribution/export":{"get":{"summary":"Export the bounded current-source invoice principal report with formula-safe CSV; optional reportHash rejects a changed report","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"from","in":"query","required":true,"schema":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"}},{"name":"to","in":"query","required":true,"schema":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"}},{"name":"currency","in":"query","required":false,"schema":{"type":"string","pattern":"^[a-zA-Z]{3}$"}},{"name":"sourceKind","in":"query","required":false,"schema":{"type":"string","enum":["FORM","RADAR","FORWARDED_EMAIL","UNASSIGNED"]}},{"name":"projectId","in":"query","required":false,"schema":{"type":"string","minLength":1,"maxLength":100}},{"name":"after","in":"query","required":false,"schema":{"type":"string","maxLength":3000}},{"name":"limit","in":"query","required":false,"schema":{"default":50,"type":"integer","minimum":1,"maximum":100}},{"name":"reportHash","in":"query","required":false,"schema":{"type":"string","pattern":"^[a-f0-9]{64}$"}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"responses":{"200":{"description":"Private formula-safe CSV; no recognized-revenue or historical-as-of claim","content":{"text/csv":{"schema":{"type":"string"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}}},"/conversations/{leadId}/mms":{"get":{"summary":"Read independently paginated image-message deliveries and signed inbound announcements with current sender capability; no provider URLs, credentials or originals","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"leadId","in":"path","required":true,"schema":{"type":"string"}},{"name":"messagesPage","in":"query","schema":{"type":"integer","minimum":1,"maximum":10000,"default":1}},{"name":"inboundPage","in":"query","schema":{"type":"integer","minimum":1,"maximum":10000,"default":1}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}}},"/conversations/{leadId}/mms/media/upload":{"post":{"summary":"Upload one explicitly described and cost-approved private image; upload alone never sends","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"leadId","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"responses":{"200":{"description":"Retained upload/processing receipt; not a delivery"},"400":{"description":"Invalid image metadata, duplicate form fields or payload mismatch"},"401":{"description":"Current named account required"},"403":{"description":"A workspace API key cannot approve media"},"404":{"description":"Private conversation unavailable"},"408":{"description":"Bounded upload read timed out"},"409":{"description":"Original request or authority changed"},"413":{"description":"Image or multipart envelope exceeds the fixed limit"},"415":{"description":"Multipart encoding required"}},"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","additionalProperties":false,"properties":{"file":{"type":"string","format":"binary","description":"One static JPEG/PNG, 1–8,000,000 bytes; processing verifies its actual contents and creates a metadata-stripped derivative."},"requestId":{"type":"string","format":"uuid"},"description":{"type":"string","minLength":1,"maxLength":300},"approvedStorageCents":{"type":"integer","minimum":0,"maximum":100000,"description":"Exact configured ingestion charge, retained with this original request across interrupted-upload recovery."}},"required":["file","requestId","description","approvedStorageCents"]}}}}}},"/conversations/{leadId}/mms/inbound/{mediaId}/retain":{"post":{"summary":"Explicitly retain a signed routed incoming image under its original provider generation, current operator and capped storage approval; raw provider media stays quarantined","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"leadId","in":"path","required":true,"schema":{"type":"string"}},{"name":"mediaId","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"approvedStorageCents":{"type":"integer","minimum":0,"maximum":100000}},"required":["requestId","approvedStorageCents"],"additionalProperties":false}}}},"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}}},"/conversations/{leadId}/mms/media":{"get":{"summary":"Read paginated private image uploads and retained replies with their recovery metadata and current storage cost; originals are never returned","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"leadId","in":"path","required":true,"schema":{"type":"string"}},{"name":"after","in":"query","required":false,"schema":{"type":"string","minLength":1,"maxLength":100}},{"name":"limit","in":"query","required":false,"schema":{"default":10,"type":"integer","minimum":1,"maximum":30}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}}},"/conversations/{leadId}/mms/reviews":{"post":{"summary":"Review one exact opted-in recipient, ordered sanitized images, final text, used merge fields, sender, delivery window and maximum MMS charge; this creates no send","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"leadId","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"permissionId":{"type":"string","minLength":1,"maxLength":100},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"body":{"type":"string","minLength":1,"maxLength":1200},"media":{"minItems":1,"maxItems":3,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":100},"revision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991}},"required":["id","revision"],"additionalProperties":false}},"scheduledLocal":{"default":null,"anyOf":[{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}$"},{"type":"null"}]},"timezone":{"type":"string","minLength":1,"maxLength":100}},"required":["permissionId","requestId","body","media","timezone"],"additionalProperties":false}}}},"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}}},"/conversations/{leadId}/mms/deliveries":{"post":{"summary":"Approve the unchanged image-message review and exact maximum cost once; nested conversation identity must match the review","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"leadId","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"reviewId":{"type":"string","minLength":1,"maxLength":100},"reviewHash":{"type":"string","pattern":"^[a-f0-9]{64}$"},"approvedMaximumCents":{"type":"integer","minimum":0,"maximum":100000},"approved":{"type":"boolean","const":true},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["reviewId","reviewHash","approvedMaximumCents","approved","requestId"],"additionalProperties":false}}}},"responses":{"202":{"description":"Accepted and persisted; external delivery is separate.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}}},"/conversations/{leadId}/mms/deliveries/{id}/recovery":{"post":{"summary":"Stop further image-message work or reconcile its original known provider ID; uncertain deliveries are never blindly retransmitted","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"leadId","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"action":{"type":"string","enum":["STOP","RECONCILE"]},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["action","requestId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}}},"/conversations/{leadId}/mms/media/{id}":{"post":{"summary":"Retry an interrupted private image process or remove image access at the exact current revision; preserve delivery evidence","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"leadId","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"expectedRevision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"operation":{"type":"string","enum":["REMOVE","RETRY"]}},"required":["requestId","expectedRevision","operation"],"additionalProperties":false}}}},"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}}},"/conversations/{leadId}/mms/media/{id}/preview":{"get":{"summary":"Preview a private sanitized image with current named business access rechecked after storage I/O","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"leadId","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"responses":{"200":{"description":"Only the approved static JPEG/PNG derivative, up to600,000 bytes; private no-store and nosniff","headers":{"Content-Type":{"schema":{"enum":["image/jpeg","image/png"]}},"Content-Length":{"schema":{"type":"integer","minimum":1,"maximum":600000}}},"content":{"image/jpeg":{"schema":{"type":"string","format":"binary"}},"image/png":{"schema":{"type":"string","format":"binary"}}}},"404":{"description":"Unknown, expired, removed or revoked image access"}}},"head":{"summary":"Preview a private sanitized image with current named business access rechecked after storage I/O","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"leadId","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"responses":{"200":{"description":"Current approved derivative headers; no response body","headers":{"Content-Type":{"schema":{"enum":["image/jpeg","image/png"]}},"Content-Length":{"schema":{"type":"integer","minimum":1,"maximum":600000}}}},"404":{"description":"Unknown, expired, removed or revoked image access"}}}},"/messaging/media/{token}":{"get":{"summary":"Fetch one approved derivative through its narrow provider media capability","description":"A cryptographic bearer path permits only one frozen derivative during the committed original attempt. Reads repeat current source checks after bounded storage I/O without taking send-transaction domain locks. Never exposes originals or permanent storage URLs; redact path tokens in logs.","security":[],"x-authentication":{"kind":"single-media-bearer-capability"},"parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Only the approved static JPEG/PNG derivative, up to600,000 bytes; private no-store and nosniff","headers":{"Content-Type":{"schema":{"enum":["image/jpeg","image/png"]}},"Content-Length":{"schema":{"type":"integer","minimum":1,"maximum":600000}}},"content":{"image/jpeg":{"schema":{"type":"string","format":"binary"}},"image/png":{"schema":{"type":"string","format":"binary"}}}},"404":{"description":"Unknown, expired, removed or revoked image access"}}},"head":{"summary":"Fetch one approved derivative through its narrow provider media capability","description":"A cryptographic bearer path permits only one frozen derivative during the committed original attempt. Reads repeat current source checks after bounded storage I/O without taking send-transaction domain locks. Never exposes originals or permanent storage URLs; redact path tokens in logs.","security":[],"x-authentication":{"kind":"single-media-bearer-capability"},"parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Current approved derivative headers; no response body","headers":{"Content-Type":{"schema":{"enum":["image/jpeg","image/png"]}},"Content-Length":{"schema":{"type":"integer","minimum":1,"maximum":600000}}}},"404":{"description":"Unknown, expired, removed or revoked image access"}}}},"/mms-sender":{"post":{"summary":"Record an explicitly reviewed MMS capability for the current sender generation; provider setup and deployment activation are separate gates","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"senderBindingId":{"type":"string","minLength":1,"maxLength":100},"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"enabled":{"type":"boolean"},"confirmedProviderSupport":{"type":"boolean","const":true},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["senderBindingId","expectedRevision","enabled","confirmedProviderSupport","requestId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}}},"/message-search":{"post":{"summary":"Search bounded current conversation history with literal Unicode matching; encrypted SMS is checked without a plaintext index. Up to 100 visited records / 1 MiB per page; a continuation can accompany zero matches. Private query terms stay in this request body.","description":"Requires a Clerk account session. PRIVATE_CRM requires X-Workspace-Id and current full business access. SHARED_THREAD requires the exact current named participant; X-Workspace-Id is optional and only selects that account’s business context. Private terms are never accepted in the URL.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"X-Workspace-Id","in":"header","required":false,"schema":{"type":"string"},"description":"Required for private CRM; optional for a named shared participant."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"context":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","const":"PRIVATE_CRM"},"leadId":{"type":"string","minLength":1,"maxLength":160}},"required":["kind","leadId"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"SHARED_THREAD"},"threadId":{"type":"string","minLength":1,"maxLength":160},"participantId":{"type":"string","minLength":1,"maxLength":160}},"required":["kind","threadId","participantId"],"additionalProperties":false}]},"query":{"type":"string","minLength":2,"maxLength":400},"sources":{"minItems":1,"maxItems":5,"type":"array","items":{"type":"string","enum":["EMAIL","NOTES","SMS_OUTBOUND","SMS_INBOUND","MMS_OUTBOUND","SHARED_MESSAGES","OWN_COMMENTS"]}},"after":{"type":"string","minLength":1,"maxLength":4096},"limit":{"default":20,"type":"integer","minimum":1,"maximum":20}},"required":["context","query","sources"],"additionalProperties":false}}}},"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"},"429":{"description":"Bounded per-account search rate exceeded; wait before continuing."}}}},"/message-search/context":{"post":{"summary":"Open an exact permitted source message with fresh authority checks; a search result never grants continuing access or changes read state","description":"Requires a Clerk account session. PRIVATE_CRM requires X-Workspace-Id and current full business access. SHARED_THREAD requires the exact current named participant; X-Workspace-Id is optional and only selects that account’s business context. Private terms are never accepted in the URL.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"X-Workspace-Id","in":"header","required":false,"schema":{"type":"string"},"description":"Required for private CRM; optional for a named shared participant."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"context":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","const":"PRIVATE_CRM"},"leadId":{"type":"string","minLength":1,"maxLength":160}},"required":["kind","leadId"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"SHARED_THREAD"},"threadId":{"type":"string","minLength":1,"maxLength":160},"participantId":{"type":"string","minLength":1,"maxLength":160}},"required":["kind","threadId","participantId"],"additionalProperties":false}]},"source":{"type":"string","enum":["EMAIL","NOTES","SMS_OUTBOUND","SMS_INBOUND","MMS_OUTBOUND","SHARED_MESSAGES","OWN_COMMENTS"]},"id":{"type":"string","minLength":1,"maxLength":160}},"required":["context","source","id"],"additionalProperties":false}}}},"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"},"429":{"description":"Bounded per-account search rate exceeded; wait before continuing."}}}},"/message-merge-policy":{"get":{"summary":"Read outbound custom-field disclosure policies and current definitions; named owner/admin required","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}},"post":{"summary":"Explicitly enable or withdraw one typed custom field for outbound email or SMS/MMS text; revision and exact request checks apply, and this never sends a message","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"projectTypeId":{"type":"string","minLength":1,"maxLength":160},"fieldId":{"type":"string","pattern":"^[a-zA-Z][a-zA-Z0-9_]{0,39}$"},"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"expectedDefinitionRevision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"definitionHash":{"type":"string","pattern":"^[a-f0-9]{64}$"},"enabled":{"type":"boolean"},"channels":{"maxItems":2,"type":"array","items":{"type":"string","enum":["PRIVATE_EMAIL","PRIVATE_SMS"]}},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["projectTypeId","fieldId","expectedRevision","expectedDefinitionRevision","definitionHash","enabled","channels","requestId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}}},"/message-merge-fields":{"get":{"summary":"List only currently permitted merge choices for this private client and channel; no arbitrary private notes or financial records","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"leadId","in":"query","required":true,"schema":{"type":"string","minLength":1,"maxLength":160}},{"name":"channel","in":"query","required":true,"schema":{"type":"string","enum":["PRIVATE_EMAIL","PRIVATE_SMS"]}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}}},"/email":{"get":{"summary":"Read and search the private inbox with validated cursor, assignment and status filters","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"after","in":"query","required":false,"schema":{"type":"string","maxLength":1000}},{"name":"q","in":"query","required":false,"schema":{"default":"","type":"string","maxLength":200}},{"name":"status","in":"query","required":false,"schema":{"default":"ALL","type":"string","enum":["ALL","OPEN","PENDING","CLOSED"]}},{"name":"assignment","in":"query","required":false,"schema":{"default":"ALL","type":"string","enum":["ALL","MINE","UNASSIGNED"]}},{"name":"limit","in":"query","required":false,"schema":{"default":25,"type":"integer","minimum":1,"maximum":50}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}},"post":{"summary":"Review exact rich email, approve its retained render, save private writing or retain a received attachment; preparing a review sends nothing","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","anyOf":[{"type":"object","properties":{"operation":{"type":"string","const":"resolveReview"},"data":{"type":"object","properties":{"reviewId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"approved":{"type":"boolean","const":true}},"required":["reviewId","requestId","approved"],"additionalProperties":false}},"required":["operation","data"],"additionalProperties":false},{"type":"object","properties":{"operation":{"type":"string","const":"preview"},"data":{"type":"object","properties":{"leadId":{"type":"string","minLength":1,"maxLength":100},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"expectedRecipient":{"type":"string","format":"email","pattern":"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"},"subject":{"type":"string","minLength":1,"maxLength":200},"bodyDocument":{"type":"object","properties":{"version":{"type":"number","const":1},"blocks":{"minItems":1,"maxItems":60,"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","enum":["paragraph","bullet","numbered"]},"runs":{"minItems":1,"maxItems":40,"type":"array","items":{"type":"object","properties":{"text":{"type":"string","maxLength":5000},"bold":{"default":false,"type":"boolean"},"italic":{"default":false,"type":"boolean"},"href":{"type":"string","maxLength":2000}},"required":["text"],"additionalProperties":false}}},"required":["kind","runs"],"additionalProperties":false}}},"required":["version","blocks"],"additionalProperties":false},"templateId":{"type":"string","minLength":1,"maxLength":100},"templateRevision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"signatureId":{"type":"string","minLength":1,"maxLength":100},"signatureRevision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"attachmentIds":{"default":[],"maxItems":10,"type":"array","items":{"type":"string","minLength":1,"maxLength":100}},"mailboxRoute":{"type":"object","properties":{"accountId":{"type":"string","minLength":1,"maxLength":100},"generation":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"expectedFrom":{"type":"string","format":"email","pattern":"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"},"replyThreadId":{"type":"string","minLength":1,"maxLength":100}},"required":["accountId","generation","expectedFrom"]},"scheduledAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"}},"required":["leadId","requestId","expectedRecipient","subject","bodyDocument"],"additionalProperties":false}},"required":["operation","data"],"additionalProperties":false},{"type":"object","properties":{"operation":{"type":"string","const":"queue"},"data":{"type":"object","properties":{"reviewId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"renderHash":{"type":"string","pattern":"^[a-f0-9]{64}$"},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"approved":{"type":"boolean","const":true}},"required":["reviewId","renderHash","requestId","approved"],"additionalProperties":false}},"required":["operation","data"],"additionalProperties":false},{"type":"object","properties":{"operation":{"type":"string","const":"saveWriting"},"data":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":100},"kind":{"type":"string","enum":["TEMPLATE","SIGNATURE"]},"name":{"type":"string","minLength":1,"maxLength":100},"subject":{"default":"","type":"string","maxLength":200},"bodyDocument":{"type":"object","properties":{"version":{"type":"number","const":1},"blocks":{"minItems":1,"maxItems":60,"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","enum":["paragraph","bullet","numbered"]},"runs":{"minItems":1,"maxItems":40,"type":"array","items":{"type":"object","properties":{"text":{"type":"string","maxLength":5000},"bold":{"default":false,"type":"boolean"},"italic":{"default":false,"type":"boolean"},"href":{"type":"string","maxLength":2000}},"required":["text"],"additionalProperties":false}}},"required":["kind","runs"],"additionalProperties":false}}},"required":["version","blocks"],"additionalProperties":false},"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["kind","name","bodyDocument","expectedRevision","requestId"],"additionalProperties":false}},"required":["operation","data"],"additionalProperties":false},{"type":"object","properties":{"operation":{"type":"string","const":"retainAttachment"},"data":{"type":"object","properties":{"messageId":{"type":"string","minLength":1,"maxLength":100},"providerAttachmentId":{"type":"string","minLength":1,"maxLength":2000},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["messageId","providerAttachmentId","requestId"],"additionalProperties":false}},"required":["operation","data"],"additionalProperties":false}]}}}},"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}}},"/email/{leadId}":{"get":{"summary":"Read independently paginated private email, notes, follow-ups and client texts; search explicitly covers email or notes, never encrypted texts or shared threads","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"leadId","in":"path","required":true,"schema":{"type":"string"}},{"name":"messagesAfter","in":"query","required":false,"schema":{"type":"string","maxLength":1000}},{"name":"notesAfter","in":"query","required":false,"schema":{"type":"string","maxLength":1000}},{"name":"followUpsAfter","in":"query","required":false,"schema":{"type":"string","maxLength":1000}},{"name":"smsAfter","in":"query","required":false,"schema":{"type":"string","maxLength":1000}},{"name":"smsRepliesAfter","in":"query","required":false,"schema":{"type":"string","maxLength":1000}},{"name":"q","in":"query","required":false,"schema":{"default":"","type":"string","maxLength":200}},{"name":"searchScope","in":"query","required":false,"schema":{"default":"EMAIL","type":"string","enum":["EMAIL","NOTES"]}},{"name":"limit","in":"query","required":false,"schema":{"default":25,"type":"integer","minimum":1,"maximum":50}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}}},"/workflow-editor":{"get":{"summary":"Read a private workflow graph, separate canvas layout and paginated runs","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"workflowId","in":"query","required":true,"schema":{"type":"string","minLength":1,"maxLength":100}},{"name":"runsPage","in":"query","required":false,"schema":{"default":1,"type":"integer","minimum":1,"maximum":100000}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}},"post":{"summary":"Save a draft graph or its layout, simulate, or publish the reviewed immutable workflow version; running versions remain unchanged","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","anyOf":[{"type":"object","properties":{"operation":{"type":"string","const":"save"},"data":{"type":"object","properties":{"workflowId":{"type":"string","minLength":1,"maxLength":100},"expectedGraphRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"expectedLayoutRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"name":{"type":"string","minLength":2,"maxLength":100},"graph":{"type":"object","properties":{"deferBookingProject":{"type":"boolean"},"subject":{"type":"string","enum":["LEAD","PROJECT"]},"projectPrimaryRecipientApproved":{"type":"boolean"},"stopOnProjectComplete":{"type":"boolean"},"trigger":{"type":"string","enum":["project.created","manual","form.submitted","lead.created","lead.stage_changed","appointment.booked","agreement.signed","invoice.paid","lead.tags_changed","lead.job_created"]},"triggerFilter":{"type":"object","properties":{"tag":{"type":"string","minLength":1,"maxLength":40},"change":{"type":"string","enum":["ADDED","REMOVED"]}},"required":["tag","change"],"additionalProperties":false},"formId":{"default":"","type":"string","maxLength":100},"projectTypeId":{"default":"","type":"string","maxLength":100},"stopOnReply":{"default":true,"type":"boolean"},"stopOnClosedLead":{"default":true,"type":"boolean"},"stopOnBooking":{"default":false,"type":"boolean"},"stopOnPayment":{"default":false,"type":"boolean"},"automaticEmailApproved":{"default":false,"type":"boolean"},"smsReviewRequired":{"type":"boolean","const":true},"nodes":{"minItems":2,"maxItems":40,"type":"array","items":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z][a-zA-Z0-9_]{0,39}$"},"label":{"type":"string","minLength":1,"maxLength":100},"kind":{"type":"string","const":"START"},"next":{"anyOf":[{"type":"string","maxLength":40},{"type":"null"}]}},"required":["id","label","kind","next"]},{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z][a-zA-Z0-9_]{0,39}$"},"label":{"type":"string","minLength":1,"maxLength":100},"kind":{"type":"string","const":"END"}},"required":["id","label","kind"]},{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z][a-zA-Z0-9_]{0,39}$"},"label":{"type":"string","minLength":1,"maxLength":100},"kind":{"type":"string","const":"CONDITION"},"field":{"type":"string","enum":["stage","tag","answer","emailPresent"]},"key":{"default":"","type":"string","maxLength":40},"equals":{"type":"string","maxLength":300},"waitUntil":{"type":"object","properties":{"timeoutHours":{"type":"number","minimum":0.25,"maximum":8760},"recheckMinutes":{"type":"integer","minimum":1,"maximum":1440}},"required":["timeoutHours","recheckMinutes"],"additionalProperties":false},"yes":{"anyOf":[{"type":"string","maxLength":40},{"type":"null"}]},"no":{"anyOf":[{"type":"string","maxLength":40},{"type":"null"}]}},"required":["id","label","kind","field","equals","yes","no"]},{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z][a-zA-Z0-9_]{0,39}$"},"label":{"type":"string","minLength":1,"maxLength":100},"kind":{"type":"string","const":"WORK_WAIT"},"artifactNodeId":{"type":"string","minLength":1,"maxLength":100},"next":{"anyOf":[{"type":"string","maxLength":40},{"type":"null"}]}},"required":["id","label","kind","artifactNodeId","next"]},{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z][a-zA-Z0-9_]{0,39}$"},"label":{"type":"string","minLength":1,"maxLength":100},"kind":{"type":"string","const":"DELAY"},"hours":{"type":"number","minimum":0,"maximum":8760},"next":{"anyOf":[{"type":"string","maxLength":40},{"type":"null"}]}},"required":["id","label","kind","hours","next"]},{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z][a-zA-Z0-9_]{0,39}$"},"label":{"type":"string","minLength":1,"maxLength":100},"kind":{"type":"string","const":"DATE_WAIT"},"anchor":{"type":"string","enum":["EVENT_DATE","APPOINTMENT_START","AGREEMENT_SIGNED","PAYMENT_RECEIVED"]},"timing":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","const":"CALENDAR_DAYS"},"days":{"type":"integer","minimum":-3650,"maximum":3650},"time":{"type":"string","pattern":"^(?:[01]\\d|2[0-3]):[0-5]\\d$"},"timezone":{"type":"string","minLength":1,"maxLength":100}},"required":["mode","days","time","timezone"]},{"type":"object","properties":{"mode":{"type":"string","const":"ELAPSED_MINUTES"},"minutes":{"type":"integer","minimum":-5256000,"maximum":5256000}},"required":["mode","minutes"]}]},"next":{"anyOf":[{"type":"string","maxLength":40},{"type":"null"}]}},"required":["id","label","kind","anchor","timing","next"]},{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z][a-zA-Z0-9_]{0,39}$"},"label":{"type":"string","minLength":1,"maxLength":100},"kind":{"type":"string","const":"APPROVAL"},"title":{"type":"string","minLength":1,"maxLength":160},"body":{"type":"string","minLength":1,"maxLength":5000},"next":{"anyOf":[{"type":"string","maxLength":40},{"type":"null"}]}},"required":["id","label","kind","title","body","next"]},{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z][a-zA-Z0-9_]{0,39}$"},"label":{"type":"string","minLength":1,"maxLength":100},"kind":{"type":"string","const":"STAGE_CHANGE"},"targetStageId":{"type":"string","minLength":1,"maxLength":100},"expectedStage":{"type":"string","enum":["NEW","CONTACTED","MEETING","PROPOSAL","WON","LOST"]},"targetLabel":{"type":"string","minLength":1,"maxLength":220},"next":{"anyOf":[{"type":"string","maxLength":40},{"type":"null"}]}},"required":["id","label","kind","targetStageId","expectedStage","targetLabel","next"]},{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z][a-zA-Z0-9_]{0,39}$"},"label":{"type":"string","minLength":1,"maxLength":100},"kind":{"type":"string","const":"TASK"},"title":{"type":"string","minLength":1,"maxLength":160},"body":{"default":"","type":"string","maxLength":5000},"dueHours":{"default":24,"type":"number","minimum":0,"maximum":8760},"next":{"anyOf":[{"type":"string","maxLength":40},{"type":"null"}]}},"required":["id","label","kind","title","next"]},{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z][a-zA-Z0-9_]{0,39}$"},"label":{"type":"string","minLength":1,"maxLength":100},"kind":{"type":"string","const":"SMS_DRAFT"},"title":{"type":"string","minLength":1,"maxLength":160},"body":{"type":"string","minLength":1,"maxLength":2400},"next":{"anyOf":[{"type":"string","maxLength":40},{"type":"null"}]}},"required":["id","label","kind","title","body","next"]},{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z][a-zA-Z0-9_]{0,39}$"},"label":{"type":"string","minLength":1,"maxLength":100},"kind":{"type":"string","const":"SMS_SEND"},"title":{"type":"string","minLength":1,"maxLength":160},"body":{"type":"string","minLength":1,"maxLength":2400},"next":{"anyOf":[{"type":"string","maxLength":40},{"type":"null"}]}},"required":["id","label","kind","title","body","next"]},{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z][a-zA-Z0-9_]{0,39}$"},"label":{"type":"string","minLength":1,"maxLength":100},"kind":{"type":"string","const":"EMAIL_DRAFT"},"title":{"type":"string","minLength":1,"maxLength":160},"body":{"type":"string","minLength":1,"maxLength":20000},"next":{"anyOf":[{"type":"string","maxLength":40},{"type":"null"}]}},"required":["id","label","kind","title","body","next"]},{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z][a-zA-Z0-9_]{0,39}$"},"label":{"type":"string","minLength":1,"maxLength":100},"kind":{"type":"string","const":"EMAIL_SEND"},"title":{"type":"string","minLength":1,"maxLength":160},"body":{"type":"string","minLength":1,"maxLength":20000},"next":{"anyOf":[{"type":"string","maxLength":40},{"type":"null"}]}},"required":["id","label","kind","title","body","next"]},{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z][a-zA-Z0-9_]{0,39}$"},"label":{"type":"string","minLength":1,"maxLength":100},"kind":{"type":"string","const":"FILE_SHARE"},"title":{"type":"string","minLength":1,"maxLength":160},"body":{"type":"string","minLength":1,"maxLength":12000},"versionId":{"type":"string","minLength":1,"maxLength":100},"versionHash":{"type":"string","pattern":"^[a-f0-9]{64}$"},"expiresInDays":{"type":"integer","minimum":1,"maximum":90},"next":{"anyOf":[{"type":"string","maxLength":40},{"type":"null"}]}},"required":["id","label","kind","title","body","versionId","versionHash","expiresInDays","next"]},{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z][a-zA-Z0-9_]{0,39}$"},"label":{"type":"string","minLength":1,"maxLength":100},"kind":{"type":"string","const":"DOCUMENT_DRAFT"},"title":{"type":"string","minLength":1,"maxLength":160},"body":{"type":"string","minLength":1,"maxLength":8000},"next":{"anyOf":[{"type":"string","maxLength":40},{"type":"null"}]}},"required":["id","label","kind","title","body","next"]},{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z][a-zA-Z0-9_]{0,39}$"},"label":{"type":"string","minLength":1,"maxLength":100},"kind":{"type":"string","const":"BOOKING_JOURNEY"},"title":{"type":"string","minLength":1,"maxLength":160},"body":{"default":"","type":"string","maxLength":5000},"journeyVersionId":{"type":"string","minLength":1,"maxLength":100},"journeyVersionHash":{"type":"string","pattern":"^[a-f0-9]{64}$"},"expiresAfterDays":{"type":"integer","minimum":1,"maximum":365},"additionalSignerContactIds":{"maxItems":7,"type":"array","items":{"type":"string","minLength":1,"maxLength":100}},"next":{"anyOf":[{"type":"string","maxLength":40},{"type":"null"}]}},"required":["id","label","kind","title","journeyVersionId","journeyVersionHash","expiresAfterDays","additionalSignerContactIds","next"]},{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z][a-zA-Z0-9_]{0,39}$"},"label":{"type":"string","minLength":1,"maxLength":100},"kind":{"type":"string","const":"PORTAL_LINK"},"title":{"type":"string","minLength":1,"maxLength":160},"body":{"default":"","type":"string","maxLength":5000},"next":{"anyOf":[{"type":"string","maxLength":40},{"type":"null"}]}},"required":["id","label","kind","title","next"]},{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z][a-zA-Z0-9_]{0,39}$"},"label":{"type":"string","minLength":1,"maxLength":100},"kind":{"type":"string","const":"PROPOSAL_DRAFT"},"title":{"type":"string","minLength":1,"maxLength":160},"body":{"default":"","type":"string","maxLength":5000},"sourceVersionId":{"type":"string","minLength":1,"maxLength":100},"sourceVersionHash":{"type":"string","pattern":"^[a-f0-9]{64}$"},"next":{"anyOf":[{"type":"string","maxLength":40},{"type":"null"}]}},"required":["id","label","kind","title","sourceVersionId","sourceVersionHash","next"]},{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z][a-zA-Z0-9_]{0,39}$"},"label":{"type":"string","minLength":1,"maxLength":100},"kind":{"type":"string","const":"TEAM_NOTICE"},"title":{"type":"string","minLength":1,"maxLength":160},"body":{"type":"string","minLength":1,"maxLength":5000},"membershipIds":{"minItems":1,"maxItems":30,"type":"array","items":{"type":"string","minLength":1,"maxLength":100}},"next":{"anyOf":[{"type":"string","maxLength":40},{"type":"null"}]}},"required":["id","label","kind","title","body","membershipIds","next"]},{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z][a-zA-Z0-9_]{0,39}$"},"label":{"type":"string","minLength":1,"maxLength":100},"kind":{"type":"string","const":"FORM_REQUEST"},"formId":{"type":"string","minLength":1,"maxLength":100},"title":{"type":"string","minLength":1,"maxLength":160},"body":{"default":"","type":"string","maxLength":5000},"next":{"anyOf":[{"type":"string","maxLength":40},{"type":"null"}]}},"required":["id","label","kind","formId","title","next"]}]}}},"required":["trigger","nodes"]},"layout":{"type":"object","properties":{"version":{"type":"number","const":1},"nodes":{"minItems":2,"maxItems":40,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":100},"x":{"type":"number","minimum":-20000,"maximum":20000},"y":{"type":"number","minimum":-20000,"maximum":20000}},"required":["id","x","y"],"additionalProperties":false}},"viewport":{"type":"object","properties":{"x":{"type":"number","minimum":-100000,"maximum":100000},"y":{"type":"number","minimum":-100000,"maximum":100000},"zoom":{"type":"number","minimum":0.25,"maximum":2}},"required":["x","y","zoom"],"additionalProperties":false}},"required":["version","nodes","viewport"],"additionalProperties":false},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["expectedGraphRevision","expectedLayoutRevision","name","graph","layout","requestId"],"additionalProperties":false}},"required":["operation","data"],"additionalProperties":false},{"type":"object","properties":{"operation":{"type":"string","const":"layout"},"data":{"type":"object","properties":{"workflowId":{"type":"string","minLength":1,"maxLength":100},"expectedGraphRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"graphHash":{"type":"string","pattern":"^[a-f0-9]{64}$"},"expectedLayoutRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"layout":{"type":"object","properties":{"version":{"type":"number","const":1},"nodes":{"minItems":2,"maxItems":40,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":100},"x":{"type":"number","minimum":-20000,"maximum":20000},"y":{"type":"number","minimum":-20000,"maximum":20000}},"required":["id","x","y"],"additionalProperties":false}},"viewport":{"type":"object","properties":{"x":{"type":"number","minimum":-100000,"maximum":100000},"y":{"type":"number","minimum":-100000,"maximum":100000},"zoom":{"type":"number","minimum":0.25,"maximum":2}},"required":["x","y","zoom"],"additionalProperties":false}},"required":["version","nodes","viewport"],"additionalProperties":false},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["workflowId","expectedGraphRevision","graphHash","expectedLayoutRevision","layout","requestId"],"additionalProperties":false}},"required":["operation","data"],"additionalProperties":false},{"type":"object","properties":{"operation":{"type":"string","const":"simulate"},"data":{"type":"object","properties":{"workflowId":{"type":"string","minLength":1,"maxLength":100},"expectedGraphRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"facts":{"type":"object","properties":{"name":{"type":"string","maxLength":150},"email":{"anyOf":[{"type":"string","format":"email","pattern":"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"},{"type":"string","const":""}]},"eventDate":{"anyOf":[{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},{"type":"string","const":""}]},"business":{"type":"string","maxLength":150},"stage":{"type":"string","maxLength":100},"tags":{"maxItems":50,"type":"array","items":{"type":"string","maxLength":100}},"answers":{"default":{},"type":"object","propertyNames":{"type":"string","pattern":"^[a-zA-Z][a-zA-Z0-9_]{0,39}$"},"additionalProperties":{"anyOf":[{"type":"string","maxLength":5000},{"type":"boolean"},{"type":"number"},{"maxItems":30,"type":"array","items":{"type":"string","maxLength":100}}]}},"at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"appointmentAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"signedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"paymentAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"sms":{"type":"object","properties":{"phone":{"type":"string","maxLength":30},"senderLabel":{"type":"string","maxLength":100},"permissionVerified":{"type":"boolean"},"rateCents":{"type":"integer","minimum":0,"maximum":10000},"senderType":{"type":"string","enum":["US_LONG_CODE","US_TOLL_FREE"]},"timezone":{"type":"string","minLength":1,"maxLength":100}},"required":["phone","senderLabel","permissionVerified","rateCents","senderType","timezone"],"additionalProperties":false}},"required":["name","email","eventDate","business","stage","tags","at"],"additionalProperties":false},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["workflowId","expectedGraphRevision","facts","requestId"],"additionalProperties":false}},"required":["operation","data"],"additionalProperties":false},{"type":"object","properties":{"operation":{"type":"string","const":"publish"},"data":{"type":"object","properties":{"workflowId":{"type":"string","minLength":1,"maxLength":100},"expectedGraphRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"simulationId":{"type":"string","minLength":1,"maxLength":100},"reviewedSourceHash":{"type":"string","pattern":"^[a-f0-9]{64}$"},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["workflowId","expectedGraphRevision","simulationId","reviewedSourceHash","requestId"],"additionalProperties":false}},"required":["operation","data"],"additionalProperties":false}]}}}},"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}}},"/workflow-notices":{"get":{"summary":"Read this named member’s private workflow notices; both cursor fields must be supplied together","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"beforeId","in":"query","required":false,"schema":{"type":"string","minLength":1,"maxLength":100}},{"name":"beforeCreatedAt","in":"query","required":false,"schema":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"}},{"name":"limit","in":"query","required":false,"schema":{"default":30,"type":"integer","minimum":1,"maximum":100}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}},"post":{"summary":"Mark this named member’s workflow notice read","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":100},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["id","requestId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}}},"/workflow-portals/{id}":{"get":{"summary":"Review one prepared portal artifact under its current source and access generation","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}},"post":{"summary":"Copy the exact reviewed existing portal capability; never enables sharing or sends a message","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"expectedSourceHash":{"type":"string","pattern":"^[a-f0-9]{64}$"},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["expectedSourceHash","requestId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}}},"/shared-conversations/{id}/audio":{"get":{"summary":"List only permitted private voice drafts and posted notes; named participant and history limits apply","description":"Requires a Clerk account session. This participant route uses account identity without selecting a business workspace. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"page","in":"query","required":false,"schema":{"default":1,"type":"integer","minimum":1,"maximum":100000}}],"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}},"post":{"summary":"Review a transcript edit, retry processing or remove playback; posting still requires exact shared-message review","description":"Requires a Clerk account session. This participant route uses account identity without selecting a business workspace. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"audioId":{"type":"string","minLength":1,"maxLength":100},"expectedRevision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"operation":{"type":"string","enum":["TRANSCRIPT","RETRY","REMOVE"]},"transcript":{"type":"string","minLength":1,"maxLength":6000}},"required":["audioId","expectedRevision","requestId","operation"],"additionalProperties":false}}}},"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}}},"/shared-conversations/{id}/audio/{audioId}":{"get":{"summary":"Stream the verified private playback derivative after current thread and history authorization","description":"Requires a Clerk account session. This participant route uses account identity without selecting a business workspace. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"audioId","in":"path","required":true,"schema":{"type":"string"}},{"name":"Range","in":"header","schema":{"type":"string"}},{"name":"If-Range","in":"header","schema":{"type":"string"}}],"responses":{"200":{"description":"Exact processed MP3, private no-store, ETag and Accept-Ranges. Original objects and storage URLs are never returned.","content":{"audio/mpeg":{"schema":{"type":"string","format":"binary"}}}},"206":{"description":"One authorized byte range with Content-Range.","content":{"audio/mpeg":{"schema":{"type":"string","format":"binary"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"},"416":{"description":"Unsupported or unsatisfiable range."}}},"head":{"summary":"Read headers for one permitted private voice note","description":"Requires a Clerk account session. This participant route uses account identity without selecting a business workspace. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"audioId","in":"path","required":true,"schema":{"type":"string"}},{"name":"Range","in":"header","schema":{"type":"string"}},{"name":"If-Range","in":"header","schema":{"type":"string"}}],"responses":{"200":{"description":"Exact processed MP3, private no-store, ETag and Accept-Ranges. Original objects and storage URLs are never returned."},"206":{"description":"One authorized byte range with Content-Range."},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"},"416":{"description":"Unsupported or unsatisfiable range."}}}},"/shared-conversations/{id}/audio/upload":{"post":{"summary":"Upload one explicitly approved private voice-note source; requires current workspace sponsorship and file capability","description":"Requires a Clerk account session. This participant route uses account identity without selecting a business workspace. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Retained upload/processing record or exact recovered receipt; not a posted message."},"400":{"description":"Invalid metadata or audio contents"},"401":{"description":"Current named account required"},"403":{"description":"Workspace API keys cannot impersonate a participant"},"404":{"description":"Thread/participant unavailable"},"408":{"description":"Bounded request read expired"},"409":{"description":"Changed payload, authority or revision"},"413":{"description":"Multipart body exceeds 8,000,000 bytes plus 65,536 envelope bytes"},"415":{"description":"Multipart encoding required"}},"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","additionalProperties":false,"properties":{"requestId":{"type":"string","format":"uuid"},"participantId":{"type":"string","minLength":1,"maxLength":100},"transcript":{"type":"string","minLength":1,"maxLength":6000,"description":"Sender-reviewed transcript; no automatic transcription is claimed."},"approvedStorageCents":{"type":"integer","minimum":1,"maximum":100000,"description":"Explicit maximum matching the displayed configured ingestion charge. Upload alone does not post."},"file":{"type":"string","format":"binary","description":"One MP3, WAV or WebM/Opus source, maximum 8,000,000 bytes; full decode must prove 1–60 seconds. Unsupported recording environments use file/text fallback."}},"required":["requestId","participantId","transcript","approvedStorageCents","file"]}}}}}},"/crm-sms":{"get":{"summary":"Read private client texts, current phone permissions and independently paginated history; unassigned replies remain owner/admin only","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"leadId","in":"query","required":true,"schema":{"type":"string","minLength":1}},{"name":"messagesPage","in":"query","schema":{"type":"integer","minimum":1,"maximum":10000,"default":1}},{"name":"repliesPage","in":"query","schema":{"type":"integer","minimum":1,"maximum":10000,"default":1}},{"name":"eventsPage","in":"query","schema":{"type":"integer","minimum":1,"maximum":10000,"default":1}},{"name":"unassignedPage","in":"query","schema":{"type":"integer","minimum":1,"maximum":10000,"default":1}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}},"post":{"summary":"Issue or revoke permission, preview exact texts, approve their frozen cost or stop/reconcile an original attempt; named owner/admin required","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","oneOf":[{"type":"object","properties":{"operation":{"type":"string","const":"issue-permission"},"data":{"type":"object","properties":{"leadId":{"type":"string","minLength":1,"maxLength":160},"senderBindingId":{"type":"string","minLength":1,"maxLength":160},"expectedContactRevision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"expectedPermissionRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"expiresAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"timezone":{"type":"string","minLength":1,"maxLength":100},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["leadId","senderBindingId","expectedContactRevision","expectedPermissionRevision","expiresAt","timezone","requestId"],"additionalProperties":false}},"required":["operation","data"],"additionalProperties":false},{"type":"object","properties":{"operation":{"type":"string","const":"revoke-permission"},"data":{"type":"object","properties":{"permissionId":{"type":"string","minLength":1,"maxLength":160},"expectedRevision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"confirmed":{"type":"boolean","const":true}},"required":["permissionId","expectedRevision","requestId","confirmed"],"additionalProperties":false}},"required":["operation","data"],"additionalProperties":false},{"type":"object","properties":{"operation":{"type":"string","const":"preview"},"data":{"type":"object","properties":{"leadId":{"type":"string","minLength":1,"maxLength":160},"permissionId":{"type":"string","minLength":1,"maxLength":160},"body":{"type":"string","minLength":1,"maxLength":2400},"scheduledLocal":{"anyOf":[{"type":"string","pattern":"^\\d{4}-\\d\\d-\\d\\dT\\d\\d:\\d\\d$"},{"type":"null"}]},"timezone":{"type":"string","minLength":1,"maxLength":100},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"workflowArtifactId":{"type":"string","minLength":1,"maxLength":160}},"required":["leadId","permissionId","body","scheduledLocal","timezone","requestId"],"additionalProperties":false}},"required":["operation","data"],"additionalProperties":false},{"type":"object","properties":{"operation":{"type":"string","const":"approve"},"data":{"type":"object","properties":{"reviewId":{"type":"string","minLength":1,"maxLength":160},"reviewHash":{"type":"string","pattern":"^[a-f0-9]{64}$"},"approved":{"type":"boolean","const":true},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["reviewId","reviewHash","approved","requestId"],"additionalProperties":false}},"required":["operation","data"],"additionalProperties":false},{"type":"object","properties":{"operation":{"type":"string","const":"recover"},"data":{"type":"object","properties":{"deliveryId":{"type":"string","minLength":1,"maxLength":160},"action":{"type":"string","enum":["STOP","RECONCILE"]},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"confirmed":{"type":"boolean","const":true}},"required":["deliveryId","action","requestId","confirmed"],"additionalProperties":false}},"required":["operation","data"],"additionalProperties":false}]}}}},"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}}},"/crm-sms-permissions/{token}":{"get":{"summary":"Read this private client SMS permission and current enrollment state","description":"Requires the 64-character private permission token in the URL. Business or account bearer credentials cannot replace it. Mutations require the configured application Origin. A consent checkbox is insufficient: an exact signed WBCRM reply from the saved phone is required. This is operational permission, not marketing consent.","security":[],"x-authentication":{"kind":"crm-sms-permission-capability"},"parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Current private permission result only; no-store and no-referrer.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"403":{"description":"Bearer credentials or cross-site mutation rejected"},"404":{"description":"Expired, revoked or changed phone permission"},"409":{"description":"Stale revision or request replay conflict"}}},"post":{"summary":"Begin exact reviewed phone verification or withdraw client SMS permission","description":"Requires the 64-character private permission token in the URL. Business or account bearer credentials cannot replace it. Mutations require the configured application Origin. A consent checkbox is insufficient: an exact signed WBCRM reply from the saved phone is required. This is operational permission, not marketing consent.","security":[],"x-authentication":{"kind":"crm-sms-permission-capability"},"parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","oneOf":[{"type":"object","properties":{"operation":{"type":"string","const":"begin"},"data":{"type":"object","properties":{"expectedRevision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"noticeHash":{"type":"string","pattern":"^[a-f0-9]{64}$"},"window":{"type":"object","properties":{"timezone":{"type":"string","minLength":1,"maxLength":100},"quietStart":{"type":"string","pattern":"^([01]\\d|2[0-3]):[0-5]\\d$"},"quietEnd":{"type":"string","pattern":"^([01]\\d|2[0-3]):[0-5]\\d$"}},"required":["timezone","quietStart","quietEnd"],"additionalProperties":false},"confirmed":{"type":"boolean","const":true},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["expectedRevision","noticeHash","window","confirmed","requestId"],"additionalProperties":false}},"required":["operation","data"],"additionalProperties":false},{"type":"object","properties":{"operation":{"type":"string","const":"withdraw"},"data":{"type":"object","properties":{"expectedRevision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"confirmed":{"type":"boolean","const":true},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["expectedRevision","confirmed","requestId"],"additionalProperties":false}},"required":["operation","data"],"additionalProperties":false}]}}}},"responses":{"200":{"description":"Current private permission result only; no-store and no-referrer.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"403":{"description":"Bearer credentials or cross-site mutation rejected"},"404":{"description":"Expired, revoked or changed phone permission"},"409":{"description":"Stale revision or request replay conflict"}}}},"/projects/{id}/coordination":{"get":{"summary":"Review current timeline publication impact, linked-resource availability and notification summaries; versionId reads one retained version","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"versionId","in":"query","schema":{"type":"string","minLength":1}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}},"post":{"summary":"Save, publish, store a scenario, restore a version or move draft history with current named authority and revision checks","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"oneOf":[{"type":"object","additionalProperties":false,"properties":{"operation":{"const":"save"},"data":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"snapshot":{"type":"object","properties":{"schemaVersion":{"type":"number","const":2},"timezone":{"type":"string","minLength":1,"maxLength":80},"items":{"maxItems":500,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},"dayId":{"anyOf":[{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},{"type":"null"}]},"title":{"type":"string","minLength":1,"maxLength":180},"date":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"time":{"type":"string","pattern":"^([01]\\d|2[0-3]):[0-5]\\d$"},"durationMin":{"type":"integer","minimum":0,"maximum":1440},"bufferMin":{"type":"integer","minimum":0,"maximum":240},"fixed":{"type":"boolean"},"dependsOn":{"maxItems":50,"type":"array","items":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"}},"roles":{"maxItems":30,"type":"array","items":{"type":"string","minLength":1,"maxLength":60}},"resources":{"maxItems":30,"type":"array","items":{"type":"string","minLength":1,"maxLength":80}},"location":{"type":"string","maxLength":180},"critical":{"type":"boolean"},"section":{"type":"string","maxLength":80},"checklist":{"maxItems":30,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},"label":{"type":"string","minLength":1,"maxLength":180},"done":{"type":"boolean"}},"required":["id","label","done"],"additionalProperties":false}},"resourcePlan":{"type":"object","properties":{"location":{"anyOf":[{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},"revision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991}},"required":["id","revision"],"additionalProperties":false},{"type":"null"}]},"setupMin":{"type":"integer","minimum":0,"maximum":1440},"teardownMin":{"type":"integer","minimum":0,"maximum":1440},"travelBeforeMin":{"type":"integer","minimum":0,"maximum":1440},"travelFromItemId":{"anyOf":[{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},{"type":"null"}]},"crew":{"maxItems":30,"type":"array","items":{"type":"object","properties":{"shiftId":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},"revision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991}},"required":["shiftId","revision"],"additionalProperties":false}},"equipment":{"maxItems":30,"type":"array","items":{"type":"object","properties":{"itemId":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},"quantity":{"type":"integer","minimum":1,"maximum":100000}},"required":["itemId","quantity"],"additionalProperties":false}},"vendors":{"maxItems":30,"type":"array","items":{"type":"object","properties":{"bookingId":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},"sourceHash":{"type":"string","pattern":"^[a-f0-9]{64}$"}},"required":["bookingId","sourceHash"],"additionalProperties":false}}},"required":["location","setupMin","teardownMin","travelBeforeMin","travelFromItemId","crew","equipment","vendors"],"additionalProperties":false}},"required":["id","dayId","title","date","time","durationMin","bufferMin","fixed","dependsOn","roles","resources","location","critical"],"additionalProperties":false}}},"required":["timezone","items"],"additionalProperties":false},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["expectedRevision","snapshot"],"additionalProperties":false}},"required":["operation","data"]},{"type":"object","additionalProperties":false,"properties":{"operation":{"const":"compose"},"data":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"snapshot":{"type":"object","properties":{"schemaVersion":{"type":"number","const":2},"timezone":{"type":"string","minLength":1,"maxLength":80},"items":{"maxItems":500,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},"dayId":{"anyOf":[{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},{"type":"null"}]},"title":{"type":"string","minLength":1,"maxLength":180},"date":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"time":{"type":"string","pattern":"^([01]\\d|2[0-3]):[0-5]\\d$"},"durationMin":{"type":"integer","minimum":0,"maximum":1440},"bufferMin":{"type":"integer","minimum":0,"maximum":240},"fixed":{"type":"boolean"},"dependsOn":{"maxItems":50,"type":"array","items":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"}},"roles":{"maxItems":30,"type":"array","items":{"type":"string","minLength":1,"maxLength":60}},"resources":{"maxItems":30,"type":"array","items":{"type":"string","minLength":1,"maxLength":80}},"location":{"type":"string","maxLength":180},"critical":{"type":"boolean"},"section":{"type":"string","maxLength":80},"checklist":{"maxItems":30,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},"label":{"type":"string","minLength":1,"maxLength":180},"done":{"type":"boolean"}},"required":["id","label","done"],"additionalProperties":false}},"resourcePlan":{"type":"object","properties":{"location":{"anyOf":[{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},"revision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991}},"required":["id","revision"],"additionalProperties":false},{"type":"null"}]},"setupMin":{"type":"integer","minimum":0,"maximum":1440},"teardownMin":{"type":"integer","minimum":0,"maximum":1440},"travelBeforeMin":{"type":"integer","minimum":0,"maximum":1440},"travelFromItemId":{"anyOf":[{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},{"type":"null"}]},"crew":{"maxItems":30,"type":"array","items":{"type":"object","properties":{"shiftId":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},"revision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991}},"required":["shiftId","revision"],"additionalProperties":false}},"equipment":{"maxItems":30,"type":"array","items":{"type":"object","properties":{"itemId":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},"quantity":{"type":"integer","minimum":1,"maximum":100000}},"required":["itemId","quantity"],"additionalProperties":false}},"vendors":{"maxItems":30,"type":"array","items":{"type":"object","properties":{"bookingId":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},"sourceHash":{"type":"string","pattern":"^[a-f0-9]{64}$"}},"required":["bookingId","sourceHash"],"additionalProperties":false}}},"required":["location","setupMin","teardownMin","travelBeforeMin","travelFromItemId","crew","equipment","vendors"],"additionalProperties":false}},"required":["id","dayId","title","date","time","durationMin","bufferMin","fixed","dependsOn","roles","resources","location","critical"],"additionalProperties":false}}},"required":["timezone","items"],"additionalProperties":false},"additions":{"minItems":1,"maxItems":50,"type":"array","items":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"}}},"required":["expectedRevision","requestId","snapshot","additions"],"additionalProperties":false}},"required":["operation","data"]},{"type":"object","additionalProperties":false,"properties":{"operation":{"const":"publish"},"data":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"label":{"type":"string","minLength":1,"maxLength":100},"reviewedHash":{"type":"string","pattern":"^[a-f0-9]{64}$"},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"approved":{"type":"boolean","const":true}},"required":["expectedRevision","label","reviewedHash","approved"],"additionalProperties":false}},"required":["operation","data"]},{"type":"object","additionalProperties":false,"properties":{"operation":{"const":"scenario"},"data":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"label":{"type":"string","minLength":1,"maxLength":100},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["expectedRevision","label"],"additionalProperties":false}},"required":["operation","data"]},{"type":"object","additionalProperties":false,"properties":{"operation":{"const":"restore"},"data":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"versionId":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["versionId","expectedRevision"],"additionalProperties":false}},"required":["operation","data"]},{"type":"object","additionalProperties":false,"properties":{"operation":{"const":"history"},"data":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"direction":{"type":"string","enum":["UNDO","REDO"]}},"required":["expectedRevision","direction"],"additionalProperties":false}},"required":["operation","data"]}]}}}},"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}}},"/projects/{id}/coordination-resources":{"get":{"summary":"Read private linked timeline locations, accepted crew assignments, booked vendors and equipment; each catalog is bounded to 300 and limited reports truncation","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}},"post":{"summary":"Save or archive a reviewed timeline location with revision and replay checks","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"id":{"anyOf":[{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},{"type":"null"}]},"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"type":"string","minLength":1,"maxLength":180},"archived":{"type":"boolean"}},"required":["id","expectedRevision","requestId","name","archived"],"additionalProperties":false}}}},"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}}},"/projects/{id}/coordination-operations":{"get":{"summary":"Read paginated incident, handoff and observed-time history, or one exact reviewed role broadcast","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"page","in":"query","schema":{"type":"integer","minimum":1,"maximum":10000,"default":1}},{"name":"broadcastId","in":"query","schema":{"type":"string","minLength":1},"description":"Select this instead of page to read one exact reviewed broadcast."},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}},"post":{"summary":"Record accountable incidents, handoffs and actual times, configure role reminders, or review/approve an exact role broadcast","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"oneOf":[{"type":"object","additionalProperties":false,"properties":{"operation":{"const":"reportIncident"},"data":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"title":{"type":"string","minLength":1,"maxLength":160},"detail":{"type":"string","minLength":1,"maxLength":3000},"severity":{"type":"string","enum":["INFO","WARNING","CRITICAL"]},"assigneeRecipientId":{"default":null,"anyOf":[{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},{"type":"null"}]}},"required":["requestId","title","detail","severity"],"additionalProperties":false}},"required":["operation","data"]},{"type":"object","additionalProperties":false,"properties":{"operation":{"const":"updateIncident"},"data":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"incidentId":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"status":{"type":"string","enum":["OPEN","ACKNOWLEDGED","RESOLVED"]},"resolution":{"type":"string","maxLength":3000},"assigneeRecipientId":{"anyOf":[{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},{"type":"null"}]}},"required":["incidentId","requestId","expectedRevision","status","resolution","assigneeRecipientId"],"additionalProperties":false}},"required":["operation","data"]},{"type":"object","additionalProperties":false,"properties":{"operation":{"const":"createHandoff"},"data":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"fromRecipientId":{"anyOf":[{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},{"type":"null"}]},"toRecipientId":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},"summary":{"type":"string","minLength":1,"maxLength":3000},"incidentId":{"default":null,"anyOf":[{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},{"type":"null"}]},"incidentRevision":{"default":null,"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]}},"required":["requestId","fromRecipientId","toRecipientId","summary"],"additionalProperties":false}},"required":["operation","data"]},{"type":"object","additionalProperties":false,"properties":{"operation":{"const":"controlHandoff"},"data":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"handoffId":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"action":{"type":"string","const":"CANCEL"}},"required":["handoffId","requestId","expectedRevision","action"],"additionalProperties":false}},"required":["operation","data"]},{"type":"object","additionalProperties":false,"properties":{"operation":{"const":"actual"},"data":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"itemId":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},"publishedRevision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"action":{"type":"string","enum":["START","FINISH","CORRECT"]},"startedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}]},"finishedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}]},"reason":{"type":"string","maxLength":1000}},"required":["itemId","publishedRevision","requestId","expectedRevision","action","startedAt","finishedAt","reason"],"additionalProperties":false}},"required":["operation","data"]},{"type":"object","additionalProperties":false,"properties":{"operation":{"const":"reminderPolicy"},"data":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"definition":{"type":"object","properties":{"delivery":{"type":"object","properties":{"copyRecipientIds":{"maxItems":12,"type":"array","items":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"}},"morning":{"type":"object","properties":{"enabled":{"type":"boolean"},"time":{"type":"string","pattern":"^([01]\\d|2[0-3]):[0-5]\\d$"},"roles":{"maxItems":30,"type":"array","items":{"type":"string","minLength":1,"maxLength":60}}},"required":["enabled","time","roles"],"additionalProperties":false}},"required":["copyRecipientIds","morning"],"additionalProperties":false},"defaultMinutes":{"type":"integer","minimum":1,"maximum":180},"multiRole":{"type":"string","enum":["EARLIEST","HOLD"]},"ackPushIdentityIds":{"default":[],"maxItems":30,"type":"array","items":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"}},"roles":{"maxItems":30,"type":"array","items":{"type":"object","properties":{"role":{"type":"string","minLength":1,"maxLength":60},"minutes":{"type":"integer","minimum":1,"maximum":180}},"required":["role","minutes"],"additionalProperties":false}}},"required":["defaultMinutes","multiRole","roles"],"additionalProperties":false}},"required":["requestId","expectedRevision","definition"],"additionalProperties":false}},"required":["operation","data"]},{"type":"object","additionalProperties":false,"properties":{"operation":{"const":"previewBroadcast"},"data":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"channel":{"default":"SMS","type":"string","enum":["SMS","EMAIL"]},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"publishedRevision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"roles":{"minItems":1,"maxItems":30,"type":"array","items":{"type":"string","minLength":1,"maxLength":60}},"text":{"type":"string","minLength":1,"maxLength":800},"expiresAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"}},"required":["requestId","publishedRevision","roles","text","expiresAt"],"additionalProperties":false}},"required":["operation","data"]},{"type":"object","additionalProperties":false,"properties":{"operation":{"const":"controlBroadcast"},"data":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"broadcastId":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},"expectedHash":{"type":"string","pattern":"^[a-f0-9]{64}$"},"action":{"type":"string","enum":["APPROVE","CANCEL"]}},"required":["requestId","broadcastId","expectedHash","action"],"additionalProperties":false}},"required":["operation","data"]}]}}}},"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}}},"/sms-sender":{"get":{"summary":"Read reviewed sender choices and current workspace sender; current owner only, no credential secrets","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}},"post":{"summary":"Save an exact owner-reviewed sender or pause it with revision and replay protection; does not send a message","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"oneOf":[{"type":"object","additionalProperties":false,"properties":{"operation":{"const":"bind"},"data":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"configurationKey":{"type":"string","minLength":1,"maxLength":80},"reviewHash":{"type":"string","pattern":"^[a-f0-9]{64}$"},"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"reviewed":{"type":"boolean","const":true}},"required":["requestId","configurationKey","reviewHash","expectedRevision","reviewed"],"additionalProperties":false}},"required":["operation","data"]},{"type":"object","additionalProperties":false,"properties":{"operation":{"const":"revoke"},"data":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":100},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"expectedRevision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991}},"required":["id","requestId","expectedRevision"],"additionalProperties":false}},"required":["operation","data"]}]}}}},"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}}},"/websites/{slug}/guest-sms":{"get":{"summary":"Read household phone enrollment and consent history","description":"Household browser interface. Business keys and account bearer tokens are rejected. A current HttpOnly website session cookie is required, except for the exchange operation which validates the existing invitation. Mutations require the configured application Origin and reject cross-site requests. Session secrets never appear in JSON. Preserve the opaque Set-Cookie value; the production cookie name is __Host-wb-guest-{websiteId}.","security":[],"x-authentication":{"kind":"website-scoped-cookie","nameTemplate":"__Host-wb-guest-{websiteId}","exchange":false},"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}},{"name":"page","in":"query","schema":{"type":"integer","minimum":1,"maximum":10000,"default":1}}],"responses":{"200":{"description":"Authorized household result only; private no-store response.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"403":{"description":"Business or account bearer credentials are not accepted"},"404":{"description":"Invitation or current session unavailable"},"408":{"description":"Request body deadline exceeded"},"409":{"description":"Stale revision or different input for a saved request identity"},"413":{"description":"Payload exceeds the documented bound"}}},"post":{"summary":"Review, begin or withdraw phone enrollment for this exact household; signed inbound phone proof remains required","description":"Household browser interface. Business keys and account bearer tokens are rejected. A current HttpOnly website session cookie is required, except for the exchange operation which validates the existing invitation. Mutations require the configured application Origin and reject cross-site requests. Session secrets never appear in JSON. Preserve the opaque Set-Cookie value; the production cookie name is __Host-wb-guest-{websiteId}.","security":[],"x-authentication":{"kind":"website-scoped-cookie","nameTemplate":"__Host-wb-guest-{websiteId}","exchange":false},"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","oneOf":[{"type":"object","properties":{"operation":{"type":"string","const":"preview"},"data":{"type":"object","properties":{"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"expectedContactRevision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"expectedConsentGeneration":{"type":"integer","minimum":0,"maximum":9007199254740991},"expectedStopRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"window":{"type":"object","properties":{"timezone":{"type":"string","minLength":1,"maxLength":100},"quietStart":{"type":"string","pattern":"^([01]\\d|2[0-3]):[0-5]\\d$"},"quietEnd":{"type":"string","pattern":"^([01]\\d|2[0-3]):[0-5]\\d$"}},"required":["timezone","quietStart","quietEnd"],"additionalProperties":false}},"required":["requestId","expectedContactRevision","expectedConsentGeneration","expectedStopRevision","window"],"additionalProperties":false}},"required":["operation","data"],"additionalProperties":false},{"type":"object","properties":{"operation":{"type":"string","const":"begin"},"data":{"type":"object","properties":{"enrollmentId":{"type":"string","minLength":1,"maxLength":160},"noticeHash":{"type":"string","pattern":"^[a-f0-9]{64}$"},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"confirmed":{"type":"boolean","const":true}},"required":["enrollmentId","noticeHash","requestId","confirmed"],"additionalProperties":false}},"required":["operation","data"],"additionalProperties":false},{"type":"object","properties":{"operation":{"type":"string","const":"withdraw"},"data":{"type":"object","properties":{"consentId":{"type":"string","minLength":1,"maxLength":160},"expectedConsentGeneration":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"expectedStopRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"confirmed":{"type":"boolean","const":true}},"required":["consentId","expectedConsentGeneration","expectedStopRevision","requestId","confirmed"],"additionalProperties":false}},"required":["operation","data"],"additionalProperties":false}]}}}},"responses":{"200":{"description":"Authorized household result only; private no-store response.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"403":{"description":"Business or account bearer credentials are not accepted"},"404":{"description":"Invitation or current session unavailable"},"408":{"description":"Request body deadline exceeded"},"409":{"description":"Stale revision or different input for a saved request identity"},"413":{"description":"Payload exceeds the documented bound"}}}},"/guest-invitations/{token}/sms":{"get":{"summary":"Read this household’s SMS enrollment and independently paginated consent history","description":"Requires the existing private invitation capability in the path. Business/account bearer credentials cannot replace it. Mutations require the canonical application Origin. This does not verify personal identity; enrollment requires an exact reviewed notice and a signed inbound code from the saved phone.","security":[],"x-authentication":{"kind":"household-invitation-capability"},"parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string"}},{"name":"page","in":"query","schema":{"type":"integer","minimum":1,"maximum":10000,"default":1}}],"responses":{"200":{"description":"Authorized household result only; private no-store response.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"403":{"description":"Business or account bearer credentials are not accepted"},"404":{"description":"Invitation or current session unavailable"},"408":{"description":"Request body deadline exceeded"},"409":{"description":"Stale revision or different input for a saved request identity"},"413":{"description":"Payload exceeds the documented bound"}}},"post":{"summary":"Review, begin or withdraw this household’s phone enrollment; a signed inbound code is still required to verify the phone","description":"Requires the existing private invitation capability in the path. Business/account bearer credentials cannot replace it. Mutations require the canonical application Origin. This does not verify personal identity; enrollment requires an exact reviewed notice and a signed inbound code from the saved phone.","security":[],"x-authentication":{"kind":"household-invitation-capability"},"parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","oneOf":[{"type":"object","properties":{"operation":{"type":"string","const":"preview"},"data":{"type":"object","properties":{"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"expectedContactRevision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"expectedConsentGeneration":{"type":"integer","minimum":0,"maximum":9007199254740991},"expectedStopRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"window":{"type":"object","properties":{"timezone":{"type":"string","minLength":1,"maxLength":100},"quietStart":{"type":"string","pattern":"^([01]\\d|2[0-3]):[0-5]\\d$"},"quietEnd":{"type":"string","pattern":"^([01]\\d|2[0-3]):[0-5]\\d$"}},"required":["timezone","quietStart","quietEnd"],"additionalProperties":false}},"required":["requestId","expectedContactRevision","expectedConsentGeneration","expectedStopRevision","window"],"additionalProperties":false}},"required":["operation","data"],"additionalProperties":false},{"type":"object","properties":{"operation":{"type":"string","const":"begin"},"data":{"type":"object","properties":{"enrollmentId":{"type":"string","minLength":1,"maxLength":160},"noticeHash":{"type":"string","pattern":"^[a-f0-9]{64}$"},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"confirmed":{"type":"boolean","const":true}},"required":["enrollmentId","noticeHash","requestId","confirmed"],"additionalProperties":false}},"required":["operation","data"],"additionalProperties":false},{"type":"object","properties":{"operation":{"type":"string","const":"withdraw"},"data":{"type":"object","properties":{"consentId":{"type":"string","minLength":1,"maxLength":160},"expectedConsentGeneration":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"expectedStopRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"confirmed":{"type":"boolean","const":true}},"required":["consentId","expectedConsentGeneration","expectedStopRevision","requestId","confirmed"],"additionalProperties":false}},"required":["operation","data"],"additionalProperties":false}]}}}},"responses":{"200":{"description":"Authorized household result only; private no-store response.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"403":{"description":"Business or account bearer credentials are not accepted"},"404":{"description":"Invitation or current session unavailable"},"408":{"description":"Request body deadline exceeded"},"409":{"description":"Stale revision or different input for a saved request identity"},"413":{"description":"Payload exceeds the documented bound"}}}},"/messaging/sms/inbound":{"post":{"summary":"Record sender-scoped STOP/START, verify recipient enrollment, or route an unambiguous private reply","description":"Provider ingress only. SDK verification covers every unique form parameter and the exact configured HTTPS URL using an explicitly retained account credential generation. No bearer token substitutes for the signature. Empty TwiML sends no automatic paid reply.","security":[{"twilioSignature":[]}],"parameters":[],"requestBody":{"required":true,"content":{"application/x-www-form-urlencoded":{"schema":{"type":"object","additionalProperties":{"type":"string"},"required":["AccountSid","MessageSid","From","To"],"properties":{"AccountSid":{"type":"string"},"MessageSid":{"type":"string"},"From":{"type":"string"},"To":{"type":"string"},"Body":{"type":"string"},"MessageStatus":{"type":"string"},"OptOutType":{"type":"string"}}}}}},"responses":{"200":{"description":"Receipt retained or safely ignored; empty TwiML. Delivery is separate from read/acknowledgment.","content":{"text/xml":{"schema":{"type":"string"}}}},"400":{"description":"Malformed or duplicate parameters"},"403":{"description":"Provider signature or account binding invalid"},"404":{"description":"Original frozen delivery unavailable"},"408":{"description":"Body read exceeded15 seconds"},"413":{"description":"Body exceeds32,000 bytes"},"415":{"description":"Form encoding required"},"500":{"description":"Transient processing failure; provider may retry the same receipt"}}}},"/messaging/sms/status/{token}":{"post":{"summary":"Record an authenticated status against the original frozen SMS attempt","description":"Provider ingress only. SDK verification covers every unique form parameter and the exact configured HTTPS URL using an explicitly retained account credential generation. No bearer token substitutes for the signature. Empty TwiML sends no automatic paid reply.","security":[{"twilioSignature":[]}],"parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/x-www-form-urlencoded":{"schema":{"type":"object","additionalProperties":{"type":"string"},"required":["AccountSid","MessageSid","From","To"],"properties":{"AccountSid":{"type":"string"},"MessageSid":{"type":"string"},"From":{"type":"string"},"To":{"type":"string"},"Body":{"type":"string"},"MessageStatus":{"type":"string"},"OptOutType":{"type":"string"}}}}}},"responses":{"200":{"description":"Receipt retained or safely ignored; empty TwiML. Delivery is separate from read/acknowledgment.","content":{"text/xml":{"schema":{"type":"string"}}}},"400":{"description":"Malformed or duplicate parameters"},"403":{"description":"Provider signature or account binding invalid"},"404":{"description":"Original frozen delivery unavailable"},"408":{"description":"Body read exceeded15 seconds"},"413":{"description":"Body exceeds32,000 bytes"},"415":{"description":"Form encoding required"},"500":{"description":"Transient processing failure; provider may retry the same receipt"}}}},"/websites/{slug}/guest":{"get":{"summary":"Read only the current household invitation, invited events and permitted RSVP choices","description":"Household browser interface. Business keys and account bearer tokens are rejected. A current HttpOnly website session cookie is required, except for the exchange operation which validates the existing invitation. Mutations require the configured application Origin and reject cross-site requests. Session secrets never appear in JSON. Preserve the opaque Set-Cookie value; the production cookie name is __Host-wb-guest-{websiteId}.","security":[],"x-authentication":{"kind":"website-scoped-cookie","nameTemplate":"__Host-wb-guest-{websiteId}","exchange":false},"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Authorized household result only; private no-store response.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"403":{"description":"Business or account bearer credentials are not accepted"},"404":{"description":"Invitation or current session unavailable"},"408":{"description":"Request body deadline exceeded"},"409":{"description":"Stale revision or different input for a saved request identity"},"413":{"description":"Payload exceeds the documented bound"}}},"post":{"summary":"Exchange an existing private invitation for a browser session, save reviewed replies, add an allowed plus-one, or log out","description":"Household browser interface. Business keys and account bearer tokens are rejected. A current HttpOnly website session cookie is required, except for the exchange operation which validates the existing invitation. Mutations require the configured application Origin and reject cross-site requests. Session secrets never appear in JSON. Preserve the opaque Set-Cookie value; the production cookie name is __Host-wb-guest-{websiteId}.","security":[],"x-authentication":{"kind":"website-scoped-cookie","nameTemplate":"__Host-wb-guest-{websiteId}","exchange":true},"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","oneOf":[{"type":"object","properties":{"operation":{"type":"string","const":"exchange"},"data":{"type":"object","properties":{"invitation":{"type":"string","minLength":1,"maxLength":2048},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["invitation","requestId"],"additionalProperties":false}},"required":["operation","data"],"additionalProperties":false},{"type":"object","properties":{"operation":{"type":"string","const":"rsvp"},"data":{"type":"object","properties":{"revision":{"type":"integer","minimum":0,"maximum":9007199254740991},"responses":{"maxItems":200,"type":"array","items":{"type":"object","properties":{"guestId":{"type":"string","minLength":1},"eventId":{"type":"string","minLength":1},"attending":{"type":"boolean"},"meal":{"anyOf":[{"type":"string","maxLength":80},{"type":"null"}]},"dietary":{"type":"string","maxLength":500},"answers":{"type":"object","propertyNames":{"type":"string","maxLength":50},"additionalProperties":{"type":"string","maxLength":2000}}},"required":["guestId","eventId","attending","meal","dietary","answers"]}},"address":{"type":"object","properties":{"line1":{"type":"string","maxLength":150},"line2":{"type":"string","maxLength":150},"city":{"type":"string","maxLength":100},"region":{"type":"string","maxLength":100},"postal":{"type":"string","maxLength":30},"country":{"type":"string","maxLength":60}},"required":["line1","line2","city","region","postal","country"]},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["revision","responses","requestId"],"additionalProperties":false}},"required":["operation","data"],"additionalProperties":false},{"type":"object","properties":{"operation":{"type":"string","const":"plus-one"},"data":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100},"isChild":{"default":false,"type":"boolean"},"revision":{"type":"integer","minimum":0,"maximum":9007199254740991},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["name","revision","requestId"],"additionalProperties":false}},"required":["operation","data"],"additionalProperties":false},{"type":"object","properties":{"operation":{"type":"string","const":"logout"},"data":{"type":"object","properties":{},"additionalProperties":false}},"required":["operation","data"],"additionalProperties":false}]}}}},"responses":{"200":{"description":"Authorized household result only; private no-store response.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"403":{"description":"Business or account bearer credentials are not accepted"},"404":{"description":"Invitation or current session unavailable"},"408":{"description":"Request body deadline exceeded"},"409":{"description":"Stale revision or different input for a saved request identity"},"413":{"description":"Payload exceeds the documented bound"}}}},"/websites/{slug}/guest-community":{"get":{"summary":"Read permitted messages and independent household upload history; uploads do not grant public website publication","description":"Household browser interface. Business keys and account bearer tokens are rejected. A current HttpOnly website session cookie is required, except for the exchange operation which validates the existing invitation. Mutations require the configured application Origin and reject cross-site requests. Session secrets never appear in JSON. Preserve the opaque Set-Cookie value; the production cookie name is __Host-wb-guest-{websiteId}.","security":[],"x-authentication":{"kind":"website-scoped-cookie","nameTemplate":"__Host-wb-guest-{websiteId}","exchange":false},"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}},{"name":"postsPage","in":"query","schema":{"type":"integer","minimum":1,"maximum":100000,"default":1}},{"name":"uploadsPage","in":"query","schema":{"type":"integer","minimum":1,"maximum":100000,"default":1}},{"name":"pageSize","in":"query","schema":{"type":"integer","minimum":1,"maximum":50,"default":20}}],"responses":{"200":{"description":"Authorized household result only; private no-store response.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"403":{"description":"Business or account bearer credentials are not accepted"},"404":{"description":"Invitation or current session unavailable"},"408":{"description":"Request body deadline exceeded"},"409":{"description":"Stale revision or different input for a saved request identity"},"413":{"description":"Payload exceeds the documented bound"}}},"post":{"summary":"Post to the permitted private Guest Hub or retry/remove one household upload","description":"Household browser interface. Business keys and account bearer tokens are rejected. A current HttpOnly website session cookie is required, except for the exchange operation which validates the existing invitation. Mutations require the configured application Origin and reject cross-site requests. Session secrets never appear in JSON. Preserve the opaque Set-Cookie value; the production cookie name is __Host-wb-guest-{websiteId}.","security":[],"x-authentication":{"kind":"website-scoped-cookie","nameTemplate":"__Host-wb-guest-{websiteId}","exchange":false},"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","oneOf":[{"type":"object","properties":{"operation":{"type":"string","const":"post"},"data":{"type":"object","properties":{"weddingId":{"not":{}},"token":{"not":{}},"householdId":{"not":{}},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"kind":{"type":"string","enum":["ANNOUNCEMENT","MESSAGE","PHOTO","GALLERY_LINK"]},"audience":{"type":"string","enum":["HOST","ALL","EVENT"]},"eventId":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}]},"parentId":{"default":null,"anyOf":[{"type":"string","maxLength":100},{"type":"null"}]},"body":{"type":"string","minLength":1,"maxLength":4000},"displayName":{"type":"string","minLength":1,"maxLength":100},"externalGalleryUrl":{"type":"string","maxLength":2000},"mediaIds":{"default":[],"maxItems":10,"type":"array","items":{"type":"string","minLength":1,"maxLength":100}}},"required":["requestId","kind","audience","eventId","body","displayName"],"additionalProperties":false}},"required":["operation","data"],"additionalProperties":false},{"type":"object","properties":{"operation":{"type":"string","const":"retry-media"},"data":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":100}},"required":["id"],"additionalProperties":false}},"required":["operation","data"],"additionalProperties":false},{"type":"object","properties":{"operation":{"type":"string","const":"remove-media"},"data":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":100}},"required":["id"],"additionalProperties":false}},"required":["operation","data"],"additionalProperties":false}]}}}},"responses":{"200":{"description":"Authorized household result only; private no-store response.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"403":{"description":"Business or account bearer credentials are not accepted"},"404":{"description":"Invitation or current session unavailable"},"408":{"description":"Request body deadline exceeded"},"409":{"description":"Stale revision or different input for a saved request identity"},"413":{"description":"Payload exceeds the documented bound"}}}},"/websites/{slug}/guest-media":{"post":{"summary":"Upload or recover one private original using the same request identity and bytes; current session, host allowance and usage enrollment are checked before storage","description":"Household browser interface. Business keys and account bearer tokens are rejected. A current HttpOnly website session cookie is required, except for the exchange operation which validates the existing invitation. Mutations require the configured application Origin and reject cross-site requests. Session secrets never appear in JSON. Preserve the opaque Set-Cookie value; the production cookie name is __Host-wb-guest-{websiteId}.","security":[],"x-authentication":{"kind":"website-scoped-cookie","nameTemplate":"__Host-wb-guest-{websiteId}","exchange":false},"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Authorized household result only; private no-store response.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"403":{"description":"Business or account bearer credentials are not accepted"},"404":{"description":"Invitation or current session unavailable"},"408":{"description":"Request body deadline exceeded"},"409":{"description":"Stale revision or different input for a saved request identity"},"413":{"description":"Payload exceeds the documented bound"}},"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","additionalProperties":false,"properties":{"requestId":{"type":"string","format":"uuid"},"file":{"type":"string","format":"binary","description":"One original photo or short video up to 8,388,608 bytes. Total body allowance is 8 MiB plus 32 KiB."}},"required":["requestId","file"]}}}}}},"/websites/{slug}/guest-media/{id}":{"get":{"summary":"Stream the exact permitted processed photo/video with authorization before and after reading; originals and signed object URLs are not returned","description":"Household browser interface. Business keys and account bearer tokens are rejected. A current HttpOnly website session cookie is required, except for the exchange operation which validates the existing invitation. Mutations require the configured application Origin and reject cross-site requests. Session secrets never appear in JSON. Preserve the opaque Set-Cookie value; the production cookie name is __Host-wb-guest-{websiteId}.","security":[],"x-authentication":{"kind":"website-scoped-cookie","nameTemplate":"__Host-wb-guest-{websiteId}","exchange":false},"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"Range","in":"header","schema":{"type":"string"}},{"name":"If-Range","in":"header","schema":{"type":"string"}}],"responses":{"200":{"description":"Complete permitted derivative; no-store with ETag, Accept-Ranges and Content-Length.","content":{"image/jpeg":{"schema":{"type":"string","format":"binary"}},"video/mp4":{"schema":{"type":"string","format":"binary"}}}},"206":{"description":"Single verified byte range with Content-Range.","content":{"image/jpeg":{"schema":{"type":"string","format":"binary"}},"video/mp4":{"schema":{"type":"string","format":"binary"}}}},"400":{"description":"Invalid input"},"403":{"description":"Business or account bearer credentials are not accepted"},"404":{"description":"Invitation or current session unavailable"},"408":{"description":"Request body deadline exceeded"},"409":{"description":"Stale revision or different input for a saved request identity"},"413":{"description":"Payload exceeds the documented bound"},"416":{"description":"Unsatisfiable or unsupported byte range."}}},"head":{"summary":"Read permitted processed-media headers without loading the object body","description":"Household browser interface. Business keys and account bearer tokens are rejected. A current HttpOnly website session cookie is required, except for the exchange operation which validates the existing invitation. Mutations require the configured application Origin and reject cross-site requests. Session secrets never appear in JSON. Preserve the opaque Set-Cookie value; the production cookie name is __Host-wb-guest-{websiteId}.","security":[],"x-authentication":{"kind":"website-scoped-cookie","nameTemplate":"__Host-wb-guest-{websiteId}","exchange":false},"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"Range","in":"header","schema":{"type":"string"}},{"name":"If-Range","in":"header","schema":{"type":"string"}}],"responses":{"200":{"description":"Complete permitted derivative; no-store with ETag, Accept-Ranges and Content-Length."},"206":{"description":"Single verified byte range with Content-Range."},"400":{"description":"Invalid input"},"403":{"description":"Business or account bearer credentials are not accepted"},"404":{"description":"Invitation or current session unavailable"},"408":{"description":"Request body deadline exceeded"},"409":{"description":"Stale revision or different input for a saved request identity"},"413":{"description":"Payload exceeds the documented bound"},"416":{"description":"Unsatisfiable or unsupported byte range."}}}},"/projects/{id}/website-audio":{"get":{"summary":"Read original welcome recordings, transcripts and processing state in pages of ten; private storage locations stay hidden","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"page","in":"query","schema":{"type":"integer","minimum":1,"maximum":100000,"default":1}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}},"post":{"summary":"Retry a retained original or remove an unpublished recording using its exact revision; published assets require a replacement publication first","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"audioId":{"type":"string","minLength":1,"maxLength":100},"expectedRevision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"operation":{"type":"string","enum":["RETRY","REMOVE"]}},"required":["audioId","expectedRevision","requestId","operation"],"additionalProperties":false}}}},"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}}},"/projects/{id}/website-audio/upload":{"post":{"summary":"Upload one original MP3 or WAV with a required transcript; retain the same request identity and bytes when recovering a lost response","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"responses":{"200":{"description":"Private original saved or recovered; processing, selection and reviewed publication are separate."},"400":{"description":"Invalid metadata or audio"},"401":{"description":"Named account required"},"403":{"description":"Integration keys rejected"},"404":{"description":"Wedding unavailable"},"408":{"description":"Body read deadline exceeded"},"409":{"description":"Request replay conflict"},"413":{"description":"Body exceeds 20 MB plus 64 KiB multipart allowance"},"415":{"description":"Multipart form required"}},"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","additionalProperties":false,"properties":{"file":{"type":"string","format":"binary","description":"MP3 or WAV, maximum 20,000,000 bytes and verified duration 1–180 seconds."},"requestId":{"type":"string","format":"uuid"},"title":{"type":"string","minLength":1,"maxLength":120},"transcript":{"type":"string","minLength":1,"maxLength":10000}},"required":["file","requestId","title","transcript"]}}}}}},"/projects/{id}/website-audio/{audioId}":{"get":{"summary":"Stream the authorized processed recording with byte ranges and no-store caching; original files are never public","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"audioId","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}}},"/projects/{id}/guest-attachments":{"get":{"summary":"Read private metadata from a verified household reply and independently paginated retention history; reading never downloads from email provider","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"replyId","in":"query","required":true,"schema":{"type":"string","minLength":1}},{"name":"historyPage","in":"query","schema":{"type":"integer","minimum":1,"maximum":100000,"default":1}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}},"post":{"summary":"Review fresh attachment metadata and storage cost, explicitly approve private retention, or retry/remove an exact retained generation; requires guests.communicate","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"oneOf":[{"type":"object","additionalProperties":false,"properties":{"operation":{"const":"review"},"data":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"attachmentId":{"type":"string","minLength":1,"maxLength":200},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["attachmentId","requestId"],"additionalProperties":false}},"required":["operation","data"]},{"type":"object","additionalProperties":false,"properties":{"operation":{"const":"approve"},"data":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"attachmentId":{"type":"string","minLength":1,"maxLength":200},"expectedRevision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"reviewId":{"type":"string","minLength":1,"maxLength":200},"reviewedHash":{"type":"string","pattern":"^[a-f0-9]{64}$"},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"confirmed":{"type":"boolean","const":true}},"required":["attachmentId","expectedRevision","reviewId","reviewedHash","requestId","confirmed"],"additionalProperties":false}},"required":["operation","data"]},{"type":"object","additionalProperties":false,"properties":{"operation":{"const":"control"},"data":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"attachmentId":{"type":"string","minLength":1,"maxLength":200},"retentionId":{"type":"string","minLength":1,"maxLength":200},"expectedRevision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"action":{"type":"string","enum":["RETRY","REMOVE"]},"reason":{"type":"string","minLength":3,"maxLength":500}},"required":["attachmentId","retentionId","expectedRevision","requestId","action","reason"],"additionalProperties":false}},"required":["operation","data"]}]}}}},"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}}},"/projects/{id}/guest-attachments/{retentionId}":{"get":{"summary":"Download an exact retained household reply attachment after current authorization and original-byte integrity checks; no public or signed object URL","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"retentionId","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}}},"/projects/{id}/catering":{"get":{"summary":"Read frozen meal and seating packets, current source freshness, independently paginated handoffs and named recipient grants","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"eventId","in":"query","schema":{"type":"string","minLength":1}},{"name":"page","in":"query","schema":{"type":"integer","minimum":1,"maximum":100000,"default":1}},{"name":"grantsPage","in":"query","schema":{"type":"integer","minimum":1,"maximum":100000,"default":1}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}},"post":{"summary":"Review and issue an immutable catering packet, replace or revoke it, or invite one verified named recipient; no financial or guest-contact access","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"oneOf":[{"type":"object","additionalProperties":false,"properties":{"operation":{"const":"preview"},"data":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"eventId":{"type":"string","minLength":1,"maxLength":100},"layoutVersionId":{"default":null,"anyOf":[{"type":"string","minLength":1,"maxLength":100},{"type":"null"}]}},"required":["eventId"]}},"required":["operation","data"]},{"type":"object","additionalProperties":false,"properties":{"operation":{"const":"issue"},"data":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"eventId":{"type":"string","minLength":1,"maxLength":100},"layoutVersionId":{"default":null,"anyOf":[{"type":"string","minLength":1,"maxLength":100},{"type":"null"}]},"expectedCurrentPacketId":{"anyOf":[{"type":"string","minLength":1,"maxLength":100},{"type":"null"}]},"reviewedSourceHash":{"type":"string","pattern":"^[a-f0-9]{64}$"},"reviewedSnapshotHash":{"type":"string","pattern":"^[a-f0-9]{64}$"},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"approved":{"type":"boolean","const":true}},"required":["eventId","expectedCurrentPacketId","reviewedSourceHash","reviewedSnapshotHash","requestId","approved"]}},"required":["operation","data"]},{"type":"object","additionalProperties":false,"properties":{"operation":{"const":"revokePacket"},"data":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"eventId":{"type":"string","minLength":1,"maxLength":100},"packetId":{"type":"string","minLength":1,"maxLength":100},"reason":{"type":"string","minLength":3,"maxLength":500},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["eventId","packetId","reason","requestId"]}},"required":["operation","data"]},{"type":"object","additionalProperties":false,"properties":{"operation":{"const":"grant"},"data":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"eventId":{"type":"string","minLength":1,"maxLength":100},"packetId":{"type":"string","minLength":1,"maxLength":100},"snapshotHash":{"type":"string","pattern":"^[a-f0-9]{64}$"},"sourceHash":{"type":"string","pattern":"^[a-f0-9]{64}$"},"recipientName":{"type":"string","minLength":1,"maxLength":120},"recipientEmail":{"type":"string","format":"email","pattern":"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"},"token":{"type":"string","pattern":"^[a-f0-9]{64}$"},"expiresAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"approved":{"type":"boolean","const":true}},"required":["eventId","packetId","snapshotHash","sourceHash","recipientName","recipientEmail","token","expiresAt","requestId","approved"]}},"required":["operation","data"]},{"type":"object","additionalProperties":false,"properties":{"operation":{"const":"revokeGrant"},"data":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"eventId":{"type":"string","minLength":1,"maxLength":100},"grantId":{"type":"string","minLength":1,"maxLength":100},"expectedRevision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["eventId","grantId","expectedRevision","requestId"]}},"required":["operation","data"]}]}}}},"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}}},"/catering/{token}":{"get":{"summary":"Read the current unexpired catering handoff for this exact invited verified account","description":"Requires a Clerk account session. This participant route uses account identity without selecting a business workspace. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}},"post":{"summary":"Claim a named catering invitation or acknowledge the exact current immutable packet","description":"Requires a Clerk account session. This participant route uses account identity without selecting a business workspace. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"oneOf":[{"type":"object","additionalProperties":false,"properties":{"operation":{"const":"claim"},"data":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["requestId"]}},"required":["operation","data"]},{"type":"object","additionalProperties":false,"properties":{"operation":{"const":"acknowledge"},"data":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"packetId":{"type":"string","minLength":1,"maxLength":100},"snapshotHash":{"type":"string","pattern":"^[a-f0-9]{64}$"},"sourceHash":{"type":"string","pattern":"^[a-f0-9]{64}$"},"note":{"default":"","type":"string","maxLength":2000},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"approved":{"type":"boolean","const":true}},"required":["packetId","snapshotHash","sourceHash","requestId","approved"]}},"required":["operation","data"]}]}}}},"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}}},"/projects/{id}/event-roster":{"get":{"summary":"Read permitted current event invitations with independently paginated roster changes and retained reply evidence","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"eventId","in":"query","required":true,"schema":{"type":"string","minLength":1}},{"name":"historyPage","in":"query","schema":{"type":"integer","minimum":1,"maximum":10000,"default":1}},{"name":"replyPage","in":"query","schema":{"type":"integer","minimum":1,"maximum":10000,"default":1}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}},"post":{"summary":"Preview and apply exact invitation additions, removals or re-invitations; retains prior replies and existing operational commitments without sending messages","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"oneOf":[{"type":"object","additionalProperties":false,"properties":{"operation":{"const":"preview"},"data":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"eventId":{"type":"string","minLength":1,"maxLength":160},"expectedEventRevision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"expectedInvitations":{"maxItems":3000,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":160},"revision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991}},"required":["id","revision"]}},"guestIds":{"maxItems":3000,"type":"array","items":{"type":"string","minLength":1,"maxLength":160}},"reason":{"type":"string","minLength":3,"maxLength":1000}},"required":["eventId","expectedEventRevision","expectedInvitations","guestIds","reason"]}},"required":["operation","data"]},{"type":"object","additionalProperties":false,"properties":{"operation":{"const":"apply"},"data":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"eventId":{"type":"string","minLength":1,"maxLength":160},"reviewId":{"type":"string","minLength":1,"maxLength":160},"sourceHash":{"type":"string","pattern":"^[a-f0-9]{64}$"},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"approved":{"type":"boolean","const":true}},"required":["eventId","reviewId","sourceHash","requestId","approved"]}},"required":["operation","data"]}]}}}},"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}}},"/projects/{id}/registry":{"get":{"summary":"Read private registry products, import histories and existing received gifts with independent pagination","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"productPage","in":"query","schema":{"type":"integer","minimum":1,"maximum":100000,"default":1}},{"name":"importPage","in":"query","schema":{"type":"integer","minimum":1,"maximum":100000,"default":1}},{"name":"giftPage","in":"query","schema":{"type":"integer","minimum":1,"maximum":100000,"default":1}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}},"post":{"summary":"Review mapped product imports, resume batches of fifty, undo untouched rows, edit products or explicitly link an existing received gift; no retailer purchase or sync","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"oneOf":[{"type":"object","additionalProperties":false,"properties":{"operation":{"const":"preview"},"data":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"sourceName":{"type":"string","minLength":1,"maxLength":160},"filename":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}]},"format":{"type":"string","enum":["CSV","TSV"]},"source":{"type":"string","minLength":1,"maxLength":900000},"mapping":{"type":"object","propertyNames":{"type":"string","enum":["title","description","sourceId","sourceUrl","productUrl","quantity","unitPriceCents","currency"]},"additionalProperties":{"type":"string","minLength":1,"maxLength":200}}},"required":["requestId","sourceName","format","source","mapping"],"additionalProperties":false}},"required":["operation","data"]},{"type":"object","additionalProperties":false,"properties":{"operation":{"const":"command"},"data":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"importId":{"type":"string","minLength":1,"maxLength":150},"expectedRevision":{"type":"integer","minimum":1,"maximum":9007199254740991},"kind":{"type":"string","enum":["APPROVE","CONTINUE","UNDO"]},"reviewHash":{"type":"string","pattern":"^[a-f0-9]{64}$"}},"required":["requestId","importId","expectedRevision","kind"],"additionalProperties":false}},"required":["operation","data"]},{"type":"object","additionalProperties":false,"properties":{"operation":{"const":"edit"},"data":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"productId":{"type":"string","minLength":1,"maxLength":150},"expectedRevision":{"type":"integer","minimum":1,"maximum":9007199254740991},"product":{"type":"object","properties":{"title":{"type":"string","minLength":1,"maxLength":200},"description":{"anyOf":[{"type":"string","maxLength":4000},{"type":"null"}]},"sourceName":{"type":"string","minLength":1,"maxLength":160},"sourceId":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}]},"sourceUrl":{"anyOf":[{"anyOf":[{"type":"string","const":""},{"type":"string","format":"uri"}]},{"type":"null"}]},"productUrl":{"anyOf":[{"anyOf":[{"type":"string","const":""},{"type":"string","format":"uri"}]},{"type":"null"}]},"quantity":{"type":"integer","minimum":1,"maximum":10000},"unitPriceCents":{"anyOf":[{"type":"integer","minimum":0,"maximum":2147483647},{"type":"null"}]},"currency":{"anyOf":[{"type":"string","pattern":"^[A-Za-z]{3}$"},{"type":"null"}]}},"required":["title","description","sourceName","sourceId","sourceUrl","productUrl","quantity","unitPriceCents","currency"],"additionalProperties":false}},"required":["requestId","productId","expectedRevision","product"],"additionalProperties":false}},"required":["operation","data"]},{"type":"object","additionalProperties":false,"properties":{"operation":{"const":"linkGift"},"data":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"productId":{"type":"string","minLength":1,"maxLength":150},"expectedRevision":{"type":"integer","minimum":1,"maximum":9007199254740991},"giftId":{"type":"string","minLength":1,"maxLength":150},"giftRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"giftHash":{"type":"string","pattern":"^[a-f0-9]{64}$"},"quantity":{"type":"integer","minimum":1,"maximum":10000},"confirmed":{"type":"boolean","const":true}},"required":["requestId","productId","expectedRevision","giftId","giftRevision","giftHash","quantity","confirmed"],"additionalProperties":false}},"required":["operation","data"]},{"type":"object","additionalProperties":false,"properties":{"operation":{"const":"unlinkGift"},"data":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"productId":{"type":"string","minLength":1,"maxLength":150},"expectedRevision":{"type":"integer","minimum":1,"maximum":9007199254740991},"linkId":{"type":"string","minLength":1,"maxLength":150}},"required":["requestId","productId","expectedRevision","linkId"],"additionalProperties":false}},"required":["operation","data"]}]}}}},"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}}},"/projects/{id}/registry/products/{productId}":{"get":{"summary":"Read one private product and paginated retained received-gift link history, including explicitly unlinked records","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"productId","in":"path","required":true,"schema":{"type":"string"}},{"name":"page","in":"query","schema":{"type":"integer","minimum":1,"maximum":100000,"default":1}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":50}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}}},"/projects/{id}/registry/{importId}":{"get":{"summary":"Read a private registry import review, immutable row provenance, duplicates, validation and attributable undo outcomes","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"importId","in":"path","required":true,"schema":{"type":"string"}},{"name":"page","in":"query","schema":{"type":"integer","minimum":1,"maximum":100000,"default":1}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":50}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}}},"/projects/{id}/guest-communications":{"get":{"summary":"Read permitted household contacts and independently paginated guest drafts, deliveries and private replies","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"draftPage","in":"query","schema":{"type":"integer","minimum":1,"maximum":100000,"default":1}},{"name":"deliveryPage","in":"query","schema":{"type":"integer","minimum":1,"maximum":100000,"default":1}},{"name":"replyPage","in":"query","schema":{"type":"integer","minimum":1,"maximum":100000,"default":1}},{"name":"smsReplyPage","in":"query","schema":{"type":"integer","minimum":1,"maximum":100000,"default":1}},{"name":"unassignedPage","in":"query","schema":{"type":"integer","minimum":1,"maximum":100000,"default":1}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}},"post":{"summary":"Draft, preview and explicitly approve email or verified operational SMS invitations, announcements and RSVP reminders; exact sender, permission and spending review required","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"oneOf":[{"type":"object","additionalProperties":false,"properties":{"operation":{"const":"previewContactRecovery"},"data":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"householdId":{"type":"string","minLength":1,"maxLength":100},"expectedContactRevision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"verificationNote":{"type":"string","minLength":10,"maxLength":500}},"required":["householdId","expectedContactRevision","verificationNote"],"additionalProperties":false}},"required":["operation","data"]},{"type":"object","additionalProperties":false,"properties":{"operation":{"const":"recoverContact"},"data":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"householdId":{"type":"string","minLength":1,"maxLength":100},"expectedContactRevision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"verificationNote":{"type":"string","minLength":10,"maxLength":500},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"reviewedHash":{"type":"string","pattern":"^[a-f0-9]{64}$"},"confirmed":{"type":"boolean","const":true}},"required":["householdId","expectedContactRevision","verificationNote","requestId","reviewedHash","confirmed"],"additionalProperties":false}},"required":["operation","data"]},{"type":"object","additionalProperties":false,"properties":{"operation":{"const":"save"},"data":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":100},"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"title":{"type":"string","minLength":1,"maxLength":120},"definition":{"anyOf":[{"type":"object","properties":{"channel":{"type":"string","const":"EMAIL"},"purpose":{"type":"string","enum":["INVITATION","REMINDER","ANNOUNCEMENT"]},"eventId":{"anyOf":[{"type":"string","minLength":1,"maxLength":100},{"type":"null"}]},"subject":{"type":"string","minLength":1,"maxLength":180},"body":{"type":"string","minLength":1,"maxLength":6000},"householdIds":{"minItems":1,"maxItems":1000,"type":"array","items":{"type":"string","minLength":1,"maxLength":100}},"scheduledAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}]},"daysBeforeDeadline":{"default":[],"maxItems":4,"type":"array","items":{"type":"integer","minimum":1,"maximum":60}}},"required":["purpose","eventId","subject","body","householdIds","scheduledAt"],"additionalProperties":false},{"type":"object","properties":{"version":{"type":"number","const":2},"channel":{"type":"string","const":"SMS"},"senderBindingId":{"type":"string","minLength":1,"maxLength":100},"purpose":{"type":"string","enum":["INVITATION","REMINDER","ANNOUNCEMENT"]},"eventId":{"anyOf":[{"type":"string","minLength":1,"maxLength":100},{"type":"null"}]},"body":{"type":"string","minLength":1,"maxLength":1500},"householdIds":{"minItems":1,"maxItems":1000,"type":"array","items":{"type":"string","minLength":1,"maxLength":100}},"scheduledAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}]},"daysBeforeDeadline":{"default":[],"maxItems":4,"type":"array","items":{"type":"integer","minimum":1,"maximum":60}}},"required":["version","channel","senderBindingId","purpose","eventId","body","householdIds","scheduledAt"],"additionalProperties":false}]}},"required":["expectedRevision","requestId","title","definition"],"additionalProperties":false}},"required":["operation","data"]},{"type":"object","additionalProperties":false,"properties":{"operation":{"const":"preview"},"data":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"draftId":{"type":"string","minLength":1,"maxLength":100},"expectedRevision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991}},"required":["draftId","expectedRevision"],"additionalProperties":false}},"required":["operation","data"]},{"type":"object","additionalProperties":false,"properties":{"operation":{"const":"approve"},"data":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"reviewId":{"type":"string","minLength":1,"maxLength":100},"reviewedHash":{"type":"string","pattern":"^[a-f0-9]{64}$"},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"confirmed":{"type":"boolean","const":true}},"required":["reviewId","reviewedHash","requestId","confirmed"],"additionalProperties":false}},"required":["operation","data"]},{"type":"object","additionalProperties":false,"properties":{"operation":{"const":"control"},"data":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"draftId":{"type":"string","minLength":1,"maxLength":100},"expectedRevision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"action":{"type":"string","enum":["PAUSE","RESUME","CANCEL"]}},"required":["draftId","expectedRevision","requestId","action"],"additionalProperties":false}},"required":["operation","data"]},{"type":"object","additionalProperties":false,"properties":{"operation":{"const":"contact"},"data":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"householdId":{"type":"string","minLength":1,"maxLength":100},"expectedContactRevision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"email":{"anyOf":[{"type":"string","maxLength":320,"format":"email","pattern":"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"},{"type":"string","const":""}]},"phone":{"default":"","type":"string","maxLength":60}},"required":["householdId","expectedContactRevision","requestId","email"],"additionalProperties":false}},"required":["operation","data"]},{"type":"object","additionalProperties":false,"properties":{"operation":{"const":"retainInvitation"},"data":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"householdId":{"type":"string","minLength":1,"maxLength":100},"expectedAccessGeneration":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"token":{"type":"string","pattern":"^[a-f0-9]{64}$"}},"required":["householdId","expectedAccessGeneration","requestId","token"],"additionalProperties":false}},"required":["operation","data"]},{"type":"object","additionalProperties":false,"properties":{"operation":{"const":"recovery"},"data":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"deliveryId":{"type":"string","minLength":1,"maxLength":100},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"action":{"type":"string","enum":["RETRY","STOP"]},"expectedStatus":{"type":"string","minLength":1,"maxLength":30}},"required":["deliveryId","requestId","action","expectedStatus"],"additionalProperties":false}},"required":["operation","data"]},{"type":"object","additionalProperties":false,"properties":{"operation":{"const":"sms-recovery"},"data":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"deliveryId":{"type":"string","minLength":1,"maxLength":100},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"expectedStatus":{"type":"string","minLength":1,"maxLength":30},"action":{"type":"string","enum":["STOP","RECONCILE"]}},"required":["deliveryId","requestId","expectedStatus","action"],"additionalProperties":false}},"required":["operation","data"]},{"type":"object","additionalProperties":false,"properties":{"operation":{"const":"eventDetails"},"data":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"eventId":{"type":"string","minLength":1,"maxLength":100},"expectedRevision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"label":{"type":"string","minLength":1,"maxLength":120},"startsAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}]},"deadline":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}]},"timezone":{"type":"string","maxLength":80},"location":{"type":"string","maxLength":500},"details":{"type":"string","maxLength":4000},"dressCode":{"type":"string","maxLength":300}},"required":["eventId","expectedRevision","requestId","label","startsAt","deadline","timezone","location","details","dressCode"],"additionalProperties":false}},"required":["operation","data"]}]}}}},"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}}},"/projects/{id}/transport":{"get":{"summary":"Read the current transport manifest and independently paginated manifests, driver grants and passenger activity","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"runId","in":"query","required":true,"schema":{"type":"string","minLength":1}},{"name":"page","in":"query","schema":{"type":"integer","minimum":1,"maximum":10000,"default":1}},{"name":"grantsPage","in":"query","schema":{"type":"integer","minimum":1,"maximum":10000,"default":1}},{"name":"activityPage","in":"query","schema":{"type":"integer","minimum":1,"maximum":10000,"default":1}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}},"post":{"summary":"Review shuttle changes, issue a manifest, transfer one rider transactionally or grant narrowly scoped named driver access","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"oneOf":[{"type":"object","additionalProperties":false,"properties":{"operation":{"const":"save"},"data":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"id":{"default":"","type":"string","maxLength":100},"revision":{"type":"integer","minimum":0,"maximum":9007199254740991},"eventId":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}]},"label":{"type":"string","minLength":1,"maxLength":120},"departureAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"arrivalAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"timezone":{"type":"string"},"fromLocation":{"type":"string","minLength":1,"maxLength":300},"toLocation":{"type":"string","minLength":1,"maxLength":300},"capacity":{"type":"integer","minimum":1,"maximum":1000},"accessibleCapacity":{"type":"integer","minimum":0,"maximum":1000},"driverName":{"default":"","type":"string","maxLength":100},"driverPhone":{"default":"","type":"string","maxLength":60},"guestNotes":{"default":"","type":"string","maxLength":1500},"privateNotes":{"default":"","type":"string","maxLength":2000},"guestVisible":{"type":"boolean"},"cancelled":{"default":false,"type":"boolean"},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"reason":{"type":"string","minLength":3,"maxLength":1000},"approved":{"type":"boolean","const":true}},"required":["revision","eventId","label","departureAt","arrivalAt","timezone","fromLocation","toLocation","capacity","accessibleCapacity","guestVisible","requestId","reason","approved"]}},"required":["operation","data"]},{"type":"object","additionalProperties":false,"properties":{"operation":{"const":"preview"},"data":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"runId":{"type":"string","minLength":1,"maxLength":100}},"required":["runId"],"additionalProperties":false}},"required":["operation","data"]},{"type":"object","additionalProperties":false,"properties":{"operation":{"const":"issue"},"data":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"runId":{"type":"string","minLength":1,"maxLength":100},"expectedRunRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"expectedRosterRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"reviewedSourceHash":{"type":"string","pattern":"^[a-f0-9]{64}$"},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"approved":{"type":"boolean","const":true}},"required":["runId","expectedRunRevision","expectedRosterRevision","reviewedSourceHash","requestId","approved"],"additionalProperties":false}},"required":["operation","data"]},{"type":"object","additionalProperties":false,"properties":{"operation":{"const":"transfer"},"data":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"sourceRunId":{"type":"string","minLength":1,"maxLength":100},"targetRunId":{"type":"string","minLength":1,"maxLength":100},"guestId":{"type":"string","minLength":1,"maxLength":100},"expectedSourceRiderRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"expectedTargetRiderRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"expectedSourceRosterRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"expectedTargetRosterRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"accessibleSeat":{"type":"boolean"},"reason":{"type":"string","minLength":3,"maxLength":1000},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"approved":{"type":"boolean","const":true}},"required":["sourceRunId","targetRunId","guestId","expectedSourceRiderRevision","expectedTargetRiderRevision","expectedSourceRosterRevision","expectedTargetRosterRevision","accessibleSeat","reason","requestId","approved"],"additionalProperties":false}},"required":["operation","data"]},{"type":"object","additionalProperties":false,"properties":{"operation":{"const":"grant"},"data":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"runId":{"type":"string","minLength":1,"maxLength":100},"manifestId":{"type":"string","minLength":1,"maxLength":100},"expectedSourceHash":{"type":"string","pattern":"^[a-f0-9]{64}$"},"recipientName":{"type":"string","minLength":2,"maxLength":120},"recipientEmail":{"type":"string","format":"email","pattern":"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"},"scopes":{"minItems":1,"maxItems":3,"type":"array","items":{"type":"string","enum":["manifest.read","manifest.ack","riders.board"]}},"expiresAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"token":{"type":"string","pattern":"^[a-f0-9]{64}$"},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"approved":{"type":"boolean","const":true}},"required":["runId","manifestId","expectedSourceHash","recipientName","recipientEmail","scopes","expiresAt","token","requestId","approved"],"additionalProperties":false}},"required":["operation","data"]},{"type":"object","additionalProperties":false,"properties":{"operation":{"const":"revoke"},"data":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"runId":{"type":"string","minLength":1,"maxLength":100},"grantId":{"type":"string","minLength":1,"maxLength":100},"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"reason":{"type":"string","minLength":3,"maxLength":1000},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["runId","grantId","expectedRevision","reason","requestId"],"additionalProperties":false}},"required":["operation","data"]},{"type":"object","additionalProperties":false,"properties":{"operation":{"const":"state"},"data":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"runId":{"type":"string","minLength":1,"maxLength":100},"manifestId":{"type":"string","minLength":1,"maxLength":100},"expectedState":{"type":"string","enum":["PLANNING","BOARDING","DEPARTED","ARRIVED","CANCELLED"]},"state":{"type":"string","enum":["BOARDING","DEPARTED","ARRIVED"]},"sourceHash":{"type":"string","pattern":"^[a-f0-9]{64}$"},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"approved":{"type":"boolean","const":true}},"required":["runId","manifestId","expectedState","state","sourceHash","requestId","approved"],"additionalProperties":false}},"required":["operation","data"]},{"type":"object","additionalProperties":false,"properties":{"operation":{"const":"boarding"},"data":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"riderId":{"type":"string","minLength":1,"maxLength":100},"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"status":{"type":"string","enum":["CHECKED_IN","BOARDED","RESERVED"]},"manifestId":{"type":"string","minLength":1,"maxLength":100},"sourceHash":{"type":"string","pattern":"^[a-f0-9]{64}$"},"reason":{"type":"string","minLength":3,"maxLength":1000},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"runId":{"type":"string","minLength":1,"maxLength":100}},"required":["riderId","expectedRevision","status","manifestId","sourceHash","reason","requestId","runId"],"additionalProperties":false}},"required":["operation","data"]}]}}}},"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}}},"/transport/{token}":{"get":{"summary":"Read this named driver account’s unexpired, current reviewed transport handoff; no workspace membership required","description":"Requires a Clerk account session. This participant route uses account identity without selecting a business workspace. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}},"post":{"summary":"Claim the exact invited verified email, acknowledge one manifest revision or record permitted boarding; no business API keys","description":"Requires a Clerk account session. This participant route uses account identity without selecting a business workspace. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"oneOf":[{"type":"object","additionalProperties":false,"properties":{"operation":{"const":"claim"},"data":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["requestId"],"additionalProperties":false}},"required":["operation","data"]},{"type":"object","additionalProperties":false,"properties":{"operation":{"const":"acknowledge"},"data":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"manifestId":{"type":"string","minLength":1,"maxLength":100},"snapshotHash":{"type":"string","pattern":"^[a-f0-9]{64}$"},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"approved":{"type":"boolean","const":true}},"required":["manifestId","snapshotHash","requestId","approved"],"additionalProperties":false}},"required":["operation","data"]},{"type":"object","additionalProperties":false,"properties":{"operation":{"const":"boarding"},"data":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"riderId":{"type":"string","minLength":1,"maxLength":100},"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"status":{"type":"string","enum":["CHECKED_IN","BOARDED","RESERVED"]},"manifestId":{"type":"string","minLength":1,"maxLength":100},"sourceHash":{"type":"string","pattern":"^[a-f0-9]{64}$"},"reason":{"type":"string","minLength":3,"maxLength":1000},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["riderId","expectedRevision","status","manifestId","sourceHash","reason","requestId"],"additionalProperties":false}},"required":["operation","data"]}]}}}},"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}}},"/projects/{id}/website-guests":{"get":{"summary":"Read owner/admin invitation entry settings and paginated session history without session secrets or invitation credentials","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"page","in":"query","schema":{"type":"integer","minimum":1,"maximum":10000,"default":1}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}},"post":{"summary":"Enable or change invitation entry with a current revision, or revoke one exact household session; existing invitation URLs remain valid","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"oneOf":[{"type":"object","additionalProperties":false,"properties":{"operation":{"const":"settings"},"data":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"enabled":{"type":"boolean"},"allowUploads":{"type":"boolean"},"sessionMinutes":{"type":"integer","minimum":15,"maximum":720}},"required":["expectedRevision","requestId","enabled","allowUploads","sessionMinutes"],"additionalProperties":false}},"required":["operation","data"]},{"type":"object","additionalProperties":false,"properties":{"operation":{"const":"revoke"},"data":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"sessionId":{"type":"string","minLength":1,"maxLength":160},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["sessionId","requestId"],"additionalProperties":false}},"required":["operation","data"]}]}}}},"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}}},"/projects/{id}/website":{"get":{"summary":"Read private website drafts and independently paginated publication, claim and domain connection histories","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"versionPage","in":"query","schema":{"type":"integer","minimum":1,"maximum":100000,"default":1}},{"name":"claimPage","in":"query","schema":{"type":"integer","minimum":1,"maximum":100000,"default":1}},{"name":"bindingPage","in":"query","schema":{"type":"integer","minimum":1,"maximum":100000,"default":1}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":50,"default":10}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}},"post":{"summary":"Save an original website draft, review and publish its exact hash, restore, explicitly change access or request a domain ownership challenge","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"oneOf":[{"type":"object","additionalProperties":false,"properties":{"operation":{"const":"review"},"data":{"type":"object","additionalProperties":false,"properties":{},"required":[]}},"required":["operation","data"]},{"type":"object","additionalProperties":false,"properties":{"operation":{"const":"save"},"data":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"revision":{"type":"integer","minimum":0,"maximum":9007199254740991},"slug":{"type":"string","minLength":4,"maxLength":80,"pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$"},"content":{"type":"object","properties":{"schemaVersion":{"default":2,"type":"number","const":2},"title":{"type":"string","minLength":1,"maxLength":150},"subtitle":{"type":"string","maxLength":300},"dateLabel":{"type":"string","maxLength":100},"locationLabel":{"type":"string","maxLength":200},"theme":{"type":"string","enum":["GARDEN","EDITORIAL","MIDNIGHT"]},"accent":{"type":"string","pattern":"^#[a-fA-F0-9]{6}$"},"fontPair":{"default":"ROMANTIC","type":"string","enum":["ROMANTIC","MODERN","TYPEWRITER"]},"texture":{"default":"NONE","type":"string","enum":["NONE","PAPER","DOTS"]},"dateStyle":{"default":"SIMPLE","type":"string","enum":["SIMPLE","LETTERSPACED","BADGE"]},"heroLayout":{"default":"CENTERED","type":"string","enum":["CENTERED","SPLIT","FULL_BLEED"]},"hero":{"default":null,"anyOf":[{"type":"object","properties":{"assetId":{"type":"string","minLength":1,"maxLength":160},"alt":{"type":"string","minLength":1,"maxLength":300},"focalX":{"default":50,"type":"number","minimum":0,"maximum":100},"focalY":{"default":50,"type":"number","minimum":0,"maximum":100}},"required":["assetId","alt"]},{"type":"null"}]},"indexable":{"default":false,"type":"boolean"},"welcomeAudio":{"type":"object","properties":{"audioId":{"type":"string","minLength":1,"maxLength":100},"title":{"type":"string","minLength":1,"maxLength":120},"transcript":{"type":"string","minLength":1,"maxLength":10000}},"required":["audioId","title","transcript"],"additionalProperties":false},"sections":{"maxItems":30,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-z0-9-]{1,80}$"},"kind":{"type":"string","enum":["story","schedule","travel","registry","faq","party","gallery","rsvp"]},"title":{"type":"string","minLength":1,"maxLength":100},"body":{"type":"string","maxLength":6000},"link":{"default":"","anyOf":[{"type":"string","const":""},{"type":"string","format":"uri"}]},"image":{"default":"","anyOf":[{"type":"string","const":""},{"type":"string","format":"uri"}]},"visible":{"default":true,"type":"boolean"},"photo":{"default":null,"anyOf":[{"type":"object","properties":{"assetId":{"type":"string","minLength":1,"maxLength":160},"alt":{"type":"string","minLength":1,"maxLength":300},"focalX":{"default":50,"type":"number","minimum":0,"maximum":100},"focalY":{"default":50,"type":"number","minimum":0,"maximum":100}},"required":["assetId","alt"]},{"type":"null"}]},"cards":{"default":[],"maxItems":40,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":100},"title":{"type":"string","maxLength":160},"detail":{"default":"","type":"string","maxLength":2000},"label":{"default":"","type":"string","maxLength":100},"link":{"default":"","anyOf":[{"type":"string","const":""},{"type":"string","format":"uri"}]},"image":{"default":null,"anyOf":[{"type":"object","properties":{"assetId":{"type":"string","minLength":1,"maxLength":160},"alt":{"type":"string","minLength":1,"maxLength":300},"focalX":{"default":50,"type":"number","minimum":0,"maximum":100},"focalY":{"default":50,"type":"number","minimum":0,"maximum":100}},"required":["assetId","alt"]},{"type":"null"}]}},"required":["id","title"]}}},"required":["id","kind","title","body"]}}},"required":["title","subtitle","dateLabel","locationLabel","theme","accent","sections"]}},"required":["requestId","revision","slug","content"],"additionalProperties":false}},"required":["operation","data"]},{"type":"object","additionalProperties":false,"properties":{"operation":{"const":"publish"},"data":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"expectedRevision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"reviewHash":{"type":"string","pattern":"^[a-f0-9]{64}$"}},"required":["expectedRevision","requestId","reviewHash"],"additionalProperties":false}},"required":["operation","data"]},{"type":"object","additionalProperties":false,"properties":{"operation":{"const":"restore"},"data":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"sourceRevision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["sourceRevision","expectedRevision","requestId"],"additionalProperties":false}},"required":["operation","data"]},{"type":"object","additionalProperties":false,"properties":{"operation":{"const":"unpublish"},"data":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["expectedRevision","requestId"],"additionalProperties":false}},"required":["operation","data"]},{"type":"object","additionalProperties":false,"properties":{"operation":{"const":"access"},"data":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"expectedAccessRevision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"password":{"type":"string","minLength":8,"maxLength":128},"removePassword":{"default":false,"type":"boolean"}},"required":["requestId","expectedAccessRevision"]}},"required":["operation","data"]},{"type":"object","additionalProperties":false,"properties":{"operation":{"const":"requestDomain"},"data":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"hostname":{"type":"string","minLength":3,"maxLength":253}},"required":["requestId","hostname"]}},"required":["operation","data"]}]}}}},"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}}},"/websites/domains":{"post":{"summary":"Verify a current ownership challenge or explicitly activate, suspend, remove or retry a workspace domain connection; live activation remains gated","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"id":{"type":"string","minLength":1},"revision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"kind":{"type":"string","enum":["VERIFY","ACTIVATE","SUSPEND","REMOVE","RETRY"]}},"required":["requestId","id","revision","kind"]}}}},"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}}},"/operations/guest-attention":{"get":{"summary":"Read owner-only independently paginated guest delivery issues and domain connection follow-up; no message bodies, recipient addresses or credential material","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"guestAttentionPage","in":"query","schema":{"type":"integer","minimum":1,"maximum":100000,"default":1}},{"name":"domainAttentionPage","in":"query","schema":{"type":"integer","minimum":1,"maximum":100000,"default":1}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}}},"/resources/inventory":{"get":{"summary":"Read cursor-paginated private inventory, serviceable stock and actual custody; wedding choices are bounded to 100","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}},{"name":"after","in":"query","schema":{"type":"string","maxLength":100}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}},"post":{"summary":"Record reviewed stock, exact-unit reservations, partial returns, recovery or a separately previewed substitution; appointment allocation changes use scheduling","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"oneOf":[{"type":"object","additionalProperties":false,"properties":{"operation":{"const":"mutate"},"data":{"$schema":"https://json-schema.org/draft/2020-12/schema","anyOf":[{"type":"object","properties":{"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"reason":{"type":"string","minLength":3,"maxLength":1000},"kind":{"type":"string","const":"CREATE"},"name":{"type":"string","minLength":2,"maxLength":120},"category":{"type":"string","minLength":1,"maxLength":60},"resourceKind":{"default":"INVENTORY","type":"string","enum":["INVENTORY","EQUIPMENT","ROOM"]},"owner":{"default":"STUDIO","type":"string","enum":["STUDIO","RENTAL","COUPLE"]},"quantity":{"type":"integer","minimum":1,"maximum":100000},"trackingMode":{"default":"BULK","type":"string","enum":["BULK","SERIALIZED"]},"units":{"default":[],"maxItems":500,"type":"array","items":{"type":"object","properties":{"serial":{"type":"string","minLength":1,"maxLength":100},"label":{"default":"","type":"string","maxLength":100},"location":{"default":"","type":"string","maxLength":200}},"required":["serial"]}},"replacementCostCents":{"default":0,"type":"integer","minimum":0,"maximum":100000000},"notes":{"default":"","type":"string","maxLength":3000}},"required":["requestId","reason","kind","name","category","quantity"]},{"type":"object","properties":{"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"reason":{"type":"string","minLength":3,"maxLength":1000},"kind":{"type":"string","const":"RESERVE"},"itemId":{"type":"string","minLength":1,"maxLength":200},"weddingId":{"type":"string","minLength":1,"maxLength":200},"quantity":{"type":"integer","minimum":1,"maximum":100000},"startsAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"endsAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"unitIds":{"default":[],"maxItems":500,"type":"array","items":{"type":"string","minLength":1,"maxLength":200}},"destination":{"default":"","type":"string","maxLength":500}},"required":["requestId","reason","kind","itemId","weddingId","quantity","startsAt","endsAt"]},{"type":"object","properties":{"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"reason":{"type":"string","minLength":3,"maxLength":1000},"kind":{"type":"string","const":"TRANSITION"},"reservationId":{"type":"string","minLength":1,"maxLength":200},"expectedRevision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"status":{"type":"string","enum":["PACKED","OUT","RESERVED","CANCELLED"]}},"required":["requestId","reason","kind","reservationId","expectedRevision","status"]},{"type":"object","properties":{"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"reason":{"type":"string","minLength":3,"maxLength":1000},"kind":{"type":"string","const":"RETURN"},"reservationId":{"type":"string","minLength":1,"maxLength":200},"expectedRevision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"intact":{"default":0,"type":"integer","minimum":0,"maximum":100000},"damaged":{"default":0,"type":"integer","minimum":0,"maximum":100000},"lost":{"default":0,"type":"integer","minimum":0,"maximum":100000},"unclassified":{"default":0,"type":"integer","minimum":0,"maximum":100000},"units":{"default":[],"maxItems":500,"type":"array","items":{"type":"object","properties":{"unitId":{"type":"string","minLength":1,"maxLength":200},"condition":{"type":"string","enum":["INTACT","DAMAGED","LOST","UNCLASSIFIED"]}},"required":["unitId","condition"]}}},"required":["requestId","reason","kind","reservationId","expectedRevision"]},{"type":"object","properties":{"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"reason":{"type":"string","minLength":3,"maxLength":1000},"kind":{"type":"string","const":"STOCK"},"itemId":{"type":"string","minLength":1,"maxLength":200},"expectedRevision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"operation":{"type":"string","enum":["RESTOCK","REPAIR","FOUND_INTACT","FOUND_DAMAGED","CLASSIFY_INTACT","CLASSIFY_DAMAGED","CLASSIFY_LOST","RETIRE"]},"quantity":{"type":"integer","minimum":1,"maximum":100000},"sourceMovementId":{"type":"string","minLength":1,"maxLength":200},"units":{"default":[],"maxItems":500,"type":"array","items":{"type":"object","properties":{"serial":{"type":"string","minLength":1,"maxLength":100},"label":{"default":"","type":"string","maxLength":100},"location":{"default":"","type":"string","maxLength":200}},"required":["serial"]}}},"required":["requestId","reason","kind","itemId","expectedRevision","operation","quantity"]},{"type":"object","properties":{"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"reason":{"type":"string","minLength":3,"maxLength":1000},"kind":{"type":"string","const":"SERIALIZE"},"itemId":{"type":"string","minLength":1,"maxLength":200},"expectedRevision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"units":{"minItems":1,"maxItems":500,"type":"array","items":{"type":"object","properties":{"serial":{"type":"string","minLength":1,"maxLength":100},"label":{"default":"","type":"string","maxLength":100},"location":{"default":"","type":"string","maxLength":200}},"required":["serial"]}}},"required":["requestId","reason","kind","itemId","expectedRevision","units"]}]}},"required":["operation","data"]},{"type":"object","additionalProperties":false,"properties":{"operation":{"const":"previewSubstitution"},"data":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"reservationId":{"type":"string","minLength":1,"maxLength":200},"expectedRevision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"alternateItemId":{"type":"string","minLength":1,"maxLength":200},"quantity":{"type":"integer","minimum":1,"maximum":100000},"unitIds":{"default":[],"maxItems":500,"type":"array","items":{"type":"string","minLength":1,"maxLength":200}},"reason":{"type":"string","minLength":3,"maxLength":1000}},"required":["reservationId","expectedRevision","alternateItemId","quantity","reason"]}},"required":["operation","data"]},{"type":"object","additionalProperties":false,"properties":{"operation":{"const":"substitute"},"data":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"reviewId":{"type":"string","minLength":1,"maxLength":200},"reviewedHash":{"type":"string","minLength":64,"maxLength":64},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"confirmed":{"type":"boolean","const":true}},"required":["reviewId","reviewedHash","requestId","confirmed"]}},"required":["operation","data"]}]}}}},"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}}},"/resources/inventory/{id}":{"get":{"summary":"Read exact serialized units and independently cursor-paginated reservation/movement history; private to this business","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":50}},{"name":"reservationsAfter","in":"query","schema":{"type":"string","maxLength":500},"description":"Opaque same-item history cursor. Before and after are mutually exclusive for each collection."},{"name":"reservationsBefore","in":"query","schema":{"type":"string","maxLength":500},"description":"Opaque same-item history cursor. Before and after are mutually exclusive for each collection."},{"name":"movementsAfter","in":"query","schema":{"type":"string","maxLength":500},"description":"Opaque same-item history cursor. Before and after are mutually exclusive for each collection."},{"name":"movementsBefore","in":"query","schema":{"type":"string","maxLength":500},"description":"Opaque same-item history cursor. Before and after are mutually exclusive for each collection."},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}}},"/resources/crew":{"get":{"summary":"Read the cursor-paginated private crew directory","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}},{"name":"after","in":"query","schema":{"type":"string","maxLength":100}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object","required":["data","nextCursor"],"properties":{"data":{"type":"array","items":{"type":"object"}},"nextCursor":{"type":["string","null"]}}}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}},"post":{"summary":"Review crew hours, document requirements, exact uploaded versions and operational reminder preferences; no payroll or legal validation","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"oneOf":[{"type":"object","additionalProperties":false,"properties":{"operation":{"const":"previewAvailability"},"data":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"personId":{"type":"string","minLength":1,"maxLength":100},"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"policy":{"type":"object","properties":{"mode":{"type":"string","enum":["UNRECORDED","RESTRICTED"]},"timezone":{"type":"string","minLength":1,"maxLength":100},"startsOn":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"endsOn":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"weekly":{"maxItems":28,"type":"array","items":{"type":"object","properties":{"start":{"type":"string","pattern":"^(?:[01]\\d|2[0-3]):[0-5]\\d$"},"end":{"type":"string","pattern":"^(?:[01]\\d|2[0-3]):[0-5]\\d$"},"endsNextDay":{"default":false,"type":"boolean"},"weekday":{"type":"integer","minimum":0,"maximum":6}},"required":["start","end","weekday"],"additionalProperties":false}},"exceptions":{"maxItems":200,"type":"array","items":{"type":"object","properties":{"date":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"windows":{"maxItems":8,"type":"array","items":{"type":"object","properties":{"start":{"type":"string","pattern":"^(?:[01]\\d|2[0-3]):[0-5]\\d$"},"end":{"type":"string","pattern":"^(?:[01]\\d|2[0-3]):[0-5]\\d$"},"endsNextDay":{"default":false,"type":"boolean"}},"required":["start","end"],"additionalProperties":false}}},"required":["date","windows"],"additionalProperties":false}}},"required":["mode","timezone","startsOn","endsOn","weekly","exceptions"],"additionalProperties":false},"reason":{"type":"string","minLength":3,"maxLength":1000}},"required":["personId","expectedRevision","requestId","policy","reason"],"additionalProperties":false}},"required":["operation","data"]},{"type":"object","additionalProperties":false,"properties":{"operation":{"const":"availability"},"data":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"personId":{"type":"string","minLength":1,"maxLength":100},"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"policy":{"type":"object","properties":{"mode":{"type":"string","enum":["UNRECORDED","RESTRICTED"]},"timezone":{"type":"string","minLength":1,"maxLength":100},"startsOn":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"endsOn":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"weekly":{"maxItems":28,"type":"array","items":{"type":"object","properties":{"start":{"type":"string","pattern":"^(?:[01]\\d|2[0-3]):[0-5]\\d$"},"end":{"type":"string","pattern":"^(?:[01]\\d|2[0-3]):[0-5]\\d$"},"endsNextDay":{"default":false,"type":"boolean"},"weekday":{"type":"integer","minimum":0,"maximum":6}},"required":["start","end","weekday"],"additionalProperties":false}},"exceptions":{"maxItems":200,"type":"array","items":{"type":"object","properties":{"date":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"windows":{"maxItems":8,"type":"array","items":{"type":"object","properties":{"start":{"type":"string","pattern":"^(?:[01]\\d|2[0-3]):[0-5]\\d$"},"end":{"type":"string","pattern":"^(?:[01]\\d|2[0-3]):[0-5]\\d$"},"endsNextDay":{"default":false,"type":"boolean"}},"required":["start","end"],"additionalProperties":false}}},"required":["date","windows"],"additionalProperties":false}}},"required":["mode","timezone","startsOn","endsOn","weekly","exceptions"],"additionalProperties":false},"reason":{"type":"string","minLength":3,"maxLength":1000},"approved":{"type":"boolean","const":true}},"required":["personId","expectedRevision","requestId","policy","reason","approved"],"additionalProperties":false}},"required":["operation","data"]},{"type":"object","additionalProperties":false,"properties":{"operation":{"const":"documentType"},"data":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":100},"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"type":"string","minLength":2,"maxLength":100},"roles":{"maxItems":15,"type":"array","items":{"type":"string","minLength":1,"maxLength":60}},"required":{"type":"boolean"},"expiryRequired":{"type":"boolean"},"remindersEnabled":{"type":"boolean"},"reminderDays":{"minItems":1,"maxItems":5,"type":"array","items":{"type":"integer","minimum":0,"maximum":180}},"reminderTime":{"type":"string","pattern":"^(?:[01]\\d|2[0-3]):[0-5]\\d$"},"timezone":{"type":"string","minLength":1,"maxLength":100},"archived":{"default":false,"type":"boolean"},"approved":{"type":"boolean","const":true}},"required":["expectedRevision","requestId","name","roles","required","expiryRequired","remindersEnabled","reminderDays","reminderTime","timezone","approved"],"additionalProperties":false}},"required":["operation","data"]},{"type":"object","additionalProperties":false,"properties":{"operation":{"const":"documentReview"},"data":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"personId":{"type":"string","minLength":1,"maxLength":100},"documentId":{"type":"string","minLength":1,"maxLength":100},"versionId":{"type":"string","minLength":1,"maxLength":100},"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"sourceHash":{"type":"string","pattern":"^[a-f0-9]{64}$"},"policyHash":{"type":"string","pattern":"^[a-f0-9]{64}$"},"decision":{"type":"string","enum":["ACCEPTED","CHANGES_REQUESTED","WITHDRAWN"]},"reason":{"type":"string","minLength":3,"maxLength":1000},"approved":{"type":"boolean","const":true}},"required":["personId","documentId","versionId","expectedRevision","requestId","sourceHash","policyHash","decision","reason","approved"],"additionalProperties":false}},"required":["operation","data"]},{"type":"object","additionalProperties":false,"properties":{"operation":{"const":"noticePreferences"},"data":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"personId":{"type":"string","minLength":1,"maxLength":100},"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"enabled":{"type":"boolean"},"expectedEmail":{"anyOf":[{"type":"string","format":"email","pattern":"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"},{"type":"null"}]},"approved":{"type":"boolean","const":true}},"required":["personId","expectedRevision","requestId","enabled","expectedEmail","approved"],"additionalProperties":false}},"required":["operation","data"]},{"type":"object","additionalProperties":false,"properties":{"operation":{"const":"previewNotice"},"data":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string","minLength":1}},"required":["id"]}},"required":["operation","data"]},{"type":"object","additionalProperties":false,"properties":{"operation":{"const":"noticeReview"},"data":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string","minLength":1},"requestId":{"type":"string","format":"uuid"},"reviewedHash":{"type":"string","pattern":"^[a-f0-9]{64}$"},"approved":{"const":true}},"required":["id","requestId","reviewedHash","approved"]}},"required":["operation","data"]}]}}}},"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}}},"/agreements/{id}/delivery":{"get":{"summary":"Read the named signer reminder policy and provider delivery history","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}},"post":{"summary":"Approve scheduled signature reminders/completed PDF copies or retain an existing verified signing link","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"oneOf":[{"type":"object","additionalProperties":false,"properties":{"operation":{"const":"policy"},"data":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"enabled":{"type":"boolean"},"reminderDays":{"maxItems":6,"type":"array","items":{"type":"integer","minimum":0,"maximum":90}},"completedCopies":{"type":"boolean"},"approved":{"type":"boolean","const":true}},"required":["requestId","expectedRevision","enabled","reminderDays","completedCopies","approved"],"additionalProperties":false}},"required":["operation","data"]},{"type":"object","additionalProperties":false,"properties":{"operation":{"const":"link"},"data":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"recipientId":{"type":"string","minLength":1,"maxLength":200},"token":{"type":"string","pattern":"^[a-f0-9]{64}$"},"expectedGeneration":{"type":"integer","minimum":0,"maximum":9007199254740991},"approved":{"type":"boolean","const":true}},"required":["recipientId","token","expectedGeneration","approved"],"additionalProperties":false}},"required":["operation","data"]}]}}}},"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}}},"/resources/crew/season":{"get":{"summary":"Read complete bounded crew season totals and optional CSV; recorded pay is operational, not payroll","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"startsOn","in":"query","required":true,"schema":{"type":"string"}},{"name":"endsOn","in":"query","required":true,"schema":{"type":"string"}},{"name":"personId","in":"query","required":false,"schema":{"type":"string"}},{"name":"weddingId","in":"query","required":false,"schema":{"type":"string"}},{"name":"format","in":"query","schema":{"type":"string","enum":["json","csv"]}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}}},"/resources/crew/{id}/program":{"get":{"summary":"Read private crew enrollment, frozen terms, readiness and reminder policy","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}},"post":{"summary":"Issue or revoke a private crew workspace, review enrollment, configure opt-in reminders, or publish/sign/void frozen crew terms","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","oneOf":[{"type":"object","properties":{"kind":{"type":"string","const":"policy"},"personId":{"type":"string","minLength":1,"maxLength":100},"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"policy":{"type":"object","properties":{"enabled":{"type":"boolean"},"email":{"anyOf":[{"type":"string","format":"email","pattern":"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"},{"type":"null"}]},"consentRecorded":{"type":"boolean"},"offerHours":{"type":"integer","minimum":1,"maximum":168},"beforeShiftHours":{"type":"integer","minimum":1,"maximum":168},"readinessHours":{"type":"integer","minimum":1,"maximum":24},"changes":{"type":"boolean"},"morningTime":{"default":null,"anyOf":[{"type":"string","pattern":"^(?:[01]\\d|2[0-3]):[0-5]\\d$"},{"type":"null"}]}},"required":["enabled","email","consentRecorded","offerHours","beforeShiftHours","readinessHours","changes"],"additionalProperties":false},"approved":{"type":"boolean","const":true}},"required":["kind","personId","expectedRevision","requestId","policy","approved"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"invite"},"personId":{"type":"string","minLength":1,"maxLength":100},"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"token":{"type":"string","pattern":"^[a-f0-9]{64}$"},"expiresAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["kind","personId","expectedRevision","requestId","token","expiresAt"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"revoke"},"personId":{"type":"string","minLength":1,"maxLength":100},"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["kind","personId","expectedRevision","requestId"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"map-enrollment"},"personId":{"type":"string","minLength":1,"maxLength":100},"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"expectedPersonRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"fields":{"minItems":1,"maxItems":4,"type":"array","items":{"type":"string","enum":["name","email","phone","roles"]}},"answerHash":{"type":"string","minLength":64,"maxLength":64},"approved":{"type":"boolean","const":true}},"required":["kind","personId","expectedRevision","expectedPersonRevision","requestId","fields","answerHash","approved"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"agreement"},"personId":{"type":"string","minLength":1,"maxLength":100},"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"title":{"type":"string","minLength":3,"maxLength":160},"body":{"type":"string","minLength":20,"maxLength":50000},"scope":{"type":"string","enum":["SEASON","EVENT"]},"startsOn":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"endsOn":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"weddingId":{"anyOf":[{"type":"string","minLength":1,"maxLength":100},{"type":"null"}]},"approved":{"type":"boolean","const":true}},"required":["kind","personId","expectedRevision","requestId","title","body","scope","startsOn","endsOn","weddingId","approved"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"void-agreement"},"personId":{"type":"string","minLength":1,"maxLength":100},"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"agreementId":{"type":"string","minLength":1,"maxLength":100},"reason":{"type":"string","minLength":3,"maxLength":1000}},"required":["kind","personId","expectedRevision","requestId","agreementId","reason"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"counter-sign"},"personId":{"type":"string","minLength":1,"maxLength":100},"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"agreementId":{"type":"string","minLength":1,"maxLength":100},"documentHash":{"type":"string","minLength":64,"maxLength":64},"name":{"type":"string","minLength":2,"maxLength":100},"mark":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","const":"TYPED"},"text":{"type":"string","minLength":2,"maxLength":120}},"required":["mode","text"],"additionalProperties":false},{"type":"object","properties":{"mode":{"type":"string","const":"DRAWN"},"strokes":{"minItems":1,"maxItems":40,"type":"array","items":{"minItems":1,"maxItems":1500,"type":"array","items":{"type":"object","properties":{"x":{"type":"number","minimum":0,"maximum":1},"y":{"type":"number","minimum":0,"maximum":1}},"required":["x","y"],"additionalProperties":false}}}},"required":["mode","strokes"],"additionalProperties":false},{"type":"object","properties":{"mode":{"type":"string","const":"INITIALS"},"text":{"type":"string","minLength":1,"maxLength":12}},"required":["mode","text"],"additionalProperties":false}]},"consent":{"type":"boolean","const":true}},"required":["kind","personId","expectedRevision","requestId","agreementId","documentHash","name","consent"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"post-expense"},"shiftId":{"type":"string","minLength":1,"maxLength":100},"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"expectedMinutes":{"type":"integer","minimum":0,"maximum":9007199254740991},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"approved":{"type":"boolean","const":true}},"required":["kind","shiftId","expectedRevision","expectedMinutes","requestId","approved"],"additionalProperties":false}]}}}},"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}}},"/resources/crew/{id}":{"get":{"summary":"Read private crew availability, document review history, delivery issues and affected appointments; each history is independently paginated","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"versionsPage","in":"query","schema":{"type":"integer","minimum":1,"maximum":10000,"default":1}},{"name":"reviewsPage","in":"query","schema":{"type":"integer","minimum":1,"maximum":10000,"default":1}},{"name":"noticesPage","in":"query","schema":{"type":"integer","minimum":1,"maximum":10000,"default":1}},{"name":"appointmentsPage","in":"query","schema":{"type":"integer","minimum":1,"maximum":10000,"default":1}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}}},"/resources/crew/{id}/documents":{"post":{"summary":"Upload or recover one original private crew document using a stable request identity; 8 MB file limit","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"responses":{"200":{"description":"Private version created or original upload recovered; never auto-accepted."},"400":{"description":"Invalid metadata, content or file integrity"},"401":{"description":"Named account session required"},"403":{"description":"Integration keys are not accepted"},"404":{"description":"Crew or type unavailable in this workspace"},"409":{"description":"Revision or replay conflict"},"413":{"description":"Multipart body exceeds 8 MB plus 32 KB envelope allowance"}},"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","additionalProperties":false,"properties":{"metadata":{"type":"string","description":"UTF-8 JSON matching the metadata schema; personId comes from the path.","contentMediaType":"application/json","contentSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"typeId":{"type":"string","minLength":1,"maxLength":100},"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"filename":{"type":"string","minLength":1,"maxLength":160},"contentType":{"type":"string","enum":["application/pdf","image/jpeg","image/png","image/webp"]},"bytes":{"type":"integer","minimum":1,"maximum":8388608},"checksum":{"type":"string","pattern":"^[A-Za-z0-9+/]{43}=$"},"validThrough":{"anyOf":[{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},{"type":"null"}]},"timezone":{"type":"string","minLength":1,"maxLength":100}},"required":["typeId","expectedRevision","requestId","filename","contentType","bytes","checksum","validThrough","timezone"],"additionalProperties":false}},"file":{"type":"string","format":"binary","description":"Exactly one PDF, JPEG, PNG or WebP matching metadata filename, content type, byte count and checksum; max 8,388,608 bytes."}},"required":["metadata","file"]}}}}}},"/resources/crew/documents/{versionId}":{"get":{"summary":"Authorize a short-lived download for one exact private crew document version","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"versionId","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"url":{"type":"string","format":"uri"}},"required":["url"]}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}}},"/vendor":{"get":{"summary":"Read the current vendor business summary, bounded work lists and original specialty setup status","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}}},"/vendor/setup":{"get":{"summary":"Read six original specialty manifests and retained installation provenance; removed or customized drafts stay distinct","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}},"post":{"summary":"Review and install selected private drafts, or update vendor specialties; owner/admin only, no automatic publishing or sending","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"oneOf":[{"type":"object","additionalProperties":false,"properties":{"operation":{"const":"preview"},"data":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"presetKey":{"type":"string","enum":["VENUE","FLORIST","CATERER","DJ","RENTAL","OTHER"]},"sourceVersion":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"selectedKeys":{"minItems":1,"maxItems":20,"type":"array","items":{"type":"string","pattern":"^[a-z][a-z0-9_-]{0,59}$"}},"expectedProfileRevision":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["presetKey","sourceVersion","selectedKeys","expectedProfileRevision"],"additionalProperties":false}},"required":["operation","data"]},{"type":"object","additionalProperties":false,"properties":{"operation":{"const":"install"},"data":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"presetKey":{"type":"string","enum":["VENUE","FLORIST","CATERER","DJ","RENTAL","OTHER"]},"sourceVersion":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"selectedKeys":{"minItems":1,"maxItems":20,"type":"array","items":{"type":"string","pattern":"^[a-z][a-z0-9_-]{0,59}$"}},"expectedProfileRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"reviewedHash":{"type":"string","pattern":"^[a-f0-9]{64}$"},"confirmed":{"type":"boolean","const":true}},"required":["presetKey","sourceVersion","selectedKeys","expectedProfileRevision","requestId","reviewedHash","confirmed"],"additionalProperties":false}},"required":["operation","data"]},{"type":"object","additionalProperties":false,"properties":{"operation":{"const":"profile"},"data":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"specialties":{"maxItems":6,"type":"array","items":{"type":"string","enum":["VENUE","FLORIST","CATERER","DJ","RENTAL","OTHER"]}},"primarySpecialty":{"anyOf":[{"type":"string","enum":["VENUE","FLORIST","CATERER","DJ","RENTAL","OTHER"]},{"type":"null"}]},"skip":{"default":false,"type":"boolean"}},"required":["requestId","expectedRevision","specialties","primarySpecialty"],"additionalProperties":false}},"required":["operation","data"]}]}}}},"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}}},"/booking-journeys":{"get":{"summary":"Read private booking experiences and cursor-paginated client runs; source choices are bounded to 100","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"after","in":"query","schema":{"type":"string","minLength":1}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":50,"default":20}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}},"post":{"summary":"Save or review an experience, publish pinned versions or explicitly enroll a named client; creating a link sends no message","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"oneOf":[{"type":"object","additionalProperties":false,"properties":{"operation":{"const":"saveTemplate"},"data":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":200},"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"definition":{"type":"object","properties":{"schemaVersion":{"type":"number","const":1},"title":{"type":"string","minLength":2,"maxLength":160},"introduction":{"default":"","type":"string","maxLength":4000},"formVersionId":{"type":"string","minLength":1,"maxLength":200},"offerVersionId":{"type":"string","minLength":1,"maxLength":200},"signing":{"type":"object","properties":{"clientSignerCount":{"type":"integer","minimum":1,"maximum":8},"initialsClause":{"default":"","type":"string","maxLength":2000},"countersignerIdentityId":{"default":null,"anyOf":[{"type":"string","minLength":1,"maxLength":200},{"type":"null"}]}},"additionalProperties":false},"depositPolicy":{"type":"string","enum":["SETTLED_PRINCIPAL","SIGNATURES_ONLY"]},"onboarding":{"type":"object","properties":{"workflow":{"type":"object","properties":{"workflowId":{"type":"string","minLength":1,"maxLength":200},"revision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991}},"required":["workflowId","revision"],"additionalProperties":false},"title":{"type":"string","minLength":2,"maxLength":160},"message":{"type":"string","maxLength":6000},"tasks":{"minItems":1,"maxItems":20,"type":"array","items":{"type":"object","properties":{"key":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,60}$"},"title":{"type":"string","minLength":2,"maxLength":200},"daysAfterBooking":{"type":"integer","minimum":0,"maximum":366}},"required":["key","title","daysAfterBooking"],"additionalProperties":false}}},"required":["title","message","tasks"],"additionalProperties":false}},"required":["schemaVersion","title","formVersionId","offerVersionId","signing","depositPolicy","onboarding"],"additionalProperties":false}},"required":["expectedRevision","requestId","definition"],"additionalProperties":false}},"required":["operation","data"]},{"type":"object","additionalProperties":false,"properties":{"operation":{"const":"previewPublication"},"data":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"templateId":{"type":"string","minLength":1,"maxLength":200},"expectedRevision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991}},"required":["templateId","expectedRevision"],"additionalProperties":false}},"required":["operation","data"]},{"type":"object","additionalProperties":false,"properties":{"operation":{"const":"publishTemplate"},"data":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"templateId":{"type":"string","minLength":1,"maxLength":200},"expectedRevision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"reviewedHash":{"type":"string","pattern":"^[a-f0-9]{64}$"},"confirmed":{"type":"boolean","const":true}},"required":["templateId","expectedRevision","requestId","reviewedHash","confirmed"],"additionalProperties":false}},"required":["operation","data"]},{"type":"object","additionalProperties":false,"properties":{"operation":{"const":"previewEnrollment"},"data":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"versionId":{"type":"string","minLength":1,"maxLength":200},"leadId":{"type":"string","minLength":1,"maxLength":200},"weddingId":{"type":"string","minLength":1,"maxLength":200},"sourceId":{"type":"string","minLength":1,"maxLength":200},"workflowContactId":{"anyOf":[{"type":"string","minLength":1,"maxLength":200},{"type":"null"}]},"recipientName":{"type":"string","minLength":2,"maxLength":120},"recipientEmail":{"type":"string","maxLength":254,"format":"email","pattern":"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"},"additionalSigners":{"maxItems":7,"type":"array","items":{"type":"object","properties":{"name":{"type":"string","minLength":2,"maxLength":120},"email":{"type":"string","maxLength":254,"format":"email","pattern":"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"}},"required":["name","email"],"additionalProperties":false}},"expiresAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["versionId","leadId","weddingId","recipientName","recipientEmail","expiresAt"],"additionalProperties":false}},"required":["operation","data"]},{"type":"object","additionalProperties":false,"properties":{"operation":{"const":"enroll"},"data":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"versionId":{"type":"string","minLength":1,"maxLength":200},"leadId":{"type":"string","minLength":1,"maxLength":200},"weddingId":{"type":"string","minLength":1,"maxLength":200},"sourceId":{"type":"string","minLength":1,"maxLength":200},"workflowContactId":{"anyOf":[{"type":"string","minLength":1,"maxLength":200},{"type":"null"}]},"recipientName":{"type":"string","minLength":2,"maxLength":120},"recipientEmail":{"type":"string","maxLength":254,"format":"email","pattern":"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"},"additionalSigners":{"maxItems":7,"type":"array","items":{"type":"object","properties":{"name":{"type":"string","minLength":2,"maxLength":120},"email":{"type":"string","maxLength":254,"format":"email","pattern":"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"}},"required":["name","email"],"additionalProperties":false}},"expiresAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"token":{"type":"string","pattern":"^[a-f0-9]{64}$"},"reviewedHash":{"type":"string","pattern":"^[a-f0-9]{64}$"},"confirmed":{"type":"boolean","const":true}},"required":["versionId","leadId","weddingId","recipientName","recipientEmail","expiresAt","requestId","token","reviewedHash","confirmed"],"additionalProperties":false}},"required":["operation","data"]}]}}}},"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}}},"/booking-journeys/{id}":{"get":{"summary":"Read exact booking steps, retained evidence and recovery history in the current workspace","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}},"post":{"summary":"Review a pause, resume, recovery, link replacement or closure; existing signed and financial records remain retained","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"expectedRevision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"action":{"type":"string","enum":["PAUSE","RESUME","CANCEL","RETRY","ROTATE","RECONCILE"]},"reason":{"type":"string","minLength":3,"maxLength":1000},"token":{"type":"string","pattern":"^[a-f0-9]{64}$"}},"required":["expectedRevision","requestId","action","reason"],"additionalProperties":false}}}},"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}}},"/shared-conversations":{"get":{"summary":"List only named shared conversation grants; workspace keys are rejected","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}},{"name":"after","in":"query","schema":{"type":"string","maxLength":100}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object","required":["data","nextCursor"],"properties":{"data":{"type":"array","items":{"type":"object"}},"nextCursor":{"type":["string","null"]}}}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}},"post":{"summary":"Create a conversation for a current shared wedding participation","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"sharedWeddingId":{"type":"string","minLength":1,"maxLength":100},"title":{"type":"string","minLength":1,"maxLength":120},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["sharedWeddingId","title","requestId"],"additionalProperties":false}}}},"responses":{"201":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}}},"/shared-conversations/{id}":{"get":{"summary":"Read permitted message history and only the current business private sidecar","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"afterSequence","in":"query","schema":{"type":"integer","minimum":0}},{"name":"beforeCommentSequence","in":"query","schema":{"type":"integer","minimum":1}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}},"post":{"summary":"Review or approve one immutable message, add a private comment, assign your business inbox or advance your personal cursor","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"oneOf":[{"type":"object","additionalProperties":false,"properties":{"operation":{"const":"reviewMessage"},"data":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"threadId":{"type":"string","minLength":1,"maxLength":100},"participantId":{"type":"string","minLength":1,"maxLength":100},"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"bodyDocument":{"type":"object","properties":{"version":{"type":"number","const":1},"blocks":{"minItems":1,"maxItems":60,"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","enum":["paragraph","bullet","numbered"]},"runs":{"minItems":1,"maxItems":40,"type":"array","items":{"type":"object","properties":{"text":{"type":"string","maxLength":5000},"bold":{"default":false,"type":"boolean"},"italic":{"default":false,"type":"boolean"},"href":{"type":"string","maxLength":2000}},"required":["text"],"additionalProperties":false}}},"required":["kind","runs"],"additionalProperties":false}}},"required":["version","blocks"],"additionalProperties":false},"audio":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":100},"revision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991}},"required":["id","revision"],"additionalProperties":false},"templateId":{"type":"string","minLength":1,"maxLength":100},"templateRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"signatureId":{"type":"string","minLength":1,"maxLength":100},"signatureRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"attachmentIds":{"default":[],"maxItems":10,"type":"array","items":{"type":"string","minLength":1,"maxLength":100}},"notifyParticipantIds":{"default":[],"maxItems":50,"type":"array","items":{"type":"string","minLength":1,"maxLength":100}},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["threadId","participantId","expectedRevision","bodyDocument","requestId"],"additionalProperties":false}},"required":["operation","data"]},{"type":"object","additionalProperties":false,"properties":{"operation":{"const":"postMessage"},"data":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"reviewId":{"type":"string","minLength":1,"maxLength":100},"reviewedHash":{"type":"string","pattern":"^[a-f0-9]{64}$"},"approved":{"type":"boolean","const":true},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["reviewId","reviewedHash","approved","requestId"],"additionalProperties":false}},"required":["operation","data"]},{"type":"object","additionalProperties":false,"properties":{"operation":{"const":"comment"},"data":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"threadId":{"type":"string","minLength":1,"maxLength":100},"expectedWorkspaceRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"bodyDocument":{"type":"object","properties":{"version":{"type":"number","const":1},"blocks":{"minItems":1,"maxItems":60,"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","enum":["paragraph","bullet","numbered"]},"runs":{"minItems":1,"maxItems":40,"type":"array","items":{"type":"object","properties":{"text":{"type":"string","maxLength":5000},"bold":{"default":false,"type":"boolean"},"italic":{"default":false,"type":"boolean"},"href":{"type":"string","maxLength":2000}},"required":["text"],"additionalProperties":false}}},"required":["kind","runs"],"additionalProperties":false}}},"required":["version","blocks"],"additionalProperties":false},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["threadId","expectedWorkspaceRevision","bodyDocument","requestId"],"additionalProperties":false}},"required":["operation","data"]},{"type":"object","additionalProperties":false,"properties":{"operation":{"const":"assign"},"data":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"threadId":{"type":"string","minLength":1,"maxLength":100},"expectedWorkspaceRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"assignedMembershipId":{"anyOf":[{"type":"string","minLength":1,"maxLength":100},{"type":"null"}]},"inboxStatus":{"type":"string","enum":["OPEN","PENDING","CLOSED"]},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["threadId","expectedWorkspaceRevision","assignedMembershipId","inboxStatus","requestId"],"additionalProperties":false}},"required":["operation","data"]},{"type":"object","additionalProperties":false,"properties":{"operation":{"const":"markRead"},"data":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"threadId":{"type":"string","minLength":1,"maxLength":100},"participantId":{"type":"string","minLength":1,"maxLength":100},"generation":{"type":"integer","minimum":0,"maximum":9007199254740991},"throughSequence":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["threadId","participantId","generation","throughSequence"],"additionalProperties":false}},"required":["operation","data"]}]}}}},"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}}},"/finance/forecast":{"get":{"summary":"Read current obligations and explicit cash assumptions from one consistent snapshot; amounts remain separate by currency","description":"Requires finance:read for an API key, or a full workspace membership for a Clerk session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"finance:read","parameters":[{"name":"scenarioId","in":"query","schema":{"type":"string","minLength":1}},{"name":"offset","in":"query","schema":{"type":"integer","minimum":0,"maximum":1000000,"default":0}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":50}},{"name":"ifRevision","in":"query","schema":{"type":"string","pattern":"^[a-f0-9]{64}$"},"description":"Use data.reportRevision from the first page. A changed source snapshot returns 409; restart pagination."},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object","description":"data includes reportRevision, saved assumptions, per-currency weekly forecast/aging and this page of source rows; pagination includes total and nextOffset."}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}},"post":{"summary":"Save or archive reviewed forecast assumptions, edit a source assumption or record an expense due date; never charges or sends","description":"Requires finance:write for an API key, or a full workspace membership for a Clerk session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"finance:write","parameters":[{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"oneOf":[{"type":"object","additionalProperties":false,"properties":{"operation":{"const":"save"},"approved":{"const":true},"data":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":100},"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"type":"string","minLength":2,"maxLength":100},"definition":{"type":"object","properties":{"startDate":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"weeks":{"type":"integer","minimum":1,"maximum":26},"collectionDelayDays":{"type":"integer","minimum":0,"maximum":180},"overdueCollectionDate":{"anyOf":[{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},{"type":"string","const":""}]},"undatedCollectionDate":{"anyOf":[{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},{"type":"string","const":""}]},"overdueExpenseDate":{"anyOf":[{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},{"type":"string","const":""}]},"undatedExpenseDate":{"anyOf":[{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},{"type":"string","const":""}]},"openingBalances":{"maxItems":20,"type":"array","items":{"type":"object","properties":{"currency":{"type":"string","pattern":"^[a-zA-Z]{3}$"},"amountCents":{"type":"integer","minimum":-999999999999,"maximum":999999999999}},"required":["currency","amountCents"]}},"overrides":{"maxItems":500,"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","enum":["INVOICE","EXPENSE"]},"id":{"type":"string","minLength":1,"maxLength":100},"expectedDate":{"anyOf":[{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},{"type":"string","const":""}]},"exclude":{"type":"boolean"}},"required":["kind","id","expectedDate","exclude"]}}},"required":["startDate","weeks","collectionDelayDays","overdueCollectionDate","undatedCollectionDate","overdueExpenseDate","undatedExpenseDate","openingBalances","overrides"]}},"required":["expectedRevision","requestId","name","definition"]}},"required":["operation","approved","data"]},{"type":"object","additionalProperties":false,"properties":{"operation":{"const":"archive"},"approved":{"const":true},"data":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":100},"expectedRevision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"archived":{"type":"boolean"}},"required":["id","expectedRevision","requestId","archived"]}},"required":["operation","approved","data"]},{"type":"object","additionalProperties":false,"properties":{"operation":{"const":"expenseDueDate"},"approved":{"const":true},"data":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":100},"expectedUpdatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"dueDate":{"anyOf":[{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},{"type":"string","const":""}]},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["id","expectedUpdatedAt","dueDate","requestId"]}},"required":["operation","approved","data"]},{"type":"object","additionalProperties":false,"properties":{"operation":{"const":"sourceAssumption"},"approved":{"const":true},"data":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":100},"expectedRevision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"kind":{"type":"string","enum":["INVOICE","EXPENSE"]},"sourceId":{"type":"string","minLength":1,"maxLength":100},"expectedDate":{"anyOf":[{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},{"type":"string","const":""}]},"exclude":{"type":"boolean"},"reset":{"type":"boolean"}},"required":["id","expectedRevision","requestId","kind","sourceId","expectedDate","exclude","reset"]}},"required":["operation","approved","data"]}]}}}},"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}}},"/assistant":{"get":{"summary":"List authorized assistant runs, or read a run with id; includes current metered quote","description":"Requires assistant:read for an API key, or a full workspace membership for a Clerk session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"assistant:read","parameters":[{"name":"id","in":"query","schema":{"type":"string","minLength":1}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}},"post":{"summary":"Prepare a sourced answer and editable proposals without applying changes","description":"Requires assistant:write for an API key, or a full workspace membership for a Clerk session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"assistant:write","parameters":[{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"kind":{"type":"string","enum":["ANSWER","PLAN","MEETING","PACKAGES","FORM","RECEIPT","WRITING","TIMELINE","SCENARIO","INVOICE","SEATING","BUSINESS_BRIEF","DUPLICATES"]},"prompt":{"type":"string","minLength":3,"maxLength":12000},"weddingId":{"type":"string","minLength":1,"maxLength":100},"leadId":{"type":"string","minLength":1,"maxLength":100},"sources":{"default":[],"maxItems":20,"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["WEDDING","CLIENT","LEAD","TASK","COORDINATION","PHOTOGRAPHY","GUESTS","CONVERSATION","FORM","EXPENSE","PACKAGE","SEATING","GIFT","PERSONAL_NOTE","BUSINESS_HEALTH","DUPLICATE_CLIENTS"]},"id":{"type":"string","minLength":1,"maxLength":201}},"required":["type","id"],"additionalProperties":false}},"sourceText":{"default":"","type":"string","maxLength":30000},"sourceUrl":{"default":"","anyOf":[{"type":"string","maxLength":2000,"format":"uri"},{"type":"string","const":""}]},"image":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":160},"mediaType":{"type":"string","enum":["image/jpeg","image/png","image/webp"]},"base64":{"type":"string","maxLength":140000,"pattern":"^[A-Za-z0-9+/]+={0,2}$"}},"required":["name","mediaType","base64"],"additionalProperties":false},"document":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":160},"mediaType":{"type":"string","const":"application/pdf"},"base64":{"type":"string","maxLength":685000,"pattern":"^[A-Za-z0-9+/]+={0,2}$"}},"required":["name","mediaType","base64"],"additionalProperties":false},"continueFromId":{"type":"string","minLength":1,"maxLength":100},"approvedCostCents":{"type":"integer","minimum":0,"maximum":10000}},"required":["requestId","kind","prompt","sources","sourceText","sourceUrl","approvedCostCents"],"additionalProperties":false}}}},"responses":{"201":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}}},"/assistant/sources":{"get":{"summary":"Search only records permitted by both assistant and domain read scopes","description":"Requires assistant:read for an API key, or a full workspace membership for a Clerk session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"assistant:read","parameters":[{"name":"type","in":"query","schema":{"enum":["WEDDING","CLIENT","LEAD","TASK","FORM","EXPENSE","PACKAGE","PERSONAL_NOTE"]}},{"name":"q","in":"query","schema":{"type":"string","maxLength":100}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}}},"/assistant/proposals":{"post":{"summary":"Revise, dismiss or explicitly apply an exact reviewed proposal; domain write scopes also required","description":"Requires assistant:write for an API key, or a full workspace membership for a Clerk session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"assistant:write","parameters":[{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"oneOf":[{"type":"object","additionalProperties":false,"properties":{"operation":{"const":"apply"},"data":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":100},"expectedRevision":{"type":"integer","minimum":1,"maximum":9007199254740991},"reviewedHash":{"type":"string","pattern":"^[a-f0-9]{64}$"},"approved":{"type":"boolean","const":true},"sendEmail":{"default":false,"type":"boolean"}},"required":["id","expectedRevision","reviewedHash","approved","sendEmail"],"additionalProperties":false}},"required":["operation","data"]},{"type":"object","additionalProperties":false,"properties":{"operation":{"const":"revise"},"data":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":100},"expectedRevision":{"type":"integer","minimum":1,"maximum":9007199254740991},"payload":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","const":"SAVE_GIFT_THANK_YOU"},"weddingId":{"type":"string","minLength":1,"maxLength":100},"giftId":{"type":"string","minLength":1,"maxLength":100},"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"draft":{"type":"string","minLength":1,"maxLength":5000}},"required":["kind","weddingId","giftId","expectedRevision","draft"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"CREATE_TASK"},"weddingId":{"type":"string","minLength":1,"maxLength":100},"title":{"type":"string","minLength":1,"maxLength":180},"notes":{"type":"string","maxLength":4000},"dueDate":{"anyOf":[{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},{"type":"null"}]}},"required":["kind","weddingId","title","notes","dueDate"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"UPDATE_TASK"},"taskId":{"type":"string","minLength":1,"maxLength":100},"title":{"type":"string","minLength":1,"maxLength":180},"notes":{"type":"string","maxLength":4000},"dueDate":{"anyOf":[{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},{"type":"null"}]},"done":{"type":"boolean"}},"required":["kind","taskId","title","notes","dueDate","done"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"APPEND_NOTE"},"recordType":{"type":"string","enum":["CLIENT","LEAD","WEDDING"]},"recordId":{"type":"string","minLength":1,"maxLength":100},"note":{"type":"string","minLength":1,"maxLength":12000}},"required":["kind","recordType","recordId","note"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"SET_LEAD_STAGE"},"leadId":{"type":"string","minLength":1,"maxLength":100},"stage":{"type":"string","enum":["NEW","CONTACTED","MEETING","PROPOSAL","WON","LOST"]}},"required":["kind","leadId","stage"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"EMAIL_DRAFT"},"leadId":{"type":"string","minLength":1,"maxLength":100},"subject":{"type":"string","minLength":1,"maxLength":200},"body":{"type":"string","minLength":1,"maxLength":12000},"expectedRecipient":{"type":"string","format":"email","pattern":"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"}},"required":["kind","leadId","subject","body","expectedRecipient"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"CREATE_PACKAGE"},"package":{"type":"object","properties":{"name":{"type":"string","minLength":2,"maxLength":160},"description":{"type":"string","maxLength":3000},"currency":{"type":"string","const":"usd"},"amountCents":{"anyOf":[{"type":"integer","minimum":0,"maximum":99999999},{"type":"null"}]},"inclusions":{"maxItems":50,"type":"array","items":{"type":"string","minLength":1,"maxLength":500}},"exclusions":{"maxItems":30,"type":"array","items":{"type":"string","minLength":1,"maxLength":500}}},"required":["name","description","currency","amountCents","inclusions","exclusions"],"additionalProperties":false}},"required":["kind","package"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"CREATE_FORM"},"name":{"type":"string","minLength":2,"maxLength":100},"definition":{"anyOf":[{"type":"object","properties":{"projectTypeId":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}]},"purpose":{"type":"string","enum":["INQUIRY","QUESTIONNAIRE"]},"title":{"type":"string","minLength":2,"maxLength":160},"intro":{"default":"","type":"string","maxLength":2000},"submitLabel":{"default":"Send your answers","type":"string","minLength":1,"maxLength":50},"successMessage":{"default":"Thank you. Your answers are safely with the team.","type":"string","minLength":1,"maxLength":500},"fields":{"maxItems":40,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z][a-zA-Z0-9_]{0,39}$"},"label":{"type":"string","minLength":1,"maxLength":100},"type":{"type":"string","enum":["TEXT","TEXTAREA","EMAIL","PHONE","NUMBER","DATE","SELECT","MULTISELECT","CHECKBOX"]},"required":{"default":false,"type":"boolean"},"options":{"default":[],"maxItems":30,"type":"array","items":{"type":"string","minLength":1,"maxLength":100}},"mapTo":{"default":"custom","type":"string","enum":["custom","coupleNames","email","phone","eventDate","message"]},"showWhen":{"default":null,"anyOf":[{"type":"object","properties":{"fieldId":{"type":"string","pattern":"^[a-zA-Z][a-zA-Z0-9_]{0,39}$"},"equals":{"type":"string","maxLength":200}},"required":["fieldId","equals"],"additionalProperties":false},{"type":"null"}]}},"required":["id","label","type","required","options","mapTo","showWhen"],"additionalProperties":false}},"schemaVersion":{"not":{}}},"required":["purpose","title","intro","submitLabel","successMessage","fields"],"additionalProperties":false},{"type":"object","properties":{"projectTypeId":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}]},"purpose":{"type":"string","enum":["INQUIRY","QUESTIONNAIRE"]},"title":{"type":"string","minLength":2,"maxLength":160},"intro":{"default":"","type":"string","maxLength":2000},"submitLabel":{"default":"Send your answers","type":"string","minLength":1,"maxLength":50},"successMessage":{"default":"Thank you. Your answers are safely with the team.","type":"string","minLength":1,"maxLength":500},"fields":{"maxItems":40,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z][a-zA-Z0-9_]{0,39}$"},"label":{"type":"string","minLength":1,"maxLength":100},"type":{"type":"string","enum":["TEXT","TEXTAREA","EMAIL","PHONE","NUMBER","DATE","SELECT","MULTISELECT","CHECKBOX"]},"required":{"default":false,"type":"boolean"},"options":{"default":[],"maxItems":30,"type":"array","items":{"type":"string","minLength":1,"maxLength":100}},"mapTo":{"default":"custom","type":"string","enum":["custom","coupleNames","email","phone","eventDate","message"]},"showWhen":{"default":null,"anyOf":[{"type":"object","properties":{"fieldId":{"type":"string","pattern":"^[a-zA-Z][a-zA-Z0-9_]{0,39}$"},"equals":{"type":"string","maxLength":200}},"required":["fieldId","equals"],"additionalProperties":false},{"type":"null"}]}},"required":["id","label","type","required","options","mapTo","showWhen"],"additionalProperties":false}},"schemaVersion":{"type":"number","const":2},"sections":{"minItems":1,"maxItems":12,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z][a-zA-Z0-9_]{0,39}$"},"title":{"type":"string","minLength":1,"maxLength":100},"description":{"default":"","type":"string","maxLength":1000},"fieldIds":{"maxItems":40,"type":"array","items":{"type":"string","pattern":"^[a-zA-Z][a-zA-Z0-9_]{0,39}$"}}},"required":["id","title","description","fieldIds"],"additionalProperties":false}}},"required":["purpose","title","intro","submitLabel","successMessage","fields","schemaVersion","sections"],"additionalProperties":false}]}},"required":["kind","name","definition"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"CREATE_EXPENSE"},"weddingId":{"anyOf":[{"type":"string","minLength":1,"maxLength":100},{"type":"null"}]},"title":{"type":"string","minLength":2,"maxLength":160},"category":{"type":"string","minLength":1,"maxLength":100},"amountCents":{"type":"integer","minimum":1,"maximum":99999999},"taxCents":{"type":"integer","minimum":0,"maximum":99999999},"currency":{"type":"string","const":"usd"},"incurredAt":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"paidAt":{"anyOf":[{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},{"type":"null"}]},"notes":{"type":"string","maxLength":5000}},"required":["kind","weddingId","title","category","amountCents","taxCents","currency","incurredAt","paidAt","notes"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"CREATE_BUDGET_ITEM"},"weddingId":{"type":"string","minLength":1,"maxLength":100},"title":{"type":"string","minLength":1,"maxLength":180},"category":{"type":"string","minLength":1,"maxLength":100},"estimateCents":{"type":"integer","minimum":0,"maximum":99999999},"notes":{"type":"string","maxLength":2000}},"required":["kind","weddingId","title","category","estimateCents","notes"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"IMPORT_TIMELINE"},"weddingId":{"type":"string","minLength":1,"maxLength":100},"timezone":{"type":"string","minLength":1,"maxLength":80},"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"moments":{"minItems":1,"maxItems":100,"type":"array","items":{"type":"object","properties":{"title":{"type":"string","minLength":1,"maxLength":180},"date":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"time":{"type":"string","pattern":"^([01]\\d|2[0-3]):[0-5]\\d$"},"durationMin":{"type":"integer","minimum":0,"maximum":1440},"bufferMin":{"type":"integer","minimum":0,"maximum":240},"fixed":{"type":"boolean"},"dependsOn":{"maxItems":50,"type":"array","items":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"}},"roles":{"maxItems":30,"type":"array","items":{"type":"string","minLength":1,"maxLength":60}},"resources":{"maxItems":30,"type":"array","items":{"type":"string","minLength":1,"maxLength":80}},"location":{"type":"string","maxLength":180},"critical":{"type":"boolean"},"section":{"type":"string","maxLength":80},"checklist":{"maxItems":30,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},"label":{"type":"string","minLength":1,"maxLength":180},"done":{"type":"boolean"}},"required":["id","label","done"],"additionalProperties":false}},"key":{"type":"string","minLength":1,"maxLength":100}},"required":["title","date","time","durationMin","bufferMin","fixed","dependsOn","roles","resources","location","critical","key"],"additionalProperties":false}}},"required":["kind","weddingId","timezone","expectedRevision","moments"],"additionalProperties":false},{"type":"object","properties":{"weddingId":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},"expectedRevision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"label":{"type":"string","minLength":1,"maxLength":100},"changes":{"minItems":1,"maxItems":100,"type":"array","items":{"type":"object","properties":{"itemId":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},"date":{"anyOf":[{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},{"type":"null"}]},"time":{"anyOf":[{"type":"string","pattern":"^([01]\\d|2[0-3]):[0-5]\\d$"},{"type":"null"}]},"durationMin":{"anyOf":[{"type":"integer","minimum":0,"maximum":1440},{"type":"null"}]},"bufferMin":{"anyOf":[{"type":"integer","minimum":0,"maximum":240},{"type":"null"}]},"location":{"anyOf":[{"type":"string","maxLength":180},{"type":"null"}]},"reviewedLocation":{"anyOf":[{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},"revision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"name":{"type":"string","minLength":1,"maxLength":180}},"required":["id","revision","name"],"additionalProperties":false},{"type":"null"}]}},"required":["itemId","date","time","durationMin","bufferMin","location","reviewedLocation"],"additionalProperties":false}},"kind":{"type":"string","const":"SAVE_TIMELINE_SCENARIO"}},"required":["weddingId","expectedRevision","label","changes","kind"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"CREATE_INVOICE_DRAFT"},"weddingId":{"type":"string","minLength":1,"maxLength":100},"title":{"type":"string","minLength":1,"maxLength":160},"currency":{"type":"string","const":"usd"},"lineItems":{"minItems":1,"maxItems":50,"type":"array","items":{"type":"object","properties":{"description":{"type":"string","minLength":1,"maxLength":500},"amountCents":{"type":"integer","minimum":0,"maximum":99999999},"tax":{"type":"object","properties":{"label":{"type":"string","minLength":1,"maxLength":100},"basisPoints":{"type":"integer","minimum":0,"maximum":3000},"netCents":{"type":"integer","minimum":0,"maximum":99999999},"includedCents":{"type":"integer","minimum":0,"maximum":99999999}},"required":["label","netCents","includedCents"],"additionalProperties":false}},"required":["description","amountCents"],"additionalProperties":false}},"dueDate":{"anyOf":[{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},{"type":"null"}]},"notes":{"type":"string","maxLength":5000}},"required":["kind","weddingId","title","currency","lineItems","dueDate","notes"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"CHANGE_SEATING"},"weddingId":{"type":"string","minLength":1,"maxLength":100},"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"moves":{"minItems":1,"maxItems":100,"type":"array","items":{"type":"object","properties":{"guestId":{"type":"string","minLength":1,"maxLength":100},"guestName":{"type":"string","minLength":1,"maxLength":200},"expectedTableId":{"anyOf":[{"type":"string","minLength":1,"maxLength":100},{"type":"null"}]},"tableId":{"anyOf":[{"type":"string","minLength":1,"maxLength":100},{"type":"null"}]},"tableLabel":{"type":"string","maxLength":120}},"required":["guestId","guestName","expectedTableId","tableId","tableLabel"],"additionalProperties":false}}},"required":["kind","weddingId","expectedRevision","moves"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"SAVE_MEETING_RECAP"},"weddingId":{"type":"string","minLength":1,"maxLength":100},"recap":{"type":"object","properties":{"title":{"type":"string","minLength":1,"maxLength":180},"summary":{"type":"string","minLength":1,"maxLength":6000},"decisions":{"maxItems":30,"type":"array","items":{"type":"string","minLength":1,"maxLength":1000}},"preferences":{"maxItems":30,"type":"array","items":{"type":"object","properties":{"preference":{"type":"string","minLength":1,"maxLength":1000},"sourceId":{"type":"string","minLength":1,"maxLength":220},"quote":{"type":"string","minLength":1,"maxLength":2000}},"required":["preference","sourceId","quote"],"additionalProperties":false}},"nextSteps":{"maxItems":30,"type":"array","items":{"type":"string","minLength":1,"maxLength":1000}}},"required":["title","summary","decisions","preferences","nextSteps"],"additionalProperties":false}},"required":["kind","weddingId","recap"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"SAVE_WRITING_PREFERENCES"},"settings":{"type":"object","properties":{"tone":{"default":"WARM","type":"string","enum":["WARM","DIRECT","FORMAL"]},"length":{"default":"BALANCED","type":"string","enum":["BRIEF","BALANCED","DETAILED"]},"language":{"default":"English","type":"string","minLength":2,"maxLength":60},"signature":{"default":"","type":"string","maxLength":1000},"greeting":{"default":"","type":"string","maxLength":300},"signOff":{"default":"","type":"string","maxLength":300},"avoid":{"default":[],"maxItems":30,"type":"array","items":{"type":"string","minLength":1,"maxLength":100}},"examples":{"default":[],"maxItems":3,"type":"array","items":{"type":"string","minLength":10,"maxLength":2000}}},"required":["tone","length","language","signature","greeting","signOff","avoid","examples"],"additionalProperties":false}},"required":["kind","settings"],"additionalProperties":false}]},"approved":{"type":"boolean","const":true}},"required":["id","expectedRevision","payload","approved"],"additionalProperties":false}},"required":["operation","data"]},{"type":"object","additionalProperties":false,"properties":{"operation":{"const":"dismiss"},"data":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":100},"expectedRevision":{"type":"integer","minimum":1,"maximum":9007199254740991},"approved":{"type":"boolean","const":true}},"required":["id","expectedRevision","approved"],"additionalProperties":false}},"required":["operation","data"]}]}}}},"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}}},"/assistant/preferences":{"get":{"summary":"Read reviewed studio writing preferences","description":"Requires assistant:read for an API key, or a full workspace membership for a Clerk session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"assistant:read","parameters":[{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}},"post":{"summary":"Save explicitly reviewed writing preferences with revision control","description":"Requires assistant:write for an API key, or a full workspace membership for a Clerk session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"assistant:write","parameters":[{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"revision":{"type":"integer","minimum":0,"maximum":9007199254740991},"settings":{"type":"object","properties":{"tone":{"default":"WARM","type":"string","enum":["WARM","DIRECT","FORMAL"]},"length":{"default":"BALANCED","type":"string","enum":["BRIEF","BALANCED","DETAILED"]},"language":{"default":"English","type":"string","minLength":2,"maxLength":60},"signature":{"default":"","type":"string","maxLength":1000},"greeting":{"default":"","type":"string","maxLength":300},"signOff":{"default":"","type":"string","maxLength":300},"avoid":{"default":[],"maxItems":30,"type":"array","items":{"type":"string","minLength":1,"maxLength":100}},"examples":{"default":[],"maxItems":3,"type":"array","items":{"type":"string","minLength":10,"maxLength":2000}}},"required":["tone","length","language","signature","greeting","signOff","avoid","examples"],"additionalProperties":false},"approved":{"type":"boolean","const":true}},"required":["revision","settings","approved"],"additionalProperties":false}}}},"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}}},"/assistant/packages":{"get":{"summary":"Read private service packages; also requires finance:read","description":"Requires assistant:read for an API key, or a full workspace membership for a Clerk session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"assistant:read","parameters":[{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}},"post":{"summary":"Review a package and its status; also requires finance:read and finance:write","description":"Requires assistant:write for an API key, or a full workspace membership for a Clerk session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"assistant:write","parameters":[{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":100},"revision":{"type":"integer","minimum":1,"maximum":9007199254740991},"package":{"type":"object","properties":{"name":{"type":"string","minLength":2,"maxLength":160},"description":{"type":"string","maxLength":3000},"currency":{"type":"string","const":"usd"},"amountCents":{"anyOf":[{"type":"integer","minimum":0,"maximum":99999999},{"type":"null"}]},"inclusions":{"maxItems":50,"type":"array","items":{"type":"string","minLength":1,"maxLength":500}},"exclusions":{"maxItems":30,"type":"array","items":{"type":"string","minLength":1,"maxLength":500}}},"required":["name","description","currency","amountCents","inclusions","exclusions"],"additionalProperties":false},"status":{"type":"string","enum":["DRAFT","ACTIVE","ARCHIVED"]},"approved":{"type":"boolean","const":true}},"required":["id","revision","package","status","approved"],"additionalProperties":false}}}},"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}}},"/crm/pipelines":{"get":{"summary":"Read versioned private pipelines and their immutable booking meanings","description":"Requires clients:read for an API key, or a full workspace membership for a Clerk session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"clients:read","parameters":[{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}},{"name":"after","in":"query","schema":{"type":"string","maxLength":100}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object","required":["data","nextCursor"],"properties":{"data":{"type":"array","items":{"type":"object"}},"nextCursor":{"type":["string","null"]}}}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}},"post":{"summary":"Save or archive a pipeline, or move a reviewed lead revision","description":"Requires clients:write for an API key, or a full workspace membership for a Clerk session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"clients:write","parameters":[{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"oneOf":[{"type":"object","additionalProperties":false,"properties":{"operation":{"const":"save"},"approved":{"const":true},"data":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":100},"expectedRevision":{"default":0,"type":"integer","minimum":0,"maximum":9007199254740991},"requestId":{"type":"string","minLength":8,"maxLength":120},"name":{"type":"string","minLength":1,"maxLength":80},"stages":{"minItems":6,"maxItems":30,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":100},"name":{"type":"string","minLength":1,"maxLength":60},"stage":{"type":"string","enum":["NEW","CONTACTED","MEETING","PROPOSAL","WON","LOST"]}},"required":["name","stage"]}}},"required":["requestId","name","stages"]}},"required":["operation","approved","data"]},{"type":"object","additionalProperties":false,"properties":{"operation":{"const":"move"},"approved":{"const":true},"data":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"leadId":{"type":"string","minLength":1,"maxLength":100},"targetStageId":{"type":"string","minLength":1,"maxLength":100},"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"requestId":{"type":"string","minLength":8,"maxLength":120}},"required":["leadId","targetStageId","expectedRevision","requestId"]}},"required":["operation","approved","data"]},{"type":"object","additionalProperties":false,"properties":{"operation":{"const":"archive"},"approved":{"const":true},"data":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string","minLength":1},"expectedRevision":{"type":"integer","minimum":0},"requestId":{"type":"string","format":"uuid"},"archived":{"type":"boolean"}},"required":["id","expectedRevision","requestId","archived"]}},"required":["operation","approved","data"]}]}}}},"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}}},"/crm/records":{"get":{"summary":"Read a private contact record with contacts, current revision and original merge links","description":"Requires clients:read for an API key, or a full workspace membership for a Clerk session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"clients:read","parameters":[{"name":"kind","in":"query","required":true,"schema":{"enum":["LEAD","CLIENT"]}},{"name":"id","in":"query","required":true,"schema":{"type":"string","minLength":1}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}},"post":{"summary":"Apply an explicitly reviewed archive, restoration, contact edit or duplicate merge; original histories are preserved","description":"Requires clients:write for an API key, or a full workspace membership for a Clerk session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"clients:write","parameters":[{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"oneOf":[{"type":"object","additionalProperties":false,"properties":{"operation":{"const":"lifecycle"},"approved":{"const":true},"data":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"kind":{"type":"string","enum":["LEAD","CLIENT"]},"id":{"type":"string","minLength":1,"maxLength":100},"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"requestId":{"type":"string","minLength":8,"maxLength":120},"action":{"type":"string","enum":["ARCHIVE","RESTORE"]},"reason":{"type":"string","minLength":3,"maxLength":500}},"required":["kind","id","expectedRevision","requestId","action","reason"]}},"required":["operation","approved","data"]},{"type":"object","additionalProperties":false,"properties":{"operation":{"const":"contact"},"approved":{"const":true},"data":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"kind":{"type":"string","enum":["LEAD","CLIENT"]},"recordId":{"type":"string","minLength":1,"maxLength":100},"expectedRecordRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"id":{"type":"string","minLength":1,"maxLength":100},"expectedRevision":{"default":0,"type":"integer","minimum":0,"maximum":9007199254740991},"requestId":{"type":"string","minLength":8,"maxLength":120},"name":{"type":"string","minLength":1,"maxLength":120},"relationship":{"type":"string","minLength":1,"maxLength":80},"email":{"anyOf":[{"anyOf":[{"type":"string","maxLength":254,"format":"email","pattern":"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"},{"type":"string","const":""}]},{"type":"null"}]},"phone":{"anyOf":[{"type":"string","maxLength":60},{"type":"null"}]},"notes":{"anyOf":[{"type":"string","maxLength":5000},{"type":"null"}]},"archived":{"default":false,"type":"boolean"}},"required":["kind","recordId","expectedRecordRevision","requestId","name","relationship"]}},"required":["operation","approved","data"]},{"type":"object","additionalProperties":false,"properties":{"operation":{"const":"merge"},"approved":{"const":true},"data":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"kind":{"type":"string","enum":["LEAD","CLIENT"]},"sourceId":{"type":"string","minLength":1,"maxLength":100},"targetId":{"type":"string","minLength":1,"maxLength":100},"sourceRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"targetRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"requestId":{"type":"string","minLength":8,"maxLength":120},"confirmed":{"type":"boolean","const":true},"fields":{"maxItems":12,"type":"array","items":{"type":"string","enum":["coupleNames","partnerOneName","partnerTwoName","email","phone","eventDate","venue","guestCount","budget","message","notes"]}}},"required":["kind","sourceId","targetId","sourceRevision","targetRevision","requestId","confirmed","fields"]}},"required":["operation","approved","data"]}]}}}},"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}}},"/calendar/microsoft":{"get":{"summary":"Read Microsoft connection status and paginated mirror records; no credentials are exposed","description":"Requires calendar:read for an API key, or a full workspace membership for a Clerk session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"calendar:read","parameters":[{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}},{"name":"after","in":"query","schema":{"type":"string","maxLength":100}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object","required":["data","nextCursor"],"properties":{"data":{"type":"array","items":{"type":"object"}},"nextCursor":{"type":["string","null"]}}}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}}},"/forms/{id}/responses":{"get":{"summary":"Read bounded retained form submissions with their original publication labels and hashes","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"page","in":"query","required":false,"schema":{"default":1,"type":"integer","minimum":1,"maximum":10000}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}}},"/forms/{id}/responses/{submissionId}":{"get":{"summary":"Read one retained response from its original publication, never today’s form draft","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"submissionId","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}}},"/leads/{id}/inquiry-sources":{"get":{"summary":"Read original public inquiry sources for this private lead; submitted email is not verified account identity","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"page","in":"query","required":false,"schema":{"default":1,"type":"integer","minimum":1,"maximum":10000}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}}},"/crm/search":{"get":{"summary":"Search active private leads, clients or projects by exact tag and name with bounded continuation","description":"Requires clients:read for an API key, or a full workspace membership for a Clerk session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"clients:read","parameters":[{"name":"kind","in":"query","required":false,"schema":{"default":"LEAD","type":"string","enum":["LEAD","CLIENT","WEDDING"]}},{"name":"q","in":"query","required":false,"schema":{"default":"","type":"string","maxLength":100}},{"name":"tag","in":"query","required":false,"schema":{"default":"","type":"string","maxLength":40}},{"name":"after","in":"query","required":false,"schema":{"type":"string","minLength":1,"maxLength":100}},{"name":"limit","in":"query","required":false,"schema":{"default":25,"type":"integer","minimum":1,"maximum":100}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object","required":["data","nextCursor"],"properties":{"data":{"type":"array","items":{"type":"object"}},"nextCursor":{"type":["string","null"]}}}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}}},"/crm/definitions":{"get":{"summary":"Read current private project types or versioned client/contact field profiles","description":"Requires clients:read for an API key, or a full workspace membership for a Clerk session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"clients:read","parameters":[{"name":"kind","in":"query","required":false,"schema":{"default":"TYPE","type":"string","enum":["TYPE","PROFILE"]}},{"name":"q","in":"query","required":false,"schema":{"default":"","type":"string","maxLength":100}},{"name":"after","in":"query","required":false,"schema":{"type":"string","minLength":1,"maxLength":100}},{"name":"limit","in":"query","required":false,"schema":{"default":25,"type":"integer","minimum":1,"maximum":50}},{"name":"archived","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"string","enum":["true","false"]}]}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object","required":["data","nextCursor"],"properties":{"data":{"type":"array","items":{"type":"object"}},"nextCursor":{"type":["string","null"]}}}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}}},"/crm/project-types":{"post":{"summary":"Create, revise or archive a private project type using its current definition revision","description":"Requires clients:write for an API key, or a full workspace membership for a Clerk session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"clients:write","parameters":[{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":100},"name":{"type":"string","minLength":2,"maxLength":100},"description":{"default":"","type":"string","maxLength":1000},"fields":{"maxItems":40,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z][a-zA-Z0-9_]{0,39}$"},"label":{"type":"string","minLength":1,"maxLength":100},"type":{"type":"string","enum":["TEXT","TEXTAREA","EMAIL","PHONE","NUMBER","DATE","SELECT","MULTISELECT","CHECKBOX"]},"required":{"default":false,"type":"boolean"},"options":{"default":[],"maxItems":30,"type":"array","items":{"type":"string","minLength":1,"maxLength":100}},"mapTo":{"default":"custom","type":"string","enum":["custom","coupleNames","email","phone","eventDate","message"]},"showWhen":{"default":null,"anyOf":[{"type":"object","properties":{"fieldId":{"type":"string","pattern":"^[a-zA-Z][a-zA-Z0-9_]{0,39}$"},"equals":{"type":"string","maxLength":200}},"required":["fieldId","equals"]},{"type":"null"}]}},"required":["id","label","type"]}},"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"requestId":{"type":"string","minLength":8,"maxLength":120},"archived":{"default":false,"type":"boolean"}},"required":["name","fields","expectedRevision","requestId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}}},"/crm/record-fields":{"post":{"summary":"Save reviewed lead/project fields or reusable record tags without changing outbound disclosure permissions","description":"Requires clients:write for an API key, or a full workspace membership for a Clerk session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"clients:write","parameters":[{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"kind":{"type":"string","enum":["LEAD","WEDDING","CLIENT"]},"id":{"type":"string","minLength":1,"maxLength":100},"projectTypeId":{"default":"","type":"string","maxLength":100},"tags":{"maxItems":30,"type":"array","items":{"type":"string","minLength":1,"maxLength":40}},"fields":{"type":"object","propertyNames":{"type":"string","pattern":"^[a-zA-Z][a-zA-Z0-9_]{0,39}$"},"additionalProperties":{"anyOf":[{"type":"string","maxLength":5000},{"type":"boolean"},{"type":"number"},{"maxItems":30,"type":"array","items":{"type":"string","maxLength":100}}]}},"expectedTypeRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"requestId":{"type":"string","minLength":8,"maxLength":120}},"required":["expectedRevision","kind","id","tags","fields","requestId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}}},"/crm/field-profiles":{"post":{"summary":"Save an immutable version of a private client/contact field profile; existing answers keep their original definition","description":"Requires clients:write for an API key, or a full workspace membership for a Clerk session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"clients:write","parameters":[{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":100},"name":{"type":"string","minLength":2,"maxLength":100},"description":{"default":"","type":"string","maxLength":1000},"fields":{"maxItems":40,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z][a-zA-Z0-9_]{0,39}$"},"label":{"type":"string","minLength":1,"maxLength":100},"type":{"type":"string","enum":["TEXT","TEXTAREA","EMAIL","PHONE","NUMBER","DATE","SELECT","MULTISELECT","CHECKBOX"]},"required":{"default":false,"type":"boolean"},"options":{"default":[],"maxItems":30,"type":"array","items":{"type":"string","minLength":1,"maxLength":100}},"mapTo":{"default":"custom","type":"string","enum":["custom","coupleNames","email","phone","eventDate","message"]},"showWhen":{"default":null,"anyOf":[{"type":"object","properties":{"fieldId":{"type":"string","pattern":"^[a-zA-Z][a-zA-Z0-9_]{0,39}$"},"equals":{"type":"string","maxLength":200}},"required":["fieldId","equals"]},{"type":"null"}]}},"required":["id","label","type"]}},"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"requestId":{"type":"string","minLength":8,"maxLength":120},"archived":{"default":false,"type":"boolean"}},"required":["name","fields","expectedRevision","requestId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}}},"/crm/fields":{"get":{"summary":"Read retained typed client or person answers and the exact definition version","description":"Requires clients:read for an API key, or a full workspace membership for a Clerk session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"clients:read","parameters":[{"name":"kind","in":"query","required":true,"schema":{"type":"string","enum":["CLIENT","CONTACT"]}},{"name":"id","in":"query","required":true,"schema":{"type":"string","minLength":1,"maxLength":100}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}},"post":{"summary":"Preview or explicitly apply exact private answers and a profile association using record, contact and value revisions","description":"Requires clients:write for an API key, or a full workspace membership for a Clerk session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"clients:write","parameters":[{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","oneOf":[{"type":"object","properties":{"operation":{"type":"string","const":"preview"},"data":{"type":"object","properties":{"kind":{"type":"string","enum":["CLIENT","CONTACT"]},"id":{"type":"string","minLength":1,"maxLength":100},"versionId":{"type":"string","minLength":1,"maxLength":100},"expectedRecordRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"expectedContactRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"expectedValuesRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"answers":{"type":"object","propertyNames":{"type":"string","pattern":"^[a-zA-Z][a-zA-Z0-9_]{0,39}$"},"additionalProperties":{"anyOf":[{"type":"string","maxLength":5000},{"type":"boolean"},{"type":"number"},{"maxItems":30,"type":"array","items":{"type":"string","maxLength":100}}]}}},"required":["kind","id","versionId","expectedRecordRevision","expectedValuesRevision","answers"],"additionalProperties":false}},"required":["operation","data"],"additionalProperties":false},{"type":"object","properties":{"operation":{"type":"string","const":"apply"},"data":{"type":"object","properties":{"kind":{"type":"string","enum":["CLIENT","CONTACT"]},"id":{"type":"string","minLength":1,"maxLength":100},"versionId":{"type":"string","minLength":1,"maxLength":100},"expectedRecordRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"expectedContactRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"expectedValuesRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"answers":{"type":"object","propertyNames":{"type":"string","pattern":"^[a-zA-Z][a-zA-Z0-9_]{0,39}$"},"additionalProperties":{"anyOf":[{"type":"string","maxLength":5000},{"type":"boolean"},{"type":"number"},{"maxItems":30,"type":"array","items":{"type":"string","maxLength":100}}]}},"reviewedHash":{"type":"string","pattern":"^[a-f0-9]{64}$"},"approved":{"type":"boolean","const":true},"requestId":{"type":"string","minLength":8,"maxLength":120}},"required":["kind","id","versionId","expectedRecordRevision","expectedValuesRevision","answers","reviewedHash","approved","requestId"],"additionalProperties":false}},"required":["operation","data"],"additionalProperties":false}]}}}},"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}}},"/projects":{"get":{"summary":"List private business projects with current edit revisions; optional exact status, client or tag filters","description":"Requires projects:read for an API key, or a full workspace membership for a Clerk session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"projects:read","parameters":[{"name":"limit","in":"query","required":false,"schema":{"default":25,"type":"integer","minimum":1,"maximum":100}},{"name":"after","in":"query","required":false,"schema":{"type":"string","minLength":1,"maxLength":100}},{"name":"q","in":"query","required":false,"schema":{"default":"","type":"string","maxLength":100}},{"name":"tag","in":"query","required":false,"schema":{"default":"","type":"string","maxLength":40}},{"name":"status","in":"query","required":false,"schema":{"type":"string","enum":["LEAD","PLANNING","CONFIRMED","COMPLETED","ARCHIVED"]}},{"name":"clientId","in":"query","required":false,"schema":{"type":"string","minLength":1,"maxLength":100}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object","required":["data","nextCursor"],"properties":{"data":{"type":"array","items":{"type":"object"}},"nextCursor":{"type":["string","null"]}}}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}},"post":{"summary":"Create a standalone private project atomically; a new client also requires clients:write. Replays return the original receipt and no sales lead or booking fact is invented","description":"Requires projects:write for an API key, or a full workspace membership for a Clerk session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"projects:write","parameters":[{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"title":{"type":"string","minLength":1,"maxLength":240},"date":{"default":null,"anyOf":[{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},{"type":"null"}]},"venueName":{"anyOf":[{"type":"string","maxLength":300},{"type":"null"}]},"venueAddress":{"anyOf":[{"type":"string","maxLength":1000},{"type":"null"}]},"guestCount":{"default":null,"anyOf":[{"type":"integer","minimum":0,"maximum":1000000},{"type":"null"}]},"budgetTarget":{"default":null,"anyOf":[{"type":"integer","minimum":0,"maximum":2000000000},{"type":"null"}]},"status":{"default":"PLANNING","type":"string","enum":["LEAD","PLANNING","CONFIRMED","COMPLETED","ARCHIVED"]},"notes":{"anyOf":[{"type":"string","maxLength":20000},{"type":"null"}]},"projectTypeId":{"default":null,"anyOf":[{"type":"string","minLength":1,"maxLength":100},{"type":"null"}]},"expectedTypeRevision":{"default":null,"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"tags":{"default":[],"maxItems":30,"type":"array","items":{"type":"string","minLength":1,"maxLength":40}},"fields":{"default":{},"type":"object","propertyNames":{"type":"string","minLength":1,"maxLength":80},"additionalProperties":{"anyOf":[{"type":"string","maxLength":5000},{"type":"number","minimum":-1000000000000,"maximum":1000000000000},{"type":"boolean"}]}},"requestId":{"type":"string","minLength":8,"maxLength":120},"client":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","const":"EXISTING"},"id":{"type":"string","minLength":1,"maxLength":100},"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["kind","id","expectedRevision"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"NEW"},"partnerOneName":{"type":"string","minLength":1,"maxLength":120},"partnerTwoName":{"anyOf":[{"type":"string","maxLength":120},{"type":"null"}]},"email":{"anyOf":[{"type":"string","maxLength":254,"format":"email","pattern":"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"},{"type":"null"}]},"phone":{"anyOf":[{"type":"string","maxLength":60},{"type":"null"}]},"notes":{"anyOf":[{"type":"string","maxLength":5000},{"type":"null"}]}},"required":["kind","partnerOneName"],"additionalProperties":false}]}},"required":["title","requestId","client"],"additionalProperties":false}}}},"responses":{"201":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}}},"/projects/{id}":{"get":{"summary":"Read a private project and its current type definition for revision-checked editing","description":"Requires projects:read for an API key, or a full workspace membership for a Clerk session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"projects:read","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}},"post":{"summary":"Replace all editable project details, change status alone or explicitly delete a private project. Edit is a full replacement, not a partial patch: submit all current editable fields and selected answers. Reactivation shares transactional capacity checks and retained legal/payment history prevents deletion","description":"Requires projects:write for an API key, or a full workspace membership for a Clerk session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"projects:write","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","oneOf":[{"type":"object","properties":{"operation":{"type":"string","const":"edit"},"data":{"type":"object","properties":{"title":{"type":"string","minLength":1,"maxLength":240},"date":{"default":null,"anyOf":[{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},{"type":"null"}]},"venueName":{"anyOf":[{"type":"string","maxLength":300},{"type":"null"}]},"venueAddress":{"anyOf":[{"type":"string","maxLength":1000},{"type":"null"}]},"guestCount":{"default":null,"anyOf":[{"type":"integer","minimum":0,"maximum":1000000},{"type":"null"}]},"budgetTarget":{"default":null,"anyOf":[{"type":"integer","minimum":0,"maximum":2000000000},{"type":"null"}]},"status":{"default":"PLANNING","type":"string","enum":["LEAD","PLANNING","CONFIRMED","COMPLETED","ARCHIVED"]},"notes":{"anyOf":[{"type":"string","maxLength":20000},{"type":"null"}]},"projectTypeId":{"default":null,"anyOf":[{"type":"string","minLength":1,"maxLength":100},{"type":"null"}]},"expectedTypeRevision":{"default":null,"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"tags":{"default":[],"maxItems":30,"type":"array","items":{"type":"string","minLength":1,"maxLength":40}},"fields":{"default":{},"type":"object","propertyNames":{"type":"string","minLength":1,"maxLength":80},"additionalProperties":{"anyOf":[{"type":"string","maxLength":5000},{"type":"number","minimum":-1000000000000,"maximum":1000000000000},{"type":"boolean"}]}},"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"requestId":{"type":"string","minLength":8,"maxLength":120}},"required":["title","expectedRevision","requestId"],"additionalProperties":false}},"required":["operation","data"],"additionalProperties":false},{"type":"object","properties":{"operation":{"type":"string","const":"status"},"data":{"type":"object","properties":{"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"requestId":{"type":"string","minLength":8,"maxLength":120},"status":{"type":"string","enum":["LEAD","PLANNING","CONFIRMED","COMPLETED","ARCHIVED"]}},"required":["expectedRevision","requestId","status"],"additionalProperties":false}},"required":["operation","data"],"additionalProperties":false},{"type":"object","properties":{"operation":{"type":"string","const":"delete"},"data":{"type":"object","properties":{"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"requestId":{"type":"string","minLength":8,"maxLength":120},"confirmed":{"type":"boolean","const":true}},"required":["expectedRevision","requestId","confirmed"],"additionalProperties":false}},"required":["operation","data"],"additionalProperties":false}]}}}},"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}}},"/clients":{"get":{"summary":"Find private clients","description":"Requires clients:read for an API key, or a full workspace membership for a Clerk session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"clients:read","parameters":[{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}},{"name":"after","in":"query","schema":{"type":"string","maxLength":100}},{"name":"q","in":"query","schema":{"type":"string","maxLength":100}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object","required":["data","nextCursor"],"properties":{"data":{"type":"array","items":{"type":"object"}},"nextCursor":{"type":["string","null"]}}}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}}},"/leads":{"get":{"summary":"Find CRM leads","description":"Requires clients:read for an API key, or a full workspace membership for a Clerk session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"clients:read","parameters":[{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}},{"name":"after","in":"query","schema":{"type":"string","maxLength":100}},{"name":"q","in":"query","schema":{"type":"string","maxLength":100}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object","required":["data","nextCursor"],"properties":{"data":{"type":"array","items":{"type":"object"}},"nextCursor":{"type":["string","null"]}}}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}}},"/events":{"get":{"summary":"Read IDs-only committed event envelopes; private record reads require their own scopes","description":"Requires events:read for an API key, or a full workspace membership for a Clerk session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"events:read","parameters":[{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}},{"name":"after","in":"query","schema":{"type":"string","maxLength":100}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object","required":["data","nextCursor"],"properties":{"data":{"type":"array","items":{"type":"object"}},"nextCursor":{"type":["string","null"]},"cursor":{"type":["string","null"],"description":"Persist this opaque cursor after processing the page, even when nextCursor is null. Poll with after=cursor. Deduplicate by event id; feed arrival order may differ from occurredAt."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}}},"/clients/{id}/notes":{"post":{"summary":"Append an approved private note","description":"Requires clients:write for an API key, or a full workspace membership for a Clerk session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"clients:write","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"requestId":{"type":"string","format":"uuid"},"note":{"type":"string","minLength":1,"maxLength":4000}},"required":["requestId","note"]}}}},"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}}},"/projects/{id}/{section}":{"get":{"summary":"Read tasks, live state, photo plan or permitted guests","description":"Requires section-specific for an API key, or a full workspace membership for a Clerk session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"section-specific","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"section","in":"path","required":true,"schema":{"type":"string","enum":["tasks","live","photography","guests"]}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}},{"name":"after","in":"query","schema":{"type":"string","maxLength":100}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object","description":"tasks/guests return paginated data; live returns wedding,items,snapshot,fetchedAt; photography returns revision,shots,familyGroups."}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}},"post":{"summary":"Apply a reviewed revision or create a task","description":"Requires section-specific for an API key, or a full workspace membership for a Clerk session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"section-specific","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"section","in":"path","required":true,"schema":{"type":"string","enum":["tasks","live","photography"]}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"oneOf":[{"type":"object","additionalProperties":false,"properties":{"kind":{"const":"new-task"},"requestId":{"type":"string","format":"uuid"},"title":{"type":"string","minLength":1,"maxLength":180},"notes":{"type":"string","maxLength":4000}},"required":["kind","requestId","title"]},{"type":"object","additionalProperties":false,"properties":{"kind":{"const":"task"},"requestId":{"type":"string","format":"uuid"},"id":{"type":"string","minLength":1},"expectedRevision":{"type":"integer","minimum":1},"done":{"type":"boolean"}},"required":["kind","requestId","id","expectedRevision","done"]},{"type":"object","additionalProperties":false,"properties":{"kind":{"const":"live"},"requestId":{"type":"string","format":"uuid"},"expectedRevision":{"type":"integer","minimum":0},"change":{"$schema":"https://json-schema.org/draft/2020-12/schema","oneOf":[{"type":"object","properties":{"kind":{"type":"string","const":"status"},"itemId":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},"status":{"type":"string","enum":["PENDING","IN_PROGRESS","DONE"]}},"required":["kind","itemId","status"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"offset"},"dayId":{"anyOf":[{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},{"type":"null"}]},"delta":{"type":"integer","minimum":-60,"maximum":60}},"required":["kind","dayId","delta"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"reset-offset"},"dayId":{"anyOf":[{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},{"type":"null"}]}},"required":["kind","dayId"],"additionalProperties":false}]}},"required":["kind","requestId","expectedRevision","change"]},{"type":"object","additionalProperties":false,"properties":{"kind":{"const":"photo"},"requestId":{"type":"string","format":"uuid"},"id":{"type":"string","minLength":1},"expectedRevision":{"type":"integer","minimum":0},"completed":{"type":"boolean"}},"required":["kind","requestId","id","expectedRevision","completed"]}]}}}},"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}}},"/conversations":{"get":{"summary":"Read conversations and their latest ten messages","description":"Requires messages:read for an API key, or a full workspace membership for a Clerk session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"messages:read","parameters":[{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":50,"default":25}},{"name":"after","in":"query","schema":{"type":"string","maxLength":100}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object","required":["data","nextCursor"],"properties":{"data":{"type":"array","items":{"type":"object"}},"nextCursor":{"type":["string","null"]}}}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}},"post":{"summary":"Queue an explicitly approved email","description":"Requires messages:write for an API key, or a full workspace membership for a Clerk session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"messages:write","parameters":[{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"requestId":{"type":"string","format":"uuid"},"leadId":{"type":"string","minLength":1},"subject":{"type":"string","minLength":1,"maxLength":200},"body":{"type":"string","minLength":1,"maxLength":30000},"expectedRecipient":{"type":"string","format":"email"},"attachmentIds":{"type":"array","items":{"type":"string","minLength":1,"maxLength":100},"maxItems":10,"uniqueItems":true,"default":[],"description":"Exact reviewed private files; a nonempty list also requires assets:read. The server records and returns reviewedPayloadHash."},"approved":{"const":true}},"required":["requestId","leadId","subject","body","expectedRecipient","approved"]}}}},"responses":{"202":{"description":"Accepted and persisted; external delivery is separate.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}}},"/workflows":{"get":{"summary":"Read a stable cursor page of enabled published workflows","description":"Requires workflows:read for an API key, or a full workspace membership for a Clerk session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"workflows:read","parameters":[{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":100}},{"name":"after","in":"query","schema":{"type":"string","maxLength":100}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object","required":["data","nextCursor"],"properties":{"data":{"type":"array","items":{"type":"object"}},"nextCursor":{"type":["string","null"]}}}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}},"post":{"summary":"Start the reviewed workflow version","description":"Requires workflows:write for an API key, or a full workspace membership for a Clerk session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"workflows:write","parameters":[{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"requestId":{"type":"string","format":"uuid"},"workflowId":{"type":"string","minLength":1},"leadId":{"type":"string","minLength":1},"expectedPublishedRevision":{"type":"integer","minimum":1},"approved":{"const":true}},"required":["requestId","workflowId","leadId","expectedPublishedRevision","approved"]}}}},"responses":{"202":{"description":"Accepted and persisted; external delivery is separate.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}}},"/approvals":{"get":{"summary":"Read pending tasks, drafts and form requests with pinned email recipient","description":"Requires workflows:read for an API key, or a full workspace membership for a Clerk session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"workflows:read","parameters":[{"name":"after","in":"query","schema":{"type":"string","maxLength":100}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object","required":["data","nextCursor"],"properties":{"data":{"type":"array","items":{"type":"object"}},"nextCursor":{"type":["string","null"]}}}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}},"post":{"summary":"Apply an explicitly reviewed approval; intake-routed work additionally requires a named workspace account","description":"Requires workflows:write for an API key, or a full workspace membership for a Clerk session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"workflows:write","parameters":[{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string","minLength":1},"action":{"enum":["complete","queue","saveDocument","dismiss"]},"title":{"type":"string","minLength":1,"maxLength":200},"body":{"type":"string","maxLength":30000},"expectedRecipient":{"type":"string","format":"email","description":"Required when action is queue; must match the pinned run recipient and current contact."},"approved":{"const":true}},"required":["id","action","title","body","approved"]}}}},"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}}},"/galleries":{"get":{"summary":"List private professional galleries","description":"Requires assets:read for an API key, or a full workspace membership for a Clerk session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"assets:read","parameters":[{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}},{"name":"after","in":"query","schema":{"type":"string","maxLength":100}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object","required":["data","nextCursor"],"properties":{"data":{"type":"array","items":{"type":"object"}},"nextCursor":{"type":["string","null"]}}}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}}},"/galleries/{id}/uploads":{"post":{"summary":"Begin, sign a part, complete or abort a resumable gallery upload","description":"Requires assets:write for an API key, or a full workspace membership for a Clerk session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"assets:write","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","oneOf":[{"type":"object","properties":{"galleryId":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},"folderId":{"anyOf":[{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},{"type":"null"}]},"replacesMediaId":{"anyOf":[{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},{"type":"null"}]},"replacementBaseAssetId":{"anyOf":[{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},{"type":"null"}]},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"filename":{"type":"string","minLength":1,"maxLength":200},"contentType":{"type":"string","enum":["image/jpeg","image/png","image/webp","image/tiff","image/heic","video/mp4","video/quicktime"]},"bytes":{"type":"integer","exclusiveMinimum":0,"maximum":2000000000},"fingerprint":{"type":"string","pattern":"^[a-f0-9]{64}$"},"operation":{"type":"string","const":"begin"}},"required":["galleryId","folderId","requestId","filename","contentType","bytes","fingerprint","operation"],"additionalProperties":false},{"type":"object","properties":{"galleryId":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},"uploadId":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},"partNumber":{"type":"integer","minimum":1,"maximum":250},"checksum":{"type":"string","pattern":"^[A-Za-z0-9+/]{43}=$"},"operation":{"type":"string","const":"part"}},"required":["galleryId","uploadId","partNumber","checksum","operation"],"additionalProperties":false},{"type":"object","properties":{"galleryId":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},"uploadId":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},"operation":{"type":"string","const":"complete"}},"required":["galleryId","uploadId","operation"],"additionalProperties":false},{"type":"object","properties":{"galleryId":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},"uploadId":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$"},"operation":{"type":"string","const":"abort"}},"required":["galleryId","uploadId","operation"],"additionalProperties":false}]}}}},"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}}},"/workspaces":{"get":{"summary":"List account memberships","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}},"post":{"summary":"Create an independent workspace","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"toolDraft":{"default":"","anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"string","const":""}]},"templateDraft":{"default":"","anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"string","const":""}]},"weddingInvite":{"default":"","anyOf":[{"type":"string","pattern":"^[a-zA-Z0-9_-]{43}$"},{"type":"string","const":""}]},"vendorSpecialty":{"default":"","anyOf":[{"type":"string","enum":["VENUE","FLORIST","CATERER","DJ","RENTAL","OTHER"]},{"type":"string","const":""}]},"name":{"type":"string","minLength":2,"maxLength":100},"audience":{"type":"string","enum":["PLANNER","PHOTOGRAPHER","VENDOR","COUPLE"]},"timezone":{"type":"string","maxLength":80},"partnerOneName":{"default":"","type":"string","maxLength":100},"partnerTwoName":{"default":"","type":"string","maxLength":100},"weddingDate":{"default":"","anyOf":[{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},{"type":"string","const":""}]}},"required":["requestId","toolDraft","templateDraft","weddingInvite","vendorSpecialty","name","audience","timezone","partnerOneName","partnerTwoName","weddingDate"],"additionalProperties":false}}}},"responses":{"201":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}}},"/shared-weddings":{"get":{"summary":"Read explicitly shared wedding projections","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}}},"/devices":{"post":{"summary":"Register or update push preferences for this account device","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"deviceId":{"type":"string","format":"uuid"},"expoToken":{"type":"string","pattern":"^(ExponentPushToken|ExpoPushToken)\\[[a-zA-Z0-9_-]+\\]$"},"enabled":{"type":"boolean"}},"required":["deviceId","expoToken","enabled"]}}}},"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}},"delete":{"summary":"Disable this account device across workspaces","description":"Requires a Clerk account session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"account","parameters":[{"name":"deviceId","in":"query","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"responses":{"204":{"description":"Successful operation"},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}}},"/agreements/{id}/audit":{"get":{"summary":"Export ordered, formula-safe agreement lifecycle CSV and retained hashes under current workspace finance authority","description":"Requires finance:read for an API key, or a full workspace membership for a Clerk session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"finance:read","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}}},"/realtime":{"post":{"summary":"Issue a short-lived subscribe-only workspace token","description":"Requires events:read for an API key, or a full workspace membership for a Clerk session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"events:read","parameters":[{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}}},"/mcp":{"post":{"summary":"Scoped MCP Streamable HTTP endpoint; initialize and tools/list discover only permitted tools","description":"Requires credential-specific for an API key, or a full workspace membership for a Clerk session. Clerk sessions select a workspace with X-Workspace-Id. Private business records never cross workspace boundaries.","security":[{"bearerAuth":[]}],"x-required-scope":"credential-specific","parameters":[{"name":"X-Workspace-Id","in":"header","description":"Required for account sessions except workspace listing/creation.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"MCP JSON-RPC 2.0 request; official SDK protocol negotiation. Stateless JSON response transport."}}}},"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input"},"401":{"description":"Missing, expired or revoked credential"},"403":{"description":"Insufficient scope or membership"},"404":{"description":"Resource unavailable in this workspace"},"409":{"description":"Stale revision or reused request identity"},"413":{"description":"Payload exceeds 200 KB"}}}},"/openapi":{"get":{"summary":"Read this OpenAPI specification","security":[],"responses":{"200":{"description":"OpenAPI 3.1 document"}}}}}}