FREE

Branded tracked links for agents.

Drop a URL. Ship a short link. Pull click stats from the API — curl, npm CLI, or your agent.

1 · Drop link
2 · Get short
https://lnkgo.app/your-slug

Public short_url after create. Analytics use internal $LINK_ID.

Open playground →
3 · Catch stats
  • lnkgo init — API key once
  • lnkgo analytics — JSON report
  • lnkgo analytics --csv — local CSV (aggregate analytics)
Raw exports → PRO
Full workflow (CLI)
CREATE_RESULT="$(lnkgo create \
  --url 'https://example.com/blog/long-article?utm_source=newsletter' \
  --tag 'smm')"

LINK_ID="$(printf '%s' "$CREATE_RESULT" | jq -r '.id')"
SHORT_URL="$(printf '%s' "$CREATE_RESULT" | jq -r '.short_url')"

printf 'Public short URL: %s\n' "$SHORT_URL"

# JSON report
lnkgo analytics "$LINK_ID" \
  --from '2026-06-01' \
  --to '2026-06-11'

# CSV file
lnkgo analytics "$LINK_ID" \
  --from '2026-06-01' \
  --to '2026-06-11' \
  --csv > report.csv
API
https://api.lnkgo.app
Default domain
lnkgo.app
Install
npm install -g lnkgo

5 minute quickstart

Install the CLI, verify your email, and create the first tracked link on the default `lnkgo.app` domain. You do not pass a domain unless you are using your own verified custom domain.

npm CLI
npm install -g lnkgo
export LNKGO_EMAIL="<your-email>"

lnkgo init --email "$LNKGO_EMAIL"
export LNKGO_VERIFICATION_CODE="<email-code>"
export LNKGO_API_KEY="$(
  lnkgo init --email "$LNKGO_EMAIL" --code "$LNKGO_VERIFICATION_CODE" \
    | jq -r '.api_key'
)"

CREATE_RESULT="$(lnkgo create \
  --url https://example.com/launch \
  --tag product-hunt)"

SHORT_URL="$(printf '%s' "$CREATE_RESULT" | jq -r '.short_url')"
LINK_ID="$(printf '%s' "$CREATE_RESULT" | jq -r '.id')"

printf 'Public short URL: %s\n' "$SHORT_URL"
lnkgo analytics "$LINK_ID"
Prefer curl?
REST quickstart
export LNKGO_BASE_URL="https://api.lnkgo.app"
export LNKGO_EMAIL="<your-email>"

curl -sS -X POST "$LNKGO_BASE_URL/v1/keys/request" \
  -H "Content-Type: application/json" \
  -d "{\"email\":\"$LNKGO_EMAIL\"}"

export LNKGO_VERIFICATION_CODE="<email-code>"
export LNKGO_API_KEY="$(
  curl -sS -X POST "$LNKGO_BASE_URL/v1/keys/verify" \
    -H "Content-Type: application/json" \
    -d "{\"email\":\"$LNKGO_EMAIL\",\"code\":\"$LNKGO_VERIFICATION_CODE\"}" \
    | jq -r '.api_key'
)"

CREATE_RESULT="$(curl -sS -X POST "$LNKGO_BASE_URL/v1/links" \
  -H "Authorization: Bearer $LNKGO_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen | tr '[:upper:]' '[:lower:]')" \
  -d '{"url":"https://example.com/launch","tags":["product-hunt"]}')"

printf '%s\n' "$CREATE_RESULT" | jq '{id, short_url, slug}'

Demos

Watch the same product surface from three entry points: REST API, npm CLI, and an installed agent skill.

Open video file

Use cases

Pick a workflow to open CLI, cURL, and an agent prompt. Optional API key stays in your browser for cURL snippets only.

API playground

Preview CLI and cURL for the three core flows. v2.0 is copy-only — no live API calls from the browser yet.

Create link — CLI
# Default-domain links use lnkgo.app automatically.
CREATE_RESULT="$(lnkgo create \
  --url https://example.com/pricing \
  --tag newsletter \
  --tag launch)"
# For short-lived campaigns, add: --expire 12h

LINK_ID="$(printf '%s' "$CREATE_RESULT" | jq -r '.id')"
SHORT_URL="$(printf '%s' "$CREATE_RESULT" | jq -r '.short_url')"

printf 'Public short URL: %s\n' "$SHORT_URL"
lnkgo analytics "$LINK_ID"

What you can do

Default links

Omit domain to create on lnkgo.app. Pass domain only after a custom domain is active.

Custom domains

Request a domain, add CNAME and TXT proof, poll status until active, then create links on it.

QR codes

PNG QR codes point to the owned short URL, so print, event, and support flows stay measurable.

Click analytics

Read total, non-bot, bot, top referrers, top countries, daily timeseries, and truncation status.

Agent skills

Install the Lnkgo skill into Codex, Claude, Cursor, or another IDE so agents can use the same API contract.

Safe retries

REST creates require Idempotency-Key. The npm CLI generates one automatically for create calls.

QR and analytics
# Use the internal link id returned by create, not the public slug.
lnkgo qr "$LINK_ID" --output lnkgo-qr.png

lnkgo analytics "$LINK_ID" \
  --from '2026-06-01' \
  --to '2026-06-11'

lnkgo analytics "$LINK_ID" \
  --from '2026-06-01' \
  --to '2026-06-11' \
  --csv > report.csv
Agent skill install
npx --yes skills add citedy/lnkgo --skill lnkgo -a codex -g -y
npx --yes skills add citedy/lnkgo --skill lnkgo -a claude-code -g -y
npx --yes skills add citedy/lnkgo --skill lnkgo -a cursor -g -y

# Fallback bundled with the npm CLI:
npx --yes lnkgo skill install --target codex
npx --yes lnkgo skill install --target claude
npx --yes lnkgo skill install --target cursor
npx --yes lnkgo skill install --target project

Custom domain

Use `lnkgo.app` immediately, then add your own domain when you want branded links for emails, campaigns, support flows, or agent-created outbound URLs.

Custom-domain setup
curl -sS -X POST "$LNKGO_BASE_URL/v1/domains" \
  -H "Authorization: Bearer $LNKGO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"domain":"links.example.com"}'

# Add the returned DNS records:
# CNAME links.example.com -> edge.lnkgo.app
# TXT _lnkgo.links.example.com -> lnkgo-verify=...

lnkgo domain status links.example.com

lnkgo create \
  --url https://example.com/pricing \
  --domain links.example.com \
  --tag pricing

Compare

Pricing

Starter
Free

Email-verified starter limits are intentionally small. Prove DNS ownership to unlock the launch offer.

  • - 100 links/month
  • - 10 creates/hour
  • - 1,000 API calls/month
  • - 1-day analytics
Launch domain verified
Free launch offer

DNS ownership proof unlocks the generous free launch limits.

  • - 10 custom domains
  • - 10,000 links/month
  • - 1,000 links/domain/month
  • - 50,000 API calls/month
  • - 14-day analytics
PROContact

Contact us if you need more history, exports, reports, or higher limits.

  • - Longer analytics
  • - Raw exports
  • - Scheduled reports
  • - Email reporting
  • - Password link protection