ProLinksQR API
The ProLinksQR API is a REST API that lets you create and manage dynamic links, folders, QR templates, bulk link generation, and digital menus (Cafe) programmatically — the same resources you manage in the dashboard — and read scan analytics for your links.
This documentation covers the endpoints you can call with an API key. To get started:
- Create an API key in your dashboard and pick the scopes you need.
- Authenticate your requests with the
Authorizationheader. - Call the API Reference endpoints.
Base URL
All requests go to:
https://api.prolinksqr.com
The API has no versioned path prefix — resources are mounted at the root, so the links
collection is https://api.prolinksqr.com/links.
Request format
- Send and receive JSON. Set
Content-Type: application/jsonon requests with a body. - Authenticate every request — see Authentication.
Response format
Successful responses are wrapped in a JSON envelope. Most endpoints return a data
field; list endpoints also include a meta object with pagination info.
{
"data": { "name": "My link", "type": "website" },
"meta": { "currentPage": 1, "totalPages": 5 }
}
A few endpoints return a short confirmation instead, for example creating a link returns the new link's identifier:
{ "id": "summer-sale" }
Two exceptions to the envelope: creating a folder or a template returns the new
object directly, without a data wrapper — see the notes on those endpoints.
Errors
Errors return a non-2xx status and a JSON body with a message (or error) field.
{ "message": "You do not have permission to perform this action." }
Validation failures (400) additionally include a code and a per-field errors
array:
{
"message": "Validation failed: name is a required field",
"code": "VALIDATION_ERROR",
"errors": [{ "field": "name", "message": "name is a required field" }]
}
| Status | Meaning |
|---|---|
400 | Bad request — validation failed or the body is malformed. |
401 | Unauthorized — missing/invalid API key, or the key is inactive. |
403 | Forbidden — your API key does not include the required scope. |
404 | Not found — the resource does not exist or is not on your account. |
429 | API usage limit reached — your plan's API quota for the current billing cycle is exhausted. |
API usage limits
API usage is metered per account, based on your plan. Each plan includes an API request allowance, and every authenticated API call counts toward your account's usage for the current billing cycle.
When you reach your plan's allowance, requests return 429:
{ "message": "Account API Usage Limit Reached" }
The counter resets at the start of each billing cycle. To raise your allowance, upgrade your plan. Plans with an unlimited API allowance are never limited by the plan quota.
IP rate limit
Independently of plan quotas, all endpoints share an IP-based rate limit of
10,000 requests per hour. Responses include standard RateLimit-* headers so you
can track your remaining budget; exceeding the limit also returns 429.
Scopes at a glance
API keys are scoped. A request only succeeds if the key includes the scope required by
the endpoint (or the catch-all all scope). The available scopes are:
all, links.read, links.create, links.update, links.delete, links.pause,
links.resume, folders.read, folders.create, folders.update, folders.delete,
templates.read, templates.create, templates.update, templates.delete,
bulk.create, cafe.read, cafe.create, cafe.update, cafe.delete.
See Authentication for the full scope-to-endpoint mapping.