Pular para o conteúdo principal
Esta página apresenta exemplos de código para casos de uso comuns da Service User API v3.

Exemplos rápidos

import os
import requests

TOKEN = os.getenv("DEVIN_SERVICE_USER_TOKEN")
BASE_URL = "https://api.devin.ai/v3beta1"

response = requests.get(
    f"{BASE_URL}/enterprise/self",
    headers={"Authorization": f"Bearer {TOKEN}"}
)

self_info = response.json()
print(f"Service User: {self_info['name']}")
print(f"Role: {self_info['role']}")
import os
import requests

TOKEN = os.getenv("DEVIN_SERVICE_USER_TOKEN")
BASE_URL = "https://api.devin.ai/v3beta1"

response = requests.get(
    f"{BASE_URL}/enterprise/organizations",
    headers={"Authorization": f"Bearer {TOKEN}"}
)

orgs = response.json()
for org in orgs["organizations"]:
    print(f"{org['name']} ({org['id']})")
import os
import requests

TOKEN = os.getenv("DEVIN_SERVICE_USER_TOKEN")
BASE_URL = "https://api.devin.ai/v3beta1"

response = requests.post(
    f"{BASE_URL}/enterprise/organizations",
    headers={
        "Authorization": f"Bearer {TOKEN}",
        "Content-Type": "application/json"
    },
    json={
        "name": "Equipe de Ciência de Dados",
        "acu_limit": 500
    }
)

org = response.json()
print(f"Organização criada: {org['id']}")
import os
import requests

TOKEN = os.getenv("DEVIN_SERVICE_USER_TOKEN")
BASE_URL = "https://api.devin.ai/v3beta1"
org_id = "your_org_id"

response = requests.post(
    f"{BASE_URL}/organizations/{org_id}/sessions",
    headers={
        "Authorization": f"Bearer {TOKEN}",
        "Content-Type": "application/json"
    },
    json={
        "prompt": "Crie um script Python que analise dados CSV"
    }
)

session = response.json()
print(f"Sessão criada: {session['session_id']}")
print(f"URL: {session['url']}")
import os
import requests

TOKEN = os.getenv("DEVIN_SERVICE_USER_TOKEN")
BASE_URL = "https://api.devin.ai/v3beta1"

response = requests.get(
    f"{BASE_URL}/enterprise/consumption/daily/organizations",
    headers={"Authorization": f"Bearer {TOKEN}"},
    params={"start_date": "2024-01-01", "end_date": "2024-01-31"}
)

consumption = response.json()
for entry in consumption["data"]:
    print(f"{entry['organization_name']}: {entry['acus_used']} ACUs")
import os
import requests

TOKEN = os.getenv("DEVIN_SERVICE_USER_TOKEN")
BASE_URL = "https://api.devin.ai/v3beta1"
org_id = "your_org_id"

response = requests.post(
    f"{BASE_URL}/organizations/{org_id}/members/service-users",
    headers={
        "Authorization": f"Bearer {TOKEN}",
        "Content-Type": "application/json"
    },
    json={
        "name": "CI/CD Bot",
        "role": "developer"
    }
)

service_user = response.json()
print(f"Created service user: {service_user['id']}")
print(f"Chave de API: {service_user['api_key']}")  # Exibida apenas uma vez!
import os
import requests
from datetime import datetime, timedelta, timezone

TOKEN = os.getenv("DEVIN_SERVICE_USER_TOKEN")
BASE_URL = "https://api.devin.ai/v3beta1"

# Últimos 7 dias em UTC, como timestamps Unix (em segundos)
now = datetime.now(timezone.utc)
seven_days_ago = now - timedelta(days=7)

params = {
    "time_after": int(seven_days_ago.timestamp()),
    "time_before": int(now.timestamp()),
    "first": 100,  # tamanho da página (máx. 200)
}

response = requests.get(
    f"{BASE_URL}/enterprise/audit-logs",
    headers={"Authorization": f"Bearer {TOKEN}"},
    params=params,
)
response.raise_for_status()

data = response.json()

for log in data["items"]:
    ts = datetime.fromtimestamp(log["created_at"], tz=timezone.utc).isoformat()
    actor_id = log.get("service_user_id") or log.get("user_id") or "system"
    print(f"{ts} - {log['action']} (org={log.get('org_id')}, actor={actor_id})")

# Para buscar páginas adicionais, use end_cursor quando has_next_page for True:
# if data["has_next_page"]:
#     params["after"] = data["end_cursor"]
#     # Faça outra requisição com os parâmetros atualizados
Automatize entre várias organizações:
import os
import requests

TOKEN = os.getenv("DEVIN_SERVICE_USER_TOKEN")
BASE_URL = "https://api.devin.ai/v3beta1"

# Obter todas as organizações
orgs_response = requests.get(
    f"{BASE_URL}/enterprise/organizations",
    headers={"Authorization": f"Bearer {TOKEN}"}
)
organizations = orgs_response.json()["organizations"]

# Criar uma sessão em cada organização
for org in organizations:
    session_response = requests.post(
        f"{BASE_URL}/organizations/{org['id']}/sessions",
        headers={
            "Authorization": f"Bearer {TOKEN}",
            "Content-Type": "application/json"
        },
        json={
            "prompt": f"Run daily health check for {org['name']}"
        }
    )
    
    if session_response.ok:
        session = session_response.json()
        print(f"Sessão criada para {org['name']}: {session['session_id']}")
    else:
        print(f"Falha ao criar sessão para {org['name']}")
import os
import requests

TOKEN = os.getenv("DEVIN_SERVICE_USER_TOKEN")
BASE_URL = "https://api.devin.ai/v3beta1"

try:
    response = requests.get(
        f"{BASE_URL}/enterprise/organizations",
        headers={"Authorization": f"Bearer {TOKEN}"}
    )
    response.raise_for_status()
    data = response.json()
except requests.exceptions.HTTPError as e:
    if e.response.status_code == 401:
        print("Token de usuário de serviço inválido ou expirado")
    elif e.response.status_code == 403:
        print("Usuário de serviço não possui função/permissão necessária")
    elif e.response.status_code == 429:
        print("Limite de taxa excedido - aguarde e tente novamente")
    else:
        print(f"Erro da API: {e}")

Suporte

Precisa de ajuda?

Para dúvidas sobre a API ou para relatar problemas, envie um e-mail para [email protected]