Praleisti į turinį

API dokumentacija

Signalai jūsų sistemose: skaitykite juos per REST API arba gaukite webhook'u tą pačią minutę, kai žvalgas juos randa.

Bazinis adresas
https://verslosignalai.lt/api/public/v1
Formatas
JSON per HTTPS

Kaip pradėti?

  1. Sukurkite raktą

    Programėlėje atidarykite Nustatymai → API ir webhook'ai ir spauskite „Sukurti raktą“. Raktas rodomas vieną kartą — išsisaugokite jį.

  2. Patikrinkite jį

    cURL
    curl "https://verslosignalai.lt/api/public/v1/me" \
      -H "Authorization: Bearer $SIGNALAI_API_KEY"
  3. Paimkite signalus

    cURL
    curl "https://verslosignalai.lt/api/public/v1/signals?per_page=10" \
      -H "Authorization: Bearer $SIGNALAI_API_KEY"

    Norite, kad signalai atkeliautų patys? Užregistruokite webhook'ą.

Kaip prisijungti?

Kiekvienoje užklausoje siųskite API raktą antraštėje Authorization. Raktai prasideda vs_live_; vienai paskyrai galima iki 10 raktų — po vieną kiekvienai sistemai, kad nereikalingą galėtumėte ištrinti nepaliesdami kitų.

Antraštė
Authorization: Bearer vs_live_…
  • Raktas suteikia prieigą prie jūsų signalų — laikykite jį serveryje, ne naršyklėje ar mobiliojoje programėlėje.
  • Raktas veikia tik šiame API. Juo negalima prisijungti prie programėlės, keisti nustatymų ar žvalgų.
  • Pasibaigus mokamam planui raktai grąžina 403 plan_required ir vėl veikia, kai planas atnaujinamas.

Kiek užklausų galima siųsti?

Iki 120 užklausų per minutę vienam raktui. Kiek liko, rodo antraštės X-RateLimit-Limit ir X-RateLimit-Remaining. Viršijus limitą gausite 429 ir antraštę Retry-After — tiek sekundžių palaukite.

Puslapiavimas

Sąrašai grąžina iki 25 įrašų; per_page leidžia iki 100. Signalai puslapiuojami žymekliu: kitam puslapiui perduokite meta.next_cursor kaip cursor; kai jis null, įrašų nebeliko. Registrai puslapiuojami numeriais: page, o meta.total ir meta.last_page rodo, kiek jų iš viso.

Versijos

Adrese esanti v1 nesikeis taip, kad sugadintų jūsų integraciją: galime pridėti naujų laukų ir galinių taškų, bet nepervadinsime ir nepašalinsime esamų. Jūsų kodas turėtų ignoruoti laukus, kurių nepažįsta.

Ką reiškia klaidos?

Klaidos atsakymas visada turi message. Prieigos klaidos turi ir pastovų code — tikrinkite jį, ne tekstą.

Klaidų kodai
BūsenacodeKada
401missing_api_keyNėra antraštės Authorization arba raktas neprasideda vs_live_.
401invalid_api_keyRaktas neteisingas arba ištrintas.
403plan_requiredPaskyra nemokamame plane.
404—Įrašo nėra arba jis priklauso kitai paskyrai.
422—Netinkamas parametras; kuris — nurodyta lauke errors.
429—Viršytas užklausų limitas.
{
  "message": "API raktas neteisingas arba atšauktas.",
  "code": "invalid_api_key"
}

Paskyra

Kam priklauso raktas ir kokiame plane yra paskyra.

Patikrinti raktą

GET/me

Pirmoji užklausa, kurią verta atlikti: grąžina paskyrą, planą ir naudojamą raktą.

curl "https://verslosignalai.lt/api/public/v1/me" \
  -H "Authorization: Bearer $SIGNALAI_API_KEY"

Žvalgai

Paskyros žvalgai. Kuriami ir keičiami programėlėje; per API — tik skaitomi.

Žvalgų sąrašas

GET/agents

Visi paskyros žvalgai, seniausi pirmi. Nepuslapiuojama.

curl "https://verslosignalai.lt/api/public/v1/agents" \
  -H "Authorization: Bearer $SIGNALAI_API_KEY"

Vienas žvalgas

GET/agents/{id}

Žvalgas pagal ID. Kito vartotojo žvalgui — 404.

curl "https://verslosignalai.lt/api/public/v1/agents/01K5ZR2W8E3N6P1Q4S7T0V3X6Y" \
  -H "Authorization: Bearer $SIGNALAI_API_KEY"

Signalai

Tai, ką rado jūsų žvalgai. Grąžinama tik tai, ką rodo ir programėlė.

Signalų sąrašas

GET/signals

Naujausi pirmi. Puslapiuojama žymekliu: naujiems signalams atkeliavus, sąrašas nepasislenka. Kitam puslapiui perduokite meta.next_cursor.

Signalų sąrašas: parametrai
LaukasTipasAprašymas
agent_idstringTik šio žvalgo signalai.
created_sinceISO 8601Tik sukurti nuo šio momento (imtinai), pvz. 2026-10-03T07:41:12Z.
unreadbooleantrue — tik neperskaityti.
per_pageintegerĮrašų puslapyje: 1–100, numatyta 25.
cursorstringReikšmė iš ankstesnio atsakymo meta.next_cursor.
curl "https://verslosignalai.lt/api/public/v1/signals?created_since=2026-10-03T00:00:00Z&per_page=50" \
  -H "Authorization: Bearer $SIGNALAI_API_KEY"

Vienas signalas

GET/signals/{id}

Signalas pagal ID — tas pats objektas, kurį gauna webhook'as.

curl "https://verslosignalai.lt/api/public/v1/signals/01K6Q3M9V2C8D4E5F6G7H8J9KT" \
  -H "Authorization: Bearer $SIGNALAI_API_KEY"

Pažymėti perskaitytu

POST/signals/{id}/read

Tas pats, kas atidaryti signalą programėlėje. Kartojant nieko nekeičia. Atsakymas — 204 be turinio.

curl -X POST "https://verslosignalai.lt/api/public/v1/signals/01K6Q3M9V2C8D4E5F6G7H8J9KT/read" \
  -H "Authorization: Bearer $SIGNALAI_API_KEY"

Registrai

Viešieji duomenys, kuriuos stebi žvalgai: naujos įmonės, viešieji pirkimai ir finansavimo kvietimai. Tie patys įrašai, kaip skiltyje „Resursai“.

Naujos įmonės

GET/companies

Naujai įregistruotos Lietuvos įmonės, naujausios pirmos.

Naujos įmonės: parametrai
LaukasTipasAprašymas
searchstringPavadinimas arba įmonės kodas.
industrystringEVRK (NACE) kodas, pvz. 43.32.
regionstringRegiono kodas, pvz. KN (Kaunas).
legal_formstringTeisinės formos kodas, pvz. UAB.
pageintegerPuslapio numeris, nuo 1.
per_pageintegerĮrašų puslapyje: 1–100, numatyta 25.
curl "https://verslosignalai.lt/api/public/v1/companies?industry=43.32&per_page=25" \
  -H "Authorization: Bearer $SIGNALAI_API_KEY"

Įmonė pagal kodą

GET/companies/{code}

Įmonė pagal 9 skaitmenų registro kodą — tą patį, kuris yra signalo source.id.

curl "https://verslosignalai.lt/api/public/v1/companies/306912345" \
  -H "Authorization: Bearer $SIGNALAI_API_KEY"

Viešieji pirkimai

GET/tenders

CVP IS skelbimai, naujausi pirmi.

Viešieji pirkimai: parametrai
LaukasTipasAprašymas
searchstringPavadinimas arba perkančioji organizacija.
openbooleantrue — tik tie, kuriems dar galima teikti pasiūlymus.
pageintegerPuslapio numeris, nuo 1.
per_pageintegerĮrašų puslapyje: 1–100, numatyta 25.
curl "https://verslosignalai.lt/api/public/v1/tenders?open=true" \
  -H "Authorization: Bearer $SIGNALAI_API_KEY"

Pirkimas pagal ID

GET/tenders/{id}

Pirkimas pagal CVP IS numerį.

curl "https://verslosignalai.lt/api/public/v1/tenders/7841203" \
  -H "Authorization: Bearer $SIGNALAI_API_KEY"

Finansavimo kvietimai

GET/funding-calls

ES ir nacionalinės paramos kvietimai, naujausi pirmi.

Finansavimo kvietimai: parametrai
LaukasTipasAprašymas
searchstringŽodis kvietimo pavadinime ar aprašyme.
statusstringopen, planned, upcoming arba closed.
pageintegerPuslapio numeris, nuo 1.
per_pageintegerĮrašų puslapyje: 1–100, numatyta 25.
curl "https://verslosignalai.lt/api/public/v1/funding-calls?status=open" \
  -H "Authorization: Bearer $SIGNALAI_API_KEY"

Kvietimas pagal ID

GET/funding-calls/{id}

Vienas finansavimo kvietimas.

curl "https://verslosignalai.lt/api/public/v1/funding-calls/01K6N1B7C4D9E2F5G8H1J4K7M0" \
  -H "Authorization: Bearer $SIGNALAI_API_KEY"

Kas yra signale?

Tas pats objektas grąžinamas per GET /signals ir siunčiamas webhook'u.

Signalo laukai
LaukasTipasAprašymas
idstringSignalo ID (ULID). Nesikeičia.
codestringTrumpas kodas, kurį mato žmonės, pvz. SIG-H8J9KT.
titlestringAntraštė, kaip laiške ir programėlėje.
summarystring | nullVienas ar du sakiniai apie radinį.
created_atISO 8601Kada signalas sukurtas.
is_readbooleanAr atidarytas programėlėje arba pažymėtas per API.
feedbackstring | nullJūsų įvertinimas programėlėje: useful, not_useful arba null.
agentobject | nullŽvalgas, radęs signalą: id, type, name.
sourceobject | nullApie ką signalas: type (company, tender, tender_award, funding_call, funding_recipient) ir id, kuriuo įrašą galima gauti iš registrų.
dataobjectŽvalgo surinkti faktai: įmonė, kontaktai, vertė, terminai ir why_matched — kodėl signalas atrinktas. Raktai priklauso nuo žvalgo tipo.
urlstringNuoroda į signalą programėlėje.

Kaip gauti signalus iškart?

Užregistruokite savo serverio adresą programėlėje (Nustatymai → API ir webhook'ai). Kai žvalgas randa signalą, tą pačią minutę išsiųsime POST užklausą su signalu. Iki 5 adresų vienai paskyrai; kiekvienas gauna visus paskyros signalus.

Ką atsiunčiame

Webhook antraštės
LaukasTipasAprašymas
X-Signalai-Eventantraštėsignal.created arba ping (bandomasis iš nustatymų).
X-Signalai-DeliveryantraštėĮvykio ID — tas pats kaip id kūne. Kartojant nesikeičia.
X-Signalai-TimestampantraštėIšsiuntimo laikas, Unix sekundės.
X-Signalai-Signatureantraštėsha256= ir HMAC-SHA256 parašas, žr. žemiau.
{
  "id": "01K6Q3MA1B4C7D0E3F6G9H2J5K",
  "type": "signal.created",
  "created_at": "2026-10-03T07:41:13+00:00",
  "data": {
    "id": "01K6Q3M9V2C8D4E5F6G7H8J9KT",
    "code": "SIG-H8J9KT",
    "title": "Rasta nauja įmonė: UAB „Medžio linija“",
    "summary": "Įregistruota 2026-10-01 Kaune. Veikla: staliaus darbai.",
    "created_at": "2026-10-03T07:41:12+00:00",
    "is_read": false,
    "feedback": null,
    "agent": {
      "id": "01K5ZR2W8E3N6P1Q4S7T0V3X6Y",
      "type": "new_company_scout",
      "name": "Statybos įmonės Kaune"
    },
    "source": {
      "type": "company",
      "id": "306912345"
    },
    "data": {
      "company_code": "306912345",
      "company_name": "UAB „Medžio linija“",
      "registered_at": "2026-10-01",
      "stage": "enriched_registration",
      "industry_code": "43.32",
      "industry_name": "Staliaus darbai",
      "region_name": "Kaunas",
      "ceo_name": "Tomas Petraitis",
      "email": "[email protected]",
      "phone": null,
      "why_matched": [
        "Parengties lygis: Profilis identifikuotas",
        "Veiklos sritis: 43.32 Staliaus darbai",
        "Regionas: Kaunas"
      ]
    },
    "url": "https://app.verslosignalai.lt/signals?signal=01K6Q3M9V2C8D4E5F6G7H8J9KT"
  }
}

Kaip atsakyti

  • Atsakykite 2xx per 10 s. Pirma atsakykite, tada apdorokite — ilgas darbas eilėje, ne užklausoje.
  • Gavus kitą atsakymą ar nepavykus prisijungti, kartosime po 1 min., 5 min., 30 min., 2 val., 6 val., 12 val.. Tas pats įvykis gali atkeliauti du kartus — praleiskite jau matytą id.
  • Atsakymas 410 Gone išjungia adresą iš karto. Po 20 nepavykusių siuntimų iš eilės adresą išjungiame patys; įjungsite nustatymuose.
  • Adresas turi būti https:// ir pasiekiamas viešame internete. Peradresavimų nesekame. Siuntimų istoriją ir atsakymų kodus matysite nustatymuose.

Kaip patikrinti, kad užklausa iš mūsų?

Kiekvienas adresas turi savo slaptą raktą (whsec_…), rodomą vieną kartą jį sukūrus. Parašas — HMAC-SHA256(slaptas_raktas, laikas + "." + kūnas) šešioliktainiu pavidalu. Skaičiuokite jį iš nepakeisto kūno, palyginkite pastovaus laiko funkcija ir atmeskite senesnes nei 5 min. užklausas.

import crypto from "node:crypto";
import express from "express";

const app = express();
const SECRET = process.env.SIGNALAI_WEBHOOK_SECRET; // whsec_…

app.post("/signalai", express.raw({ type: "application/json" }), (req, res) => {
  const timestamp = req.get("X-Signalai-Timestamp") ?? "";
  const signature = req.get("X-Signalai-Signature") ?? "";
  const expected = "sha256=" + crypto
    .createHmac("sha256", SECRET)
    .update(`${timestamp}.${req.body}`)
    .digest("hex");

  const fresh = Math.abs(Date.now() / 1000 - Number(timestamp)) < 300;
  const valid = signature.length === expected.length &&
    crypto.timingSafeEqual(Buffer.from(signature), Buffer.from(expected));

  if (!fresh || !valid) return res.sendStatus(400);

  const event = JSON.parse(req.body);
  res.sendStatus(200);  // pirma atsakykite,
  queue.add(event);     // tada apdorokite
});

O jei webhook'o nenaudojate?

Tikrinkite naujus signalus kas kelias minutes. Išsisaugokite naujausio gauto signalo created_at ir kitą kartą perduokite jį kaip created_since. Riba imtinai, todėl tą patį signalą galite gauti dar kartą — praleiskite jau matytus pagal id.

cURL
curl "https://verslosignalai.lt/api/public/v1/signals?created_since=2026-10-03T07:41:12Z&per_page=100" \
  -H "Authorization: Bearer $SIGNALAI_API_KEY"

Kas pasikeitė?

2026-10-04
Pirmoji v1 versija: paskyra, žvalgai, signalai, registrai ir webhook'ai.

Trūksta ko nors jūsų integracijai? Parašykite mums.