status: "failed" quando a requisição foi aceita mas o Canvas não conseguiu terminar. Trate os dois casos.
Códigos de status HTTP
Veja Erros na introdução da referência da API para as convenções compartilhadas por todos os endpoints.
O corpo do erro
Erros são objetos JSON com umcode, uma message legível, o status HTTP e name: "Error". Alguns erros acrescentam um campo details com mais informações sobre o que foi rejeitado.
status e code, e não em message, que é feita para pessoas e pode mudar.
Execuções com falha
Quando uma execução assíncrona não consegue terminar, a chamada HTTP que a criou ainda assim retornou200. A falha aparece depois como status: "failed" na execução que você consulta com GET /v2/chat/completions/{id}, no payload enviado para a sua webhook_url e em GET /v1/completion-run. Trate failed como final: uma execução não sai desse status sozinha.
Os campos que uma execução com falha traz sobre a causa não estão documentados aqui. A execução também fica visível no Usage do Canvas, onde você pode inspecionar as suas entradas.
O que é seguro repetir
GET /v2/chat/completions/{id},GET /v1/completion-runeGET /v3/files/{id}são só de leitura. Repita-os à vontade, por exemplo após um timeout de rede ou um5xx.POST /v2/chat/completionsinicia uma execução. Cada requisição aceita cria uma nova execução com o seu próprio ID e conta para o seu uso, então repetir às cegas após um timeout pode executar o Canvas duas vezes. Nenhuma chave de idempotência está documentada para este endpoint. Se a requisição foi rejeitada com um4xx, nenhuma execução foi criada e você pode enviar uma requisição corrigida.POST /v3/filessó reserva uma URL de upload e um ID de arquivo. Repeti-lo cria outro ID, o que não causa problema desde que você referencie aquele para o qual realmente enviou o arquivo.
POST /v2/chat/completions incerto (você nunca recebeu a resposta), marque cada requisição com um identificador seu, como order-123, e consulte GET /v1/completion-run?tags=order-123 antes de enviá-la de novo. Se existir uma execução com essa tag, leia o resultado dela em vez de criar outra. Veja Listando execuções anteriores.
Quando for repetir após um 5xx ou um erro de rede, espere entre as tentativas e acrescente alguma aleatoriedade ao intervalo, para que muitos clientes falhando ao mesmo tempo não repitam no mesmo instante.
Limites de taxa e de concorrência da Completion API não estão documentados aqui. Se você receber um código de status que indique limitação, reduza o ritmo e repita após um intervalo.
Evitando erros antes que aconteçam
- Envie todas as variáveis que o Canvas marca como obrigatórias, com os nomes mostrados em Conectar via API. As
variablesDefinitionsdometadatade uma execução emGET /v1/completion-runlistam cada variável com o seutype(file,textoumixed) e se ela érequired. - Envolva URLs de arquivo em um objeto com
file_url, e confira que o arquivo está em um formato suportado e acessível pela internet (ou foi enviado com/v3/files). - Use só um entre
canvas_id,version_ideapplication_id, e só combineenvironment_namecomcanvas_id. - Não envie
streamnemasynccomapplication_id: tarefas são sempre assíncronas. - Mantenha o header
x-compatibility-datenos endpoints de arquivo que o exigem. Veja Data de compatibilidade.