Expense Claim Status Repository
API Contract
REST
/api/v1/expense-claims
5 endpoints
GET
/api/v1/expense-claims/api/v1/expense-claims
List expense claims with status/organisation filter (getPendingClaims, getClaimsByStatus)
Public
Response Example
{
"data": [
{
"claim_id": "clm_9f2a3b4c",
"user_id": "usr_84cd12ef",
"organisation_id": "org_001",
"status": "pending_coordinator",
"total_amount": 4850,
"total_distance_km": 0,
"created_at": "2026-03-20T09:15:00Z",
"updated_at": "2026-03-21T11:30:00Z"
}
],
"pagination": {
"page": 1,
"limit": 20,
"total": 43
}
}
GET
/api/v1/expense-claims/api/v1/expense-claims/:claim_id
Get claim status and details (getStatus)
Public
Response Example
{
"claim_id": "clm_9f2a3b4c",
"user_id": "usr_84cd12ef",
"organisation_id": "org_001",
"status": "pending_coordinator",
"total_amount": 4850,
"total_distance_km": 0,
"expense_lines": [
{
"line_id": "line_001",
"description": "Train Oslo-Bergen",
"amount": 1200,
"category": "transport",
"distance_km": 0
},
{
"line_id": "line_002",
"description": "Hotel 2 nights",
"amount": 3650,
"category": "accommodation",
"distance_km": 0
}
],
"created_at": "2026-03-20T09:15:00Z",
"updated_at": "2026-03-21T11:30:00Z"
}
POST
/api/v1/expense-claims/api/v1/expense-claims
Create a new expense claim
Public
Request Example
{
"user_id": "usr_84cd12ef",
"organisation_id": "org_001",
"expense_lines": [
{
"description": "Train Oslo-Bergen",
"amount": 1200,
"category": "transport",
"distance_km": 0
},
{
"description": "Hotel 2 nights",
"amount": 3650,
"category": "accommodation",
"distance_km": 0
}
]
}
Response Example
{
"claim_id": "clm_9f2a3b4c",
"user_id": "usr_84cd12ef",
"organisation_id": "org_001",
"status": "draft",
"total_amount": 4850,
"total_distance_km": 0,
"created_at": "2026-03-26T08:00:00Z",
"updated_at": "2026-03-26T08:00:00Z"
}
PUT
/api/v1/expense-claims/api/v1/expense-claims/:claim_id
Update claim status with optimistic concurrency check (updateStatus)
Public
Request Example
{
"new_status": "pending_coordinator",
"expected_current_status": "draft"
}
Response Example
{
"claim_id": "clm_9f2a3b4c",
"status": "pending_coordinator",
"updated_at": "2026-03-26T08:05:00Z"
}
DELETE
/api/v1/expense-claims/api/v1/expense-claims/:claim_id
Delete a draft expense claim
Public
Response Example
{
"deleted": true,
"claim_id": "clm_9f2a3b4c"
}