---
title: "Get an expense"
method: GET
path: "/v1/expenses/{id}"
tags: ["Expenses"]
---

# Get an expense

`GET /v1/expenses/{id}`

## Request

- Base URL: `https://api.dynt.ai/v1/dynt-server.onrender.com`
- URL: `https://api.dynt.ai/v1/dynt-server.onrender.com/v1/expenses/{id}`
- Auth: HTTP bearer

One submitted expense. A draft answers 404, like an id that does not exist.

## Path parameters

- `id` string, required: The resource id.

## Response `200`

OK

- object: An expense a team member submitted, in any status but draft.
  - `id` string, required
  - `number` string, required: Dynt's sequence number for the expense.
  - `custom_id` string, nullable, required: The organization's own expense number, when set.
  - `status` 'pending' | 'processing' | 'sent' | 'reimbursed' | 'rejected' | 'cancelled', required: Where the expense is in Dynt's workflow; the consuming system decides which statuses it books. Drafts are never returned.
  - `approval_status` string, required: The expense's review outcome in Dynt.
  - `accounting_status` string, required: The expense's bookkeeping review state in Dynt.
  - `date` string, date-time, required: The expense date as stored (UTC); the `from`/`to` filters use it.
  - `description` string, nullable, required: The comment entered with the expense.
  - `merchant` object, nullable, required: Where the money was spent.
    - `id` string, required
    - `name` string, required
  - `currency` string, required
  - `net_amount` string, required: Total before VAT.
  - `vat_amount` string, required: Decimal amount as a string with the currency's own decimals (ISO 4217: 2 for EUR, 0 for JPY, 3 for BHD, 4 for CLF), e.g. "1234.50"; eur_amount always has 2.
  - `total_amount` string, required: Total including VAT.
  - `eur_amount` string, nullable, required: Decimal amount as a string with the currency's own decimals (ISO 4217: 2 for EUR, 0 for JPY, 3 for BHD, 4 for CLF), e.g. "1234.50"; eur_amount always has 2.
  - `fx_rate` string, nullable, required: The stored exchange rate used for eur_amount, as a decimal string; null when none is stored.
  - `category` object, nullable, required
    - `id` string, required
    - `name` string, required
  - `sub_category` object, nullable, required
    - `id` string, required
    - `name` string, required
  - `event` object, nullable, required: The event (trip, conference) the expense is filed under, if any.
    - `id` string, required
    - `name` string, required
  - `employee` object, nullable, required: The team member the expense is filed under: their membership id (the `employee_id` filter) and display name; no contact details.
    - `id` string, required
    - `name` string, required
  - `external_guest` boolean, required: Filed for guest staff outside the organization.
  - `proofs` object[], required: The receipts, as metadata. A file that is also a receipt of a draft expense is withheld.
    - `id` string, required
    - `filename` string, required
    - `content_type` string, required
    - `size_bytes` integer, nullable, required: File size in bytes; null when unknown.
    - `created_at` string, date-time, required: When the file was attached.
  - `created_at` string, date-time, required: RFC 3339 date-time in UTC.
  - `updated_at` string, date-time, required: RFC 3339 date-time in UTC.

## Other responses

- `400`: A parameter is invalid or unknown, or the request has a body (code bad_request).
- `401`: Missing, unknown, revoked or expired integration key (code unauthorized).
- `403`: The key lacks the read permission (code forbidden).
- `404`: No such resource in the key's organization (code not_found).
- `429`: Rate limited (code rate_limited).
- `500`: Internal error (code internal_error).
- `503`: Server busy; retry after the Retry-After delay (code server_busy).

---

[API](https://skmtc.dev/dynt/apis/dynt-api.md) · [All operations](https://skmtc.dev/dynt/apis/dynt-api/llms.txt) · [OpenAPI document](https://skmtc.dev/dynt/apis/dynt-api/revisions/35825587b87b?raw)
