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"Signalai jūsų sistemose: skaitykite juos per REST API arba gaukite webhook'u tą pačią minutę, kai žvalgas juos randa.
https://verslosignalai.lt/api/public/v1Programėlėje atidarykite Nustatymai → API ir webhook'ai ir spauskite „Sukurti raktą“. Raktas rodomas vieną kartą — išsisaugokite jį.
curl "https://verslosignalai.lt/api/public/v1/me" \
-H "Authorization: Bearer $SIGNALAI_API_KEY"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'ą.
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ų.
Authorization: Bearer vs_live_…403 plan_required ir vėl veikia, kai planas atnaujinamas.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.
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.
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.
Klaidos atsakymas visada turi message. Prieigos klaidos turi ir pastovų code — tikrinkite jį, ne tekstą.
| Būsena | code | Kada |
|---|---|---|
| 401 | missing_api_key | Nėra antraštės Authorization arba raktas neprasideda vs_live_. |
| 401 | invalid_api_key | Raktas neteisingas arba ištrintas. |
| 403 | plan_required | Paskyra 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"
}Kam priklauso raktas ir kokiame plane yra paskyra.
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"Paskyros žvalgai. Kuriami ir keičiami programėlėje; per API — tik skaitomi.
GET/agents
Visi paskyros žvalgai, seniausi pirmi. Nepuslapiuojama.
curl "https://verslosignalai.lt/api/public/v1/agents" \
-H "Authorization: Bearer $SIGNALAI_API_KEY"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"Tai, ką rado jūsų žvalgai. Grąžinama tik tai, ką rodo ir programėlė.
GET/signals
Naujausi pirmi. Puslapiuojama žymekliu: naujiems signalams atkeliavus, sąrašas nepasislenka. Kitam puslapiui perduokite meta.next_cursor.
| Laukas | Tipas | Aprašymas |
|---|---|---|
agent_id | string | Tik šio žvalgo signalai. |
created_since | ISO 8601 | Tik sukurti nuo šio momento (imtinai), pvz. 2026-10-03T07:41:12Z. |
unread | boolean | true — tik neperskaityti. |
per_page | integer | Įrašų puslapyje: 1–100, numatyta 25. |
cursor | string | Reikš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"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"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"Viešieji duomenys, kuriuos stebi žvalgai: naujos įmonės, viešieji pirkimai ir finansavimo kvietimai. Tie patys įrašai, kaip skiltyje „Resursai“.
GET/companies
Naujai įregistruotos Lietuvos įmonės, naujausios pirmos.
| Laukas | Tipas | Aprašymas |
|---|---|---|
search | string | Pavadinimas arba įmonės kodas. |
industry | string | EVRK (NACE) kodas, pvz. 43.32. |
region | string | Regiono kodas, pvz. KN (Kaunas). |
legal_form | string | Teisinės formos kodas, pvz. UAB. |
page | integer | Puslapio numeris, nuo 1. |
per_page | integer | Į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"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"GET/tenders
CVP IS skelbimai, naujausi pirmi.
| Laukas | Tipas | Aprašymas |
|---|---|---|
search | string | Pavadinimas arba perkančioji organizacija. |
open | boolean | true — tik tie, kuriems dar galima teikti pasiūlymus. |
page | integer | Puslapio numeris, nuo 1. |
per_page | integer | Įrašų puslapyje: 1–100, numatyta 25. |
curl "https://verslosignalai.lt/api/public/v1/tenders?open=true" \
-H "Authorization: Bearer $SIGNALAI_API_KEY"GET/tenders/{id}
Pirkimas pagal CVP IS numerį.
curl "https://verslosignalai.lt/api/public/v1/tenders/7841203" \
-H "Authorization: Bearer $SIGNALAI_API_KEY"GET/funding-calls
ES ir nacionalinės paramos kvietimai, naujausi pirmi.
| Laukas | Tipas | Aprašymas |
|---|---|---|
search | string | Žodis kvietimo pavadinime ar aprašyme. |
status | string | open, planned, upcoming arba closed. |
page | integer | Puslapio numeris, nuo 1. |
per_page | integer | Įrašų puslapyje: 1–100, numatyta 25. |
curl "https://verslosignalai.lt/api/public/v1/funding-calls?status=open" \
-H "Authorization: Bearer $SIGNALAI_API_KEY"GET/funding-calls/{id}
Vienas finansavimo kvietimas.
curl "https://verslosignalai.lt/api/public/v1/funding-calls/01K6N1B7C4D9E2F5G8H1J4K7M0" \
-H "Authorization: Bearer $SIGNALAI_API_KEY"Tas pats objektas grąžinamas per GET /signals ir siunčiamas webhook'u.
| Laukas | Tipas | Aprašymas |
|---|---|---|
id | string | Signalo ID (ULID). Nesikeičia. |
code | string | Trumpas kodas, kurį mato žmonės, pvz. SIG-H8J9KT. |
title | string | Antraštė, kaip laiške ir programėlėje. |
summary | string | null | Vienas ar du sakiniai apie radinį. |
created_at | ISO 8601 | Kada signalas sukurtas. |
is_read | boolean | Ar atidarytas programėlėje arba pažymėtas per API. |
feedback | string | null | Jūsų įvertinimas programėlėje: useful, not_useful arba null. |
agent | object | null | Žvalgas, radęs signalą: id, type, name. |
source | object | null | Apie ką signalas: type (company, tender, tender_award, funding_call, funding_recipient) ir id, kuriuo įrašą galima gauti iš registrų. |
data | object | Žvalgo surinkti faktai: įmonė, kontaktai, vertė, terminai ir why_matched — kodėl signalas atrinktas. Raktai priklauso nuo žvalgo tipo. |
url | string | Nuoroda į signalą programėlėje. |
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.
| Laukas | Tipas | Aprašymas |
|---|---|---|
X-Signalai-Event | antraštė | signal.created arba ping (bandomasis iš nustatymų). |
X-Signalai-Delivery | antraštė | Įvykio ID — tas pats kaip id kūne. Kartojant nesikeičia. |
X-Signalai-Timestamp | antraštė | Išsiuntimo laikas, Unix sekundės. |
X-Signalai-Signature | antraš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"
}
}2xx per 10 s. Pirma atsakykite, tada apdorokite — ilgas darbas eilėje, ne užklausoje.id.410 Gone išjungia adresą iš karto. Po 20 nepavykusių siuntimų iš eilės adresą išjungiame patys; įjungsite nustatymuose.https:// ir pasiekiamas viešame internete. Peradresavimų nesekame. Siuntimų istoriją ir atsakymų kodus matysite nustatymuose.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
});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 "https://verslosignalai.lt/api/public/v1/signals?created_since=2026-10-03T07:41:12Z&per_page=100" \
-H "Authorization: Bearer $SIGNALAI_API_KEY"v1 versija: paskyra, žvalgai, signalai, registrai ir webhook'ai.Trūksta ko nors jūsų integracijai? Parašykite mums.