Skip to content

API reference

Version 1. Base URL https://toa.ee/api/v1. Download the OpenAPI document.

Account

GET/api/v1/me

Account snapshot — plan, live counts and API quota

Required scope: read

Response 200
PropertyTypeRequiredDescription
emailstringYes—
planfree | pro | max | ultraYes—
linksobjectYes—
liveintegerYes—
maxintegerYes—
digital_business_cardsobjectYes—
liveintegerYes—
maxintegerYes—
api_keysobjectYes—
liveintegerYes—
maxintegerYes—
api_requestsobjectYes—
usedintegerYes—
limitintegerYes—
per_minuteintegerYes—
resets_onstringYes—
Response 400
PropertyTypeRequiredDescription
errorobjectYes—
codebad_request | unauthorized | key_over_limit | insufficient_scope | limit_reached | not_found | slug_taken | delete_too_soon | in_plan_grace | idempotency_conflict | idempotency_in_progress | qr_unavailable | validation_error | unsafe_destination | rate_limited | quota_exceeded | internalYes—
messagestringYes—
fieldstringNo—
docsstring (uri)Yes—
Response 401
PropertyTypeRequiredDescription
errorobjectYes—
codebad_request | unauthorized | key_over_limit | insufficient_scope | limit_reached | not_found | slug_taken | delete_too_soon | in_plan_grace | idempotency_conflict | idempotency_in_progress | qr_unavailable | validation_error | unsafe_destination | rate_limited | quota_exceeded | internalYes—
messagestringYes—
fieldstringNo—
docsstring (uri)Yes—
Response 403
PropertyTypeRequiredDescription
errorobjectYes—
codebad_request | unauthorized | key_over_limit | insufficient_scope | limit_reached | not_found | slug_taken | delete_too_soon | in_plan_grace | idempotency_conflict | idempotency_in_progress | qr_unavailable | validation_error | unsafe_destination | rate_limited | quota_exceeded | internalYes—
messagestringYes—
fieldstringNo—
docsstring (uri)Yes—
Response 404
PropertyTypeRequiredDescription
errorobjectYes—
codebad_request | unauthorized | key_over_limit | insufficient_scope | limit_reached | not_found | slug_taken | delete_too_soon | in_plan_grace | idempotency_conflict | idempotency_in_progress | qr_unavailable | validation_error | unsafe_destination | rate_limited | quota_exceeded | internalYes—
messagestringYes—
fieldstringNo—
docsstring (uri)Yes—
Response 409
PropertyTypeRequiredDescription
errorobjectYes—
codebad_request | unauthorized | key_over_limit | insufficient_scope | limit_reached | not_found | slug_taken | delete_too_soon | in_plan_grace | idempotency_conflict | idempotency_in_progress | qr_unavailable | validation_error | unsafe_destination | rate_limited | quota_exceeded | internalYes—
messagestringYes—
fieldstringNo—
docsstring (uri)Yes—
Response 422
PropertyTypeRequiredDescription
errorobjectYes—
codebad_request | unauthorized | key_over_limit | insufficient_scope | limit_reached | not_found | slug_taken | delete_too_soon | in_plan_grace | idempotency_conflict | idempotency_in_progress | qr_unavailable | validation_error | unsafe_destination | rate_limited | quota_exceeded | internalYes—
messagestringYes—
fieldstringNo—
docsstring (uri)Yes—
Response 429
PropertyTypeRequiredDescription
errorobjectYes—
codebad_request | unauthorized | key_over_limit | insufficient_scope | limit_reached | not_found | slug_taken | delete_too_soon | in_plan_grace | idempotency_conflict | idempotency_in_progress | qr_unavailable | validation_error | unsafe_destination | rate_limited | quota_exceeded | internalYes—
messagestringYes—
fieldstringNo—
docsstring (uri)Yes—
Response 500
PropertyTypeRequiredDescription
errorobjectYes—
codebad_request | unauthorized | key_over_limit | insufficient_scope | limit_reached | not_found | slug_taken | delete_too_soon | in_plan_grace | idempotency_conflict | idempotency_in_progress | qr_unavailable | validation_error | unsafe_destination | rate_limited | quota_exceeded | internalYes—
messagestringYes—
fieldstringNo—
docsstring (uri)Yes—
Example
{
  "email": "you@example.com",
  "plan": "pro",
  "links": {
    "live": 12,
    "max": 150
  },
  "cards": {
    "live": 2,
    "max": 150
  },
  "api_keys": {
    "live": 1,
    "max": 3
  },
  "quota": {
    "used": 420,
    "limit": 10000,
    "reset_on": "2026-12-01"
  }
}

Stats

GET/api/v1/links/{id}/stats

Click stats for a short link

Required scope: read

Parameters
NameInTypeRequiredDescription
idpathstringYes—
rangequery48h | 7d | 30d | allYes—
fromquerystringNo—
toquerystringNo—
Response 200
PropertyTypeRequiredDescription
rangeobjectYes—
fromstringYes—
tostringYes—
granularityhour | dayYes—
totalsobjectYes—
clicksintegerYes—
unique_visitorsintegerYes—
bot_clicksintegerYes—
seriesobject[]Yes—
tstringYes—
clicksintegerYes—
unique_visitorsintegerYes—
topobjectYes—
referrersobject[]Yes—
namestringYes—
countintegerYes—
countriesobject[]Yes—
namestringYes—
countintegerYes—
devicesobject[]Yes—
namestringYes—
countintegerYes—
browsersobject[]Yes—
namestringYes—
countintegerYes—
Response 400
PropertyTypeRequiredDescription
errorobjectYes—
codebad_request | unauthorized | key_over_limit | insufficient_scope | limit_reached | not_found | slug_taken | delete_too_soon | in_plan_grace | idempotency_conflict | idempotency_in_progress | qr_unavailable | validation_error | unsafe_destination | rate_limited | quota_exceeded | internalYes—
messagestringYes—
fieldstringNo—
docsstring (uri)Yes—
Response 401
PropertyTypeRequiredDescription
errorobjectYes—
codebad_request | unauthorized | key_over_limit | insufficient_scope | limit_reached | not_found | slug_taken | delete_too_soon | in_plan_grace | idempotency_conflict | idempotency_in_progress | qr_unavailable | validation_error | unsafe_destination | rate_limited | quota_exceeded | internalYes—
messagestringYes—
fieldstringNo—
docsstring (uri)Yes—
Response 403
PropertyTypeRequiredDescription
errorobjectYes—
codebad_request | unauthorized | key_over_limit | insufficient_scope | limit_reached | not_found | slug_taken | delete_too_soon | in_plan_grace | idempotency_conflict | idempotency_in_progress | qr_unavailable | validation_error | unsafe_destination | rate_limited | quota_exceeded | internalYes—
messagestringYes—
fieldstringNo—
docsstring (uri)Yes—
Response 404
PropertyTypeRequiredDescription
errorobjectYes—
codebad_request | unauthorized | key_over_limit | insufficient_scope | limit_reached | not_found | slug_taken | delete_too_soon | in_plan_grace | idempotency_conflict | idempotency_in_progress | qr_unavailable | validation_error | unsafe_destination | rate_limited | quota_exceeded | internalYes—
messagestringYes—
fieldstringNo—
docsstring (uri)Yes—
Response 409
PropertyTypeRequiredDescription
errorobjectYes—
codebad_request | unauthorized | key_over_limit | insufficient_scope | limit_reached | not_found | slug_taken | delete_too_soon | in_plan_grace | idempotency_conflict | idempotency_in_progress | qr_unavailable | validation_error | unsafe_destination | rate_limited | quota_exceeded | internalYes—
messagestringYes—
fieldstringNo—
docsstring (uri)Yes—
Response 422
PropertyTypeRequiredDescription
errorobjectYes—
codebad_request | unauthorized | key_over_limit | insufficient_scope | limit_reached | not_found | slug_taken | delete_too_soon | in_plan_grace | idempotency_conflict | idempotency_in_progress | qr_unavailable | validation_error | unsafe_destination | rate_limited | quota_exceeded | internalYes—
messagestringYes—
fieldstringNo—
docsstring (uri)Yes—
Response 429
PropertyTypeRequiredDescription
errorobjectYes—
codebad_request | unauthorized | key_over_limit | insufficient_scope | limit_reached | not_found | slug_taken | delete_too_soon | in_plan_grace | idempotency_conflict | idempotency_in_progress | qr_unavailable | validation_error | unsafe_destination | rate_limited | quota_exceeded | internalYes—
messagestringYes—
fieldstringNo—
docsstring (uri)Yes—
Response 500
PropertyTypeRequiredDescription
errorobjectYes—
codebad_request | unauthorized | key_over_limit | insufficient_scope | limit_reached | not_found | slug_taken | delete_too_soon | in_plan_grace | idempotency_conflict | idempotency_in_progress | qr_unavailable | validation_error | unsafe_destination | rate_limited | quota_exceeded | internalYes—
messagestringYes—
fieldstringNo—
docsstring (uri)Yes—
GET/api/v1/cards/{id}/stats

View and tap stats for a digital business card

Required scope: read

Parameters
NameInTypeRequiredDescription
idpathstringYes—
rangequery48h | 7d | 30d | allYes—
fromquerystringNo—
toquerystringNo—
Response 200
PropertyTypeRequiredDescription
rangeobjectYes—
fromstringYes—
tostringYes—
granularityhour | dayYes—
totalsobjectYes—
viewsintegerYes—
unique_visitorsintegerYes—
savesintegerYes—
seriesobject[]Yes—
tstringYes—
viewsintegerYes—
tapsobject[]Yes—
fieldstringYes—
countintegerYes—
topobjectYes—
countriesobject[]Yes—
namestringYes—
countintegerYes—
devicesobject[]Yes—
namestringYes—
countintegerYes—
referrersobject[]Yes—
namestringYes—
countintegerYes—
Response 400
PropertyTypeRequiredDescription
errorobjectYes—
codebad_request | unauthorized | key_over_limit | insufficient_scope | limit_reached | not_found | slug_taken | delete_too_soon | in_plan_grace | idempotency_conflict | idempotency_in_progress | qr_unavailable | validation_error | unsafe_destination | rate_limited | quota_exceeded | internalYes—
messagestringYes—
fieldstringNo—
docsstring (uri)Yes—
Response 401
PropertyTypeRequiredDescription
errorobjectYes—
codebad_request | unauthorized | key_over_limit | insufficient_scope | limit_reached | not_found | slug_taken | delete_too_soon | in_plan_grace | idempotency_conflict | idempotency_in_progress | qr_unavailable | validation_error | unsafe_destination | rate_limited | quota_exceeded | internalYes—
messagestringYes—
fieldstringNo—
docsstring (uri)Yes—
Response 403
PropertyTypeRequiredDescription
errorobjectYes—
codebad_request | unauthorized | key_over_limit | insufficient_scope | limit_reached | not_found | slug_taken | delete_too_soon | in_plan_grace | idempotency_conflict | idempotency_in_progress | qr_unavailable | validation_error | unsafe_destination | rate_limited | quota_exceeded | internalYes—
messagestringYes—
fieldstringNo—
docsstring (uri)Yes—
Response 404
PropertyTypeRequiredDescription
errorobjectYes—
codebad_request | unauthorized | key_over_limit | insufficient_scope | limit_reached | not_found | slug_taken | delete_too_soon | in_plan_grace | idempotency_conflict | idempotency_in_progress | qr_unavailable | validation_error | unsafe_destination | rate_limited | quota_exceeded | internalYes—
messagestringYes—
fieldstringNo—
docsstring (uri)Yes—
Response 409
PropertyTypeRequiredDescription
errorobjectYes—
codebad_request | unauthorized | key_over_limit | insufficient_scope | limit_reached | not_found | slug_taken | delete_too_soon | in_plan_grace | idempotency_conflict | idempotency_in_progress | qr_unavailable | validation_error | unsafe_destination | rate_limited | quota_exceeded | internalYes—
messagestringYes—
fieldstringNo—
docsstring (uri)Yes—
Response 422
PropertyTypeRequiredDescription
errorobjectYes—
codebad_request | unauthorized | key_over_limit | insufficient_scope | limit_reached | not_found | slug_taken | delete_too_soon | in_plan_grace | idempotency_conflict | idempotency_in_progress | qr_unavailable | validation_error | unsafe_destination | rate_limited | quota_exceeded | internalYes—
messagestringYes—
fieldstringNo—
docsstring (uri)Yes—
Response 429
PropertyTypeRequiredDescription
errorobjectYes—
codebad_request | unauthorized | key_over_limit | insufficient_scope | limit_reached | not_found | slug_taken | delete_too_soon | in_plan_grace | idempotency_conflict | idempotency_in_progress | qr_unavailable | validation_error | unsafe_destination | rate_limited | quota_exceeded | internalYes—
messagestringYes—
fieldstringNo—
docsstring (uri)Yes—
Response 500
PropertyTypeRequiredDescription
errorobjectYes—
codebad_request | unauthorized | key_over_limit | insufficient_scope | limit_reached | not_found | slug_taken | delete_too_soon | in_plan_grace | idempotency_conflict | idempotency_in_progress | qr_unavailable | validation_error | unsafe_destination | rate_limited | quota_exceeded | internalYes—
messagestringYes—
fieldstringNo—
docsstring (uri)Yes—
GET/api/v1/compare

Compare click stats across short links and digital business cards

Required scope: read

Parameters
NameInTypeRequiredDescription
idsquerystringYes—
rangequery48h | 7d | 30d | allYes—
Response 200
PropertyTypeRequiredDescription
rangeobjectYes—
fromstringYes—
tostringYes—
granularityhour | dayYes—
itemsobject[]Yes—
idstringYes—
kindlink | cardYes—
slugstringYes—
totalsobjectYes—
seriesobject[]Yes—
Response 400
PropertyTypeRequiredDescription
errorobjectYes—
codebad_request | unauthorized | key_over_limit | insufficient_scope | limit_reached | not_found | slug_taken | delete_too_soon | in_plan_grace | idempotency_conflict | idempotency_in_progress | qr_unavailable | validation_error | unsafe_destination | rate_limited | quota_exceeded | internalYes—
messagestringYes—
fieldstringNo—
docsstring (uri)Yes—
Response 401
PropertyTypeRequiredDescription
errorobjectYes—
codebad_request | unauthorized | key_over_limit | insufficient_scope | limit_reached | not_found | slug_taken | delete_too_soon | in_plan_grace | idempotency_conflict | idempotency_in_progress | qr_unavailable | validation_error | unsafe_destination | rate_limited | quota_exceeded | internalYes—
messagestringYes—
fieldstringNo—
docsstring (uri)Yes—
Response 403
PropertyTypeRequiredDescription
errorobjectYes—
codebad_request | unauthorized | key_over_limit | insufficient_scope | limit_reached | not_found | slug_taken | delete_too_soon | in_plan_grace | idempotency_conflict | idempotency_in_progress | qr_unavailable | validation_error | unsafe_destination | rate_limited | quota_exceeded | internalYes—
messagestringYes—
fieldstringNo—
docsstring (uri)Yes—
Response 404
PropertyTypeRequiredDescription
errorobjectYes—
codebad_request | unauthorized | key_over_limit | insufficient_scope | limit_reached | not_found | slug_taken | delete_too_soon | in_plan_grace | idempotency_conflict | idempotency_in_progress | qr_unavailable | validation_error | unsafe_destination | rate_limited | quota_exceeded | internalYes—
messagestringYes—
fieldstringNo—
docsstring (uri)Yes—
Response 409
PropertyTypeRequiredDescription
errorobjectYes—
codebad_request | unauthorized | key_over_limit | insufficient_scope | limit_reached | not_found | slug_taken | delete_too_soon | in_plan_grace | idempotency_conflict | idempotency_in_progress | qr_unavailable | validation_error | unsafe_destination | rate_limited | quota_exceeded | internalYes—
messagestringYes—
fieldstringNo—
docsstring (uri)Yes—
Response 422
PropertyTypeRequiredDescription
errorobjectYes—
codebad_request | unauthorized | key_over_limit | insufficient_scope | limit_reached | not_found | slug_taken | delete_too_soon | in_plan_grace | idempotency_conflict | idempotency_in_progress | qr_unavailable | validation_error | unsafe_destination | rate_limited | quota_exceeded | internalYes—
messagestringYes—
fieldstringNo—
docsstring (uri)Yes—
Response 429
PropertyTypeRequiredDescription
errorobjectYes—
codebad_request | unauthorized | key_over_limit | insufficient_scope | limit_reached | not_found | slug_taken | delete_too_soon | in_plan_grace | idempotency_conflict | idempotency_in_progress | qr_unavailable | validation_error | unsafe_destination | rate_limited | quota_exceeded | internalYes—
messagestringYes—
fieldstringNo—
docsstring (uri)Yes—
Response 500
PropertyTypeRequiredDescription
errorobjectYes—
codebad_request | unauthorized | key_over_limit | insufficient_scope | limit_reached | not_found | slug_taken | delete_too_soon | in_plan_grace | idempotency_conflict | idempotency_in_progress | qr_unavailable | validation_error | unsafe_destination | rate_limited | quota_exceeded | internalYes—
messagestringYes—
fieldstringNo—
docsstring (uri)Yes—

Digital business cards

GET/api/v1/cards

List digital business cards

Required scope: read

Parameters
NameInTypeRequiredDescription
sortquerycreatedNo—
limitqueryintegerYes—
cursorquerystringNo—
Response 200
PropertyTypeRequiredDescription
dataobject[]Yes—
idstringYes—
slugstringYes—
short_urlstring (uri)Yes—
display_namestringYes—
statusactive | paused | disabled | flaggedYes—
dashboard_urlstring (uri)Yes—
created_atstringYes—
updated_atstringYes—
next_cursorstring | nullYes—
Response 400
PropertyTypeRequiredDescription
errorobjectYes—
codebad_request | unauthorized | key_over_limit | insufficient_scope | limit_reached | not_found | slug_taken | delete_too_soon | in_plan_grace | idempotency_conflict | idempotency_in_progress | qr_unavailable | validation_error | unsafe_destination | rate_limited | quota_exceeded | internalYes—
messagestringYes—
fieldstringNo—
docsstring (uri)Yes—
Response 401
PropertyTypeRequiredDescription
errorobjectYes—
codebad_request | unauthorized | key_over_limit | insufficient_scope | limit_reached | not_found | slug_taken | delete_too_soon | in_plan_grace | idempotency_conflict | idempotency_in_progress | qr_unavailable | validation_error | unsafe_destination | rate_limited | quota_exceeded | internalYes—
messagestringYes—
fieldstringNo—
docsstring (uri)Yes—
Response 403
PropertyTypeRequiredDescription
errorobjectYes—
codebad_request | unauthorized | key_over_limit | insufficient_scope | limit_reached | not_found | slug_taken | delete_too_soon | in_plan_grace | idempotency_conflict | idempotency_in_progress | qr_unavailable | validation_error | unsafe_destination | rate_limited | quota_exceeded | internalYes—
messagestringYes—
fieldstringNo—
docsstring (uri)Yes—
Response 404
PropertyTypeRequiredDescription
errorobjectYes—
codebad_request | unauthorized | key_over_limit | insufficient_scope | limit_reached | not_found | slug_taken | delete_too_soon | in_plan_grace | idempotency_conflict | idempotency_in_progress | qr_unavailable | validation_error | unsafe_destination | rate_limited | quota_exceeded | internalYes—
messagestringYes—
fieldstringNo—
docsstring (uri)Yes—
Response 409
PropertyTypeRequiredDescription
errorobjectYes—
codebad_request | unauthorized | key_over_limit | insufficient_scope | limit_reached | not_found | slug_taken | delete_too_soon | in_plan_grace | idempotency_conflict | idempotency_in_progress | qr_unavailable | validation_error | unsafe_destination | rate_limited | quota_exceeded | internalYes—
messagestringYes—
fieldstringNo—
docsstring (uri)Yes—
Response 422
PropertyTypeRequiredDescription
errorobjectYes—
codebad_request | unauthorized | key_over_limit | insufficient_scope | limit_reached | not_found | slug_taken | delete_too_soon | in_plan_grace | idempotency_conflict | idempotency_in_progress | qr_unavailable | validation_error | unsafe_destination | rate_limited | quota_exceeded | internalYes—
messagestringYes—
fieldstringNo—
docsstring (uri)Yes—
Response 429
PropertyTypeRequiredDescription
errorobjectYes—
codebad_request | unauthorized | key_over_limit | insufficient_scope | limit_reached | not_found | slug_taken | delete_too_soon | in_plan_grace | idempotency_conflict | idempotency_in_progress | qr_unavailable | validation_error | unsafe_destination | rate_limited | quota_exceeded | internalYes—
messagestringYes—
fieldstringNo—
docsstring (uri)Yes—
Response 500
PropertyTypeRequiredDescription
errorobjectYes—
codebad_request | unauthorized | key_over_limit | insufficient_scope | limit_reached | not_found | slug_taken | delete_too_soon | in_plan_grace | idempotency_conflict | idempotency_in_progress | qr_unavailable | validation_error | unsafe_destination | rate_limited | quota_exceeded | internalYes—
messagestringYes—
fieldstringNo—
docsstring (uri)Yes—
GET/api/v1/cards/{id}

Get a digital business card summary

Required scope: read

Parameters
NameInTypeRequiredDescription
idpathstringYes—
Response 200
PropertyTypeRequiredDescription
idstringYes—
slugstringYes—
short_urlstring (uri)Yes—
display_namestringYes—
statusactive | paused | disabled | flaggedYes—
dashboard_urlstring (uri)Yes—
created_atstringYes—
updated_atstringYes—
Response 400
PropertyTypeRequiredDescription
errorobjectYes—
codebad_request | unauthorized | key_over_limit | insufficient_scope | limit_reached | not_found | slug_taken | delete_too_soon | in_plan_grace | idempotency_conflict | idempotency_in_progress | qr_unavailable | validation_error | unsafe_destination | rate_limited | quota_exceeded | internalYes—
messagestringYes—
fieldstringNo—
docsstring (uri)Yes—
Response 401
PropertyTypeRequiredDescription
errorobjectYes—
codebad_request | unauthorized | key_over_limit | insufficient_scope | limit_reached | not_found | slug_taken | delete_too_soon | in_plan_grace | idempotency_conflict | idempotency_in_progress | qr_unavailable | validation_error | unsafe_destination | rate_limited | quota_exceeded | internalYes—
messagestringYes—
fieldstringNo—
docsstring (uri)Yes—
Response 403
PropertyTypeRequiredDescription
errorobjectYes—
codebad_request | unauthorized | key_over_limit | insufficient_scope | limit_reached | not_found | slug_taken | delete_too_soon | in_plan_grace | idempotency_conflict | idempotency_in_progress | qr_unavailable | validation_error | unsafe_destination | rate_limited | quota_exceeded | internalYes—
messagestringYes—
fieldstringNo—
docsstring (uri)Yes—
Response 404
PropertyTypeRequiredDescription
errorobjectYes—
codebad_request | unauthorized | key_over_limit | insufficient_scope | limit_reached | not_found | slug_taken | delete_too_soon | in_plan_grace | idempotency_conflict | idempotency_in_progress | qr_unavailable | validation_error | unsafe_destination | rate_limited | quota_exceeded | internalYes—
messagestringYes—
fieldstringNo—
docsstring (uri)Yes—
Response 409
PropertyTypeRequiredDescription
errorobjectYes—
codebad_request | unauthorized | key_over_limit | insufficient_scope | limit_reached | not_found | slug_taken | delete_too_soon | in_plan_grace | idempotency_conflict | idempotency_in_progress | qr_unavailable | validation_error | unsafe_destination | rate_limited | quota_exceeded | internalYes—
messagestringYes—
fieldstringNo—
docsstring (uri)Yes—
Response 422
PropertyTypeRequiredDescription
errorobjectYes—
codebad_request | unauthorized | key_over_limit | insufficient_scope | limit_reached | not_found | slug_taken | delete_too_soon | in_plan_grace | idempotency_conflict | idempotency_in_progress | qr_unavailable | validation_error | unsafe_destination | rate_limited | quota_exceeded | internalYes—
messagestringYes—
fieldstringNo—
docsstring (uri)Yes—
Response 429
PropertyTypeRequiredDescription
errorobjectYes—
codebad_request | unauthorized | key_over_limit | insufficient_scope | limit_reached | not_found | slug_taken | delete_too_soon | in_plan_grace | idempotency_conflict | idempotency_in_progress | qr_unavailable | validation_error | unsafe_destination | rate_limited | quota_exceeded | internalYes—
messagestringYes—
fieldstringNo—
docsstring (uri)Yes—
Response 500
PropertyTypeRequiredDescription
errorobjectYes—
codebad_request | unauthorized | key_over_limit | insufficient_scope | limit_reached | not_found | slug_taken | delete_too_soon | in_plan_grace | idempotency_conflict | idempotency_in_progress | qr_unavailable | validation_error | unsafe_destination | rate_limited | quota_exceeded | internalYes—
messagestringYes—
fieldstringNo—
docsstring (uri)Yes—

QR codes

GET/api/v1/links/{id}/qr

Download a QR code for a short link

Required scope: read

Parameters
NameInTypeRequiredDescription
idpathstringYes—
formatquerypng | svg | pdfYes—
Response 200
Response 400
PropertyTypeRequiredDescription
errorobjectYes—
codebad_request | unauthorized | key_over_limit | insufficient_scope | limit_reached | not_found | slug_taken | delete_too_soon | in_plan_grace | idempotency_conflict | idempotency_in_progress | qr_unavailable | validation_error | unsafe_destination | rate_limited | quota_exceeded | internalYes—
messagestringYes—
fieldstringNo—
docsstring (uri)Yes—
Response 401
PropertyTypeRequiredDescription
errorobjectYes—
codebad_request | unauthorized | key_over_limit | insufficient_scope | limit_reached | not_found | slug_taken | delete_too_soon | in_plan_grace | idempotency_conflict | idempotency_in_progress | qr_unavailable | validation_error | unsafe_destination | rate_limited | quota_exceeded | internalYes—
messagestringYes—
fieldstringNo—
docsstring (uri)Yes—
Response 403
PropertyTypeRequiredDescription
errorobjectYes—
codebad_request | unauthorized | key_over_limit | insufficient_scope | limit_reached | not_found | slug_taken | delete_too_soon | in_plan_grace | idempotency_conflict | idempotency_in_progress | qr_unavailable | validation_error | unsafe_destination | rate_limited | quota_exceeded | internalYes—
messagestringYes—
fieldstringNo—
docsstring (uri)Yes—
Response 404
PropertyTypeRequiredDescription
errorobjectYes—
codebad_request | unauthorized | key_over_limit | insufficient_scope | limit_reached | not_found | slug_taken | delete_too_soon | in_plan_grace | idempotency_conflict | idempotency_in_progress | qr_unavailable | validation_error | unsafe_destination | rate_limited | quota_exceeded | internalYes—
messagestringYes—
fieldstringNo—
docsstring (uri)Yes—
Response 409
PropertyTypeRequiredDescription
errorobjectYes—
codebad_request | unauthorized | key_over_limit | insufficient_scope | limit_reached | not_found | slug_taken | delete_too_soon | in_plan_grace | idempotency_conflict | idempotency_in_progress | qr_unavailable | validation_error | unsafe_destination | rate_limited | quota_exceeded | internalYes—
messagestringYes—
fieldstringNo—
docsstring (uri)Yes—
Response 422
PropertyTypeRequiredDescription
errorobjectYes—
codebad_request | unauthorized | key_over_limit | insufficient_scope | limit_reached | not_found | slug_taken | delete_too_soon | in_plan_grace | idempotency_conflict | idempotency_in_progress | qr_unavailable | validation_error | unsafe_destination | rate_limited | quota_exceeded | internalYes—
messagestringYes—
fieldstringNo—
docsstring (uri)Yes—
Response 429
PropertyTypeRequiredDescription
errorobjectYes—
codebad_request | unauthorized | key_over_limit | insufficient_scope | limit_reached | not_found | slug_taken | delete_too_soon | in_plan_grace | idempotency_conflict | idempotency_in_progress | qr_unavailable | validation_error | unsafe_destination | rate_limited | quota_exceeded | internalYes—
messagestringYes—
fieldstringNo—
docsstring (uri)Yes—
Response 500
PropertyTypeRequiredDescription
errorobjectYes—
codebad_request | unauthorized | key_over_limit | insufficient_scope | limit_reached | not_found | slug_taken | delete_too_soon | in_plan_grace | idempotency_conflict | idempotency_in_progress | qr_unavailable | validation_error | unsafe_destination | rate_limited | quota_exceeded | internalYes—
messagestringYes—
fieldstringNo—
docsstring (uri)Yes—
GET/api/v1/cards/{id}/qr

Download a QR code for a digital business card

Required scope: read

Parameters
NameInTypeRequiredDescription
idpathstringYes—
formatquerypng | svg | pdfYes—
Response 200
Response 400
PropertyTypeRequiredDescription
errorobjectYes—
codebad_request | unauthorized | key_over_limit | insufficient_scope | limit_reached | not_found | slug_taken | delete_too_soon | in_plan_grace | idempotency_conflict | idempotency_in_progress | qr_unavailable | validation_error | unsafe_destination | rate_limited | quota_exceeded | internalYes—
messagestringYes—
fieldstringNo—
docsstring (uri)Yes—
Response 401
PropertyTypeRequiredDescription
errorobjectYes—
codebad_request | unauthorized | key_over_limit | insufficient_scope | limit_reached | not_found | slug_taken | delete_too_soon | in_plan_grace | idempotency_conflict | idempotency_in_progress | qr_unavailable | validation_error | unsafe_destination | rate_limited | quota_exceeded | internalYes—
messagestringYes—
fieldstringNo—
docsstring (uri)Yes—
Response 403
PropertyTypeRequiredDescription
errorobjectYes—
codebad_request | unauthorized | key_over_limit | insufficient_scope | limit_reached | not_found | slug_taken | delete_too_soon | in_plan_grace | idempotency_conflict | idempotency_in_progress | qr_unavailable | validation_error | unsafe_destination | rate_limited | quota_exceeded | internalYes—
messagestringYes—
fieldstringNo—
docsstring (uri)Yes—
Response 404
PropertyTypeRequiredDescription
errorobjectYes—
codebad_request | unauthorized | key_over_limit | insufficient_scope | limit_reached | not_found | slug_taken | delete_too_soon | in_plan_grace | idempotency_conflict | idempotency_in_progress | qr_unavailable | validation_error | unsafe_destination | rate_limited | quota_exceeded | internalYes—
messagestringYes—
fieldstringNo—
docsstring (uri)Yes—
Response 409
PropertyTypeRequiredDescription
errorobjectYes—
codebad_request | unauthorized | key_over_limit | insufficient_scope | limit_reached | not_found | slug_taken | delete_too_soon | in_plan_grace | idempotency_conflict | idempotency_in_progress | qr_unavailable | validation_error | unsafe_destination | rate_limited | quota_exceeded | internalYes—
messagestringYes—
fieldstringNo—
docsstring (uri)Yes—
Response 422
PropertyTypeRequiredDescription
errorobjectYes—
codebad_request | unauthorized | key_over_limit | insufficient_scope | limit_reached | not_found | slug_taken | delete_too_soon | in_plan_grace | idempotency_conflict | idempotency_in_progress | qr_unavailable | validation_error | unsafe_destination | rate_limited | quota_exceeded | internalYes—
messagestringYes—
fieldstringNo—
docsstring (uri)Yes—
Response 429
PropertyTypeRequiredDescription
errorobjectYes—
codebad_request | unauthorized | key_over_limit | insufficient_scope | limit_reached | not_found | slug_taken | delete_too_soon | in_plan_grace | idempotency_conflict | idempotency_in_progress | qr_unavailable | validation_error | unsafe_destination | rate_limited | quota_exceeded | internalYes—
messagestringYes—
fieldstringNo—
docsstring (uri)Yes—
Response 500
PropertyTypeRequiredDescription
errorobjectYes—
codebad_request | unauthorized | key_over_limit | insufficient_scope | limit_reached | not_found | slug_taken | delete_too_soon | in_plan_grace | idempotency_conflict | idempotency_in_progress | qr_unavailable | validation_error | unsafe_destination | rate_limited | quota_exceeded | internalYes—
messagestringYes—
fieldstringNo—
docsstring (uri)Yes—

UTM templates

GET/api/v1/utm-templates

List saved UTM templates

Required scope: read

Response 200
PropertyTypeRequiredDescription
dataobject[]Yes—
idstringYes—
namestringYes—
utmobjectYes—
sourcestringNo—
mediumstringNo—
campaignstringNo—
termstringNo—
contentstringNo—
Response 400
PropertyTypeRequiredDescription
errorobjectYes—
codebad_request | unauthorized | key_over_limit | insufficient_scope | limit_reached | not_found | slug_taken | delete_too_soon | in_plan_grace | idempotency_conflict | idempotency_in_progress | qr_unavailable | validation_error | unsafe_destination | rate_limited | quota_exceeded | internalYes—
messagestringYes—
fieldstringNo—
docsstring (uri)Yes—
Response 401
PropertyTypeRequiredDescription
errorobjectYes—
codebad_request | unauthorized | key_over_limit | insufficient_scope | limit_reached | not_found | slug_taken | delete_too_soon | in_plan_grace | idempotency_conflict | idempotency_in_progress | qr_unavailable | validation_error | unsafe_destination | rate_limited | quota_exceeded | internalYes—
messagestringYes—
fieldstringNo—
docsstring (uri)Yes—
Response 403
PropertyTypeRequiredDescription
errorobjectYes—
codebad_request | unauthorized | key_over_limit | insufficient_scope | limit_reached | not_found | slug_taken | delete_too_soon | in_plan_grace | idempotency_conflict | idempotency_in_progress | qr_unavailable | validation_error | unsafe_destination | rate_limited | quota_exceeded | internalYes—
messagestringYes—
fieldstringNo—
docsstring (uri)Yes—
Response 404
PropertyTypeRequiredDescription
errorobjectYes—
codebad_request | unauthorized | key_over_limit | insufficient_scope | limit_reached | not_found | slug_taken | delete_too_soon | in_plan_grace | idempotency_conflict | idempotency_in_progress | qr_unavailable | validation_error | unsafe_destination | rate_limited | quota_exceeded | internalYes—
messagestringYes—
fieldstringNo—
docsstring (uri)Yes—
Response 409
PropertyTypeRequiredDescription
errorobjectYes—
codebad_request | unauthorized | key_over_limit | insufficient_scope | limit_reached | not_found | slug_taken | delete_too_soon | in_plan_grace | idempotency_conflict | idempotency_in_progress | qr_unavailable | validation_error | unsafe_destination | rate_limited | quota_exceeded | internalYes—
messagestringYes—
fieldstringNo—
docsstring (uri)Yes—
Response 422
PropertyTypeRequiredDescription
errorobjectYes—
codebad_request | unauthorized | key_over_limit | insufficient_scope | limit_reached | not_found | slug_taken | delete_too_soon | in_plan_grace | idempotency_conflict | idempotency_in_progress | qr_unavailable | validation_error | unsafe_destination | rate_limited | quota_exceeded | internalYes—
messagestringYes—
fieldstringNo—
docsstring (uri)Yes—
Response 429
PropertyTypeRequiredDescription
errorobjectYes—
codebad_request | unauthorized | key_over_limit | insufficient_scope | limit_reached | not_found | slug_taken | delete_too_soon | in_plan_grace | idempotency_conflict | idempotency_in_progress | qr_unavailable | validation_error | unsafe_destination | rate_limited | quota_exceeded | internalYes—
messagestringYes—
fieldstringNo—
docsstring (uri)Yes—
Response 500
PropertyTypeRequiredDescription
errorobjectYes—
codebad_request | unauthorized | key_over_limit | insufficient_scope | limit_reached | not_found | slug_taken | delete_too_soon | in_plan_grace | idempotency_conflict | idempotency_in_progress | qr_unavailable | validation_error | unsafe_destination | rate_limited | quota_exceeded | internalYes—
messagestringYes—
fieldstringNo—
docsstring (uri)Yes—