---
title: "API overview"
description: "Authentication, scopes, rate limits, and conventions for the INBIO REST API."
---

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

# API overview

The REST API lives at `https://in.bio/api/v1` and covers links, QR codes,
analytics, folders, tags, and account usage. API access is a plan feature
(**Pro** and **Business**).

:::tip
Just want to shorten a URL from code — no account, no key? Use the
[free shorten API](/api/free-shorten): one POST, 5 requests/minute, done.
:::

## Authentication

Create a token under **Settings → API tokens** — the plaintext token is shown
**once**. Send it as a bearer token:

```bash
curl https://in.bio/api/v1/links \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Accept: application/json"
```

### Scopes

A token only has the scopes selected at creation:

| Scope | Grants |
|---|---|
| `links:read` | List/read links, QR codes, folders, tags |
| `links:write` | Create, update, delete, enable/disable, bulk create |
| `analytics:read` | Per-link analytics |

A missing scope returns `403` with `error.type = "scope"` and the required
scope named.

## Rate limits

| Plan | Requests / minute |
|---|---|
| Pro | 60 |
| Business | 300 |

Standard `X-RateLimit-Limit` / `X-RateLimit-Remaining` headers are returned;
exceeding the limit returns `429` with `Retry-After`.

## Conventions

- Resources are wrapped in `{"data": ...}`; paginated lists add Laravel-style
  `links` and `meta` objects.
- Errors: `{"message": "...", "error": {"type": "..."}}` — types are `plan`
  (feature not on your plan, 403), `scope` (missing token scope, 403),
  `state` (invalid state transition, 409), `entitlement` (plan limit, 422),
  `account` (suspended).
- Validation failures are standard `422` with an `errors` object per field.
- Timestamps are ISO 8601; dates are `YYYY-MM-DD`.
- Requesting a link you don't own returns `404`, never `403`.

- **Free shorten** — One POST, no key — anonymous short links.
- **Links** — CRUD, bulk create, enable/disable, QR images.
- **Analytics** — Per-link series and breakdowns.
- **Folders, tags & usage** — Supporting resources and quota introspection.
- **Webhooks** — Signed event deliveries (Business).

Source: https://docs.in.bio/api/index.mdx
