# List journal entries

`GET /v1/journal-entries`

Lists draft, booked and canceled entries, newest entry date first. For posted entries across a period as reports read them, use GET /v1/ledger-entries.

**Scopes:** any of `journal:read`, `read:ledger`

## Request

```bash
curl https://api.numina.app/v1/journal-entries \
  -H "Authorization: Bearer numi_YOUR_API_KEY"
```

## Query parameters

- `state` (string, optional): Only entries in this state. Omit for all. One of: `draft`, `booked`, `canceled`.
- `from_date` (string, optional): Earliest date (YYYY-MM-DD) (YYYY-MM-DD)
- `to_date` (string, optional): Latest date (YYYY-MM-DD) (YYYY-MM-DD)
- `contact_id` (string (uuid), optional): Only entries on this contact
- `external_reference` (string, optional): Only the entry with this `external_reference`, to find an entry again after a timeout (max 255 chars)
- `limit` (integer, optional): Maximum number of results (default 100, max 500) Default: `100`. (1–500)
- `offset` (integer, optional, nullable): Number of results to skip Default: `0`. (≥ 0)

## Response `200`

Journal entries

```json
{
  "journal_entries": [
    {
      "id": "550e8400-e29b-41d4-a716-446655440000",
      "date": "2026-01-15",
      "text": "Invoice payment from customer",
      "status": "open",
      "contact_id": "550e8400-e29b-41d4-a716-446655440000",
      "created_at": "2026-01-15T10:30:00Z",
      "external_reference": "payroll-run-2026-01",
      "lines": [
        {
          "id": "550e8400-e29b-41d4-a716-446655440000",
          "account_number": 3000,
          "account_id": "550e8400-e29b-41d4-a716-446655440001",
          "account_name": "Revenue",
          "amount": -1000,
          "text": "Invoice payment",
          "vat_code": "U25",
          "currency_code": "DKK",
          "currency_rate": 1
        }
      ],
      "state": "draft",
      "attachment": {
        "id": "550e8400-e29b-41d4-a716-446655440000",
        "file_name": "string",
        "status": "string",
        "attachment_number": 42
      }
    }
  ],
  "has_more": false,
  "next_offset": 0
}
```

## Errors

- `400` Bad Request - Invalid input or validation failed
- `401` Unauthorized - Invalid or missing authentication
- `403` Forbidden - Missing scope, or the company is archived
- `429` Too Many Requests - Rate limit exceeded
- `500` Internal Server Error

See https://developers.numina.app/errors.md for the error format.
