API de Branches
Endpoints para gerenciar branches, publicar, fazer merge e rollback
Base URL
https://services.antonnia.com/assistants/api/v2/assistants/{assistant_id}/branchesCriar branch
POST /assistants/{assistant_id}/branchesCria uma nova branch a partir do HEAD da main. O draft é inicializado com o conteúdo do último commit.
Request body
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
name | string | Sim | Nome da branch |
Resposta 201
{
"id": "d4e5f6a1b2c3",
"assistant_id": "a1b2c3d4e5f6",
"name": "feature/nova-saudacao",
"head_commit_id": "c3d4e5f6a1b2",
"created_at": "2026-03-24T11:00:00Z",
"updated_at": "2026-03-24T11:00:00Z"
}Fork branch
POST /assistants/{assistant_id}/branches/{branch_name}/forkCria uma nova branch copiando o draft da branch de origem (incluindo mudanças não publicadas).
Request body
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
name | string | Sim | Nome da nova branch |
Resposta 201
Retorna o objeto Branch da nova branch.
Listar branches
GET /assistants/{assistant_id}/branchesResposta 200
[
{
"id": "b2c3d4e5f6a1",
"name": "main",
"head_commit_id": "c3d4e5f6a1b2"
},
{
"id": "d4e5f6a1b2c3",
"name": "feature/nova-saudacao",
"head_commit_id": "c3d4e5f6a1b2"
}
]Obter snapshot da branch
GET /assistants/{assistant_id}/branches/{branch_name}Retorna o snapshot publicado (HEAD) da branch — o AssistantSnapshot montado a partir do último commit.
Resposta 200
{
"context": { ... },
"graph": { ... },
"tools": [ ... ],
"variables": [ ... ]
}Deletar branch
DELETE /assistants/{assistant_id}/branches/{branch_name}Deleta a branch e todos os seus draft files.
A branch main não pode ser deletada.
Resposta 204
Sem conteúdo.
Publicar
POST /assistants/{assistant_id}/branches/{branch_name}/publishTransforma o draft atual em um commit imutável e avança o HEAD da branch.
Request body
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
message | string | Não | Descrição da mudança |
author_type | string | Não | "human", "agent" ou "system" (padrão: "human") |
author_id | string | Não | ID do autor |
Exemplo
curl -X POST "https://services.antonnia.com/assistants/api/v2/assistants/$ASSISTANT_ID/branches/$BRANCH_NAME/publish" \
-H "Authorization: Bearer sk_live_YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"message": "Adicionou novo node de classificação",
"author_type": "human"
}'response = httpx.post(
f"{BASE_URL}/assistants/{assistant_id}/branches/{branch_name}/publish",
headers=HEADERS,
json={
"message": "Adicionou novo node de classificação",
"author_type": "human",
},
)Resposta 200
{
"commit": {
"id": "e5f6a1b2c3d4",
"assistant_id": "a1b2c3d4e5f6",
"parent_commit_id": "c3d4e5f6a1b2",
"message": "Adicionou novo node de classificação",
"author_type": "human",
"created_at": "2026-03-24T11:30:00Z"
}
}Rollback
POST /assistants/{assistant_id}/branches/{branch_name}/rollbackMove o HEAD da branch para um commit anterior e reseta o draft para o estado daquele commit.
Request body
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
commit_id | string | Sim | ID do commit de destino |
Resposta 200
{
"commit": {
"id": "c3d4e5f6a1b2",
"message": "Versão inicial do assistente de suporte",
"created_at": "2026-03-24T10:05:00Z"
}
}Merge
POST /assistants/{assistant_id}/branches/{branch_name}/mergeFaz merge 3-way do HEAD de uma branch de origem no draft da branch de destino.
Request body
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
source_branch_name | string | Sim | Nome da branch de origem |
commit | boolean | Não | Se true, publica automaticamente após o merge |
Resposta 200
Se commit: true, retorna o commit criado. Se commit: false (ou omitido), retorna null.
Erros
| Status | Descrição |
|---|---|
409 | Conflito de merge — ambas as branches modificaram os mesmos paths |
Exemplo de erro de conflito:
{
"detail": "Merge conflict on paths: nodes/greeting, tools/check_order"
}Verificar mudanças
GET /assistants/{assistant_id}/branches/{branch_name}/changesVerifica se o draft tem mudanças em relação ao HEAD.
Resposta 200
{
"has_changes": true
}Obter diff
GET /assistants/{assistant_id}/branches/{branch_name}/diffRetorna as diferenças entre o draft e o HEAD da branch.
Resposta 200
{
"diffs": [
{
"path": "nodes/greeting",
"status": "modified",
"old_content": { "instructions": "Olá!" },
"new_content": { "instructions": "Olá! Como posso ajudar?" },
"changes": {
"instructions": {
"old": "Olá!",
"new": "Olá! Como posso ajudar?"
}
}
}
]
}