Nora AI

Acompanhar Extração

Verifica o status de uma extração usando o código de rastreamento. Use polling (a cada 2s) até o status mudar de pending/processing para success ou error.

GET
/extractions/track/{trackingCode}
x-api-key<token>

Chave de API para acesso programático. Obtida via dashboard.

In: header

Path Parameters

trackingCode*string

Código de rastreamento retornado pelo endpoint de execução.

Response Body

application/json

application/json

application/json

application/json

curl -X GET "https://api.nora.dclick.com.br/extractions/track/aB3cD4eF5gH7"

{
  "extraction": {
    "id": "019462a1-b2c3-7d4e-8f5a-6b7c8d9e0f1a",
    "agentId": "uuid-do-agente",
    "userId": "uuid-do-usuario",
    "trackingCode": "aB3cD4eF5gH7",
    "inputFileName": "nota-fiscal-001.pdf",
    "inputType": "application/pdf",
    "resultJson": null,
    "confidenceJson": null,
    "status": "processing",
    "errorCode": null,
    "errorMessage": null,
    "totalTokens": null,
    "inputTokens": null,
    "outputTokens": null,
    "createdAt": "2025-01-15T10:00:00.000Z"
  },
  "data": null,
  "confidence": null
}

{
  "error": "Não autorizado.",
  "code": "UNAUTHORIZED"
}
{
  "error": "Extração não encontrada.",
  "code": "EXTRACTION_NOT_FOUND"
}
{
  "error": "Limite de requisições excedido. Tente novamente mais tarde.",
  "code": "API_KEY_RATE_LIMITED",
  "tryAgainIn": 42350
}

Exemplo de Polling

import time
import requests

API_URL = "https://api.nora.dclick.com.br"
API_KEY = "nora_sk_sua_chave_aqui"
TRACKING_CODE = "aB3cD4eF5gH7"

headers = {"x-api-key": API_KEY}

max_attempts = 60

for attempt in range(max_attempts):
    resp = requests.get(f"{API_URL}/extractions/track/{TRACKING_CODE}", headers=headers)
    result = resp.json()
    status = result["extraction"]["status"]

    print(f"[{attempt + 1}/{max_attempts}] Status: {status}")

    if status == "success":
        print("Dados extraídos:", result["data"])
        print("Confiança:", result["confidence"])
        break

    if status == "error":
        print("Erro:", result["extraction"]["errorCode"])
        print("Mensagem:", result["extraction"]["errorMessage"])
        break

    time.sleep(5)
else:
    print("Tempo limite atingido. A extração ainda está em processamento.")