# GET /api/public/orders/{orderId}/receipts/{receiptId}

> Retrieve Order Receipts

If the order or the receipt is not found, the HTTP status 204 is returned.

- Surface: `/api/public` · operationId `getOrderReceipt` · Group: Order
- Authorisation: Token with scope `public:orders:read`
- Organisation key: needs the capabilities `orders:read` + `customers:read` on the clinic, all together
- The spec: https://developers.rivr.io/openapi/api-public.json
- The spec's introduction: https://developers.rivr.io/reference/api-public.md
- Page in the portal: https://developers.rivr.io/reference/api-public/getOrderReceipt

The examples target the sandbox (`https://api.test.rivr.io`) and need test credentials.

## Parameters

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `orderId` | path | string | yes | The identifier of the order. |
| `receiptId` | path | string | yes | The identifier of the receipt to retrieve. |

## Responses

### 200

OK

`application/json`

**Response fields**

| Field | Type | Description |
| --- | --- | --- |
| `id` | string (uuid) |  |
| `date` | string (date-time) |  |
| `paymentMethod` | PaymentMethodPublic | (Values: 0 = NotPaid, 1 = Card, 2 = Swish, 3 = Invoice, 4 = Instalment, 5 = Vipps, 6 = Trustly, 7 = Direct, 8 = Unknown) |
| `customerReceipt` | OrderReceiptLine[] | (nullable) |
| `customerReceipt[].key` | string |  |
| `customerReceipt[].value` | string |  |
| `customerReceipt[].name` | string |  |
| `cashierReceipt` | OrderReceiptLine[] | (nullable) |
| `cashierReceipt[].key` | string |  |
| `cashierReceipt[].value` | string |  |
| `cashierReceipt[].name` | string |  |
| `refundReceipt` | OrderReceiptLine[] | (nullable) |
| `refundReceipt[].key` | string |  |
| `refundReceipt[].value` | string |  |
| `refundReceipt[].name` | string |  |

**Example**

```json
{
  "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "date": "2026-10-18T09:00:00Z",
  "paymentMethod": 1,
  "customerReceipt": [
    {
      "key": "string",
      "value": "string",
      "name": "string"
    }
  ],
  "cashierReceipt": [
    {
      "key": "string",
      "value": "string",
      "name": "string"
    }
  ],
  "refundReceipt": [
    {
      "key": "string",
      "value": "string",
      "name": "string"
    }
  ]
}
```

### 204

The order or the receipt is not found.

### 400

The order id is not a UUID (`order_id_invalid`, `propertyName` `orderId`) or the receipt id is not a UUID
(`receipt_id_invalid`, `propertyName` `receiptId`).

Error codes: [order_id_invalid](https://developers.rivr.io/errors/order_id_invalid.md), [receipt_id_invalid](https://developers.rivr.io/errors/receipt_id_invalid.md)

`application/json`

```json
{
  "propertyName": "orderId",
  "message": "The orderId is not a valid Guid",
  "errorCode": "order_id_invalid",
  "code": "order_id_invalid",
  "type": "https://developers.rivr.io/errors/order_id_invalid"
}
```

### 401

The token is missing (`token_missing`), not valid (`token_invalid`), expired (`token_expired`) or could not be
checked (`authentication_unavailable`).

Error codes: [token_missing](https://developers.rivr.io/errors/token_missing.md), [token_invalid](https://developers.rivr.io/errors/token_invalid.md), [token_expired](https://developers.rivr.io/errors/token_expired.md), [authentication_unavailable](https://developers.rivr.io/errors/authentication_unavailable.md)

`application/json`

```json
{
  "title": "Unauthorized",
  "status": 401,
  "detail": "Invalid Authorization Header",
  "propertyName": null,
  "message": "The request has no valid Authorization header. Send the token in the Authorization header, after Bearer.",
  "errorCode": "token_missing",
  "code": "token_missing",
  "type": "https://developers.rivr.io/errors/token_missing"
}
```

### 403

The token lacks the scope (`invalid_scope`), is a rivr-auth token that is not a clinic token
(`clinic_token_required`), or the order belongs to another merchant on the same platform (`merchant_mismatch`). The
body also carries `error` and `error_description`, as before.

Error codes: [invalid_scope](https://developers.rivr.io/errors/invalid_scope.md), [clinic_token_required](https://developers.rivr.io/errors/clinic_token_required.md), [merchant_mismatch](https://developers.rivr.io/errors/merchant_mismatch.md)

`application/json`

```json
{
  "error": "invalid_scope",
  "error_description": "The scope(s) 'public:orders:read' is required.",
  "propertyName": null,
  "message": "The scope(s) 'public:orders:read' is required.",
  "errorCode": "invalid_scope",
  "code": "invalid_scope",
  "type": "https://developers.rivr.io/errors/invalid_scope"
}
```

### 500

Something unexpected failed: `internal_error`.

Error codes: [internal_error](https://developers.rivr.io/errors/internal_error.md)

`application/json`

```json
{
  "propertyName": null,
  "message": "Something unexpected failed at Rivr, and whether the request was carried out is not known. Check the order or what the request was about before you retry.",
  "errorCode": "internal_error",
  "code": "internal_error",
  "type": "https://developers.rivr.io/errors/internal_error"
}
```

## Example request

```bash
curl -X GET https://api.test.rivr.io/api/public/orders/da4316b7-e2f4-42b0-b0a8-1ed6c24f9738/receipts/3fa85f64-5717-4562-b3fc-2c963f66afa6 \
  -H "Authorization: Bearer $ACCESS_TOKEN"
```
