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

# FAQ

> Common integration questions — signatures, KYB, quote expiry, and environments.

For error codes, see [Error codes](/resources/errors). For terminology, see the [Glossary](/resources/glossary).

## Authentication and signatures

### Why do I get an invalid request signature?

The HMAC check failed. Verify each segment of the canonical string:

```
clientId|timestamp|METHOD|path|rawBody
```

| Check          | Common mistake                                              |
| -------------- | ----------------------------------------------------------- |
| Encryption key | Signing with `sk_*` instead of `enc_*`                      |
| Path           | Omitting `/v1` or the query string                          |
| Body           | Re-serializing JSON instead of signing the exact bytes sent |
| Timestamp      | Seconds instead of milliseconds, or clock skew              |
| Client ID      | Mismatch between header and canonical string                |

See [Authentication](/getting-started/authentication).

### Do I need a signature for read-only calls?

`pk_*` requests need `liquidramp-client-id` and `Authorization: Bearer pk_*` — no HMAC. You can also make the same reads with `sk_*` from your backend; those requests always require `liquidramp-timestamp` and `liquidramp-signature`.

### Why does my IP get blocked?

If an IP whitelist is configured on your partner profile, other IPs return `403` with `E_IP_BLOCKED`. Update the list in the [portal](https://dashboard.liquidramp.com).

## KYB and account access

### Why do I get "Business account verification is required"?

Quote and order writes require an approved KYB status. Complete KYB in the portal. Read-only routes (reference data, rate preview) do not require KYB.

### Can I use test keys before KYB approval?

Yes for read-only calls. Creating quotes and orders still requires approval.

### Do I need to KYC my users?

Yes for **onramp** and **offramp** — complete KYC on your end users, preferably through a KYC provider. Liquidramp requires this for regulatory compliance because those flows involve fiat. **Swap** does not require end-user KYC. Partner KYB in the portal does not replace customer KYC.

## Quotes and TTL

### How long is a quote valid?

Reserved quotes include `ttl_in_seconds` in the response. Create the order before it expires. Expired quotes return `404`.

Quote TTL (rate reservation) is separate from pay-in expiry (`payin.expires_at` on the order).

### Should I pass `quote_id` or inline legs?

Either works. `quote_id` locks the reserved rate. Inline `from`/`to` legs re-price at order time.

## Sandbox vs production

| Concern    | Test                              | Live                         |
| ---------- | --------------------------------- | ---------------------------- |
| Key prefix | `*_test_*`                        | `*_live_*`                   |
| API host   | `https://vibe-api.liquidramp.com` | `https://api.liquidramp.com` |
| Settlement | Test networks                     | Real funds                   |

Match base URL, keys, and `liquidramp-client-id` to the same deployment. Fetch networks and currencies at runtime.

## Common issues

* `POST /orders/:reference/fulfill` uses the **order** reference (`ORD-…`) and is optional — payment is auto-detected.
* Quote and order legs use `currency` (plus `network` on crypto legs).
* Verify webhooks against the **raw** request body.

## Related

* [Error handling](/guides/error-handling)
* [Going live](/getting-started/checklist)
* [API Reference](/api-reference)
