pik.li
1 versija · stabili

pik.li API

Kurkite, redaguokite ir išmatuokite trumpąsias nuorodas iš savo kodo. REST API su gaunamu ir išeinančiu JSON, kiekvienos integracijos raktu ir kiekvienu čia užfiksuotu galutiniu tašku su realia užklausa ir atsakymu.

Gaukite API raktą OpenAPI 3.1
Bazinis URLhttps://pik.li/api/v1

Įvadas

pik.li API leidžia jūsų programinei įrangai daryti tai, ką darote naudotojo srityje: kurti ir redaguoti trumpąsias nuorodas, skaityti jų statistiką, sudaryti žymų ir domenų sąrašą ir valdyti webhookus. Jie veikia per HTTPS ir kiekvienas maršrutas prasideda nuo pirmiau esančio bazinio URL.

  • Siųsti užklausos turinį JSON su Content-Type: application/json; GET užklausų parametrai patenka į užklausos eilutę. Atsakymai visada yra JSON UTF-8, išskyrus QR kodą, kuris yra vaizdas.
  • Versija yra kelio dalis (/api/v1), o kiekvienas atsakymas turi antraštę X-Api-Version: 1. Laikui bėgant 1 versijos atsakymuose gali atsirasti naujų laukų: priverskite savo kodą nepaisyti tų, kurių jis nežino.
  • Datos ir laikai yra ISO 8601 eilutės su jų poslinkiais (2026-09-23T10:15:42.118+02:00); neribotos datos turi formą 2026-09-23.
  • Identifikatoriai yra sveikieji skaičiai. Nuorodą taip pat galima rasti jos trumpame URL su GET /links/lookup.

Greita pradžia

  1. Sukurkite raktą iš vartotojo srities (žr. Sukurkite raktą) ir išsaugokite jį aplinkos kintamajame.
  2. Patikrinkite, ar tai veikia: GET /me atsako su jūsų paskyra ir planu.
  3. Sukurkite savo pirmąją trumpą nuorodą naudodami POST /links.
Terminalas
export PIKLI_KEY="pk_live_…"

curl https://pik.li/api/v1/me \
  -H "Authorization: Bearer $PIKLI_KEY"

curl -X POST https://pik.li/api/v1/links \
  -H "Authorization: Bearer $PIKLI_KEY" \
  -H "Content-Type: application/json" \
  -d '{"url":"https://example.com/a/very/long/page"}'

Autentifikavimas

Kiekvienam skambučiui, išskyrus GET /ping, reikalingas API raktas, kuris turi būti išsiųstas Authorization antraštėje kaip nešiklio prieigos raktas.

Antraštė
Authorization: Bearer pk_live_3kZ9vQeX1mT0bR7yNw2aLp4sUc8dHf6J

Taip pat veikia antraštė X-API-Key. Užklausos parametras api_key vis dar priimamas senesniems klientams, tačiau venkite jo: adresai patenka į naršyklės žurnalus ir istoriją.

Klavišai prasideda pk_live_, po kurio seka 32 simboliai. Raktas mato tiksliai tai, ką mato jo paskyra – nuorodas, domenus, žymas, statistiką ir webhookus – ir visi paskyros raktai gali atlikti tą patį: nėra tik skaitomų raktų.

Raktą traktuokite kaip slaptažodį. Laikykite jį savo serveryje, o ne kode, kuris vykdomas naršyklėje ar platinamoje programoje. Jei raktas atidengtas, atšauk jį ir sukurk kitą – tai užtruks tik dešimt sekundžių.

Sukurkite raktą

  1. Prisijunkite ir atidarykite API ir raktai vartotojo srityje.
  2. Suteikite raktui pavadinimą, kuris primintų, kur jį naudojate (pvz., CRM production) ir paspauskite Generuoti raktą.
  3. Nedelsdami nukopijuokite raktą: naudotojo srityje jis rodomas tik vieną kartą.
  4. Galite turėti iki 10 aktyvių raktų. Kiekviename puslapyje rodoma, kada jis buvo paskutinį kartą naudotas ir kiek užklausų buvo pateikta, ir leidžia atšaukti: nuo kito skambučio atšauktas raktas gauna 401 unauthorized.

Kas gali naudoti API

API yra įtrauktos į mokamus planus (Premium ir Verslas). Į pagrindinį planą jie neįtraukti, nebent pik.li darbuotojai juos suaktyvintų nemokamam planui arba jūsų paskyrai. Bet kuriuo atveju paskyra turi turėti patvirtintą el. pašto adresą ir negali būti užblokuota ar sustabdyta.

Jei vienos iš šių sąlygų nėra, API atsako api_disabled, email_unconfirmed arba account_blocked.

Pagrindinis

Tik tuo atveju, jei darbuotojai tai leidžia
Prašymai per minutę
60
Naujos nuorodos
1 200 per mėnesį
Nuoroda masiniam skambučiui
10
Statistika saugoma
90 dienų
Webhookas
Nr

Premium

Įtrauktos API
Prašymai per minutę
600
Naujos nuorodos
2 500 per mėnesį
Nuoroda masiniam skambučiui
100
Statistika saugoma
730 dienų
Webhookas
Taip

Verslas

Įtrauktos API
Prašymai per minutę
3 000
Naujos nuorodos
10 000 per mėnesį
Nuoroda masiniam skambučiui
100
Statistika saugoma
1 095 dienų
Webhookas
Taip

Tai yra standartinės kiekvieno plano reikšmės, skaitomos realiu laiku iš kainų nustatymų. Jūsų vertės ir bet kokie personalo pakeitimai jūsų paskyroje grąžinami GET /limits ir GET /me.

Dažnio ribos

Kiekvienas klavišas gali pateikti tam tikrą užklausų skaičių per minutę, kuris priklauso nuo plano (žr. lentelę aukščiau). Skaičiavimas pradedamas iš naujo kiekvienos minutės pradžioje.

X-RateLimit-Limit
užklausų, leidžiamų per minutę šiam raktui
X-RateLimit-Remaining
užklausų liko šią minutę
X-RateLimit-Reset
kai skaičiavimas pradedamas iš naujo, kaip Unix laiko žyma sekundėmis
Retry-After
tik 429 atsakymuose: kiek sekundžių laukti

Viršijus ribą, API atsako 429 su klaida rate_limited ir Retry-After antrašte. Palaukite tą laiką ir pradėkite iš naujo: iš karto bandydami dar kartą, kitą minutę pavalgykite.

Atsakymas
HTTP/1.1 429 Too Many Requests
Content-Type: application/json; charset=utf-8
Retry-After: 18
X-RateLimit-Limit: 600
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 1790151360

{
  "error": {
    "code": "rate_limited",
    "message": "Too many requests. Check the X-RateLimit-* headers and retry after the window resets.",
    "details": { "limit": 600, "period_seconds": 60, "resets_at": "2026-09-23T08:16:00Z" },
    "docs_url": "https://pik.li/help#error-rate_limited"
  },
  "request_id": "2b8e51d0-7a4c-4f1e-9d3b-5c6a0e8f7d21"
}
  • Skambučiai be raktų ribojami iki 30 per minutę vienam IP adresui (GET /ping neskaičiuojamas).
  • Be to, kiekvienas IP adresas turi 600 užklausų per minutę ribą visiems pik.li, kad ir koks būtų planas.

Klaidos

Nesėkminga užklausa visada gauna atsakymą su ta pačia struktūra, nepaisant galutinio taško, ir HTTP būseną, atitinkančią problemą.

Atsakymas
{
  "error": {
    "code": "quota_exceeded",
    "message": "Link quota reached: 2500 links per month on your plan.",
    "details": { "limit": 2500, "used": 2500, "period": "month", "resets_at": "2026-09-30T22:00:00Z" },
    "docs_url": "https://pik.li/help#error-quota_exceeded"
  },
  "request_id": "6f1c2a9e-4b0d-4c55-9a51-8f2f0d7c1e3b"
}
code
Stabilus identifikatorius, sukurtas jūsų kodui. Ji niekada nesikeičia ir niekada neverčiama.
message
Sakinys žmonėms, prašymo kalba (žr. Kalbos).
details
Struktūriniai duomenys, kai reikia: neteisingi laukai, leistinos reikšmės, kvotų numeriai. Ne visada yra.
docs_url
Nuoroda į šio kodo paaiškinimą šiame puslapyje.
request_id
Užklausos identifikatorius, taip pat išsiųstas X-Request-Id antraštėje. Tai nurodykite rašydami pagalbos tarnybai.

Kiekvienas galinis taškas, prašantis rakto, taip pat gali atsakyti unauthorized account_blocked email_unconfirmed api_disabled rate_limited: jie nesikartoja kiekviename galutiniame taške.

unauthorized401
Trūksta rakto, jis neteisingas arba buvo atšauktas. Patikrinkite autorizacijos antraštę ir ar raktas vis dar aktyvus vartotojo srityje.
account_blocked403
Paskyra užblokuota, sustabdyta arba deaktyvuota. API lieka uždarytos, kol paskyra vėl tampa aktyvi.
email_unconfirmed403
Paskyros el. pašto adresas dar nepatvirtintas. Atidarykite nuorodą patvirtinimo el. laiške, tada bandykite dar kartą.
api_disabled403
Į šios paskyros planą neįtrauktos API arba jos paskyroje išjungtos. Peržiūrėkite, kas gali naudoti API.
forbidden403
Raktas negali atlikti šio veiksmo. rezervuota
feature_required402
Į planą neįtraukta funkcija, kurios reikia šiam galutiniam taškui. Details.feature nurodo, kuris iš jų ir detales.planuoja pirmąjį planą, kuris jį siūlo.
quota_exceeded402
Dienos ar mėnesio nuorodų kvota išnaudota. Informacija apima limitą, naudojamą, laikotarpį ir resets_at, laiką, nuo kurio vėl galite kurti nuorodas.
not_found404
Išteklius neegzistuoja, buvo ištrintas arba priklauso kitai paskyrai.
conflict409
Užklausa prieštarauja esamai išteklių būklei. rezervuota
invalid422
Kai kurie duomenys nepraėjo patvirtinimo: detales.laukai išvardija problemas po laukus, detales.pranešimai kaip paruoštus sakinius.
domain_not_allowed422
Jūsų paskyra negali naudoti šio domeno. GET /domenai išvardija tuos, kuriuos gali naudoti.
bad_request400
Trūksta privalomo parametro; detales.parametras nurodo kuris.
invalid_json400
Turinys negalioja JSON. Patikrinkite citatas ir turinio tipo antraštę.
invalid_parameter400
Parametras turi reikšmę, kurios galutinis taškas nežino. Pranešime nurodomas parametras ir detalės.allowed, jei yra, pateikiamos priimtos reikšmės.
bulk_empty400
Masinio skambučio nuorodų masyvas tuščias arba jo nėra.
bulk_too_many400
Per daug nuorodų viename masiniame skambutyje. details.max yra jūsų plano limitas – padalykite sąrašą į kelis skambučius.
idempotency_key_invalid400
Idempotency-Key antraštė viršija 128 simbolius.
rate_limited429
Per daug užklausų šią minutę. Palaukite sekundes, nurodytas „Retry-After“, tada tęskite.

500 atsakymas reiškia, kad kažkas sugedo ir jūsų prašyme nėra ką taisyti. Bandykite dar kartą šiek tiek vėliau; jei tai kartosis, parašykite pagalbos tarnybai, nurodydami antraštės reikšmę X-Request-Id.

Puslapių rašymas

Sąrašai, kurie gali tapti ilgi, skirstomi į puslapius: GET /links, GET /links/active ir GET /links/:id/clicks.

  • page: norimas puslapis, pradedant nuo 1.
  • per_page: kiek elementų puslapyje, nuo 1 iki 100 (numatytasis 50). limit priimamas kaip sinonimas.

Atsakyme yra tema pagination, o bendra suma taip pat pateikiama antraštėje X-Total-Count. Klauskite next_page iki null atitikmenų.

Atsakymas
{
  "links": [],
  "pagination": { "page": 2, "per_page": 50, "total": 137, "total_pages": 3, "next_page": 3, "prev_page": 1 }
}

Idempotencija

POST /links, POST /links/bulk ir POST /links/generate priima antraštę Idempotency-Key: bet koks jūsų pasirinktas tekstas, iki 128 simbolių – UU ID numeris, po vieną operaciją.

Jei ta pati reikšmė vėl gaunama su tuo pačiu API raktu per 24 valandas, pik.li nieko nesukuria: grąžina pirmąjį atsakymą su antrašte Idempotent-Replayed: true. Pasikartojanti užklausa pasibaigus skirtajam laikui niekada nesukuria dublikato.

Ta pati užklausa, tas pats raktas, per 24 valandas
HTTP/1.1 201 Created
Idempotent-Replayed: true
Content-Type: application/json; charset=utf-8

Atsakymai, kurių būsena yra 5xx, nesaugomi, todėl pakartojus užklausą su ta pačia verte, ji vykdoma dar kartą. Jei reikšmė per ilga, atsakymas yra idempotency_key_invalid.

Kalbos

Klaidos pranešimai parašyti devyniomis kalbomis: en it zh ar ru fr de es pt-BR lt hi hu. API pasirenka pagal parametrą locale, tada pagal antraštę Accept-Language, tada pagal paskyros kalbą; kitaip jie vartoja anglų kalbą. Keičiasi tik pranešimas: kodai ir laukų pavadinimai išlieka tie patys, taigi ir docs_url, kuris atveria šį puslapį ta pačia kalba.

Terminalas
curl "https://pik.li/api/v1/links?status=nope" \
  -H "Authorization: Bearer $PIKLI_KEY" \
  -H "Accept-Language: it"

{
  "error": {
    "code": "invalid_parameter",
    "message": "Valore non valido per il parametro status.",
    "details": { "allowed": ["all", "active", "disabled", "review", "expired"] },
    "docs_url": "https://pik.li/help?locale=it#error-invalid_parameter"
  },
  "request_id": "0d5c9b7e-1f2a-4e3b-8c6d-7a9e0f1b2c3d"
}

Statistikos langai

Statistikos galutiniai taškai nuskaito laiko langą ir lygina jį su tuo pačiu metu buvusiu tokios pat trukmės: čia yra ankstesnis ir delta_pct.

period
24h, 7d, 30d, 90d, 1y arba all (visa jūsų plano saugoma istorija). Galima nurodyti ir dienų skaičių: period=45 arba senąjį days=45. Numatytoji reikšmė – 7d paskyrai, 30d atskirai nuorodai ir all paspaudimų sąrašui.
from, to
Kaip alternatyva laikotarpiui: data (2026-09-01) arba ISO 8601 laikas. Jei jų nenurodysite, to atitinka esamą momentą, o from – 30 dienų prieš to; to data apima viską tą dieną.
interval
hour arba day, laiko eilutės žingsnis. Pagal numatytuosius nustatymus „Windows“ iki 48 valandų yra kas valandą, ilgesni – kasdien; valandinė serija apima daugiausia 7 dienas.
window.clamped
Langas niekada neviršija jūsų plano istorijos (retention_days). Pjaustant window.clamped yra true.
bots
Botų paspaudimai neįtraukiami. Norėdami juos suskaičiuoti, pridėkite bots=1; vienos nuorodos statistika taip pat pateikia juos atskirai, period.bots.

Galiniai taškai

Kiekvienas galutinis taškas su savo parametrais, prašymu įklijuoti į terminalą ir faktiniu atsakymu, sutrumpintas, kur sąrašas būtų ilgas. Pavyzdžiai nuskaito raktą iš $PIKLI_KEY, kaip ir greitojo paleidimo metu.

Aptarnavimas

Ar API yra aktyvios ir kiek liko jūsų plane.

GET /ping Be rakto

Patikrinkite, ar API reaguoja

Tam nereikia rakto: jis skirtas sveikatos patikrinimui. Grąžina šios dokumentacijos ir OpenAPI failo serverio laiką ir adresus.

Prašymas
curl https://pik.li/api/v1/ping
Atsakyti · 200
{
  "ok": true,
  "service": "pik.li",
  "version": "v1",
  "time": "2026-09-23T08:15:42Z",
  "docs": "https://pik.li/help",
  "openapi": "https://pik.li/openapi.json"
}
Klaidos Nėra: šiam galutiniam taškui rakto nereikia.
GET /limits

Kiek liko iš jūsų akcijų

Šiandien arba šį mėnesį vis dar pasiekiamos nuorodos, įrašyti paspaudimai, dabartinis tarifo ribos langas, naudojami raktai ir pasirinktiniai domenai bei didžiausias masinio skambučio dydis. Kiekviename skaičiuje atsižvelgiama į pakeitimus, kuriuos darbuotojai galėjo padaryti jūsų paskyroje.

Prašymas
curl https://pik.li/api/v1/limits \
  -H "Authorization: Bearer $PIKLI_KEY"
Atsakyti · 200
{
  "plan": "premium",
  "plan_name": "Premium",
  "links": {
    "period": "month", "limit": 2500, "used": 412, "remaining": 2088,
    "resets_at": "2026-09-30T22:00:00Z",
    "today": 9, "this_month": 412, "per_day": 0, "per_month": 2500
  },
  "clicks": { "limit": 150000, "used": 38120, "remaining": 111880, "resets_at": "2026-09-30T22:00:00Z" },
  "rate_limit": { "limit": 600, "remaining": 597, "period_seconds": 60, "resets_at": "2026-09-23T08:16:00Z" },
  "api_keys": { "used": 2, "limit": 10 },
  "custom_domains": { "used": 1, "limit": 3 },
  "bulk": { "max_items": 100 },
  "retention_days": 730,
  "link_ttl_days": 0,
  "features": ["qr", "analytics_full", "tags", "export", "custom_slug", "password", "expiry", "utm", "bulk", "api", "webhooks"]
}
Klaidos Tik tie, kuriuos gali grąžinti bet kuris galutinis taškas.

Paskyra

Kas skambina: paskyra, kuriai priklauso raktas.

GET /me

Jūsų paskyra ir naudojamas raktas

Profilis, planas ir susijęs galiojimo laikas, funkcijos, limitai ir suvartojimas bei skambučio raktas su užklausų skaitikliu.

Prašymas
curl https://pik.li/api/v1/me \
  -H "Authorization: Bearer $PIKLI_KEY"
Atsakyti · 200
{
  "id": 1042,
  "username": "anna",
  "email": "[email protected]",
  "name": "Anna Rossi",
  "status": "active",
  "confirmed": true,
  "locale": "it",
  "plan": "premium",
  "plan_name": "Premium",
  "interval": "monthly",
  "plan_expires_at": "2026-10-14T23:59:59.000+02:00",
  "api_enabled": true,
  "features": ["qr", "analytics_full", "tags", "export", "custom_slug", "password", "expiry", "utm", "bulk", "api", "webhooks"],
  "limits": {
    "links_per_day": 0, "links_per_month": 2500, "clicks_per_month": 150000,
    "retention_days": 730, "link_ttl_days": 0, "custom_domains": 3, "api_rpm": 600
  },
  "usage": {
    "links_today": 9, "links_this_month": 412, "clicks_this_month": 38120,
    "links_quota_used": 412, "links_quota_limit": 2500, "links_total": 3187
  },
  "api_key": {
    "id": 55, "name": "CRM production", "prefix": "pk_live_Xq3v",
    "created_at": "2026-09-02T16:40:10.311+02:00", "last_used_at": "2026-09-23T10:15:42.020+02:00", "requests_count": 18230
  },
  "created_at": "2026-03-11T09:12:47.664+01:00"
}
Klaidos Tik tie, kuriuos gali grąžinti bet kuris galutinis taškas.

Paskyros statistika

Visų jūsų nuorodų numeriai kartu su naudotojo srities filtrais: langas, domenas, žyma, robotas. Norėdami sužinoti bendrus parametrus, žr. Statistikos langus.

GET /stats

Sąskaitos statistika skambučio metu

Bendra paskyrų suma, langas, palyginti su ankstesniu, laiko eilutės, 10 populiariausių persiuntimo šaltinių ir šalių, 6 populiariausi įrenginiai, naršyklės ir operacinės sistemos bei 10 dažniausiai spustelėtų nuorodų. Kiti /stats galutiniai taškai pateikia kiekvieną dalį atskirai su ilgesniais sąrašais.

Parametrai
  • period string užklausos eilutę

    Laikotarpis: 24h, 7d (numatytasis), 30d, 90d, 1y, all. Žr. „Statistikos laikotarpiai“.

  • from string užklausos eilutę

    Lango pradžia, kaip alternatyva period: ISO 8601 data arba laikas.

  • to string užklausos eilutę

    Lango pabaiga (numatytasis: dabartinis laikas).

  • interval string užklausos eilutę

    hour arba day, laiko eilutės žingsnis.

  • domain string užklausos eilutę

    Tik šis domenas, nurodytas pagrindinio kompiuterio pavadinimu (pvz., lnkz.li). Turi būti vienas iš jūsų: žr. GET /domains.

  • tag string užklausos eilutę

    Tik nuorodos su šia žyma.

  • bots string užklausos eilutę

    1 taip pat skaičiuoti robotų paspaudimus.

Prašymas
curl "https://pik.li/api/v1/stats?period=7d" \
  -H "Authorization: Bearer $PIKLI_KEY"
Atsakyti · 200
{
  "window": {
    "from": "2026-09-17T00:00:00+02:00",
    "to": "2026-09-23T10:15:42+02:00",
    "days": 7,
    "interval": "day",
    "period": "7d",
    "clamped": false,
    "retention_days": 730,
    "previous": { "from": "2026-09-10T00:00:00+02:00", "to": "2026-09-17T00:00:00+02:00" }
  },
  "filters": { "bots": false },
  "totals": {
    "links": 3187, "active_links": 2954, "clicks": 402118, "unique_clicks": 288930,
    "clicks_today": 1204, "links_active_24h": 214, "links_created_in_window": 61
  },
  "period": { "clicks": 21480, "uniques": 15522, "links_clicked": 690, "clicks_per_link": 31.1 },
  "previous": { "clicks": 19870, "uniques": 14410, "links_clicked": 655, "clicks_per_link": 30.3, "delta_pct": 8.1, "uniques_delta_pct": 7.7 },
  "timeseries": {
    "interval": "day",
    "points": [
      { "at": "2026-09-17", "clicks": 2890, "uniques": 2104 },
      { "at": "2026-09-18", "clicks": 3120, "uniques": 2240 }
    ]
  },
  "referrers": [{ "referrer": "instagram.com", "clicks": 5210, "share": 24.3 }],
  "direct": 8740,
  "countries": [{ "country": "IT", "clicks": 12877, "share": 59.9 }],
  "devices": [{ "device": "mobile", "clicks": 14002, "share": 65.2 }],
  "browsers": [{ "browser": "Chrome", "clicks": 9406, "share": 43.8 }],
  "os": [{ "os": "iOS", "clicks": 7340, "share": 34.2 }],
  "top_links": [{
    "id": 4821,
    "short_url": "https://lnkz.li/spring-sale",
    "slug": "spring-sale",
    "domain": "lnkz.li",
    "target_url": "https://example.com/shop/spring-sale",
    "target_host": "example.com",
    "title": "Spring sale",
    "description": null,
    "tags": ["promo", "newsletter"],
    "status": "active",
    "moderation": "allowed",
    "active": true,
    "expired": false,
    "password_protected": false,
    "clicks": 1284,
    "unique_clicks": 902,
    "last_clicked_at": "2026-09-23T09:58:12.431+02:00",
    "expires_at": null,
    "max_clicks": null,
    "disabled_reason": null,
    "utm": { "source": "newsletter", "medium": "email", "campaign": "spring" },
    "preview_url": "https://lnkz.li/spring-sale+",
    "qr_url": "https://pik.li/api/v1/links/4821/qr",
    "created_at": "2026-09-01T08:30:05.117+02:00",
    "updated_at": "2026-09-01T08:30:05.117+02:00",
    "clicks_in_window": 311,
    "uniques_in_window": 240
  }]
}
GET /stats/timeseries

Paspaudimai laikui bėgant

Paspaudimai ir unikalūs lankytojai pagal valandą arba dieną, su bendra suma iš ankstesnio lango ir procentais.

Parametrai
  • period string užklausos eilutę

    Laikotarpis: 24h, 7d (numatytasis), 30d, 90d, 1y, all. Žr. „Statistikos laikotarpiai“.

  • from string užklausos eilutę

    Lango pradžia, kaip alternatyva period: ISO 8601 data arba laikas.

  • to string užklausos eilutę

    Lango pabaiga (numatytasis: dabartinis laikas).

  • interval string užklausos eilutę

    hour arba day, laiko eilutės žingsnis.

  • domain string užklausos eilutę

    Tik šis domenas, nurodytas pagrindinio kompiuterio pavadinimu (pvz., lnkz.li). Turi būti vienas iš jūsų: žr. GET /domains.

  • tag string užklausos eilutę

    Tik nuorodos su šia žyma.

  • bots string užklausos eilutę

    1 taip pat skaičiuoti robotų paspaudimus.

Prašymas
curl "https://pik.li/api/v1/stats/timeseries?period=24h" \
  -H "Authorization: Bearer $PIKLI_KEY"
Atsakyti · 200
{
  "window": {
    "from": "2026-09-22T10:15:42+02:00",
    "to": "2026-09-23T10:15:42+02:00",
    "days": 1,
    "interval": "hour",
    "period": "24h",
    "clamped": false,
    "retention_days": 730,
    "previous": { "from": "2026-09-21T10:15:42+02:00", "to": "2026-09-22T10:15:42+02:00" }
  },
  "filters": { "bots": false },
  "interval": "hour",
  "clicks": 3308,
  "previous_clicks": 2977,
  "delta_pct": 11.1,
  "points": [
    { "at": "2026-09-22T08:00:00Z", "clicks": 131, "uniques": 97 },
    { "at": "2026-09-22T09:00:00Z", "clicks": 158, "uniques": 120 }
  ]
}
GET /stats/referrers

Iš kur gaunami paspaudimai

Svetainės, sulaukusios daugiausia paspaudimų, kiekviena iš jų turi savo dalį, ir paspaudimai be persiuntimo URL (direct).

Parametrai
  • period string užklausos eilutę

    Laikotarpis: 24h, 7d (numatytasis), 30d, 90d, 1y, all. Žr. „Statistikos laikotarpiai“.

  • from string užklausos eilutę

    Lango pradžia, kaip alternatyva period: ISO 8601 data arba laikas.

  • to string užklausos eilutę

    Lango pabaiga (numatytasis: dabartinis laikas).

  • domain string užklausos eilutę

    Tik šis domenas, nurodytas pagrindinio kompiuterio pavadinimu (pvz., lnkz.li). Turi būti vienas iš jūsų: žr. GET /domains.

  • tag string užklausos eilutę

    Tik nuorodos su šia žyma.

  • bots string užklausos eilutę

    1 taip pat skaičiuoti robotų paspaudimus.

  • limit integer užklausos eilutę

    Kiek eilučių sąraše, nuo 1 iki 50 (numatytasis 10).

Prašymas
curl "https://pik.li/api/v1/stats/referrers?period=30d&limit=5" \
  -H "Authorization: Bearer $PIKLI_KEY"
Atsakyti · 200
{
  "window": {
    "from": "2026-09-17T00:00:00+02:00",
    "to": "2026-09-23T10:15:42+02:00",
    "days": 7,
    "interval": "day",
    "period": "7d",
    "clamped": false,
    "retention_days": 730,
    "previous": { "from": "2026-09-10T00:00:00+02:00", "to": "2026-09-17T00:00:00+02:00" }
  },
  "filters": { "bots": false },
  "clicks": 21480,
  "direct": 8740,
  "referrers": [
    { "referrer": "instagram.com", "clicks": 5210, "share": 24.3 },
    { "referrer": "google.com", "clicks": 3011, "share": 14.0 }
  ]
}
GET /stats/countries

Šalys ir miestai

Šalys kaip ISO kodai, su jų dalimi; cities galima su planais, kuriuose yra visa statistika.

Parametrai
  • period string užklausos eilutę

    Laikotarpis: 24h, 7d (numatytasis), 30d, 90d, 1y, all. Žr. „Statistikos laikotarpiai“.

  • from string užklausos eilutę

    Lango pradžia, kaip alternatyva period: ISO 8601 data arba laikas.

  • to string užklausos eilutę

    Lango pabaiga (numatytasis: dabartinis laikas).

  • domain string užklausos eilutę

    Tik šis domenas, nurodytas pagrindinio kompiuterio pavadinimu (pvz., lnkz.li). Turi būti vienas iš jūsų: žr. GET /domains.

  • tag string užklausos eilutę

    Tik nuorodos su šia žyma.

  • bots string užklausos eilutę

    1 taip pat skaičiuoti robotų paspaudimus.

  • limit integer užklausos eilutę

    Kiek eilučių sąraše, nuo 1 iki 50 (numatytasis 10).

Prašymas
curl "https://pik.li/api/v1/stats/countries?period=30d" \
  -H "Authorization: Bearer $PIKLI_KEY"
Atsakyti · 200
{
  "window": {
    "from": "2026-09-17T00:00:00+02:00",
    "to": "2026-09-23T10:15:42+02:00",
    "days": 7,
    "interval": "day",
    "period": "7d",
    "clamped": false,
    "retention_days": 730,
    "previous": { "from": "2026-09-10T00:00:00+02:00", "to": "2026-09-17T00:00:00+02:00" }
  },
  "filters": { "bots": false },
  "clicks": 21480,
  "countries": [
    { "country": "IT", "clicks": 12877, "share": 59.9 },
    { "country": "DE", "clicks": 2630, "share": 12.2 }
  ],
  "cities": [
    { "city": "Milano", "clicks": 3120, "share": 14.5 },
    { "city": "Roma", "clicks": 2210, "share": 10.3 }
  ]
}
GET /stats/devices

Įrenginiai, naršyklės, sistemos ir kalbos

Keturi sąrašai viename skambutyje, kiekvienas su paspaudimais ir bendro skaičiaus dalimi.

Parametrai
  • period string užklausos eilutę

    Laikotarpis: 24h, 7d (numatytasis), 30d, 90d, 1y, all. Žr. „Statistikos laikotarpiai“.

  • from string užklausos eilutę

    Lango pradžia, kaip alternatyva period: ISO 8601 data arba laikas.

  • to string užklausos eilutę

    Lango pabaiga (numatytasis: dabartinis laikas).

  • domain string užklausos eilutę

    Tik šis domenas, nurodytas pagrindinio kompiuterio pavadinimu (pvz., lnkz.li). Turi būti vienas iš jūsų: žr. GET /domains.

  • tag string užklausos eilutę

    Tik nuorodos su šia žyma.

  • bots string užklausos eilutę

    1 taip pat skaičiuoti robotų paspaudimus.

  • limit integer užklausos eilutę

    Kiek eilučių sąraše, nuo 1 iki 50 (numatytasis 10).

Prašymas
curl "https://pik.li/api/v1/stats/devices?period=30d" \
  -H "Authorization: Bearer $PIKLI_KEY"
Atsakyti · 200
{
  "window": {
    "from": "2026-09-17T00:00:00+02:00",
    "to": "2026-09-23T10:15:42+02:00",
    "days": 7,
    "interval": "day",
    "period": "7d",
    "clamped": false,
    "retention_days": 730,
    "previous": { "from": "2026-09-10T00:00:00+02:00", "to": "2026-09-17T00:00:00+02:00" }
  },
  "filters": { "bots": false },
  "clicks": 21480,
  "devices": [{ "device": "mobile", "clicks": 14002, "share": 65.2 }, { "device": "desktop", "clicks": 7100, "share": 33.1 }],
  "browsers": [{ "browser": "Chrome", "clicks": 9406, "share": 43.8 }],
  "os": [{ "os": "iOS", "clicks": 7340, "share": 34.2 }],
  "languages": [{ "language": "it", "clicks": 12690, "share": 59.1 }]
}
GET /stats/top

Daugiausiai spustelėtos nuorodos

Daugiausiai spustelėtos nuorodos lange, kiekviena su clicks_in_window ir uniques_in_window.

Parametrai
  • period string užklausos eilutę

    Laikotarpis: 24h, 7d (numatytasis), 30d, 90d, 1y, all. Žr. „Statistikos laikotarpiai“.

  • from string užklausos eilutę

    Lango pradžia, kaip alternatyva period: ISO 8601 data arba laikas.

  • to string užklausos eilutę

    Lango pabaiga (numatytasis: dabartinis laikas).

  • domain string užklausos eilutę

    Tik šis domenas, nurodytas pagrindinio kompiuterio pavadinimu (pvz., lnkz.li). Turi būti vienas iš jūsų: žr. GET /domains.

  • tag string užklausos eilutę

    Tik nuorodos su šia žyma.

  • bots string užklausos eilutę

    1 taip pat skaičiuoti robotų paspaudimus.

  • limit integer užklausos eilutę

    Kiek eilučių sąraše, nuo 1 iki 50 (numatytasis 10).

Prašymas
curl "https://pik.li/api/v1/stats/top?period=7d&limit=10" \
  -H "Authorization: Bearer $PIKLI_KEY"
Atsakyti · 200
{
  "window": {
    "from": "2026-09-17T00:00:00+02:00",
    "to": "2026-09-23T10:15:42+02:00",
    "days": 7,
    "interval": "day",
    "period": "7d",
    "clamped": false,
    "retention_days": 730,
    "previous": { "from": "2026-09-10T00:00:00+02:00", "to": "2026-09-17T00:00:00+02:00" }
  },
  "filters": { "bots": false },
  "clicks": 21480,
  "links": [{
    "id": 4821,
    "short_url": "https://lnkz.li/spring-sale",
    "slug": "spring-sale",
    "domain": "lnkz.li",
    "target_url": "https://example.com/shop/spring-sale",
    "target_host": "example.com",
    "title": "Spring sale",
    "description": null,
    "tags": ["promo", "newsletter"],
    "status": "active",
    "moderation": "allowed",
    "active": true,
    "expired": false,
    "password_protected": false,
    "clicks": 1284,
    "unique_clicks": 902,
    "last_clicked_at": "2026-09-23T09:58:12.431+02:00",
    "expires_at": null,
    "max_clicks": null,
    "disabled_reason": null,
    "utm": { "source": "newsletter", "medium": "email", "campaign": "spring" },
    "preview_url": "https://lnkz.li/spring-sale+",
    "qr_url": "https://pik.li/api/v1/links/4821/qr",
    "created_at": "2026-09-01T08:30:05.117+02:00",
    "updated_at": "2026-09-01T08:30:05.117+02:00",
    "clicks_in_window": 311,
    "uniques_in_window": 240
  }]
}

Žymos

Etiketės, kurias dedate ant nuorodų.

GET /tags

Jūsų žymos

Visos jūsų nuorodose naudojamos žymos, į jas nukreipiančių nuorodų skaičius ir jų surinkti paspaudimai, pradedant nuo dažniausiai naudojamų.

Parametrai
  • q string užklausos eilutę

    Tik žymos, kuriose yra šis tekstas.

Prašymas
curl https://pik.li/api/v1/tags \
  -H "Authorization: Bearer $PIKLI_KEY"
Atsakyti · 200
{
  "tags": [
    { "name": "promo", "links": 214, "clicks": 90211 },
    { "name": "newsletter", "links": 58, "clicks": 20473 }
  ],
  "total": 2
}
Klaidos Tik tie, kuriuos gali grąžinti bet kuris galutinis taškas.

Domenai

Kur gali gyventi jūsų trumpos nuorodos.

GET /domains

Domenai, kuriuos galite naudoti

pik.li domenai, kuriuos leidžia jūsų planas, ir patvirtinti pasirinktiniai domenai, kuris yra numatytasis ir kiek tinkintų domenų leidžia jūsų planas. Kurdami nuorodą, nurodykite hostname kaip domain.

Prašymas
curl https://pik.li/api/v1/domains \
  -H "Authorization: Bearer $PIKLI_KEY"
Atsakyti · 200
{
  "domains": [
    { "id": 1, "hostname": "lnkz.li", "base_url": "https://lnkz.li", "kind": "system", "min_plan": "free", "status": "active", "verified": true, "default": true },
    { "id": 318, "hostname": "go.example.com", "base_url": "https://go.example.com", "kind": "custom", "min_plan": "free", "status": "active", "verified": true, "default": false }
  ],
  "default": "lnkz.li",
  "custom_domains": { "used": 1, "limit": 3 }
}
Klaidos Tik tie, kuriuos gali grąžinti bet kuris galutinis taškas.

WebhookasPlanai: Premium · Verslas

Tvarkykite webhookus iš savo kodo, kurį kitu atveju sukonfigūruotumėte puslapyje „User Area Webhooks“. Kaip veikia pristatymas, paaiškinta toliau, skiltyje Webhooks.

GET /webhooks

Išvardykite savo webhookus

Jūsų webhookai ir įvykiai, kuriuose galite prisiregistruoti. Paslaptis po sukūrimo neberodoma.

Prašymas
curl https://pik.li/api/v1/webhooks \
  -H "Authorization: Bearer $PIKLI_KEY"
Atsakyti · 200
{
  "webhooks": [{
    "id": 17,
    "url": "https://example.com/hooks/pikli",
    "events": ["link.created", "link.disabled"],
    "active": true,
    "failures_count": 0,
    "last_delivered_at": "2026-09-22T18:04:11.520+02:00",
    "created_at": "2026-09-10T11:20:33.004+02:00",
    "updated_at": "2026-09-10T11:20:33.004+02:00",
    "signature_header": "X-Pikli-Signature"
  }],
  "events": ["link.created", "link.clicked", "link.disabled", "link.deleted"]
}
GET /webhooks/:id

Skaitykite „Webhook“.

Webhook su paskutiniais 20 pristatymų ir būsena, su kuria jūsų serveris atsakė į kiekvieną.

Parametrai
  • id integer pakeliui privalomas

    „Webhook“ id.

Prašymas
curl https://pik.li/api/v1/webhooks/17 \
  -H "Authorization: Bearer $PIKLI_KEY"
Atsakyti · 200
{
  "id": 17,
  "url": "https://example.com/hooks/pikli",
  "events": ["link.created", "link.disabled"],
  "active": true,
  "failures_count": 0,
  "last_delivered_at": "2026-09-22T18:04:11.520+02:00",
  "created_at": "2026-09-10T11:20:33.004+02:00",
  "updated_at": "2026-09-10T11:20:33.004+02:00",
  "signature_header": "X-Pikli-Signature",
  "deliveries": [
    { "id": 903, "event": "ping", "response_code": 200, "attempts": 1, "delivered_at": "2026-09-22T18:04:11.520+02:00", "created_at": "2026-09-22T18:04:11.520+02:00" }
  ]
}
POST /webhooks

Sukurkite webhooką

Atsakyme yra secret, naudojamas pristatymams pasirašyti, tik šį kartą: išsaugokite jį dabar.

Parametrai
  • url string JSON korpusas privalomas

    Adresas, kuriuo priimami pristatymai, http:// arba https://, pasiekiamas iš interneto.

  • events array | string JSON korpusas

    Įvykiai, kuriuos reikia gauti, kaip masyvą arba atskirti kableliais. Jei jų nenurodysite: visus. Žiūrėkite žemiau esantį įvykių sąrašą.

  • active boolean JSON korpusas

    false, kad sukurtumėte jį pristabdžius. Numatytasis true.

Prašymas
curl -X POST https://pik.li/api/v1/webhooks \
  -H "Authorization: Bearer $PIKLI_KEY" \
  -H "Content-Type: application/json" \
  -d '{"url":"https://example.com/hooks/pikli","events":["link.created","link.disabled"]}'
Atsakyti · 201
{
  "id": 17,
  "url": "https://example.com/hooks/pikli",
  "events": ["link.created", "link.disabled"],
  "active": true,
  "failures_count": 0,
  "last_delivered_at": null,
  "created_at": "2026-09-10T11:20:33.004+02:00",
  "updated_at": "2026-09-10T11:20:33.004+02:00",
  "signature_header": "X-Pikli-Signature",
  "secret": "ec307f56cfac71856a10d641eee7dd58e0eb8286"
}
PATCH /webhooks/:id

Redaguoti „Webhook“.

Siųskite tik tai, kas pasikeitė: adresą, įvykius arba active, kad pristabdytumėte ir atnaujintumėte pristatymą.

Taip pat galite naudoti PUT su tais pačiais parametrais.

Parametrai
  • id integer pakeliui privalomas

    „Webhook“ id.

  • url string JSON korpusas

    Naujas adresas.

  • events array | string JSON korpusas

    Naujas renginių sąrašas; jis negali būti tuščias.

  • active boolean JSON korpusas

    false sustabdo pristatymus, true juos atnaujina.

Prašymas
curl -X PATCH https://pik.li/api/v1/webhooks/17 \
  -H "Authorization: Bearer $PIKLI_KEY" \
  -H "Content-Type: application/json" \
  -d '{"active":false}'
Atsakyti · 200
{
  "id": 17,
  "url": "https://example.com/hooks/pikli",
  "events": ["link.created", "link.disabled"],
  "active": false,
  "failures_count": 0,
  "last_delivered_at": "2026-09-22T18:04:11.520+02:00",
  "created_at": "2026-09-10T11:20:33.004+02:00",
  "updated_at": "2026-09-23T10:15:42.118+02:00",
  "signature_header": "X-Pikli-Signature"
}
DELETE /webhooks/:id

Ištrinkite „Webhook“.

Pristatymai sustoja ir jų istorija ištrinama kartu su „Webhook“.

Parametrai
  • id integer pakeliui privalomas

    „Webhook“ id.

Prašymas
curl -X DELETE https://pik.li/api/v1/webhooks/17 \
  -H "Authorization: Bearer $PIKLI_KEY"
Atsakyti · 204
Jokio kūno: valstybės kodas jau viską pasako.
POST /webhooks/:id/test

Siųsti bandomąjį pristatymą

Eilė ping prie webhook adreso, pasirašytas kaip ir kiekvienas pristatymas: greičiausias būdas patikrinti parašą patvirtinantį kodą. Netrukus jis išvyksta ir pasirodo GET /webhooks/:id.

Parametrai
  • id integer pakeliui privalomas

    „Webhook“ id.

Prašymas
curl -X POST https://pik.li/api/v1/webhooks/17/test \
  -H "Authorization: Bearer $PIKLI_KEY"
Atsakyti · 202
{
  "queued": true,
  "event": "ping",
  "webhook_id": 17
}

WebhookasPlanai: Premium · Verslas

Webhook yra adresas jūsų serveryje, kuris pik.li iškviečiamas su POST, kai kas nors nutinka jūsų paskyroje. Jį galite sukurti „User Area Webhook“ puslapyje arba naudodami „webhook“ galinius taškus.

Renginiai

ping
Bandomasis pristatymas, išsiųstas, kai naudotojo srityje paspausite Testą arba paskambinsite POST /webhooks/:id/test.
link.created
Sukurta nuoroda iš vartotojo srities arba iš API. netrukus
link.clicked
Kažkas spustelėjo vieną iš jūsų nuorodų. netrukus
link.disabled
Nuorodą išjungėte jūs arba moderuojate. netrukus
link.deleted
Nuoroda buvo ištrinta. netrukus
Nuorodų įvykius jau galima pasirinkti webhook, tačiau jų pristatymas dar nepradėtas: kol kas pik.li siunčia tik bandomąjį ping.

Kaip atliekamas pristatymas

ĮRAŠAS, kurio JSON turinys iš trijų laukų: event, įvykio pavadinimas; created_at, kada jis buvo išsiųstas; data, išsami informacija apie įvykį. Jis pateikiamas su šiomis antraštėmis:

Ką gauna jūsų serveris
POST /hooks/pikli HTTP/1.1
Content-Type: application/json
X-Pikli-Event: ping
X-Pikli-Signature: sha256=bdaf35d42413498dab7fea8be1f292c36b690152e5ec7d66e6dd2c2cd0b2d61c

{"event":"ping","created_at":"2026-09-23T10:15:42+02:00","data":{"message":"pik.li webhook test","at":"2026-09-23T10:15:42+02:00","via":"api"}}
Content-Type
visada programa / json.
X-Pikli-Event
įvykio pavadinimas, toks pat kaip turinys: jis leidžia surūšiuoti užklausą prieš ją skaitant.
X-Pikli-Signature
sha256= po jo rašomas kūno parašas, kaip aprašyta toliau.

Patikrinkite parašą

Kiekvienas pristatymas yra pasirašytas su jo „webhook“ paslaptimi, kurią gaunate tik vieną kartą, kai jį sukuriate. Antraštėje X-Pikli-Signature yra sha256=, po kurio seka neapdorotas turinys HMAC-SHA256 šešioliktaine forma. Apskaičiuokite tą patį gautų baitų HMAC – prieš dekoduodami juos kaip JSON, kuris juos pakeistų – ir palyginkite dvi eilutes pastoviu laiku. Jei jie skiriasi, atsakykite 401 ir nekreipkite dėmesio į užklausą.

Norėdami patikrinti savo kodą: naudojant paslaptį ec307f56cfac71856a10d641eee7dd58e0eb8286 iš aukščiau pateikto pavyzdžio, čia rodomas pristatymo tekstas sukuria būtent tokį parašą, kuris rodomas jo antraštėje.

Node.js
import crypto from "node:crypto";
import express from "express";

const app = express();

app.post("/hooks/pikli", express.raw({ type: "application/json" }), (req, res) => {
  const expected = "sha256=" + crypto
    .createHmac("sha256", process.env.PIKLI_WEBHOOK_SECRET)
    .update(req.body)
    .digest("hex");
  const received = req.get("X-Pikli-Signature") || "";
  const valid = received.length === expected.length &&
    crypto.timingSafeEqual(Buffer.from(received), Buffer.from(expected));
  if (!valid) return res.sendStatus(401);

  const event = JSON.parse(req.body);
  res.sendStatus(204);
});
Python
import hashlib, hmac, os
from flask import Flask, abort, request

app = Flask(__name__)
SECRET = os.environ["PIKLI_WEBHOOK_SECRET"].encode()

@app.post("/hooks/pikli")
def pikli_hook():
    body = request.get_data()
    expected = "sha256=" + hmac.new(SECRET, body, hashlib.sha256).hexdigest()
    if not hmac.compare_digest(expected, request.headers.get("X-Pikli-Signature", "")):
        abort(401)
    event = request.get_json()
    return "", 204
Ruby
class PikliHooksController < ActionController::API
  def create
    body = request.raw_post
    expected = "sha256=" + OpenSSL::HMAC.hexdigest("SHA256", ENV.fetch("PIKLI_WEBHOOK_SECRET"), body)
    received = request.headers["X-Pikli-Signature"].to_s
    return head(:unauthorized) unless ActiveSupport::SecurityUtils.secure_compare(expected, received)

    event = JSON.parse(body)
    head :no_content
  end
end
PHP
<?php
$body = file_get_contents('php://input');
$expected = 'sha256=' . hash_hmac('sha256', $body, getenv('PIKLI_WEBHOOK_SECRET'));
$received = $_SERVER['HTTP_X_PIKLI_SIGNATURE'] ?? '';
if (!hash_equals($expected, $received)) {
    http_response_code(401);
    exit;
}
$event = json_decode($body, true);
http_response_code(204);

Atsakymai, nauji bandymai ir nesėkmės

  • Atsakykite kuo greičiau naudodami bet kokią būseną 2xx ir palikite lėtas operacijas vėliau.
  • Jei pik.li tiesiog negali pasiekti jūsų adreso – tinklo klaida, prisijungimas atmestas, neviešas adresas – bandoma pristatyti iki 5 kartų su vis ilgesnėmis pauzėmis: paskutinis bandymas ateina maždaug šešias minutes po pirmojo.
  • Atsakymas, kurio būsena 400 arba aukštesnė, registruojamas ir nekartojamas. Padidina „Webhook“ failures_count vienu, o po pirmojo sėkmingo pristatymo grįžta į nulį.
  • Paskutinius 20 pristatymų, kurių būsena atsakė jūsų serveris, galite rasti GET /webhooks/:id ir naudotojo srities Webhook puslapyje.
  • Adresas turi būti viešas: pik.li neskambina į privačius ar vietinius tinklus. Naudokite https://, todėl siuntiniai keliauja šifruoti.

OpenAPI

Ta pati nuoroda mašininio skaitomu formatu paskelbta /openapi.json (OpenAPI 3.1). Importuokite jį į Postman, Insomnia ar Bruno arba sugeneruokite klientą naudodami openapi generatorių.

Ar kažko trūksta, ar kažkas neveikia, kaip nurodyta šiame puslapyje? Rašykite adresu [email protected].