API, jonka voit lukea ennen kuin allekirjoitat.
Määrittely on julkinen, pinnat ovat neutraaleja, webhook-allekirjoituksen voi todentaa kymmenellä rivillä omalla puolellasi. Tämä sivu dokumentoi sen, minkä API tarjoaa tänään — ei enempää, ja se on tarkoituksellista: mitä ei ole toimitettu, sitä ei ole dokumentoitu.
- OpenAPI-määrittely luettavissa ilman avainta tai tiliä
- Ei koskaan epäilyttävää liiketoimea koskevaa ilmoitusta, ei koskaan asiakkaan sanatarkkaa sisältöä
- Allekirjoitetut webhookit, todennettavissa Vigilaen ulkopuolella
API itse tarjoilee sen: sopimus, jonka luet, on sama joka ajetaan.
Neutraalit pinnat, rakenteellisesti.
API tarjoaa sen, minkä integraattori voi käyttää koskematta aineistojen salassapitoon: seurantalokin ja laskurit. Valvonta-aineiston sisältö, asiakirjat ja epäilyttäviä liiketoimia koskevat ilmoitukset eivät kulje tämän API:n kautta — kyse ei ole pakettirajoituksesta vaan arkkitehtuurista.
Seurantaloki
Toimiston pKYC-tapahtumat — vanhentunut asiakirja, tosiasiallisen edunsaajan muutos, tarkistettava uudelleenseulonta — neutraalissa muodossa: järjestysnumero, tyyppi, vakavuus, päivämäärä. Vastaukset on aina rajattu 500 tapahtumaan.
Salkkukoosteet
Laskureita, ei koskaan aineistoa: volyymit tiloittain, viiveet, täydellisyysaste. Riittävästi kojelaudan piirtämiseen omaan työkaluusi ilman, että yksikään asiakastieto päätyy siihen.
Kvalifiointi
Ainoa kirjoitusoperaatio: lokitapahtuman kvalifiointi (tila qualifie tai clos, käsittelytapa planifie, traite tai ecarte). Se vaatii kirjoitus-scopen — vähimpien oikeuksien periaate on sääntö, ei valinta.
API on suunniteltu palvelinten väliseksi: selaimeen toimitetussa koodissa oleva avain on julkaistu avain. Anna avain palvelinpuolen välityspalvelimen haltuun, ei koskaan sivun.
Rajatut avaimet, näytetään kerran, peruttavissa heti.
- Muoto. Jokainen avain alkaa etuliitteellä
vgk_ja lähetetään muodossaAuthorization: Bearer vgk_…. Salaisuus näytetään vain luontihetkellä: säilytämme siitä ainoastaan SHA-256-tiivisteen. - Scopet.
lecture(luku, oletus) jaecriture(kirjoitus). Avain ilman vaadittua scopea saa 403-vastauksen — katso #scopes. - Vanheneminen. Vuosi luonnista (näkyy toimiston konsolissa). Vanhentunut avain saa yksiselitteisen 401-vastauksen — katso #cle-expiree.
- Kutsuraja. 60 pyyntöä minuutissa avainta kohti (yliajettavissa avainkohtaisesti). 429-vastaus kantaa
Retry-After-otsakkeen sekä otsakkeetX-RateLimit-Limit / -Remaining / -Reset. - Peruminen. Välitön, konsolista. Avain tunnistetaan tiivisteen perusteella: avaimia ei voi luetella.
Kolme curl-kutsua, ja olet nähnyt kaiken.
# Kunto + avaimen todennus
curl -s https://vigilae.org/api/v1/sante \
-H "Authorization: Bearer vgk_avaimesi"
# Seurantaloki alusta alkaen, 100 tapahtuman sivuina
curl -s "https://vigilae.org/api/v1/evenements?depuisSeq=0&limite=100" \
-H "Authorization: Bearer vgk_avaimesi"
# Kvalifioi tapahtuma 42 (kirjoitus-scope)
curl -s -X POST https://vigilae.org/api/v1/evenements/42/qualifier \
-H "Authorization: Bearer vgk_avaimesi" \
-H "Content-Type: application/json" \
-d '{"statut":"qualifie","disposition":"traite"}'Sivutus yhdellä säännöllä
Anna depuisSeq (ensimmäisellä kutsulla 0) ja limite (enintään 500): vastaus on lajiteltu nousevan seq-arvon mukaan ja palauttaa prochainSeq-arvon, joka annetaan sellaisenaan seuraavalla kutsulla. limite-arvoa lyhyempi sivu tarkoittaa lokin loppua — prochainSeq pysyy silloin vakaana ja toimii pollauskursorina. Ilman depuisSeq-parametria saat ”uusimmat ensin” -näkymän, rajattuna 500 tapahtumaan.
Salkkua kysytään osoitteesta /api/v1/portefeuille/agregats — laskureita, yksi vastaus, ei sivutusta.
Allekirjoitettu, aikaleimattu, toimitettu vähintään kerran.
Lokin pollaamisen sijaan voit vastaanottaa sen: Vigilae toimittaa tapahtumat URL-osoitteeseesi järjestyksessä, enintään 100 tapahtuman erissä. Toimitus on at-least-once — kursori etenee vain 2xx-vastauksestasi, erä kerrallaan — ja idempotenssi perustuu seq-arvoon: käsittele jokainen järjestysnumero täsmälleen kerran (#idempotence).
Allekirjoituksen todentaminen
Jokainen toimitus kantaa otsakkeen x-vigilae-signature: t=<unix>,v1=HMAC-SHA256(secret, t + "." + body). Laske v1 uudelleen vastaanotetusta raa'asta rungosta ja hylkää jokainen yli 5 min vanha aikaleima t: se on toistohyökkäyssuoja. Salaisuuden kierrätyksen aikana otsake kantaa yhden v1-arvon kutakin yhä voimassa olevaa salaisuutta kohti (24 h limitys): hyväksy, jos yksikin täsmää.
// Node — allekirjoituksen todennus (ei riippuvuuksia)
import { createHmac, timingSafeEqual } from 'node:crypto';
export function signatureValid(header, rawBody, secrets, toleranceMs = 5 * 60 * 1000) {
const t = Number((/(?:^|,)t=(\d+)/.exec(header) || [])[1]);
if (!t || Math.abs(Date.now() - t * 1000) > toleranceMs) return false; // toistohyökkäyssuoja
const received = [...header.matchAll(/v1=([0-9a-f]{64})/g)].map((m) => m[1]);
return [].concat(secrets).some((secret) => {
const expected = createHmac('sha256', secret).update(t + '.' + rawBody).digest('hex');
return received.some((r) => r.length === expected.length
&& timingSafeEqual(Buffer.from(r), Buffer.from(expected)));
});
}# Python — sama todennus
import hmac, hashlib, re, time
def signature_valid(header: str, raw_body: bytes, secrets, tolerance_s: int = 300) -> bool:
m = re.search(r"(?:^|,)t=(\d+)", header)
if not m or abs(time.time() - int(m.group(1))) > tolerance_s:
return False # toistohyökkäyssuoja
received = re.findall(r"v1=([0-9a-f]{64})", header)
for secret in secrets:
expected = hmac.new(secret.encode(), m.group(1).encode() + b"." + raw_body,
hashlib.sha256).hexdigest()
if any(hmac.compare_digest(expected, r) for r in received):
return True
return FalseSiirtymävaihe: vanha sha256=HMAC(body)-muoto lähetetään yhä otsakkeessa x-vigilae-signature-legacy jo käytössä oleville vastaanottimille; sen poisto on suunniteltu webhookien v2:n yhteyteen. Uudet vastaanottimet todentavat yllä olevan aikaleimatun mallin, eivät vanhaa.
Kierrätys käynnistetään konsolista (POST /connect/webhook/rotation sovelluksen puolella): 24 h ajan vanha salaisuus allekirjoittaa yhä — aikaa ottaa uusi käyttöön omalla puolellasi ilman katkoikkunaa.
Hiekkalaatikko: pyynnöstä.
Jokaisella API:n virheluokalla on pysyvä osoite virheviitteistössä: #authentification, #scopes, #cloisonnement, #debit, #signature… API:n virhevastaukset osoittavat näihin ankkureihin.
API ei tarjoa epäilyttäviä liiketoimia koskevia ilmoituksia eikä asiakkaan sanatarkkaa sisältöä, jo rakenteensa vuoksi (art. L.561-18, Ranskan CMF). API ei tee yhtäkään valvontapäätöstä: se tarjoaa ja kvalifioi tapahtumia; ammattilainen päättää.