Concepts
Page content
Page codes host a mobile page at their short link. The content object on create and update sets what the page shows. Two fields work on every type: title (string, max 120) and accent (hex color like #7c3aed, the page's highlight color).
How normalization works#
The API normalizes content instead of rejecting it: unknown fields are dropped, over-length strings are truncated, URL fields accept http(s) only and store empty otherwise, and dates outside YYYY-MM-DD store empty. The request still succeeds, so open the hosted page (or GET the code) after your first integration test and check the result.
links#
A link-in-bio page.
| tagline | string, max 160 |
| links | array of { label (max 80), url }, max 50; rows missing either are dropped |
menu#
A restaurant menu with sections and priced items.
| currency | string, max 8, default $ |
| sections | array of { name (max 80), items }, max 20; unnamed sections are dropped |
| sections[].items | array of { name (max 80), price (max 20), desc (max 160) }, max 50 per section |
vcard#
A contact page with a downloadable .vcf.
| firstName / lastName | string, max 80 each |
| org / jobTitle | string, max 120 each |
| phone | string, max 40 |
| string, max 160 | |
| website | URL |
| address | string, max 200 |
| note | string, max 500 |
video#
A YouTube or Vimeo embed page.
| videoUrl | URL (YouTube or Vimeo link) |
| description | string, max 500 |
coupon#
A discount page with a tap-to-copy code.
| code | string, max 40 (the redeem code) |
| discount | string, max 120 (headline, e.g. 20% off) |
| description | string, max 500 |
| validUntil | date, YYYY-MM-DD; anything else is stored empty |
| ctaUrl | URL (redeem online link) |
| ctaLabel | string, max 40, default Redeem online |
apps#
An app-download page; scanners see their own store first.
| iosUrl | URL (App Store listing) |
| androidUrl | URL (Google Play listing) |
| fallbackUrl | URL (desktop fallback) |
| description | string, max 500 |
event#
An event page with date, venue and an RSVP button.
| description | string, max 500 |
| venue | string, max 120 |
| address | string, max 200 |
| date | date, YYYY-MM-DD |
| time | 24h time, HH:MM |
| ctaUrl | URL (RSVP or tickets) |
| ctaLabel | string, max 40, default RSVP |
business#
A business page with hours, contact and directions.
| tagline | string, max 160 |
| description | string, max 800 |
| phone | string, max 40 |
| string, max 160 | |
| website | URL |
| address | string, max 200 |
| hours | string, max 400; one line per row, e.g. Mon-Fri 9-17 |
feedback#
A star-rating page; ratings land in your dashboard.
| question | string, max 200, default How was your experience? |
| thanksMessage | string, max 200, default Thanks for the feedback! |
social#
One page linking every profile. Empty networks do not render.
| tagline | string, max 160 |
| instagram / facebook / x / tiktok / youtube / linkedin / whatsapp / website | URL each |
gallery#
A photo grid. The API creates the shell; images upload in the dashboard.
| description | string, max 500 |
| images | read-only via API; upload photos in the dashboard editor |