v2.0

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.

Camada independente Esta API não passa pela sessão da interface web nem pelo seu login. Ela tem seu próprio modelo de autenticação (abaixo) e pode ser consumida por qualquer sistema capaz de fazer chamadas HTTP.

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.

  1. No Menu, acesse Credenciais de API.
  2. Clique em Gerar credencial e dê um nome (Label) que identifique o sistema que vai usá-la. Ex.: ERP Produção.
  3. Copie o valor completo mostrado, no formato bm_live_<prefixo>.<segredo>. Ele só aparece uma vez, nesta tela, logo após a criação.
  4. Use esse valor completo no header Authorization: Bearer bm_live_... em toda chamada.
Guarde com segurança Se perder o segredo, não há como recuperá-lo depois. A única saída é revogar a credencial (na mesma tela) e gerar uma nova. Trate-o como uma senha.

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.

  1. Na tela Meus Agentes, no card do processo, clique no ícone ⇄ APIs.
  2. 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.
  3. Copie o código gerado e use-o no header X-Process-Key nas chamadas sobre este processo.
  4. 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.
Processo que foi compartilhado com você (não é seu)? Use a sua própria credencial de conta (passo 1) junto com a chave daquele processo. Quem gera essa chave e te repassa o código é o dono do processo, no card dele. Não existe nenhum campo para informar "quem é o dono": a API já enxerga isso através do compartilhamento feito com a sua conta. Se o compartilhamento não incluir a permissão necessária para a ação (por exemplo, executar), a chamada é recusada.

Como as credenciais são usadas

HeaderCredencialQuando 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:

Exemplo de erro
{
  "error": {
    "code": "PROCESS_KEY_EXPIRED",
    "message": "Chave de API do processo expirada."
  }
}
HTTPCódigoSituação
400INVALID_PROCESS_ID, INVALID_MATRIX, INVALID_ACTION, INVALID_NAME, INVALID_CRONParâmetro ausente ou em formato inválido
401MISSING_CREDENTIAL, INVALID_CREDENTIAL, CREDENTIAL_REVOKED, CREDENTIAL_EXPIREDProblema com a credencial de conta
401MISSING_PROCESS_KEY, INVALID_PROCESS_KEY, PROCESS_KEY_REVOKED, PROCESS_KEY_EXPIREDProblema com a chave do processo
402PLAN_FEATURE_UNAVAILABLEO 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
403FORBIDDENSua 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
403API_DISABLEDO processo existe e você tem acesso a ele, mas o acesso via API está BLOQUEADO
403OWNER_INACTIVEO 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
402INSUFFICIENT_CREDITSA 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
404PROCESS_NOT_FOUND, INSTANCE_NOT_FOUND, SCHEDULE_NOT_FOUND, NOT_FOUNDRecurso inexistente ou fora do alcance da sua conta
409INSTANCE_FINISHED, INSTANCE_UNRESOLVEDAção de controle não se aplica ao estado atual da instância
409PROCESS_NOT_PUBLISHEDO 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
429RATE_LIMITEDLimite de requisições excedido. Ver Limites e controles
502ROUTER_ERRORFalha ao enfileirar a execução no ambiente de destino
400INVALID_ENVIRONMENTO 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
503AGENT_OFFLINEO ambiente/runtime do processo está offline e sem fila para execuções pendentes

Limites e controles

Resumo dos cabeçalhos exigidos por rota. O detalhe completo (parâmetros, requisição de exemplo e resposta) vem logo abaixo de cada uma:

RotaAuthorizationX-Process-KeyIdempotency-Key
GET/ping———
GET/meobrigatório——
GET/environmentsobrigatório——
GET/processesobrigatório——
GET/processes/:pidobrigatórioobrigatório—
GET/processes/:pid/matrixobrigatórioobrigatório—
GET/processes/:pid/executionsobrigatórioobrigatório—
POST/processes/:pid/startobrigatórioobrigatórioopcional
GET/instances/:iidobrigatório——
POST/instances/:iid/stop|pause|resumeobrigatório——
GET/instances/:iid/logsobrigatório——
GET/schedulesobrigatório——
POST/schedulesobrigatórioobrigatório—
PATCH/schedules/:idobrigatório——
DELETE/schedules/:idobrigatório——
Sobre os exemplos abaixo Os comandos 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. Ver detalhesOcultar ▾

Recebe: nada, sem parâmetros, sem headers de autenticação.

Requisição
curl "$API_BASE/v1/ping"

Devolve:

Resposta 200
{ "ok": true, "version": "1" }
GET/v1/me Identidade da credencial de conta usada na chamada. Ver detalhesOcultar ▾

Recebe: só o header de autenticação, sem parâmetros.

Requisição
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.

Resposta 200
{
  "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. Ver detalhesOcultar ▾

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.

Não confunda com a chave de ativação A chave de ativação serve para o agente se registrar na sua conta na primeira execução. Ela nunca é usada na API e não aparece nesta resposta. O que identifica o ambiente aqui é o environmentID.
Requisição
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.

Resposta 200
{
  "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. Ver detalhesOcultar ▾

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.

Requisição
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).

Resposta 200
{
  "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. Ver detalhesOcultar ▾

Recebe:

NomeOndeObrigatórioDescrição
pidcaminho da URLsimID do processo (veja em GET /processes)
AuthorizationheadersimSua credencial de conta
X-Process-KeyheadersimChave gerada para este processo
Requisição
curl "$API_BASE/v1/processes/1042" \
  -H "Authorization: Bearer $BM_TOKEN" \
  -H "X-Process-Key: $PROCESS_KEY"

Devolve:

Resposta 200
{
  "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. Ver detalhesOcultar ▾

Recebe: o mesmo que GET /processes/:pid (pid na URL, Authorization e X-Process-Key nos headers).

Requisição
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.

Resposta 200
{ "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. Ver detalhesOcultar ▾

Recebe:

NomeOndeObrigatórioDescrição
pidcaminho da URLsimID do processo
fromquery stringnãoData inicial AAAA-MM-DD. Padrão: 30 dias atrás.
toquery stringnãoData final AAAA-MM-DD. Padrão: hoje.
limitquery stringnãoQuantidade máxima de linhas (1–500). Padrão: 50.
Requisição
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:

Resposta 200
{
  "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. Ver detalhesOcultar ▾

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:

NomeOndeObrigatórioDescrição
pidcaminho da URLsimID do processo
matrixcorpo (JSON)nãoObjeto { 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)
environmentIDcorpo (JSON)nãoAmbiente que deve executar. Os IDs vêm de GET /environments. Omitido, vale o ambiente cadastrado no processo
Idempotency-KeyheadernãoChave 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).

Sempre a versão publicada Não existe parâmetro de versão. A API dispara sempre a versão atualmente publicada do processo, o mesmo comportamento da execução manual e do agendamento. Não há, em nenhum lugar da plataforma, uma forma de fixar uma versão histórica específica por número.

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:

TypeFormato do valorExemplo
Textostring"12.345.678/0001-99"
Númeronumber, ou string com vírgula decimal3, "2,5"
Moedanumber (ponto decimal), ou string no formato brasileiro, com ou sem R$1500.5, "1.500,50"
Verdadeiro/Falsoboolean, ou string "sim"/"não", "1"/"0"true
Listaarray (cada elemento é um item), ou string com os itens separados por vírgula["Av. Paulista, 1020", "Rua Augusta, 500"], "SP, RJ, MG"
Objetoobjeto JSON, ou string com um JSON{"nome": "Ana", "idade": 30}
Secretostring (ou number). Sem valor padrão: o valor só existe se você o enviar"sk_live_9f8e7d"
Campo tipo Lista: array ou string com vírgula Num array, cada elemento chega ao agente como um item, com o texto inteiro, vírgulas incluídas: ["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.
Campo tipo Secreto: o valor que não fica gravado Use o tipo Secreto para o que carrega um segredo (uma API Key do sistema de destino, um token, um documento). O valor vai no corpo da chamada como qualquer outro, e não aparece em nenhum log da execução. Enquanto a execução espera na fila, ele fica cifrado, e as etapas do processo continuam recebendo o valor real. 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.
A chave é o nome da Variável, não um ID A API resolve o nome enviado para o identificador interno do campo automaticamente, o mesmo caminho que o disparo manual e o agendamento pelo Control Room já fazem hoje. Não existe (nem é preciso) nenhum ID de campo para descobrir; use exatamente o nome que aparece em Variável no cadastro do processo.
Escolhendo em qual ambiente executar Cada processo tem um ambiente cadastrado, e é ele que roda quando você não diz nada. É assim que o disparo manual e o webhook funcionam. Enviando 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.
Requisição: matrix com múltiplos tipos de campo
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"]
    }
  }'
Requisição: escolhendo o ambiente que vai executar
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.

Resposta 200: agente online, execução iniciada
{ "instanceID": "a1b2c3", "status": "started" }
Resposta 202: agente offline, execução na fila
{ "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. Ver detalhesOcultar ▾

Recebe: o instanceID devolvido pelo start, no caminho da URL. Não precisa da chave do processo, só da sua credencial de conta.

NomeOndeObrigatórioDescrição
iidcaminho da URLsiminstanceID devolvido pelo start
Requisição
curl "$API_BASE/v1/instances/a1b2c3" \
  -H "Authorization: Bearer $BM_TOKEN"

Devolve: o formato muda conforme o estágio da execução.

Resposta 200: em execução
{ "instanceID": "a1b2c3", "processID": "1042", "status": "running", "processName": "Importação NF-e", "userName": "ERP Produção", "startedAt": 1751818931000 }
Resposta 200: finalizada
{
  "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). Ver detalhesOcultar ▾

Recebe: o instanceID no caminho, mais a ação (stop, pause ou resume) como último segmento da URL. Sem corpo.

Requisição: pausar
curl -X POST "$API_BASE/v1/instances/a1b2c3/pause" \
  -H "Authorization: Bearer $BM_TOKEN"

Devolve:

Resposta 200
{ "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. Ver detalhesOcultar ▾

Recebe: o instanceID no caminho da URL.

Requisição
curl "$API_BASE/v1/instances/a1b2c3/logs" \
  -H "Authorization: Bearer $BM_TOKEN"

Devolve:

Resposta 200
{ "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. Ver detalhesOcultar ▾

Recebe: só o header de autenticação, sem parâmetros.

Requisição
curl "$API_BASE/v1/schedules" \
  -H "Authorization: Bearer $BM_TOKEN"

Devolve:

Resposta 200
{
  "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" }
  ]
}
O campo 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. Ver detalhesOcultar ▾

Recebe:

CampoOndeObrigatórioDescrição
processIDcorpo (JSON)simID do processo. A chave enviada em X-Process-Key precisa ser deste processo
namecorpo (JSON)simNome do agendamento
cronExpressioncorpo (JSON)simExpressão CRON padrão (fuso America/São Paulo)
matrixcorpo (JSON)nãoObjeto { variavel: valor } aplicado como override fixo em toda execução agendada. Mesma regra de nomes do start manual
environmentIDcorpo (JSON)nãoAmbiente que deve executar o agendamento. Os IDs vêm de GET /environments. Omitido, vale o ambiente cadastrado no processo
activecorpo (JSON)nãoPadrão true

A permissão de agendamento precisa estar concedida no compartilhamento, se o processo não for seu.

Agendamento depende do plano Criar agendamento exige que o plano inclua agendamento de execuções, e isso é independente do acesso à API: existe plano que libera a API e não libera agendamento. Faltando o recurso, a chamada devolve 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.
Mesma regra de tipos do disparo manual Cada campo de 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.
Campo do tipo Secreto não entra em agendamento O registro de um agendamento fica guardado em texto puro, e um segredo não pode ir parar lá. Enviar um campo Secreto em 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.
Requisição: agendamento com matrix fixa de múltiplos tipos
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.

Resposta 201
{ "id": "-Nab99xy" }
Atribuição em processos compartilhados O disparo automático de um agendamento roda com a identidade do dono do processo (o acionamento periódico não carrega a sua conta como executora). O campo 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. Ver detalhesOcultar ▾

Recebe: o id do agendamento no caminho, e o novo estado no corpo.

CampoOndeObrigatórioDescrição
idcaminho da URLsimID do agendamento (veja em GET /schedules)
activecorpo (JSON)simtrue para ativar, false para desativar
Requisição
curl -X PATCH "$API_BASE/v1/schedules/-Nab99xy" \
  -H "Authorization: Bearer $BM_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "active": false }'

Devolve:

Resposta 200
{ "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. Ver detalhesOcultar ▾

Recebe: o id do agendamento no caminho.

Requisição
curl -X DELETE "$API_BASE/v1/schedules/-Nab99xy" \
  -H "Authorization: Bearer $BM_TOKEN"

Devolve:

Resposta 200
{ "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.

Aqui está só o contrato da rota Como criar origens, capturar um payload real, ligar os campos às variáveis do processo e colocar a URL de produção no ar está em Webhook. Esta seção documenta apenas o que a rota recebe e devolve, para quem vai escrever o lado que chama.
POST/v1/hooks/:pid/:token Recebe o payload do sistema externo. Captura (dev) ou dispara a versão publicada (produção). Ver detalhesOcultar ▾

Recebe:

NomeOndeObrigatórioDescrição
pid e tokencaminho da URLsimJá vêm prontos na URL copiada do modal. Não monte manualmente
corpoJSONnãoO payload do evento (até 1 MB; acima de 100 KB a captura de teste não fica disponível para mapeamento)
Idempotency-KeyheadernãoSó na URL de produção: retry com a mesma chave em 24h devolve a mesma instanceID em vez de disparar de novo
Requisição
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):

Resposta 200
{ "captured": true, "captureId": "-Nab12cd" }

Devolve (produção):

Resposta 200 (iniciado) ou 202 (agente offline: enfileirado)
{ "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çãoCódigoCorpo
O processo passou pela etapa Webhook ResponseO definido pelo dono do processo: 200, 201, 202, 400, 401, 403, 404, 409, 422 ou 500O JSON definido na etapa
Concluiu, ou terminou dentro de um ramo sem próximo passo, sem passar pela etapa202{ "instanceID": "8f3a…", "status": "FINALIZED" }
Uma rota de encerramento (terminate) desenhada no processo foi tomada500{ "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 agente500{ "instanceID": "8f3a…", "status": "STEP_LIMIT_REACHED" }. Possível loop no desenho do processo
O processo falhou ou foi parado500{ "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ção202{ "instanceID": "8f3a…", "status": "running" }. A execução continua
O limite de espera acabou com o processo ainda esperando vaga na fila do ambiente202{ "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 fila202{ "instanceID": "8f3a…", "status": "queued" }, sem esperar
A resposta gravada pelo agente é inválida502{ "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.

Uso local Suas credenciais não são salvas entre visitas. Prefira testar com uma credencial e chave dedicadas para não misturar tráfego de teste com integrações em produção.

Boas práticas