Link pages
Read and update your nimply.link bio pages — blocks, publishing, and analytics.
A link page is the public page Nimply hosts for a workspace at
https://nimply.link/<handle> (the "link in bio"). It is built from blocks
— link buttons, text, latest posts, forms, countdowns, products and so on —
and has a draft that goes live only when you publish.
The API lets you manage the parts of a page that automations care about: add a link when something happens, swap a countdown, hide a block after a campaign, and publish. Page design (looks, themes) and blocks that carry uploaded media stay in the Nimply app.
Scopes: links:read for reads, links:write for changes and publishing.
Both are opt-in — tick them when you create the key.
Endpoints
| Method | Path | Scope | What it does |
|---|---|---|---|
GET | /v1/link-pages | links:read | List pages { data: LinkPage[] } |
GET | /v1/link-pages/{id} | links:read | One page with its blocks in display order |
PATCH | /v1/link-pages/{id} | links:write | Update title, bio, seoTitle, seoDescription, noindex |
POST | /v1/link-pages/{id}/publish | links:write | Publish the draft → { publishedVersion, url } |
GET | /v1/link-pages/{id}/blocks | links:read | Blocks only |
POST | /v1/link-pages/{id}/blocks | links:write | Add a block (types below) |
PATCH | /v1/link-pages/{id}/blocks/{blockId} | links:write | Change config, isActive, scheduledStartAt, scheduledEndAt |
DELETE | /v1/link-pages/{id}/blocks/{blockId} | links:write | Remove a block |
GET | /v1/link-pages/{id}/analytics?range=7d|28d|12m | links:read | Views, clicks, CTR and per-block clicks (paid plans; 403 otherwise) |
Every write lands in the page draft. Nothing changes for visitors until
you call publish, which returns the new publishedVersion; the public URL
updates within about a minute.
Objects
LinkPage
{
"id": "8097029e-5895-4a48-b03c-2d7263c2d891",
"handle": "brewhaus.coffee",
"url": "https://nimply.link/brewhaus.coffee",
"title": "Brewhaus Coffee",
"bio": "Specialty coffee in Al Quoz. Open daily.",
"status": "PUBLISHED",
"publishedVersion": 4,
"publishedAt": "2026-09-26T16:43:48.221Z",
"seo": { "title": "Brewhaus Coffee", "description": null, "noindex": false },
"blocksCount": 7,
"createdAt": "2026-09-26T16:37:10.000Z",
"updatedAt": "2026-09-27T08:02:11.000Z"
}status is DRAFT (never published), PUBLISHED, or SUSPENDED (paused by
Nimply Trust & Safety — writes still work, publishing is refused).
LinkBlock
{
"id": "5d1f8f4a-6d2e-4a4e-9c0f-2b7e2c0d9a11",
"type": "LINK",
"position": 2,
"isActive": true,
"config": {
"title": "Watch my latest video",
"url": "https://youtube.com/watch?v=abc123",
"subtitle": null,
"style": "solid"
},
"scheduledStartAt": null,
"scheduledEndAt": null,
"createdAt": "2026-09-26T16:37:12.000Z",
"updatedAt": "2026-09-26T16:37:12.000Z"
}position is 0-based in display order. isActive: false hides a block
without deleting it. A schedule window (scheduledStartAt / scheduledEndAt,
ISO 8601) shows the block only inside that window — evaluated live on every
visit, so a countdown or offer can appear and disappear without a republish.
Block types you can create
Other block types (profile header, social icons, galleries, videos, forms,
latest posts, menus, events, …) are created in the Nimply app; the API can
still read them and toggle isActive on them.
type | config |
|---|---|
LINK | { "title", "url", "subtitle"?, "thumbnailUrl"?, "icon"?, "style"?: "solid" | "outline" | "card" | "featured", "pinned"?, "utm"? } |
TEXT | { "content", "align"?: "left" | "center", "size"?: "sm" | "md" | "lg" } — content is restricted markdown (##, ###, **bold**, *italic*, [text](https://url), - lists) |
SECTION | { "label"?, "style"?: "header" | "divider" | "spacer" } |
POST_CARD | { "url", "title"?, "caption"?, "thumbnailUrl"?, "platform"?: "instagram" | "tiktok" | "youtube" | … } — a card that links to a post by URL |
PRODUCT | { "items": [{ "id", "title", "buyUrl", "price"?, "compareAtPrice"?, "currency"?: "USD", "imageUrl"?, "badge"?, "retailer"?, "affiliate"?: false }], "layout"?: "grid" | "list", "columns"?: 1‑3, "buttonLabel"? } — affiliate: true adds the required "Paid link" disclosure |
COUPON | { "code", "headline"?, "description"?, "expiresAt"?, "terms"?, "url"?, "buttonLabel"? } |
COUNTDOWN | { "targetAt", "label"?, "timezone"?, "expired"?: { "behaviour": "hide" | "text" | "cta", "text"?, "ctaLabel"?, "ctaUrl"? } } |
NOTICE_BAR | { "text", "tone"?: "info" | "warning" | "success", "dismissible"?: true, "url"? } |
FAQ | { "title"?, "items": [{ "q", "a" }] } |
TESTIMONIAL | { "items": [{ "id", "quote", "author", "role"?, "avatarUrl"?, "rating"?: 1‑5, "source"?: "google" | "yelp" | "trustpilot" | "instagram" | "tiktok" | "manual", "sourceUrl"? }], "layout"?: "cards" | "carousel" | "quote" } |
Any other type is rejected with 400 and a message naming the allowed
types. Every URL is checked against Google Safe Browsing at publish time; a
flagged URL blocks the publish with the offending block id in the error.
Examples
Add a link button and publish:
curl -X POST "https://api.nimply.io/v1/link-pages/$PAGE_ID/blocks" \
-H "Authorization: Bearer $NIMPLY_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"type": "LINK",
"position": 0,
"config": { "title": "New episode is out", "url": "https://youtu.be/abc123", "style": "featured" }
}'
curl -X POST "https://api.nimply.io/v1/link-pages/$PAGE_ID/publish" \
-H "Authorization: Bearer $NIMPLY_API_KEY"A countdown that shows itself only this week and disappears afterwards:
curl -X POST "https://api.nimply.io/v1/link-pages/$PAGE_ID/blocks" \
-H "Authorization: Bearer $NIMPLY_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"type": "COUNTDOWN",
"config": { "label": "Drop goes live in", "targetAt": "2026-10-03T18:00:00Z", "expired": { "behaviour": "hide" } },
"scheduledStartAt": "2026-09-28T00:00:00Z",
"scheduledEndAt": "2026-10-03T18:00:00Z"
}'Hide a block after a campaign without deleting it:
curl -X PATCH "https://api.nimply.io/v1/link-pages/$PAGE_ID/blocks/$BLOCK_ID" \
-H "Authorization: Bearer $NIMPLY_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "isActive": false }'Analytics for the last 28 days:
{
"range": "28d",
"totals": { "views": 4210, "clicks": 1188, "ctr": 0.282, "forms": 31 },
"series": [{ "date": "2026-09-01", "views": 140, "clicks": 41 }],
"blocks": [{ "blockId": "5d1f…", "type": "LINK", "title": "Watch my latest video", "clicks": 612 }]
}Also available in
- MCP —
list_link_pages,get_link_page,add_link_block,update_link_block,publish_link_page(MCP server). - Zapier — Add Link Block action and Find Link Page search (Zapier).
- Make — Add Link Block and Publish Link Page modules (Make).
- n8n — the Link Page resource on the Nimply node (n8n).