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

# List Invoices

> Lists the team's invoices, newest first, optionally by state

```
GET /openapi/memorylake/admin/v1/billing/invoices
```

Lists the team's invoices, newest first, optionally by state.

<Note>
  **Permission required:** `invoice:read`
</Note>

### Query Parameters

<ParamField query="status" type="array">
  Repeatable. Only invoices in these states
</ParamField>

<ParamField query="page_size" type="integer" default="20">
  Items per page (1–100)
</ParamField>

<ParamField query="continuation_token" type="string">
  Token from the previous page
</ParamField>

<RequestExample>
  ```bash cURL theme={null}
  curl -X GET 'https://app.memorylake.ai/openapi/memorylake/admin/v1/billing/invoices' \
    -H 'Authorization: Bearer sk_xxxxxx'
  ```
</RequestExample>

### Response

<ResponseField name="data" type="object">
  <Expandable title="Load More Response Billing Invoice object">
    <ResponseField name="items" type="array">
      List of items in the current page

      <Expandable title="Billing Invoice object">
        <ResponseField name="created_at" type="integer">Issue time, Unix seconds</ResponseField>
        <ResponseField name="hosted_invoice_url" type="string">The payment provider's hosted invoice page; null when none</ResponseField>
        <ResponseField name="invoice_id" type="string">Invoice id</ResponseField>
        <ResponseField name="invoice_pdf_url" type="string">The payment provider's own PDF link; null when the provider has none yet. GET /billing/invoices/\{invoice\_id}/pdf always returns a PDF without leaving this API</ResponseField>
        <ResponseField name="number" type="string">Invoice number printed on the document</ResponseField>
        <ResponseField name="order_id" type="string">The order it belongs to (GET /billing/orders/\{order\_id}); null when none</ResponseField>
        <ResponseField name="status" type="string">Invoice state. One of: `draft`, `open`, `paid`, `uncollectible`, `void`.</ResponseField>

        <ResponseField name="subtotal" type="object">
          Total before tax

          <Expandable title="Money object">
            <ResponseField name="amount" type="integer">Amount in the currency's smallest unit (cents for usd)</ResponseField>
            <ResponseField name="currency" type="string">Lowercase ISO 4217 currency code</ResponseField>
          </Expandable>
        </ResponseField>

        <ResponseField name="tax" type="object">
          Tax

          <Expandable title="Money object">
            <ResponseField name="amount" type="integer">Amount in the currency's smallest unit (cents for usd)</ResponseField>
            <ResponseField name="currency" type="string">Lowercase ISO 4217 currency code</ResponseField>
          </Expandable>
        </ResponseField>

        <ResponseField name="total" type="object">
          Total

          <Expandable title="Money object">
            <ResponseField name="amount" type="integer">Amount in the currency's smallest unit (cents for usd)</ResponseField>
            <ResponseField name="currency" type="string">Lowercase ISO 4217 currency code</ResponseField>
          </Expandable>
        </ResponseField>

        <ResponseField name="due_at" type="integer">Payment due time, Unix seconds</ResponseField>
      </Expandable>
    </ResponseField>

    <ResponseField name="continuation_token" type="string">Token to fetch the next page; absent on the last page</ResponseField>
    <ResponseField name="total" type="integer">Total number of items matching the filter across all pages; omitted when the count is unavailable</ResponseField>
  </Expandable>
</ResponseField>

<ResponseExample>
  ```json Success (200) theme={null}
  {
    "success": true,
    "message": "Operation completed successfully",
    "data": {
      "items": [
        {
          "created_at": 1760000000,
          "hosted_invoice_url": "https://example.com/hosted_invoice",
          "invoice_id": "fc9ec77f14773109fc1b0f8a2749731e",
          "invoice_pdf_url": "https://example.com/invoice_pdf",
          "number": "example",
          "order_id": "98fae70aa1ad919811f9214706e755e1",
          "status": "draft",
          "subtotal": {
            "amount": 1999,
            "currency": "usd"
          },
          "tax": {
            "amount": 1999,
            "currency": "usd"
          },
          "total": {
            "amount": 1999,
            "currency": "usd"
          },
          "due_at": 1760000000
        }
      ],
      "continuation_token": "eyJvZmZzZXQiOjIwfQ",
      "total": 1
    }
  }
  ```
</ResponseExample>

### Errors

Errors answer with `success: false`, a `message` and an `error_code`. See [Error Codes](/features/memorylake/api-reference/errors) for every code.

| Status | Meaning |
| - | - |
| `400` | A parameter or the body is invalid |
| `401` | The API key is missing, invalid, disabled or expired |
| `403` | The key is not allowed to do this |
| `422` | The body or a parameter failed validation |
| `429` | Too many requests. Wait for the time in `Retry-After` |
| `500` | Server-side error |


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.