Openapi
Create a draft claim, mileage entry, or per diem. Upload receipts in the app; this endpoint accepts JSON only.
sb-auth-token<token>Supabase browser session cookie. Supabase may split larger session values into chunked cookies like sb-auth-token.0.
organizationId*stringuuidThe expense claim.
application/jsonamount*number0 <= value <= 9999999990billable*booleanfalsecategoryId?|uuidcurrency*string^[A-Z]{3}$"EUR"customerId?|nulldescription*|length <= 2000distanceKm?|0 < value <= 20000employeeId?|uuidexchangeRate*number0 < value <= 10000001extractionConfidence?|0 <= value <= 1kind*string"claim""company""claim"merchant*|length <= 200paymentMethod*string"out_of_pocket""company_card""out_of_pocket""mileage""per_diem"perDiemDays?|0 < value <= 366roundTrip*booleanfalserouteFrom*|length <= 300routeTo*|length <= 300source*string"manual""manual""email""photo""card_feed"spentOn*isoDateSchemadatetaskId?|uuidtripId?|uuidvatAmount?|0 <= valuevatRate?|0 <= value <= 100Returns the created claim.
application/jsonamount*numberamountBase*numberbillable*booleancanDecide*booleancanEdit*booleancategoryId*|uuidcategoryName*string|nullcreatedAt*stringcurrency*stringcustomerId*|nullcustomerName*string|nulldecidedAt*string|nulldecisionNote*string|nulldescription*string|nulldistanceKm*number|nullemployee*|nullexchangeRate*numberextractionConfidence*number|nullflags*array<>id*stringuuidinvoiceId*|uuidkind*expenseKindSchema"company""claim"merchant*string|nullmileageRate*number|nullpaymentMethod*expensePaymentMethodSchema"company_card""out_of_pocket""mileage""per_diem"perDiemDays*number|nullreceiptFileName*string|nullreceiptStatus*expenseReceiptStatusSchema"attached""missing""not_required"reimbursedAt*string|nullreimbursementReference*string|nullroundTrip*booleanrouteFrom*string|nullrouteTo*string|nullsource*expenseSourceSchema"manual""email""photo""card_feed"spentOn*isoDateSchemadatestatus*expenseStatusSchema"draft""submitted""approved""rejected""reimbursed"submittedAt*string|nulltaskId*|uuidtaskTitle*string|nulltripId*|uuidtripName*string|nullvatAmount*number|nullvatRate*number|nullcurl -X POST 'https://app.localhost/api/v1/organizations/123/expenses' \ -H 'Content-Type: application/json' \ -d '{ "amount": 0, "billable": false, "currency": "EUR", "description": "string", "exchangeRate": 1, "kind": "company", "merchant": "string", "paymentMethod": "company_card", "roundTrip": false, "routeFrom": "string", "routeTo": "string", "source": "manual", "spentOn": "2019-08-24"}'{ "amount": 0, "amountBase": 0, "billable": true, "canDecide": true, "canEdit": true, "categoryId": "337f5e5d-288b-40d5-be14-901cc3acacc0", "categoryName": "string", "createdAt": "string", "currency": "string", "customerId": "87d8e330-2878-4742-a86f-dbbb3bf522ac", "customerName": "string", "decidedAt": "string", "decisionNote": "string", "description": "string", "distanceKm": 0, "employee": { "displayName": "string", "employeeId": "b0e78c8f-8c8b-4410-8293-9239e39d9e17", "userId": "2c4a230c-5085-4924-a3e1-25fb4fc5965b" }, "exchangeRate": 0, "extractionConfidence": 0, "flags": [ { "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "kind": "limit_exceeded", "message": "string", "relatedExpenseId": "fd4449ef-cf4d-4e2e-906d-5258b8281510", "resolvedAt": "string" } ], "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "invoiceId": "4f163819-178d-470c-a246-d6768476a6ec", "kind": "company", "merchant": "string", "mileageRate": 0, "paymentMethod": "company_card", "perDiemDays": 0, "receiptFileName": "string", "receiptStatus": "attached", "reimbursedAt": "string", "reimbursementReference": "string", "roundTrip": true, "routeFrom": "string", "routeTo": "string", "source": "manual", "spentOn": "2019-08-24", "status": "draft", "submittedAt": "string", "taskId": "e6e9d88a-9b63-468a-aec3-b7a11de27af8", "taskTitle": "string", "tripId": "ab93ac19-a7bf-4885-87b6-6dcba80ee2d5", "tripName": "string", "vatAmount": 0, "vatRate": 0}