Skip to main content
A profile is one link-in-bio page. It has a public handle (snapto.link/{url}), a title, a bio, a template, and an ordered list of elements.

List profiles

curl https://snapto.link/api/v1/profiles \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Accept: application/json"
Requires profiles:read. Returns every profile you own.

Get a profile

curl https://snapto.link/api/v1/profiles/PROFILE_UUID \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Accept: application/json"
Requires profiles:read. Returns the profile with its ordered elements and its template.

Create a profile

curl -X POST https://snapto.link/api/v1/profiles \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Launch page",
    "url": "acme-launch",
    "enabled": true,
    "title": "Acme",
    "bio": "Everything we ship, in one place."
  }'
Requires profiles:write.
FieldRequiredNotes
nameYesInternal name. Max 255 characters.
enabledYestrue publishes the page, false keeps it unpublished.
urlYesThe public handle. 3 to 255 characters, letters, numbers, dots, underscores, and hyphens only. Cannot start with a dot. Must be unique, and some handles are reserved.
titleNoPublic heading. Max 255.
bioNoPublic bio. Max 255.
descriptionNoInternal description.
template_idNoA template UUID. Premium templates require a paid plan.
Creating a profile counts against your plan’s profile limit.

Update a profile

curl -X PUT https://snapto.link/api/v1/profiles/PROFILE_UUID \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Acme, now with more links",
    "enabled": true
  }'
Requires profiles:write. Set enabled to publish or unpublish the public page. Design fields (buttons_color, buttons_text_color, text_color, buttons_styles, hide_logo, google_analytics, and url_display: subdomain) require a paid plan and return an error on lower plans.
Last modified on July 9, 2026