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

# List Applications

> Retrieve a paginated list of applications for your organization

Returns a paginated list of applications belonging to the organization associated with your API key, including document metadata and presigned download URLs. Registry documents are not included here — fetch them via [Get Application](/api-reference/get-application).

```
GET /api/external/applications
```

## Authentication

Requires an API key with `applications:read` scope.

```bash theme={null}
Authorization: Bearer klara_{client_id}.{secret}
```

## Query parameters

<ParamField query="status" type="string">
  Filter by application status. One of: `created`, `sent`, `in_progress`, `submitted`, `review`, `approved`, `rejected`.
</ParamField>

<ParamField query="limit" type="integer" default="50">
  Number of results per page. Min `1`, max `100`.
</ParamField>

<ParamField query="cursor" type="string">
  Pagination cursor returned as `next_cursor` from a previous response.
</ParamField>

## Response

Returns `200 OK` with a paginated list.

<ResponseField name="applications" type="array">
  List of application summaries.

  <Expandable title="application properties">
    <ResponseField name="id" type="string">
      UUID of the application.
    </ResponseField>

    <ResponseField name="config_id" type="string">
      Configuration ID used for this application.
    </ResponseField>

    <ResponseField name="status" type="string">
      Current status of the application.
    </ResponseField>

    <ResponseField name="company_name" type="string | null">
      Name of the company being onboarded.
    </ResponseField>

    <ResponseField name="primary_contact" type="object">
      <Expandable title="primary_contact properties">
        <ResponseField name="email" type="string | null">
          Email of the primary contact.
        </ResponseField>

        <ResponseField name="name" type="string | null">
          Display name of the primary contact.
        </ResponseField>
      </Expandable>
    </ResponseField>

    <ResponseField name="documents" type="array">
      Documents for this application. Only documents with status `accepted`, `forced`, or `skipped` are included.

      <Expandable title="document properties">
        <ResponseField name="id" type="string">
          UUID of the document.
        </ResponseField>

        <ResponseField name="field_id" type="string">
          Field the document was uploaded for.
        </ResponseField>

        <ResponseField name="file_name" type="string">
          Original file name.
        </ResponseField>

        <ResponseField name="status" type="string">
          `accepted`, `forced` (manually accepted by an admin), or `skipped` (requirement waived by an admin).
        </ResponseField>

        <ResponseField name="user_override_reason" type="string | undefined">
          Reason provided when a document was forced or skipped.
        </ResponseField>

        <ResponseField name="download_url" type="string | null">
          Presigned S3 URL valid for 60 seconds.
        </ResponseField>
      </Expandable>
    </ResponseField>

    <ResponseField name="created_at" type="string">
      ISO 8601 timestamp.
    </ResponseField>

    <ResponseField name="updated_at" type="string">
      ISO 8601 timestamp.
    </ResponseField>

    <ResponseField name="submitted_at" type="string | null">
      ISO 8601 timestamp, or `null` if not yet submitted.
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="has_more" type="boolean">
  Whether more results are available.
</ResponseField>

<ResponseField name="next_cursor" type="string | null">
  Pass as the `cursor` query parameter to fetch the next page. `null` when there are no more results.
</ResponseField>

## Examples

### List all submitted applications

<CodeGroup>
  ```bash cURL theme={null}
  curl "https://app.klara-ai.com/api/external/applications?status=submitted&limit=10" \
    -H "Authorization: Bearer klara_abc123def456.your-secret-here"
  ```

  ```javascript Node.js theme={null}
  const response = await fetch(
    'https://app.klara-ai.com/api/external/applications?status=submitted&limit=10',
    {
      headers: {
        'Authorization': 'Bearer klara_abc123def456.your-secret-here'
      }
    }
  );

  const data = await response.json();
  // data.applications, data.has_more, data.next_cursor
  ```

  ```python Python theme={null}
  import requests

  response = requests.get(
      'https://app.klara-ai.com/api/external/applications',
      headers={'Authorization': 'Bearer klara_abc123def456.your-secret-here'},
      params={'status': 'submitted', 'limit': 10}
  )

  data = response.json()
  ```
</CodeGroup>

**Response:**

```json theme={null}
{
  "applications": [
    {
      "id": "550e8400-e29b-41d4-a716-446655440000",
      "config_id": "kyc-standard",
      "status": "submitted",
      "company_name": "Acme Financial Ltd",
      "primary_contact": {
        "email": "sophie@acmefinancial.co.uk",
        "name": "Sophie Mitchell"
      },
      "documents": [
        {
          "id": "770e8400-e29b-41d4-a716-446655440002",
          "field_id": "bank_statement",
          "file_name": "acme-bank-statement-dec-2025.pdf",
          "status": "accepted",
          "download_url": "https://s3.amazonaws.com/..."
        },
        {
          "id": "880e8400-e29b-41d4-a716-446655440003",
          "field_id": "certificate_of_incorporation",
          "file_name": "acme-cert-incorporation.pdf",
          "status": "accepted",
          "download_url": "https://s3.amazonaws.com/..."
        }
      ],
      "created_at": "2026-01-15T10:30:00.000Z",
      "updated_at": "2026-01-16T14:20:00.000Z",
      "submitted_at": "2026-01-16T14:20:00.000Z"
    },
    {
      "id": "661f9511-f3ac-52e5-b827-557766551111",
      "config_id": "kyc-standard",
      "status": "in_progress",
      "company_name": "Bright Ventures Ltd",
      "primary_contact": {
        "email": "james@brightventures.io",
        "name": "James Okafor"
      },
      "documents": [],
      "created_at": "2026-01-14T08:15:00.000Z",
      "updated_at": "2026-01-14T09:45:00.000Z",
      "submitted_at": null
    }
  ],
  "has_more": true,
  "next_cursor": "2026-01-14T08:15:00.000Z|661f9511-f3ac-52e5-b827-557766551111"
}
```

### Paginating through results

```javascript theme={null}
let cursor = null;

do {
  const url = new URL('https://app.klara-ai.com/api/external/applications');
  url.searchParams.set('limit', '50');
  if (cursor) url.searchParams.set('cursor', cursor);

  const res = await fetch(url, {
    headers: { 'Authorization': 'Bearer klara_abc123def456.your-secret-here' }
  });
  const page = await res.json();

  for (const app of page.applications) {
    // Process each application
  }

  cursor = page.next_cursor;
} while (cursor);
```

## Errors

| Status | Error                                                | Cause                                    |
| ------ | ---------------------------------------------------- | ---------------------------------------- |
| `401`  | `Invalid API key`                                    | API key is invalid, expired, or inactive |
| `401`  | `API key missing required scopes: applications:read` | Key lacks the required scope             |
| `500`  | `Internal server error`                              | An unexpected error occurred             |
