{"openapi":"3.0.0","paths":{"/v1/me":{"get":{"operationId":"V1MeController_me","parameters":[],"responses":{"200":{"description":""}},"tags":["me"],"security":[{"bearer":[]}]}},"/v1/customers":{"get":{"operationId":"V1CustomersController_list","parameters":[{"name":"cursor","required":false,"in":"query","schema":{"type":"string"}},{"name":"limit","required":false,"in":"query","schema":{"type":"string"}},{"name":"createdAfter","required":false,"in":"query","schema":{"type":"string"}},{"name":"createdBefore","required":false,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["customers"],"security":[{"bearer":[]}]},"post":{"operationId":"V1CustomersController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/V1CreateCustomerDto"}}}},"responses":{"201":{"description":""}},"tags":["customers"],"security":[{"bearer":[]}]}},"/v1/customers/{id}":{"get":{"operationId":"V1CustomersController_get","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["customers"],"security":[{"bearer":[]}]},"patch":{"operationId":"V1CustomersController_update","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/V1UpdateCustomerDto"}}}},"responses":{"200":{"description":""}},"tags":["customers"],"security":[{"bearer":[]}]}},"/v1/leads":{"get":{"operationId":"V1LeadsController_list","parameters":[{"name":"status","required":false,"in":"query","schema":{"enum":["new","contacted","qualified","quote_sent","won","lost","archived"],"type":"string"}},{"name":"cursor","required":false,"in":"query","schema":{"type":"string"}},{"name":"limit","required":false,"in":"query","schema":{"type":"string"}},{"name":"createdAfter","required":false,"in":"query","schema":{"type":"string"}},{"name":"createdBefore","required":false,"in":"query","schema":{"type":"string"}},{"name":"updatedSince","required":false,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["leads"],"security":[{"bearer":[]}]},"post":{"operationId":"V1LeadsController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/V1CreateLeadDto"}}}},"responses":{"201":{"description":""}},"tags":["leads"],"security":[{"bearer":[]}]}},"/v1/leads/{id}":{"get":{"operationId":"V1LeadsController_get","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["leads"],"security":[{"bearer":[]}]},"patch":{"operationId":"V1LeadsController_update","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/V1UpdateLeadDto"}}}},"responses":{"200":{"description":""}},"tags":["leads"],"security":[{"bearer":[]}]}},"/v1/jobs":{"get":{"operationId":"V1JobsController_list","parameters":[{"name":"status","required":false,"in":"query","schema":{"enum":["draft","scheduled","en_route","in_progress","paused","completed","invoiced","cancelled"],"type":"string"}},{"name":"cursor","required":false,"in":"query","schema":{"type":"string"}},{"name":"limit","required":false,"in":"query","schema":{"type":"string"}},{"name":"createdAfter","required":false,"in":"query","schema":{"type":"string"}},{"name":"createdBefore","required":false,"in":"query","schema":{"type":"string"}},{"name":"updatedSince","required":false,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["jobs"],"security":[{"bearer":[]}]},"post":{"operationId":"V1JobsController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/V1CreateJobDto"}}}},"responses":{"201":{"description":""}},"tags":["jobs"],"security":[{"bearer":[]}]}},"/v1/jobs/{id}":{"get":{"operationId":"V1JobsController_get","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["jobs"],"security":[{"bearer":[]}]},"patch":{"operationId":"V1JobsController_update","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/V1UpdateJobDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object"}}}}},"tags":["jobs"],"security":[{"bearer":[]}]}},"/v1/quotes":{"get":{"operationId":"V1QuotesController_list","parameters":[{"name":"status","required":false,"in":"query","schema":{"enum":["draft","sent","accepted","declined","expired","converted"],"type":"string"}},{"name":"cursor","required":false,"in":"query","schema":{"type":"string"}},{"name":"limit","required":false,"in":"query","schema":{"type":"string"}},{"name":"createdAfter","required":false,"in":"query","schema":{"type":"string"}},{"name":"createdBefore","required":false,"in":"query","schema":{"type":"string"}},{"name":"updatedSince","required":false,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["quotes"],"security":[{"bearer":[]}]},"post":{"operationId":"V1QuotesController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/V1CreateQuoteDto"}}}},"responses":{"201":{"description":""}},"tags":["quotes"],"security":[{"bearer":[]}]}},"/v1/quotes/{id}":{"get":{"operationId":"V1QuotesController_get","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["quotes"],"security":[{"bearer":[]}]}},"/v1/quotes/{id}/accept":{"post":{"operationId":"V1QuotesController_accept","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["quotes"],"security":[{"bearer":[]}]}},"/v1/invoices":{"get":{"operationId":"V1InvoicesController_list","parameters":[{"name":"status","required":false,"in":"query","schema":{"enum":["draft","sent","paid","void","overdue","manual_paid"],"type":"string"}},{"name":"cursor","required":false,"in":"query","schema":{"type":"string"}},{"name":"limit","required":false,"in":"query","schema":{"type":"string"}},{"name":"createdAfter","required":false,"in":"query","schema":{"type":"string"}},{"name":"createdBefore","required":false,"in":"query","schema":{"type":"string"}},{"name":"updatedSince","required":false,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["invoices"],"security":[{"bearer":[]}]},"post":{"operationId":"V1InvoicesController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/V1CreateInvoiceDto"}}}},"responses":{"201":{"description":""}},"tags":["invoices"],"security":[{"bearer":[]}]}},"/v1/invoices/{id}":{"get":{"operationId":"V1InvoicesController_get","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["invoices"],"security":[{"bearer":[]}]},"patch":{"operationId":"V1InvoicesController_update","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/V1UpdateInvoiceDto"}}}},"responses":{"200":{"description":""}},"tags":["invoices"],"security":[{"bearer":[]}]}},"/v1/invoices/{id}/payments":{"post":{"operationId":"V1InvoicesController_recordPayment","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/V1RecordPaymentDto"}}}},"responses":{"201":{"description":""}},"tags":["invoices"],"security":[{"bearer":[]}]}},"/v1/files":{"post":{"operationId":"V1FilesController_createUploadIntent","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateFileUploadIntentDto"}}}},"responses":{"201":{"description":""}},"tags":["files"],"security":[{"bearer":[]}]}},"/v1/files/{id}/attach":{"post":{"operationId":"V1FilesController_attach","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AttachFileDto"}}}},"responses":{"200":{"description":""}},"tags":["files"],"security":[{"bearer":[]}]}},"/v1/webhook-endpoints":{"get":{"operationId":"V1WebhookEndpointsController_list","parameters":[],"responses":{"200":{"description":""}},"tags":["webhook-endpoints"],"security":[{"bearer":[]}]},"post":{"operationId":"V1WebhookEndpointsController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/V1CreateWebhookEndpointDto"}}}},"responses":{"201":{"description":""}},"tags":["webhook-endpoints"],"security":[{"bearer":[]}]}},"/v1/webhook-endpoints/{id}":{"get":{"operationId":"V1WebhookEndpointsController_get","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["webhook-endpoints"],"security":[{"bearer":[]}]},"patch":{"operationId":"V1WebhookEndpointsController_update","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/V1UpdateWebhookEndpointDto"}}}},"responses":{"200":{"description":""}},"tags":["webhook-endpoints"],"security":[{"bearer":[]}]}},"/v1/webhook-endpoints/{id}/disable":{"post":{"operationId":"V1WebhookEndpointsController_disable","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["webhook-endpoints"],"security":[{"bearer":[]}]}},"/v1/webhook-endpoints/{id}/deliveries":{"get":{"operationId":"V1WebhookEndpointsController_listDeliveries","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}},{"name":"cursor","required":false,"in":"query","schema":{"type":"string"}},{"name":"limit","required":false,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["webhook-endpoints"],"security":[{"bearer":[]}]}},"/v1/webhook-endpoints/{id}/deliveries/{deliveryId}/replay":{"post":{"operationId":"V1WebhookEndpointsController_replay","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}},{"name":"deliveryId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["webhook-endpoints"],"security":[{"bearer":[]}]}}},"info":{"title":"Webb9 Developer API","description":"The Webb9 public API (v1) — customers, leads, jobs, quotes, invoices, files, and webhook endpoints for a single connected business. Authenticate with a scoped API key (`Authorization: Bearer wb9_sk_...`) or an OAuth 2.0 access token obtained via the Authorization Code + PKCE flow. See https://webb9.com/developers/api/docs for the full guide (authentication, webhook signature verification, idempotency, error codes).","version":"v1","contact":{}},"tags":[],"servers":[],"components":{"securitySchemes":{"bearer":{"scheme":"bearer","bearerFormat":"JWT","type":"http","description":"A scoped API key (wb9_sk_test_.../wb9_sk_live_...) or an OAuth access token."}},"schemas":{"WorkOrderLineInputDto":{"type":"object","properties":{"priceBookItemId":{"type":"string"},"name":{"type":"string","minLength":1,"maxLength":200},"quantity":{"type":"number","minimum":1,"maximum":10000},"unitCents":{"type":"number","minimum":0,"maximum":100000000}},"required":["quantity"]},"V1CreateWebhookEndpointDto":{"type":"object","properties":{"url":{"type":"string","minLength":1,"maxLength":2000},"events":{"type":"array","items":{"type":"string"}}},"required":["url","events"]},"V1UpdateWebhookEndpointDto":{"type":"object","properties":{"url":{"type":"string","minLength":1,"maxLength":2000},"events":{"type":"array","items":{"type":"string"}},"status":{"type":"string","enum":["active","disabled"]}}},"V1CreateCustomerDto":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":200},"email":{"type":"string","maxLength":320},"phone":{"type":"string","maxLength":40}},"required":["name"]},"V1UpdateCustomerDto":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":200},"email":{"type":"string","maxLength":320},"phone":{"type":"string","maxLength":40},"tags":{"type":"array","items":{"type":"string"}},"followUpAt":{"type":"string"}}},"V1CreateLeadDto":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":200},"email":{"type":"string","maxLength":320},"phone":{"type":"string","maxLength":40},"company":{"type":"string","maxLength":200},"message":{"type":"string","maxLength":4000}},"required":["name"]},"V1UpdateLeadDto":{"type":"object","properties":{"status":{"type":"string","enum":["new","contacted","qualified","quote_sent","won","lost","archived"]},"score":{"type":"number","minimum":0,"maximum":100},"followUpAt":{"type":"string"}}},"V1CreateJobDto":{"type":"object","properties":{"title":{"type":"string","minLength":1,"maxLength":200},"customerId":{"type":"string"},"scheduledStart":{"type":"string"},"scheduledEnd":{"type":"string"},"locationAddress":{"type":"string","maxLength":500},"instructions":{"type":"string","maxLength":4000},"lineItems":{"type":"array","items":{"$ref":"#/components/schemas/WorkOrderLineInputDto"}}},"required":["title"]},"V1UpdateJobDto":{"type":"object","properties":{"title":{"type":"string","minLength":1,"maxLength":200},"customerId":{"type":"string"},"locationAddress":{"type":"string","maxLength":500},"instructions":{"type":"string","maxLength":4000},"lineItems":{"type":"array","items":{"$ref":"#/components/schemas/WorkOrderLineInputDto"}},"status":{"type":"string","enum":["draft","scheduled","en_route","in_progress","paused","completed","invoiced","cancelled"]},"scheduledStart":{"type":"string"},"scheduledEnd":{"type":"string"}}},"V1QuoteLineItemDto":{"type":"object","properties":{"description":{"type":"string","minLength":1,"maxLength":300},"quantity":{"type":"number","minimum":1,"maximum":100000},"unitAmountCents":{"type":"number","minimum":0,"maximum":100000000}},"required":["description","quantity","unitAmountCents"]},"V1CreateQuoteDto":{"type":"object","properties":{"title":{"type":"string","minLength":1,"maxLength":200},"customerId":{"type":"string"},"lineItems":{"type":"array","items":{"$ref":"#/components/schemas/V1QuoteLineItemDto"}},"expiresAt":{"type":"string"}},"required":["title","lineItems"]},"V1CreateInvoiceDto":{"type":"object","properties":{"customerId":{"type":"string"},"lineItems":{"type":"array","items":{"$ref":"#/components/schemas/V1QuoteLineItemDto"}},"dueDate":{"type":"string"},"memo":{"type":"string","maxLength":1000}},"required":["lineItems"]},"V1UpdateInvoiceDto":{"type":"object","properties":{"memo":{"type":"string","maxLength":1000},"dueDate":{"type":"string"},"status":{"type":"string","enum":["void"]}}},"V1RecordPaymentDto":{"type":"object","properties":{"amountCents":{"type":"number","minimum":1,"maximum":100000000},"currency":{"type":"string","maxLength":8},"method":{"type":"string","maxLength":40}},"required":["amountCents"]},"CreateFileUploadIntentDto":{"type":"object","properties":{"fileName":{"type":"string","minLength":1,"maxLength":200},"contentType":{"type":"string","pattern":"/^(image|application|text|video)\\/[\\w.+-]+$/"},"sizeBytes":{"type":"number","minimum":1,"maximum":52428800},"category":{"type":"string","enum":["customer","proposal","contract","insurance","credential","receipt","tax","other"]},"title":{"type":"string","maxLength":200}},"required":["fileName","contentType","sizeBytes","category"]},"AttachFileDto":{"type":"object","properties":{"customerId":{"type":"string"},"workOrderId":{"type":"string"}}}}}}