{"openapi":"3.1.0","info":{"title":"ClientCasa API","version":"1.0.0","description":"REST API for ClientCasa — proposals, contracts, time tracking, expenses, invoicing, payments, and CRM for solo operators and small teams."},"servers":[{"url":"https://www.clientcasa.com","description":"Production"}],"components":{"schemas":{"ApiError":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","method_not_allowed","invalid_request","rate_limited","conflict","request_in_progress","idempotency_key_reused","gone","payload_too_large","client_error","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{"type":"object","properties":{"code":{"type":"string","enum":["archived_record_read_only","paused_transaction_window_locked","record_has_dependents","duplicate_record","record_immutable","quota_exceeded","invalid_payload","global_mode_has_assignments","unsupported_file_type","file_too_large","cross_organization","linked_record_not_found","rate_limited","revenue_on_internal_project","number_series_unlocked","invoice_not_deletable","sale_not_deletable","tax_category_default","tax_category_referenced","recipe_price_propagation_failed","price_history_head_mismatch","price_history_not_derived","time_entry_already_billed","charge_period_already_billed","owner_immutable","payment_client_mismatch","payment_target_not_collectible","currency_locked","unknown_assignment_id"]}},"additionalProperties":{}}},"required":["code","message","requestId"]}},"required":["error"]},"PaginationMeta":{"type":"object","properties":{"page":{"type":"integer","minimum":1},"pageSize":{"type":"integer","minimum":1},"total":{"type":"integer","minimum":0},"totalPages":{"type":"integer","minimum":0},"hasMore":{"type":"boolean"}},"required":["page","pageSize","total","totalPages","hasMore"]},"ClientTaxSettings":{"type":"object","properties":{"defaultTaxable":{"type":"boolean"},"overrideTaxRate":{"type":"boolean"},"taxRate":{"type":["number","null"],"minimum":0,"maximum":100}},"required":["defaultTaxable","overrideTaxRate","taxRate"]},"ClientRecurringBilling":{"type":"object","properties":{"status":{"type":"string","enum":["active","past_due","paused","suspended","pending_setup"]},"nextBillingDate":{"type":["string","null"],"format":"date"}},"required":["status","nextBillingDate"]},"Client":{"type":"object","properties":{"id":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"name":{"type":"string","minLength":1,"maxLength":200},"status":{"type":"string","enum":["new","contacted","qualified","active","inactive","declined","spam"]},"businessId":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"notes":{"type":["string","null"]},"taxSettings":{"$ref":"#/components/schemas/ClientTaxSettings"},"invoiceRemindersEnabled":{"type":"boolean"},"attachInvoicePdf":{"type":"boolean"},"attachReceiptPdf":{"type":"boolean"},"recurringBilling":{"allOf":[{"$ref":"#/components/schemas/ClientRecurringBilling"},{"type":["object","null"]}]},"sourceSubmissionId":{"type":["string","null"],"format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"createdAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"},"updatedAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"}},"required":["id","name","status","businessId","notes","taxSettings","invoiceRemindersEnabled","attachInvoicePdf","attachReceiptPdf","recurringBilling","sourceSubmissionId","createdAt","updatedAt"]},"ClientCreate":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":200},"status":{"type":"string","enum":["new","contacted","qualified","active","inactive","declined","spam"],"default":"active"},"businessId":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"notes":{"type":"string"},"taxSettings":{"$ref":"#/components/schemas/ClientTaxSettings"},"invoiceRemindersEnabled":{"type":"boolean"},"attachInvoicePdf":{"type":"boolean"},"attachReceiptPdf":{"type":"boolean"}},"required":["name"]},"ClientUpdate":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":200},"status":{"type":"string","enum":["new","contacted","qualified","active","inactive","declined","spam"]},"notes":{"type":"string"},"taxSettings":{"$ref":"#/components/schemas/ClientTaxSettings"},"invoiceRemindersEnabled":{"type":"boolean"},"attachInvoicePdf":{"type":"boolean"},"attachReceiptPdf":{"type":"boolean"}}},"ClientList":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Client"}},"pagination":{"$ref":"#/components/schemas/PaginationMeta"}},"required":["data","pagination"]},"Contact":{"type":"object","properties":{"id":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"name":{"type":"string"},"email":{"type":["string","null"],"format":"email"},"phone":{"type":["string","null"]},"title":{"type":["string","null"]},"role":{"type":"string","enum":["primary","billing","other"]},"isPrimary":{"type":"boolean"},"clientId":{"type":["string","null"],"format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"sourceSubmissionId":{"type":["string","null"],"format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"createdAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"},"updatedAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"}},"required":["id","name","email","phone","title","role","isPrimary","clientId","sourceSubmissionId","createdAt","updatedAt"]},"ContactCreate":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":200},"email":{"type":"string","format":"email"},"phone":{"type":"string","maxLength":50},"title":{"type":"string","maxLength":200},"role":{"type":"string","enum":["primary","billing","other"],"default":"other"},"isPrimary":{"type":"boolean","default":false},"clientId":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"}},"required":["name"]},"ContactUpdate":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":200},"email":{"type":"string","format":"email"},"phone":{"type":"string","maxLength":50},"title":{"type":"string","maxLength":200},"role":{"type":"string","enum":["primary","billing","other"]},"isPrimary":{"type":"boolean"},"clientId":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"}}},"ContactList":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Contact"}},"pagination":{"$ref":"#/components/schemas/PaginationMeta"}},"required":["data","pagination"]},"Project":{"type":"object","properties":{"id":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"name":{"type":"string"},"clientId":{"type":["string","null"],"format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"businessId":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"status":{"type":"string","enum":["active","paused","completed"]},"pipelineStageId":{"type":["string","null"],"format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"startDate":{"type":["string","null"],"format":"date"},"endDate":{"type":["string","null"],"format":"date"},"eventDate":{"type":["string","null"],"format":"date"},"contractValue":{"type":["number","null"]},"createdAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"},"updatedAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"}},"required":["id","name","clientId","businessId","status","pipelineStageId","startDate","endDate","eventDate","contractValue","createdAt","updatedAt"]},"ProjectCreate":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":200},"clientId":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"status":{"type":"string","enum":["active","paused","completed"],"default":"active"},"pipelineStageId":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"startDate":{"type":"string","format":"date"},"endDate":{"type":"string","format":"date"},"eventDate":{"type":"string","format":"date"},"contractValue":{"type":"number","minimum":0}},"required":["name","clientId"]},"ProjectUpdate":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":200},"clientId":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"status":{"type":"string","enum":["active","paused","completed"]},"pipelineStageId":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"startDate":{"type":"string","format":"date"},"endDate":{"type":"string","format":"date"},"eventDate":{"type":"string","format":"date"},"contractValue":{"type":"number","minimum":0}}},"ProjectList":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Project"}},"pagination":{"$ref":"#/components/schemas/PaginationMeta"}},"required":["data","pagination"]},"InvoiceLineItem":{"type":"object","properties":{"id":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"description":{"type":"string"},"quantity":{"type":"number"},"unitPrice":{"type":"number"},"taxable":{"type":"boolean"},"discountPercent":{"type":["number","null"]},"total":{"type":"number"}},"required":["id","description","quantity","unitPrice","taxable","discountPercent","total"]},"Invoice":{"type":"object","properties":{"id":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"invoiceNumber":{"type":"string"},"clientId":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"billingContactId":{"type":["string","null"],"format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"projectIds":{"type":"array","items":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"}},"status":{"type":"string","enum":["draft","sent","paid","void","written_off"]},"subject":{"type":["string","null"]},"issueDate":{"type":"string","format":"date"},"dueDate":{"type":"string","format":"date"},"currency":{"type":"string"},"subtotal":{"type":"number"},"discountAmount":{"type":"number"},"taxAmount":{"type":"number"},"total":{"type":"number"},"amountPaid":{"type":"number"},"balanceDue":{"type":"number"},"overdue":{"type":"boolean","description":"Derived (read-only): true when the invoice is past its due date with a balance still owing (an open `sent` invoice). Not a stored status."},"supersedesInvoice":{"type":["string","null"],"format":"uuid","description":"Read-only: the voided invoice this one was issued to correct (void & reissue). Null otherwise. To find the forward link — the corrected invoice that replaced a given one — list with `?supersedesInvoice={id}`.","example":"550e8400-e29b-41d4-a716-446655440000"},"paymentTerms":{"type":["string","null"]},"notes":{"type":["string","null"]},"paidAt":{"type":["string","null"],"format":"date-time","description":"ISO 8601 timestamp (UTC)"},"lineItems":{"type":"array","items":{"$ref":"#/components/schemas/InvoiceLineItem"}},"createdAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"},"updatedAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"}},"required":["id","invoiceNumber","clientId","billingContactId","projectIds","status","subject","issueDate","dueDate","currency","subtotal","discountAmount","taxAmount","total","amountPaid","balanceDue","overdue","supersedesInvoice","paymentTerms","notes","paidAt","lineItems","createdAt","updatedAt"]},"InvoiceCreate":{"type":"object","properties":{"clientId":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"billingContactId":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"projectIds":{"type":"array","items":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"}},"status":{"type":"string","enum":["draft","sent"],"default":"draft"},"subject":{"type":"string","maxLength":500},"issueDate":{"type":"string","format":"date"},"dueDate":{"type":"string","format":"date"},"paymentTerms":{"type":"string","maxLength":500},"notes":{"type":"string","maxLength":5000},"lineItems":{"type":"array","items":{"type":"object","properties":{"description":{"type":"string","minLength":1,"maxLength":500},"quantity":{"type":"number","exclusiveMinimum":0},"unitPrice":{"type":"number","minimum":0},"taxable":{"type":"boolean","default":false},"discountPercent":{"type":"number","minimum":0,"maximum":100}},"required":["description","quantity","unitPrice"]},"minItems":1}},"required":["clientId","lineItems"]},"InvoiceUpdate":{"type":"object","properties":{"billingContactId":{"type":["string","null"],"format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"projectIds":{"type":"array","items":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"}},"status":{"type":"string","enum":["sent","void"]},"subject":{"type":["string","null"],"maxLength":500},"issueDate":{"type":"string","format":"date"},"dueDate":{"type":"string","format":"date"},"paymentTerms":{"type":["string","null"],"maxLength":500},"notes":{"type":["string","null"],"maxLength":5000}}},"InvoiceList":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Invoice"}},"pagination":{"$ref":"#/components/schemas/PaginationMeta"}},"required":["data","pagination"]},"ContractSigner":{"type":"object","properties":{"contactId":{"type":["string","null"],"format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"name":{"type":"string"},"email":{"anyOf":[{"type":"string","format":"email"},{"type":"string","enum":[""]}]},"role":{"type":"string"},"order":{"type":"integer"},"status":{"type":"string"},"signedAt":{"type":["string","null"],"format":"date-time","description":"ISO 8601 timestamp (UTC)"}},"required":["contactId","name","email","role","order","status","signedAt"]},"Contract":{"type":"object","properties":{"id":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"contractNumber":{"type":"string"},"title":{"type":"string"},"clientId":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"billingContactId":{"type":["string","null"],"format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"projectId":{"type":["string","null"],"format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"sourceTemplateId":{"type":["string","null"],"format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"status":{"type":"string","enum":["draft","sent","viewed","active","completed","expired","voided"]},"signingMode":{"type":"string","enum":["client_only","counter_sign","auto_counter_sign"]},"contentType":{"type":"string","enum":["tiptap","pdf"]},"issueDate":{"type":["string","null"],"format":"date"},"effectiveDate":{"type":["string","null"],"format":"date"},"expirationDate":{"type":["string","null"],"format":"date"},"signedDate":{"type":["string","null"],"format":"date-time","description":"ISO 8601 timestamp (UTC)"},"currency":{"type":"string"},"contractValue":{"type":["number","null"]},"signers":{"type":"array","items":{"type":"object","properties":{"contactId":{"type":["string","null"],"format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"name":{"type":"string"},"email":{"anyOf":[{"type":"string","format":"email"},{"type":"string","enum":[""]}]},"role":{"type":"string"},"order":{"type":"integer"},"status":{"type":"string"},"signedAt":{"type":["string","null"],"format":"date-time","description":"ISO 8601 timestamp (UTC)"}},"required":["contactId","name","email","role","order","status","signedAt"]}},"archived":{"type":"boolean"},"archivedAt":{"type":["string","null"],"format":"date-time","description":"ISO 8601 timestamp (UTC)"},"createdAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"},"updatedAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"}},"required":["id","contractNumber","title","clientId","billingContactId","projectId","sourceTemplateId","status","signingMode","contentType","issueDate","effectiveDate","expirationDate","signedDate","currency","contractValue","signers","archived","archivedAt","createdAt","updatedAt"]},"ContractCreate":{"type":"object","properties":{"title":{"type":"string","minLength":1,"maxLength":300},"clientId":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"billingContactId":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"projectId":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"sourceTemplateId":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"issueDate":{"type":"string","format":"date"},"effectiveDate":{"type":"string","format":"date"},"expirationDate":{"type":"string","format":"date"},"contractValue":{"type":"number","minimum":0}},"required":["title","clientId"]},"ContractUpdate":{"type":"object","properties":{"title":{"type":"string","minLength":1,"maxLength":300},"effectiveDate":{"type":["string","null"],"format":"date"},"expirationDate":{"type":["string","null"],"format":"date"},"archived":{"type":"boolean"}}},"ContractList":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Contract"}},"pagination":{"$ref":"#/components/schemas/PaginationMeta"}},"required":["data","pagination"]},"ClientDocument":{"type":"object","properties":{"id":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"kind":{"type":"string","enum":["smart-file"]},"title":{"type":["string","null"]},"status":{"type":"string","enum":["draft","sent","viewed","in_progress","accepted","completed","expired","void"]},"contactId":{"type":["string","null"],"format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"clientId":{"type":["string","null"],"format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"projectId":{"type":["string","null"],"format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"engagementProjectId":{"type":["string","null"],"format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"isTemplate":{"type":"boolean"},"clientUrl":{"type":["string","null"]},"quoteConvertedAt":{"type":["string","null"],"format":"date-time","description":"ISO 8601 timestamp (UTC)"},"expiresAt":{"type":["string","null"],"format":"date-time","description":"ISO 8601 timestamp (UTC)"},"archivedAt":{"type":["string","null"],"format":"date-time","description":"ISO 8601 timestamp (UTC)"},"createdAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"},"updatedAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"}},"required":["id","kind","title","status","contactId","clientId","projectId","engagementProjectId","isTemplate","clientUrl","quoteConvertedAt","expiresAt","archivedAt","createdAt","updatedAt"]},"ClientDocumentList":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/ClientDocument"}},"pagination":{"$ref":"#/components/schemas/PaginationMeta"}},"required":["data","pagination"]},"DocumentRef":{"type":"object","properties":{"relationTo":{"type":"string","example":"invoices"},"value":{"type":"string"}},"required":["relationTo","value"]},"DocumentVersion":{"type":"object","properties":{"id":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"documentType":{"type":"string","enum":["smart-file","invoice","standalone-contract"]},"documentId":{"type":["string","null"],"format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"documentRef":{"allOf":[{"$ref":"#/components/schemas/DocumentRef"},{"type":["object","null"]}]},"versionNumber":{"type":"integer"},"subVersionNumber":{"type":"integer"},"versionStatus":{"type":"string","enum":["issued","superseded","voided"]},"contentHash":{"type":"string"},"currency":{"type":"string"},"issuedAt":{"type":["string","null"],"format":"date-time","description":"ISO 8601 timestamp (UTC)"},"viewedAt":{"type":["string","null"],"format":"date-time","description":"ISO 8601 timestamp (UTC)"},"acceptedAt":{"type":["string","null"],"format":"date-time","description":"ISO 8601 timestamp (UTC)"},"acceptedBy":{"type":["string","null"],"enum":["client","operator","signing","backfill",null]},"supersededAt":{"type":["string","null"],"format":"date-time","description":"ISO 8601 timestamp (UTC)"},"supersededByVersionId":{"type":["string","null"],"format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"voidedAt":{"type":["string","null"],"format":"date-time","description":"ISO 8601 timestamp (UTC)"},"quoteConvertedAt":{"type":["string","null"],"format":"date-time","description":"ISO 8601 timestamp (UTC)"},"expiresAt":{"type":["string","null"],"format":"date-time","description":"ISO 8601 timestamp (UTC)"},"engagementProjectId":{"type":["string","null"],"format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"parentVersionId":{"type":["string","null"],"format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"createdAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"},"updatedAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"}},"required":["id","documentType","documentId","documentRef","versionNumber","subVersionNumber","versionStatus","contentHash","currency","issuedAt","viewedAt","acceptedAt","acceptedBy","supersededAt","supersededByVersionId","voidedAt","quoteConvertedAt","expiresAt","engagementProjectId","parentVersionId","createdAt","updatedAt"]},"DocumentVersionList":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/DocumentVersion"}},"pagination":{"$ref":"#/components/schemas/PaginationMeta"}},"required":["data","pagination"]},"Form":{"type":"object","properties":{"id":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"name":{"type":"string"},"title":{"type":["string","null"]},"description":{"type":["string","null"]},"kind":{"type":"string","enum":["inquiry","questionnaire"]},"slug":{"type":["string","null"]},"enabled":{"type":"boolean"},"isDefault":{"type":"boolean"},"createdAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"},"updatedAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"}},"required":["id","name","title","description","kind","slug","enabled","isDefault","createdAt","updatedAt"]},"FormList":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Form"}},"pagination":{"$ref":"#/components/schemas/PaginationMeta"}},"required":["data","pagination"]},"FormSubmissionAttachment":{"type":"object","properties":{"id":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"filename":{"type":"string"},"mimeType":{"type":["string","null"]},"filesize":{"type":["integer","null"]}},"required":["id","filename","mimeType","filesize"]},"FormSubmissionAnswer":{"type":"object","properties":{"fieldId":{"type":"string"},"question":{"type":"string"},"answer":{"type":"string"},"attachments":{"type":"array","items":{"$ref":"#/components/schemas/FormSubmissionAttachment"}}},"required":["fieldId","question","answer"]},"FormSubmission":{"type":"object","properties":{"id":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"formId":{"type":["string","null"],"format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"kind":{"type":["string","null"],"enum":["inquiry","questionnaire",null]},"status":{"type":"string","enum":["in_progress","submitted"]},"contactId":{"type":["string","null"],"format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"clientId":{"type":["string","null"],"format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"source":{"type":["string","null"]},"submittedAt":{"type":["string","null"],"format":"date"},"answers":{"type":["array","null"],"items":{"$ref":"#/components/schemas/FormSubmissionAnswer"}},"createdAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"},"updatedAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"}},"required":["id","formId","kind","status","contactId","clientId","source","submittedAt","answers","createdAt","updatedAt"]},"FormSubmissionList":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/FormSubmission"}},"pagination":{"$ref":"#/components/schemas/PaginationMeta"}},"required":["data","pagination"]},"Inquiry":{"type":"object","properties":{"id":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"status":{"type":"string","enum":["received"]},"clientId":{"type":["string","null"],"format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"contactId":{"type":["string","null"],"format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"submissionId":{"type":["string","null"],"format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"}},"required":["id","status","clientId","contactId","submissionId"]},"InquiryCreate":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":200,"example":"Jane Doe"},"email":{"type":"string","format":"email","example":"jane@example.com"},"phone":{"type":"string","maxLength":50},"preferredDate":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","example":"2026-09-12"},"message":{"type":"string","maxLength":5000},"fields":{"type":"object","additionalProperties":{"anyOf":[{"type":"string","maxLength":5000},{"type":"array","items":{"type":"string","maxLength":5000},"maxItems":50}]},"example":{"Event Type":"Wedding","Venue":"The Grand Hall"}}},"required":["name","email"]},"Payment":{"type":"object","properties":{"id":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"clientId":{"type":["string","null"],"format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"invoiceId":{"type":["string","null"],"format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"saleId":{"type":["string","null"],"format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"amount":{"type":"number"},"currency":{"type":"string"},"receivedDate":{"type":"string","format":"date"},"method":{"type":"string","enum":["stripe","check","bank_transfer","cash","venmo","zelle","paypal","wire","other"]},"status":{"type":"string","enum":["pending","processing","succeeded","failed"]},"kind":{"type":"string","enum":["payment","refund","chargeback","dispute_fee","adjustment"]},"reference":{"type":["string","null"]},"notes":{"type":["string","null"]},"netAmount":{"type":["number","null"]},"payoutId":{"type":["string","null"],"format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"refundOfId":{"type":["string","null"],"format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"createdAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"},"updatedAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"}},"required":["id","clientId","invoiceId","saleId","amount","currency","receivedDate","method","status","kind","reference","notes","netAmount","payoutId","refundOfId","createdAt","updatedAt"]},"PaymentCreate":{"type":"object","properties":{"clientId":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"invoiceId":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"amount":{"type":"number"},"currency":{"type":"string","minLength":3,"maxLength":3,"default":"USD"},"receivedDate":{"type":"string","format":"date"},"method":{"type":"string","enum":["check","bank_transfer","cash","venmo","zelle","paypal","wire","other"]},"kind":{"type":"string","enum":["payment","refund","adjustment"],"default":"payment"},"reference":{"type":"string","maxLength":200},"notes":{"type":"string","maxLength":2000},"refundOfId":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"}},"required":["clientId","amount","receivedDate","method"]},"PaymentUpdate":{"type":"object","properties":{"reference":{"type":["string","null"],"maxLength":200},"notes":{"type":["string","null"],"maxLength":2000}}},"PaymentList":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Payment"}},"pagination":{"$ref":"#/components/schemas/PaginationMeta"}},"required":["data","pagination"]},"Payout":{"type":"object","properties":{"id":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"stripePayoutId":{"type":"string"},"amount":{"type":"number"},"currency":{"type":"string"},"arrivalDate":{"type":["string","null"],"format":"date"},"status":{"type":"string","enum":["pending","in_transit","paid","failed","canceled"]},"type":{"type":"string"},"automatic":{"type":"boolean"},"description":{"type":["string","null"]},"bankAccountLast4":{"type":["string","null"]},"bankAccountName":{"type":["string","null"]},"grossTotal":{"type":["number","null"],"description":"Read-only: the gross amount of the payments that settled in this deposit. `null` means NOT MEASURED — this deposit has not been reconciled yet (`lastReconciledAt` is null), so nobody has counted what is in it. It does NOT mean the deposit contained no payments; do not coalesce it to 0.","example":0},"feeTotal":{"type":["number","null"],"description":"Read-only: the Stripe processing fees withheld from the payments in this deposit. `null` means NOT MEASURED — see `lastReconciledAt`. It is not a fee-free deposit.","example":0},"refundTotal":{"type":["number","null"],"description":"Read-only: the refunds included in this deposit, as a positive amount. `null` means NOT MEASURED — see `lastReconciledAt`. It is not a refund-free deposit.","example":0},"disputeTotal":{"type":["number","null"],"description":"Read-only: the dispute withdrawals — chargebacks and dispute fees — Stripe took out of this deposit, as a positive amount. Bucketed apart from fees and refunds so the deposit reconciles: `grossTotal - feeTotal - refundTotal - disputeTotal + unattributedTotal = amount`. `null` means NOT RECORDED, and it does NOT mean \"this deposit had no disputes\": the deposit was reconciled before dispute withdrawals were bucketed separately, or it has not been reconciled yet. A dispute inside such a deposit was counted in `paymentCount` and landed in no bucket, so on those rows the identity above is short by exactly the dispute amount — which is why this reads `null` rather than `0`. `0` means the deposit was examined and carried no dispute activity. Unlike `unattributedTotal`, this applies to automatic and manual payouts alike — there is no arm on which the question does not apply.","example":0},"unattributedTotal":{"type":["number","null"],"description":"Read-only. On a MANUAL payout: how much of this deposit could not be matched to a payment. Stripe does not report which payments a manual payout contained, so the deposit is reconstructed from the balance transactions available when it was requested, and this is the remainder. THREE DISTINCT STATES, and `null` is not one of the numbers: `null` means NOT RECORDED — either the question does not apply (an `automatic` payout, whose contents Stripe reports exactly) or it was never asked (a payout synced before this field existed). It does NOT mean zero, and no backfill will ever turn it into one, because the true value cannot be recomputed without re-asking Stripe. `0` means the reconstruction ran and every balance transaction in the deposit was matched to a payment. A value greater than 0 is real money in this deposit that no payment accounts for — it is not a fee, not a refund, and not a dispute. Do not coalesce `null` to 0: that reports a tie-out nobody verified. Use the `automatic` field on this same object to tell \"not applicable\" from \"not recorded\".","example":0},"paymentCount":{"type":["integer","null"],"description":"Read-only: how many payments this deposit was found to contain. `null` means NOT COUNTED — this deposit has not been reconciled (`lastReconciledAt` is null). A deposit that was walked and genuinely contained nothing reads `0`; the two are different facts and this field keeps them apart.","example":0},"lastReconciledAt":{"type":["string","null"],"format":"date-time","description":"Read-only: when this deposit was last reconciled — when we last matched it against your payments and computed the totals on this object. `null` means IT NEVER HAS BEEN: `grossTotal`, `feeTotal`, `refundTotal` and `paymentCount` are all `null` too, and every one of them is unknown rather than zero. Render such a deposit as un-reconciled; its `amount`, `arrivalDate`, `status` and `automatic` come straight from Stripe and remain trustworthy. A non-null value does NOT imply every total is a number: `disputeTotal` stays `null` on deposits reconciled before dispute withdrawals were bucketed separately, and on those rows the reconciliation identity is short by exactly the dispute amount. ⚠️ Deposits reconciled before this field existed carry a BACKFILLED value — the row’s last-modified time, which for those rows is the instant of that deposit’s last sync. It is accurate to the sync, not independently observed, so treat it at day resolution.","example":"2026-08-20T14:32:07.000Z"},"failureCode":{"type":["string","null"]},"failureMessage":{"type":["string","null"]},"createdAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"},"updatedAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"}},"required":["id","stripePayoutId","amount","currency","arrivalDate","status","type","automatic","description","bankAccountLast4","bankAccountName","grossTotal","feeTotal","refundTotal","disputeTotal","unattributedTotal","paymentCount","lastReconciledAt","failureCode","failureMessage","createdAt","updatedAt"]},"PayoutList":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Payout"}},"pagination":{"$ref":"#/components/schemas/PaginationMeta"}},"required":["data","pagination"]},"Sale":{"type":"object","properties":{"id":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"saleNumber":{"type":"string"},"businessId":{"type":["string","null"],"format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"clientId":{"type":["string","null"],"format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"contactId":{"type":["string","null"],"format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"channel":{"type":"string","enum":["pos","manual","stripe","shopify","etsy","square-import","api"]},"externalId":{"type":["string","null"]},"saleDate":{"type":"string","format":"date"},"currency":{"type":"string"},"status":{"type":"string","enum":["completed","refunded","partially-refunded","voided"]},"voidedAt":{"type":["string","null"],"format":"date-time","description":"ISO 8601 timestamp (UTC)"},"voidReason":{"type":["string","null"]},"taxJurisdiction":{"type":["string","null"]},"taxInclusive":{"type":"boolean"},"subtotal":{"type":["number","null"]},"discountPercent":{"type":["number","null"]},"discountAmount":{"type":["number","null"]},"taxRate":{"type":["number","null"]},"taxAmount":{"type":["number","null"]},"total":{"type":["number","null"]},"amountRefunded":{"type":"number"},"notes":{"type":["string","null"]},"createdAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"},"updatedAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"}},"required":["id","saleNumber","businessId","clientId","contactId","channel","externalId","saleDate","currency","status","voidedAt","voidReason","taxJurisdiction","taxInclusive","subtotal","discountPercent","discountAmount","taxRate","taxAmount","total","amountRefunded","notes","createdAt","updatedAt"]},"SaleList":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Sale"}},"pagination":{"$ref":"#/components/schemas/PaginationMeta"}},"required":["data","pagination"]},"TimeEntry":{"type":"object","properties":{"id":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"projectId":{"type":["string","null"],"format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"clientId":{"type":["string","null"],"format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"memberId":{"type":["string","null"],"format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"catalogItemId":{"type":["string","null"],"format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"date":{"type":"string","format":"date"},"hours":{"type":"number"},"description":{"type":["string","null"]},"billable":{"type":"boolean"},"rateType":{"type":"string","enum":["standard","overtime","emergency","custom"]},"customMultiplierName":{"type":["string","null"]},"rateOverride":{"type":["number","null"]},"effectiveRate":{"type":["number","null"]},"workerName":{"type":["string","null"]},"createdAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"},"updatedAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"}},"required":["id","projectId","clientId","memberId","catalogItemId","date","hours","description","billable","rateType","customMultiplierName","rateOverride","effectiveRate","workerName","createdAt","updatedAt"]},"TimeEntryCreate":{"type":"object","properties":{"projectId":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"memberId":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"catalogItemId":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"date":{"type":"string","format":"date"},"hours":{"type":"number","exclusiveMinimum":0},"description":{"type":"string","maxLength":2000},"billable":{"type":"boolean","default":true},"rateType":{"type":"string","enum":["standard","overtime","emergency","custom"],"default":"standard"},"customMultiplierName":{"type":"string","maxLength":100},"rateOverride":{"type":"number","minimum":0},"workerName":{"type":"string","maxLength":200}},"required":["projectId","memberId","date","hours"]},"TimeEntryUpdate":{"type":"object","properties":{"projectId":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"memberId":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"catalogItemId":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"date":{"type":"string","format":"date"},"hours":{"type":"number","exclusiveMinimum":0},"description":{"type":"string","maxLength":2000},"billable":{"type":"boolean"},"rateType":{"type":"string","enum":["standard","overtime","emergency","custom"]},"customMultiplierName":{"type":"string","maxLength":100},"rateOverride":{"type":"number","minimum":0},"workerName":{"type":"string","maxLength":200}}},"TimeEntryList":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/TimeEntry"}},"pagination":{"$ref":"#/components/schemas/PaginationMeta"}},"required":["data","pagination"]},"Milestone":{"type":"object","properties":{"id":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"parentType":{"type":"string","enum":["projects","client-documents"]},"parentId":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"title":{"type":"string"},"description":{"type":["string","null"]},"date":{"type":["string","null"],"format":"date"},"time":{"type":["string","null"]},"status":{"type":"string","enum":["pending","in-progress","completed"]},"completedAt":{"type":["string","null"],"format":"date-time","description":"ISO 8601 timestamp (UTC)"},"assigneeId":{"type":["string","null"],"format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"catalogItemId":{"type":["string","null"],"format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"sortOrder":{"type":"integer"},"createdAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"},"updatedAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"}},"required":["id","parentType","parentId","title","description","date","time","status","completedAt","assigneeId","catalogItemId","sortOrder","createdAt","updatedAt"]},"MilestoneCreate":{"type":"object","properties":{"parentType":{"type":"string","enum":["projects","client-documents"]},"parentId":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"title":{"type":"string","minLength":1,"maxLength":300},"description":{"type":"string","maxLength":2000},"date":{"type":"string","format":"date"},"time":{"type":"string","pattern":"^\\d{2}:\\d{2}$"},"status":{"type":"string","enum":["pending","in-progress","completed"],"default":"pending"},"assigneeId":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"catalogItemId":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"sortOrder":{"type":"integer"}},"required":["parentType","parentId","title","date"]},"MilestoneUpdate":{"type":"object","properties":{"title":{"type":"string","minLength":1,"maxLength":300},"description":{"type":["string","null"],"maxLength":2000},"date":{"type":["string","null"],"format":"date"},"time":{"type":["string","null"],"pattern":"^\\d{2}:\\d{2}$"},"status":{"type":"string","enum":["pending","in-progress","completed"]},"assigneeId":{"type":["string","null"],"format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"catalogItemId":{"type":["string","null"],"format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"sortOrder":{"type":"integer"}}},"MilestoneList":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Milestone"}},"pagination":{"$ref":"#/components/schemas/PaginationMeta"}},"required":["data","pagination"]},"CalendarEvent":{"type":"object","properties":{"id":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"title":{"type":"string"},"description":{"type":["string","null"]},"startDateTime":{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"},"endDateTime":{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"},"allDay":{"type":"boolean"},"projectId":{"type":["string","null"],"format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"clientId":{"type":["string","null"],"format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"actionable":{"type":"boolean"},"completedAt":{"type":["string","null"],"format":"date-time","description":"ISO 8601 timestamp (UTC)"},"recurring":{"type":"boolean"},"rrule":{"type":["string","null"]},"recurrenceEnd":{"type":["string","null"],"format":"date-time","description":"ISO 8601 timestamp (UTC)"},"source":{"type":"string","enum":["manual","google","microsoft","apple"]},"readOnly":{"type":"boolean"},"createdAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"},"updatedAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"}},"required":["id","title","description","startDateTime","endDateTime","allDay","projectId","clientId","actionable","completedAt","recurring","rrule","recurrenceEnd","source","readOnly","createdAt","updatedAt"]},"CalendarEventCreate":{"type":"object","properties":{"title":{"type":"string","minLength":1,"maxLength":300},"description":{"type":"string","maxLength":5000},"startDateTime":{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"},"endDateTime":{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"},"allDay":{"type":"boolean","default":false},"projectId":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"clientId":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"actionable":{"type":"boolean","default":false},"recurring":{"type":"boolean","default":false},"rrule":{"type":"string","maxLength":500},"recurrenceEnd":{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"}},"required":["title","startDateTime","endDateTime"]},"CalendarEventUpdate":{"type":"object","properties":{"title":{"type":"string","minLength":1,"maxLength":300},"description":{"type":["string","null"],"maxLength":5000},"startDateTime":{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"},"endDateTime":{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"},"allDay":{"type":"boolean"},"projectId":{"type":["string","null"],"format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"clientId":{"type":["string","null"],"format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"actionable":{"type":"boolean"},"recurring":{"type":"boolean"},"rrule":{"type":["string","null"],"maxLength":500},"recurrenceEnd":{"type":["string","null"],"format":"date-time","description":"ISO 8601 timestamp (UTC)"},"completedAt":{"type":["string","null"],"format":"date-time","description":"ISO 8601 timestamp (UTC)"}}},"CalendarEventList":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/CalendarEvent"}},"pagination":{"$ref":"#/components/schemas/PaginationMeta"}},"required":["data","pagination"]},"TransactionAssignment":{"type":"object","properties":{"id":{"type":["string","null"],"minLength":1,"description":"Opaque array-row identifier (not a UUID)","example":"68b9e3d1c4a2f70012ab34cd"},"projectId":{"type":["string","null"],"format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"clientId":{"type":["string","null"],"format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"amount":{"type":["number","null"]},"percentage":{"type":["number","null"]},"fixedAmount":{"type":["number","null"]},"startDate":{"type":["string","null"],"format":"date"},"endDate":{"type":["string","null"],"format":"date"},"allocationKey":{"type":["string","null"]}},"required":["id","projectId","clientId","amount","percentage","fixedAmount","startDate","endDate","allocationKey"]},"Transaction":{"type":"object","properties":{"id":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"name":{"type":"string"},"businessId":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"catalogItemId":{"type":["string","null"],"format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"taxCategoryId":{"type":["string","null"],"format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"amount":{"type":["number","null"]},"frequency":{"type":"string","enum":["one-time","monthly","quarterly","annual"]},"direction":{"type":"string","enum":["cost","revenue"]},"mode":{"type":"string","enum":["each","split","global"]},"splitEvenly":{"type":["boolean","null"]},"assignments":{"type":"array","items":{"type":"object","properties":{"id":{"type":["string","null"],"minLength":1,"description":"Opaque array-row identifier (not a UUID)","example":"68b9e3d1c4a2f70012ab34cd"},"projectId":{"type":["string","null"],"format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"clientId":{"type":["string","null"],"format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"amount":{"type":["number","null"]},"percentage":{"type":["number","null"]},"fixedAmount":{"type":["number","null"]},"startDate":{"type":["string","null"],"format":"date"},"endDate":{"type":["string","null"],"format":"date"},"allocationKey":{"type":["string","null"]}},"required":["id","projectId","clientId","amount","percentage","fixedAmount","startDate","endDate","allocationKey"]}},"passThrough":{"type":["boolean","null"]},"markupPercent":{"type":["number","null"]},"billedAmount":{"type":["number","null"]},"startDate":{"type":["string","null"],"format":"date"},"endDate":{"type":["string","null"],"format":"date"},"notes":{"type":["string","null"]},"vendorName":{"type":["string","null"]},"vendorEmail":{"type":["string","null"],"format":"email"},"vendorTaxId":{"type":["string","null"]},"receiptVerified":{"type":"boolean"},"status":{"type":"string","enum":["active","paused","archived"]},"createdAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"},"updatedAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"}},"required":["id","name","businessId","catalogItemId","taxCategoryId","amount","frequency","direction","mode","splitEvenly","assignments","passThrough","markupPercent","billedAmount","startDate","endDate","notes","vendorName","vendorEmail","vendorTaxId","receiptVerified","status","createdAt","updatedAt"]},"TransactionCreate":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":300},"businessId":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"catalogItemId":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"taxCategoryId":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"amount":{"type":"number","exclusiveMinimum":0},"frequency":{"type":"string","enum":["one-time","monthly","quarterly","annual"],"default":"one-time"},"direction":{"type":"string","enum":["cost","revenue"]},"mode":{"type":"string","enum":["each","split","global"],"default":"each"},"splitEvenly":{"type":"boolean"},"assignments":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"description":"Opaque array-row identifier (not a UUID)","example":"68b9e3d1c4a2f70012ab34cd"},"projectId":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"clientId":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"amount":{"type":"number"},"percentage":{"type":"number","minimum":0,"maximum":100},"fixedAmount":{"type":"number"},"startDate":{"type":"string","format":"date"},"endDate":{"type":"string","format":"date"},"allocationKey":{"type":"string"}}}},"passThrough":{"type":"boolean"},"markupPercent":{"type":"number","minimum":0},"startDate":{"type":"string","format":"date"},"endDate":{"type":"string","format":"date"},"notes":{"type":"string","maxLength":2000},"vendorName":{"type":"string","maxLength":200},"vendorEmail":{"type":"string","format":"email"},"vendorTaxId":{"type":"string","maxLength":50},"status":{"type":"string","enum":["active","paused","archived"],"default":"active"}},"required":["name","amount","direction"]},"TransactionUpdate":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":300},"catalogItemId":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"taxCategoryId":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"amount":{"type":"number","exclusiveMinimum":0},"frequency":{"type":"string","enum":["one-time","monthly","quarterly","annual"]},"direction":{"type":"string","enum":["cost","revenue"]},"mode":{"type":"string","enum":["each","split","global"]},"splitEvenly":{"type":"boolean"},"assignments":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"description":"Opaque array-row identifier (not a UUID)","example":"68b9e3d1c4a2f70012ab34cd"},"projectId":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"clientId":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"amount":{"type":"number"},"percentage":{"type":"number","minimum":0,"maximum":100},"fixedAmount":{"type":"number"},"startDate":{"type":"string","format":"date"},"endDate":{"type":"string","format":"date"},"allocationKey":{"type":"string"}}}},"passThrough":{"type":"boolean"},"markupPercent":{"type":"number","minimum":0},"startDate":{"type":"string","format":"date"},"endDate":{"type":"string","format":"date"},"notes":{"type":"string","maxLength":2000},"vendorName":{"type":"string","maxLength":200},"vendorEmail":{"type":"string","format":"email"},"vendorTaxId":{"type":"string","maxLength":50},"status":{"type":"string","enum":["active","paused","archived"]}}},"TransactionList":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Transaction"}},"pagination":{"$ref":"#/components/schemas/PaginationMeta"}},"required":["data","pagination"]},"CatalogItem":{"type":"object","properties":{"id":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"name":{"type":"string"},"businessId":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"invoiceLabel":{"type":["string","null"]},"description":{"type":["string","null"]},"invoiceDescription":{"type":["string","null"]},"defaultRate":{"type":["number","null"]},"unit":{"type":"string","enum":["flat","hour","each"]},"defaultFrequency":{"type":"string","enum":["one-time","monthly","quarterly","annual"]},"type":{"type":"string","enum":["expense","charge"]},"pricingMode":{"type":"string","enum":["fixed","hourly","bom"]},"composition":{"type":"string","enum":["atom","bundle"]},"bundlePriceMode":{"type":["string","null"],"enum":["sum","fixed",null]},"bundleFixedPrice":{"type":["number","null"]},"taxCategoryId":{"type":["string","null"],"format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"status":{"type":"string","enum":["active","paused","archived"]},"clientId":{"type":["string","null"],"format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"createdAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"},"updatedAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"}},"required":["id","name","businessId","invoiceLabel","description","invoiceDescription","defaultRate","unit","defaultFrequency","type","pricingMode","composition","bundlePriceMode","bundleFixedPrice","taxCategoryId","status","clientId","createdAt","updatedAt"]},"CatalogItemCreate":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":200},"businessId":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"invoiceLabel":{"type":"string","maxLength":200},"description":{"type":"string","maxLength":2000},"invoiceDescription":{"type":"string","maxLength":2000},"defaultRate":{"type":"number","minimum":0},"unit":{"type":"string","enum":["flat","hour","each"],"default":"flat"},"defaultFrequency":{"type":"string","enum":["one-time","monthly","quarterly","annual"],"default":"one-time"},"type":{"type":"string","enum":["expense","charge"]},"pricingMode":{"type":"string","enum":["fixed","hourly","bom"],"default":"fixed"},"taxCategoryId":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"status":{"type":"string","enum":["active","paused","archived"],"default":"active"},"clientId":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"}},"required":["name","type"]},"CatalogItemUpdate":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":200},"invoiceLabel":{"type":"string","maxLength":200},"description":{"type":"string","maxLength":2000},"invoiceDescription":{"type":"string","maxLength":2000},"defaultRate":{"type":"number","minimum":0},"unit":{"type":"string","enum":["flat","hour","each"]},"defaultFrequency":{"type":"string","enum":["one-time","monthly","quarterly","annual"]},"type":{"type":"string","enum":["expense","charge"]},"pricingMode":{"type":"string","enum":["fixed","hourly","bom"]},"taxCategoryId":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"status":{"type":"string","enum":["active","paused","archived"]},"clientId":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"}}},"CatalogItemList":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/CatalogItem"}},"pagination":{"$ref":"#/components/schemas/PaginationMeta"}},"required":["data","pagination"]},"EventDay":{"type":"object","properties":{"id":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"projectId":{"type":["string","null"],"format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"clientId":{"type":["string","null"],"format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"name":{"type":["string","null"]},"date":{"type":["string","null"],"format":"date"},"status":{"type":"string","enum":["draft","published","archived"]},"ceremonyTime":{"type":["string","null"]},"eventStartTime":{"type":["string","null"]},"venueTimezone":{"type":["string","null"]},"venueAddress":{"$ref":"#/components/schemas/VenueAddress"},"venueNotes":{"type":["string","null"]},"dayStartMinute":{"type":["integer","null"]},"dayEndMinute":{"type":["integer","null"]},"customAnchors":{"type":"array","items":{"$ref":"#/components/schemas/EventDayCustomAnchor"}},"isPrimary":{"type":"boolean"},"sortOrder":{"type":"integer"},"createdAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"},"updatedAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"}},"required":["id","projectId","clientId","name","date","status","ceremonyTime","eventStartTime","venueTimezone","venueAddress","venueNotes","dayStartMinute","dayEndMinute","customAnchors","isPrimary","sortOrder","createdAt","updatedAt"]},"VenueAddress":{"type":["object","null"],"properties":{"name":{"type":["string","null"]},"street":{"type":["string","null"]},"city":{"type":["string","null"]},"state":{"type":["string","null"]},"zip":{"type":["string","null"]},"country":{"type":["string","null"]}},"required":["name","street","city","state","zip","country"]},"EventDayCustomAnchor":{"type":"object","properties":{"key":{"type":"string"},"label":{"type":["string","null"]},"time":{"type":["string","null"]}},"required":["key","label","time"]},"EventDayCreate":{"type":"object","properties":{"name":{"type":"string","maxLength":300},"date":{"type":"string","format":"date"},"status":{"type":"string","enum":["draft","published","archived"],"default":"draft"},"projectId":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"clientId":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"ceremonyTime":{"type":"string","pattern":"^\\d{2}:\\d{2}$"},"eventStartTime":{"type":"string","pattern":"^\\d{2}:\\d{2}$"},"venueAddress":{"type":"object","properties":{"name":{"type":"string","maxLength":300},"street":{"type":"string","maxLength":300},"city":{"type":"string","maxLength":200},"state":{"type":"string","maxLength":200},"zip":{"type":"string","maxLength":40},"country":{"type":"string","maxLength":120}}},"venueNotes":{"type":"string","maxLength":2000},"dayStartMinute":{"type":"integer","minimum":0,"maximum":2880},"dayEndMinute":{"type":"integer","minimum":0,"maximum":2880},"customAnchors":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"maxLength":120},"label":{"type":"string","maxLength":300},"time":{"type":"string","pattern":"^\\d{2}:\\d{2}$"}},"required":["key"]}},"isPrimary":{"type":"boolean"},"sortOrder":{"type":"integer"}},"required":["date"]},"EventDayUpdate":{"type":"object","properties":{"name":{"type":["string","null"],"maxLength":300},"date":{"type":"string","format":"date"},"status":{"type":"string","enum":["draft","published","archived"]},"projectId":{"type":["string","null"],"format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"clientId":{"type":["string","null"],"format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"ceremonyTime":{"type":["string","null"],"pattern":"^\\d{2}:\\d{2}$"},"eventStartTime":{"type":["string","null"],"pattern":"^\\d{2}:\\d{2}$"},"venueAddress":{"type":"object","properties":{"name":{"type":"string","maxLength":300},"street":{"type":"string","maxLength":300},"city":{"type":"string","maxLength":200},"state":{"type":"string","maxLength":200},"zip":{"type":"string","maxLength":40},"country":{"type":"string","maxLength":120}}},"venueNotes":{"type":["string","null"],"maxLength":2000},"dayStartMinute":{"type":"integer","minimum":0,"maximum":2880},"dayEndMinute":{"type":"integer","minimum":0,"maximum":2880},"customAnchors":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"maxLength":120},"label":{"type":"string","maxLength":300},"time":{"type":"string","pattern":"^\\d{2}:\\d{2}$"}},"required":["key"]}},"isPrimary":{"type":"boolean"},"sortOrder":{"type":"integer"}}},"EventDayList":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/EventDay"}},"pagination":{"$ref":"#/components/schemas/PaginationMeta"}},"required":["data","pagination"]},"TimelineItem":{"type":"object","properties":{"id":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"eventDayId":{"type":"string"},"title":{"type":"string"},"description":{"type":["string","null"]},"categoryId":{"type":["string","null"]},"sortOrder":{"type":"number"},"trackId":{"type":["string","null"]},"requestedStartTime":{"type":["string","null"]},"durationMinutes":{"type":"number"},"bufferBeforeMinutes":{"type":["number","null"]},"bufferAfterMinutes":{"type":["number","null"]},"travelTimeMinutes":{"type":["number","null"]},"locked":{"type":"boolean"},"anchorType":{"type":"string","enum":["none","fixed","fixed-end","ceremony","event-start","sunset","sunrise","custom-event"],"description":"How the item is timed. 'none' floats (the cascade solves its time from order + duration). 'fixed' pins the item's START to requestedStartTime (HH:MM). 'fixed-end' pins the item's END to requestedStartTime — a hard stop / curfew / 'must be done by'; the schedule back-solves the items before it to fit (pin = end − duration). 'custom-event' pins to a named Key Moment via anchorKey. 'sunset'/'sunrise' pin to the venue's golden hour. 'ceremony'/'event-start' are legacy named anchors."},"anchorKey":{"type":["string","null"]},"location":{"type":["string","null"]},"visibleTo":{"type":"array","items":{"type":"string","enum":["master","couple","vendor-all","venue","shot-list","party"]}},"vendorIds":{"type":"array","items":{"type":"string"}},"status":{"type":"string","enum":["pending","in-progress","completed","skipped"]},"createdAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"},"updatedAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"}},"required":["id","eventDayId","title","description","categoryId","sortOrder","trackId","requestedStartTime","durationMinutes","bufferBeforeMinutes","bufferAfterMinutes","travelTimeMinutes","locked","anchorType","anchorKey","location","visibleTo","vendorIds","status","createdAt","updatedAt"]},"TimelineItemCreate":{"type":"object","properties":{"eventDayId":{"type":"string","minLength":1},"title":{"type":"string","minLength":1,"maxLength":300},"description":{"type":"string","maxLength":5000},"categoryId":{"type":"string"},"sortOrder":{"type":"integer"},"trackId":{"type":"string","maxLength":100},"requestedStartTime":{"type":"string","pattern":"^([01]\\d|2[0-3]):[0-5]\\d$"},"durationMinutes":{"type":"integer","minimum":0},"bufferBeforeMinutes":{"type":"integer","minimum":0},"bufferAfterMinutes":{"type":"integer","minimum":0},"travelTimeMinutes":{"type":"integer","minimum":0},"locked":{"type":"boolean"},"anchorType":{"type":"string","enum":["none","fixed","fixed-end","ceremony","event-start","sunset","sunrise","custom-event"],"description":"How the item is timed. 'none' floats (the cascade solves its time from order + duration). 'fixed' pins the item's START to requestedStartTime (HH:MM). 'fixed-end' pins the item's END to requestedStartTime — a hard stop / curfew / 'must be done by'; the schedule back-solves the items before it to fit (pin = end − duration). 'custom-event' pins to a named Key Moment via anchorKey. 'sunset'/'sunrise' pin to the venue's golden hour. 'ceremony'/'event-start' are legacy named anchors."},"anchorKey":{"type":"string","maxLength":200},"location":{"type":"string","maxLength":500},"visibleTo":{"type":"array","items":{"type":"string","enum":["master","couple","vendor-all","venue","shot-list","party"]}},"vendorIds":{"type":"array","items":{"type":"string"}},"status":{"type":"string","enum":["pending","in-progress","completed","skipped"]}},"required":["eventDayId","title","durationMinutes"]},"TimelineItemUpdate":{"type":"object","properties":{"eventDayId":{"type":"string","minLength":1},"title":{"type":"string","minLength":1,"maxLength":300},"description":{"type":["string","null"],"maxLength":5000},"categoryId":{"type":["string","null"]},"sortOrder":{"type":"integer"},"trackId":{"type":["string","null"],"maxLength":100},"requestedStartTime":{"type":["string","null"],"pattern":"^([01]\\d|2[0-3]):[0-5]\\d$"},"durationMinutes":{"type":"integer","minimum":0},"bufferBeforeMinutes":{"type":"integer","minimum":0},"bufferAfterMinutes":{"type":"integer","minimum":0},"travelTimeMinutes":{"type":"integer","minimum":0},"locked":{"type":"boolean"},"anchorType":{"type":"string","enum":["none","fixed","fixed-end","ceremony","event-start","sunset","sunrise","custom-event"],"description":"How the item is timed. 'none' floats (the cascade solves its time from order + duration). 'fixed' pins the item's START to requestedStartTime (HH:MM). 'fixed-end' pins the item's END to requestedStartTime — a hard stop / curfew / 'must be done by'; the schedule back-solves the items before it to fit (pin = end − duration). 'custom-event' pins to a named Key Moment via anchorKey. 'sunset'/'sunrise' pin to the venue's golden hour. 'ceremony'/'event-start' are legacy named anchors."},"anchorKey":{"type":["string","null"],"maxLength":200},"location":{"type":["string","null"],"maxLength":500},"visibleTo":{"type":"array","items":{"type":"string","enum":["master","couple","vendor-all","venue","shot-list","party"]}},"vendorIds":{"type":"array","items":{"type":"string"}},"status":{"type":"string","enum":["pending","in-progress","completed","skipped"]}}},"TimelineItemList":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/TimelineItem"}},"pagination":{"$ref":"#/components/schemas/PaginationMeta"}},"required":["data","pagination"]},"EventDayVendor":{"type":"object","properties":{"id":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"eventDayId":{"type":"string"},"vendorId":{"type":"string"},"role":{"type":["string","null"]},"callTime":{"type":["string","null"]},"coverageStartTime":{"type":["string","null"]},"coverageEndTime":{"type":["string","null"]},"mealProvided":{"type":"boolean"},"mealNotes":{"type":["string","null"]},"pointOfContact":{"type":["string","null"]},"pointOfContactPhone":{"type":["string","null"]},"internalNotes":{"type":["string","null"]},"confirmationStatus":{"type":"string","enum":["unconfirmed","confirmed","declined"]},"createdAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"},"updatedAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"}},"required":["id","eventDayId","vendorId","role","callTime","coverageStartTime","coverageEndTime","mealProvided","mealNotes","pointOfContact","pointOfContactPhone","internalNotes","confirmationStatus","createdAt","updatedAt"]},"EventDayVendorCreate":{"type":"object","properties":{"eventDayId":{"type":"string","minLength":1},"vendorId":{"type":"string","minLength":1},"role":{"type":"string","maxLength":300},"callTime":{"type":"string","maxLength":5},"coverageStartTime":{"type":"string","maxLength":5},"coverageEndTime":{"type":"string","maxLength":5},"mealProvided":{"type":"boolean","default":false},"mealNotes":{"type":"string","maxLength":2000},"pointOfContact":{"type":"string","maxLength":300},"pointOfContactPhone":{"type":"string","maxLength":50},"internalNotes":{"type":"string","maxLength":5000},"confirmationStatus":{"type":"string","enum":["unconfirmed","confirmed","declined"],"default":"unconfirmed"}},"required":["eventDayId","vendorId"]},"EventDayVendorUpdate":{"type":"object","properties":{"eventDayId":{"type":"string","minLength":1},"vendorId":{"type":"string","minLength":1},"role":{"type":"string","maxLength":300},"callTime":{"type":"string","maxLength":5},"coverageStartTime":{"type":"string","maxLength":5},"coverageEndTime":{"type":"string","maxLength":5},"mealProvided":{"type":"boolean"},"mealNotes":{"type":"string","maxLength":2000},"pointOfContact":{"type":"string","maxLength":300},"pointOfContactPhone":{"type":"string","maxLength":50},"internalNotes":{"type":"string","maxLength":5000},"confirmationStatus":{"type":"string","enum":["unconfirmed","confirmed","declined"]}}},"EventDayVendorList":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/EventDayVendor"}},"pagination":{"$ref":"#/components/schemas/PaginationMeta"}},"required":["data","pagination"]},"Vendor":{"type":"object","properties":{"id":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"name":{"type":"string"},"companyName":{"type":["string","null"]},"categoryId":{"type":["string","null"],"format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"email":{"type":["string","null"]},"phone":{"type":["string","null"]},"website":{"type":["string","null"]},"address":{"type":["object","null"],"properties":{"street":{"type":["string","null"]},"city":{"type":["string","null"]},"state":{"type":["string","null"]},"zip":{"type":["string","null"]}},"required":["street","city","state","zip"]},"notes":{"type":["string","null"]},"rating":{"type":["string","null"],"enum":["preferred","approved","neutral","avoid",null]},"defaultSetupMinutes":{"type":["number","null"]},"defaultTeardownMinutes":{"type":["number","null"]},"linkedContactId":{"type":["string","null"],"format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"status":{"type":"string","enum":["active","archived"]},"createdAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"},"updatedAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"}},"required":["id","name","companyName","categoryId","email","phone","website","address","notes","rating","defaultSetupMinutes","defaultTeardownMinutes","linkedContactId","status","createdAt","updatedAt"]},"VendorCreate":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":300},"companyName":{"type":"string","maxLength":300},"categoryId":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"email":{"type":"string","format":"email"},"phone":{"type":"string","maxLength":50},"website":{"type":"string","maxLength":500},"address":{"type":"object","properties":{"street":{"type":"string","maxLength":300},"city":{"type":"string","maxLength":200},"state":{"type":"string","maxLength":100},"zip":{"type":"string","maxLength":20}}},"notes":{"type":"string","maxLength":5000},"rating":{"type":"string","enum":["preferred","approved","neutral","avoid"]},"defaultSetupMinutes":{"type":"integer","minimum":0},"defaultTeardownMinutes":{"type":"integer","minimum":0},"linkedContactId":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"status":{"type":"string","enum":["active","archived"],"default":"active"}},"required":["name"]},"VendorUpdate":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":300},"companyName":{"type":["string","null"],"maxLength":300},"categoryId":{"type":["string","null"],"format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"email":{"type":["string","null"],"format":"email"},"phone":{"type":["string","null"],"maxLength":50},"website":{"type":["string","null"],"maxLength":500},"address":{"type":"object","properties":{"street":{"type":"string","maxLength":300},"city":{"type":"string","maxLength":200},"state":{"type":"string","maxLength":100},"zip":{"type":"string","maxLength":20}}},"notes":{"type":["string","null"],"maxLength":5000},"rating":{"type":"string","enum":["preferred","approved","neutral","avoid"]},"defaultSetupMinutes":{"type":["integer","null"],"minimum":0},"defaultTeardownMinutes":{"type":["integer","null"],"minimum":0},"linkedContactId":{"type":["string","null"],"format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"status":{"type":"string","enum":["active","archived"]}}},"VendorList":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Vendor"}},"pagination":{"$ref":"#/components/schemas/PaginationMeta"}},"required":["data","pagination"]},"Venue":{"type":"object","properties":{"id":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"name":{"type":"string"},"website":{"type":["string","null"]},"address":{"type":["object","null"],"properties":{"line1":{"type":["string","null"]},"line2":{"type":["string","null"]},"city":{"type":["string","null"]},"state":{"type":["string","null"]},"postalCode":{"type":["string","null"]},"country":{"type":["string","null"]}},"required":["line1","line2","city","state","postalCode","country"]},"timezone":{"type":["string","null"]},"contacts":{"type":"array","items":{"type":"object","properties":{"name":{"type":["string","null"]},"role":{"type":["string","null"]},"email":{"type":["string","null"]},"phone":{"type":["string","null"]}},"required":["name","role","email","phone"]}},"spaces":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"notes":{"type":["string","null"]}},"required":["name","notes"]}},"notes":{"type":["string","null"]},"tagIds":{"type":"array","items":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"}},"status":{"type":"string","enum":["active","archived"]},"createdAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"},"updatedAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"}},"required":["id","name","website","address","timezone","contacts","spaces","notes","tagIds","status","createdAt","updatedAt"]},"VenueCreate":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":300},"website":{"type":"string","maxLength":500},"address":{"type":"object","properties":{"line1":{"type":"string","maxLength":300},"line2":{"type":"string","maxLength":300},"city":{"type":"string","maxLength":200},"state":{"type":"string","maxLength":200},"postalCode":{"type":"string","maxLength":40},"country":{"type":"string","maxLength":120}}},"timezone":{"type":"string","maxLength":120},"contacts":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","maxLength":300},"role":{"type":"string","maxLength":200},"email":{"type":"string","format":"email"},"phone":{"type":"string","maxLength":50}}}},"spaces":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":200},"notes":{"type":"string","maxLength":2000}},"required":["name"]}},"notes":{"type":"string","maxLength":5000},"tagIds":{"type":"array","items":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"}},"status":{"type":"string","enum":["active","archived"],"default":"active"}},"required":["name"]},"VenueUpdate":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":300},"website":{"type":["string","null"],"maxLength":500},"address":{"type":"object","properties":{"line1":{"type":"string","maxLength":300},"line2":{"type":"string","maxLength":300},"city":{"type":"string","maxLength":200},"state":{"type":"string","maxLength":200},"postalCode":{"type":"string","maxLength":40},"country":{"type":"string","maxLength":120}}},"timezone":{"type":["string","null"],"maxLength":120},"contacts":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","maxLength":300},"role":{"type":"string","maxLength":200},"email":{"type":"string","format":"email"},"phone":{"type":"string","maxLength":50}}}},"spaces":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":200},"notes":{"type":"string","maxLength":2000}},"required":["name"]}},"notes":{"type":["string","null"],"maxLength":5000},"tagIds":{"type":"array","items":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"}},"status":{"type":"string","enum":["active","archived"]}}},"VenueList":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Venue"}},"pagination":{"$ref":"#/components/schemas/PaginationMeta"}},"required":["data","pagination"]},"Webhook":{"type":"object","properties":{"id":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"name":{"type":"string"},"url":{"type":"string","format":"uri"},"events":{"type":"array","items":{"type":"string","enum":["invoice_sent","invoice_due_soon","invoice_overdue","invoice_paid","invoice_payment_failed","invoice_disputed","invoice_payment_reminder","payment_received","payment_refunded","payment_applied","payment_unapplied","payment_deleted","payment_chargeback","receipt_sent","schedule_deposit_ready","schedule_installment_due","schedule_installment_paid","schedule_completed","document_processed","document_action_created","document_action_approved","document_needs_review","document_failed","client_created","contact_created","project_created","time_entry_created","lead_created","client_won","client_lost","lead_status_changed","invoice_viewed","milestone_approaching","timer_running_reminder","contract_sent","contract_viewed","contract_signed","contract_recipient_signed","contract_countersigned","contract_completed","contract_expired","contract_voided","form_submission_completed","smart_file_sent","smart_file_viewed","smart_file_accepted","smart_file_completed","smart_file_expired","subscription_payment_failed","payout_paid","payout_failed","event_day_created","event_day_published","event_day_archived","timeline_item_completed","timeline_reminder_sent","invoice_refunded","contract_amended","receipt_viewed","follow_up_due","payment_processing","client_reply","client_revision_requested","email_delivery_failed","sale_completed","sale_refunded","sale_voided","sale_receipt_sent","sale_viewed"]}},"enabled":{"type":"boolean"},"source":{"type":"string","enum":["manual","zapier","n8n","make"]},"hasSecret":{"type":"boolean"},"lastTriggered":{"type":["string","null"],"format":"date-time","description":"ISO 8601 timestamp (UTC)"},"lastStatus":{"type":["integer","null"]},"consecutiveFailures":{"type":"integer"},"createdAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"},"updatedAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"}},"required":["id","name","url","events","enabled","source","hasSecret","lastTriggered","lastStatus","consecutiveFailures","createdAt","updatedAt"]},"WebhookCreate":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":200},"url":{"type":"string","format":"uri"},"events":{"type":"array","items":{"type":"string","enum":["invoice_sent","invoice_due_soon","invoice_overdue","invoice_paid","invoice_payment_failed","invoice_disputed","invoice_payment_reminder","payment_received","payment_refunded","payment_applied","payment_unapplied","payment_deleted","payment_chargeback","receipt_sent","schedule_deposit_ready","schedule_installment_due","schedule_installment_paid","schedule_completed","document_processed","document_action_created","document_action_approved","document_needs_review","document_failed","client_created","contact_created","project_created","time_entry_created","lead_created","client_won","client_lost","lead_status_changed","invoice_viewed","milestone_approaching","timer_running_reminder","contract_sent","contract_viewed","contract_signed","contract_recipient_signed","contract_countersigned","contract_completed","contract_expired","contract_voided","form_submission_completed","smart_file_sent","smart_file_viewed","smart_file_accepted","smart_file_completed","smart_file_expired","subscription_payment_failed","payout_paid","payout_failed","event_day_created","event_day_published","event_day_archived","timeline_item_completed","timeline_reminder_sent","invoice_refunded","contract_amended","receipt_viewed","follow_up_due","payment_processing","client_reply","client_revision_requested","email_delivery_failed","sale_completed","sale_refunded","sale_voided","sale_receipt_sent","sale_viewed"]},"minItems":1},"enabled":{"type":"boolean","default":true},"secret":{"type":"string","minLength":16,"maxLength":200}},"required":["name","url","events"]},"WebhookUpdate":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":200},"url":{"type":"string","format":"uri"},"events":{"type":"array","items":{"type":"string","enum":["invoice_sent","invoice_due_soon","invoice_overdue","invoice_paid","invoice_payment_failed","invoice_disputed","invoice_payment_reminder","payment_received","payment_refunded","payment_applied","payment_unapplied","payment_deleted","payment_chargeback","receipt_sent","schedule_deposit_ready","schedule_installment_due","schedule_installment_paid","schedule_completed","document_processed","document_action_created","document_action_approved","document_needs_review","document_failed","client_created","contact_created","project_created","time_entry_created","lead_created","client_won","client_lost","lead_status_changed","invoice_viewed","milestone_approaching","timer_running_reminder","contract_sent","contract_viewed","contract_signed","contract_recipient_signed","contract_countersigned","contract_completed","contract_expired","contract_voided","form_submission_completed","smart_file_sent","smart_file_viewed","smart_file_accepted","smart_file_completed","smart_file_expired","subscription_payment_failed","payout_paid","payout_failed","event_day_created","event_day_published","event_day_archived","timeline_item_completed","timeline_reminder_sent","invoice_refunded","contract_amended","receipt_viewed","follow_up_due","payment_processing","client_reply","client_revision_requested","email_delivery_failed","sale_completed","sale_refunded","sale_voided","sale_receipt_sent","sale_viewed"]},"minItems":1},"enabled":{"type":"boolean"},"secret":{"type":["string","null"],"minLength":16,"maxLength":200}}},"WebhookList":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Webhook"}},"pagination":{"$ref":"#/components/schemas/PaginationMeta"}},"required":["data","pagination"]}},"parameters":{},"securitySchemes":{"apiKey":{"type":"apiKey","in":"header","name":"x-api-key"},"bearer":{"type":"http","scheme":"bearer","bearerFormat":"JWT"}}},"paths":{"/api/v1/clients":{"get":{"operationId":"listClients","summary":"List clients","tags":["Clients"],"security":[{"apiKey":[]},{"bearer":[]}],"x-speakeasy-name-override":"list","x-speakeasy-pagination":{"type":"offsetLimit","inputs":[{"name":"page","in":"parameters","type":"page"},{"name":"pageSize","in":"parameters","type":"limit"}],"outputs":{"results":"$.data"}},"x-speakeasy-retries":{"strategy":"backoff","backoff":{"initialInterval":500,"maxInterval":30000,"maxElapsedTime":30000,"exponent":1.5},"statusCodes":["429","5XX"],"retryConnectionErrors":true},"parameters":[{"schema":{"type":"integer","minimum":1,"default":1},"required":false,"name":"page","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":25},"required":false,"name":"pageSize","in":"query"},{"schema":{"type":"string","enum":["new","contacted","qualified","active","inactive","declined","spam"]},"required":false,"name":"status","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientList"}}}},"400":{"description":"The request was malformed or failed schema validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"The API key or token lacks the scope required for this operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded — back off and retry (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Unexpected server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}},"post":{"operationId":"createClient","summary":"Create a client","tags":["Clients"],"security":[{"apiKey":[]},{"bearer":[]}],"x-speakeasy-name-override":"create","parameters":[{"schema":{"type":"string","maxLength":255,"description":"Optional unique key that makes this request safely retryable. Replaying the same key returns the original response instead of creating a duplicate; reusing a key with a different request body returns 409.","example":"create-client-2026-05-24-a1b2c3"},"required":false,"description":"Optional unique key that makes this request safely retryable. Replaying the same key returns the original response instead of creating a duplicate; reusing a key with a different request body returns 409.","name":"Idempotency-Key","in":"header"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientCreate"}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Client"}}}},"400":{"description":"The request was malformed or failed schema validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"The API key or token lacks the scope required for this operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Either the Idempotency-Key was reused with a different request body (`idempotency_key_reused`), or a request carrying the same key is still in flight (`request_in_progress` — retry after `Retry-After`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded — back off and retry (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Unexpected server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/clients/{id}":{"get":{"operationId":"getClient","summary":"Get a client","tags":["Clients"],"security":[{"apiKey":[]},{"bearer":[]}],"x-speakeasy-name-override":"get","x-speakeasy-retries":{"strategy":"backoff","backoff":{"initialInterval":500,"maxInterval":30000,"maxElapsedTime":30000,"exponent":1.5},"statusCodes":["429","5XX"],"retryConnectionErrors":true},"parameters":[{"schema":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"required":true,"description":"UUID v4","name":"id","in":"path"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Client"}}}},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"The API key or token lacks the scope required for this operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"No resource with that id exists in your organization","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded — back off and retry (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Unexpected server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}},"patch":{"operationId":"updateClient","summary":"Update a client","tags":["Clients"],"security":[{"apiKey":[]},{"bearer":[]}],"x-speakeasy-name-override":"update","x-speakeasy-retries":{"strategy":"backoff","backoff":{"initialInterval":500,"maxInterval":30000,"maxElapsedTime":30000,"exponent":1.5},"statusCodes":["429","5XX"],"retryConnectionErrors":true},"parameters":[{"schema":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"required":true,"description":"UUID v4","name":"id","in":"path"},{"schema":{"type":"string","maxLength":255,"description":"Optional unique key that makes this request safely retryable. Replaying the same key returns the original response instead of creating a duplicate; reusing a key with a different request body returns 409.","example":"create-client-2026-05-24-a1b2c3"},"required":false,"description":"Optional unique key that makes this request safely retryable. Replaying the same key returns the original response instead of creating a duplicate; reusing a key with a different request body returns 409.","name":"Idempotency-Key","in":"header"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientUpdate"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Client"}}}},"400":{"description":"The request was malformed or failed schema validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"The API key or token lacks the scope required for this operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"No resource with that id exists in your organization","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Either the Idempotency-Key was reused with a different request body (`idempotency_key_reused`), or a request carrying the same key is still in flight (`request_in_progress` — retry after `Retry-After`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded — back off and retry (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Unexpected server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}},"delete":{"operationId":"deleteClient","summary":"Delete a client","tags":["Clients"],"security":[{"apiKey":[]},{"bearer":[]}],"x-speakeasy-name-override":"delete","x-speakeasy-retries":{"strategy":"backoff","backoff":{"initialInterval":500,"maxInterval":30000,"maxElapsedTime":30000,"exponent":1.5},"statusCodes":["429","5XX"],"retryConnectionErrors":true},"parameters":[{"schema":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"required":true,"description":"UUID v4","name":"id","in":"path"}],"responses":{"204":{"description":"Deleted"},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"The API key or token lacks the scope required for this operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"No resource with that id exists in your organization","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded — back off and retry (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Unexpected server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/contacts":{"get":{"operationId":"listContacts","summary":"List contacts","tags":["Contacts"],"security":[{"apiKey":[]},{"bearer":[]}],"x-speakeasy-name-override":"list","x-speakeasy-pagination":{"type":"offsetLimit","inputs":[{"name":"page","in":"parameters","type":"page"},{"name":"pageSize","in":"parameters","type":"limit"}],"outputs":{"results":"$.data"}},"x-speakeasy-retries":{"strategy":"backoff","backoff":{"initialInterval":500,"maxInterval":30000,"maxElapsedTime":30000,"exponent":1.5},"statusCodes":["429","5XX"],"retryConnectionErrors":true},"parameters":[{"schema":{"type":"integer","minimum":1,"default":1},"required":false,"name":"page","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":25},"required":false,"name":"pageSize","in":"query"},{"schema":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"required":false,"description":"UUID v4","name":"clientId","in":"query"},{"schema":{"type":"string","enum":["primary","billing","other"]},"required":false,"name":"role","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactList"}}}},"400":{"description":"The request was malformed or failed schema validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"The API key or token lacks the scope required for this operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded — back off and retry (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Unexpected server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}},"post":{"operationId":"createContact","summary":"Create a contact","tags":["Contacts"],"security":[{"apiKey":[]},{"bearer":[]}],"x-speakeasy-name-override":"create","parameters":[{"schema":{"type":"string","maxLength":255,"description":"Optional unique key that makes this request safely retryable. Replaying the same key returns the original response instead of creating a duplicate; reusing a key with a different request body returns 409.","example":"create-client-2026-05-24-a1b2c3"},"required":false,"description":"Optional unique key that makes this request safely retryable. Replaying the same key returns the original response instead of creating a duplicate; reusing a key with a different request body returns 409.","name":"Idempotency-Key","in":"header"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactCreate"}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Contact"}}}},"400":{"description":"The request was malformed or failed schema validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"The API key or token lacks the scope required for this operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Either the Idempotency-Key was reused with a different request body (`idempotency_key_reused`), or a request carrying the same key is still in flight (`request_in_progress` — retry after `Retry-After`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded — back off and retry (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Unexpected server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/contacts/{id}":{"get":{"operationId":"getContact","summary":"Get a contact","tags":["Contacts"],"security":[{"apiKey":[]},{"bearer":[]}],"x-speakeasy-name-override":"get","x-speakeasy-retries":{"strategy":"backoff","backoff":{"initialInterval":500,"maxInterval":30000,"maxElapsedTime":30000,"exponent":1.5},"statusCodes":["429","5XX"],"retryConnectionErrors":true},"parameters":[{"schema":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"required":true,"description":"UUID v4","name":"id","in":"path"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Contact"}}}},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"The API key or token lacks the scope required for this operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"No resource with that id exists in your organization","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded — back off and retry (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Unexpected server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}},"patch":{"operationId":"updateContact","summary":"Update a contact","tags":["Contacts"],"security":[{"apiKey":[]},{"bearer":[]}],"x-speakeasy-name-override":"update","x-speakeasy-retries":{"strategy":"backoff","backoff":{"initialInterval":500,"maxInterval":30000,"maxElapsedTime":30000,"exponent":1.5},"statusCodes":["429","5XX"],"retryConnectionErrors":true},"parameters":[{"schema":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"required":true,"description":"UUID v4","name":"id","in":"path"},{"schema":{"type":"string","maxLength":255,"description":"Optional unique key that makes this request safely retryable. Replaying the same key returns the original response instead of creating a duplicate; reusing a key with a different request body returns 409.","example":"create-client-2026-05-24-a1b2c3"},"required":false,"description":"Optional unique key that makes this request safely retryable. Replaying the same key returns the original response instead of creating a duplicate; reusing a key with a different request body returns 409.","name":"Idempotency-Key","in":"header"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactUpdate"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Contact"}}}},"400":{"description":"The request was malformed or failed schema validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"The API key or token lacks the scope required for this operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"No resource with that id exists in your organization","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Either the Idempotency-Key was reused with a different request body (`idempotency_key_reused`), or a request carrying the same key is still in flight (`request_in_progress` — retry after `Retry-After`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded — back off and retry (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Unexpected server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}},"delete":{"operationId":"deleteContact","summary":"Delete a contact","tags":["Contacts"],"security":[{"apiKey":[]},{"bearer":[]}],"x-speakeasy-name-override":"delete","x-speakeasy-retries":{"strategy":"backoff","backoff":{"initialInterval":500,"maxInterval":30000,"maxElapsedTime":30000,"exponent":1.5},"statusCodes":["429","5XX"],"retryConnectionErrors":true},"parameters":[{"schema":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"required":true,"description":"UUID v4","name":"id","in":"path"}],"responses":{"204":{"description":"Deleted"},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"The API key or token lacks the scope required for this operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"No resource with that id exists in your organization","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded — back off and retry (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Unexpected server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/projects":{"get":{"operationId":"listProjects","summary":"List projects","tags":["Projects"],"security":[{"apiKey":[]},{"bearer":[]}],"x-speakeasy-name-override":"list","x-speakeasy-pagination":{"type":"offsetLimit","inputs":[{"name":"page","in":"parameters","type":"page"},{"name":"pageSize","in":"parameters","type":"limit"}],"outputs":{"results":"$.data"}},"x-speakeasy-retries":{"strategy":"backoff","backoff":{"initialInterval":500,"maxInterval":30000,"maxElapsedTime":30000,"exponent":1.5},"statusCodes":["429","5XX"],"retryConnectionErrors":true},"parameters":[{"schema":{"type":"integer","minimum":1,"default":1},"required":false,"name":"page","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":25},"required":false,"name":"pageSize","in":"query"},{"schema":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"required":false,"description":"UUID v4","name":"clientId","in":"query"},{"schema":{"type":"string","enum":["active","paused","completed"]},"required":false,"name":"status","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectList"}}}},"400":{"description":"The request was malformed or failed schema validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"The API key or token lacks the scope required for this operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded — back off and retry (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Unexpected server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}},"post":{"operationId":"createProject","summary":"Create a project","tags":["Projects"],"security":[{"apiKey":[]},{"bearer":[]}],"x-speakeasy-name-override":"create","parameters":[{"schema":{"type":"string","maxLength":255,"description":"Optional unique key that makes this request safely retryable. Replaying the same key returns the original response instead of creating a duplicate; reusing a key with a different request body returns 409.","example":"create-client-2026-05-24-a1b2c3"},"required":false,"description":"Optional unique key that makes this request safely retryable. Replaying the same key returns the original response instead of creating a duplicate; reusing a key with a different request body returns 409.","name":"Idempotency-Key","in":"header"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectCreate"}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Project"}}}},"400":{"description":"The request was malformed or failed schema validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"The API key or token lacks the scope required for this operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Either the Idempotency-Key was reused with a different request body (`idempotency_key_reused`), or a request carrying the same key is still in flight (`request_in_progress` — retry after `Retry-After`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded — back off and retry (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Unexpected server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/projects/{id}":{"get":{"operationId":"getProject","summary":"Get a project","tags":["Projects"],"security":[{"apiKey":[]},{"bearer":[]}],"x-speakeasy-name-override":"get","x-speakeasy-retries":{"strategy":"backoff","backoff":{"initialInterval":500,"maxInterval":30000,"maxElapsedTime":30000,"exponent":1.5},"statusCodes":["429","5XX"],"retryConnectionErrors":true},"parameters":[{"schema":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"required":true,"description":"UUID v4","name":"id","in":"path"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Project"}}}},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"The API key or token lacks the scope required for this operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"No resource with that id exists in your organization","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded — back off and retry (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Unexpected server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}},"patch":{"operationId":"updateProject","summary":"Update a project","tags":["Projects"],"security":[{"apiKey":[]},{"bearer":[]}],"x-speakeasy-name-override":"update","x-speakeasy-retries":{"strategy":"backoff","backoff":{"initialInterval":500,"maxInterval":30000,"maxElapsedTime":30000,"exponent":1.5},"statusCodes":["429","5XX"],"retryConnectionErrors":true},"parameters":[{"schema":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"required":true,"description":"UUID v4","name":"id","in":"path"},{"schema":{"type":"string","maxLength":255,"description":"Optional unique key that makes this request safely retryable. Replaying the same key returns the original response instead of creating a duplicate; reusing a key with a different request body returns 409.","example":"create-client-2026-05-24-a1b2c3"},"required":false,"description":"Optional unique key that makes this request safely retryable. Replaying the same key returns the original response instead of creating a duplicate; reusing a key with a different request body returns 409.","name":"Idempotency-Key","in":"header"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectUpdate"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Project"}}}},"400":{"description":"The request was malformed or failed schema validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"The API key or token lacks the scope required for this operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"No resource with that id exists in your organization","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Either the Idempotency-Key was reused with a different request body (`idempotency_key_reused`), or a request carrying the same key is still in flight (`request_in_progress` — retry after `Retry-After`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded — back off and retry (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Unexpected server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}},"delete":{"operationId":"deleteProject","summary":"Delete a project","tags":["Projects"],"security":[{"apiKey":[]},{"bearer":[]}],"x-speakeasy-name-override":"delete","x-speakeasy-retries":{"strategy":"backoff","backoff":{"initialInterval":500,"maxInterval":30000,"maxElapsedTime":30000,"exponent":1.5},"statusCodes":["429","5XX"],"retryConnectionErrors":true},"parameters":[{"schema":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"required":true,"description":"UUID v4","name":"id","in":"path"}],"responses":{"204":{"description":"Deleted"},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"The API key or token lacks the scope required for this operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"No resource with that id exists in your organization","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded — back off and retry (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Unexpected server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/invoices":{"get":{"operationId":"listInvoices","summary":"List invoices","tags":["Invoices"],"security":[{"apiKey":[]},{"bearer":[]}],"x-speakeasy-name-override":"list","x-speakeasy-pagination":{"type":"offsetLimit","inputs":[{"name":"page","in":"parameters","type":"page"},{"name":"pageSize","in":"parameters","type":"limit"}],"outputs":{"results":"$.data"}},"x-speakeasy-retries":{"strategy":"backoff","backoff":{"initialInterval":500,"maxInterval":30000,"maxElapsedTime":30000,"exponent":1.5},"statusCodes":["429","5XX"],"retryConnectionErrors":true},"parameters":[{"schema":{"type":"integer","minimum":1,"default":1},"required":false,"name":"page","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":25},"required":false,"name":"pageSize","in":"query"},{"schema":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"required":false,"description":"UUID v4","name":"clientId","in":"query"},{"schema":{"type":"string","enum":["draft","sent","paid","void","written_off"]},"required":false,"name":"status","in":"query"},{"schema":{"type":"string","enum":["true","false"],"description":"Filter by the derived overdue condition. `true` → open (`sent`) invoices past their due date with a balance owing; `false` → everything else."},"required":false,"description":"Filter by the derived overdue condition. `true` → open (`sent`) invoices past their due date with a balance owing; `false` → everything else.","name":"overdue","in":"query"},{"schema":{"type":"string","format":"uuid","description":"Return the invoice that supersedes (replaces) the given invoice id — the forward void→reissue link.","example":"550e8400-e29b-41d4-a716-446655440000"},"required":false,"description":"Return the invoice that supersedes (replaces) the given invoice id — the forward void→reissue link.","name":"supersedesInvoice","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvoiceList"}}}},"400":{"description":"The request was malformed or failed schema validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"The API key or token lacks the scope required for this operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded — back off and retry (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Unexpected server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}},"post":{"operationId":"createInvoice","summary":"Create an invoice","description":"Status is system-derived: `paid` comes from Payments and there is no `partial` (partial-ness is numeric via amountPaid/balanceDue). `overdue` is not a status — it is a derived read-only boolean (past due with a balance owing).","tags":["Invoices"],"security":[{"apiKey":[]},{"bearer":[]}],"x-speakeasy-name-override":"create","parameters":[{"schema":{"type":"string","maxLength":255,"description":"Optional unique key that makes this request safely retryable. Replaying the same key returns the original response instead of creating a duplicate; reusing a key with a different request body returns 409.","example":"create-client-2026-05-24-a1b2c3"},"required":false,"description":"Optional unique key that makes this request safely retryable. Replaying the same key returns the original response instead of creating a duplicate; reusing a key with a different request body returns 409.","name":"Idempotency-Key","in":"header"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvoiceCreate"}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Invoice"}}}},"400":{"description":"The request was malformed or failed schema validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"The API key or token lacks the scope required for this operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Either the Idempotency-Key was reused with a different request body (`idempotency_key_reused`), or a request carrying the same key is still in flight (`request_in_progress` — retry after `Retry-After`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded — back off and retry (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Unexpected server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/invoices/{id}":{"get":{"operationId":"getInvoice","summary":"Get an invoice","tags":["Invoices"],"security":[{"apiKey":[]},{"bearer":[]}],"x-speakeasy-name-override":"get","x-speakeasy-retries":{"strategy":"backoff","backoff":{"initialInterval":500,"maxInterval":30000,"maxElapsedTime":30000,"exponent":1.5},"statusCodes":["429","5XX"],"retryConnectionErrors":true},"parameters":[{"schema":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"required":true,"description":"UUID v4","name":"id","in":"path"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Invoice"}}}},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"The API key or token lacks the scope required for this operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"No resource with that id exists in your organization","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded — back off and retry (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Unexpected server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}},"patch":{"operationId":"updateInvoice","summary":"Update an invoice (line items not editable in v1)","tags":["Invoices"],"security":[{"apiKey":[]},{"bearer":[]}],"x-speakeasy-name-override":"update","x-speakeasy-retries":{"strategy":"backoff","backoff":{"initialInterval":500,"maxInterval":30000,"maxElapsedTime":30000,"exponent":1.5},"statusCodes":["429","5XX"],"retryConnectionErrors":true},"parameters":[{"schema":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"required":true,"description":"UUID v4","name":"id","in":"path"},{"schema":{"type":"string","maxLength":255,"description":"Optional unique key that makes this request safely retryable. Replaying the same key returns the original response instead of creating a duplicate; reusing a key with a different request body returns 409.","example":"create-client-2026-05-24-a1b2c3"},"required":false,"description":"Optional unique key that makes this request safely retryable. Replaying the same key returns the original response instead of creating a duplicate; reusing a key with a different request body returns 409.","name":"Idempotency-Key","in":"header"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvoiceUpdate"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Invoice"}}}},"400":{"description":"The request was malformed or failed schema validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"The API key or token lacks the scope required for this operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"No resource with that id exists in your organization","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Either the Idempotency-Key was reused with a different request body (`idempotency_key_reused`), or a request carrying the same key is still in flight (`request_in_progress` — retry after `Retry-After`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded — back off and retry (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Unexpected server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}},"delete":{"operationId":"deleteInvoice","summary":"Delete an invoice (only drafts)","tags":["Invoices"],"security":[{"apiKey":[]},{"bearer":[]}],"x-speakeasy-name-override":"delete","x-speakeasy-retries":{"strategy":"backoff","backoff":{"initialInterval":500,"maxInterval":30000,"maxElapsedTime":30000,"exponent":1.5},"statusCodes":["429","5XX"],"retryConnectionErrors":true},"parameters":[{"schema":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"required":true,"description":"UUID v4","name":"id","in":"path"}],"responses":{"204":{"description":"Deleted"},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"The API key or token lacks the scope required for this operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"No resource with that id exists in your organization","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded — back off and retry (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Unexpected server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/contracts":{"get":{"operationId":"listContracts","summary":"List contracts","tags":["Contracts"],"security":[{"apiKey":[]},{"bearer":[]}],"x-speakeasy-name-override":"list","x-speakeasy-pagination":{"type":"offsetLimit","inputs":[{"name":"page","in":"parameters","type":"page"},{"name":"pageSize","in":"parameters","type":"limit"}],"outputs":{"results":"$.data"}},"x-speakeasy-retries":{"strategy":"backoff","backoff":{"initialInterval":500,"maxInterval":30000,"maxElapsedTime":30000,"exponent":1.5},"statusCodes":["429","5XX"],"retryConnectionErrors":true},"parameters":[{"schema":{"type":"integer","minimum":1,"default":1},"required":false,"name":"page","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":25},"required":false,"name":"pageSize","in":"query"},{"schema":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"required":false,"description":"UUID v4","name":"clientId","in":"query"},{"schema":{"type":"string","enum":["draft","sent","viewed","active","completed","expired","voided"]},"required":false,"name":"status","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContractList"}}}},"400":{"description":"The request was malformed or failed schema validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"The API key or token lacks the scope required for this operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded — back off and retry (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Unexpected server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}},"post":{"operationId":"createContract","summary":"Create a draft contract","description":"Creates a draft contract. Signing flow, signer assignment, and Tiptap content are dashboard-managed.","tags":["Contracts"],"security":[{"apiKey":[]},{"bearer":[]}],"x-speakeasy-name-override":"create","parameters":[{"schema":{"type":"string","maxLength":255,"description":"Optional unique key that makes this request safely retryable. Replaying the same key returns the original response instead of creating a duplicate; reusing a key with a different request body returns 409.","example":"create-client-2026-05-24-a1b2c3"},"required":false,"description":"Optional unique key that makes this request safely retryable. Replaying the same key returns the original response instead of creating a duplicate; reusing a key with a different request body returns 409.","name":"Idempotency-Key","in":"header"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContractCreate"}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Contract"}}}},"400":{"description":"The request was malformed or failed schema validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"The API key or token lacks the scope required for this operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Either the Idempotency-Key was reused with a different request body (`idempotency_key_reused`), or a request carrying the same key is still in flight (`request_in_progress` — retry after `Retry-After`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded — back off and retry (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Unexpected server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/contracts/{id}":{"get":{"operationId":"getContract","summary":"Get a contract","tags":["Contracts"],"security":[{"apiKey":[]},{"bearer":[]}],"x-speakeasy-name-override":"get","x-speakeasy-retries":{"strategy":"backoff","backoff":{"initialInterval":500,"maxInterval":30000,"maxElapsedTime":30000,"exponent":1.5},"statusCodes":["429","5XX"],"retryConnectionErrors":true},"parameters":[{"schema":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"required":true,"description":"UUID v4","name":"id","in":"path"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Contract"}}}},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"The API key or token lacks the scope required for this operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"No resource with that id exists in your organization","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded — back off and retry (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Unexpected server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}},"patch":{"operationId":"updateContract","summary":"Update a contract (limited fields)","description":"Only `title`, `effectiveDate`, `expirationDate`, and `archived` are editable via v1. `title`/`effectiveDate`/`expirationDate` are draft-only; `archived` is always editable.","tags":["Contracts"],"security":[{"apiKey":[]},{"bearer":[]}],"x-speakeasy-name-override":"update","x-speakeasy-retries":{"strategy":"backoff","backoff":{"initialInterval":500,"maxInterval":30000,"maxElapsedTime":30000,"exponent":1.5},"statusCodes":["429","5XX"],"retryConnectionErrors":true},"parameters":[{"schema":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"required":true,"description":"UUID v4","name":"id","in":"path"},{"schema":{"type":"string","maxLength":255,"description":"Optional unique key that makes this request safely retryable. Replaying the same key returns the original response instead of creating a duplicate; reusing a key with a different request body returns 409.","example":"create-client-2026-05-24-a1b2c3"},"required":false,"description":"Optional unique key that makes this request safely retryable. Replaying the same key returns the original response instead of creating a duplicate; reusing a key with a different request body returns 409.","name":"Idempotency-Key","in":"header"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContractUpdate"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Contract"}}}},"400":{"description":"The request was malformed or failed schema validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"The API key or token lacks the scope required for this operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"No resource with that id exists in your organization","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Either the Idempotency-Key was reused with a different request body (`idempotency_key_reused`), or a request carrying the same key is still in flight (`request_in_progress` — retry after `Retry-After`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded — back off and retry (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Unexpected server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}},"delete":{"operationId":"deleteContract","summary":"Delete a contract (only drafts)","tags":["Contracts"],"security":[{"apiKey":[]},{"bearer":[]}],"x-speakeasy-name-override":"delete","x-speakeasy-retries":{"strategy":"backoff","backoff":{"initialInterval":500,"maxInterval":30000,"maxElapsedTime":30000,"exponent":1.5},"statusCodes":["429","5XX"],"retryConnectionErrors":true},"parameters":[{"schema":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"required":true,"description":"UUID v4","name":"id","in":"path"}],"responses":{"204":{"description":"Deleted"},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"The API key or token lacks the scope required for this operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"No resource with that id exists in your organization","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded — back off and retry (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Unexpected server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/client-documents":{"get":{"operationId":"listClientDocuments","summary":"List proposals","tags":["Forms & Agreements"],"security":[{"apiKey":[]},{"bearer":[]}],"x-speakeasy-name-override":"list","x-speakeasy-pagination":{"type":"offsetLimit","inputs":[{"name":"page","in":"parameters","type":"page"},{"name":"pageSize","in":"parameters","type":"limit"}],"outputs":{"results":"$.data"}},"x-speakeasy-retries":{"strategy":"backoff","backoff":{"initialInterval":500,"maxInterval":30000,"maxElapsedTime":30000,"exponent":1.5},"statusCodes":["429","5XX"],"retryConnectionErrors":true},"parameters":[{"schema":{"type":"integer","minimum":1,"default":1},"required":false,"name":"page","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":25},"required":false,"name":"pageSize","in":"query"},{"schema":{"type":"string","enum":["draft","sent","viewed","in_progress","accepted","completed","expired","void"]},"required":false,"name":"status","in":"query"},{"schema":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"required":false,"description":"UUID v4","name":"clientId","in":"query"},{"schema":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"required":false,"description":"UUID v4","name":"contactId","in":"query"},{"schema":{"type":"string","enum":["true","false"],"description":"Literal `true` or `false`. Any other value is rejected with 400 invalid_request."},"required":false,"description":"Literal `true` or `false`. Any other value is rejected with 400 invalid_request.","name":"archived","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientDocumentList"}}}},"400":{"description":"The request was malformed or failed schema validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"The API key or token lacks the scope required for this operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded — back off and retry (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Unexpected server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/client-documents/{id}":{"get":{"operationId":"getClientDocument","summary":"Get a proposal","tags":["Forms & Agreements"],"security":[{"apiKey":[]},{"bearer":[]}],"x-speakeasy-name-override":"get","x-speakeasy-retries":{"strategy":"backoff","backoff":{"initialInterval":500,"maxInterval":30000,"maxElapsedTime":30000,"exponent":1.5},"statusCodes":["429","5XX"],"retryConnectionErrors":true},"parameters":[{"schema":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"required":true,"description":"UUID v4","name":"id","in":"path"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientDocument"}}}},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"The API key or token lacks the scope required for this operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"No resource with that id exists in your organization","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded — back off and retry (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Unexpected server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/document-versions":{"get":{"operationId":"listDocumentVersions","summary":"List document versions","description":"Read-only audit trail of issued document versions across smart-files, invoices, and standalone contracts. Checkpoints (internal draft edit-history) are never returned. Frozen content and client access tokens are not exposed.","tags":["Document Versions"],"security":[{"apiKey":[]},{"bearer":[]}],"x-speakeasy-name-override":"list","x-speakeasy-pagination":{"type":"offsetLimit","inputs":[{"name":"page","in":"parameters","type":"page"},{"name":"pageSize","in":"parameters","type":"limit"}],"outputs":{"results":"$.data"}},"x-speakeasy-retries":{"strategy":"backoff","backoff":{"initialInterval":500,"maxInterval":30000,"maxElapsedTime":30000,"exponent":1.5},"statusCodes":["429","5XX"],"retryConnectionErrors":true},"parameters":[{"schema":{"type":"integer","minimum":1,"default":1},"required":false,"name":"page","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":25},"required":false,"name":"pageSize","in":"query"},{"schema":{"type":"string","enum":["smart-file","invoice","standalone-contract"]},"required":false,"name":"documentType","in":"query"},{"schema":{"type":"string","format":"uuid","description":"Filter to a smart-file (client-document) id.","example":"550e8400-e29b-41d4-a716-446655440000"},"required":false,"description":"Filter to a smart-file (client-document) id.","name":"documentId","in":"query"},{"schema":{"type":"string","format":"uuid","description":"Filter to an invoice id.","example":"550e8400-e29b-41d4-a716-446655440000"},"required":false,"description":"Filter to an invoice id.","name":"invoiceId","in":"query"},{"schema":{"type":"string","format":"uuid","description":"Filter to a standalone-contract id.","example":"550e8400-e29b-41d4-a716-446655440000"},"required":false,"description":"Filter to a standalone-contract id.","name":"contractId","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DocumentVersionList"}}}},"400":{"description":"The request was malformed or failed schema validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"The API key or token lacks the scope required for this operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded — back off and retry (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Unexpected server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/document-versions/{id}":{"get":{"operationId":"getDocumentVersion","summary":"Get a document version","tags":["Document Versions"],"security":[{"apiKey":[]},{"bearer":[]}],"x-speakeasy-name-override":"get","x-speakeasy-retries":{"strategy":"backoff","backoff":{"initialInterval":500,"maxInterval":30000,"maxElapsedTime":30000,"exponent":1.5},"statusCodes":["429","5XX"],"retryConnectionErrors":true},"parameters":[{"schema":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"required":true,"description":"UUID v4","name":"id","in":"path"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DocumentVersion"}}}},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"The API key or token lacks the scope required for this operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"No resource with that id exists in your organization","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded — back off and retry (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Unexpected server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/forms":{"get":{"operationId":"listForms","summary":"List forms","tags":["Forms"],"security":[{"apiKey":[]},{"bearer":[]}],"x-speakeasy-name-override":"list","x-speakeasy-pagination":{"type":"offsetLimit","inputs":[{"name":"page","in":"parameters","type":"page"},{"name":"pageSize","in":"parameters","type":"limit"}],"outputs":{"results":"$.data"}},"x-speakeasy-retries":{"strategy":"backoff","backoff":{"initialInterval":500,"maxInterval":30000,"maxElapsedTime":30000,"exponent":1.5},"statusCodes":["429","5XX"],"retryConnectionErrors":true},"parameters":[{"schema":{"type":"integer","minimum":1,"default":1},"required":false,"name":"page","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":25},"required":false,"name":"pageSize","in":"query"},{"schema":{"type":"string","enum":["inquiry","questionnaire"]},"required":false,"name":"kind","in":"query"},{"schema":{"type":"string"},"required":false,"name":"slug","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FormList"}}}},"400":{"description":"The request was malformed or failed schema validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"The API key or token lacks the scope required for this operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded — back off and retry (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Unexpected server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/forms/{id}":{"get":{"operationId":"getForm","summary":"Get a form","tags":["Forms"],"security":[{"apiKey":[]},{"bearer":[]}],"x-speakeasy-name-override":"get","x-speakeasy-retries":{"strategy":"backoff","backoff":{"initialInterval":500,"maxInterval":30000,"maxElapsedTime":30000,"exponent":1.5},"statusCodes":["429","5XX"],"retryConnectionErrors":true},"parameters":[{"schema":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"required":true,"description":"UUID v4","name":"id","in":"path"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Form"}}}},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"The API key or token lacks the scope required for this operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"No resource with that id exists in your organization","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded — back off and retry (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Unexpected server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/form-submissions":{"get":{"operationId":"listFormSubmissions","summary":"List form submissions","description":"Answers are omitted from the list (returned as `null`); fetch a single submission to read them.","tags":["Form Submissions"],"security":[{"apiKey":[]},{"bearer":[]}],"x-speakeasy-name-override":"list","x-speakeasy-pagination":{"type":"offsetLimit","inputs":[{"name":"page","in":"parameters","type":"page"},{"name":"pageSize","in":"parameters","type":"limit"}],"outputs":{"results":"$.data"}},"x-speakeasy-retries":{"strategy":"backoff","backoff":{"initialInterval":500,"maxInterval":30000,"maxElapsedTime":30000,"exponent":1.5},"statusCodes":["429","5XX"],"retryConnectionErrors":true},"parameters":[{"schema":{"type":"integer","minimum":1,"default":1},"required":false,"name":"page","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":25},"required":false,"name":"pageSize","in":"query"},{"schema":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"required":false,"description":"UUID v4","name":"formId","in":"query"},{"schema":{"type":"string","enum":["inquiry","questionnaire"]},"required":false,"name":"kind","in":"query"},{"schema":{"type":"string","enum":["in_progress","submitted"]},"required":false,"name":"status","in":"query"},{"schema":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"required":false,"description":"UUID v4","name":"contactId","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FormSubmissionList"}}}},"400":{"description":"The request was malformed or failed schema validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"The API key or token lacks the scope required for this operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded — back off and retry (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Unexpected server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/form-submissions/{id}":{"get":{"operationId":"getFormSubmission","summary":"Get a form submission (with answers)","tags":["Form Submissions"],"security":[{"apiKey":[]},{"bearer":[]}],"x-speakeasy-name-override":"get","x-speakeasy-retries":{"strategy":"backoff","backoff":{"initialInterval":500,"maxInterval":30000,"maxElapsedTime":30000,"exponent":1.5},"statusCodes":["429","5XX"],"retryConnectionErrors":true},"parameters":[{"schema":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"required":true,"description":"UUID v4","name":"id","in":"path"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FormSubmission"}}}},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"The API key or token lacks the scope required for this operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"No resource with that id exists in your organization","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded — back off and retry (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Unexpected server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/inquiries":{"post":{"operationId":"createInquiry","summary":"Submit an inquiry (capture a lead)","tags":["Inquiries"],"security":[{"apiKey":[]},{"bearer":[]}],"x-speakeasy-name-override":"create","parameters":[{"schema":{"type":"string","maxLength":255,"description":"Optional unique key that makes this request safely retryable. Replaying the same key returns the original response instead of creating a duplicate; reusing a key with a different request body returns 409.","example":"create-client-2026-05-24-a1b2c3"},"required":false,"description":"Optional unique key that makes this request safely retryable. Replaying the same key returns the original response instead of creating a duplicate; reusing a key with a different request body returns 409.","name":"Idempotency-Key","in":"header"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InquiryCreate"}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Inquiry"}}}},"400":{"description":"The request was malformed or failed schema validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"The API key or token lacks the scope required for this operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Either the Idempotency-Key was reused with a different request body (`idempotency_key_reused`), or a request carrying the same key is still in flight (`request_in_progress` — retry after `Retry-After`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded — back off and retry (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Unexpected server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/payments":{"get":{"operationId":"listPayments","summary":"List payments","tags":["Payments"],"security":[{"apiKey":[]},{"bearer":[]}],"x-speakeasy-name-override":"list","x-speakeasy-pagination":{"type":"offsetLimit","inputs":[{"name":"page","in":"parameters","type":"page"},{"name":"pageSize","in":"parameters","type":"limit"}],"outputs":{"results":"$.data"}},"x-speakeasy-retries":{"strategy":"backoff","backoff":{"initialInterval":500,"maxInterval":30000,"maxElapsedTime":30000,"exponent":1.5},"statusCodes":["429","5XX"],"retryConnectionErrors":true},"parameters":[{"schema":{"type":"integer","minimum":1,"default":1},"required":false,"name":"page","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":25},"required":false,"name":"pageSize","in":"query"},{"schema":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"required":false,"description":"UUID v4","name":"clientId","in":"query"},{"schema":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"required":false,"description":"UUID v4","name":"invoiceId","in":"query"},{"schema":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"required":false,"description":"UUID v4","name":"saleId","in":"query"},{"schema":{"type":"string","enum":["pending","processing","succeeded","failed"]},"required":false,"name":"status","in":"query"},{"schema":{"type":"string","enum":["payment","refund","chargeback","dispute_fee","adjustment"]},"required":false,"name":"kind","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentList"}}}},"400":{"description":"The request was malformed or failed schema validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"The API key or token lacks the scope required for this operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded — back off and retry (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Unexpected server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}},"post":{"operationId":"createPayment","summary":"Record a manual payment","description":"Records a manually-collected payment (check, bank transfer, cash, etc.). Stripe payments are recorded automatically via webhooks and cannot be created here. Payments are immutable after creation except for `reference` and `notes`. To reverse a payment, record a refund (kind=refund, negative amount, refundOfId pointing at the original).","tags":["Payments"],"security":[{"apiKey":[]},{"bearer":[]}],"x-speakeasy-name-override":"create","parameters":[{"schema":{"type":"string","maxLength":255,"description":"Optional unique key that makes this request safely retryable. Replaying the same key returns the original response instead of creating a duplicate; reusing a key with a different request body returns 409.","example":"create-client-2026-05-24-a1b2c3"},"required":false,"description":"Optional unique key that makes this request safely retryable. Replaying the same key returns the original response instead of creating a duplicate; reusing a key with a different request body returns 409.","name":"Idempotency-Key","in":"header"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentCreate"}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Payment"}}}},"400":{"description":"The request was malformed or failed schema validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"The API key or token lacks the scope required for this operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Either the Idempotency-Key was reused with a different request body (`idempotency_key_reused`), or a request carrying the same key is still in flight (`request_in_progress` — retry after `Retry-After`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded — back off and retry (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Unexpected server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/payments/{id}":{"get":{"operationId":"getPayment","summary":"Get a payment","tags":["Payments"],"security":[{"apiKey":[]},{"bearer":[]}],"x-speakeasy-name-override":"get","x-speakeasy-retries":{"strategy":"backoff","backoff":{"initialInterval":500,"maxInterval":30000,"maxElapsedTime":30000,"exponent":1.5},"statusCodes":["429","5XX"],"retryConnectionErrors":true},"parameters":[{"schema":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"required":true,"description":"UUID v4","name":"id","in":"path"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Payment"}}}},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"The API key or token lacks the scope required for this operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"No resource with that id exists in your organization","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded — back off and retry (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Unexpected server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}},"patch":{"operationId":"updatePayment","summary":"Update a payment (notes/reference only — payments are otherwise immutable)","tags":["Payments"],"security":[{"apiKey":[]},{"bearer":[]}],"x-speakeasy-name-override":"update","x-speakeasy-retries":{"strategy":"backoff","backoff":{"initialInterval":500,"maxInterval":30000,"maxElapsedTime":30000,"exponent":1.5},"statusCodes":["429","5XX"],"retryConnectionErrors":true},"parameters":[{"schema":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"required":true,"description":"UUID v4","name":"id","in":"path"},{"schema":{"type":"string","maxLength":255,"description":"Optional unique key that makes this request safely retryable. Replaying the same key returns the original response instead of creating a duplicate; reusing a key with a different request body returns 409.","example":"create-client-2026-05-24-a1b2c3"},"required":false,"description":"Optional unique key that makes this request safely retryable. Replaying the same key returns the original response instead of creating a duplicate; reusing a key with a different request body returns 409.","name":"Idempotency-Key","in":"header"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentUpdate"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Payment"}}}},"400":{"description":"The request was malformed or failed schema validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"The API key or token lacks the scope required for this operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"No resource with that id exists in your organization","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Either the Idempotency-Key was reused with a different request body (`idempotency_key_reused`), or a request carrying the same key is still in flight (`request_in_progress` — retry after `Retry-After`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded — back off and retry (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Unexpected server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/payouts":{"get":{"operationId":"listPayouts","summary":"List payouts","tags":["Payouts"],"security":[{"apiKey":[]},{"bearer":[]}],"x-speakeasy-name-override":"list","x-speakeasy-pagination":{"type":"offsetLimit","inputs":[{"name":"page","in":"parameters","type":"page"},{"name":"pageSize","in":"parameters","type":"limit"}],"outputs":{"results":"$.data"}},"x-speakeasy-retries":{"strategy":"backoff","backoff":{"initialInterval":500,"maxInterval":30000,"maxElapsedTime":30000,"exponent":1.5},"statusCodes":["429","5XX"],"retryConnectionErrors":true},"parameters":[{"schema":{"type":"integer","minimum":1,"default":1},"required":false,"name":"page","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":25},"required":false,"name":"pageSize","in":"query"},{"schema":{"type":"string","enum":["pending","in_transit","paid","failed","canceled"]},"required":false,"name":"status","in":"query"},{"schema":{"type":"string","format":"date"},"required":false,"name":"arrivalDateFrom","in":"query"},{"schema":{"type":"string","format":"date"},"required":false,"name":"arrivalDateTo","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PayoutList"}}}},"400":{"description":"The request was malformed or failed schema validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"The API key or token lacks the scope required for this operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded — back off and retry (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Unexpected server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/payouts/{id}":{"get":{"operationId":"getPayout","summary":"Get a payout","tags":["Payouts"],"security":[{"apiKey":[]},{"bearer":[]}],"x-speakeasy-name-override":"get","x-speakeasy-retries":{"strategy":"backoff","backoff":{"initialInterval":500,"maxInterval":30000,"maxElapsedTime":30000,"exponent":1.5},"statusCodes":["429","5XX"],"retryConnectionErrors":true},"parameters":[{"schema":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"required":true,"description":"UUID v4","name":"id","in":"path"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Payout"}}}},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"The API key or token lacks the scope required for this operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"No resource with that id exists in your organization","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded — back off and retry (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Unexpected server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/sales":{"get":{"operationId":"listSales","summary":"List sales","tags":["Sales"],"security":[{"apiKey":[]},{"bearer":[]}],"x-speakeasy-name-override":"list","x-speakeasy-pagination":{"type":"offsetLimit","inputs":[{"name":"page","in":"parameters","type":"page"},{"name":"pageSize","in":"parameters","type":"limit"}],"outputs":{"results":"$.data"}},"x-speakeasy-retries":{"strategy":"backoff","backoff":{"initialInterval":500,"maxInterval":30000,"maxElapsedTime":30000,"exponent":1.5},"statusCodes":["429","5XX"],"retryConnectionErrors":true},"parameters":[{"schema":{"type":"integer","minimum":1,"default":1},"required":false,"name":"page","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":25},"required":false,"name":"pageSize","in":"query"},{"schema":{"type":"string","enum":["completed","refunded","partially-refunded","voided"]},"required":false,"name":"status","in":"query"},{"schema":{"type":"string","enum":["pos","manual","stripe","shopify","etsy","square-import","api"]},"required":false,"name":"channel","in":"query"},{"schema":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"required":false,"description":"UUID v4","name":"clientId","in":"query"},{"schema":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"required":false,"description":"UUID v4","name":"businessId","in":"query"},{"schema":{"type":"string","format":"date"},"required":false,"name":"saleDateFrom","in":"query"},{"schema":{"type":"string","format":"date"},"required":false,"name":"saleDateTo","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SaleList"}}}},"400":{"description":"The request was malformed or failed schema validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"The API key or token lacks the scope required for this operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded — back off and retry (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Unexpected server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/sales/{id}":{"get":{"operationId":"getSale","summary":"Get a sale","tags":["Sales"],"security":[{"apiKey":[]},{"bearer":[]}],"x-speakeasy-name-override":"get","x-speakeasy-retries":{"strategy":"backoff","backoff":{"initialInterval":500,"maxInterval":30000,"maxElapsedTime":30000,"exponent":1.5},"statusCodes":["429","5XX"],"retryConnectionErrors":true},"parameters":[{"schema":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"required":true,"description":"UUID v4","name":"id","in":"path"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Sale"}}}},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"The API key or token lacks the scope required for this operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"No resource with that id exists in your organization","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded — back off and retry (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Unexpected server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/time-entries":{"get":{"operationId":"listTimeEntries","summary":"List time entries","tags":["TimeEntries"],"security":[{"apiKey":[]},{"bearer":[]}],"x-speakeasy-name-override":"list","x-speakeasy-pagination":{"type":"offsetLimit","inputs":[{"name":"page","in":"parameters","type":"page"},{"name":"pageSize","in":"parameters","type":"limit"}],"outputs":{"results":"$.data"}},"x-speakeasy-retries":{"strategy":"backoff","backoff":{"initialInterval":500,"maxInterval":30000,"maxElapsedTime":30000,"exponent":1.5},"statusCodes":["429","5XX"],"retryConnectionErrors":true},"parameters":[{"schema":{"type":"integer","minimum":1,"default":1},"required":false,"name":"page","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":25},"required":false,"name":"pageSize","in":"query"},{"schema":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"required":false,"description":"UUID v4","name":"projectId","in":"query"},{"schema":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"required":false,"description":"UUID v4","name":"clientId","in":"query"},{"schema":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"required":false,"description":"UUID v4","name":"memberId","in":"query"},{"schema":{"type":"string","format":"date"},"required":false,"name":"dateFrom","in":"query"},{"schema":{"type":"string","format":"date"},"required":false,"name":"dateTo","in":"query"},{"schema":{"type":"string","enum":["true","false"],"description":"Literal `true` or `false`. Any other value is rejected with 400 invalid_request."},"required":false,"description":"Literal `true` or `false`. Any other value is rejected with 400 invalid_request.","name":"billable","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TimeEntryList"}}}},"400":{"description":"The request was malformed or failed schema validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"The API key or token lacks the scope required for this operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded — back off and retry (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Unexpected server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}},"post":{"operationId":"createTimeEntry","summary":"Create a time entry","tags":["TimeEntries"],"security":[{"apiKey":[]},{"bearer":[]}],"x-speakeasy-name-override":"create","parameters":[{"schema":{"type":"string","maxLength":255,"description":"Optional unique key that makes this request safely retryable. Replaying the same key returns the original response instead of creating a duplicate; reusing a key with a different request body returns 409.","example":"create-client-2026-05-24-a1b2c3"},"required":false,"description":"Optional unique key that makes this request safely retryable. Replaying the same key returns the original response instead of creating a duplicate; reusing a key with a different request body returns 409.","name":"Idempotency-Key","in":"header"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TimeEntryCreate"}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TimeEntry"}}}},"400":{"description":"The request was malformed or failed schema validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"The API key or token lacks the scope required for this operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Either the Idempotency-Key was reused with a different request body (`idempotency_key_reused`), or a request carrying the same key is still in flight (`request_in_progress` — retry after `Retry-After`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded — back off and retry (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Unexpected server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/time-entries/{id}":{"get":{"operationId":"getTimeEntry","summary":"Get a time entry","tags":["TimeEntries"],"security":[{"apiKey":[]},{"bearer":[]}],"x-speakeasy-name-override":"get","x-speakeasy-retries":{"strategy":"backoff","backoff":{"initialInterval":500,"maxInterval":30000,"maxElapsedTime":30000,"exponent":1.5},"statusCodes":["429","5XX"],"retryConnectionErrors":true},"parameters":[{"schema":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"required":true,"description":"UUID v4","name":"id","in":"path"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TimeEntry"}}}},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"The API key or token lacks the scope required for this operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"No resource with that id exists in your organization","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded — back off and retry (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Unexpected server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}},"patch":{"operationId":"updateTimeEntry","summary":"Update a time entry","description":"Time entries billed to a paid invoice cannot be edited (the date field is immutable in that case).","tags":["TimeEntries"],"security":[{"apiKey":[]},{"bearer":[]}],"x-speakeasy-name-override":"update","x-speakeasy-retries":{"strategy":"backoff","backoff":{"initialInterval":500,"maxInterval":30000,"maxElapsedTime":30000,"exponent":1.5},"statusCodes":["429","5XX"],"retryConnectionErrors":true},"parameters":[{"schema":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"required":true,"description":"UUID v4","name":"id","in":"path"},{"schema":{"type":"string","maxLength":255,"description":"Optional unique key that makes this request safely retryable. Replaying the same key returns the original response instead of creating a duplicate; reusing a key with a different request body returns 409.","example":"create-client-2026-05-24-a1b2c3"},"required":false,"description":"Optional unique key that makes this request safely retryable. Replaying the same key returns the original response instead of creating a duplicate; reusing a key with a different request body returns 409.","name":"Idempotency-Key","in":"header"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TimeEntryUpdate"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TimeEntry"}}}},"400":{"description":"The request was malformed or failed schema validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"The API key or token lacks the scope required for this operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"No resource with that id exists in your organization","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Either the Idempotency-Key was reused with a different request body (`idempotency_key_reused`), or a request carrying the same key is still in flight (`request_in_progress` — retry after `Retry-After`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded — back off and retry (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Unexpected server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}},"delete":{"operationId":"deleteTimeEntry","summary":"Delete a time entry","description":"Time entries billed to a paid invoice cannot be deleted.","tags":["TimeEntries"],"security":[{"apiKey":[]},{"bearer":[]}],"x-speakeasy-name-override":"delete","x-speakeasy-retries":{"strategy":"backoff","backoff":{"initialInterval":500,"maxInterval":30000,"maxElapsedTime":30000,"exponent":1.5},"statusCodes":["429","5XX"],"retryConnectionErrors":true},"parameters":[{"schema":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"required":true,"description":"UUID v4","name":"id","in":"path"}],"responses":{"204":{"description":"Deleted"},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"The API key or token lacks the scope required for this operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"No resource with that id exists in your organization","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded — back off and retry (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Unexpected server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/milestones":{"get":{"operationId":"listMilestones","summary":"List milestones","tags":["Milestones"],"security":[{"apiKey":[]},{"bearer":[]}],"x-speakeasy-name-override":"list","x-speakeasy-pagination":{"type":"offsetLimit","inputs":[{"name":"page","in":"parameters","type":"page"},{"name":"pageSize","in":"parameters","type":"limit"}],"outputs":{"results":"$.data"}},"x-speakeasy-retries":{"strategy":"backoff","backoff":{"initialInterval":500,"maxInterval":30000,"maxElapsedTime":30000,"exponent":1.5},"statusCodes":["429","5XX"],"retryConnectionErrors":true},"parameters":[{"schema":{"type":"integer","minimum":1,"default":1},"required":false,"name":"page","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":25},"required":false,"name":"pageSize","in":"query"},{"schema":{"type":"string","enum":["projects","client-documents"]},"required":false,"name":"parentType","in":"query"},{"schema":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"required":false,"description":"UUID v4","name":"parentId","in":"query"},{"schema":{"type":"string","enum":["pending","in-progress","completed"]},"required":false,"name":"status","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MilestoneList"}}}},"400":{"description":"The request was malformed or failed schema validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"The API key or token lacks the scope required for this operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded — back off and retry (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Unexpected server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}},"post":{"operationId":"createMilestone","summary":"Create a milestone","description":"Milestones attach to either a project or a form/agreement — `parentType` + `parentId` are both required.","tags":["Milestones"],"security":[{"apiKey":[]},{"bearer":[]}],"x-speakeasy-name-override":"create","parameters":[{"schema":{"type":"string","maxLength":255,"description":"Optional unique key that makes this request safely retryable. Replaying the same key returns the original response instead of creating a duplicate; reusing a key with a different request body returns 409.","example":"create-client-2026-05-24-a1b2c3"},"required":false,"description":"Optional unique key that makes this request safely retryable. Replaying the same key returns the original response instead of creating a duplicate; reusing a key with a different request body returns 409.","name":"Idempotency-Key","in":"header"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MilestoneCreate"}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Milestone"}}}},"400":{"description":"The request was malformed or failed schema validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"The API key or token lacks the scope required for this operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Either the Idempotency-Key was reused with a different request body (`idempotency_key_reused`), or a request carrying the same key is still in flight (`request_in_progress` — retry after `Retry-After`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded — back off and retry (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Unexpected server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/milestones/{id}":{"get":{"operationId":"getMilestone","summary":"Get a milestone","tags":["Milestones"],"security":[{"apiKey":[]},{"bearer":[]}],"x-speakeasy-name-override":"get","x-speakeasy-retries":{"strategy":"backoff","backoff":{"initialInterval":500,"maxInterval":30000,"maxElapsedTime":30000,"exponent":1.5},"statusCodes":["429","5XX"],"retryConnectionErrors":true},"parameters":[{"schema":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"required":true,"description":"UUID v4","name":"id","in":"path"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Milestone"}}}},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"The API key or token lacks the scope required for this operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"No resource with that id exists in your organization","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded — back off and retry (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Unexpected server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}},"patch":{"operationId":"updateMilestone","summary":"Update a milestone","tags":["Milestones"],"security":[{"apiKey":[]},{"bearer":[]}],"x-speakeasy-name-override":"update","x-speakeasy-retries":{"strategy":"backoff","backoff":{"initialInterval":500,"maxInterval":30000,"maxElapsedTime":30000,"exponent":1.5},"statusCodes":["429","5XX"],"retryConnectionErrors":true},"parameters":[{"schema":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"required":true,"description":"UUID v4","name":"id","in":"path"},{"schema":{"type":"string","maxLength":255,"description":"Optional unique key that makes this request safely retryable. Replaying the same key returns the original response instead of creating a duplicate; reusing a key with a different request body returns 409.","example":"create-client-2026-05-24-a1b2c3"},"required":false,"description":"Optional unique key that makes this request safely retryable. Replaying the same key returns the original response instead of creating a duplicate; reusing a key with a different request body returns 409.","name":"Idempotency-Key","in":"header"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MilestoneUpdate"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Milestone"}}}},"400":{"description":"The request was malformed or failed schema validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"The API key or token lacks the scope required for this operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"No resource with that id exists in your organization","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Either the Idempotency-Key was reused with a different request body (`idempotency_key_reused`), or a request carrying the same key is still in flight (`request_in_progress` — retry after `Retry-After`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded — back off and retry (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Unexpected server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}},"delete":{"operationId":"deleteMilestone","summary":"Delete a milestone","tags":["Milestones"],"security":[{"apiKey":[]},{"bearer":[]}],"x-speakeasy-name-override":"delete","x-speakeasy-retries":{"strategy":"backoff","backoff":{"initialInterval":500,"maxInterval":30000,"maxElapsedTime":30000,"exponent":1.5},"statusCodes":["429","5XX"],"retryConnectionErrors":true},"parameters":[{"schema":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"required":true,"description":"UUID v4","name":"id","in":"path"}],"responses":{"204":{"description":"Deleted"},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"The API key or token lacks the scope required for this operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"No resource with that id exists in your organization","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded — back off and retry (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Unexpected server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/calendar-events":{"get":{"operationId":"listCalendarEvents","summary":"List calendar events","tags":["CalendarEvents"],"security":[{"apiKey":[]},{"bearer":[]}],"x-speakeasy-name-override":"list","x-speakeasy-pagination":{"type":"offsetLimit","inputs":[{"name":"page","in":"parameters","type":"page"},{"name":"pageSize","in":"parameters","type":"limit"}],"outputs":{"results":"$.data"}},"x-speakeasy-retries":{"strategy":"backoff","backoff":{"initialInterval":500,"maxInterval":30000,"maxElapsedTime":30000,"exponent":1.5},"statusCodes":["429","5XX"],"retryConnectionErrors":true},"parameters":[{"schema":{"type":"integer","minimum":1,"default":1},"required":false,"name":"page","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":25},"required":false,"name":"pageSize","in":"query"},{"schema":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"required":false,"description":"UUID v4","name":"projectId","in":"query"},{"schema":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"required":false,"description":"UUID v4","name":"clientId","in":"query"},{"schema":{"type":"string","format":"date-time","description":"ISO 8601 timestamp. A UTC offset (`+02:00`) is accepted as well as `Z`."},"required":false,"description":"ISO 8601 timestamp. A UTC offset (`+02:00`) is accepted as well as `Z`.","name":"startsAfter","in":"query"},{"schema":{"type":"string","format":"date-time","description":"ISO 8601 timestamp. A UTC offset (`+02:00`) is accepted as well as `Z`."},"required":false,"description":"ISO 8601 timestamp. A UTC offset (`+02:00`) is accepted as well as `Z`.","name":"startsBefore","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CalendarEventList"}}}},"400":{"description":"The request was malformed or failed schema validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"The API key or token lacks the scope required for this operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded — back off and retry (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Unexpected server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}},"post":{"operationId":"createCalendarEvent","summary":"Create a calendar event","description":"Only manually-created events accepted via API; events synced from Google/Outlook/Apple are read-only.","tags":["CalendarEvents"],"security":[{"apiKey":[]},{"bearer":[]}],"x-speakeasy-name-override":"create","parameters":[{"schema":{"type":"string","maxLength":255,"description":"Optional unique key that makes this request safely retryable. Replaying the same key returns the original response instead of creating a duplicate; reusing a key with a different request body returns 409.","example":"create-client-2026-05-24-a1b2c3"},"required":false,"description":"Optional unique key that makes this request safely retryable. Replaying the same key returns the original response instead of creating a duplicate; reusing a key with a different request body returns 409.","name":"Idempotency-Key","in":"header"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CalendarEventCreate"}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CalendarEvent"}}}},"400":{"description":"The request was malformed or failed schema validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"The API key or token lacks the scope required for this operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Either the Idempotency-Key was reused with a different request body (`idempotency_key_reused`), or a request carrying the same key is still in flight (`request_in_progress` — retry after `Retry-After`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded — back off and retry (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Unexpected server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/calendar-events/{id}":{"get":{"operationId":"getCalendarEvent","summary":"Get a calendar event","tags":["CalendarEvents"],"security":[{"apiKey":[]},{"bearer":[]}],"x-speakeasy-name-override":"get","x-speakeasy-retries":{"strategy":"backoff","backoff":{"initialInterval":500,"maxInterval":30000,"maxElapsedTime":30000,"exponent":1.5},"statusCodes":["429","5XX"],"retryConnectionErrors":true},"parameters":[{"schema":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"required":true,"description":"UUID v4","name":"id","in":"path"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CalendarEvent"}}}},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"The API key or token lacks the scope required for this operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"No resource with that id exists in your organization","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded — back off and retry (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Unexpected server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}},"patch":{"operationId":"updateCalendarEvent","summary":"Update a calendar event","description":"Externally-sourced events (google/microsoft/apple) are read-only.","tags":["CalendarEvents"],"security":[{"apiKey":[]},{"bearer":[]}],"x-speakeasy-name-override":"update","x-speakeasy-retries":{"strategy":"backoff","backoff":{"initialInterval":500,"maxInterval":30000,"maxElapsedTime":30000,"exponent":1.5},"statusCodes":["429","5XX"],"retryConnectionErrors":true},"parameters":[{"schema":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"required":true,"description":"UUID v4","name":"id","in":"path"},{"schema":{"type":"string","maxLength":255,"description":"Optional unique key that makes this request safely retryable. Replaying the same key returns the original response instead of creating a duplicate; reusing a key with a different request body returns 409.","example":"create-client-2026-05-24-a1b2c3"},"required":false,"description":"Optional unique key that makes this request safely retryable. Replaying the same key returns the original response instead of creating a duplicate; reusing a key with a different request body returns 409.","name":"Idempotency-Key","in":"header"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CalendarEventUpdate"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CalendarEvent"}}}},"400":{"description":"The request was malformed or failed schema validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"The API key or token lacks the scope required for this operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"No resource with that id exists in your organization","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Either the Idempotency-Key was reused with a different request body (`idempotency_key_reused`), or a request carrying the same key is still in flight (`request_in_progress` — retry after `Retry-After`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded — back off and retry (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Unexpected server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}},"delete":{"operationId":"deleteCalendarEvent","summary":"Delete a calendar event","tags":["CalendarEvents"],"security":[{"apiKey":[]},{"bearer":[]}],"x-speakeasy-name-override":"delete","x-speakeasy-retries":{"strategy":"backoff","backoff":{"initialInterval":500,"maxInterval":30000,"maxElapsedTime":30000,"exponent":1.5},"statusCodes":["429","5XX"],"retryConnectionErrors":true},"parameters":[{"schema":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"required":true,"description":"UUID v4","name":"id","in":"path"}],"responses":{"204":{"description":"Deleted"},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"The API key or token lacks the scope required for this operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"No resource with that id exists in your organization","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded — back off and retry (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Unexpected server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/transactions":{"get":{"operationId":"listTransactions","summary":"List transactions","tags":["Transactions"],"security":[{"apiKey":[]},{"bearer":[]}],"x-speakeasy-name-override":"list","x-speakeasy-pagination":{"type":"offsetLimit","inputs":[{"name":"page","in":"parameters","type":"page"},{"name":"pageSize","in":"parameters","type":"limit"}],"outputs":{"results":"$.data"}},"x-speakeasy-retries":{"strategy":"backoff","backoff":{"initialInterval":500,"maxInterval":30000,"maxElapsedTime":30000,"exponent":1.5},"statusCodes":["429","5XX"],"retryConnectionErrors":true},"parameters":[{"schema":{"type":"integer","minimum":1,"default":1},"required":false,"name":"page","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":25},"required":false,"name":"pageSize","in":"query"},{"schema":{"type":"string","enum":["cost","revenue"]},"required":false,"name":"direction","in":"query"},{"schema":{"type":"string","enum":["active","paused","archived"]},"required":false,"name":"status","in":"query"},{"schema":{"type":"string","enum":["one-time","monthly","quarterly","annual"]},"required":false,"name":"frequency","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransactionList"}}}},"400":{"description":"The request was malformed or failed schema validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"The API key or token lacks the scope required for this operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded — back off and retry (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Unexpected server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}},"post":{"operationId":"createTransaction","summary":"Create a transaction (expense or charge)","description":"A `global` transaction applies org-wide (all clients for revenue, overhead for cost), so it cannot carry `assignments` — send an empty array, or use mode `each`/`split` to scope it. Enforced against the *stored* row as well as the request body, so a PATCH that omits `mode` is still checked. Refused with `400 invalid_request` and `details.code: \"global_mode_has_assignments\"`.","tags":["Transactions"],"security":[{"apiKey":[]},{"bearer":[]}],"x-speakeasy-name-override":"create","parameters":[{"schema":{"type":"string","maxLength":255,"description":"Optional unique key that makes this request safely retryable. Replaying the same key returns the original response instead of creating a duplicate; reusing a key with a different request body returns 409.","example":"create-client-2026-05-24-a1b2c3"},"required":false,"description":"Optional unique key that makes this request safely retryable. Replaying the same key returns the original response instead of creating a duplicate; reusing a key with a different request body returns 409.","name":"Idempotency-Key","in":"header"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransactionCreate"}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Transaction"}}}},"400":{"description":"The request was malformed or failed schema validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"The API key or token lacks the scope required for this operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Either the Idempotency-Key was reused with a different request body (`idempotency_key_reused`), or a request carrying the same key is still in flight (`request_in_progress` — retry after `Retry-After`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded — back off and retry (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Unexpected server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/transactions/{id}":{"get":{"operationId":"getTransaction","summary":"Get a transaction","tags":["Transactions"],"security":[{"apiKey":[]},{"bearer":[]}],"x-speakeasy-name-override":"get","x-speakeasy-retries":{"strategy":"backoff","backoff":{"initialInterval":500,"maxInterval":30000,"maxElapsedTime":30000,"exponent":1.5},"statusCodes":["429","5XX"],"retryConnectionErrors":true},"parameters":[{"schema":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"required":true,"description":"UUID v4","name":"id","in":"path"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Transaction"}}}},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"The API key or token lacks the scope required for this operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"No resource with that id exists in your organization","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded — back off and retry (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Unexpected server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}},"patch":{"operationId":"updateTransaction","summary":"Update a transaction","description":"Transactions billed to a sent/paid invoice may be frozen — the server will return 409 if so. A `global` transaction applies org-wide (all clients for revenue, overhead for cost), so it cannot carry `assignments` — send an empty array, or use mode `each`/`split` to scope it. Enforced against the *stored* row as well as the request body, so a PATCH that omits `mode` is still checked. Refused with `400 invalid_request` and `details.code: \"global_mode_has_assignments\"`.","tags":["Transactions"],"security":[{"apiKey":[]},{"bearer":[]}],"x-speakeasy-name-override":"update","x-speakeasy-retries":{"strategy":"backoff","backoff":{"initialInterval":500,"maxInterval":30000,"maxElapsedTime":30000,"exponent":1.5},"statusCodes":["429","5XX"],"retryConnectionErrors":true},"parameters":[{"schema":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"required":true,"description":"UUID v4","name":"id","in":"path"},{"schema":{"type":"string","maxLength":255,"description":"Optional unique key that makes this request safely retryable. Replaying the same key returns the original response instead of creating a duplicate; reusing a key with a different request body returns 409.","example":"create-client-2026-05-24-a1b2c3"},"required":false,"description":"Optional unique key that makes this request safely retryable. Replaying the same key returns the original response instead of creating a duplicate; reusing a key with a different request body returns 409.","name":"Idempotency-Key","in":"header"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransactionUpdate"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Transaction"}}}},"400":{"description":"The request was malformed or failed schema validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"The API key or token lacks the scope required for this operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"No resource with that id exists in your organization","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Either the Idempotency-Key was reused with a different request body (`idempotency_key_reused`), or a request carrying the same key is still in flight (`request_in_progress` — retry after `Retry-After`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded — back off and retry (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Unexpected server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}},"delete":{"operationId":"deleteTransaction","summary":"Delete a transaction","description":"Transactions billed to a sent/paid invoice cannot be deleted.","tags":["Transactions"],"security":[{"apiKey":[]},{"bearer":[]}],"x-speakeasy-name-override":"delete","x-speakeasy-retries":{"strategy":"backoff","backoff":{"initialInterval":500,"maxInterval":30000,"maxElapsedTime":30000,"exponent":1.5},"statusCodes":["429","5XX"],"retryConnectionErrors":true},"parameters":[{"schema":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"required":true,"description":"UUID v4","name":"id","in":"path"}],"responses":{"204":{"description":"Deleted"},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"The API key or token lacks the scope required for this operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"No resource with that id exists in your organization","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded — back off and retry (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Unexpected server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/catalog-items":{"get":{"operationId":"listCatalogItems","summary":"List catalog items","tags":["CatalogItems"],"security":[{"apiKey":[]},{"bearer":[]}],"x-speakeasy-name-override":"list","x-speakeasy-pagination":{"type":"offsetLimit","inputs":[{"name":"page","in":"parameters","type":"page"},{"name":"pageSize","in":"parameters","type":"limit"}],"outputs":{"results":"$.data"}},"x-speakeasy-retries":{"strategy":"backoff","backoff":{"initialInterval":500,"maxInterval":30000,"maxElapsedTime":30000,"exponent":1.5},"statusCodes":["429","5XX"],"retryConnectionErrors":true},"parameters":[{"schema":{"type":"integer","minimum":1,"default":1},"required":false,"name":"page","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":25},"required":false,"name":"pageSize","in":"query"},{"schema":{"type":"string","enum":["expense","charge"]},"required":false,"name":"type","in":"query"},{"schema":{"type":"string","enum":["active","paused","archived"]},"required":false,"name":"status","in":"query"},{"schema":{"type":"string","enum":["atom","bundle"]},"required":false,"name":"composition","in":"query"},{"schema":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"required":false,"description":"UUID v4","name":"clientId","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CatalogItemList"}}}},"400":{"description":"The request was malformed or failed schema validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"The API key or token lacks the scope required for this operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded — back off and retry (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Unexpected server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}},"post":{"operationId":"createCatalogItem","summary":"Create a catalog item","description":"`type: expense` items track cost; `type: charge` items track revenue.","tags":["CatalogItems"],"security":[{"apiKey":[]},{"bearer":[]}],"x-speakeasy-name-override":"create","parameters":[{"schema":{"type":"string","maxLength":255,"description":"Optional unique key that makes this request safely retryable. Replaying the same key returns the original response instead of creating a duplicate; reusing a key with a different request body returns 409.","example":"create-client-2026-05-24-a1b2c3"},"required":false,"description":"Optional unique key that makes this request safely retryable. Replaying the same key returns the original response instead of creating a duplicate; reusing a key with a different request body returns 409.","name":"Idempotency-Key","in":"header"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CatalogItemCreate"}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CatalogItem"}}}},"400":{"description":"The request was malformed or failed schema validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"The API key or token lacks the scope required for this operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Either the Idempotency-Key was reused with a different request body (`idempotency_key_reused`), or a request carrying the same key is still in flight (`request_in_progress` — retry after `Retry-After`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded — back off and retry (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Unexpected server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/catalog-items/{id}":{"get":{"operationId":"getCatalogItem","summary":"Get a catalog item","tags":["CatalogItems"],"security":[{"apiKey":[]},{"bearer":[]}],"x-speakeasy-name-override":"get","x-speakeasy-retries":{"strategy":"backoff","backoff":{"initialInterval":500,"maxInterval":30000,"maxElapsedTime":30000,"exponent":1.5},"statusCodes":["429","5XX"],"retryConnectionErrors":true},"parameters":[{"schema":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"required":true,"description":"UUID v4","name":"id","in":"path"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CatalogItem"}}}},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"The API key or token lacks the scope required for this operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"No resource with that id exists in your organization","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded — back off and retry (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Unexpected server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}},"patch":{"operationId":"updateCatalogItem","summary":"Update a catalog item","tags":["CatalogItems"],"security":[{"apiKey":[]},{"bearer":[]}],"x-speakeasy-name-override":"update","x-speakeasy-retries":{"strategy":"backoff","backoff":{"initialInterval":500,"maxInterval":30000,"maxElapsedTime":30000,"exponent":1.5},"statusCodes":["429","5XX"],"retryConnectionErrors":true},"parameters":[{"schema":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"required":true,"description":"UUID v4","name":"id","in":"path"},{"schema":{"type":"string","maxLength":255,"description":"Optional unique key that makes this request safely retryable. Replaying the same key returns the original response instead of creating a duplicate; reusing a key with a different request body returns 409.","example":"create-client-2026-05-24-a1b2c3"},"required":false,"description":"Optional unique key that makes this request safely retryable. Replaying the same key returns the original response instead of creating a duplicate; reusing a key with a different request body returns 409.","name":"Idempotency-Key","in":"header"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CatalogItemUpdate"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CatalogItem"}}}},"400":{"description":"The request was malformed or failed schema validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"The API key or token lacks the scope required for this operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"No resource with that id exists in your organization","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Either the Idempotency-Key was reused with a different request body (`idempotency_key_reused`), or a request carrying the same key is still in flight (`request_in_progress` — retry after `Retry-After`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded — back off and retry (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Unexpected server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}},"delete":{"operationId":"deleteCatalogItem","summary":"Delete a catalog item","tags":["CatalogItems"],"security":[{"apiKey":[]},{"bearer":[]}],"x-speakeasy-name-override":"delete","x-speakeasy-retries":{"strategy":"backoff","backoff":{"initialInterval":500,"maxInterval":30000,"maxElapsedTime":30000,"exponent":1.5},"statusCodes":["429","5XX"],"retryConnectionErrors":true},"parameters":[{"schema":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"required":true,"description":"UUID v4","name":"id","in":"path"}],"responses":{"204":{"description":"Deleted"},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"The API key or token lacks the scope required for this operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"No resource with that id exists in your organization","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded — back off and retry (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Unexpected server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/event-days":{"get":{"operationId":"listEventDays","summary":"List event days","tags":["Event Days"],"security":[{"apiKey":[]},{"bearer":[]}],"x-speakeasy-name-override":"list","x-speakeasy-pagination":{"type":"offsetLimit","inputs":[{"name":"page","in":"parameters","type":"page"},{"name":"pageSize","in":"parameters","type":"limit"}],"outputs":{"results":"$.data"}},"x-speakeasy-retries":{"strategy":"backoff","backoff":{"initialInterval":500,"maxInterval":30000,"maxElapsedTime":30000,"exponent":1.5},"statusCodes":["429","5XX"],"retryConnectionErrors":true},"parameters":[{"schema":{"type":"integer","minimum":1,"default":1},"required":false,"name":"page","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":25},"required":false,"name":"pageSize","in":"query"},{"schema":{"type":"string","enum":["draft","published","archived"]},"required":false,"name":"status","in":"query"},{"schema":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"required":false,"description":"UUID v4","name":"projectId","in":"query"},{"schema":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"required":false,"description":"UUID v4","name":"clientId","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventDayList"}}}},"400":{"description":"The request was malformed or failed schema validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"The API key or token lacks the scope required for this operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded — back off and retry (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Unexpected server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}},"post":{"operationId":"createEventDay","summary":"Create an event day","tags":["Event Days"],"security":[{"apiKey":[]},{"bearer":[]}],"x-speakeasy-name-override":"create","parameters":[{"schema":{"type":"string","maxLength":255,"description":"Optional unique key that makes this request safely retryable. Replaying the same key returns the original response instead of creating a duplicate; reusing a key with a different request body returns 409.","example":"create-client-2026-05-24-a1b2c3"},"required":false,"description":"Optional unique key that makes this request safely retryable. Replaying the same key returns the original response instead of creating a duplicate; reusing a key with a different request body returns 409.","name":"Idempotency-Key","in":"header"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventDayCreate"}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventDay"}}}},"400":{"description":"The request was malformed or failed schema validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"The API key or token lacks the scope required for this operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Either the Idempotency-Key was reused with a different request body (`idempotency_key_reused`), or a request carrying the same key is still in flight (`request_in_progress` — retry after `Retry-After`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded — back off and retry (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Unexpected server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/event-days/{id}":{"get":{"operationId":"getEventDay","summary":"Get an event day","tags":["Event Days"],"security":[{"apiKey":[]},{"bearer":[]}],"x-speakeasy-name-override":"get","x-speakeasy-retries":{"strategy":"backoff","backoff":{"initialInterval":500,"maxInterval":30000,"maxElapsedTime":30000,"exponent":1.5},"statusCodes":["429","5XX"],"retryConnectionErrors":true},"parameters":[{"schema":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"required":true,"description":"UUID v4","name":"id","in":"path"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventDay"}}}},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"The API key or token lacks the scope required for this operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"No resource with that id exists in your organization","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded — back off and retry (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Unexpected server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}},"patch":{"operationId":"updateEventDay","summary":"Update an event day","tags":["Event Days"],"security":[{"apiKey":[]},{"bearer":[]}],"x-speakeasy-name-override":"update","x-speakeasy-retries":{"strategy":"backoff","backoff":{"initialInterval":500,"maxInterval":30000,"maxElapsedTime":30000,"exponent":1.5},"statusCodes":["429","5XX"],"retryConnectionErrors":true},"parameters":[{"schema":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"required":true,"description":"UUID v4","name":"id","in":"path"},{"schema":{"type":"string","maxLength":255,"description":"Optional unique key that makes this request safely retryable. Replaying the same key returns the original response instead of creating a duplicate; reusing a key with a different request body returns 409.","example":"create-client-2026-05-24-a1b2c3"},"required":false,"description":"Optional unique key that makes this request safely retryable. Replaying the same key returns the original response instead of creating a duplicate; reusing a key with a different request body returns 409.","name":"Idempotency-Key","in":"header"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventDayUpdate"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventDay"}}}},"400":{"description":"The request was malformed or failed schema validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"The API key or token lacks the scope required for this operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"No resource with that id exists in your organization","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Either the Idempotency-Key was reused with a different request body (`idempotency_key_reused`), or a request carrying the same key is still in flight (`request_in_progress` — retry after `Retry-After`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded — back off and retry (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Unexpected server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}},"delete":{"operationId":"deleteEventDay","summary":"Delete an event day","tags":["Event Days"],"security":[{"apiKey":[]},{"bearer":[]}],"x-speakeasy-name-override":"delete","x-speakeasy-retries":{"strategy":"backoff","backoff":{"initialInterval":500,"maxInterval":30000,"maxElapsedTime":30000,"exponent":1.5},"statusCodes":["429","5XX"],"retryConnectionErrors":true},"parameters":[{"schema":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"required":true,"description":"UUID v4","name":"id","in":"path"}],"responses":{"204":{"description":"Deleted"},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"The API key or token lacks the scope required for this operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"No resource with that id exists in your organization","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded — back off and retry (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Unexpected server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/timeline-items":{"get":{"operationId":"listTimelineItems","summary":"List timeline items","tags":["Timeline Items"],"security":[{"apiKey":[]},{"bearer":[]}],"x-speakeasy-name-override":"list","x-speakeasy-pagination":{"type":"offsetLimit","inputs":[{"name":"page","in":"parameters","type":"page"},{"name":"pageSize","in":"parameters","type":"limit"}],"outputs":{"results":"$.data"}},"x-speakeasy-retries":{"strategy":"backoff","backoff":{"initialInterval":500,"maxInterval":30000,"maxElapsedTime":30000,"exponent":1.5},"statusCodes":["429","5XX"],"retryConnectionErrors":true},"parameters":[{"schema":{"type":"integer","minimum":1,"default":1},"required":false,"name":"page","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":25},"required":false,"name":"pageSize","in":"query"},{"schema":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"required":false,"description":"UUID v4","name":"eventDayId","in":"query"},{"schema":{"type":"string","enum":["pending","in-progress","completed","skipped"]},"required":false,"name":"status","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TimelineItemList"}}}},"400":{"description":"The request was malformed or failed schema validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"The API key or token lacks the scope required for this operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded — back off and retry (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Unexpected server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}},"post":{"operationId":"createTimelineItem","summary":"Create a timeline item","tags":["Timeline Items"],"security":[{"apiKey":[]},{"bearer":[]}],"x-speakeasy-name-override":"create","parameters":[{"schema":{"type":"string","maxLength":255,"description":"Optional unique key that makes this request safely retryable. Replaying the same key returns the original response instead of creating a duplicate; reusing a key with a different request body returns 409.","example":"create-client-2026-05-24-a1b2c3"},"required":false,"description":"Optional unique key that makes this request safely retryable. Replaying the same key returns the original response instead of creating a duplicate; reusing a key with a different request body returns 409.","name":"Idempotency-Key","in":"header"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TimelineItemCreate"}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TimelineItem"}}}},"400":{"description":"The request was malformed or failed schema validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"The API key or token lacks the scope required for this operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Either the Idempotency-Key was reused with a different request body (`idempotency_key_reused`), or a request carrying the same key is still in flight (`request_in_progress` — retry after `Retry-After`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded — back off and retry (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Unexpected server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/timeline-items/{id}":{"get":{"operationId":"getTimelineItem","summary":"Get a timeline item","tags":["Timeline Items"],"security":[{"apiKey":[]},{"bearer":[]}],"x-speakeasy-name-override":"get","x-speakeasy-retries":{"strategy":"backoff","backoff":{"initialInterval":500,"maxInterval":30000,"maxElapsedTime":30000,"exponent":1.5},"statusCodes":["429","5XX"],"retryConnectionErrors":true},"parameters":[{"schema":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"required":true,"description":"UUID v4","name":"id","in":"path"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TimelineItem"}}}},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"The API key or token lacks the scope required for this operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"No resource with that id exists in your organization","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded — back off and retry (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Unexpected server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}},"patch":{"operationId":"updateTimelineItem","summary":"Update a timeline item","tags":["Timeline Items"],"security":[{"apiKey":[]},{"bearer":[]}],"x-speakeasy-name-override":"update","x-speakeasy-retries":{"strategy":"backoff","backoff":{"initialInterval":500,"maxInterval":30000,"maxElapsedTime":30000,"exponent":1.5},"statusCodes":["429","5XX"],"retryConnectionErrors":true},"parameters":[{"schema":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"required":true,"description":"UUID v4","name":"id","in":"path"},{"schema":{"type":"string","maxLength":255,"description":"Optional unique key that makes this request safely retryable. Replaying the same key returns the original response instead of creating a duplicate; reusing a key with a different request body returns 409.","example":"create-client-2026-05-24-a1b2c3"},"required":false,"description":"Optional unique key that makes this request safely retryable. Replaying the same key returns the original response instead of creating a duplicate; reusing a key with a different request body returns 409.","name":"Idempotency-Key","in":"header"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TimelineItemUpdate"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TimelineItem"}}}},"400":{"description":"The request was malformed or failed schema validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"The API key or token lacks the scope required for this operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"No resource with that id exists in your organization","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Either the Idempotency-Key was reused with a different request body (`idempotency_key_reused`), or a request carrying the same key is still in flight (`request_in_progress` — retry after `Retry-After`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded — back off and retry (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Unexpected server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}},"delete":{"operationId":"deleteTimelineItem","summary":"Delete a timeline item","tags":["Timeline Items"],"security":[{"apiKey":[]},{"bearer":[]}],"x-speakeasy-name-override":"delete","x-speakeasy-retries":{"strategy":"backoff","backoff":{"initialInterval":500,"maxInterval":30000,"maxElapsedTime":30000,"exponent":1.5},"statusCodes":["429","5XX"],"retryConnectionErrors":true},"parameters":[{"schema":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"required":true,"description":"UUID v4","name":"id","in":"path"}],"responses":{"204":{"description":"Deleted"},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"The API key or token lacks the scope required for this operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"No resource with that id exists in your organization","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded — back off and retry (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Unexpected server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/event-day-vendors":{"get":{"operationId":"listEventDayVendors","summary":"List event day vendors","tags":["Event Day Vendors"],"security":[{"apiKey":[]},{"bearer":[]}],"x-speakeasy-name-override":"list","x-speakeasy-pagination":{"type":"offsetLimit","inputs":[{"name":"page","in":"parameters","type":"page"},{"name":"pageSize","in":"parameters","type":"limit"}],"outputs":{"results":"$.data"}},"x-speakeasy-retries":{"strategy":"backoff","backoff":{"initialInterval":500,"maxInterval":30000,"maxElapsedTime":30000,"exponent":1.5},"statusCodes":["429","5XX"],"retryConnectionErrors":true},"parameters":[{"schema":{"type":"integer","minimum":1,"default":1},"required":false,"name":"page","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":25},"required":false,"name":"pageSize","in":"query"},{"schema":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"required":false,"description":"UUID v4","name":"eventDayId","in":"query"},{"schema":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"required":false,"description":"UUID v4","name":"vendorId","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventDayVendorList"}}}},"400":{"description":"The request was malformed or failed schema validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"The API key or token lacks the scope required for this operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded — back off and retry (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Unexpected server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}},"post":{"operationId":"createEventDayVendor","summary":"Add a vendor to an event day","tags":["Event Day Vendors"],"security":[{"apiKey":[]},{"bearer":[]}],"x-speakeasy-name-override":"create","parameters":[{"schema":{"type":"string","maxLength":255,"description":"Optional unique key that makes this request safely retryable. Replaying the same key returns the original response instead of creating a duplicate; reusing a key with a different request body returns 409.","example":"create-client-2026-05-24-a1b2c3"},"required":false,"description":"Optional unique key that makes this request safely retryable. Replaying the same key returns the original response instead of creating a duplicate; reusing a key with a different request body returns 409.","name":"Idempotency-Key","in":"header"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventDayVendorCreate"}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventDayVendor"}}}},"400":{"description":"The request was malformed or failed schema validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"The API key or token lacks the scope required for this operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Either the Idempotency-Key was reused with a different request body (`idempotency_key_reused`), or a request carrying the same key is still in flight (`request_in_progress` — retry after `Retry-After`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded — back off and retry (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Unexpected server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/event-day-vendors/{id}":{"get":{"operationId":"getEventDayVendor","summary":"Get an event day vendor","tags":["Event Day Vendors"],"security":[{"apiKey":[]},{"bearer":[]}],"x-speakeasy-name-override":"get","x-speakeasy-retries":{"strategy":"backoff","backoff":{"initialInterval":500,"maxInterval":30000,"maxElapsedTime":30000,"exponent":1.5},"statusCodes":["429","5XX"],"retryConnectionErrors":true},"parameters":[{"schema":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"required":true,"description":"UUID v4","name":"id","in":"path"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventDayVendor"}}}},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"The API key or token lacks the scope required for this operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"No resource with that id exists in your organization","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded — back off and retry (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Unexpected server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}},"patch":{"operationId":"updateEventDayVendor","summary":"Update an event day vendor","tags":["Event Day Vendors"],"security":[{"apiKey":[]},{"bearer":[]}],"x-speakeasy-name-override":"update","x-speakeasy-retries":{"strategy":"backoff","backoff":{"initialInterval":500,"maxInterval":30000,"maxElapsedTime":30000,"exponent":1.5},"statusCodes":["429","5XX"],"retryConnectionErrors":true},"parameters":[{"schema":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"required":true,"description":"UUID v4","name":"id","in":"path"},{"schema":{"type":"string","maxLength":255,"description":"Optional unique key that makes this request safely retryable. Replaying the same key returns the original response instead of creating a duplicate; reusing a key with a different request body returns 409.","example":"create-client-2026-05-24-a1b2c3"},"required":false,"description":"Optional unique key that makes this request safely retryable. Replaying the same key returns the original response instead of creating a duplicate; reusing a key with a different request body returns 409.","name":"Idempotency-Key","in":"header"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventDayVendorUpdate"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventDayVendor"}}}},"400":{"description":"The request was malformed or failed schema validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"The API key or token lacks the scope required for this operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"No resource with that id exists in your organization","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Either the Idempotency-Key was reused with a different request body (`idempotency_key_reused`), or a request carrying the same key is still in flight (`request_in_progress` — retry after `Retry-After`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded — back off and retry (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Unexpected server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}},"delete":{"operationId":"deleteEventDayVendor","summary":"Remove a vendor from an event day","tags":["Event Day Vendors"],"security":[{"apiKey":[]},{"bearer":[]}],"x-speakeasy-name-override":"delete","x-speakeasy-retries":{"strategy":"backoff","backoff":{"initialInterval":500,"maxInterval":30000,"maxElapsedTime":30000,"exponent":1.5},"statusCodes":["429","5XX"],"retryConnectionErrors":true},"parameters":[{"schema":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"required":true,"description":"UUID v4","name":"id","in":"path"}],"responses":{"204":{"description":"Deleted"},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"The API key or token lacks the scope required for this operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"No resource with that id exists in your organization","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded — back off and retry (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Unexpected server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/vendors":{"get":{"operationId":"listVendors","summary":"List vendors","tags":["Vendors"],"security":[{"apiKey":[]},{"bearer":[]}],"x-speakeasy-name-override":"list","x-speakeasy-pagination":{"type":"offsetLimit","inputs":[{"name":"page","in":"parameters","type":"page"},{"name":"pageSize","in":"parameters","type":"limit"}],"outputs":{"results":"$.data"}},"x-speakeasy-retries":{"strategy":"backoff","backoff":{"initialInterval":500,"maxInterval":30000,"maxElapsedTime":30000,"exponent":1.5},"statusCodes":["429","5XX"],"retryConnectionErrors":true},"parameters":[{"schema":{"type":"integer","minimum":1,"default":1},"required":false,"name":"page","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":25},"required":false,"name":"pageSize","in":"query"},{"schema":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"required":false,"description":"UUID v4","name":"categoryId","in":"query"},{"schema":{"type":"string","enum":["active","archived"]},"required":false,"name":"status","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VendorList"}}}},"400":{"description":"The request was malformed or failed schema validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"The API key or token lacks the scope required for this operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded — back off and retry (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Unexpected server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}},"post":{"operationId":"createVendor","summary":"Create a vendor","tags":["Vendors"],"security":[{"apiKey":[]},{"bearer":[]}],"x-speakeasy-name-override":"create","parameters":[{"schema":{"type":"string","maxLength":255,"description":"Optional unique key that makes this request safely retryable. Replaying the same key returns the original response instead of creating a duplicate; reusing a key with a different request body returns 409.","example":"create-client-2026-05-24-a1b2c3"},"required":false,"description":"Optional unique key that makes this request safely retryable. Replaying the same key returns the original response instead of creating a duplicate; reusing a key with a different request body returns 409.","name":"Idempotency-Key","in":"header"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VendorCreate"}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Vendor"}}}},"400":{"description":"The request was malformed or failed schema validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"The API key or token lacks the scope required for this operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Either the Idempotency-Key was reused with a different request body (`idempotency_key_reused`), or a request carrying the same key is still in flight (`request_in_progress` — retry after `Retry-After`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded — back off and retry (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Unexpected server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/vendors/{id}":{"get":{"operationId":"getVendor","summary":"Get a vendor","tags":["Vendors"],"security":[{"apiKey":[]},{"bearer":[]}],"x-speakeasy-name-override":"get","x-speakeasy-retries":{"strategy":"backoff","backoff":{"initialInterval":500,"maxInterval":30000,"maxElapsedTime":30000,"exponent":1.5},"statusCodes":["429","5XX"],"retryConnectionErrors":true},"parameters":[{"schema":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"required":true,"description":"UUID v4","name":"id","in":"path"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Vendor"}}}},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"The API key or token lacks the scope required for this operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"No resource with that id exists in your organization","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded — back off and retry (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Unexpected server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}},"patch":{"operationId":"updateVendor","summary":"Update a vendor","tags":["Vendors"],"security":[{"apiKey":[]},{"bearer":[]}],"x-speakeasy-name-override":"update","x-speakeasy-retries":{"strategy":"backoff","backoff":{"initialInterval":500,"maxInterval":30000,"maxElapsedTime":30000,"exponent":1.5},"statusCodes":["429","5XX"],"retryConnectionErrors":true},"parameters":[{"schema":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"required":true,"description":"UUID v4","name":"id","in":"path"},{"schema":{"type":"string","maxLength":255,"description":"Optional unique key that makes this request safely retryable. Replaying the same key returns the original response instead of creating a duplicate; reusing a key with a different request body returns 409.","example":"create-client-2026-05-24-a1b2c3"},"required":false,"description":"Optional unique key that makes this request safely retryable. Replaying the same key returns the original response instead of creating a duplicate; reusing a key with a different request body returns 409.","name":"Idempotency-Key","in":"header"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VendorUpdate"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Vendor"}}}},"400":{"description":"The request was malformed or failed schema validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"The API key or token lacks the scope required for this operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"No resource with that id exists in your organization","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Either the Idempotency-Key was reused with a different request body (`idempotency_key_reused`), or a request carrying the same key is still in flight (`request_in_progress` — retry after `Retry-After`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded — back off and retry (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Unexpected server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}},"delete":{"operationId":"deleteVendor","summary":"Delete a vendor","tags":["Vendors"],"security":[{"apiKey":[]},{"bearer":[]}],"x-speakeasy-name-override":"delete","x-speakeasy-retries":{"strategy":"backoff","backoff":{"initialInterval":500,"maxInterval":30000,"maxElapsedTime":30000,"exponent":1.5},"statusCodes":["429","5XX"],"retryConnectionErrors":true},"parameters":[{"schema":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"required":true,"description":"UUID v4","name":"id","in":"path"}],"responses":{"204":{"description":"Deleted"},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"The API key or token lacks the scope required for this operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"No resource with that id exists in your organization","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded — back off and retry (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Unexpected server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/venues":{"get":{"operationId":"listVenues","summary":"List venues","tags":["Venues"],"security":[{"apiKey":[]},{"bearer":[]}],"x-speakeasy-name-override":"list","x-speakeasy-pagination":{"type":"offsetLimit","inputs":[{"name":"page","in":"parameters","type":"page"},{"name":"pageSize","in":"parameters","type":"limit"}],"outputs":{"results":"$.data"}},"x-speakeasy-retries":{"strategy":"backoff","backoff":{"initialInterval":500,"maxInterval":30000,"maxElapsedTime":30000,"exponent":1.5},"statusCodes":["429","5XX"],"retryConnectionErrors":true},"parameters":[{"schema":{"type":"integer","minimum":1,"default":1},"required":false,"name":"page","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":25},"required":false,"name":"pageSize","in":"query"},{"schema":{"type":"string","enum":["active","archived"]},"required":false,"name":"status","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VenueList"}}}},"400":{"description":"The request was malformed or failed schema validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"The API key or token lacks the scope required for this operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded — back off and retry (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Unexpected server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}},"post":{"operationId":"createVenue","summary":"Create a venue","tags":["Venues"],"security":[{"apiKey":[]},{"bearer":[]}],"x-speakeasy-name-override":"create","parameters":[{"schema":{"type":"string","maxLength":255,"description":"Optional unique key that makes this request safely retryable. Replaying the same key returns the original response instead of creating a duplicate; reusing a key with a different request body returns 409.","example":"create-client-2026-05-24-a1b2c3"},"required":false,"description":"Optional unique key that makes this request safely retryable. Replaying the same key returns the original response instead of creating a duplicate; reusing a key with a different request body returns 409.","name":"Idempotency-Key","in":"header"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VenueCreate"}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Venue"}}}},"400":{"description":"The request was malformed or failed schema validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"The API key or token lacks the scope required for this operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Either the Idempotency-Key was reused with a different request body (`idempotency_key_reused`), or a request carrying the same key is still in flight (`request_in_progress` — retry after `Retry-After`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded — back off and retry (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Unexpected server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/venues/{id}":{"get":{"operationId":"getVenue","summary":"Get a venue","tags":["Venues"],"security":[{"apiKey":[]},{"bearer":[]}],"x-speakeasy-name-override":"get","x-speakeasy-retries":{"strategy":"backoff","backoff":{"initialInterval":500,"maxInterval":30000,"maxElapsedTime":30000,"exponent":1.5},"statusCodes":["429","5XX"],"retryConnectionErrors":true},"parameters":[{"schema":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"required":true,"description":"UUID v4","name":"id","in":"path"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Venue"}}}},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"The API key or token lacks the scope required for this operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"No resource with that id exists in your organization","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded — back off and retry (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Unexpected server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}},"patch":{"operationId":"updateVenue","summary":"Update a venue","tags":["Venues"],"security":[{"apiKey":[]},{"bearer":[]}],"x-speakeasy-name-override":"update","x-speakeasy-retries":{"strategy":"backoff","backoff":{"initialInterval":500,"maxInterval":30000,"maxElapsedTime":30000,"exponent":1.5},"statusCodes":["429","5XX"],"retryConnectionErrors":true},"parameters":[{"schema":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"required":true,"description":"UUID v4","name":"id","in":"path"},{"schema":{"type":"string","maxLength":255,"description":"Optional unique key that makes this request safely retryable. Replaying the same key returns the original response instead of creating a duplicate; reusing a key with a different request body returns 409.","example":"create-client-2026-05-24-a1b2c3"},"required":false,"description":"Optional unique key that makes this request safely retryable. Replaying the same key returns the original response instead of creating a duplicate; reusing a key with a different request body returns 409.","name":"Idempotency-Key","in":"header"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VenueUpdate"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Venue"}}}},"400":{"description":"The request was malformed or failed schema validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"The API key or token lacks the scope required for this operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"No resource with that id exists in your organization","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Either the Idempotency-Key was reused with a different request body (`idempotency_key_reused`), or a request carrying the same key is still in flight (`request_in_progress` — retry after `Retry-After`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded — back off and retry (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Unexpected server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}},"delete":{"operationId":"deleteVenue","summary":"Delete a venue","tags":["Venues"],"security":[{"apiKey":[]},{"bearer":[]}],"x-speakeasy-name-override":"delete","x-speakeasy-retries":{"strategy":"backoff","backoff":{"initialInterval":500,"maxInterval":30000,"maxElapsedTime":30000,"exponent":1.5},"statusCodes":["429","5XX"],"retryConnectionErrors":true},"parameters":[{"schema":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"required":true,"description":"UUID v4","name":"id","in":"path"}],"responses":{"204":{"description":"Deleted"},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"The API key or token lacks the scope required for this operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"No resource with that id exists in your organization","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded — back off and retry (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Unexpected server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/webhooks":{"get":{"operationId":"listWebhooks","summary":"List webhook subscriptions","tags":["Webhooks"],"security":[{"apiKey":[]},{"bearer":[]}],"x-speakeasy-name-override":"list","x-speakeasy-pagination":{"type":"offsetLimit","inputs":[{"name":"page","in":"parameters","type":"page"},{"name":"pageSize","in":"parameters","type":"limit"}],"outputs":{"results":"$.data"}},"x-speakeasy-retries":{"strategy":"backoff","backoff":{"initialInterval":500,"maxInterval":30000,"maxElapsedTime":30000,"exponent":1.5},"statusCodes":["429","5XX"],"retryConnectionErrors":true},"parameters":[{"schema":{"type":"integer","minimum":1,"default":1},"required":false,"name":"page","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":25},"required":false,"name":"pageSize","in":"query"},{"schema":{"type":"string","enum":["true","false"],"description":"Literal `true` or `false`. Any other value is rejected with 400 invalid_request."},"required":false,"description":"Literal `true` or `false`. Any other value is rejected with 400 invalid_request.","name":"enabled","in":"query"},{"schema":{"type":"string","enum":["invoice_sent","invoice_due_soon","invoice_overdue","invoice_paid","invoice_payment_failed","invoice_disputed","invoice_payment_reminder","payment_received","payment_refunded","payment_applied","payment_unapplied","payment_deleted","payment_chargeback","receipt_sent","schedule_deposit_ready","schedule_installment_due","schedule_installment_paid","schedule_completed","document_processed","document_action_created","document_action_approved","document_needs_review","document_failed","client_created","contact_created","project_created","time_entry_created","lead_created","client_won","client_lost","lead_status_changed","invoice_viewed","milestone_approaching","timer_running_reminder","contract_sent","contract_viewed","contract_signed","contract_recipient_signed","contract_countersigned","contract_completed","contract_expired","contract_voided","form_submission_completed","smart_file_sent","smart_file_viewed","smart_file_accepted","smart_file_completed","smart_file_expired","subscription_payment_failed","payout_paid","payout_failed","event_day_created","event_day_published","event_day_archived","timeline_item_completed","timeline_reminder_sent","invoice_refunded","contract_amended","receipt_viewed","follow_up_due","payment_processing","client_reply","client_revision_requested","email_delivery_failed","sale_completed","sale_refunded","sale_voided","sale_receipt_sent","sale_viewed"]},"required":false,"name":"event","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookList"}}}},"400":{"description":"The request was malformed or failed schema validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"The API key or token lacks the scope required for this operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded — back off and retry (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Unexpected server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}},"post":{"operationId":"createWebhook","summary":"Subscribe to events","description":"Creates a webhook endpoint. URL must be HTTPS. If `secret` is provided, every delivery includes an `X-Signature: sha256=…` header computed over `${X-Webhook-Timestamp}.${body}`.","tags":["Webhooks"],"security":[{"apiKey":[]},{"bearer":[]}],"x-speakeasy-name-override":"create","parameters":[{"schema":{"type":"string","maxLength":255,"description":"Optional unique key that makes this request safely retryable. Replaying the same key returns the original response instead of creating a duplicate; reusing a key with a different request body returns 409.","example":"create-client-2026-05-24-a1b2c3"},"required":false,"description":"Optional unique key that makes this request safely retryable. Replaying the same key returns the original response instead of creating a duplicate; reusing a key with a different request body returns 409.","name":"Idempotency-Key","in":"header"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookCreate"}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Webhook"}}}},"400":{"description":"The request was malformed or failed schema validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"The API key or token lacks the scope required for this operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Either the Idempotency-Key was reused with a different request body (`idempotency_key_reused`), or a request carrying the same key is still in flight (`request_in_progress` — retry after `Retry-After`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded — back off and retry (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Unexpected server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/webhooks/{id}":{"get":{"operationId":"getWebhook","summary":"Get a webhook","tags":["Webhooks"],"security":[{"apiKey":[]},{"bearer":[]}],"x-speakeasy-name-override":"get","x-speakeasy-retries":{"strategy":"backoff","backoff":{"initialInterval":500,"maxInterval":30000,"maxElapsedTime":30000,"exponent":1.5},"statusCodes":["429","5XX"],"retryConnectionErrors":true},"parameters":[{"schema":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"required":true,"description":"UUID v4","name":"id","in":"path"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Webhook"}}}},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"The API key or token lacks the scope required for this operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"No resource with that id exists in your organization","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded — back off and retry (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Unexpected server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}},"patch":{"operationId":"updateWebhook","summary":"Update a webhook","description":"Pass `secret: null` to remove the signing secret. Pass a new string to rotate.","tags":["Webhooks"],"security":[{"apiKey":[]},{"bearer":[]}],"x-speakeasy-name-override":"update","x-speakeasy-retries":{"strategy":"backoff","backoff":{"initialInterval":500,"maxInterval":30000,"maxElapsedTime":30000,"exponent":1.5},"statusCodes":["429","5XX"],"retryConnectionErrors":true},"parameters":[{"schema":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"required":true,"description":"UUID v4","name":"id","in":"path"},{"schema":{"type":"string","maxLength":255,"description":"Optional unique key that makes this request safely retryable. Replaying the same key returns the original response instead of creating a duplicate; reusing a key with a different request body returns 409.","example":"create-client-2026-05-24-a1b2c3"},"required":false,"description":"Optional unique key that makes this request safely retryable. Replaying the same key returns the original response instead of creating a duplicate; reusing a key with a different request body returns 409.","name":"Idempotency-Key","in":"header"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookUpdate"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Webhook"}}}},"400":{"description":"The request was malformed or failed schema validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"The API key or token lacks the scope required for this operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"No resource with that id exists in your organization","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Either the Idempotency-Key was reused with a different request body (`idempotency_key_reused`), or a request carrying the same key is still in flight (`request_in_progress` — retry after `Retry-After`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded — back off and retry (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Unexpected server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}},"delete":{"operationId":"deleteWebhook","summary":"Delete a webhook","tags":["Webhooks"],"security":[{"apiKey":[]},{"bearer":[]}],"x-speakeasy-name-override":"delete","x-speakeasy-retries":{"strategy":"backoff","backoff":{"initialInterval":500,"maxInterval":30000,"maxElapsedTime":30000,"exponent":1.5},"statusCodes":["429","5XX"],"retryConnectionErrors":true},"parameters":[{"schema":{"type":"string","format":"uuid","description":"UUID v4","example":"550e8400-e29b-41d4-a716-446655440000"},"required":true,"description":"UUID v4","name":"id","in":"path"}],"responses":{"204":{"description":"Deleted"},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"The API key or token lacks the scope required for this operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"No resource with that id exists in your organization","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded — back off and retry (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Unexpected server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}}},"webhooks":{}}