Nimply Developers

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

MethodPathScopeWhat it does
GET/v1/link-pageslinks:readList pages { data: LinkPage[] }
GET/v1/link-pages/{id}links:readOne page with its blocks in display order
PATCH/v1/link-pages/{id}links:writeUpdate title, bio, seoTitle, seoDescription, noindex
POST/v1/link-pages/{id}/publishlinks:writePublish the draft → { publishedVersion, url }
GET/v1/link-pages/{id}/blockslinks:readBlocks only
POST/v1/link-pages/{id}/blockslinks:writeAdd a block (types below)
PATCH/v1/link-pages/{id}/blocks/{blockId}links:writeChange config, isActive, scheduledStartAt, scheduledEndAt
DELETE/v1/link-pages/{id}/blocks/{blockId}links:writeRemove a block
GET/v1/link-pages/{id}/analytics?range=7d|28d|12mlinks:readViews, 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.

typeconfig
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).

Recipe: Add a link to your page when a video goes live.

On this page