# Verify a receipt

Source: https://immiscible.fly.dev/docs/api/post-v1-verify

`POST /v1/verify`

Check a receipt online. Free, with no account: built for merchants and payment providers. Online verification marks the receipt as seen, so a second check returns `"replayed": true`. To check offline instead, use the [JWKS](https://immiscible.fly.dev/docs/api/get-well-known-immiscible-keys-json.md) and [this verifier](https://immiscible.fly.dev/docs/security/verifying-offline.md#receipts).

## Authentication

Public. No credential. Public routes are rate limited per address. Rate limited per address. A merchant needs no account.

## Request

curl:

```bash
curl -X POST "https://immiscible.fly.dev/v1/verify" \
  -H "content-type: application/json" \
  -d '{
    "receipt": "eyJhbGciOiJFZERTQSIsImtpZCI6Imtf..."
  }'
```

Node:

```ts
import { verifyOnline } from '@immiscible/sdk/verify';

const result = await verifyOnline(receipt, { baseUrl: 'https://immiscible.fly.dev' });
console.log(result.valid, result.reason);
```

Python:

```python
from immiscible import verify_online

result = verify_online(receipt, "https://immiscible.fly.dev")
print(result.valid, result.reason)
```

## Response

```json
{
  "valid": true,
  "claims": { "sub": "agt_4f2c91a7", "act": "act_7Qm2c1f0", "typ": "payment", "amt": 4200, "cur": "GBP", "mer": "grocer.example", "hum": false },
  "reason": null
}
```
