# Export past lookups as CSV

Source: https://checkslip.com/en/docs/create-slip-export

POST `https://api.checkslip.com/api/slips/exports`

API key

Make a CSV of the lookup history with the same filters and columns as the history page, for matching against your own orders. Up to 1,000,000 rows comes back at once; more runs as a background job in parts of at most 1,000,000 rows, deleted 24 hours after they are ready. One export holds at most 100,000,000 rows; for more, send continue_cursor and the next export starts right after, with no gaps and no repeats. No credit is used. One running export per account. Needs an API key with slip:read. The file holds payer and payee names: keep it safe.

## Request body

`application/json`

| Field | Type | Required |
| --- | --- | --- |
| `q` | `string` | no |
| `trans_ref` | `string` | no |
| `outcome` | `FOUND \| NOT_FOUND \| DUPLICATE \| PENDING \| UNAVAILABLE \| INVALID_QR \| INVALID_FILE \| QR_TAMPERED \| TOO_OLD[]` | no |
| `outcome_not` | `FOUND \| NOT_FOUND \| DUPLICATE \| PENDING \| UNAVAILABLE \| INVALID_QR \| INVALID_FILE \| QR_TAMPERED \| TOO_OLD[]` | no |
| `sender_bank` | `string` | no |
| `api_key` | `string` | no |
| `charged` | `true \| false \| unsettled[]` | no |
| `free_reason` | `NOT_FOUND \| DUPLICATE \| UNAVAILABLE \| INVALID_QR \| INVALID_FILE \| QR_TAMPERED \| TOO_OLD \| SYSTEM_ERROR \| OTHER[]` | no |
| `from` | `string (date-time)` | no |
| `to` | `string (date-time)` | no |
| `columns` | `request_id \| outcome \| status \| checked_at \| channel \| api_key_id \| client_reference \| duplicate_of.request_id \| charge_confirmed \| charged \| free_reason \| slip.trans_ref \| slip.transferred_at \| slip.amount.satang \| slip.amount.currency \| slip.sender.bank.code \| slip.sender.bank.bot_code \| slip.sender.name_th \| slip.sender.name_en \| slip.sender.account \| slip.receiver.bank.code \| slip.receiver.bank.bot_code \| slip.receiver.name_th \| slip.receiver.name_en \| slip.receiver.account[]` | yes |
| `cursor` | `string` | no |

## Responses

### 200 `application/json`

| Field | Type | Required |
| --- | --- | --- |
| `export_id` | `string (uuid)` | yes |
| `state` | `QUEUED \| RUNNING \| READY \| FAILED \| EXPIRED` | yes |
| `mode` | `DIRECT \| JOB` | no |
| `created_at` | `string (date-time)` | yes |
| `request` | `ExportRequest` | yes |
| `request.q` | `string` | no |
| `request.trans_ref` | `string` | no |
| `request.outcome` | `FOUND \| NOT_FOUND \| DUPLICATE \| PENDING \| UNAVAILABLE \| INVALID_QR \| INVALID_FILE \| QR_TAMPERED \| TOO_OLD[]` | no |
| `request.outcome_not` | `FOUND \| NOT_FOUND \| DUPLICATE \| PENDING \| UNAVAILABLE \| INVALID_QR \| INVALID_FILE \| QR_TAMPERED \| TOO_OLD[]` | no |
| `request.sender_bank` | `string` | no |
| `request.api_key` | `string` | no |
| `request.charged` | `true \| false \| unsettled[]` | no |
| `request.free_reason` | `NOT_FOUND \| DUPLICATE \| UNAVAILABLE \| INVALID_QR \| INVALID_FILE \| QR_TAMPERED \| TOO_OLD \| SYSTEM_ERROR \| OTHER[]` | no |
| `request.from` | `string (date-time)` | no |
| `request.to` | `string (date-time)` | no |
| `request.columns` | `request_id \| outcome \| status \| checked_at \| channel \| api_key_id \| client_reference \| duplicate_of.request_id \| charge_confirmed \| charged \| free_reason \| slip.trans_ref \| slip.transferred_at \| slip.amount.satang \| slip.amount.currency \| slip.sender.bank.code \| slip.sender.bank.bot_code \| slip.sender.name_th \| slip.sender.name_en \| slip.sender.account \| slip.receiver.bank.code \| slip.receiver.bank.bot_code \| slip.receiver.name_th \| slip.receiver.name_en \| slip.receiver.account[]` | yes |
| `request.cursor` | `string` | no |
| `rows` | `integer \| null` | no |
| `truncated` | `boolean` | no |
| `truncated_after` | `object \| null` | no |
| `truncated_after.checked_at` | `string (date-time)` | yes |
| `truncated_after.request_id` | `string (uuid)` | yes |
| `continue_cursor` | `string \| null` | no |
| `expires_at` | `string (date-time) \| null` | no |
| `parts` | `object[]` | no |
| `parts[].part` | `integer` | yes |
| `parts[].rows` | `integer \| null` | no |
| `parts[].url` | `string (uri)` | yes |
| `parts[].url_expires_at` | `string (date-time)` | yes |

### 202 `application/json`

| Field | Type | Required |
| --- | --- | --- |
| `export_id` | `string (uuid)` | yes |
| `state` | `QUEUED \| RUNNING \| READY \| FAILED \| EXPIRED` | yes |
| `mode` | `DIRECT \| JOB` | no |
| `created_at` | `string (date-time)` | yes |
| `request` | `ExportRequest` | yes |
| `request.q` | `string` | no |
| `request.trans_ref` | `string` | no |
| `request.outcome` | `FOUND \| NOT_FOUND \| DUPLICATE \| PENDING \| UNAVAILABLE \| INVALID_QR \| INVALID_FILE \| QR_TAMPERED \| TOO_OLD[]` | no |
| `request.outcome_not` | `FOUND \| NOT_FOUND \| DUPLICATE \| PENDING \| UNAVAILABLE \| INVALID_QR \| INVALID_FILE \| QR_TAMPERED \| TOO_OLD[]` | no |
| `request.sender_bank` | `string` | no |
| `request.api_key` | `string` | no |
| `request.charged` | `true \| false \| unsettled[]` | no |
| `request.free_reason` | `NOT_FOUND \| DUPLICATE \| UNAVAILABLE \| INVALID_QR \| INVALID_FILE \| QR_TAMPERED \| TOO_OLD \| SYSTEM_ERROR \| OTHER[]` | no |
| `request.from` | `string (date-time)` | no |
| `request.to` | `string (date-time)` | no |
| `request.columns` | `request_id \| outcome \| status \| checked_at \| channel \| api_key_id \| client_reference \| duplicate_of.request_id \| charge_confirmed \| charged \| free_reason \| slip.trans_ref \| slip.transferred_at \| slip.amount.satang \| slip.amount.currency \| slip.sender.bank.code \| slip.sender.bank.bot_code \| slip.sender.name_th \| slip.sender.name_en \| slip.sender.account \| slip.receiver.bank.code \| slip.receiver.bank.bot_code \| slip.receiver.name_th \| slip.receiver.name_en \| slip.receiver.account[]` | yes |
| `request.cursor` | `string` | no |
| `rows` | `integer \| null` | no |
| `truncated` | `boolean` | no |
| `truncated_after` | `object \| null` | no |
| `truncated_after.checked_at` | `string (date-time)` | yes |
| `truncated_after.request_id` | `string (uuid)` | yes |
| `continue_cursor` | `string \| null` | no |
| `expires_at` | `string (date-time) \| null` | no |
| `parts` | `object[]` | no |
| `parts[].part` | `integer` | yes |
| `parts[].rows` | `integer \| null` | no |
| `parts[].url` | `string (uri)` | yes |
| `parts[].url_expires_at` | `string (date-time)` | yes |

### Possible errors

400 401 403 409 429

An error as Problem Details. All codes are listed at [Error codes](https://checkslip.com/en/docs/errors)

**cURL**

```bash
curl https://api.checkslip.com/api/slips/exports \
  -H "Authorization: Bearer $CHECKSLIP_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"q":"string","trans_ref":"630210534087","outcome":["FOUND"],"outcome_not":["FOUND"],"sender_bank":"string","api_key":"string","charged":["true"],"free_reason":["NOT_FOUND"],"from":"2026-11-05T09:30:00+07:00","to":"2026-11-05T09:30:00+07:00","columns":["request_id"],"cursor":"string"}'
```

**Node.js**

```javascript
const res = await fetch("https://api.checkslip.com/api/slips/exports", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.CHECKSLIP_API_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    q: "string",
    trans_ref: "630210534087",
    outcome: ["FOUND"],
    outcome_not: ["FOUND"],
    sender_bank: "string",
    api_key: "string",
    charged: ["true"],
    free_reason: ["NOT_FOUND"],
    from: "2026-11-05T09:30:00+07:00",
    to: "2026-11-05T09:30:00+07:00",
    columns: ["request_id"],
    cursor: "string",
  }),
});
const data = await res.json();
```

**Python**

```python
import os

import requests

res = requests.post(
    "https://api.checkslip.com/api/slips/exports",
    headers={
        "Authorization": f"Bearer {os.environ['CHECKSLIP_API_KEY']}",
    },
    json={
        "q": "string",
        "trans_ref": "630210534087",
        "outcome": ["FOUND"],
        "outcome_not": ["FOUND"],
        "sender_bank": "string",
        "api_key": "string",
        "charged": ["true"],
        "free_reason": ["NOT_FOUND"],
        "from": "2026-11-05T09:30:00+07:00",
        "to": "2026-11-05T09:30:00+07:00",
        "columns": ["request_id"],
        "cursor": "string",
    },
)
data = res.json()
```

**200**

```json
{
  "export_id": "0b6c2f5e-8a41-4d1e-9c3a-5f7e2d18a6b4",
  "state": "QUEUED",
  "mode": "DIRECT",
  "created_at": "2026-11-05T09:30:00+07:00",
  "request": {
    "q": "string",
    "trans_ref": "630210534087",
    "outcome": [
      "FOUND"
    ],
    "outcome_not": [
      "FOUND"
    ],
    "sender_bank": "string",
    "api_key": "string",
    "charged": [
      "true"
    ],
    "free_reason": [
      "NOT_FOUND"
    ],
    "from": "2026-11-05T09:30:00+07:00",
    "to": "2026-11-05T09:30:00+07:00",
    "columns": [
      "request_id"
    ],
    "cursor": "string"
  },
  "rows": 1,
  "truncated": true,
  "truncated_after": {
    "checked_at": "2026-11-05T09:30:00+07:00",
    "request_id": "0b6c2f5e-8a41-4d1e-9c3a-5f7e2d18a6b4"
  },
  "continue_cursor": "string",
  "expires_at": "2026-11-05T09:30:00+07:00",
  "parts": [
    {
      "part": 1,
      "rows": 1,
      "url": "https://example.com/hooks/checkslip",
      "url_expires_at": "2026-11-05T09:30:00+07:00"
    }
  ]
}
```

**202**

```json
{
  "export_id": "0b6c2f5e-8a41-4d1e-9c3a-5f7e2d18a6b4",
  "state": "QUEUED",
  "mode": "DIRECT",
  "created_at": "2026-11-05T09:30:00+07:00",
  "request": {
    "q": "string",
    "trans_ref": "630210534087",
    "outcome": [
      "FOUND"
    ],
    "outcome_not": [
      "FOUND"
    ],
    "sender_bank": "string",
    "api_key": "string",
    "charged": [
      "true"
    ],
    "free_reason": [
      "NOT_FOUND"
    ],
    "from": "2026-11-05T09:30:00+07:00",
    "to": "2026-11-05T09:30:00+07:00",
    "columns": [
      "request_id"
    ],
    "cursor": "string"
  },
  "rows": 1,
  "truncated": true,
  "truncated_after": {
    "checked_at": "2026-11-05T09:30:00+07:00",
    "request_id": "0b6c2f5e-8a41-4d1e-9c3a-5f7e2d18a6b4"
  },
  "continue_cursor": "string",
  "expires_at": "2026-11-05T09:30:00+07:00",
  "parts": [
    {
      "part": 1,
      "rows": 1,
      "url": "https://example.com/hooks/checkslip",
      "url_expires_at": "2026-11-05T09:30:00+07:00"
    }
  ]
}
```
