{"openapi":"3.1.0","info":{"title":"SYSTEK AI — vitrine agents","description":"Trois fonctions vérifiables, signées et tracées ; calcul sur GPU loué en UE, rien n'y est conservé. Sans inscription : une clé, un crédit prépayé en XOF, un registre.","version":"0.1"},"paths":{"/":{"get":{"summary":"Accueil","operationId":"accueil__get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/catalogue":{"get":{"summary":"Catalogue","operationId":"catalogue_catalogue_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/mcp/manifest.json":{"get":{"summary":"Manifeste Mcp","operationId":"manifeste_mcp_mcp_manifest_json_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/.well-known/agent.json":{"get":{"summary":"Carte A2A","description":"La carte d'agent A2A : les compétences sont les contrats exposés (`artefacts/contrats_exposes/`),\nvalidés au démarrage ; la carte est stable tant que les contrats, l'URL publique et la version déployée de\nSortFlower le sont (la promesse de suppression suit cette version, `suppression_fournisseur`).","operationId":"carte_a2a__well_known_agent_json_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/cles":{"post":{"summary":"Demander Cle","operationId":"demander_cle_cles_post","responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/usage":{"get":{"summary":"Usage","operationId":"usage_v1_usage_get","parameters":[{"name":"x-agent-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Agent-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/credits/recharger":{"post":{"summary":"Recharger","description":"Une facture Lightning pour recharger le crédit de la clé : `{montant_xof}` entier, dans les bornes du\ntarif. 503 si le paiement Lightning n'est pas configuré ou si le cours est périmé.","operationId":"recharger_credits_recharger_post","parameters":[{"name":"x-agent-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Agent-Key"}}],"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/credits/factures/{facture_id}":{"get":{"summary":"Lire Facture","description":"L'état d'une facture de la clé, relu chez le fournisseur tant qu'elle est ouverte.","operationId":"lire_facture_credits_factures__facture_id__get","parameters":[{"name":"facture_id","in":"path","required":true,"schema":{"type":"string","title":"Facture Id"}},{"name":"x-agent-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Agent-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/credits/webhook":{"post":{"summary":"Webhook Paiement","description":"Le signal du fournisseur de paiement : preuve d'origine vérifiée (401 sinon), statut relu chez le\nfournisseur, crédit posé une seule fois. Le corps est une donnée, jamais une instruction.","operationId":"webhook_paiement_credits_webhook_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/webhooks":{"post":{"summary":"Abonner Webhook","description":"Un abonnement : une URL (validée anti-SSRF) et des genres d'événements du registre. Le secret\nn'est montré qu'ici ; il n'est relisible par aucune route.","operationId":"abonner_webhook_webhooks_post","parameters":[{"name":"x-agent-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Agent-Key"}}],"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"summary":"Lister Webhooks","operationId":"lister_webhooks_webhooks_get","parameters":[{"name":"x-agent-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Agent-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/webhooks/{abonnement_id}":{"delete":{"summary":"Resilier Webhook","operationId":"resilier_webhook_webhooks__abonnement_id__delete","parameters":[{"name":"abonnement_id","in":"path","required":true,"schema":{"type":"string","title":"Abonnement Id"}},{"name":"x-agent-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Agent-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/suppressions/cle-publique":{"get":{"summary":"Cle Publique Recus","description":"La clé publique Ed25519 qui vérifie les reçus de suppression (`verifier_recu`). Publique : relevez-la\nune fois, gardez-la ; c'est elle, pas celle que porte un reçu, qui fait foi.","operationId":"cle_publique_recus_suppressions_cle_publique_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/suppressions/cles":{"get":{"summary":"Cles Recus Publiques","description":"La liste publique des clés qui ont signé ou signent les reçus : dates de validité, révocation et état\n(`active`, `retiree`, `revoquee`). Elle se passe telle quelle à `verifier_recu_complet(recu, cles)`. Aucun\nsecret : le registre des clés publiques (`cles_recus.json`) et, si elle n'y est pas inscrite, la clé du\ncoffre (`inscrite: false`).","operationId":"cles_recus_publiques_suppressions_cles_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/suppressions/{trace_id}":{"get":{"summary":"Lire Suppressions","description":"Les reçus de suppression d'un appel, sous la clé d'agent qui a fait l'appel (404 sinon, sans dire si\nl'appel existe sous une autre clé). Un appel dont les médias ne sont pas encore supprimés rend son\néchéance et aucun reçu. Un reçu émis sans clé au coffre est signé ici (Ed25519 est déterministe) ; sans\nclé, 503.","operationId":"lire_suppressions_suppressions__trace_id__get","parameters":[{"name":"trace_id","in":"path","required":true,"schema":{"type":"string","title":"Trace Id"}},{"name":"x-agent-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Agent-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/appels/{appel_id}":{"get":{"summary":"Lire Appel","description":"Le résultat d'un appel différé de la clé : 202 tant qu'il attend son lot, 200 quand il est servi (la\nréponse signée, débitée une fois au lot) ou en échec (rien n'est débité).","operationId":"lire_appel_appels__appel_id__get","parameters":[{"name":"appel_id","in":"path","required":true,"schema":{"type":"string","title":"Appel Id"}},{"name":"x-agent-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Agent-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/classer-image":{"post":{"summary":"Classer Image","operationId":"classer_image_v1_classer_image_post","parameters":[{"name":"x-agent-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Agent-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/decouper-scans":{"post":{"summary":"Decouper Scans","operationId":"decouper_scans_v1_decouper_scans_post","parameters":[{"name":"x-agent-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Agent-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/detecter-rupture":{"post":{"summary":"Detecter Rupture","operationId":"detecter_rupture_v1_detecter_rupture_post","parameters":[{"name":"x-agent-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Agent-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}