---
title: "Approvals for the signed-in person: waiting for them (`inbox`), decided (`history`) or the whole workspace's (`workspace`, for owners, admins and billing)."
method: GET
path: "/v1/approvals"
tags: ["approvals"]
---

# Approvals for the signed-in person: waiting for them (\`inbox\`), decided (\`history\`) or the whole workspace's (\`workspace\`, for owners, admins and billing).

`GET /v1/approvals`

## Request

- Base URL: `https://api.50heads.com`
- URL: `https://api.50heads.com/v1/approvals`
- Auth: HTTP bearer

A person, in the app or at 50heads.com. `pendingForYou` is the badge on the Answer tab. An empty list while approvals are off.

## Query parameters

- `view` 'inbox' | 'history' | 'workspace'
- `state` 'pending' | 'approved' | 'denied' | 'expired' | 'canceled'
- `limit` integer
- `cursor` string

## Response `200`

OK

- ApprovalsListResponse
  - `approvals` object[], required
    - `id` string, required
    - `state` 'pending' | 'approved' | 'denied' | 'expired' | 'canceled', required
    - `organizationId` string, required
    - `organizationName` string, required
    - `workspaceId` string, required
    - `workspaceName` string, required
    - `questionId` string, required
    - `question` object, required
      - `text` string, required
      - `type` string, required
      - `options` object[], required
        - `label` string, required
        - `imageUrl` string, nullable, required
      - `context` string, nullable, required
    - `amountPence` integer, required
    - `heads` integer, required
    - `tier` integer, required
    - `etaMinutes` integer, nullable, required
    - `reasons` string[], required
    - `requester` object, required
      - `kind` 'key' | 'app' | 'service_account' | 'person', required
      - `name` string, required
      - `keyTail` string, nullable, required
    - `projectId` string, nullable, required
    - `projectName` string, nullable, required
    - `quorum` union, required
      - 1
      - 2
    - `approvedCount` integer, required
    - `approverRoles` string[], required
    - `approverCount` integer, required
    - `votes` object[], required
      - `userId` string, nullable, required
      - `name` string, nullable, required
      - `role` string, required
      - `decision` 'approve' | 'deny', required
      - `reason` string, nullable, required
      - `channel` 'app' | 'web', required
      - `at` string, required
    - `expiresAt` string, required
    - `createdAt` string, required
    - `decidedAt` string, nullable, required
    - `canDecide` boolean, required
    - `blocked` 'own_ask' | 'not_approver' | 'already_voted' | 'decided' | 'expired', nullable, required
    - `heldPence` integer, required
    - `confirmRequired` boolean, required
    - `approveUrl` string, required
  - `pendingForYou` integer, required
  - `nextCursor` string, nullable, required
  - `stats` object, nullable
    - `decided` integer, required
    - `approved` integer, required
    - `denied` integer, required
    - `expired` integer, required
    - `approvedPence` integer, required
    - `releasedPence` integer, required
    - `medianMinutes` number, nullable, required
    - `slowestMinutes` number, nullable, required
    - `monthlyLimitPence` integer, nullable, required
  - `enabled` boolean

## Other responses

- `400`: The request is not valid; `error.details.validation` lists the fixes.
- `401`: No key or token, or it expired or was revoked.
- `403`: The key or token lacks the scope (`insufficient_scope`), or the action is not allowed.
- `429`: Too many requests; wait for Retry-After.

---

[API](https://skmtc.dev/50heads/apis/50heads-api.md) · [All operations](https://skmtc.dev/50heads/apis/50heads-api/llms.txt) · [OpenAPI document](https://skmtc.dev/50heads/apis/50heads-api/revisions/20175e8b00e3?raw)
