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).
Authentication
Create a token under Settings → API tokens — the plaintext token is shown once. Send it as a bearer token:
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-stylelinksandmetaobjects. - Errors:
{"message": "...", "error": {"type": "..."}}— types areplan(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
422with anerrorsobject per field. - Timestamps are ISO 8601; dates are
YYYY-MM-DD. - Requesting a link you don’t own returns
404, never403.