Cette page présente des workflows de bout en bout courants avec l’API Devin. Chaque workflow inclut la séquence complète des appels d’API, avec des exemples de code. Pour les détails de chaque endpoint, consultez les pages pertinentes de la référence d’API.
Définissez ces variables d’environnement avant d’exécuter un exemple :
# Requis : votre API key d'utilisateur de service (commence par cog_)
export DEVIN_API_KEY="cog_your_key_here"
# Requis : votre identifiant d'organisation (disponible dans Settings > Service Users)
export DEVIN_ORG_ID="your_org_id"
Premiers pas : de l’API key à la première session
Le workflow le plus courant — s’authentifier, récupérer les informations de votre compte et créer votre première session.
Étape 1 : Vérifiez vos identifiants
Cette étape utilise un endpoint avec un périmètre Enterprise. Les utilisateur de service limité au périmètre de l’organisation peuvent passer à l’Étape 3 — vous connaissez déjà l’ID de votre org sur la page Settings.
curl "https://api.devin.ai/v3/enterprise/self" \
-H "Authorization: Bearer $DEVIN_API_KEY"
Réponse :
{
"user_id": "svc_abc123",
"email": "my-service-user@devin.ai",
"name": "CI Bot"
}
Étape 2 : Lister vos organisations
Les utilisateurs de service Enterprise peuvent lister toutes les organisations :
curl "https://api.devin.ai/v3/enterprise/organizations" \
-H "Authorization: Bearer $DEVIN_API_KEY"
Les utilisateurs de service limités au périmètre de l’organisation connaissent déjà l’ID de leur org (cet ID figure sur la page Settings > Service Users où la clé a été créée).
Étape 3 : Créer une session
curl -X POST "https://api.devin.ai/v3/organizations/$DEVIN_ORG_ID/sessions" \
-H "Authorization: Bearer $DEVIN_API_KEY" \
-H "Content-Type: application/json" \
-d '{"prompt": "Create a Python script that analyzes CSV data"}'
Réponse :
{
"session_id": "devin-abc123",
"url": "https://app.devin.ai/sessions/devin-abc123",
"status": "running"
}
Étape 4 : Interroger périodiquement les événements
Surveillez la session en interrogeant périodiquement les messages :
curl "https://api.devin.ai/v3/organizations/$DEVIN_ORG_ID/sessions/devin-abc123/messages" \
-H "Authorization: Bearer $DEVIN_API_KEY"
Exemple complet en Python
import os
import time
import requests
API_KEY = os.environ["DEVIN_API_KEY"]
ORG_ID = os.environ["DEVIN_ORG_ID"]
BASE = "https://api.devin.ai/v3"
HEADERS = {"Authorization": f"Bearer {API_KEY}"}
# 1. Vérifier les credentials
me = requests.get(f"{BASE}/enterprise/self", headers=HEADERS)
me.raise_for_status()
print(f"Authenticated as: {me.json()['name']}")
# 2. Créer une session
session = requests.post(
f"{BASE}/organizations/{ORG_ID}/sessions",
headers={**HEADERS, "Content-Type": "application/json"},
json={"prompt": "Create a Python script that analyzes CSV data"}
).json()
print(f"Session: {session['url']}")
# 3. Interroger jusqu'à la fin
while True:
status = requests.get(
f"{BASE}/organizations/{ORG_ID}/sessions/{session['session_id']}",
headers=HEADERS
).json()["status"]
print(f"Status: {status}")
if status in ("exit", "error", "suspended"):
break
time.sleep(10)
Téléchargement des pièces jointes d’une session
Récupérez les fichiers produits par une session (journaux, captures d’écran, code généré, etc.).
Étape 1 : Récupérer la session
curl "https://api.devin.ai/v3/organizations/$DEVIN_ORG_ID/sessions/$SESSION_ID" \
-H "Authorization: Bearer $DEVIN_API_KEY"
Étape 2 : Lister les pièces jointes
curl "https://api.devin.ai/v3/organizations/$DEVIN_ORG_ID/sessions/$SESSION_ID/attachments" \
-H "Authorization: Bearer $DEVIN_API_KEY"
Réponse :
{
"items": [
{
"attachment_id": "att_123",
"name": "output.py",
"url": "https://..."
}
]
}
Utilisez l’url fournie dans la réponse de la pièce jointe pour télécharger directement le fichier.
Exemple complet en Python
import os
import requests
API_KEY = os.environ["DEVIN_API_KEY"]
ORG_ID = os.environ["DEVIN_ORG_ID"]
SESSION_ID = os.environ["SESSION_ID"]
BASE = "https://api.devin.ai/v3"
HEADERS = {"Authorization": f"Bearer {API_KEY}"}
# Lister les pièces jointes
attachments = requests.get(
f"{BASE}/organizations/{ORG_ID}/sessions/{SESSION_ID}/attachments",
headers=HEADERS
).json()["items"]
# Télécharger chaque pièce jointe
for att in attachments:
print(f"Downloading {att['name']}...")
content = requests.get(att["url"]).content
with open(att["name"], "wb") as f:
f.write(content)
print(f" Saved {att['name']} ({len(content)} bytes)")
Gestion de Knowledge et des playbooks
Gérez le contexte et les instructions que Devin utilise d’une session à l’autre.
Créer une note de Knowledge
curl -X POST "https://api.devin.ai/v3/organizations/$DEVIN_ORG_ID/knowledge/notes" \
-H "Authorization: Bearer $DEVIN_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Coding standards",
"trigger": "When writing code in any repository",
"body": "Use TypeScript strict mode. Follow existing code style. Run lint before committing."
}'
Lister les notes de Knowledge
curl "https://api.devin.ai/v3/organizations/$DEVIN_ORG_ID/knowledge/notes" \
-H "Authorization: Bearer $DEVIN_API_KEY"
Mettre à jour une note de Knowledge
curl -X PUT "https://api.devin.ai/v3/organizations/$DEVIN_ORG_ID/knowledge/notes/$NOTE_ID" \
-H "Authorization: Bearer $DEVIN_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Coding standards (updated)",
"trigger": "When writing code in any repository",
"body": "Use TypeScript strict mode. Follow existing code style. Run lint and type-check before committing."
}'
Supprimer une note de Knowledge
curl -X DELETE "https://api.devin.ai/v3/organizations/$DEVIN_ORG_ID/knowledge/notes/$NOTE_ID" \
-H "Authorization: Bearer $DEVIN_API_KEY"
curl -X POST "https://api.devin.ai/v3/organizations/$DEVIN_ORG_ID/playbooks" \
-H "Authorization: Bearer $DEVIN_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "PR Review",
"instructions": "Review the PR for bugs, security issues, and style violations. Leave inline comments."
}'
Exemple complet en Python
import os
import requests
API_KEY = os.environ["DEVIN_API_KEY"]
ORG_ID = os.environ["DEVIN_ORG_ID"]
BASE = "https://api.devin.ai/v3"
HEADERS = {
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json"
}
# Créer une note Knowledge
note = requests.post(
f"{BASE}/organizations/{ORG_ID}/knowledge/notes",
headers=HEADERS,
json={
"name": "Coding standards",
"trigger": "When writing code in any repository",
"body": "Use TypeScript strict mode. Follow existing code style."
}
).json()
print(f"Created note: {note['note_id']}")
# Lister toutes les notes
notes = requests.get(
f"{BASE}/organizations/{ORG_ID}/knowledge/notes",
headers={"Authorization": f"Bearer {API_KEY}"}
).json()["items"]
print(f"Total notes: {len(notes)}")
# Créer un playbook
playbook = requests.post(
f"{BASE}/organizations/{ORG_ID}/playbooks",
headers=HEADERS,
json={
"name": "PR Review",
"instructions": "Review the PR for bugs, security issues, and style violations."
}
).json()
print(f"Created playbook: {playbook['playbook_id']}")
Planification des sessions automatisées
Créez des sessions récurrentes qui s’exécutent selon une planification définie.
curl -X POST "https://api.devin.ai/v3/organizations/$DEVIN_ORG_ID/schedules" \
-H "Authorization: Bearer $DEVIN_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"prompt": "Run the test suite and report any failures",
"cron_schedule": "0 9 * * 1-5",
"timezone": "America/New_York"
}'
Cela crée une planification qui s’exécute chaque jour ouvré à 9 h (heure de l’Est).
Lister les planifications
curl "https://api.devin.ai/v3/organizations/$DEVIN_ORG_ID/schedules" \
-H "Authorization: Bearer $DEVIN_API_KEY"
Modifier une planification
curl -X PATCH "https://api.devin.ai/v3/organizations/$DEVIN_ORG_ID/schedules/$SCHEDULE_ID" \
-H "Authorization: Bearer $DEVIN_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"cron_schedule": "0 8 * * 1-5",
"is_enabled": true
}'
Supprimer une planification
curl -X DELETE "https://api.devin.ai/v3/organizations/$DEVIN_ORG_ID/schedules/$SCHEDULE_ID" \
-H "Authorization: Bearer $DEVIN_API_KEY"
Exemple complet en Python
import os
import requests
API_KEY = os.environ["DEVIN_API_KEY"]
ORG_ID = os.environ["DEVIN_ORG_ID"]
BASE = "https://api.devin.ai/v3"
HEADERS = {
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json"
}
# Créer une planification de vérification de santé quotidienne
schedule = requests.post(
f"{BASE}/organizations/{ORG_ID}/schedules",
headers=HEADERS,
json={
"prompt": "Run the test suite and report any failures",
"cron_schedule": "0 9 * * 1-5",
"timezone": "America/New_York"
}
).json()
print(f"Created schedule: {schedule['schedule_id']}")
# Lister toutes les planifications
schedules = requests.get(
f"{BASE}/organizations/{ORG_ID}/schedules",
headers={"Authorization": f"Bearer {API_KEY}"}
).json()["items"]
for s in schedules:
status = "enabled" if s.get("is_enabled") else "disabled"
print(f" {s['schedule_id']}: {s['cron_schedule']} ({status})")
Tous les exemples ci-dessus doivent inclure une gestion des erreurs en environnement de production. Voici un modèle réutilisable :
import requests
def api_request(method, url, headers, **kwargs):
"""Effectuer une requête API avec gestion standard des erreurs."""
response = requests.request(method, url, headers=headers, **kwargs)
try:
response.raise_for_status()
return response.json()
except requests.exceptions.HTTPError as e:
status = e.response.status_code
if status == 401:
raise Exception("Invalid or expired API key")
elif status == 403:
raise Exception("Service user lacks required permission")
elif status == 404:
raise Exception("Resource not found")
elif status == 429:
raise Exception("Rate limit exceeded — wait and retry")
else:
raise Exception(f"API error {status}: {e.response.text}")
Besoin d’aide ?
Pour toute question concernant l’API ou pour signaler des problèmes, envoyez un e-mail à support@cognition.ai