Criar e consultar backups
Lista os backups, pede um backup manual, acompanha o andamento e consulta o estado do agendador noturno.
O backup guarda uma cópia do banco de dados da loja (pedidos, produtos, clientes, configurações) e, junto, um pacote com as mídias enviadas. Ele roda em segundo plano: você pede, recebe 202 e consulta até o status virar completed. A plataforma também faz um backup automático por noite. Todas as rotas desta página exigem o privilégio manage_backups ou manage_settings.
Listar backups
/api/v1/admin/backupsAdminLista todos os backups da loja
Exemplo de requisição
bash
curl "$BASE_URL/api/v1/admin/backups" \
-H "Authorization: Bearer $TOKEN"Resposta
200Backups
json
{
"backups": [
{
"id": "d216291a-0c77-4eec-9c1e-8ffe034b2474",
"name": "Scheduled 2026-10-09",
"description": "Created by the backup scheduler (tick 2026-10-09T03:00)",
"file_size": 997428729,
"media_file_size": 866636650,
"status": "completed",
"started_at": "2026-10-09T03:00:00.171646Z",
"completed_at": "2026-10-09T03:05:42.379305Z",
"created_at": "2026-10-09T03:00:00.168726Z",
"updated_at": "2026-10-09T03:06:14.876154Z"
}
],
"total": 190
}Campos da resposta
backupsarrayTodos os backups, sem paginação, do mais novo para o mais antigo.
totalintegerQuantidade de itens em
backups.backups[].iduuidId do backup.
backups[].namestringNome. Nos backups automáticos é
Scheduled AAAA-MM-DD; nos manuais sem nome é Backup AAAA-MM-DD HH:MM:SS (UTC).backups[].descriptionstringDescrição livre. Ausente quando vazia.
backups[].file_sizeintegerTamanho do arquivo do banco, em bytes.
0 enquanto não termina ou se falhou.backups[].media_file_sizeintegerTamanho do pacote de mídias (imagens e arquivos enviados), em bytes.
0 quando não há pacote; maior que zero indica que o download de mídias está disponível.backups[].statusstringpendingrunningcompletedfailedrestoringrestoredexpiredEstado do backup. Veja a tabela na home da seção.
backups[].error_msgstringMotivo da falha, quando
status é failed.backups[].created_byuuidAdministrador que pediu o backup. Ausente nos automáticos.
backups[].started_at / completed_at / restored_atstringInício, fim da geração e fim da última restauração (RFC 3339, UTC). Ausentes enquanto não ocorreram.
backups[].created_at / updated_atstringCriação e última alteração do registro (RFC 3339, UTC).
Erros
| Status | Quando | Exemplo de corpo |
|---|---|---|
| 401 | Token ausente, inválido ou expirado. | {"error":"missing authorization header"} |
| 403 | O token não é de um usuário administrador. | {"error":"admin access required"} |
| 403 | O usuário é administrador, mas não tem o privilégio exigido. | {"error":"insufficient privileges","privilege_required_any":["manage_backups","manage_settings"]} |
| 500 | Falha ao ler os registros. | {"error":"failed to list backups","detail":"..."} |
Criar backup
Inicia um backup em segundo plano e devolve o registro ainda pending. Guarde o id e consulte Consultar um backup até o status mudar.
/api/v1/admin/backupsAdminPede um backup manual
Corpo da requisição
namestringNome do backup. Se vazio ou só espaços, a plataforma usa
Backup AAAA-MM-DD HH:MM:SS.descriptionstringDescrição livre.
Exemplo de requisição
bash
curl -X POST "$BASE_URL/api/v1/admin/backups" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"name": "Antes da migração de catálogo", "description": "Backup manual"}'Resposta
202Backup aceito
json
{
"id": "7f1c1b0e-0d2a-4d57-9c3e-2f6b1f6f9a10",
"name": "Antes da migração de catálogo",
"description": "Backup manual",
"file_size": 0,
"media_file_size": 0,
"status": "pending",
"created_by": "d4613dde-ac7a-431c-9232-50d8cd6ad5fc",
"created_at": "2026-10-11T21:30:00Z",
"updated_at": "2026-10-11T21:30:00Z"
}Campos da resposta
iduuidId do backup.
namestringNome. Nos backups automáticos é
Scheduled AAAA-MM-DD; nos manuais sem nome é Backup AAAA-MM-DD HH:MM:SS (UTC).descriptionstringDescrição livre. Ausente quando vazia.
statusstringpending no momento da criação.demais campos-Os mesmos de Listar backups.
Erros
| Status | Quando | Exemplo de corpo |
|---|---|---|
| 401 | Token ausente, inválido ou expirado. | {"error":"missing authorization header"} |
| 403 | O token não é de um usuário administrador. | {"error":"admin access required"} |
| 403 | O usuário é administrador, mas não tem o privilégio exigido. | {"error":"insufficient privileges","privilege_required_any":["manage_backups","manage_settings"]} |
| 400 | Corpo não é JSON válido. Um corpo vazio também dá 400: envie ao menos {}. | {"error":"invalid request body","detail":"EOF"} |
| 500 | Não foi possível registrar o backup. | {"error":"failed to create backup","detail":"..."} |
Consultar um backup
/api/v1/admin/backups/{id}AdminEstado de um backup
Parâmetros de caminho
iduuidobrigatórioId do backup.
Exemplo de requisição
bash
curl "$BASE_URL/api/v1/admin/backups/d216291a-0c77-4eec-9c1e-8ffe034b2474" \
-H "Authorization: Bearer $TOKEN"Resposta
200Backup
json
{
"id": "d216291a-0c77-4eec-9c1e-8ffe034b2474",
"name": "Scheduled 2026-10-09",
"description": "Created by the backup scheduler (tick 2026-10-09T03:00)",
"file_size": 997428729,
"media_file_size": 866636650,
"status": "completed",
"started_at": "2026-10-09T03:00:00.171646Z",
"completed_at": "2026-10-09T03:05:42.379305Z",
"created_at": "2026-10-09T03:00:00.168726Z",
"updated_at": "2026-10-09T03:06:14.876154Z"
}Campos da resposta
iduuidId do backup.
demais campos-Os mesmos de Listar backups, sem o envelope.
Erros
| Status | Quando | Exemplo de corpo |
|---|---|---|
| 401 | Token ausente, inválido ou expirado. | {"error":"missing authorization header"} |
| 403 | O token não é de um usuário administrador. | {"error":"admin access required"} |
| 403 | O usuário é administrador, mas não tem o privilégio exigido. | {"error":"insufficient privileges","privilege_required_any":["manage_backups","manage_settings"]} |
| 404 | Backup não existe. | {"error":"backup not found"} |
| 500 | id não é um UUID válido (a mensagem vem em português). | {"error":"failed to get backup","detail":"o valor \"abc\" não é um uuid válido..."} |
Estado do agendador
/api/v1/admin/backups/scheduler/statusAdminEstado do agendador de backups
Exemplo de requisição
bash
curl "$BASE_URL/api/v1/admin/backups/scheduler/status" \
-H "Authorization: Bearer $TOKEN"Resposta
200Agendador
json
{
"enabled": true,
"schedule": "0 3 * * *",
"fallback_active": false,
"next_run": "2026-10-12T03:00:00Z",
"last_pass_at": "2026-10-11T20:50:25.223Z",
"last_tick": "2026-10-11T03:00"
}Campos da resposta
enabledbooleantrue quando o backup automático está ligado nesta instalação.schedulestringExpressão cron do agendamento (
0 3 * * * = todo dia às 03:00).fallback_activebooleantrue quando a expressão configurada era inválida e a plataforma está usando o padrão diário das 03:00.next_runstringPróxima execução (RFC 3339, UTC). Pode ser
null.last_pass_atstringÚltima passada do agendador neste processo. Ausente se ainda não houve.
last_tickstringO horário do agendamento que a última passada cobriu (
AAAA-MM-DDTHH:MM).Erros
| Status | Quando | Exemplo de corpo |
|---|---|---|
| 401 | Token ausente, inválido ou expirado. | {"error":"missing authorization header"} |
| 403 | O token não é de um usuário administrador. | {"error":"admin access required"} |
| 403 | O usuário é administrador, mas não tem o privilégio exigido. | {"error":"insufficient privileges","privilege_required_any":["manage_backups","manage_settings"]} |