API de entrada

A API de Entrada é o ponto de partida para qualquer execução de fluxo de trabalho no Sinky Studio. Ela permite o envio estruturado de dados para análise, enriquecimento, tomada de decisão e execução automatizada de regras. Você envia os dados conforme o schema do seu fluxo, e recebe o resultado final via webhook configurado. Esta seção detalha como montar a requisição, interpretar a resposta e lidar com erros — com exemplos completos de ponta a ponta.

API de Entrada (Input API)

A API de Entrada é o principal mecanismo para envio de dados que disparam a execução de fluxos de decisão no Sinky Studio.

Para mais detalhes técnicos e testes, acesse nossa Referência de API - Enviar Entrada.


Exemplo de Requisição

{
  "workflowId": "3f2504e0-4f89-41d3-9a0c-0305e82c3301",
  "inputData": {
    "first_name": "Joao",
    "last_name": "Silva",
    "email_address": "[email protected]",
    "telephone": "5511987669766",
    "date_of_birth": "10/03/1978",
    "address_line": "Avenida Brigadeiro Faria Lima",
    "address_line2": "",
    "city": "Sao Paulo",
    "state": "SP",
    "country": "BR",
    "zip": "01415000",
    "ssn_last_4digits": "1234",
    "serasa_credit_score": 520,
    "credit_requested": 30000,
    "debt_to_income_ratio": 80,
  },
  "metadata": {
      "internalId": : "Seu_id_de_controle_interno"
    }
}
CamposDescrição
workflowIdObrigatório. O ID do workflow ao qual você irá chamar.
inputDataObrigatório. Um objeto JSON que deve corresponder ao esquema do tipo de entrada. Ele contém todas as características de entrada para as regras.
metadataUm objeto JSON que poderá conter parametros internos para o seu controle interno

Exemplo de Resposta em Webhook

A execução do workflow é assíncrona e resposta será recebida via webhook configurado em seu workflow.

{
  "jobId": "exec_credit_analysis_789abc",
  "workflowId": "wf_credit_analysis_v1",
  "status": "completed",
  "startTime": "2024-01-15T14:20:00.000Z",
  "endTime": "2024-01-15T14:22:15.850Z",
  "executionTime": 135850,
  "metadata": {
    "source": "credit-platform",
    "requestId": "req_credit_123456",
    "clientId": "client_789"
  },
  "inputData": {
    "document": "12.345.678/0001-90",
    "requestType": "credit_analysis",
    "requestedAmount": 50000.00
  },
  "outputData": {
    "approved": true,
    "reason": "Score Serasa acima do limite mínimo",
    "serasaScore": 750,
    "creditLimit": 50000.00,
    "decidedAt": "2024-01-15T14:21:45.200Z",
    "decidedBy": "system",
    "callbackSent": true,
    "processedAt": "2024-01-15T14:22:15.850Z"
  },
  "errors": [],
  "nodeExecutions": [
    {
      "nodeId": "input_001",
      "nodeName": "Document Input",
      "nodeType": "input",
      "status": "completed",
      "startTime": "2024-01-15T14:20:00.100Z",
      "endTime": "2024-01-15T14:20:00.250Z",
      "executionTime": 150,
      "inputData": {
        "document": "12.345.678/0001-90",
        "requestType": "credit_analysis",
        "requestedAmount": 50000.00
      },
      "outputData": {
        "document": "12.345.678/0001-90",
        "cnpj": "12.345.678/0001-90",
        "requestType": "credit_analysis",
        "requestedAmount": 50000.00,
        "validatedAt": "2024-01-15T14:20:00.250Z"
      },
      "errors": []
    },
    {
      "nodeId": "integration_002",
      "nodeName": "Serasa Integration",
      "nodeType": "integration",
      "status": "completed",
      "startTime": "2024-01-15T14:20:00.300Z",
      "endTime": "2024-01-15T14:21:30.500Z",
      "executionTime": 90200,
      "inputData": {
        "document": "12.345.678/0001-90",
        "selectedSubProduct": "Serasa Report PJ Avançado"
      },
      "outputData": {
        "cnpj": "12.345.678/0001-90",
        "companyName": "Empresa Exemplo LTDA",
        "serasaScore": 750,
        "riskLevel": "low",
        "foundationDate": "2010-05-15",
        "legalStatus": "active",
        "mainActivity": "Desenvolvimento de software",
        "employees": 25,
        "revenue": 2500000.00,
        "creditHistory": {
          "totalDebts": 0,
          "pendingPayments": 0,
          "protestsCount": 0,
          "lastUpdate": "2024-01-15T14:21:30.500Z"
        },
        "enrichedAt": "2024-01-15T14:21:30.500Z"
      },
      "errors": []
    },
    {
      "nodeId": "ruleset_003",
      "nodeName": "Credit Score Validation",
      "nodeType": "ruleSet",
      "status": "completed",
      "startTime": "2024-01-15T14:21:30.550Z",
      "endTime": "2024-01-15T14:21:30.650Z",
      "executionTime": 100,
      "inputData": {
        "serasaScore": 750,
        "minimumScore": 700,
        "requestedAmount": 50000.00,
        "riskLevel": "low"
      },
      "outputData": {
        "matchedRule": "Score Above Minimum Threshold",
        "ruleIndex": 0,
        "selectedHandle": "approve",
        "action": "approve_credit",
        "scoreValid": true,
        "approvalRecommendation": "approve"
      },
      "errors": []
    },
    {
      "nodeId": "decision_004",
      "nodeName": "Credit Decision",
      "nodeType": "decision",
      "status": "completed",
      "startTime": "2024-01-15T14:21:30.700Z",
      "endTime": "2024-01-15T14:21:45.200Z",
      "executionTime": 14500,
      "inputData": {
        "approvalRecommendation": "approve",
        "serasaScore": 750,
        "requestedAmount": 50000.00,
        "companyName": "Empresa Exemplo LTDA"
      },
      "outputData": {
        "approved": true,
        "reason": "Score Serasa acima do limite mínimo",
        "creditLimit": 50000.00,
        "interestRate": 2.5,
        "paymentTerms": "12x",
        "decidedAt": "2024-01-15T14:21:45.200Z",
        "decidedBy": "system",
        "validUntil": "2024-02-15T14:21:45.200Z"
      },
      "errors": []
    },
    {
      "nodeId": "apicall_005",
      "nodeName": "Approval Callback",
      "nodeType": "apiCall",
      "status": "completed",
      "startTime": "2024-01-15T14:21:45.250Z",
      "endTime": "2024-01-15T14:22:15.850Z",
      "executionTime": 30600,
      "inputData": {
        "url": "https://client-system.com/api/credit-callback",
        "method": "POST",
        "headers": {
          "Authorization": "Bearer client_callback_token",
          "Content-Type": "application/json"
        },
        "body": {
          "requestId": "req_credit_123456",
          "cnpj": "12.345.678/0001-90",
          "approved": true,
          "creditLimit": 50000.00,
          "interestRate": 2.5,
          "paymentTerms": "12x",
          "serasaScore": 750,
          "decidedAt": "2024-01-15T14:21:45.200Z"
        }
      },
      "outputData": {
        "callbackSent": true,
        "responseStatus": 200,
        "responseBody": {
          "status": "received",
          "message": "Credit approval notification received successfully",
          "clientReference": "client_ref_789"
        },
        "sentAt": "2024-01-15T14:22:15.850Z"
      },
      "errors": []
    }
  ]
}

Interpretar e Consumir a resposta da API de Entrada e da API de Resultado

CampoDescriçãoInformações Adicionais
jobIdIdentificador único da execução do workflowIdentificador único do Job.
workflowIdIdentificador único do workflow executadoFormato: wf_seguido de nome do workflow e versão
statusStatus final da execução do workflowValores possíveis: completed, failed, timeout, canceled
startTimeData e hora de início da execuçãoFormato ISO 8601 (UTC)
endTimeData e hora de término da execuçãoFormato ISO 8601 (UTC)
executionTimeTempo total de execução em milissegundosDiferença entre endTime e startTime
metadataMetadados adicionais sobre a execuçãoObjeto contendo informações contextuais
inputDataDados de entrada fornecidos para o workflowVaria conforme o tipo de workflow
outputDataDados de saída produzidos pelo workflowResultado final da execução do workflow
errorsLista de erros ocorridos durante a execuçãoArray vazio quando não há erros
nodeExecutionsLista de execuções de cada nó do workflowArray de objetos detalhando a execução de cada nó

Campos do Objeto metadata

CampoDescriçãoInformações Adicionais
sourceOrigem da solicitação de execuçãoExemplo: credit-platform
requestIdIdentificador da requisição originalUsado para rastreabilidade
clientIdIdentificador do clienteReferência ao cliente que solicitou a execução

Campos do Objeto nodeExecutions

CampoDescriçãoInformações Adicionais
nodeIdIdentificador único do nóFormato: tipo de nó seguido de número sequencial
nodeNameNome descritivo do nóNome amigável configurado no designer do workflow
nodeTypeTipo do nóValores possíveis: input, integration, ruleSet, decision, apiCall, etc.
statusStatus da execução do nóValores possíveis: completed, failed, skipped
startTimeData e hora de início da execução do nóFormato ISO 8601 (UTC)
endTimeData e hora de término da execução do nóFormato ISO 8601 (UTC)
executionTimeTempo de execução do nó em milissegundosDiferença entre endTime e startTime do nó
inputDataDados de entrada recebidos pelo nóVaria conforme o tipo de nó
outputDataDados de saída produzidos pelo nóResultado do processamento do nó
errorsLista de erros ocorridos durante a execução do nóArray vazio quando não há erros

A seguir, passaremos por um caminho feliz (happy path) e forneceremos detalhes sobre o tratamento de erros.

Passo 1: Verifique o código de resposta http

Primeiro, verifique se o código de resposta http é 200.

Passo 2: Verifique a seção de erros

Em seguida, verifique se a seção de erros (errors) está vazia.

"errors":[]

Se a lista de erros não estiver vazia, consulte a seção de tratamento de erros no final deste documento.

Passo 3: Revise a seção de saídas (outputs / outputData)

A seção outputData contém os resultados da execução do fluxo de trabalho.

O parametro outputData na raiz do objeto inclui o nome de cada decisão, status e motivo (juntamente com quaisquer outros argumentos de decisão). Pode haver múltiplas decisões.

  "outputData": {
    "approved": true,
    "reason": "Score Serasa acima do limite mínimo",
    "serasaScore": 750,
    "creditLimit": 50000.00,
    "decidedAt": "2024-01-15T14:21:45.200Z",
    "decidedBy": "system",
    "callbackSent": true,
    "processedAt": "2024-01-15T14:22:15.850Z"
  }

Passo Opcional: Revise a seção de outputData para cada etapa

A seção outputData dentro de nodeExecutions irá ter o resultado de cada etapa que foi chamada dentro do fluxo de um determinado Job.

O exemplo abaixo é uma resposta simulada de uma etapa de Integração com um provedor que foi ativado no Sinky Data Marketplace.

{
      "nodeId": "integration_002",
      "nodeName": "Serasa Integration",
      "nodeType": "integration",
      "status": "completed",
      "startTime": "2024-01-15T14:20:00.300Z",
      "endTime": "2024-01-15T14:21:30.500Z",
      "executionTime": 90200,
      "inputData": {
        "document": "12.345.678/0001-90",
        "selectedSubProduct": "Serasa Report PJ Avançado"
      },
      "outputData": {
        "cnpj": "12.345.678/0001-90",
        "companyName": "Empresa Exemplo LTDA",
        "serasaScore": 750,
        "riskLevel": "low",
        "foundationDate": "2010-05-15",
        "legalStatus": "active",
        "mainActivity": "Desenvolvimento de software",
        "employees": 25,
        "revenue": 2500000.00,
        "creditHistory": {
          "totalDebts": 0,
          "pendingPayments": 0,
          "protestsCount": 0,
          "lastUpdate": "2024-01-15T14:21:30.500Z"
        },
        "enrichedAt": "2024-01-15T14:21:30.500Z"
      },
      "errors": []
    },


Tratamento de Erros

Erros na execução do fluxo de trabalho

A seção errors lista todos os erros que ocorreram durante a execução do fluxo de trabalho (se aplicável). Por exemplo, um erro http ocorreu durante uma chamada de integração de terceiros.

Erros podem haver na seção principal da raiz do resultado ou dentro das etapas (nodeExecutions).

"errors":[
  {
    "message":"Third party internal error",
    "code":90004,
    "context":"{http_code=404, method=POST, request_body={\"phoneNumber\":\"2001001687\",],\"ssn\":\"xx\"}, response_body={\"status\":1012,\"description\":\"No CRM data available\",\"additionalInfo\":\"full ssn mismatch\"}}"
  }
]

Erros Fatais

No evento improvável de um erro fatal, o código de resposta http não será 2xx. O código de erro seguirá as convenções http e mais detalhes serão fornecidos no corpo da resposta de erro.

Formato do Erro

Todos os erros retornarão com o mesmo formato base.

{
  "requestId": "420f0910-a664-4671-8d16-29f05e28530a",
  "message": "Event type not found, please check event type name in the input",
  "type": "enrichment",
  "code": 4001,
  "context": "{\"missing_event_type\": \"get_eligibility_v2\"}",
}
AtributoDescrição
RequestUUID, identificador da requisição.
MessageDescrição detalhada do erro.
TypeClassificação de alto nível do erro.
CodeCódigo de erro indicando o tipo exato do erro. Cada tipo de erro tratado no sistema Sinky recebe um código de erro único. Veja abaixo a lista de possíveis códigos de erro secundários.
ContextUma string JSON contendo pares de chave/valor como informações de contexto do erro.

Códigos de erro secundários

Código HTTPCódigo SecundárioDescrição
4004000Requisição inválida (Bad request)
4001Tipo de evento não encontrado
4002Falha na validação do corpo da requisição
4003Falha na análise do JSON do corpo da requisição
4004Regra ou fluxo de trabalho não especificado
4094091Enriquecimento assíncrono não é suportado pela execução síncrona
4014011Autenticação, geral
4012Autenticação, token inválido
404Não encontrado (Not found)
415Formato de arquivo não suportado
5005000Erro de servidor não tratado
5001Erro de acesso à entidade
5002Erro de conversão de esquema
5003Erro de enriquecimento de característica
5004Erro na execução da decisão
5005Erro de validação
5006Timeout na execução
90002Atributo ausente durante a execução
90003Busca de terceiros resultou em um erro "400 (bad request)"
90004Terceiro retornou um erro interno
90005Busca de terceiros retornou um erro de "resposta não disponível"
90006Busca de terceiros retornou um erro de autorização
90007Erro no armazenamento de entrada
90008Conflito no armazenamento de entrada
90010Erro na busca da lista de documentos
90011Timeout na espera do webhook de integração assíncrona
503Serviço indisponível (Service Unavailable)