Voir aussi : Architecture · Entités
The versioned HTTP contract for the API is maintained in openapi.yaml.
The spec may document a route ahead of its implementation, but any operation that is not yet delivered must be explicitly marked with x-somanagent-implemented: false.
Maintenance rules for this file:
- update
doc/developing/openapi.yamlin the same change as any API route, request, response, parameter, or payload format change - keep the file hand-written and readable; prefer explicit schemas over generated output
- specify
required, value formats, enums, and examples whenever they are needed to build usable example requests - use
additionalProperties: falsefor structured objects unless a free-form map is intentional - if a route is planned but not implemented yet, keep it in the spec only with
x-somanagent-implemented: false - keep narrative business rules in
api.md, but keep route-level contract details inopenapi.yaml - run
php scripts/toolkit/validate-files.php ...orphp scripts/backlog/review.phpafter editing the spec so OpenAPI consistency stays enforced
Base URL : http://localhost:8080/api
Format : JSON
Authentification : aucune en local
Retourne l’état global de l’application.
Retourne l’état détaillé des connecteurs avec checks normalisés.
Chaque connecteur expose notamment :
okreasonfixCommandauthMethodchecks.runtimechecks.authchecks.prompt_testchecks.models
Retourne l’état d’authentification Claude CLI.
Retourne le sous-état d’authentification normalisé pour un connecteur donné.
Envoie un test réel Say OK via le connecteur ciblé, avec message et model optionnels.
Liste les projets.
Chaque projet expose aussi dispatchMode :
auto: toute tâche éligible est dispatchée immédiatementmanual: la tâche passe enawaiting_dispatchpuis attend une autorisation explicite
Crée un projet.
Le body peut inclure teamId pour affecter une équipe dès la création.
CRUD projet.
PATCH /api/projects/{id} permet aussi :
- d’affecter ou retirer l’équipe via
teamId - de modifier
dispatchMode
Journal d’audit du projet.
Consommation de tokens du projet.
Crée une demande métier et la transforme en Ticket.
Précondition :
- le projet doit avoir une équipe affectée, sinon l’API renvoie une erreur fonctionnelle
Body :
{
"title": "Permettre l'export PDF",
"description": "Le client veut exporter les rapports mensuels.",
"priority": "high"
}Réponse :
- ticket créé
dispatchErroréventuel si le dispatch automatique n’a pas pu partir
Le coeur métier de l’API est maintenant explicite :
Ticket: objet board / produitTicketTask: unité de travail opérationnelleTicketLog: historique narratifAgentTaskExecution: historique technique d’exécution agent
Liste les tickets du projet.
Chaque ticket expose notamment :
workflowSteptaskCountsactiveStepTaskstasksawaitingUserAnswer/pendingUserAnswerCountpour signaler explicitement qu’un ticket ou l’une de ses tâches attend une réponse utilisateur
Crée un ticket (user_story ou bug).
Retourne le détail complet d’un ticket avec :
taskslogsexecutionstokenUsageawaitingUserAnswer/pendingUserAnswerCountpour signaler explicitement qu’une réponse utilisateur reste attendue
Met à jour le ticket.
Change le statut opérationnel du ticket.
Change la priorité du ticket.
Fait avancer un ticket story/bug vers l’étape suivante de son workflow quand l’étape courante est manuelle.
Précondition :
- le ticket doit appartenir à un projet avec équipe affectée
Ajoute un TicketLog de type commentaire.
Body :
{
"content": "Texte du commentaire",
"replyToLogId": "uuid (optionnel) - ID du commentaire parent pour créer une réponse",
"context": "ticket_comment | ticket_reply"
}Un commentaire peut avoir des réponses. On appelle "thread" un fil de discussion qui commence par un message sans parent (replyToLogId null). Les réponses sont des enfants directs de ce message racine (structure plate : pas de réponses aux réponses).
Modifie un commentaire utilisateur existant sur le ticket.
Règles :
- seuls les commentaires/réponses
authorType=usersont éditables - l'édition conserve une trace minimale dans
metadata(editedAt,editCount,editHistory) - l'historique conserve les contenus précédents, sans créer un nouveau
TicketLog
Supprime le ticket.
Crée une TicketTask sous un ticket.
Body :
{
"title": "Implémenter l'export PDF",
"description": "Ajouter un endpoint et le rendu du document.",
"priority": "high",
"actionKey": "dev.backend.implement",
"assignedAgentId": "uuid",
"parentTaskId": "uuid"
}Si la tâche est immédiatement éligible dans l’étape courante :
dispatchMode=auto: elle est dispatchée immédiatementdispatchMode=manual: elle passe enawaiting_dispatch
Retourne le détail complet d’une tâche opérationnelle avec :
dependsOnchildrenlogsexecutionstokenUsageawaitingUserAnswer/pendingUserAnswerCountpour signaler explicitement qu’une réponse utilisateur est attendue sur cette tâchecanResumepour indiquer si la tâche a déjà un historique d’exécution ou de complétion lui permettant d’être rejouéecanAuthorizepour indiquer si la tâche attend encore une autorisation explicite de dispatch
Met à jour la tâche.
Change le statut métier de la tâche.
Met à jour la progression.
Change la priorité.
Liste les agents disponibles pour l’AgentAction de la tâche.
Crée une nouvelle AgentTaskExecution et la dispatch en asynchrone.
Autorise explicitement une tâche en awaiting_dispatch puis la dispatch immédiatement.
Relance explicitement la tâche avec une nouvelle AgentTaskExecution.
Précondition commune aux routes d’exécution / reprise task-level :
- le projet du ticket doit avoir une équipe affectée
- une reprise n’est autorisée que pour une tâche déjà exécutée au moins une fois ou déjà complétée auparavant
Every AgentTaskExecutionAttempt returned by ticket or agent execution APIs may include resourceSnapshot.
The snapshot is captured at runtime, just before the agent call is sent, and is meant to remain immutable even if the agent, role, skill, or workflow later change.
Captured fields:
agent: database-backed agent snapshot (id,name,description,connector,role,config)skill: skill snapshot (id,slug,name,source,originalSource,filePath,content)prompt:instruction, structuredcontext, and fullyrenderedpromptscope:taskActions,ticketTransitions, and backendallowedEffectslimits: explicit capture limits such as the current absence of a dedicated agent file path
Current limits:
- agents do not have a dedicated source file, so the snapshot stores a database representation rather than an agent file path
- the snapshot reflects injected runtime resources only; it does not attempt to recursively capture every external dependency those resources may reference
- existing attempts created before this feature may expose
resourceSnapshot=null
Ajoute un commentaire contextualisé sur la tâche.
Body :
{
"content": "Texte du commentaire",
"replyToLogId": "uuid (optionnel) - ID du commentaire parent pour créer une réponse",
"context": "task_comment | task_reply"
}Un commentaire peut avoir des réponses. Les réponses sont des enfants directs du message racine (structure plate : pas de réponses aux réponses).
Modifie un commentaire utilisateur existant contextualisé sur la tâche.
Règles :
- seuls les commentaires/réponses
authorType=usersont éditables - l'édition conserve une trace minimale dans
metadata(editedAt,editCount,editHistory) - l'historique conserve les contenus précédents, sans créer un nouveau
TicketLog
Modifie un message humain existant dans la conversation projet/agent.
Règles :
- seuls les messages
author=humansont éditables - l'édition conserve une trace minimale dans
metadata(editedAt,editCount,editHistory) - l'édition ne rejoue pas automatiquement l'agent et ne réécrit pas les réponses déjà produites
Supprime la tâche.
Liste les occurrences agrégées.
Filtres disponibles :
sourcecategorylevelprojectIdtaskIdagentIdstatusfromtopagelimit
Retourne une occurrence et ses événements.
Met à jour le statut de tri.
Liste paginée des événements bruts.
Ingestion observabilité frontend/infra.
Liste les agents.
Crée un agent.
Précondition :
config.modelest obligatoire
Liste les connecteurs agent disponibles et leur stratégie de présélection de modèle.
Réponse :
connectorsupportsModelDiscoveryselectionStrategy
Retourne le catalogue normalisé des modèles pour un connecteur donné.
Query params :
selectedModel: modèle actuellement choisi pour obtenir des advisoriesrefresh=1: invalide le cache court et relance la découverte runtime
Réponse :
recommendedModelmodels[]advisories[]cachedcacheTtlSeconds
CRUD agent.
Retourne le statut runtime dérivé :
idleworkingerror
Le calcul repose sur les TicketTask en cours et les signaux récents dans TicketLog.
Les ressources teams, roles, skills, workflows, features, chat et tokens gardent leur CRUD existant. Elles ne passent plus par un agrégat Task polymorphe.