---
title: "Approve or deny a reimbursement"
method: POST
path: "/v3/spend/reimbursements/{reimbursementId}/action"
tags: ["reimbursements"]
---

# Approve or deny a reimbursement

`POST /v3/spend/reimbursements/{reimbursementId}/action`

## Request

- Base URL: `https://gateway.stage.bill.com/connect`
- URL: `https://gateway.stage.bill.com/connect/v3/spend/reimbursements/{reimbursementId}/action`
- Auth: none declared

Approve or deny a reimbursement request.

See [Reimbursements](https://developer.bill.com/docs/reimbursements) in the Guides section for more information, sample requests, and responses.

## Path parameters

- `reimbursementId` string, required: BILL-generated ID or UUID of the reimbursement

## Headers

- `apiToken` string, nullable: Access token for Spend & Expense API authentication

## Request body

- ReimbursementActionRequestDto: Approve or deny a reimbursement
  - `action` 'APPROVE' | 'DENY', required: Reimbursement action. Set this field as `APPROVE` or `DENY`.
  - `note` string: Reimbursement action note

## Response `200`

Approve or deny a reimbursement response

- ReimbursementResponseDto: DTO representing a reimbursement response.
  - `id` string: BILL-generated ID of the reimbursement
  - `uuid` string: BILL-generated UUID of the reimbursement
  - `amount` number: Reimbursement amount
  - `fulfillmentType` 'ACH' | 'PAYROLL': Reimbursement fulfillment type.
  - `fundRequestAmount` number: Amount that must be added to the user funds for the user to have enough funds for this reimbursement
  - `fundRequestBudgetAmount` number: Amount that must be added to the budget for the user to have enough funds for this reimbursement
  - `merchantName` string: Merchant name for the expense
  - `note` string: Reimbursement note. Use this field to describe the business purpose for the expense.
  - `submittedTime` string, date-time: Reimbursement request submission date and time
  - `occurredDate` string, date: Expense created date. The value is in the `yyyy-MM-dd` format.
  - `retired` boolean: This field is set as `true` if the reimbursement has been deleted
  - `status` 'CREATED' | 'AWAITING_APPROVAL' | 'AWAITING_TIER2_APPROVAL' | 'TIER2_APPROVAL_UNDONE' | 'APPROVAL_UNDONE' | 'DENIAL_UNDONE' | 'APPROVED' | 'CANCEL_PAYMENT' | 'PAID' | 'PAYMENT_FAILED' | 'DENIED' | 'DELETED' | 'ARCHIVED' | 'BUDGET_APPROVAL' | 'ADMIN_APPROVAL' | 'READY_TO_PAY' | 'PAYMENT_PENDING': Reimbursement status.
  - `type` 'PURCHASE' | 'MILEAGE': Reimbursement type.
  - `batchId` string: ACH batch ID. You can use `batchId` to identify the set of reimbursements bundled together when funds are withdrawn from the company bank account. Reimbursements with the same `batchId` are withdrawn at the same time.
  - `batchAmount` number: ACH batch amount
  - `statusHistory` StatusHistory[]: Reimbursement approval status history
    - `actorId` string: BILL-generated ID of the user that approved or denied the reimbursement
    - `actorRole` 'SUBMITTER' | 'MANAGER' | 'BUDGET_OWNER' | 'ADMIN' | 'SYSTEM': Reimbursement role of the user.
    - `occurredTime` string, date-time: Reimbursement action date and time
    - `note` string: Reimbursement action note
    - `status` 'CREATED' | 'AWAITING_APPROVAL' | 'AWAITING_TIER2_APPROVAL' | 'TIER2_APPROVAL_UNDONE' | 'APPROVAL_UNDONE' | 'DENIAL_UNDONE' | 'APPROVED' | 'CANCEL_PAYMENT' | 'PAID' | 'PAYMENT_FAILED' | 'DENIED' | 'DELETED' | 'ARCHIVED' | 'BUDGET_APPROVAL' | 'ADMIN_APPROVAL' | 'READY_TO_PAY' | 'PAYMENT_PENDING': New status after the reimbursement action.
  - `budgetId` string: BILL-generated ID of the budget to be used for the reimbursement
  - `budgetUuid` string: BILL-generated UUID of the budget to be used for the reimbursement
  - `userId` string: BILL-generated ID of the user to be reimbursed
  - `userUuid` string: BILL-generated UUID of the user to be reimbursed
  - `receipts` ReceiptImage[]: List of reimbursement receipts
    - `url` string, required: Uploaded receipt URL
    - `filename` string, required: Receipt file name
    - `uuid` string, required: BILL-generated UUID for the receipt image
  - `customFields` CustomFieldDto[]: List of reimbursement custom fields and values
    - `id` string: BILL-generated ID of the custom field
    - `uuid` string: BILL-generated UUID of the custom field
    - `name` string: Custom field name
    - `note` string: Custom field note
    - `isRequired` boolean: Set as `true` if the custom field is required
    - `selectedValues` CustomFieldValueDto[]: List of selected values for this custom field. **NOTE**: In the response, you get up to 20 selected values for a custom field. Use `GET /v3/spend/custom-fields/{customFieldId}/values` to get the complete list of selected values.
      - `id` string: BILL-generated ID of the custom field value
      - `uuid` string: BILL-generated UUID of the custom field value
      - `value` string: Custom field value

## Other responses

- `4XX`: List of errors.
- `5XX`: List of errors.

## Changes

- **2026-11-03** `54edddceb0a5`: 10 warning, 5 info
  - added the new `ADMIN_APPROVAL` enum value to the `status/allOf[#/components/schemas/ReimbursementStatus]/` response property for the response status `200`
  - added the new `ADMIN_APPROVAL` enum value to the `statusHistory/items/status/allOf[#/components/schemas/ReimbursementStatus]/` response property for the response status `200`
  - added the new `ARCHIVED` enum value to the `status/allOf[#/components/schemas/ReimbursementStatus]/` response property for the response status `200`
  - added the new `ARCHIVED` enum value to the `statusHistory/items/status/allOf[#/components/schemas/ReimbursementStatus]/` response property for the response status `200`
  - …11 more

[Operation history](https://skmtc.dev/bill/apis/bill-v3-api/changes/v3/spend/reimbursements/:reimbursementId/action/post.md)

---

[API](https://skmtc.dev/bill/apis/bill-v3-api.md) - [All operations](https://skmtc.dev/bill/apis/bill-v3-api/llms.txt) - [OpenAPI document](https://skmtc.dev/bill/apis/bill-v3-api/revisions/54edddceb0a5?raw)
