Error: type: object required: - error properties: error: type: object required: - code - message - correlationId properties: code: type: string description: Machine-readable error code. example: NOT_FOUND message: type: string description: Human-readable error message. example: Not found. correlationId: type: string description: Request correlation identifier echoed from x-correlation-id when present. example: 11111111-1111-4111-8111-111111111111 HealthResponse: type: object required: - stage - sha properties: stage: type: string description: Deployment stage name. example: local sha: type: string description: Git SHA inlined at image build. example: deadbeef ReadyResponse: type: object required: - status - database properties: status: type: string description: Process readiness marker. example: ok database: type: string description: Database ping result. example: up MeResponse: type: object required: - id - email - name - role properties: id: type: string format: uuid description: Internal user primary key. example: 11111111-1111-4111-8111-111111111111 email: type: string format: email description: Caller email address. example: admin@seahavenind.com name: type: string description: Display name for the caller. example: Dev Admin role: type: string description: Authorization role for RBAC checks. enum: - admin - ap_processor - approver - viewer example: admin Vendor: type: object required: - id - name - defaultPaymentMethod - createdAt - updatedAt properties: id: type: string format: uuid description: Vendor primary key. example: 55555555-5555-4555-8555-555555555555 name: type: string description: Vendor display name. example: Acme Facilities Supply email: type: [string, "null"] description: Billing email when present. example: billing@acmefacilities.example defaultPaymentMethod: type: string enum: [check, ach] description: Default payment method for new invoices. example: check createdAt: type: string format: date-time description: Row creation time. updatedAt: type: string format: date-time description: Row update time. GlAccount: type: object required: [id, code, name, createdAt, updatedAt] properties: id: type: string format: uuid description: GL account primary key. example: 66666666-6666-4666-8666-666666666666 code: type: string description: Account code. example: "6100" name: type: string description: Account name. example: Facilities Expense createdAt: type: string format: date-time description: Row creation time. updatedAt: type: string format: date-time description: Row update time. Department: type: object required: [id, code, name, createdAt, updatedAt] properties: id: type: string format: uuid description: Department primary key. example: 77777777-7777-4777-8777-777777777777 code: type: string description: Department code. example: OPS name: type: string description: Department name. example: Operations createdAt: type: string format: date-time description: Row creation time. updatedAt: type: string format: date-time description: Row update time. User: type: object required: [id, email, name, role, createdAt, updatedAt] properties: id: type: string format: uuid description: User primary key. example: 11111111-1111-4111-8111-111111111111 email: type: string format: email description: User email address. example: admin@seahavenind.com name: type: string description: Display name. example: Dev Admin role: type: string enum: [admin, ap_processor, approver, viewer] description: Authorization role. example: admin createdAt: type: string format: date-time description: Row creation time. updatedAt: type: string format: date-time description: Row update time. Invoice: type: object required: - id - vendorId - invoiceNumber - amount - amountDue - dueDate - status - paymentMethod - memo - createdAt - updatedAt - lines properties: id: type: string format: uuid description: Invoice primary key. example: 88888888-8888-4888-8888-888888888888 vendorId: type: string format: uuid description: Vendor foreign key. example: 55555555-5555-4555-8555-555555555555 invoiceNumber: type: string description: Vendor-issued invoice number. example: INV-1001 amount: type: string description: Invoice total as numeric(14,2) text. example: "1250.00" amountDue: type: string description: Remaining amount due as numeric(14,2) text. example: "1250.00" dueDate: type: string description: Due date as YYYY-MM-DD. example: "2026-09-01" payDate: type: [string, "null"] description: Optional pay date as YYYY-MM-DD. example: "2026-09-15" sendPaymentOn: type: [string, "null"] description: Optional send date as YYYY-MM-DD. example: "2026-09-10" status: type: string enum: [pending_approval, approved, scheduled, paid, rejected, void] description: Invoice workflow status. example: pending_approval paymentMethod: type: string enum: [check, ach] description: Payment method for this invoice. example: check memo: type: string description: Free-form memo. example: Seed invoice for local smoke. createdAt: type: string format: date-time description: Row creation time. updatedAt: type: string format: date-time description: Row update time. lines: type: array description: Coding lines attached to the invoice. items: $ref: "#/InvoiceLine" InvoiceLine: type: object required: [id, invoiceId, description, amount, createdAt] properties: id: type: string format: uuid description: Line primary key. example: 99999999-9999-4999-8999-999999999999 invoiceId: type: string format: uuid description: Parent invoice id. example: 88888888-8888-4888-8888-888888888888 description: type: string description: Line description. example: Monthly maintenance amount: type: string description: Line amount as numeric(14,2) text. example: "1250.00" glAccountId: type: [string, "null"] format: uuid description: Optional GL account id. departmentId: type: [string, "null"] format: uuid description: Optional department id. createdAt: type: string format: date-time description: Row creation time. Document: type: object required: [id, objectKey, contentType, fileName, createdAt] properties: id: type: string format: uuid description: Document primary key. example: dddddddd-dddd-4ddd-8ddd-dddddddddddd invoiceId: type: [string, "null"] format: uuid description: Parent invoice id when attached. objectKey: type: string description: Object key in the documents bucket. example: seed/inv-1001.pdf contentType: type: string description: Uploaded object MIME type. example: application/pdf fileName: type: string description: Original file name. example: inv-1001.pdf uploadedByUserId: type: [string, "null"] format: uuid description: User who started the upload. createdAt: type: string format: date-time description: Row creation time. uploadUrl: type: string description: Presigned PUT URL returned on create. uploadHeaders: type: object additionalProperties: type: string description: Headers the browser must send with the presigned PUT. downloadUrl: type: string description: Presigned GET URL returned on confirm or get.