---
title: "Sample rate rows, no API key required"
method: GET
path: "/v1/demo/rates"
tags: ["Rates"]
---

# Sample rate rows, no API key required

`GET /v1/demo/rates`

## Request

- Base URL: `https://api.rateapi.dev`
- URL: `https://api.rateapi.dev/v1/demo/rates`
- Auth: none required

Returns a small fixed sample of rate rows in exactly the envelope GET /v1/rates uses, so you can confirm the response contract before writing any authentication code. Requires no API key and is the only /v1 route that does not.

**The rows are synthetic.** Every lender name is obviously fake, every row carries `demo: true`, and `as_of` is a frozen past date. Do not quote these figures to anyone — they are shape, not data. The live book is at GET /v1/rates, which needs a key; free keys are issued instantly by POST /keys with an email address.

## Response `200`

A fixed sample of synthetic rate rows, shaped like a /v1/rates response.

- object
  - `notice` string: Plain-language warning that this is sample data. Always present.
  - `demo` true: Always true. Its presence is how a client tells a demo response from a live one.
  - `docs` string, uri: Where to read the full documentation for the real endpoint this sample imitates.
  - `filters` object: Echoed filter set, matching the /v1/rates envelope. All null here, since this endpoint accepts no filters.
  - `pagination` object: Matches the /v1/rates envelope. `has_more` is always false — this is a fixed sample, not a page into a larger set.
  - `rates` object[]: Sample rows. Field-for-field identical to the rows GET /v1/rates returns, plus a `demo` flag.

## Other responses

- `500`: An unexpected failure on our side. The `traceId` in the body identifies the request in our logs — quote it when reporting. Safe to retry with backoff.

---

[API](https://skmtc.dev/rateapi/apis/rate-api.md) · [All operations](https://skmtc.dev/rateapi/apis/rate-api/llms.txt) · [OpenAPI document](https://skmtc.dev/rateapi/apis/rate-api/revisions/06a6db76995f?raw)
