Accueil docs/📘 Référence API

Référence API

Base https://ai.syctra.com/api/v1 · chaque endpoint exige Authorization: Bearer <token> sauf mention public. Voir API & intégration native pour l'authentification, les erreurs, les limites et la sécurité.

Runs — parler à un agent

POST /chat

Démarre un run durable et répond immédiatement.

ChampTypeDéfautDescription
messagestringRequis. Ce que vous demandez à l'agent
app_namestring"main"Agent cible. N'importe quelle clé du catalogue (interactive, data_copilot, contract_review_dz, slide_master, finance_master…) ou custom_<id> pour l'un des vôtres
session_iduuidnouveauPoursuivre un fil existant. Omettre pour en ouvrir un
attachmentsstring[]Identifiants renvoyés par POST /uploads
kb_idsstring[]Bases de connaissances que l'agent peut interroger pendant le run
kb_enhanceboolfalseRéécriture LLM des réponses RAG (plus lent, plus riche)
planboolfalseMode plan : l'agent écrit un plan d'étapes et l'exécute, en émettant plan / plan_step
modelstringdéfaut du compteClé du catalogue de modèles — voir GET /models
reasoningboolfalseDélibération plus longue avant de répondre
data_workspace_iduuidEspace Data Lab sur lequel travailler
client_tzstringUTCFuseau IANA, ex. "Africa/Algiers"
idempotency_keystringRejouable sans risque : la même clé renvoie le même run
{ "run_id": "…", "session_id": "…", "cursor": 0, "resumed": false,
  "status": "running", "queue_seq": 0 }

status vaut running, ou queued si la session est occupée (le run démarre automatiquement quand le précédent se termine), ou blocked.

MéthodeCheminRôle
POST/tasksComme /chat mais explicitement détaché — pour les traitements de fond
GET/runs/{run_id}/eventsFlux SSE du run (ci-dessous)
POST/runs/{run_id}/respondRépondre à une question de l'agent (user_choice, quiz, approbation)
POST/runs/{run_id}/cancelArrêter un run en cours
GET/sessions/{id}/queueInspecter la file d'attente de la session
POST/sessions/{id}/queue/resumeRelancer une file mise en pause par un échec

GET /runs/{run_id}/events — le flux

text/event-stream. Chaque événement porte id (un seq monotone), event (son type) et data (JSON). Reprenable : reconnectez-vous avec Last-Event-ID: <seq> ou ?after=<seq> et tout ce qui suit ce curseur est rejoué depuis le stockage durable — rien n'est perdu, rien n'est facturé deux fois.

GroupeÉvénements
Réponsetoken (fragment de texte) · usage (compteurs) · done · error
Outilstool_call · tool_result · sandbox_stdout
Planplan (étapes ordonnées) · plan_step (index + statut)
Documentsdocument_start · document_delta · document_end (porte artifact_id)
Livrablesartifact · file (PDF/DOCX/PPTX/XLSX) · image · slides · webpage · chart · sheet
Recherchesources (résultats web) · graph (graphe de connaissances) · browser (captures computer-use) · maps
Humain dans la boucleuser_choice · choice_answer · quiz · approval (action en attente de confirmation)
Communicationemail_draft · email_sent · social · call
Studios juridiquesdossier · timeline · doc_summary · findings · contract · clause · contract_compare · consultation · legal_issues · ref_check · deadline · watch_synthesis · watch_change · watch_diff
Recrutementcandidate · iv_job · iv_candidate · iv_questions · iv_grid · iv_answers · iv_ask · iv_plan
Métierprospect · cerfa · exhibition · finance · site_map · site_pack

Consommez token, done et error pour une réponse texte simple ; le reste correspond à des cartes structurées que vous pouvez afficher ou ignorer. Les types inconnus doivent être ignorés, pas traités comme des erreurs — de nouveaux types apparaissent avec le temps.

MéthodeCheminRôle
GET/modelsCatalogue de modèles disponible pour votre compte
GET/sessionsLister les conversations
GET/sessions/{id}Une session et ses derniers événements
PATCH DELETE/sessions/{id}Renommer / supprimer
GET/sessions/{id}/messagesHistorique complet
GET/sessions/{id}/artifactsTout ce que la session a produit
POST/sessions/{id}/branchBifurquer la conversation à un point donné
POST/sessions/{id}/truncateTronquer la conversation à un message
GET POST/sessions/{id}/versionsHistorique / restauration des versions d'artefact
GET/sessions/search?q=Recherche plein texte dans vos conversations

Fichiers

MéthodeCheminRôle
POST/uploads{filename, content_base64, mime, session_id?}{upload_id}. Analysé automatiquement (OCR, vision, transcription). Jusqu'à 200 Mo par fichier
GET/uploads/{id}Statut d'analyse et texte extrait
GET/uploads/{id}/rawLes octets d'origine
POST/artifactsCréer un artefact depuis votre propre contenu
GET/artifacts/{id}Télécharger un fichier produit
POST/exportRendre du Markdown/HTML en PDF, DOCX ou PPTX
POST/export-textExport texte brut

Rattachez un upload à un run en passant son identifiant dans attachments. Formats acceptés : PDF, Office, images, audio, vidéo, CSV/Excel, ZIP (décompressé récursivement).

Bases de connaissances (RAG)

MéthodeCheminRôle
POST GET/kbCréer / lister les bases
PATCH DELETE/kb/{id}Renommer / supprimer
GET POST/kb/{id}/documentsLister / ajouter des documents (ingestion asynchrone)
POST/kb/query/streamInterroger, en flux (ci-dessous)
GET PUT/kb/{id}/configProfil de recherche (juridique / entreprise / chronologie / générique), langue FTS, budgets. PUT réécrit tous les champs — envoyez l'objet complet
GET/kb/{id}/chunks · /entities · /graphInspecter l'index, les entités extraites, le graphe
GET/kb/{id}/file/{doc_id} · /image/{image_id}Document source / image extraite
POST GET/kb/{id}/conversationsFils RAG multi-tours
GET/kb/{id}/conversations/{cid}/messagesHistorique du fil
GET POST DELETE/kb/{id}/connectorsSynchronisation depuis des sources externes ; /kb/connectors/catalog les liste
POST GET DELETE/kb/{id}/sharePublier un lien d'interrogation public
GET/kb/pricingModèle de coût par requête
curl -N -X POST https://ai.syctra.com/api/v1/kb/query/stream \
  -H "Authorization: Bearer $TOKEN" -H 'content-type: application/json' -d '{
    "kb_id": "…", "q": "Quelles clauses de résiliation après 12 mois ?",
    "mode": "full", "cite": true, "enhance": false, "agent": false, "top_k": 20
  }'
ChampValeursDescription
modeauto · quick · full · deep · graph_local · graph_globalProfondeur de recherche. auto choisit selon la question
citeboolCitations [N] en ligne et identifiants de sources
enhanceboolRéécriture LLM de la réponse
agentboolDécomposer les questions à plusieurs volets avant de chercher
doc_idstringRestreindre la recherche à un seul document
conversation_iduuidPoursuivre un fil multi-tours

Agents personnalisés

MéthodeCheminRôle
GET/agent-toolsCatalogue des capacités activables sur un agent
GET POST/agents/customLister / créer
GET PUT DELETE/agents/custom/{id}Lire / modifier / supprimer
POST/agents/custom/personaDistiller un persona à partir d'écrits importés
GET/marketplace · /marketplace/{id}Agents publiés
POST/marketplace/{id}/install · /publish · /unpublishInstaller / publier / retirer
{
  "name": "Analyste appels d'offres", "emoji": "📑",
  "description": "Lit les dossiers d'appel d'offres et produit une note go / no-go",
  "instruction": "Tu es analyste en marchés publics…",
  "tool_keys": ["web", "deep_research", "documents", "knowledge_base", "database"],
  "model": "standard", "visibility": "private",
  "examples": ["Analyse cet appel d'offres"], "tags": ["achats"]
}

Clés de capacités : knowledge_base · web · deep_research · agent_team · computer_use · algerian_law · documents · slides · charts · images · webpage · code · quiz · email · planning · scraping · prospecting · linkedin · meta · obsidian · knowledge_graph · scheduling · workspace_files · data_engineering · database · n8n · stripe · paypal · notion · github · gitlab · elevenlabs · microsoft · atlassian · slack · s3 · apify · mcp_remote.

Lancez-le comme n'importe quel agent : POST /chat avec "app_name": "custom_<id>".

Planificateur

MéthodeCheminRôle
GET POST/cronLister / créer une exécution planifiée
PATCH DELETE/cron/{id}Suspendre, modifier, supprimer
POST/cron/{id}/runDéclencher une fois, maintenant
{ "name": "Veille concurrence du lundi", "cron_expr": "0 8 * * 1",
  "timezone": "Africa/Algiers", "prompt": "Résume les mouvements de la semaine…",
  "app_name": "main", "delivery_email": "equipe@acme.com" }

Cron standard à 5 champs. delivery_email envoie la réponse finale par e-mail ; laissez vide pour désactiver.

Data Lab

MéthodeCheminRôle
GET POST/data/workspacesLister / créer un espace DuckDB persistant
PATCH DELETE/data/workspaces/{id}Renommer / supprimer
POST/data/workspaces/{id}/ingestCharger de l'Excel/CSV — feuilles désordonnées, en-têtes multi-lignes, plusieurs tables par feuille
GET/data/workspaces/{id}/tables · /filesInspecter le schéma et les sources
POST/data/workspaces/{id}/queryExécuter du SQL sur l'espace
DELETE/data/workspaces/{id}/tables/{table}Supprimer une table

Essaim d'agents

MéthodeCheminRôle
GET/swarm/api/teams · /catalogue · /healthÉquipes disponibles et état du moteur
POST/swarm/api/runDémarrer un run multi-agents
GET/swarm/api/run/{id}/streamProgression en SSE
POST/swarm/api/run/{id}/cancelL'arrêter
GET/swarm/api/dossiers · /{id} · /{id}/file/{name}Dossiers produits et leurs fichiers
POST/swarm/api/convert · /template/inspectConvertir la sortie / inspecter un modèle de deck

Documents & projets

MéthodeCheminRôle
GET/docspaceArborescence de dossiers et documents
POST PATCH DELETE/folders, /folders/{id}Gérer les dossiers
POST PATCH DELETE/documents, /documents/{id}Gérer les documents
GET/documents/{id}/contentLire le contenu
POST/documents/{id}/attachRattacher un document à une conversation
POST/docspace/import-zipImport en masse
GET POST/projects, /projects/{id}Espaces regroupant conversations et fichiers
POST GET DELETE/projects/{id}/membersAccès au projet

Partage (liens publics)

MéthodeCheminRôle
POST GET DELETE/sessions/{id}/sharePublier une conversation
GET/shared/{slug}Public — lecture d'une conversation partagée
GET/shared/{slug}/artifacts/{id}Public — artefact d'une conversation partagée
GET POST/shared/{slug}/commentsPublic — fil de commentaires
POST/shared/{slug}/cloneCopier une conversation partagée dans votre compte
POST GET DELETE/docsharePartager documents et dossiers
GET/shared-doc/{slug}Public — document partagé
GET/shared-kb/{slug} · POST /shared-kb/{slug}/query/streamPublic — lien de base de connaissances, requêtes facturées au propriétaire

Un lien public est une URL non listée, pas une authentification. Ce que vous publiez est lisible par quiconque détient le lien — et les requêtes sur une base partagée vous sont facturées à vous. Révoquez avec le DELETE correspondant.

Widget embarquable

Créez un widget dans Intégrations → Widget, puis collez une ligne dans votre site :

<script src="https://ai.syctra.com/embed.js" data-key="pk_live_…" async></script>

data-position="bottom-left" | "bottom-right" en option. Le widget appelle une API publique distincte sous /embed-api — la clé publique n'est pas une clé API et ne peut pas lire votre compte :

MéthodeCheminRôle
GET/embed-api/config/{public_key}Public — configuration du widget
POST/embed-api/chatPublic — message d'un visiteur
GET/embed-api/runs/{run_id}/eventsPublic — flux de la réponse
GET/embed-api/history/{public_key}/{visitor_id}Public — historique du visiteur
GET POST PATCH DELETE/embed-widgetsCRUD propriétaire (authentifié)

Les chemins /embed-api/* et /scim/v2/* sont servis à la racine du domaine, pas sous /api/v1 — ex. https://ai.syctra.com/embed-api/chat.

Seuls les agents autorisés en usage public peuvent être rattachés à un widget, le trafic visiteur est limité par widget, et chaque conversation est facturée à l'organisation propriétaire. Restreignez les origines autorisées avant de publier.

Équipes, organisation & provisioning

MéthodeCheminRôle
GET/enterprise · /enterprise/analytics · /enterprise/retentionOrganisation, usage, politique de rétention
POST DELETE/enterprise/teams, /teams/{id}Gérer les équipes
POST DELETE/enterprise/teams/{id}/members…Composition
POST DELETE/enterprise/teams/{id}/grantsQuels agents une équipe peut utiliser
POST/enterprise/teams/{id}/invite · /invites/revoke · /invites/resendInvitations
GET POST/invite/{token}, /invite/{token}/acceptPublic — acceptation d'invitation
GET PUT DELETE/enterprise/ssoAuthentification unique SAML / OIDC
POST/enterprise/scim-tokenÉmettre un jeton de provisioning SCIM
GET/me/caps · /me/teams · POST /me/active-teamDroits et équipes de l'appelant
GET POST DELETE/teams, /groups, /share-targetsÉquipes légères, groupes, cibles de partage

SCIM 2.0 est servi sur https://ai.syctra.com/scim/v2 avec son propre jeton (ce n'est pas une clé API) : GET|POST /Users, GET|PUT|PATCH|DELETE /Users/{id}, GET /Groups.

Compte, notifications & confidentialité

MéthodeCheminRôle
GET PATCH/auth/meProfil
POST/auth/change-password · /auth/logoutIdentifiants / déconnexion
GET/balanceSolde de crédits
GET POST/notifications, /notifications/readFil de notifications
PUT/me/notify-email · /me/low-balance-pctPréférences de notification
GET POST/push/vapid-key, /push/subscribeAbonnements Web Push
GET DELETE PUT/memory, /memory/{id}, /memory/settingsMémoire long terme : lire, supprimer, désactiver
GET/account/exportRGPD — exporter tout ce qui vous appartient
DELETE/accountRGPD — supprimer le compte et ses données
GET POST/approvals, /approvals/{id}/decideApprouver ou refuser une action sous contrôle
GET PUT/approval-settingsQuelles capacités exigent une approbation humaine

Autres surfaces

MéthodeCheminRôle
GET POST DELETE/deadlines…Agenda des échéances juridiques
POST GET DELETE/meetings…Transcription de réunions et comptes rendus
POST GET DELETE/dubbings…, GET /dubbing/languagesTravaux de doublage vidéo / audio
POST GET DELETE/email-compose, /email-templatesE-mails composés et modèles
POST/email/sendEnvoyer un e-mail via la plateforme
GET POST DELETE/promptsPrompts enregistrés
POST/feedback · /message-feedbackRetours produit et par réponse
GET/healthz · /readyz · /metricsPublic — liveness, readiness, métriques Prometheus

Notes pour intégrateurs

  • Il n'y a pas encore de webhooks sortants. Suivez les traitements longs en gardant le flux SSE ouvert, ou en interrogeant GET /sessions/{id} — le run survit à votre déconnexion.
  • Interrogez sobrement. Préférez le SSE ; si vous devez interroger, utilisez le cursor que vous détenez déjà.
  • Conservez le curseur. Persister le dernier seq traité rend votre intégration résistante aux plantages.
  • Fixez l'agent. app_name détermine le comportement, le coût et les outils disponibles — définissez-le explicitement plutôt que de compter sur le défaut main.
  • Gérez 402 et 429 en priorité. Ce sont les deux erreurs qu'une intégration saine rencontre en production ; le reste trahit généralement un payload incorrect.