Skip to main content

Authentication

Every API request must be authenticated with your API key. Pass the key in the Authorization header using the Basic scheme, with the key (including its key- prefix) as the credential:

Authorization: Basic key-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
note

Unlike standard HTTP Basic auth, you send the raw API key — not a base64-encoded user:password string. Just put Basic followed by your key-... value.

Example request

curl https://api.prolinksqr.com/links \
-H "Authorization: Basic key-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

For requests with a body, also set the content type:

curl -X POST https://api.prolinksqr.com/folders \
-H "Authorization: Basic key-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{ "name": "Campaigns" }'

Scopes and permissions

Each endpoint requires a specific scope. A request succeeds only if your key includes that scope (or the catch-all all scope). This table maps every API-key endpoint to its required scope:

Method & pathRequired scope
GET /links, GET /links/:idlinks.read
POST /linkslinks.create
PUT /links/:id, PATCH /links/:idlinks.update
POST /links/:id/favorite, DELETE /links/:id/favoritelinks.update
DELETE /links/:id, POST /links/:id/archivelinks.delete
POST /links/:id/pauselinks.pause
POST /links/:id/resumelinks.resume
POST /links/:id/duplicatelinks.create
POST /links/:id/save-templatetemplates.create
GET /links/:id/analytics/*, POST /links/:id/analytics/export— (any valid key)
GET /analytics/*, POST /analytics/export— (any valid key)
GET /folders, GET /folders/:idfolders.read
POST /foldersfolders.create
PUT /folders/:idfolders.update
DELETE /folders/:idfolders.delete
GET /templates, GET /templates/:idtemplates.read
POST /templatestemplates.create
PUT /templates/:idtemplates.update
DELETE /templates/:idtemplates.delete
POST /bulk-generatebulk.create
GET /cafes, GET /cafes/:id (and nested reads)cafe.read
POST /cafescafe.create
PUT /cafes/:id (and nested writes, incl. deleting categories and items)cafe.update
DELETE /cafes/:id, DELETE /cafes/:id/groups/:groupIdcafe.delete

Endpoints marked any valid key (the analytics endpoints) require authentication but no specific scope — every active key can call them.

Some endpoints also require your account to be on a specific plan (e.g. API key management itself is unavailable on the starter and enterprise plans). A plan-restricted request currently comes back as 401, not 403, even though the key itself is valid and correctly scoped — see the error table below.

Auth errors

StatusCause
401Missing Authorization header, malformed key, the key is inactive/deleted/expired, or your account's plan doesn't allow the endpoint.
403The key is valid but does not include the scope the endpoint requires.
{ "message": "You do not have permission to perform this action." }
note

An expired key (see Creating an API Key) is deactivated by a periodic background job, not instantly at the expiration timestamp — so a request may still briefly succeed with a key that has technically expired.

Keeping keys safe

  • Treat API keys like passwords. Never commit them to source control or expose them in client-side code.
  • Use a separate key per integration so you can revoke one without affecting others.
  • Rotate keys periodically: create a new key, switch your integration over, then delete the old one.