Expense Submission Service
API Contract
REST
/api/v1/expense-submissions
6 endpoints
GET
/api/v1/expense-submissions/api/v1/expense-submissions
List submission records
Public
Response Example
{
"data": [
{
"submission_id": "sub_c3e8f1",
"expense_id": "exp_9c2d7e",
"activity_id": "act_3b81fa",
"status": "submitted",
"submitted_at": "2026-03-18T09:14:00Z",
"retry_count": 0
}
],
"pagination": {
"page": 1,
"limit": 20,
"total": 1
}
}
GET
/api/v1/expense-submissions/api/v1/expense-submissions/:id
Get submission status and details
Public
Response Example
{
"submission_id": "sub_c3e8f1",
"expense_id": "exp_9c2d7e",
"activity_id": "act_3b81fa",
"status": "submitted",
"submitted_at": "2026-03-18T09:14:00Z",
"retry_count": 0,
"last_error": null
}
POST
/api/v1/expense-submissions/api/v1/expense-submissions
Submit a draft expense for attestation
Public
Request Example
{
"expense_id": "exp_9c2d7e",
"activity_id": "act_3b81fa"
}
Response Example
{
"submission_id": "sub_c3e8f1",
"expense_id": "exp_9c2d7e",
"activity_id": "act_3b81fa",
"status": "submitted",
"submitted_at": "2026-03-18T09:14:00Z",
"retry_count": 0
}
PUT
/api/v1/expense-submissions/api/v1/expense-submissions/:id
Update submission metadata (e.g. after correction)
Public
Request Example
{
"status": "resubmitted",
"retry_count": 1
}
Response Example
{
"submission_id": "sub_c3e8f1",
"status": "resubmitted",
"retry_count": 1,
"updated_at": "2026-03-18T09:30:00Z"
}
DELETE
/api/v1/expense-submissions/api/v1/expense-submissions/:id
Retract a submission (returns expense to draft)
Public
Response Example
{
"deleted": true,
"submission_id": "sub_c3e8f1",
"expense_status": "draft"
}
POST
/api/v1/expense-submissions/api/v1/expense-submissions/:id/retry
Retry a failed submission
Public
Response Example
{
"submission_id": "sub_c3e8f1",
"expense_id": "exp_9c2d7e",
"status": "submitted",
"retry_count": 1,
"retried_at": "2026-03-18T09:35:00Z"
}