Reject Expense Report — Proposed Guide
Planned API — Reference OnlyReject Expense Report: A report rejection would communicate a review outcome for the submitted collection. The employee should be able to distinguish…
Overview
A report rejection would communicate a review outcome for the submitted collection. The employee should be able to distinguish report-level issues from individual expense issues.
Key concepts
Record a reason, reviewer and review snapshot. Preserve already recorded item-level decisions where the future contract permits it.
Implementation considerations
Define whether correction returns the report to draft or creates a new revision. Rejection must not erase audit history.
Proposed API behavior
POST /v1/expense-reports/{report_id}/reject is an illustrative design for this topic. Path and field names may change before implementation. Access would require an authorized organization context and operation-specific permission; no public API or authorization grant is available here.
| Name | Type | Description |
|---|---|---|
| report_idrequired | string | Stable fictional report reference; not a secret and not evidence that a resource exists. |
| Name | Type | Description |
|---|---|---|
| approval_id | string | Stable fictional approval reference; not a secret and not evidence that a resource exists. |
| reason | string | Synthetic structured justification, not a real reviewer note. |
| version | integer | Illustrative resource revision for detecting stale updates; no live concurrency contract is published. |
Static example requests
# Proposed request text only; this reserved host is not a live API.
curl -X POST 'https://api.remizen.example/v1/expense-reports/rpt_example_123/reject' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{
"approval_id": "apr_example_123",
"reason": "Example review explanation",
"version": 1
}'Fictional response example
Fictional documentation data only. No request was sent, record created, review performed, payment initiated or provider connection activated.
{
"data": {
"report_id": "rpt_example_123",
"approval_id": "apr_example_123",
"reason": "Example review explanation",
"version": 1,
"id": "rpt_example_123",
"organization_id": "org_example_123",
"expense_ids": [
"exp_example_123"
],
"status": "rejected"
},
"meta": {
"request_id": "req_example_123",
"reference_only": true
}
}Illustrative error case
Review this failure case in context: Define whether correction returns the report to draft or creates a new revision. Rejection must not erase audit history.
Synthetic diagnostic example. Human-readable messages must not be used as stable programmatic contracts.
{
"error": {
"code": "validation_error",
"message": "The proposed reject expense report operation requires review of its input or authorization.",
"request_id": "req_example_123"
}
}Proposed data types
| Name | Type | Description |
|---|---|---|
| report_id | string | Stable fictional report reference; not a secret and not evidence that a resource exists. |
| approval_id | string | Stable fictional approval reference; not a secret and not evidence that a resource exists. |
| reason | string | Synthetic structured justification, not a real reviewer note. |
| version | integer | Illustrative resource revision for detecting stale updates; no live concurrency contract is published. |