Authentication
The workspace owner creates keys in Link Console, Integrations, API. Send the key in the Authorization header. Keys start with lc_, are shown once, and can be revoked at any time. Base URL: https://links.planconversion.com/api/v1.
Authorization: Bearer lc_your_key
Create a link
POST /links
| Field | Description |
|---|---|
destination | Required. The page, starting with https://. |
utm_source, utm_medium, utm_campaign, utm_term, utm_content, utm_id | Parameter values, at the top level or inside params. Custom parameters work the same way. Values are cleaned with your rules. |
short | true to create a short link and QR code. |
slug | Optional custom ending for the short link (letters, numbers, - and _). |
notes | Optional, up to 500 characters. |
curl -X POST https://links.planconversion.com/api/v1/links \
-H "Authorization: Bearer lc_your_key" -H "content-type: application/json" \
-d '{"destination":"https://www.example.com/demo","utm_source":"LinkedIn","utm_medium":"paid-social","utm_campaign":"Q4 ABM","short":true}'
201 Created
{ "ok": true, "link": { "id": "6f1c...", "full_url": "https://www.example.com/demo?utm_source=linkedin&utm_medium=paid-social&utm_campaign=q4-abm",
"short_url": "https://go.planconversion.com/k7Pq2xD", "params": { "utm_source": "linkedin", ... }, "clicks": 0, ... } }
List links
GET /links?limit=100&since=2026-11-01&campaign=q4-abm
Newest first. limit up to 500. since filters by creation date; campaign by exact utm_campaign.
Get a link
GET /links/{id}
Update a link
PATCH /links/{id}
Change destination, parameter values, notes or archived. The short link and its QR code follow the new address. Changes are recorded in the link's history and sent to your webhook.
curl -X PATCH https://links.planconversion.com/api/v1/links/6f1c... \
-H "Authorization: Bearer lc_your_key" -H "content-type: application/json" \
-d '{"destination":"https://www.example.com/demo-2027"}'
Clicks
GET /links/{id}/clicks?days=30
Clicks on the short link by day, country, device and referrer host. Bots and link previews are not counted; no IP addresses are stored.
Errors
| Status | Meaning |
|---|---|
| 401 | Missing, unknown or revoked key. |
| 402 | The workspace is not on Pro, or a plan limit was reached. |
| 409 | That short link ending is taken. |
| 422 | The link breaks the naming rules. issues lists each problem, for example {"param":"utm_source","code":"not_allowed","text":"Source \"g2\" is not an approved value"}. |
Webhooks
Save a URL in Integrations, Webhooks. Within 5 minutes of each change we POST JSON with event (link.created, link.edited, link.archived, link.restored, link.broken, link.recovered), at, changes and link. Requests carry X-LinkConsole-Signature: the hex HMAC-SHA256 of the raw body with your signing secret. Failed deliveries are retried for 24 hours.
{ "event": "link.broken", "at": "2026-11-03T14:05:00Z",
"changes": { "health": "broken", "note": "The page returns 404 (not found).", "code": 404 },
"link": { "id": "6f1c...", "full_url": "...", "short_url": "https://go.planconversion.com/k7Pq2xD", ... } }