Conheça a nossa nova rota MEDICAL RECEIPT para validação automatizada de recibos do Receita Saúde!
processId.webhook.processId e a resultKey. Guarde os dois: eles identificam o processo e são usados na consulta de status.url informada, com o resultado no corpo.url falhar, o mostQI chama a fallbackUrl, se ela tiver sido informada.Os campos marcados com 🔸 são obrigatórios.
{
"webhook": {
"url": "https://seuservidor.com/retorno",
"fallbackUrl": "https://seuservidor.com/retorno-contingencia",
"authorization": {
"headers": [
{ "name": "nomeCabecalho1", "value": "valorCabecalho1" },
{ "name": "nomeCabecalho2", "value": "valorCabecalho2" }
],
"queryStrings": [
{ "name": "nomeQs1", "value": "valorQs1" },
{ "name": "nomeQs2", "value": "valorQs2" }
],
"mtls": false
}
}
}[N] começa em 0 e define a ordem dos itens.| Campo | Exemplo |
|---|---|
webhookUrl 🔸 | https://seuservidor.com/retorno |
webhookFallbackUrl | https://seuservidor.com/retorno-contingencia |
webhookAuthorizationMtls | false |
webhookAuthorizationHeaders[0].name | nomeCabecalho1 |
webhookAuthorizationHeaders[0].value | valorCabecalho1 |
webhookAuthorizationQueryStrings[0].name | nomeQs1 |
webhookAuthorizationQueryStrings[0].value | valorQs1 |
webhookAuthorizationMtls é tratado como false.| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
url | string | 🔸 | URL chamada quando o processo assíncrono termina. |
fallbackUrl | string | URL de contingência, chamada somente se a chamada à url falhar. | |
authorization | object | Configurações de autenticação da chamada ao seu servidor. |
url e fallbackUrl:https://seuservidor.com/retorno.http e https são aceitos. Recomendamos https.fallbackUrl for vazio ou null, o campo é ignorado.| Campo | Tipo | Obrigatório | Padrão | Descrição |
|---|---|---|---|---|
headers | array | [] | Cabeçalhos HTTP que o mostQI repassa ao seu servidor. | |
queryStrings | array | [] | Parâmetros de query string que o mostQI adiciona à url e à fallbackUrl. | |
mtls | boolean | false | Ativa a autenticação mútua por certificado (mTLS) na chamada ao seu servidor. |
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
name | string | 🔸 | Nome do cabeçalho. |
value | string | Valor do cabeçalho. |
name aceita somente letras, números e os caracteres ! # $ % & ' * + - . ^ _ ` | ~. Espaços não são permitidos.value aceita somente caracteres imprimíveis e tabulação. Quebras de linha não são permitidas.name e value vazios são ignorados.accept, accept-encoding, cache-control, connection, content-disposition, content-encoding, content-length, content-type, host, keep-alive, origin, pragma, referer, transfer-encoding, upgrade| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
name | string | 🔸 | Nome do parâmetro. |
value | string | Valor do parâmetro. |
name não pode ser vazio.name e value vazios são ignorados.url e da fallbackUrl.true ou false. Também aceita os textos "true", "false", "1" e "0".true, o mTLS precisa estar habilitado na sua conta. Se não estiver, a requisição é recusada. Fale com o suporte mostQI para habilitar.url configurada, com:authorization.headers, além dos cabeçalhos controlados pelo mostQI;authorization.queryStrings somados à query string da URL;processId acrescentado.status.code do corpo:"200": o documento foi processado e o resultado está em result.result vem null e status.message explica o motivo. Os códigos possíveis estão em Mensagens de Erro.fields completa traz todos os campos lidos do documento.{
"result": [
{
"fields": [
{ "name": "nome", "stdName": null, "value": "JUNIOR CARDOSO VILARINO", "score": 0.75 },
{ "name": "data_nascimento", "stdName": null, "value": "1986-05-16", "score": 0.99 },
{ "name": "cpf", "stdName": null, "value": "78979048068", "score": 0.99 }
],
"image": null,
"score": 0.98,
"type": "documento-pessoal",
"stdType": "personal-document",
"pageNumber": 1,
"tags": ["country=bra", "id=bra-rg-marinha-2", "region=verso", "subtype=rg", "type=documento-pessoal"],
"tables": [],
"processType": "extraction"
}
],
"requestId": "MGxcxSi5m5xVzds8oTT5Y",
"elapsedMilliseconds": 2306,
"status": { "message": "Ok", "code": "200", "errors": [] },
"processId": "fe57d87e-742e-4c40-a2f8-cc8fefe1a59e"
}{
"result": null,
"requestId": "Ccs4oEhgRG1C7OYZE8tr2",
"elapsedMilliseconds": 725,
"status": { "message": "Unsupported file format", "code": "R130", "errors": [] },
"processId": "c676ffce-6bd3-4eb8-824c-730ba4c8324e"
}status.code), não na entrega.HTTP_ERROR).url e, se ela falhar, uma na fallbackUrl. Não há novas tentativas depois disso.TIMEOUT. [validar: tempo máximo de espera pela resposta]processId enquanto o processo não expirar (até 1 dia).webhookStatus.url falhou com HTTP 400 e a entrega foi feita pela fallbackUrl.{
"result": {
"createdAt": "2026-10-15T10:53:47.870576+00:00",
"updatedAt": "2026-10-15T10:53:50.425123+00:00",
"expiresAt": "2026-10-16T10:53:50.425123+00:00",
"processId": "fe57d87e-742e-4c40-a2f8-cc8fefe1a59e",
"requestId": "MGxcxSi5m5xVzds8oTT5Y",
"status": "PROCESSED",
"output": null,
"webhookStatus": {
"status": "SENT",
"webhookUrl": {
"status": "HTTP_ERROR",
"response": { "httpStatus": 400, "elapsedMilliseconds": 325 },
"elapsedMilliseconds": 327,
"tries": 1
},
"fallbackUrl": {
"status": "SENT",
"response": { "httpStatus": 200, "elapsedMilliseconds": 490 },
"elapsedMilliseconds": 491,
"tries": 1
},
"elapsedMilliseconds": 819
}
},
"requestId": "HPpjFt3sEaLLsq65VWd7w",
"elapsedMilliseconds": 115,
"status": { "message": "Ok", "code": "200", "errors": [] }
}| Campo | Tipo | Descrição |
|---|---|---|
status | string | Situação geral da entrega. Valores na tabela abaixo. |
webhookUrl | object | Resultado do envio para a url principal. |
fallbackUrl | object | Resultado do envio para a fallbackUrl. Mesma estrutura de webhookUrl. |
elapsedMilliseconds | integer | Tempo total gasto em todos os envios, em milissegundos. |
webhookStatus.status | Significado |
|---|---|
PENDING | O processamento terminou e o webhook ainda vai ser enviado. |
SENT | O webhook foi entregue, pela url ou pela fallbackUrl. |
FAILED | O webhook não foi entregue em nenhuma das URLs. |
| Campo | Tipo | Descrição |
|---|---|---|
status | string | Resultado do envio para aquela URL. Valores na tabela abaixo. |
response.httpStatus | integer | Código HTTP que o seu servidor respondeu. Em caso de várias tentativas, vale a última. |
response.elapsedMilliseconds | integer | Duração da última requisição enviada, em milissegundos. |
elapsedMilliseconds | integer | Tempo total de todas as tentativas para aquela URL, em milissegundos. |
tries | integer | Número de tentativas feitas para aquela URL (atualmente, 1). |
status da URL | Significado | O que verificar |
|---|---|---|
SENT | Entregue com sucesso. | — |
HTTP_ERROR | O seu servidor respondeu com um código fora da faixa 2xx. | Logs do seu servidor e o response.httpStatus. |
TIMEOUT | O seu servidor não respondeu a tempo. | Responda antes de processar o conteúdo. |
CONNECTION_ERROR | Não foi possível conectar: erro de DNS, conexão interrompida, entre outros. | Endereço da URL, DNS, firewall e certificado. |
AUTH_ERROR | Falha na autenticação da requisição de envio do webhook. | Configuração de mTLS e de autenticação. |
FAILED | Erro interno no envio. | Fale com o suporte informando o processId. |
expiresAt, o processo não é mais encontrado na rota de status (erro R125).https e um cabeçalho de autenticação próprio em authorization.headers para validar que a chamada veio do mostQI. Para mais segurança, ative o mTLS.processId. Guarde o processId retornado no envio e use-o para associar o resultado recebido à requisição original.processId chegar mais de uma vez, processe o resultado só uma vez.fallbackUrl em outro servidor ou outra infraestrutura, para que uma indisponibilidade não afete as duas URLs.expiresAt.| Código | Descrição |
|---|---|
| R138 | Invalid webhook configuration |
details indica qual campo está incorreto:{
"details": [
{
"field": "webhook.authorization.headers[0].name",
"message": "Forbidden webhook header name 'Content-Type'"
}
]
}| Mensagem | Causa |
|---|---|
Invalid webhook URL: '<url>' | url ou fallbackUrl fora das regras. |
Invalid webhook header name '<name>' | Nome de cabeçalho com caracteres não permitidos. |
Forbidden webhook header name '<name>' | Cabeçalho que o mostQI não permite informar. |
Invalid webhook header value '<value>' for header '<name>' | Valor de cabeçalho com caracteres não permitidos. |
Invalid webhook query string name '<name>' | Nome de query string vazio. |