> ## Documentation Index
> Fetch the complete documentation index at: https://docs.cleo-pay.com/llms.txt
> Use this file to discover all available pages before exploring further.

# GET /v1/payables/{payableId} — Retrieve a Payable

> GET /v1/payables/{payableId} retrieves a single payable by ID, including full line items, status, payment progress, and contact details.

The Get Payable endpoint retrieves the complete detail record for a single payable, identified by its internal `id`. The response includes every field available on a payable — lifecycle and payment statuses, amount breakdowns, dates, your custom reference number, the associated contact, and the full structured line-item array. Use this endpoint to display invoice detail pages, poll for status changes, or reconcile payment progress in your own systems.

## Request

**`GET https://api.cleo-pay.com/v1/payables/{payableId}`**

Include your bearer token in every request:

```
Authorization: Bearer <token>
```

### Path Parameters

<ParamField path="payableId" type="string" required>
  The internal opaque `id` of the payable to retrieve (e.g. `pay_01hx9k2mq3fvb8n7cptd6ewrja`). This is the `id` field returned when you [create a payable](/api-reference/payables/create) or [list payables](/api-reference/payables/list) — not the `publicId`.
</ParamField>

### Example Request

```bash theme={null}
curl --request GET \
  --url "https://api.cleo-pay.com/v1/payables/pay_01hx9k2mq3fvb8n7cptd6ewrja" \
  --header "Authorization: Bearer <token>"
```

## Response

A successful request returns HTTP `200` with the full `PayableDetail` object.

<ResponseField name="id" type="string">
  Internal opaque identifier for the payable.
</ResponseField>

<ResponseField name="publicId" type="string">
  Stable public identifier shown in the Cleo Pay dashboard. Safe to display to end users or reference in support conversations.
</ResponseField>

<ResponseField name="status" type="string">
  Current lifecycle status of the payable. One of: `draft`, `pending_approval`, `approved`, `declined`, `blocked`, `void`.
</ResponseField>

<ResponseField name="paymentStatus" type="string">
  Current payment processing status. One of: `none`, `scheduled`, `processing`, `settled`, `failed`, `clawback`.
</ResponseField>

<ResponseField name="totalAmountCents" type="number">
  Total invoice amount in cents (e.g. `250000` = \$2,500.00).
</ResponseField>

<ResponseField name="amountPaidCents" type="number">
  Amount already paid against this payable, in cents.
</ResponseField>

<ResponseField name="remainingAmountCents" type="number">
  Outstanding balance remaining, in cents. Equals `totalAmountCents - amountPaidCents`.
</ResponseField>

<ResponseField name="dueDate" type="string | null">
  Payment due date in `YYYY-MM-DD` format, or `null` if not set.
</ResponseField>

<ResponseField name="issueDate" type="string | null">
  Invoice issue date in `YYYY-MM-DD` format, or `null` if not set.
</ResponseField>

<ResponseField name="customNumber" type="string | null">
  Your custom invoice or purchase-order reference number, or `null` if not provided.
</ResponseField>

<ResponseField name="description" type="string | null">
  Free-text memo or description, or `null` if not provided.
</ResponseField>

<ResponseField name="contact" type="object">
  The counterparty associated with this payable.

  <Expandable title="contact fields">
    <ResponseField name="id" type="string | null">
      Internal identifier of the contact record, or `null` if not resolved.
    </ResponseField>

    <ResponseField name="displayName" type="string | null">
      Human-readable name for the contact, or `null` if not available.
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="items" type="array">
  Structured line items attached to this payable. Returns an empty array if no items were provided at creation.

  <Expandable title="item fields">
    <ResponseField name="name" type="string | null">
      Short label for the line item, or `null` if not provided.
    </ResponseField>

    <ResponseField name="description" type="string | null">
      Longer description of the line item, or `null` if not provided.
    </ResponseField>

    <ResponseField name="quantity" type="number">
      Number of units for this line item.
    </ResponseField>

    <ResponseField name="unitAmountCents" type="number">
      Price per unit in cents.
    </ResponseField>

    <ResponseField name="totalCents" type="number">
      Computed total for this line item in cents (`quantity × unitAmountCents`).
    </ResponseField>
  </Expandable>
</ResponseField>

### Example Response

```json theme={null}
{
  "id": "pay_01hx9k2mq3fvb8n7cptd6ewrja",
  "publicId": "PAY-2024-00042",
  "status": "approved",
  "paymentStatus": "processing",
  "totalAmountCents": 250000,
  "amountPaidCents": 0,
  "remainingAmountCents": 250000,
  "dueDate": "2024-08-15",
  "issueDate": "2024-07-15",
  "customNumber": "INV-1042",
  "description": "Q3 software licensing fees",
  "contact": {
    "id": "con_01hx8a1bc2def3gh4ijk5lm6no",
    "displayName": "Acme Corporation"
  },
  "items": [
    {
      "name": "Enterprise License",
      "description": "Annual seat license — 10 users",
      "quantity": 10,
      "unitAmountCents": 20000,
      "totalCents": 200000
    },
    {
      "name": "Implementation Support",
      "description": "Onboarding and configuration services",
      "quantity": 5,
      "unitAmountCents": 10000,
      "totalCents": 50000
    }
  ]
}
```

<Note>
  Every payable carries two distinct identifiers. The **`id`** (e.g. `pay_01hx9k2mq3fvb8n7cptd6ewrja`) is the internal opaque ID used in all API calls — pass it as the `payableId` path parameter here, or wherever an API endpoint requires a payable reference. The **`publicId`** (e.g. `PAY-2024-00042`) is the stable, human-readable identifier displayed in the Cleo Pay dashboard and safe to surface to your customers or in support communications. Never use `publicId` as the path parameter for API requests.
</Note>
