Expense Attestation Service
API Contract
REST
/api/v1/expense-attestations
7 endpoints
GET
/api/v1/expense-attestations/api/v1/expense-attestations
Get pending attestation queue for coordinator
Public
Response Example
{
"data": [
{
"attestation_id": "att_2b9e4c",
"expense_id": "exp_9c2d7e",
"claimant_name": "Kari Nordmann",
"activity_name": "Youth Football Camp",
"total_amount": 247.5,
"status": "pending",
"submitted_at": "2026-03-18T09:14:00Z"
},
{
"attestation_id": "att_5d1f7a",
"expense_id": "exp_1a4f8b",
"claimant_name": "Ola Hansen",
"activity_name": "Regional Swim Meet",
"total_amount": 89,
"status": "pending",
"submitted_at": "2026-03-19T11:30:00Z"
}
],
"pagination": {
"page": 1,
"limit": 20,
"total": 2
}
}
GET
/api/v1/expense-attestations/api/v1/expense-attestations/:id
Get attestation record details
Public
Response Example
{
"attestation_id": "att_2b9e4c",
"expense_id": "exp_9c2d7e",
"organization_id": "org_4729bc",
"coordinator_id": null,
"status": "pending",
"comment": null,
"decided_at": null,
"created_at": "2026-03-18T09:14:00Z"
}
POST
/api/v1/expense-attestations/api/v1/expense-attestations
Create attestation record when expense is submitted
Public
Request Example
{
"expense_id": "exp_9c2d7e",
"organization_id": "org_4729bc"
}
Response Example
{
"attestation_id": "att_2b9e4c",
"expense_id": "exp_9c2d7e",
"organization_id": "org_4729bc",
"status": "pending",
"created_at": "2026-03-18T09:14:00Z"
}
PUT
/api/v1/expense-attestations/api/v1/expense-attestations/:id
Update attestation record (coordinator decision)
Public
Request Example
{
"coordinator_id": "usr_c00rd1",
"status": "approved",
"comment": "All receipts verified"
}
Response Example
{
"attestation_id": "att_2b9e4c",
"expense_id": "exp_9c2d7e",
"coordinator_id": "usr_c00rd1",
"status": "approved",
"comment": "All receipts verified",
"decided_at": "2026-03-20T14:22:00Z"
}
DELETE
/api/v1/expense-attestations/api/v1/expense-attestations/:id
Cancel an attestation record (admin only)
Public
Response Example
{
"deleted": true,
"attestation_id": "att_2b9e4c"
}
POST
/api/v1/expense-attestations/api/v1/expense-attestations/:id/approve
Approve an expense
Public
Request Example
{
"coordinator_id": "usr_c00rd1",
"comment": "All receipts verified, distance confirmed"
}
Response Example
{
"attestation_id": "att_2b9e4c",
"expense_id": "exp_9c2d7e",
"status": "approved",
"coordinator_id": "usr_c00rd1",
"comment": "All receipts verified, distance confirmed",
"decided_at": "2026-03-20T14:22:00Z"
}
POST
/api/v1/expense-attestations/api/v1/expense-attestations/:id/reject
Reject an expense with mandatory comment
Public
Request Example
{
"coordinator_id": "usr_c00rd1",
"comment": "Receipt missing for parking claim over 200 NOK"
}
Response Example
{
"attestation_id": "att_2b9e4c",
"expense_id": "exp_9c2d7e",
"status": "rejected",
"coordinator_id": "usr_c00rd1",
"comment": "Receipt missing for parking claim over 200 NOK",
"decided_at": "2026-03-20T14:25:00Z"
}