Enterprise
Documentation API
Le scanner d'enquête ZAYKO en JSON : score de risque, filtre de listing et scan par lot. Authentification par clé API, quota mensuel et limite de débit par clé.
Tester l'API maintenant
5 essais gratuits / 24 hAucun compte ni clé nécessaire : colle une adresse de mint Solana et regarde la réponse exacte de GET /api/public/risk.
Clé d'essai instantanée
Teste l'API en 10 secondes, sans compte
Une adresse e-mail suffit : tu reçois immédiatement une clé valable 100 appels sur 7 jours, limitée à GET /api/public/risk et 5 appels par minute. Une seule clé d'essai par adresse.
Authentification
Génère une clé depuis /enterprise/keys puis envoie-la sur chaque appel. Les deux en-têtes sont acceptés. Les quotas et prix de chaque offre sont détaillés sur /enterprise/tarifs.
Authorization: Bearer zayko_xxxxxxxxxxxxxxxx
# ou
X-API-Key: zayko_xxxxxxxxxxxxxxxxLes clés d'essai (zayko_trial_…) s'utilisent de la même façon, mais n'ouvrent que GET /api/public/risk : les autres endpoints répondent 403. Une alerte e-mail est envoyée automatiquement à 80 % puis à 100 % du quota mensuel des clés complètes.
/api/public/risk?mint=<MINT>Score de risque
Verdict, score /100, liquidité, concentration du top 10 et test de vendabilité.
curl -H "Authorization: Bearer $ZAYKO_KEY" \
"https://project--95462de0-d34d-43ed-8465-db9987a4db07.lovable.app/api/public/risk?mint=4BHuvKFACNeDmHn3zxLTCVn5zBfKWi7hpFYjDC57pump"{
"mint": "4BHuvKFAC...pump",
"score": 67,
"verdict": "MANUAL REVIEW",
"liquidityUsd": 142000,
"topHoldersPct": 31.4,
"sellable": true,
"timestamp": "2026-09-02T11:00:00.000Z"
}/api/public/listing-gate?mint=<MINT>&configId=<UUID>Listing gate
Applique tes règles de listing (liquidité minimale, concentration maximale, mint authority, honeypot, score, âge) et retourne APPROVE, MANUAL_REVIEW ou REJECT avec les preuves. Configure tes règles sur /enterprise/listing-gate.
curl -H "Authorization: Bearer $ZAYKO_KEY" \
"https://project--95462de0-d34d-43ed-8465-db9987a4db07.lovable.app/api/public/listing-gate?mint=<MINT>&configId=<UUID>"/api/public/bulk-scanScan par lot
Envoie jusqu'à 50 mints, récupère un identifiant de job, puis interroge son avancement.
curl -X POST -H "Authorization: Bearer $ZAYKO_KEY" \
-H "Content-Type: application/json" \
-d '{"mints":["<MINT_1>","<MINT_2>"]}' \
"https://project--95462de0-d34d-43ed-8465-db9987a4db07.lovable.app/api/public/bulk-scan"
curl -H "Authorization: Bearer $ZAYKO_KEY" \
"https://project--95462de0-d34d-43ed-8465-db9987a4db07.lovable.app/api/public/bulk-scan/jobs/<JOB_ID>"/api/public/firewallTransaction Firewall (avant signature)
Appelle cet endpoint juste avant de demander la signature du wallet. ZAYKO simule la transaction on-chain sans la diffuser et renvoie ALLOW, WARN, BLOCK ou UNKNOWN, avec les autorités de token touchées, les programmes inconnus, les transferts inattendus et l'écart avec l'action annoncée. Le champ expected est optionnel : s'il est fourni, ZAYKO compare le résultat simulé à ce que ton application prétend faire.
curl -X POST -H "Authorization: Bearer $ZAYKO_KEY" \
-H "Content-Type: application/json" \
-d '{"transaction":"<TX_BASE64_NON_SIGNEE>",
"expected":{"action":"swap 1 SOL -> BONK","mint":"<MINT>","maxSolOut":1.05}}' \
"https://project--95462de0-d34d-43ed-8465-db9987a4db07.lovable.app/api/public/firewall"Intégration côté dApp :
const tx = await buildSwapTransaction(...)
const b64 = Buffer.from(tx.serialize({ requireAllSignatures: false })).toString("base64")
const res = await fetch("/api/zayko-firewall", {
method: "POST",
body: JSON.stringify({ transaction: b64, expected: { mint, maxSolOut: 1.05 } }),
}).then((r) => r.json())
if (res.verdict === "BLOCK") return showBlockingModal(res.findings)
if (res.verdict === "WARN") await confirmWithUser(res.findings)
await wallet.signTransaction(tx)Réponse : verdict, risk (0-100), simulated, findings[] (code, severity, title, detail), programs[], solDelta, tokenDeltas[]. Codes de finding stables : authority_change, freeze_authority, delegation, unknown_program, unexpected_token_transfer, large_sol_outflow, outcome_differs, simulation_failed. ZAYKO ne bloque jamais silencieusement : si la simulation est impossible, le verdict est UNKNOWN et à toi de décider.
Execution protection. Quand la transaction contient un swap identifié, la réponse porte en plus un bloc execution : sandwichExposure (high / medium / low), slippagePct décodé depuis l'instruction de swap, expectedOutUi (sortie simulée) et worstOutUi (plancher réellement garanti par le minOut signé), mevProtection (on / partial / off, d'après la présence d'un tip Jito et d'un compte marqueur jitodontfront), jitoTipSol, dontFront, priorityFee (prix par unité de calcul, coût en SOL, verdict, médiane réseau observée) et recommendations[] avec des valeurs concrètes à appliquer. Nouveaux codes de finding : sandwich_exposure, high_slippage, abnormal_priority_fee. ZAYKO ne reconstruit ni ne signe ta transaction : il dit quoi corriger avant envoi. Ce qui n'est pas décodable reste à null, jamais estimé.
"execution": {
"isSwap": true,
"dexName": "Jupiter Aggregator v6",
"sandwichExposure": "high",
"slippagePct": 8,
"expectedOutUi": 1284.42,
"worstOutUi": 1181.66,
"mevProtection": "off",
"jitoTipSol": null,
"dontFront": false,
"priorityFee": { "microLamports": 0, "computeUnits": null, "solCost": 0, "verdict": "low", "networkMedian": 12500 },
"recommendations": [
{ "code": "reduce_slippage", "value": "slippageBps: 100 (1 %) — 50 sur les paires liquides" },
{ "code": "enable_jito_protection", "value": "tip >= 0.0005 SOL -> 96gYZGLnJYVFmbjzopPSU6QiEV5fGqZNyN9nmNhvrZU5" },
{ "code": "set_priority_fee", "value": "SetComputeUnitPrice: 25000 µlamports/CU" }
]
}/api/public/events?mint=<MINT>&severity=warningFlux d'événements de risque
Historique des événements détectés en continu. Filtres : mint, kind, severity (gravité minimale), since (date ISO), limit (1 à 200, 50 par défaut). Le champ cursor renvoyé se repasse en since pour ne récupérer que le nouveau.
curl -H "Authorization: Bearer $ZAYKO_KEY" \
"https://project--95462de0-d34d-43ed-8465-db9987a4db07.lovable.app/api/public/events?severity=critical&limit=20"{
"events": [
{
"id": "3f1c...",
"mint": "4BHuvKFAC...pump",
"kind": "liquidity.drop",
"severity": "critical",
"title": "Liquidité en chute",
"message": "Liquidité en chute de 45 % — score 82 → 54.",
"score": 54,
"previousScore": 82,
"liquidityUsd": 41200,
"previousLiquidityUsd": 74900,
"data": {},
"createdAt": "2026-09-03T16:20:00.000Z"
}
],
"count": 1,
"cursor": "2026-09-03T16:20:00.000Z"
}/api/public/audit/<REPORT_ID>Rapport d'audit signé (public)
Aucune clé API : un rapport doit pouvoir être contrôlé par n'importe qui. Retourne le document canonique, son empreinte SHA-256, la signature Ed25519, la clé publique et le résultat de la revérification côté serveur. Réponse mise en cache 5 minutes, 120 vérifications par adresse IP toutes les 10 minutes. Le rapport lisible est sur /audit/<REPORT_ID>.
curl "https://project--95462de0-d34d-43ed-8465-db9987a4db07.lovable.app/api/public/audit/<REPORT_ID>"{
"reportId": "0f7e...c31a",
"issuedAt": "2026-09-03T18:04:00.000Z",
"document": { "version": "zayko-audit-1", "issuer": "ZAYKO AI Lab", "score": 78, "verdict": "RISQUE FAIBLE" },
"digest": "9c1b...",
"signature": "5Kd3...",
"algorithm": "Ed25519",
"keyId": "a71f3c0b9d22",
"publicKey": "8Wq2...",
"verification": { "digestMatches": true, "signatureValid": true }
}/api/public/live-feedFlux live des nouveaux tokens (SSE)
Server-Sent Events : chaque nouveau token Solana noté dès sa détection. Pas de clé API, 20 connexions par adresse IP toutes les 10 minutes. Variante par adresse : GET /api/public/scan-stream?address=<MINT> remplit le dossier pièce par pièce au lieu d'attendre la fin de l'analyse.
curl -N "https://project--95462de0-d34d-43ed-8465-db9987a4db07.lovable.app/api/public/live-feed"
data: {"type":"token","mint":"4BHuvKFAC...pump","score":41,"verdict":"HAUT RISQUE"}
data: {"type":"end"}/api/public/enterprise-paymentConfirmation de paiement
Active une offre sur une clé après un paiement en $ZAYKO. La preuve d'authenticité est la transaction elle-même : elle est vérifiée on-chain et ne peut servir qu'une fois.
curl -X POST -H "Content-Type: application/json" \
-d '{"keyId":"<KEY_UUID>","planId":"<PLAN_UUID>","signature":"<TX_SIGNATURE>"}' \
"https://project--95462de0-d34d-43ed-8465-db9987a4db07.lovable.app/api/public/enterprise-payment"Quotas et limites de débit
| Offre | Prix / mois | Appels / mois | Appels / minute |
|---|---|---|---|
| Free | Gratuit | 100 | 10 |
| Starter | $49 | 5 000 | 60 |
| Pro | $149 | 50 000 | 120 |
| Enterprise | $499 | 500 000 | 300 |
Chaque réponse porte les en-têtes X-Zayko-Quota-Limit, X-Zayko-Quota-Remaining, X-Zayko-Quota-Reset et X-Zayko-RateLimit-Limit. À partir de 80 % de consommation, l'en-tête X-Zayko-Quota-Warning est ajouté.
Codes d'erreur
400— paramètre manquant ou invalide.401— clé API absente, invalide ou révoquée.402— offre expirée : renouvelle depuis /enterprise/keys.429— quota mensuel atteint ou limite par minute dépassée (en-têteRetry-After).500— scan impossible (RPC indisponible) : réessaie, aucun crédit n'est remboursé automatiquement.
Spécification OpenAPI
Toute l'API est décrite dans un fichier OpenAPI 3.1 servi publiquement. Importe-le dans Postman, Insomnia ou Swagger UI, ou génère un client typé dans ton langage.
https://project--95462de0-d34d-43ed-8465-db9987a4db07.lovable.app/api/public/openapi.json
# client TypeScript
npx openapi-typescript https://project--95462de0-d34d-43ed-8465-db9987a4db07.lovable.app/api/public/openapi.json -o zayko.d.ts
# client Python
openapi-generator generate -g python -i https://project--95462de0-d34d-43ed-8465-db9987a4db07.lovable.app/api/public/openapi.json -o zayko-pythonExemples de code
Garde la clé côté serveur : elle consomme ton quota et ne doit jamais partir dans un bundle navigateur.
TypeScript
const res = await fetch(
"https://project--95462de0-d34d-43ed-8465-db9987a4db07.lovable.app/api/public/risk?mint=" + mint,
{ headers: { Authorization: `Bearer ${process.env.ZAYKO_KEY}` } },
);
if (!res.ok) throw new Error(`ZAYKO ${res.status}`);
const remaining = Number(res.headers.get("X-Zayko-Quota-Remaining") ?? 0);
const risk = await res.json();
if (risk.score < 45) blockListing(risk);Python
import os, requests
r = requests.get(
"https://project--95462de0-d34d-43ed-8465-db9987a4db07.lovable.app/api/public/risk",
params={"mint": mint},
headers={"Authorization": f"Bearer {os.environ['ZAYKO_KEY']}"},
timeout=30,
)
r.raise_for_status()
risk = r.json()
print(risk["verdict"], risk["score"], r.headers.get("X-Zayko-Quota-Remaining"))Suivi des événements (boucle de curseur)
let cursor = null;
setInterval(async () => {
const url = new URL("https://project--95462de0-d34d-43ed-8465-db9987a4db07.lovable.app/api/public/events");
url.searchParams.set("severity", "warning");
if (cursor) url.searchParams.set("since", cursor);
const res = await fetch(url, {
headers: { Authorization: `Bearer ${process.env.ZAYKO_KEY}` },
});
const { events, cursor: next } = await res.json();
if (next) cursor = next;
for (const ev of events) handle(ev);
}, 60_000);Webhooks — ZAYKO pousse, tu réagis
L'API répond quand tu demandes. Le webhook fait l'inverse : ZAYKO surveille en continu et prévient ton serveur dès qu'un événement tombe. Tu choisis tes règles depuis /enterprise/feed (types d'événements, mints, gravité minimum, score plancher).
Chaque livraison est un POST JSON signé : X-Zayko-Event (nom de l'événement), X-Zayko-Severity et X-Zayko-Signature: sha256=HMAC(secret, body). Vérifie la signature avant de traiter le corps.
risk.changed— le score bouge significativement.liquidity.drop— chute brutale de liquidité.whale.movement— mouvement d'un top holder.holder.concentration— concentration devenue dangereuse.deployer.detected— deployer déjà identifié qui relance.authority.changed— autorité mint/freeze modifiée.abnormal.activity— volume/liquidité anormaux.launch.detected— nouveau lancement repéré.listing_gate.blocked— un token a été refusé par tes règles de listing.
{
"event": "risk_event",
"topic": "liquidity.drop",
"severity": "critical",
"mint": "So1111...",
"score": 54,
"prevScore": 82,
"liquidityUsd": 41200,
"message": "Liquidité en chute de 45 % — score 82 → 54.",
"dossierUrl": "https://labzayko.com/scan/So1111...",
"createdAt": "2026-09-03T16:20:00.000Z"
}