API reference
Base URL: https://www.routepath.to/links-api. Send your key as Authorization: Bearer rpto_…, see authentication. This page is generated from RoutePath.to's live OpenAPI document, so it lists only endpoints that exist.
Prefer an interactive explorer? Open the interactive API docs or fetch the OpenAPI JSON.
Links
/api/v1/linksscope: links.readList links
Parameters
search(query) — Matches slug, label, destination and notestag_ids(query) — Comma-separated tag ids (links with any of them)status(query)archived(query)sort(query)page(query)page_size(query)
Responses
200A page of links400Invalid input401Missing, invalid or expired API key403The API key lacks the scope this needs, or the account's plan doesn't allow it (code PLAN_LIMIT / PLAN_FEATURE)429The account's monthly API request allowance is used up (code API_ALLOWANCE_REACHED)
/api/v1/linksscope: links.writeCreate a link
JSON body fields
destination_url*labelslugexpires_atmax_clickspasswordexpired_urltag_idscommentspublic_statsios_urlandroid_urlgeoproxyog_titleog_descriptionog_imagetest_variantsdomain
* required
Responses
201The new link400Invalid input401Missing, invalid or expired API key403The API key lacks the scope this needs, or the account's plan doesn't allow it (code PLAN_LIMIT / PLAN_FEATURE)409Slug taken429The account's monthly API request allowance is used up (code API_ALLOWANCE_REACHED)
/api/v1/links/bulkscope: links.write.Create up to 100 links
All or nothing: a 400 lists every bad row.
JSON body fields
links*
* required
Responses
201The new links400Invalid input401Missing, invalid or expired API key403The API key lacks the scope this needs, or the account's plan doesn't allow it (code PLAN_LIMIT / PLAN_FEATURE)429The account's monthly API request allowance is used up (code API_ALLOWANCE_REACHED)
/api/v1/links/exportscope: links.read.Export links as CSV
Same filters as listing, without paging.
Parameters
search(query) — Matches slug, label, destination and notestag_ids(query) — Comma-separated tag ids (links with any of them)status(query)archived(query)sort(query)
Responses
200CSV file400Invalid input401Missing, invalid or expired API key403The API key lacks the scope this needs, or the account's plan doesn't allow it (code PLAN_LIMIT / PLAN_FEATURE)429The account's monthly API request allowance is used up (code API_ALLOWANCE_REACHED)
/api/v1/links/{id}scope: links.readGet a link
Parameters
id(path, required)
Responses
200The link400Invalid input401Missing, invalid or expired API key403The API key lacks the scope this needs, or the account's plan doesn't allow it (code PLAN_LIMIT / PLAN_FEATURE)404Not found429The account's monthly API request allowance is used up (code API_ALLOWANCE_REACHED)
/api/v1/links/{id}scope: links.writeUpdate a link
Parameters
id(path, required)
JSON body fields
destination_urllabelslugis_activearchivedexpires_atmax_clickspasswordexpired_urltag_idscommentspublic_statsios_urlandroid_urlgeoproxyog_titleog_descriptionog_imagetest_variantsdomain
* required
Responses
200The updated link400Invalid input401Missing, invalid or expired API key403The API key lacks the scope this needs, or the account's plan doesn't allow it (code PLAN_LIMIT / PLAN_FEATURE)404Not found429The account's monthly API request allowance is used up (code API_ALLOWANCE_REACHED)
/api/v1/links/{id}scope: links.writeDelete a link
Parameters
id(path, required)
Responses
200Deleted400Invalid input401Missing, invalid or expired API key403The API key lacks the scope this needs, or the account's plan doesn't allow it (code PLAN_LIMIT / PLAN_FEATURE)404Not found429The account's monthly API request allowance is used up (code API_ALLOWANCE_REACHED)
Analytics
/api/v1/links/{id}/analyticsscope: analytics.readA link's analytics
Parameters
id(path, required)days(query) — 1 = the last 24 hours, by hourtz(query) — IANA time zone for the bucketscountry(query) — Only clicks with this country ("__none" = empty)region(query) — Only clicks with this region ("__none" = empty)city(query) — Only clicks with this city ("__none" = empty)device(query) — Only clicks with this device ("__none" = empty)browser(query) — Only clicks with this browser ("__none" = empty)os(query) — Only clicks with this os ("__none" = empty)referrer_host(query) — Only clicks with this referrer host ("__none" = empty)trigger(query) — Only clicks with this trigger ("__none" = empty)destination_url(query) — Only clicks with this destination url ("__none" = empty)
Responses
200Totals, timeseries and breakdowns400Invalid input401Missing, invalid or expired API key403The API key lacks the scope this needs, or the account's plan doesn't allow it (code PLAN_LIMIT / PLAN_FEATURE)429The account's monthly API request allowance is used up (code API_ALLOWANCE_REACHED)
/api/v1/analyticsscope: analytics.readAccount-wide analytics
Parameters
days(query) — 1 = the last 24 hours, by hourtz(query) — IANA time zone for the bucketscountry(query) — Only clicks with this country ("__none" = empty)region(query) — Only clicks with this region ("__none" = empty)city(query) — Only clicks with this city ("__none" = empty)device(query) — Only clicks with this device ("__none" = empty)browser(query) — Only clicks with this browser ("__none" = empty)os(query) — Only clicks with this os ("__none" = empty)referrer_host(query) — Only clicks with this referrer host ("__none" = empty)trigger(query) — Only clicks with this trigger ("__none" = empty)destination_url(query) — Only clicks with this destination url ("__none" = empty)
Responses
200Totals, timeseries, breakdowns and top links400Invalid input401Missing, invalid or expired API key403The API key lacks the scope this needs, or the account's plan doesn't allow it (code PLAN_LIMIT / PLAN_FEATURE)429The account's monthly API request allowance is used up (code API_ALLOWANCE_REACHED)