# List the invoices of a sales order

```http
GET https://secure.yoprint.com/v2/api/store/{team_slug}/v2/sales_order/{unique_key}/invoice
```

- API version: v2
- Operation ID: `v2_public_sales_order_invoice_index_for_order`
- Section: Invoices and payments › [Invoices](https://developer.yoprint.com/reference/invoices.md)
- Web page: https://developer.yoprint.com/reference/invoices/v2-sales-order-invoice-index-for-order/
- Authentication: `Authorization: Bearer YOUR_API_KEY`

Returns the invoices of an order with their lines. `{unique_key}` is the order's `id` (for example `V4keXwwxMQyXw7`). The `ord_` unique key does not work here: it gives an empty list with status 200, not an error, so an empty list does not prove the order has none. An unknown id returns an empty list.

## Permission

Any member of the team.

## Path parameters

- `team_slug` (string, required): Your team slug, shown as Team ID next to your API key in Profile. Example `your-team`.
- `unique_key` (string, required): The sales order's or quote's `id` (a hash id). The `ord_` unique key and the order number do not work here. Example `V4keXwwxMQyXw7`.

## Request body

This operation takes no request body.

### Example request

```bash
curl 'https://secure.yoprint.com/v2/api/store/your-team/v2/sales_order/V4keXwwxMQyXw7/invoice' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Accept: application/json' \
  -H 'X-Yoprint-Decimal-Format: exact-v1'
```

## Response

`200` Successful response.

Fields:

- `data` (array of objects, required)
  - Each item:
    - `id` (string, required)
    - `order_id` (string, required)
    - `total` (decimal pair, required): Invoice total. A decimal pair: the amount is `value` ÷ 10^`dp` (`{ "value": 125000, "dp": 4 }` is 12.50). Kept with 4 decimal places; an amount never set can come as `{ "value": 0, "dp": 0 }`. Read `dp` every time: it can differ between fields and records. See https://developer.yoprint.com/concepts/money-and-quantities.md.
    - `auto_invoice_managed` (boolean, optional)
    - `billing_address_id` (string | null, optional)
    - `calc_deposit_total` (integer | number | string | null, optional): The order's deposit amount. Thousandths, an older encoding: `12500` is 12.50. Usually a whole number; an amount finer than a thousandth comes back as a number with a fraction (`1234.5` is 1.2345), or as a string (`"1234.5"`) when you send `X-Yoprint-Decimal-Format: exact-v1`. See [Money and quantities](/concepts/money-and-quantities/).
    - `cart_item_subtotal` (decimal pair, optional): Lines subtotal. A decimal pair: the amount is `value` ÷ 10^`dp` (`{ "value": 125000, "dp": 4 }` is 12.50). Kept with 4 decimal places; an amount never set can come as `{ "value": 0, "dp": 0 }`. Read `dp` every time: it can differ between fields and records. See https://developer.yoprint.com/concepts/money-and-quantities.md.
    - `created_at` (string (date-time) | null, optional): Created. ISO 8601 with offset, or null.
    - `customer` (object | null, optional): The customer record, with the same fields as Get a customer (`GET /v1/api/store/{team_slug}/customer/{hash_id}`); the main ones are listed here.
      - `default_payment_term_id` (string | null, optional)
      - `default_pricing_group_id` (string | null, optional)
      - `id` (string, optional)
      - `is_external` (boolean, optional): true for a customer synced from an integration.
      - `name` (string, optional)
      - `tax_exempt` (boolean, optional)
    - `discount_subtotal` (decimal pair, optional): Discount. A decimal pair: the amount is `value` ÷ 10^`dp` (`{ "value": 125000, "dp": 4 }` is 12.50). Kept with 4 decimal places; an amount never set can come as `{ "value": 0, "dp": 0 }`. Read `dp` every time: it can differ between fields and records. See https://developer.yoprint.com/concepts/money-and-quantities.md.
    - `is_paid` (boolean, optional)
    - `is_valid` (boolean, optional)
    - `issue_date` (string (date-time) | null, optional): Issue date. ISO 8601 with offset, or null.
    - `items` (array of objects, optional): The invoice lines.
    - `order_scoped_id` (string, optional)
    - `paid_amount` (integer | number | string | null, optional): Paid on this invoice. Thousandths, an older encoding: `12500` is 12.50. Usually a whole number; an amount finer than a thousandth comes back as a number with a fraction (`1234.5` is 1.2345), or as a string (`"1234.5"`) when you send `X-Yoprint-Decimal-Format: exact-v1`. See [Money and quantities](/concepts/money-and-quantities/).
    - `pdf_url` (array of objects, optional): The invoice PDF links, despite the name: a list, first the standard invoice, then one per invoice PDF template the team has turned on.
      - Each item:
        - `description` (string, optional)
        - `label` (string, optional)
        - `object_type` (string, optional)
        - `url` (string, optional): Link to the PDF.
    - `scoped_id` (string, optional): The invoice number, from the team's invoice counter.
    - `shipment_subtotal` (decimal pair, optional): Shipping. A decimal pair: the amount is `value` ÷ 10^`dp` (`{ "value": 125000, "dp": 4 }` is 12.50). Kept with 4 decimal places; an amount never set can come as `{ "value": 0, "dp": 0 }`. Read `dp` every time: it can differ between fields and records. See https://developer.yoprint.com/concepts/money-and-quantities.md.
    - `shipment_tax_subtotal` (decimal pair, optional): Tax on shipping. A decimal pair: the amount is `value` ÷ 10^`dp` (`{ "value": 125000, "dp": 4 }` is 12.50). Kept with 4 decimal places; an amount never set can come as `{ "value": 0, "dp": 0 }`. Read `dp` every time: it can differ between fields and records. See https://developer.yoprint.com/concepts/money-and-quantities.md.
    - `shipping_address_id` (string | null, optional)
    - `tax_subtotal` (decimal pair, optional): Tax. A decimal pair: the amount is `value` ÷ 10^`dp` (`{ "value": 125000, "dp": 4 }` is 12.50). Kept with 4 decimal places; an amount never set can come as `{ "value": 0, "dp": 0 }`. Read `dp` every time: it can differ between fields and records. See https://developer.yoprint.com/concepts/money-and-quantities.md.
- `status` (integer, required)
- `success` (boolean, required)

Example response:

```json
{
  "data": [
    {
      "id": "QRbvVd2ZKcvSTB",
      "is_paid": false,
      "issue_date": "2026-11-03T00:00:00+00:00",
      "items": [],
      "order_id": "V4keXwwxMQyXw7",
      "order_scoped_id": "SO1001",
      "paid_amount": 50000,
      "scoped_id": "1001",
      "total": {
        "dp": 4,
        "value": 1350000
      }
    }
  ],
  "status": 200,
  "success": true
}
```

## Errors

- `401` The API key is missing or wrong (`unauthenticated`).
- `403` You are not allowed to do this. `api_access_not_in_plan`: your team's plan doesn't include API access (Pro and above, with an active subscription or trial), so every request answers this until the team upgrades. When your role lacks the permission the operation needs, the body is only `{"message": "Insufficient Permission"}`. Other refusals use the error envelope, with `unauthorized` or `user_is_not_authorized`.
- `404` Not found. `page_not_found`: the team slug is unknown, you are not a member of the team, or an id in the path is not one of this team's. `code: null`, with a message that starts "No query results for": there is no record with that id.

## Related

- [Create an invoice for a sales order](https://developer.yoprint.com/reference/invoices/v2-sales-order-invoice-create.md): `POST /v2/api/store/{team_slug}/v2/sales_order/{unique_key}/invoice`
- [Get an invoice](https://developer.yoprint.com/reference/invoices/v2-invoice-show.md): `GET /v2/api/store/{team_slug}/v2/invoice/{unique_key}`
