API li tista' taqraha qabel ma tiffirma.
L-ispeċifikazzjoni hija pubblika, il-firma tal-webhooks tista' tiġi vverifikata f'għaxar linji min-naħa tiegħek. Din il-paġna tiddokumenta dak li l-API tesponi llum — xejn aktar, u dan apposta: dak li mhux imwassal mhux dokumentat.
- Speċifikazzjoni OpenAPI li tinqara mingħajr ċavetta u mingħajr kont
- Qatt rapport ta' tranżazzjoni suspettuża, qatt verbatim ta' klijent
- Webhooks iffirmati, verifikabbli barra minn Vigilae
Servuta mill-API stess: il-kuntratt li taqra huwa dak li jaħdem.
Il-perkors sħiħ, u żewġ esklużjonijiet li mhumiex se jinbidlu.
Is-softwer tiegħek jista' jmexxi fajl mill-bidu sat-tmiem: joħloq il-klijent, jiftaħ il-fajl, itella' d-dokumenti, iniedi l-iskrinjar, jiddikjara s-sidien benefiċjarji, jaqra l-klassifikazzjoni tar-riskju u jniżżel il-fajl ta' prova. Żewġ affarijiet qatt mhumiex se jgħaddu minn hemm, u din mhijiex limitazzjoni tal-abbonament: l-ebda rapport ta' tranżazzjoni suspettuża, u l-ebda kliem tal-klijent tiegħek riprodott kelma b'kelma. L-ewwel waħda hija att li l-liġi tirriżerva għall-persuna li tagħmel ir-rapport; it-tieni waħda m'għandhiex postha f'kanal ta' integrazzjoni.
Il-fajl, mill-bidu sat-tmiem
Klijenti, fajls, dokumenti ta' sostenn, skrinjar, sidien benefiċjarji, klassifikazzjoni tar-riskju, fajl ta' prova, verifika tal-integrità. Kull riżorsa għandha l-ambitu tagħha: iċ-ċavetta tiegħek tiftaħ biss dak li tajtha int.
Reġistru tal-avvenimenti u aggregati
L-avvenimenti pKYC tad-ditta — dokument skadut, bidla fis-sid benefiċjarju, skrinjar mill-ġdid li għad irid isir — u kontaturi tal-portafoll għall-pannell ta' kontroll tiegħek. Ir-risposta dejjem limitata fid-daqs, il-kursur stabbli.
Dak li tikteb iġorr isem
Tella' dokument, skrinja, ikkwalifika: kull kitba titlob l-ambitu tagħha u tirreġistra l-operatur. Kwalifikazzjoni anonima tiġi rifjutata — l-integrazzjoni tirreġistra deċiżjoni umana, hi stess ma tieħu l-ebda deċiżjoni.
L-API hija maħsuba server-to-server: ċavetta f'kodiċi mibgħut lill-browser hija ċavetta ppubblikata. Ħalli proxy fuq is-server iżomm iċ-ċavetta, qatt il-paġna.
Ċwievet bi skopijiet definiti, murija darba, revokabbli immedjatament.
- Format. Kull ċavetta tibda b'
vgk_u tintbagħat bħalaAuthorization: Bearer vgk_…. Is-sigriet jintwera biss mal-ħolqien: aħna ma nżommu xejn ħlief id-digest SHA-256 tiegħu. - Skopijiet. Ċavetta ġġorr biss l-iskopijiet immarkati meta nħolqot: dawk ġenerali
lecture(qari, l-issettjar awtomatiku) uecriture(kitba), jew skopijiet fini, riżorsa b'riżorsa —clients:,dossiers:,pieces:,criblage:(f'lecturejewecriture),origine-fonds:lecture,journal:lecture.
Il-wirt isegwi s-suffiss, u jimxi f'direzzjoni waħda biss:lectureikopri kull*:lecture, uecriturekull*:ecriture; skop fini ma jiftaħ xejn lil hinn minnu nnifsu.
Sitt skopijiet joħorġu minn din il-koppja u għalhekk ma jintirtu minn ebda ċavetta ġenerali:alertes:qualifier,embed:emettre,adversemedia:consulter,conformite:consulter,dispositif:consulter,integrite:consulter. Kull wieħed jiġi ddelegat għalih, meta tinħoloq iċ-ċavetta.
Ċavetta mingħajr l-iskop meħtieġ tirċievi 403 — ara #scopes. - Skadenza. Sena wara l-ħolqien (viżibbli fil-console tal-uffiċċju). Ċavetta skaduta tirċievi 401 espliċitu — ara #cle-expiree.
Ċavetta tista' wkoll tieqaf tiġi aċċettata qabel din id-data, meta l-API m'għadhiex parti mill-abbonament tal-uffiċċju. Il-waqfien imbagħad jasal mill-inqas 30 jum wara l-ewwel email lill-uffiċċju, fid-data mogħtija mit-tieni email, mibgħuta mill-inqas 7 ijiem qabel. Hekk kif tiġi ffissata, din id-data tidher fil-console tal-uffiċċju (il-qasamcoupure_leta'GET /connect/cles), u kull tweġiba għal sejħa aċċettata tħabbarha fil-headerSunsetsakemm tasal. Wara din id-data, is-sejħa tirċievi l-401 deskritt taħt #authentification, b'"motif": "fin_option_api"; jekk l-API terġa' tiddaħħal fl-abbonament, iċ-ċavetta terġa' tiġi aċċettata, sal-iskadenza tagħha stess.
Ċavetta revokata ma terġax lura mal-API. U meta l-abbonament kollu jiġi sospiż jew jintemm, iċ-ċwievet jieqfu jiġu aċċettati minnufih, mingħajr dan il-perjodu. - Rata. 60 talba/minuta għal kull ċavetta (tista' tinbidel għal kull ċavetta). Risposta 429 iġġorr
Retry-Afteru l-headersX-RateLimit-Limit / -Remaining / -Reset. - Revoka. Immedjata, mill-console. Ir-riżoluzzjoni ssir bid-digest: iċ-ċwievet ma jistgħux jiġu enumerati.
Tliet sejħiet curl u tkun rajt kollox.
# Saħħa + awtentikazzjoni taċ-ċavetta
curl -s https://vigilae.org/api/v1/sante \
-H "Authorization: Bearer vgk_your_key"
# Ġurnal tal-monitoraġġ, mill-bidu, f'paġni ta' 100
curl -s "https://vigilae.org/api/v1/evenements?depuisSeq=0&limite=100" \
-H "Authorization: Bearer vgk_your_key"
# Ikkwalifika l-avveniment 42 (skop tal-kitba)
curl -s -X POST https://vigilae.org/api/v1/evenements/42/qualifier \
-H "Authorization: Bearer vgk_your_key" \
-H "Content-Type: application/json" \
-d '{"statut":"qualifie","disposition":"traite"}'Paġnazzjoni, f'regola waħda
Għaddi depuisSeq (0 fl-ewwel sejħa) u limite (limitat għal 500): it-tweġiba tiġi ordnata skont seq tiela' u tirritorna prochainSeq, x'terġa' tgħaddi kif inhu fis-sejħa li jmiss. Paġna iqsar minn limite tfisser tmiem il-ġurnal — prochainSeq imbagħad jibqa' stabbli u jservi bħala kursur tal-polling. Mingħajr depuisSeq, tikseb il-veduta "l-aktar riċenti l-ewwel", limitata għal 500.
Il-portafoll jiġi kkonsultat fuq /api/v1/portefeuille/agregats — kontaturi, tweġiba waħda, l-ebda paġnazzjoni.
Iffirmati, bit-timbru tal-ħin, imwassla mill-inqas darba.
Minflok ma tistaqsi l-ġurnal bil-polling, irċevih: Vigilae iwassal l-avvenimenti fl-URL tiegħek, fl-ordni, f'lottijiet ta' mhux aktar minn 100. Il-kunsinna hija at-least-once — il-kursur jimxi 'l quddiem biss mat-2xx tiegħek, lott b'lott — u l-idempotenza hija skont seq: ipproċessa kull sekwenza eżattament darba (#idempotence).
Il-verifika tal-firma
Kull kunsinna ġġorr il-header x-vigilae-signature: t=<unix>,v1=HMAC-SHA256(secret, t + "." + body). Erġa' ikkalkula v1 mill-body mhux ipproċessat (raw) li rċevejt, u irrifjuta kull timbru tal-ħin t lil hinn minn 5 min: dan huwa l-anti-replay. Waqt rotazzjoni tas-sigriet il-header iġorr v1 waħda għal kull sigriet għadu validu (sovrapożizzjoni ta' 24 h): aċċetta jekk taqbel kwalunkwe waħda minnhom.
// Node — verifika tal-firma (mingħajr dipendenzi)
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; // anti-replay
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 — l-istess verifika
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 # anti-replay
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 FalseTranżitorju: il-format il-qadim sha256=HMAC(body) għadu jinħareġ fuq x-vigilae-signature-legacy għar-riċevituri diġà fis-seħħ; it-tneħħija tiegħu hija ppjanata mal-webhooks v2. Riċevituri ġodda jivverifikaw l-iskema bit-timbru tal-ħin ta' hawn fuq, mhux dik il-qadima.
Ir-rotazzjoni tinbeda mill-console (POST /connect/webhook/rotation fuq in-naħa tal-applikazzjoni): għal 24 h is-sigriet il-qadim jibqa' jiffirma — żmien biżżejjed biex tiskjera l-ġdid min-naħa tiegħek mingħajr tieqa ta' falliment.
L-istat tal-viġilanza, fl-iskrins tiegħek.
Is-softwer tiegħek diġà joħloq il-fajls permezz tal-API; il-widgets jagħtuh is-superfiċje li kienet nieqsa: turi l-istat ta' viġilanza ta' fajl fl-iskeda tal-klijent tiegħek, mingħajr ma terġa' tibni interfaċċja ta' konformità. Il-fluss isir fi tliet passi — is-server tiegħek joħroġ token qasir, l-URL li tirritorna tidħol f'iframe, il-widget juri. Ma jagħmel xejn ħlief juri: l-ebda deċiżjoni, l-ebda kwalifikazzjoni, l-ebda kitba ma tgħaddi minn widget. Il-klikk jiftaħ l-applikazzjoni Vigilae, fejn jaġixxi bniedem identifikat.
1. Toħroġ it-token — min-naħa tas-server, qatt fil-paġna
Iċ-ċavetta vgk_ qatt ma tmiss il-browser. Is-server tiegħek isejjaħ il-mint bl-iskop dedikat embed:emettre (immarkat mal-ħolqien tal-ċavetta, qatt ma tiġi trażmessa awtomatikament) u lejn il-paġna jinżel biss it-token qasir: ħmistax-il minuta b'mod prestabbilit, limitat 5-60, marbut ma' fajl wieħed, komponent wieħed, oriġini ddikjarata waħda. Jivvjaġġa fil-fragment tal-URL — ma jilħaqx la l-logs tagħna u lanqas tiegħek.
# Token għall-Compliance Button, tikketta magħżula mill-katalgu
curl -s -X POST https://vigilae.org/api/v1/embed/jetons \
-H "Authorization: Bearer vgk_your_key" \
-H "Content-Type: application/json" \
-d '{"dossier_id":"D123","composant":"bouton",
"audience":"https://your-software.example","libelle":"controler_client"}'
# 201 -> { "jeton": "…", "expire_le": "…",
# "url": "https://vigilae.org/embarque/bouton?c=…#…" }2. Poġġi l-iframe — il-launcher, f'għaxar linji
Il-launcher vigilae-embed.js joħloq l-iframe sandboxjata, jagħmel il-handshake u jsegwi d-daqs tal-widget (limitat — l-iframe qatt ma tordna l-għoli tagħha lill-paġna tiegħek). Fuq in-naħa tas-CSP, il-paġna tiegħek tiftaħ direttiva waħda biss: frame-src https://vigilae.org. L-ebda skript inline meħtieġ, l-ebda dipendenza. Iframe miktuba bl-idejn taħdem daqstant tajjeb.
<script src="https://vigilae.org/embarque/vigilae-embed.js" defer></script>
<div id="vigilance"></div>// Fl-iskript tiegħek: l-url ġejja mis-SERVER TIEGĦEK, li sejjaħ il-mint
var widget = VigilaeEmbed.monter({
conteneur: 'vigilance',
url: urlReturnedByTheMint,
renouvelerJeton: function () { // mal-iskadenza: erġa' toħroġ token min-naħa tas-server
return fetch('/my-server/vigilae-token').then(function (r) { return r.text(); });
},
});
// widget.rafraichir(token) idaħħal token frisk; widget.demonter() ineħħi kollox.3. Il-Compliance Button: it-tikketta tiegħek, l-istat tagħna
It-tikketta tal-buttuna tintgħażel minn katalgu magħluq — qatt test ħieles f'superfiċje li titkellem dwar il-viġilanza. Ix-shell juri dawn it-tikketti bil-Franċiż jew bl-Ingliż biss (parametru ?lang=), għadhom mhux fil-lingwa tiegħek; il-lista hawn taħt tagħti t-tifsira tagħhom:
controler_client— "Ikkontrolla dan il-klijent" (prestabbilit)lancer_vigilance— "Ibda d-diliġenza dovuta"verifier_be— "Ivverifika s-sidien benefiċjarji"preparer_dossier— "Ipprepara l-fajl AML"
Il-punt tal-istatus, min-naħa tiegħu, juri stat ikkalkulat minn Vigilae: a_jour (aħdar — skrinjar u punteġġ aġġornati), a_revoir (oranġjo — skrinjar jew punteġġ skaduti, jew is-sors falla fl-aħħar tmexxija), alerte (aħmar — mill-inqas allert wieħed x'jiġi eżaminat), inconnu (griż — fajl li qatt ma ġie skrinjat). It-tikketta tikkonfigura ruħha, is-semantika qatt: il-kulur huwa marbut mal-istat ġewwa x-shell innifsu, li jinjora kull tentattiv ta' postMessage biex jissostitwixxih. Fajl f'allert juri allert, ikun xi jkun l-istil.
Il-kuntratt postMessage, kollu kemm hu
Il-widget joħroġ vigilae:pret, vigilae:taille (tibdil awtomatiku tad-daqs), vigilae:expire (erġa' toħroġ token min-naħa tas-server, imbagħad ibgħat vigilae:jeton) u vigilae:ouvrir. Qatt isem, riskju jew allert ġewwa messaġġ: is-softwer tiegħek diġà għandu kollox permezz tal-API server-to-server, u dan il-kanal mhux se jsir tieni wieħed.
frame-ancestors tax-shell. L-amministratur jiddikjaraha direttament fi Vigilae, fuq l-iskrin "Integrazzjonijiet u sigurtà": sa għaxar oriġini https://, ospitu espliċitu, qatt wildcard; il-komponenti li jixgħel; u revoka bil-massa li toqtol, b'ġest wieħed, it-tokens kollha diġà maħruġa. http://localhost huwa permess biss fuq uffiċċju sandbox — ikteb lil contact@vigilae.org (suġġett "Widgets inkorporati") biex jinfetaħ wieħed għat-tul tal-integrazzjoni tiegħek. L-ebda oriġini ddikjarata: il-mint jirrifjuta b'400. Istanza fejn il-ħażna tal-oriġini mhix imqabbda: 501 espliċitu — ara #embed-indisponible.Sandbox: fuq talba.
Kull klassi ta' żball tal-API għandha indirizz stabbli fuq ir-referenza tal-iżbalji: #authentification, #scopes, #cloisonnement, #debit, #signature… It-tweġibiet ta' żball tal-API se jippuntaw lejn dawn l-ankri.
L-API la tesponi rapporti ta' tranżazzjonijiet suspettużi u lanqas verbatim ta' klijenti, bil-kostruzzjoni (art. L.561-18 tal-CMF Franċiż). L-ebda deċiżjoni ta' viġilanza ma tittieħed mill-API: hija tesponi u tikkwalifika l-avvenimenti; il-professjonist jiddeċiedi.