Compare os três endpoints
Qual usar
- Até 500 tarefas, e você cuida das novas tentativas:
POST /v1/async/task/batch. Você recebe todos os ids de tarefa na resposta. - Mais tarefas do que a concorrência do seu plano, ou um job diário de milhares:
POST /v1/batches. O servidor guarda os itens e os libera conforme o limite do seu plano e a fila de cada mecanismo permitem, então você não precisa repetir429s nem503s por conta própria. - Um prompt perguntado a partir de muitos pontos ao redor de um lugar:
POST /v1/async/task/grid.
POST /v1/async/task/batch
Envie um array de até 500 requisições de tarefa (referência). Os mecanismos podem ser misturados.
200. results[i].index corresponde à posição no seu array, e cada resultado tem task ou error:
Um
idempotencyKey repetido devolve a tarefa existente como sucesso. Veja Idempotência.
POST /v1/batches
Envie até 10.000 itens (referência). Cada item aceita os campos de tarefa taskType, payload, priority e idempotencyKey, mais um customId opcional (até 128 caracteres) que é devolvido nos resultados. Defina webhook.url no lote, não nos itens.
202 com o lote. Os primeiros itens já foram enviados:
Regras do envelope
Validação tudo ou nada
Antes de qualquer coisa ser armazenada, cada item passa pelas mesmas verificações de uma tarefa individual: campos, escopo da chave, mecanismos privados, endpoints dedicados, região epayload.location. Se algum item falhar, a resposta é 400 VALIDATION_ERROR, nada é armazenado e details lista até 50 itens com falha:
Como os itens são executados
O lote libera itens como tarefas quando o limite do seu plano e a fila do mecanismo têm espaço. As contas se revezam, então um lote grande não segura um lote pequeno de outra conta. Cada item liberado passa pela mesma admissão de uma tarefa individual: faz uma reserva de créditos e conta para o limite diário de créditos da chave. Quando um item é recusado, o código decide o que acontece:
O lote fica
COMPLETED quando nenhum item está pendente e todas as tarefas terminaram. Com webhook.url, o servidor então publica o evento batch.completed.
Leia o progresso e os resultados
GET /v1/batches/{id} devolve o lote com counts por status de item: pending, queued, processing, completed, failed, rejected. Consultá-lo também faz os itens pendentes avançarem.
GET /v1/batches/{id}/items lista os itens na ordem de envio:
REJECTED traz error: { code, message }. Os corpos de resultado só são incluídos dentro da janela de polling de 24 horas de Tarefas assíncronas. Veja também Obter um lote e Listar itens do lote.
POST /v1/async/task/grid
Faça um prompt a partir de cada ponto de uma grade quadrada em torno de um centro (referência). Cada ponto vira uma tarefa com esse ponto como payload.location, então o mecanismo precisa aceitar localização: CHATGPT, GEMINI, GOOGLE, AIMODE ou GOOGLE_SERP. Não envie payload.location você mesmo.
A linha 0 é a borda norte e a coluna 0, a borda oeste. A resposta devolve
grid (com id e spacingMeters), um summary e points em ordem de linha, cada um com row, col, location e task ou error.
O ponto central é admitido primeiro, sozinho. Se ele for recusado (por exemplo, 422 LOCATION_UNSUPPORTED, 403 KEY_SCOPE_DENIED, 402 INSUFFICIENT_CREDITS ou um plano cheio), esse erro é a resposta da grade inteira e nenhuma tarefa é criada. Os pontos depois do centro recusados por capacidade falham no lugar com success: false.
Leia uma grade com GET /v1/async/task/grid/{id}. Adicione ?include=response para os resultados das tarefas finalizadas. Pontos que nunca foram admitidos ficam ausentes, e o id de grade de outra conta retorna 404. Reenviar a mesma grade com o mesmo id admite só os pontos que faltam; veja Idempotência.
Próximos passos
Idempotência
Como cada endpoint trata uma chave repetida.
Créditos e limites
Concorrência do plano e ritmo de envio.