{"openapi":"3.1.0","info":{"title":"inbill.dev — user HTTP API","version":"1.0.0","description":"Invoice extraction and saved-invoice CRUD. Authenticate with Authorization: Bearer and an API key (bf_live_…) or session JWT. See /docs/api for full narrative and examples."},"servers":[{"url":"https://inbill.dev"}],"paths":{"/api/expenses":{"post":{"operationId":"postExpenses","summary":"POST Extract expense document(s) from URL or multipart upload","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success — see product docs for response shape"},"400":{"description":"Validation or unsupported file"},"401":{"description":"Missing or invalid bearer token"},"402":{"description":"Quota exceeded"},"404":{"description":"Not found (where applicable)"},"422":{"description":"Fetch or extraction failed (where applicable)"},"500":{"description":"Server error"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["client_id"],"properties":{"client_id":{"type":"string","format":"uuid"},"file_url":{"type":"string","format":"uri"},"items":{"type":"array","items":{"type":"object","required":["file_url"],"properties":{"file_url":{"type":"string","format":"uri"}}}}}}},"multipart/form-data":{"schema":{"type":"object","required":["client_id","file"],"properties":{"client_id":{"type":"string","format":"uuid"},"file":{"type":"string","format":"binary"}}}}}}},"get":{"operationId":"listExpenses","summary":"GET List saved expense invoices for a client","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success — see product docs for response shape"},"400":{"description":"Validation or unsupported file"},"401":{"description":"Missing or invalid bearer token"},"402":{"description":"Quota exceeded"},"404":{"description":"Not found (where applicable)"},"422":{"description":"Fetch or extraction failed (where applicable)"},"500":{"description":"Server error"}}}},"/api/revenue":{"post":{"operationId":"postRevenue","summary":"POST Extract revenue document(s) from URL or multipart upload","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success — see product docs for response shape"},"400":{"description":"Validation or unsupported file"},"401":{"description":"Missing or invalid bearer token"},"402":{"description":"Quota exceeded"},"404":{"description":"Not found (where applicable)"},"422":{"description":"Fetch or extraction failed (where applicable)"},"500":{"description":"Server error"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["client_id"],"properties":{"client_id":{"type":"string","format":"uuid"},"file_url":{"type":"string","format":"uri"},"items":{"type":"array","items":{"type":"object","required":["file_url"],"properties":{"file_url":{"type":"string","format":"uri"}}}}}}},"multipart/form-data":{"schema":{"type":"object","required":["client_id","file"],"properties":{"client_id":{"type":"string","format":"uuid"},"file":{"type":"string","format":"binary"}}}}}}},"get":{"operationId":"listRevenue","summary":"GET List saved revenue invoices for a client","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success — see product docs for response shape"},"400":{"description":"Validation or unsupported file"},"401":{"description":"Missing or invalid bearer token"},"402":{"description":"Quota exceeded"},"404":{"description":"Not found (where applicable)"},"422":{"description":"Fetch or extraction failed (where applicable)"},"500":{"description":"Server error"}}}},"/api/expenses/{id}":{"get":{"operationId":"getExpense","summary":"GET Get one expense invoice by id","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success — see product docs for response shape"},"400":{"description":"Validation or unsupported file"},"401":{"description":"Missing or invalid bearer token"},"402":{"description":"Quota exceeded"},"404":{"description":"Not found (where applicable)"},"422":{"description":"Fetch or extraction failed (where applicable)"},"500":{"description":"Server error"}}},"patch":{"operationId":"patchExpense","summary":"PATCH Merge parsed_data into an expense invoice","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success — see product docs for response shape"},"400":{"description":"Validation or unsupported file"},"401":{"description":"Missing or invalid bearer token"},"402":{"description":"Quota exceeded"},"404":{"description":"Not found (where applicable)"},"422":{"description":"Fetch or extraction failed (where applicable)"},"500":{"description":"Server error"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"parsed_data":{"type":"object","additionalProperties":true}}}}}}},"delete":{"operationId":"deleteExpense","summary":"DELETE Delete an expense invoice","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success — see product docs for response shape"},"400":{"description":"Validation or unsupported file"},"401":{"description":"Missing or invalid bearer token"},"402":{"description":"Quota exceeded"},"404":{"description":"Not found (where applicable)"},"422":{"description":"Fetch or extraction failed (where applicable)"},"500":{"description":"Server error"}}}},"/api/revenue/{id}":{"get":{"operationId":"getRevenueInvoice","summary":"GET Get one revenue invoice by id","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success — see product docs for response shape"},"400":{"description":"Validation or unsupported file"},"401":{"description":"Missing or invalid bearer token"},"402":{"description":"Quota exceeded"},"404":{"description":"Not found (where applicable)"},"422":{"description":"Fetch or extraction failed (where applicable)"},"500":{"description":"Server error"}}},"patch":{"operationId":"patchRevenue","summary":"PATCH Merge parsed_data into a revenue invoice","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success — see product docs for response shape"},"400":{"description":"Validation or unsupported file"},"401":{"description":"Missing or invalid bearer token"},"402":{"description":"Quota exceeded"},"404":{"description":"Not found (where applicable)"},"422":{"description":"Fetch or extraction failed (where applicable)"},"500":{"description":"Server error"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"parsed_data":{"type":"object","additionalProperties":true}}}}}}},"delete":{"operationId":"deleteRevenue","summary":"DELETE Delete a revenue invoice","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success — see product docs for response shape"},"400":{"description":"Validation or unsupported file"},"401":{"description":"Missing or invalid bearer token"},"402":{"description":"Quota exceeded"},"404":{"description":"Not found (where applicable)"},"422":{"description":"Fetch or extraction failed (where applicable)"},"500":{"description":"Server error"}}}},"/api/clients":{"get":{"operationId":"listClients","summary":"GET List organization clients","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success — see product docs for response shape"},"400":{"description":"Validation or unsupported file"},"401":{"description":"Missing or invalid bearer token"},"402":{"description":"Quota exceeded"},"404":{"description":"Not found (where applicable)"},"422":{"description":"Fetch or extraction failed (where applicable)"},"500":{"description":"Server error"}}},"post":{"operationId":"createClient","summary":"POST Create a client","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success — see product docs for response shape"},"400":{"description":"Validation or unsupported file"},"401":{"description":"Missing or invalid bearer token"},"402":{"description":"Quota exceeded"},"404":{"description":"Not found (where applicable)"},"422":{"description":"Fetch or extraction failed (where applicable)"},"500":{"description":"Server error"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["name"],"properties":{"name":{"type":"string"},"tax_id":{"type":"string"},"email":{"type":"string","format":"email"}}}}}}}},"/api/clients/{id}":{"get":{"operationId":"getClient","summary":"GET Get one client by id","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success — see product docs for response shape"},"400":{"description":"Validation or unsupported file"},"401":{"description":"Missing or invalid bearer token"},"402":{"description":"Quota exceeded"},"404":{"description":"Not found (where applicable)"},"422":{"description":"Fetch or extraction failed (where applicable)"},"500":{"description":"Server error"}}}}},"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","description":"Dashboard API key (raw bf_live_… string) or Supabase session access_token (JWT)."}}},"security":[{"bearerAuth":[]}]}