---
title: "Get Approval"
method: GET
path: "/approvals/{approval_id}"
tags: ["Approvals"]
---

# Get Approval

`GET /approvals/{approval_id}`

## Request

- Base URL: `https://api.meow.com/v1`
- URL: `https://api.meow.com/v1/approvals/{approval_id}`
- Auth: API key in header `x-api-key`
- TypeScript: <https://skmtc.dev/meow/apis/meow-api/docs/approvals/:approval_id/get.ts> (a function with typed inputs; its response is checked against the schema)

Returns the status and details of an approval request, including how many approvals are required and how many have been received. A key can always read an approval it initiated. Reading one that another key initiated also needs the `accounts:transactions` scope.

## Path parameters

- `approval_id` string, required: Approval to fetch. Returned as approval_id by the payment-drafting tools.

## Headers

- `x-entity-id` string, uuid

## Response `200`

Successful Response

- ApprovalResponse
  - `approval_id` string, uuid, required: Identifier of this approval, as returned in `approval_id` by the endpoint that drafted the request.
  - `status` 'pending_approval' | 'approved' | 'executing' | 'under_review' | 'completed' | 'rejected' | 'expired' | 'failed', required
  - `action_type` 'manage_users_and_policies' | 'send_money'
  - `transfer_type` 'book' | 'usdc' | 'usdt' | 'pyusd' | 'cash' | 'usdg' | 'path_usd' | 'ach' | 'wire' | 'international': The rail a transfer moves on, as the customer API reports it.
  - `amount` string, nullable: Amount the request would send, in USD. `null` for requests that carry no amount.
  - `counterparty_id` string, uuid, nullable: Contact the request would pay. `null` for requests with no contact, such as a book transfer between your own accounts.
  - `description` string, nullable: Description carried on the drafted request, as submitted. `null` when the request has none.
  - `recipient_name` string, nullable: Who the request would pay, as Meow shows it to approvers: a contact's name with the last digits of their account, or your own account for a transfer between accounts. `null` when the request pays no one.
  - `source_account` string, nullable: Your account the request would send from, by name and the last digits of its number. `null` when the request sends from no account.
  - `initiator` Initiator, required
    - `email` string, nullable: Email address of the person who acted. `null` when no person acted, such as an API key with no user behind it or a Meow system job.
    - `name` string, nullable: Full name of the Meow user who acted, as it stood when they acted. `null` when no Meow user acted.
    - `public_id` string, uuid, nullable: Identifier of the user who acted. `null` when no Meow user acted.
    - `api_key_id` string, nullable: Identifier of the API key used. `null` when no API key was used.
    - `api_key_nickname` string, nullable: Nickname of the API key used. `null` when no key was used, or the key has no nickname.
    - `identity_type` 'web_user' | 'user_api_key' | 'entity_api_key' | 'mcp_oauth' | 'cli_key' | 'partner_api_key' | 'vendor_link' | 'system'
    - `user_id` integer, nullable: Meow-internal numeric id of the user who acted. Prefer `public_id`, which is the identifier the API accepts elsewhere.
    - `display` DisplayInitiator, required
      - `primary` string, required: Ready-to-render name for whoever acted, with the mechanism folded in — "Jane Doe", "Jane Doe's API key", or 'Service API key "Production Cards"'. Drop it straight into a sentence rather than reassembling it from the fields below.
  - `approvals_required` integer, required: Approvals needed before the request executes — the matched policy's quorum. `0` when no policy matched and the initiator does not require human approval, meaning the request executes on its own.
  - `approvals_received` integer, required: Approvals recorded so far.
  - `approver_display_names` string[], nullable: Names of the people who may approve, from the matched policy. `null` when no policy matched — the initiator then approves it themselves in the Meow dashboard.
  - `security_policy_id` string, uuid, nullable: Security policy that gated this request, as it stood when the request was drafted. `null` when no policy matched.
  - `created_time` string, date-time, required: ISO 8601 date-time in the format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` (per [IETF RFC 3339](https://xml2rfc.tools.ietf.org/public/rfc/html/rfc3339.html#anchor14)).
  - `expires_at` string, date-time: ISO 8601 date-time in the format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` (per [IETF RFC 3339](https://xml2rfc.tools.ietf.org/public/rfc/html/rfc3339.html#anchor14)).
  - `executed_transfer` ApprovalTransferHandle: The transfer an approved request actually produced.
    - `id` string, required: Identifier of the transfer at the bank. Use it with the Get endpoint for the matching rail.
    - `transfer_type` 'book' | 'usdc' | 'usdt' | 'pyusd' | 'cash' | 'usdg' | 'path_usd' | 'ach' | 'wire' | 'international', required: The rail a transfer moves on, as the customer API reports it.
    - `status` 'pending' | 'pending_approval' | 'canceled' | 'processing' | 'error' | 'sent' | 'returned' | 'void', required
  - `rejection_reason` string, nullable: Why the request did not go through. Set only when `status` is `rejected` or `failed`; otherwise `null`.
  - `metadata` object, nullable: The metadata attached when this object was created, unchanged. `null` when none was attached. Rarely, a `.created` webhook can be published before the create request finishes committing, and that one event reports `null`; every later event and every read of the object carries the metadata.

## Other responses

- `400`: The request could not be processed.
- `401`: Authentication failed.
- `403`: The API key is not authorized for this operation, or the user of a global API key is an admin or controller without approved KYC. The KYC case returns the message `KYC is required for controllers and admins.` until that user completes KYC in the Meow dashboard.
- `429`: Too many requests.

---

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