Rotas de API
Referência técnica da API REST externa da plataforma, onde conseguir suas credenciais, o que cada rota espera receber e o que ela devolve, limites de uso e um testador interativo para experimentar as chamadas sem sair da documentação.
Visão geral do serviço
A API externa é um serviço próprio, separado da interface web, feito para sistemas de terceiros integrarem com a plataforma sem depender de sessão de navegador: um ERP disparando execuções, um orquestrador consultando status, um painel externo lendo histórico de resultados.
Todas as rotas ficam sob o caminho base /v1, publicado em https://api.browsermate.io:8443. Esse é o endereço padrão do serviço, já preenchido em URL Base no testador, mais abaixo.
Onde obter suas credenciais
O guia completo de geração e gestão das duas credenciais está em Chaves de API. Aqui vai um resumo direto ao ponto. São duas credenciais diferentes, geradas em dois lugares diferentes da plataforma. Nenhuma delas expõe qualquer identificador interno de outro usuário. Em particular, você nunca precisa saber ou informar quem é o dono de um processo: se ele foi compartilhado com você, a API descobre isso sozinha a partir do seu próprio compartilhamento.
1. Credencial de conta: identifica quem está chamando
Vale para todas as chamadas. É a sua identidade perante a API.
- No Menu, acesse Credenciais de API.
- Clique em Gerar credencial e dê um nome (Label) que identifique o sistema que vai usá-la. Ex.:
ERP Produção. - Copie o valor completo mostrado, no formato
bm_live_<prefixo>.<segredo>. Ele só aparece uma vez, nesta tela, logo após a criação. - Use esse valor completo no header
Authorization: Bearer bm_live_...em toda chamada.
2. Chave do processo: libera uma automação específica
Vale só para chamadas sobre aquele processo. É a mesma chave descrita em Chaves de API.
- Na tela Meus Agentes, no card do processo, clique no ícone ⇄ APIs.
- Preencha um Identificador, que vira o rótulo do "executor" registrado na trilha de auditoria de cada chamada feita com essa chave, e clique em Gerar Código.
- Copie o código gerado e use-o no header
X-Process-Keynas chamadas sobre este processo. - Confirme que a Permissão de Acesso das APIs do processo está em LIBERADO. Sem isso, a chave não funciona mesmo sendo válida.
Como as credenciais são usadas
| Header | Credencial | Quando enviar |
|---|---|---|
Authorization: Bearer bm_live_... |
Credencial de conta | Sempre, em toda rota, exceto GET /ping |
X-Process-Key: <código> |
Chave do processo | Só nas rotas que operam sobre um processo específico: detalhes, matrix, histórico, disparo de execução e criação de agendamento |
Idempotency-Key: <chave sua> |
Definida por você (não é gerada pela plataforma) | Opcional, só em POST /processes/:pid/start. Ver Limites e controles |
Veja em Catálogo de rotas o resumo de cabeçalhos exigidos por cada rota, e um exemplo de requisição completa (com todos os headers) para cada uma.
Formato de respostas e erros
Erros sempre voltam no mesmo formato, com um código estável para tratamento automático e uma mensagem legível:
{
"error": {
"code": "PROCESS_KEY_EXPIRED",
"message": "Chave de API do processo expirada."
}
}
| HTTP | Código | Situação |
|---|---|---|
| 400 | INVALID_PROCESS_ID, INVALID_MATRIX, INVALID_ACTION, INVALID_NAME, INVALID_CRON | Parâmetro ausente ou em formato inválido |
| 401 | MISSING_CREDENTIAL, INVALID_CREDENTIAL, CREDENTIAL_REVOKED, CREDENTIAL_EXPIRED | Problema com a credencial de conta |
| 401 | MISSING_PROCESS_KEY, INVALID_PROCESS_KEY, PROCESS_KEY_REVOKED, PROCESS_KEY_EXPIRED | Problema com a chave do processo |
| 402 | PLAN_FEATURE_UNAVAILABLE | O plano atual da conta não inclui o recurso que a chamada pediu: acesso à API externa (vale para toda rota) ou agendamento de execuções (rotas de /schedules). A credencial continua válida, mas a chamada não executa até um upgrade de plano (ver Créditos). A mensagem devolvida diz qual dos dois faltou |
| 403 | FORBIDDEN | Sua conta não tem vínculo com o processo (não é dono nem foi compartilhado com ela), ou o compartilhamento não inclui a permissão exigida pela rota |
| 403 | API_DISABLED | O processo existe e você tem acesso a ele, mas o acesso via API está BLOQUEADO |
| 403 | OWNER_INACTIVE | O dono do processo está sem acesso ativo na plataforma, por bloqueio do administrador da empresa ou por suspensão do plano. A execução não chega a ser enfileirada, e repetir a chamada não resolve enquanto o acesso não for restabelecido |
| 402 | INSUFFICIENT_CREDITS | A empresa dona do processo está sem saldo de créditos no plano atual (ver Créditos). A execução não chega a ser enfileirada, e repetir a chamada não resolve até o próximo reset mensal ou um upgrade de plano |
| 404 | PROCESS_NOT_FOUND, INSTANCE_NOT_FOUND, SCHEDULE_NOT_FOUND, NOT_FOUND | Recurso inexistente ou fora do alcance da sua conta |
| 409 | INSTANCE_FINISHED, INSTANCE_UNRESOLVED | Ação de controle não se aplica ao estado atual da instância |
| 409 | PROCESS_NOT_PUBLISHED | O processo ainda não tem versão publicada em produção, então não há etapa a executar. Vale para o start, o webhook e o agendamento: nada é enfileirado, e repetir a chamada não resolve até o dono publicar a primeira versão no editor |
| 429 | RATE_LIMITED | Limite de requisições excedido. Ver Limites e controles |
| 502 | ROUTER_ERROR | Falha ao enfileirar a execução no ambiente de destino |
| 400 | INVALID_ENVIRONMENT | O ambiente de destino não existe ou está fora do alcance. Vale para o environmentID enviado na chamada e para o ambiente cadastrado no processo, quando o dono dele deixou de alcançá-lo. Diferente de AGENT_OFFLINE, repetir a chamada não resolve: o cadastro precisa ser corrigido |
| 503 | AGENT_OFFLINE | O ambiente/runtime do processo está offline e sem fila para execuções pendentes |
Limites e controles
- Limite global: 120 requisições por minuto por credencial de conta.
- Limite de disparo: 10 chamadas por minuto a
POST /processes/:pid/startpor credencial, pensado para o volume de um disparador de execuções, não para rajadas de teste. - Idempotência: enviando o mesmo
Idempotency-Keydentro de 24 horas emPOST /processes/:pid/start, a chamada devolve a mesmainstanceIDjá criada em vez de iniciar uma nova execução, útil para retries seguros em caso de timeout de rede. - Validação da matrix: os campos enviados em
matrixprecisam corresponder aos nomes de Variável definidos no processo (verGET /processes/:pid/matrix); campos desconhecidos são rejeitados. - Sempre a versão publicada: a API não aceita nem precisa de um parâmetro de versão. Ela sempre dispara a versão atualmente publicada do processo. Não existe, em nenhum lugar da plataforma (nem na execução manual, nem no agendamento), uma forma de fixar uma versão histórica específica por número.
Catálogo de rotas
Resumo dos cabeçalhos exigidos por rota. O detalhe completo (parâmetros, requisição de exemplo e resposta) vem logo abaixo de cada uma:
| Rota | Authorization | X-Process-Key | Idempotency-Key |
|---|---|---|---|
GET/ping | — | — | — |
GET/me | obrigatório | — | — |
GET/environments | obrigatório | — | — |
GET/processes | obrigatório | — | — |
GET/processes/:pid | obrigatório | obrigatório | — |
GET/processes/:pid/matrix | obrigatório | obrigatório | — |
GET/processes/:pid/executions | obrigatório | obrigatório | — |
POST/processes/:pid/start | obrigatório | obrigatório | opcional |
GET/instances/:iid | obrigatório | — | — |
POST/instances/:iid/stop|pause|resume | obrigatório | — | — |
GET/instances/:iid/logs | obrigatório | — | — |
GET/schedules | obrigatório | — | — |
POST/schedules | obrigatório | obrigatório | — |
PATCH/schedules/:id | obrigatório | — | — |
DELETE/schedules/:id | obrigatório | — | — |
curl assumem estas três variáveis já exportadas no terminal. API_BASE já é o endereço padrão do serviço; troque BM_TOKEN e PROCESS_KEY pelos seus valores reais:
export API_BASE="https://api.browsermate.io:8443"
export BM_TOKEN="bm_live_9fQ2xR7a.k3JYQnP8mR2tWv5XoZ1cLdEfGhIjKlMnOpQr"
export PROCESS_KEY="7f3a9c1d2e5b8f0a4d6c8e1b3f5a7d9c"
Meta
GET/v1/ping
Verifica se o serviço está no ar. Não exige autenticação.
Recebe: nada, sem parâmetros, sem headers de autenticação.
curl "$API_BASE/v1/ping"
Devolve:
{ "ok": true, "version": "1" }
GET/v1/me
Identidade da credencial de conta usada na chamada.
Recebe: só o header de autenticação, sem parâmetros.
curl "$API_BASE/v1/me" \
-H "Authorization: Bearer $BM_TOKEN"
Devolve: o e-mail, nome e o rótulo (label) da credencial usada, útil para confirmar que a credencial certa está configurada no seu sistema.
{
"account": {
"email": "maria@empresa.com",
"name": "Maria Souza",
"credId": "-Nab12cd34",
"credLabel": "ERP Produção"
}
}
Ambientes
GET/v1/environments
Lista os ambientes que a sua conta pode usar como destino de execução.
Recebe: só o header de autenticação, sem parâmetros. É a partir daqui que você descobre os environmentID aceitos no disparo e no agendamento, os mesmos IDs que aparecem no cartão de cada ambiente na tela Ambientes.
environmentID.
curl "$API_BASE/v1/environments" \
-H "Authorization: Bearer $BM_TOKEN"
Devolve: os ambientes próprios e os ambientes compartilhados pela sua empresa. online indica se o agente está conectado neste momento; offlineFlow indica se ele aceita receber execuções na fila enquanto está offline; shared marca os que pertencem a um administrador da empresa e foram publicados para todos.
{
"environments": [
{
"environmentID": "3f1c9a52-77e0-4b18-9d33-8a1e2c4b6d70",
"name": "Servidor Financeiro",
"description": "VM do time de contas a pagar",
"online": true, "offlineFlow": false,
"envType": "prod", "os": "windows", "shared": false
}
]
}
Processos
GET/v1/processes
Lista os processos da sua conta e os compartilhados com você, com informações básicas.
Recebe: só o header de autenticação, sem parâmetros. É a partir daqui que você descobre os processID disponíveis para usar nas rotas seguintes.
curl "$API_BASE/v1/processes" \
-H "Authorization: Bearer $BM_TOKEN"
Devolve: processos próprios ("owned": true) e compartilhados com você ("owned": false, com as permissões que o dono concedeu no compartilhamento).
{
"processes": [
{ "processID": "1042", "processName": "Importação NF-e", "agentName": "NF-Importer", "active": true, "paused": false, "owned": true },
{ "processID": "2087", "processName": "Conciliação Bancária", "agentName": "Financeiro-Bot", "active": true, "owned": false,
"ownerName": "João Lima",
"permissions": { "execute": true, "edit": false, "api": true, "schedule": true, "delete": false, "share": false } }
]
}
Repare que o item compartilhado não traz nenhum token do dono, só o nome dele (ownerName) e as permissões concedidas. Para agir sobre esse processo, use o processID normalmente: a chave do processo (gerada pelo dono) já é suficiente para a API resolver tudo.
GET/v1/processes/:pid
Detalhes do processo, incluindo a definição da matrix de parâmetros.
Recebe:
| Nome | Onde | Obrigatório | Descrição |
|---|---|---|---|
pid | caminho da URL | sim | ID do processo (veja em GET /processes) |
Authorization | header | sim | Sua credencial de conta |
X-Process-Key | header | sim | Chave gerada para este processo |
curl "$API_BASE/v1/processes/1042" \
-H "Authorization: Bearer $BM_TOKEN" \
-H "X-Process-Key: $PROCESS_KEY"
Devolve:
{
"processID": "1042",
"processName": "Importação NF-e",
"description": "Lê XML de NF-e e lança no ERP",
"agentName": "NF-Importer",
"active": true,
"apiEnabled": true,
"currentVersion": 3,
"avgHumanTime": "0:45",
"avgOperatorCost": 12.5,
"matrix": [
{ "name": "cnpj_fornecedor", "type": "Texto", "default": "" }
]
}
404 PROCESS_NOT_FOUND se o processo não existir; 403 FORBIDDEN se sua conta não for dona nem tiver compartilhamento com esse processo.
GET/v1/processes/:pid/matrix
Só a definição dos campos de parâmetro do processo, útil para montar formulários.
Recebe: o mesmo que GET /processes/:pid (pid na URL, Authorization e X-Process-Key nos headers).
curl "$API_BASE/v1/processes/1042/matrix" \
-H "Authorization: Bearer $BM_TOKEN" \
-H "X-Process-Key: $PROCESS_KEY"
Devolve: os campos (name) que você vai usar depois como chave de matrix no disparo de execução ou na criação de agendamento, o mesmo nome de Variável que aparece no cadastro do processo.
{ "matrix": [ { "name": "cnpj_fornecedor", "type": "Texto", "default": "" } ] }
GET/v1/processes/:pid/executions
Histórico de execuções do processo, com status, duração e ganhos por execução.
Recebe:
| Nome | Onde | Obrigatório | Descrição |
|---|---|---|---|
pid | caminho da URL | sim | ID do processo |
from | query string | não | Data inicial AAAA-MM-DD. Padrão: 30 dias atrás. |
to | query string | não | Data final AAAA-MM-DD. Padrão: hoje. |
limit | query string | não | Quantidade máxima de linhas (1–500). Padrão: 50. |
curl "$API_BASE/v1/processes/1042/executions?from=2026-06-01&to=2026-07-06&limit=20" \
-H "Authorization: Bearer $BM_TOKEN" \
-H "X-Process-Key: $PROCESS_KEY"
Devolve:
{
"from": "2026-06-01", "to": "2026-07-06",
"executions": [
{ "instanceID": "a1b2c3", "processID": "1042", "processName": "Importação NF-e",
"status": "success", "startedAt": "2026-07-06T13:02:11.000Z", "finishedAt": "2026-07-06T13:04:47.000Z",
"durationSeconds": 156, "savingsValue": 12.5, "fteHours": 0.75 }
]
}
POST/v1/processes/:pid/start
Dispara uma execução do processo, com parâmetros opcionais.
Para sistemas que empurram eventos (CRM, ERP, formulários), o caminho recomendado é o webhook do processo, sem credenciais no header e com mapeamento visual do payload. Esta rota continua sendo a opção certa quando o chamador quer controlar os valores da matrix a cada disparo, ou quando quem dispara é uma conta com quem o processo foi compartilhado.
Recebe:
| Nome | Onde | Obrigatório | Descrição |
|---|---|---|---|
pid | caminho da URL | sim | ID do processo |
matrix | corpo (JSON) | não | Objeto { variavel: valor } com overrides para esta execução. Os nomes vêm de GET /processes/:pid/matrix (o mesmo nome de Variável cadastrado no processo) |
environmentID | corpo (JSON) | não | Ambiente que deve executar. Os IDs vêm de GET /environments. Omitido, vale o ambiente cadastrado no processo |
Idempotency-Key | header | não | Chave sua para tornar o disparo seguro contra retries |
A permissão de execução precisa estar concedida no compartilhamento, se o processo não for seu (ver permissions.execute em GET /processes).
Cada campo de matrix tem um type (devolvido por GET /processes/:pid/matrix), e o valor enviado é lido pelo tipo. Um valor que não cabe no tipo é recusado com INVALID_MATRIX, e a mensagem diz qual campo foi:
| Type | Formato do valor | Exemplo |
|---|---|---|
Texto | string | "12.345.678/0001-99" |
Número | number, ou string com vírgula decimal | 3, "2,5" |
Moeda | number (ponto decimal), ou string no formato brasileiro, com ou sem R$ | 1500.5, "1.500,50" |
Verdadeiro/Falso | boolean, ou string "sim"/"não", "1"/"0" | true |
Lista | array (cada elemento é um item), ou string com os itens separados por vírgula | ["Av. Paulista, 1020", "Rua Augusta, 500"], "SP, RJ, MG" |
Objeto | objeto JSON, ou string com um JSON | {"nome": "Ana", "idade": 30} |
Secreto | string (ou number). Sem valor padrão: o valor só existe se você o enviar | "sk_live_9f8e7d" |
["Av. Paulista, 1020", "Rua Augusta, 500"] são dois itens. Os elementos podem ser registros ([{"numero": "P1"}, {"numero": "P2"}]). Numa string, cada vírgula separa um item. Array é aceito nos campos Lista e Objeto, e objeto no campo Objeto; nos demais casos, a chamada é recusada com INVALID_MATRIX.
GET /processes/:pid/matrix devolve esse campo com default sempre vazio. O tipo Secreto não pode ser usado na criação de agendamento (INVALID_MATRIX), porque o registro de um agendamento fica guardado. Veja Dados Sensíveis.
environmentID, esta chamada específica roda no ambiente que você indicar, sem alterar o cadastro do processo. Só valem ambientes da sua conta ou compartilhados pela sua empresa; qualquer outro é recusado com INVALID_ENVIRONMENT.
curl -X POST "$API_BASE/v1/processes/1042/start" \
-H "Authorization: Bearer $BM_TOKEN" \
-H "X-Process-Key: $PROCESS_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: pedido-8231" \
-d '{
"matrix": {
"cnpj_fornecedor": "12.345.678/0001-99",
"numero_tentativas": 3,
"valor_minimo": 1500.50,
"reprocessar_pendentes": true,
"cpfs_lista": ["111.111.111-11", "222.222.222-22", "333.333.333-33"]
}
}'
curl -X POST "$API_BASE/v1/processes/1042/start" \
-H "Authorization: Bearer $BM_TOKEN" \
-H "X-Process-Key: $PROCESS_KEY" \
-H "Content-Type: application/json" \
-d '{ "environmentID": "3f1c9a52-77e0-4b18-9d33-8a1e2c4b6d70" }'
Devolve: o instanceID criado. Guarde-o para consultar o status depois em GET /instances/:iid.
{ "instanceID": "a1b2c3", "status": "started" }
{ "instanceID": "a1b2c3", "status": "queued" }
503 AGENT_OFFLINE se o ambiente estiver offline e sem fila habilitada. A mensagem traz o nome do ambiente que está fora. 400 INVALID_ENVIRONMENT se o environmentID enviado não existir ou não estiver ao alcance da sua conta, e também quando o ambiente cadastrado no próprio processo não é alcançável pelo dono dele, caso em que a mensagem traz o identificador do ambiente e a correção é no cadastro do processo, não na chamada. 403 OWNER_INACTIVE se o dono do processo estiver sem acesso ativo na plataforma: nesse caso nada é enfileirado, e a situação só muda quando o acesso dele for restabelecido. 409 PROCESS_NOT_PUBLISHED se o processo ainda não tiver versão publicada em produção: nada é enfileirado até o dono publicar a primeira versão no editor. Reenviando com o mesmo Idempotency-Key dentro de 24h, a resposta volta com "replayed": true e o instanceID da primeira chamada, em vez de criar uma nova execução.
Instâncias
GET/v1/instances/:iid
Status de uma execução: na fila, em execução, ou o resultado final.
Recebe: o instanceID devolvido pelo start, no caminho da URL. Não precisa da chave do processo, só da sua credencial de conta.
| Nome | Onde | Obrigatório | Descrição |
|---|---|---|---|
iid | caminho da URL | sim | instanceID devolvido pelo start |
curl "$API_BASE/v1/instances/a1b2c3" \
-H "Authorization: Bearer $BM_TOKEN"
Devolve: o formato muda conforme o estágio da execução.
{ "instanceID": "a1b2c3", "processID": "1042", "status": "running", "processName": "Importação NF-e", "userName": "ERP Produção", "startedAt": 1751818931000 }
{
"instanceID": "a1b2c3", "processID": "1042", "processName": "Importação NF-e",
"status": "success", "startedAt": "2026-07-06T13:02:11.000Z", "finishedAt": "2026-07-06T13:04:47.000Z",
"durationSeconds": 156, "errorStep": null, "errorMessage": null,
"savingsValue": 12.5, "fteHours": 0.75, "version": "3"
}
status assume queued, running, success, error, terminated, stopped ou unknown (curta janela entre sair da fila e aparecer como em execução). 404 INSTANCE_NOT_FOUND se a instância não existir ou não pertencer à sua conta.
POST/v1/instances/:iid/stop · /pause · /resume
Controla uma execução em andamento (parar, pausar ou retomar).
Recebe: o instanceID no caminho, mais a ação (stop, pause ou resume) como último segmento da URL. Sem corpo.
curl -X POST "$API_BASE/v1/instances/a1b2c3/pause" \
-H "Authorization: Bearer $BM_TOKEN"
Devolve:
{ "ok": true, "action": "pause" }
409 INSTANCE_FINISHED se a execução já terminou; 404 INSTANCE_NOT_FOUND se não existir ou não pertencer à sua conta.
GET/v1/instances/:iid/logs
Logs de passos da execução, os mesmos da Trilha de Auditoria. Útil para investigar falhas.
Recebe: o instanceID no caminho da URL.
curl "$API_BASE/v1/instances/a1b2c3/logs" \
-H "Authorization: Bearer $BM_TOKEN"
Devolve:
{ "logs": [ { "timestamp": "2026-09-21T10:00:01Z", "severity": "INFO", "message": "Etapa concluída: Ler XML", "stepID": "Ler XML", "userName": "ERP Produção", "version": "3", "evidence": null } ] }
São as linhas do registro oficial da execução, em ordem cronológica e até 1000 por chamada. Por isso seguem o prazo de retenção do plano, e o dado marcado como sensível aparece mascarado. O stepID é o nome da etapa, e severity vale INFO, WARNING ou ERROR. Só enxerga a instância quem a executou ou é dono do processo.
Agendamentos
GET/v1/schedules
Lista seus agendamentos, incluindo os criados via API em processos compartilhados.
Recebe: só o header de autenticação, sem parâmetros.
curl "$API_BASE/v1/schedules" \
-H "Authorization: Bearer $BM_TOKEN"
Devolve:
{
"schedules": [
{ "id": "-Nab99xy", "name": "Conciliação diária", "processID": "1042", "processName": "Importação NF-e",
"cronExpression": "0 9 * * 1-5", "active": true, "userName": "ERP Produção", "matrix": {},
"environmentID": "3f1c9a52-77e0-4b18-9d33-8a1e2c4b6d70" }
]
}
unavailable
Um agendamento pode estar "active": true e mesmo assim não disparar, quando o plano da empresa dona do processo deixou de incluir agendamento de execuções. Nesse caso a entrada vem com "unavailable": "OWNER_PLAN_NO_SCHEDULING". Ela continua na lista de propósito: some da execução, não da integração. O campo só aparece quando é o caso, então quem já consome esta rota não precisa mudar nada.
POST/v1/schedules
Cria um novo agendamento para o processo, com recorrência em formato CRON.
Recebe:
| Campo | Onde | Obrigatório | Descrição |
|---|---|---|---|
processID | corpo (JSON) | sim | ID do processo. A chave enviada em X-Process-Key precisa ser deste processo |
name | corpo (JSON) | sim | Nome do agendamento |
cronExpression | corpo (JSON) | sim | Expressão CRON padrão (fuso America/São Paulo) |
matrix | corpo (JSON) | não | Objeto { variavel: valor } aplicado como override fixo em toda execução agendada. Mesma regra de nomes do start manual |
environmentID | corpo (JSON) | não | Ambiente que deve executar o agendamento. Os IDs vêm de GET /environments. Omitido, vale o ambiente cadastrado no processo |
active | corpo (JSON) | não | Padrão true |
A permissão de agendamento precisa estar concedida no compartilhamento, se o processo não for seu.
402 PLAN_FEATURE_UNAVAILABLE e nada é gravado. Em processo compartilhado, quem vale é o plano da empresa dona do processo, porque o disparo periódico roda na conta dela e consome os créditos dela.
matrix segue o type devolvido por GET /processes/:pid/matrix (ver a tabela completa em POST /processes/:pid/start). Vale a mesma regra para campos tipo Lista: array, com cada elemento como um item, ou string com os itens separados por vírgula.
matrix nesta rota devolve 400 INVALID_MATRIX dizendo qual campo. Para um agendamento que precisa de credencial, use o Cofre nos campos da etapa. Veja Dados Sensíveis.
curl -X POST "$API_BASE/v1/schedules" \
-H "Authorization: Bearer $BM_TOKEN" \
-H "X-Process-Key: $PROCESS_KEY" \
-H "Content-Type: application/json" \
-d '{
"processID": "1042",
"name": "Conciliação diária",
"cronExpression": "0 9 * * 1-5",
"environmentID": "3f1c9a52-77e0-4b18-9d33-8a1e2c4b6d70",
"matrix": {
"numero_tentativas": 3,
"valor_minimo": 1500.50,
"reprocessar_pendentes": true,
"cpfs_lista": ["111.111.111-11", "222.222.222-22", "333.333.333-33"]
}
}'
Devolve: o ID do agendamento criado.
{ "id": "-Nab99xy" }
userName registra o rótulo da chave usada na criação, preservando a rastreabilidade de quem configurou o agendamento.
PATCH/v1/schedules/:id
Ativa ou desativa um agendamento existente.
Recebe: o id do agendamento no caminho, e o novo estado no corpo.
| Campo | Onde | Obrigatório | Descrição |
|---|---|---|---|
id | caminho da URL | sim | ID do agendamento (veja em GET /schedules) |
active | corpo (JSON) | sim | true para ativar, false para desativar |
curl -X PATCH "$API_BASE/v1/schedules/-Nab99xy" \
-H "Authorization: Bearer $BM_TOKEN" \
-H "Content-Type: application/json" \
-d '{ "active": false }'
Devolve:
{ "id": "-Nab99xy", "active": false }
Erros: 402 PLAN_FEATURE_UNAVAILABLE ao enviar active: true quando o plano da empresa dona do processo não inclui agendamento de execuções. Desativar é sempre aceito: active: false continua funcionando mesmo depois de uma queda de plano, e essa é a via para desligar um agendamento que o downgrade deixou ligado.
DELETE/v1/schedules/:id
Remove um agendamento definitivamente.
Recebe: o id do agendamento no caminho.
curl -X DELETE "$API_BASE/v1/schedules/-Nab99xy" \
-H "Authorization: Bearer $BM_TOKEN"
Devolve:
{ "ok": true }
Webhook: contrato da rota
Cada processo tem um webhook próprio: uma URL que sistemas externos chamam com um POST JSON para entregar dados e disparar a automação. É o caminho para integrar sistemas que empurram eventos, como um CRM ao ganhar um negócio, um ERP ao emitir uma nota ou um formulário ao receber uma resposta.
Diferente das rotas do catálogo acima, o webhook não usa credencial de conta nem chave de processo: o segredo vai embutido na própria URL, porque o sistema chamador muitas vezes só sabe fazer um POST, sem headers customizados. Trate a URL como uma senha: quem a tem consegue chamá-la.
POST/v1/hooks/:pid/:token
Recebe o payload do sistema externo. Captura (dev) ou dispara a versão publicada (produção).
Recebe:
| Nome | Onde | Obrigatório | Descrição |
|---|---|---|---|
pid e token | caminho da URL | sim | Já vêm prontos na URL copiada do modal. Não monte manualmente |
| corpo | JSON | não | O payload do evento (até 1 MB; acima de 100 KB a captura de teste não fica disponível para mapeamento) |
Idempotency-Key | header | não | Só na URL de produção: retry com a mesma chave em 24h devolve a mesma instanceID em vez de disparar de novo |
curl -X POST "$WEBHOOK_URL" \
-H "Content-Type: application/json" \
-d '{ "customer": { "email": "ana@acme.com" }, "order": { "id": "PED-8812", "total": 149.90 } }'
Devolve (desenvolvimento):
{ "captured": true, "captureId": "-Nab12cd" }
Devolve (produção):
{ "instanceID": "8f3a…", "status": "started" }
Devolve (produção, origem em modo Aguardar): a conexão fica aberta até o processo responder ou o limite de espera da origem acabar (padrão 30 s, máximo 120 s). Fora desse modo, vale a resposta acima.
| Situação | Código | Corpo |
|---|---|---|
| O processo passou pela etapa Webhook Response | O definido pelo dono do processo: 200, 201, 202, 400, 401, 403, 404, 409, 422 ou 500 | O JSON definido na etapa |
| Concluiu, ou terminou dentro de um ramo sem próximo passo, sem passar pela etapa | 202 | { "instanceID": "8f3a…", "status": "FINALIZED" } |
Uma rota de encerramento (terminate) desenhada no processo foi tomada | 500 | { "instanceID": "8f3a…", "status": "TERMINATED" }. Ambíguo por natureza (pode ser um fim limpo ou o jeito de quem desenhou abortar por um problema), tratado como falha |
| Estourou o limite de execução de etapas do agente | 500 | { "instanceID": "8f3a…", "status": "STEP_LIMIT_REACHED" }. Possível loop no desenho do processo |
| O processo falhou ou foi parado | 500 | { "instanceID": "8f3a…", "status": "ERROR" } (também STOPPED ou CRASHED). Sem mensagem de erro e sem variáveis |
| O limite de espera acabou com o processo já em execução | 202 | { "instanceID": "8f3a…", "status": "running" }. A execução continua |
| O limite de espera acabou com o processo ainda esperando vaga na fila do ambiente | 202 | { "instanceID": "8f3a…", "status": "queued" }. A execução continua na fila e roda na vez dela, mas a resposta dela não é entregue a esta chamada |
| Agente offline com fila | 202 | { "instanceID": "8f3a…", "status": "queued" }, sem esperar |
| A resposta gravada pelo agente é inválida | 502 | { "instanceID": "8f3a…", "status": "INVALID_RESPONSE" } |
Nesse modo a resposta sai sempre como application/json, com o cabeçalho X-Instance-Id, e o processo não define nenhum outro header. Passou do limite de espera, não repita a chamada: a execução segue, rodando ou na fila do ambiente, e reenviar cria outra. O resultado dela se consulta por GET /v1/instances/:id, que devolve queued, running e depois o status final. Um retry com a mesma Idempotency-Key devolve o instanceID da execução original, sem o corpo da resposta.
Erros: 404 NOT_FOUND (URL não confere, sem revelar se o processo existe); 401 WEBHOOK_TOKEN_REVOKED (URL antiga após gerar uma nova); 403 WEBHOOK_DISABLED; 402 PLAN_FEATURE_UNAVAILABLE (produção, plano sem API); 409 PROCESS_NOT_PUBLISHED (produção, processo não publicado); 400 INVALID_ENVIRONMENT (produção, o ambiente cadastrado no processo não existe ou ficou fora do alcance do dono: correção é no cadastro do processo, repetir a chamada não resolve); 503 AGENT_OFFLINE; 403 OWNER_INACTIVE (dono do processo sem acesso ativo na plataforma). A execução iniciada pela produção aparece no histórico e pode ser acompanhada por GET /v1/instances/:id com as credenciais normais da API.
Testar a API
Preencha suas credenciais e escolha uma rota para montar e enviar a chamada real a partir desta página. Nada aqui é enviado para a browserMate. A chamada vai direto do seu navegador para o serviço de API.
Boas práticas
- Uma credencial de conta por sistema integrador. Assim como as chaves de processo, crie uma credencial com label próprio para cada consumidor. Revogar uma não afeta as demais.
- Sempre envie
Idempotency-Keyem disparos automatizados. Protege contra duplicidade de execução quando a resposta se perde por timeout de rede. - Segredo vai em campo do tipo Secreto. Um token ou uma API Key enviados num campo Texto aparecem nos logs da execução. No tipo Secreto eles não aparecem em log e esperam cifrados na fila. Para uma credencial que você já conhece antes de executar, prefira o Cofre. Veja Dados Sensíveis.
- Consulte a matrix antes de montar o payload do start. Os nomes de Variável podem ser renomeados ou removidos se o processo for remodelado. Use
GET /processes/:pid/matrixpara confirmar os nomes atuais em vez de fixá-los no seu código sem checagem periódica. - Trate
AGENT_OFFLINEcom espera e nova tentativa, não como falha definitiva. O ambiente pode estar temporariamente offline. - Não repita a chamada em
OWNER_INACTIVE. É uma questão de acesso da conta dona do processo, resolvida dentro da plataforma pelo administrador da empresa. Tentar de novo não muda o resultado. - Monitore pelo
instanceID. Guarde o valor devolvido pelo start para consultar o status depois emGET /instances/:iid. - Revise periodicamente as credenciais de conta e chaves de processo ativas. Revogue o que não está mais em uso.
