Recruit API Reference

A Recruit API é uma REST API que permite acesso programático a todas as funcionalidades da plataforma Eu Nerd: recrutamento, CRM, ticketing, contratos, financeiro, conteúdo e mais. Projetada para integrações com agentes de IA, automações e sistemas externos.

Otimizada para LLMs. Esta documentação foi projetada para ser consumida tanto por humanos quanto por modelos de linguagem. Cada endpoint inclui exemplos de request/response completos. Use Ctrl+K para buscar rapidamente por endpoints, campos ou palavras-chave.

Base URL

https://wzcftlekhxlsavsjgfhb.supabase.co/functions/v1/openclaw-api

Todas as requisições devem usar HTTPS. HTTP não é suportado.

Recursos Disponíveis (21)

Referência rápida de todos os recursos e métodos HTTP suportados:

RecursoMétodosDescrição
candidatesGET POST PATCHBanco de talentos (técnicos de TI)
vacanciesGET POST PATCHVagas de emprego
vacancy-applicationsGETCandidaturas por vaga
vacancy-requestsGET POST PATCHSolicitações de vaga (clientes)
allocationsGETAlocações de técnicos
schedulingGET POSTLinks de agendamento
companiesGET POST PATCHEmpresas clientes B2B
deal-pipelinesGETPipelines de vendas CRM
dealsGET POST PATCHOportunidades comerciais
deal-activitiesGET POSTAtividades do CRM
proposalsGET POST PATCHPropostas comerciais
service-ordersGET POST PATCHOrdens de serviço de campo
ticketsGET POST PATCHHelpdesk / chamados
leadsGETLeads (formulários, diagnóstico, CRM)
contractsGETContratos digitais
document-signaturesGET POSTAssinatura digital
invoice-batchesGET POSTLotes de pagamento
employee-invoicesGET PATCHFaturas de colaboradores
provider-invoicesGET PATCHFaturas de prestadores
employeesGET POSTColaboradores
whatsappPOSTMensagens WhatsApp
articlesGET POST PATCH DELBlog / Knowledge Base
metricsGETMétricas da plataforma

Authentication

Autentique suas requisições incluindo o header Authorization com o valor Bearer {RECRUIT_API_KEY}.

curl -H "Authorization: Bearer ocl_sk_xxxxxxxxxxxxx" \
     -H "Content-Type: application/json" \
     https://wzcftlekhxlsavsjgfhb.supabase.co/functions/v1/openclaw-api/candidates
Segurança. Nunca exponha sua API key em código client-side. Use variáveis de ambiente ou um backend intermediário.
HeaderValorObrigatório
AuthorizationBearer {RECRUIT_API_KEY}Sim
Content-Typeapplication/jsonPara POST/PATCH

Pagination & Search

Todos os endpoints de listagem suportam paginação via query parameters:

ParâmetroTipoDefaultDescrição
limitinteger50Registros por página (máx: 500)
offsetinteger0Posição inicial
searchstringBusca textual nos campos relevantes do recurso

Exemplo de resposta paginada

{
  "data": [...],
  "total": 342,
  "limit": 50,
  "offset": 0
}

Para navegar páginas, incremente o offset pelo valor de limit:

# Página 1
GET /candidates?limit=50&offset=0

# Página 2
GET /candidates?limit=50&offset=50

# Página 3
GET /candidates?limit=50&offset=100

Rate Limits

A API implementa dois tipos de limitação:

TipoLimiteJanelaCódigo
Requisições200 requests1 minuto429
Volume de dados5.000 registros1 hora429

Ao exceder o limite, a API retorna 429 Too Many Requests. Implemente exponential backoff para lidar com limites temporários.

Error Handling

A API usa códigos HTTP padrão. Respostas de erro incluem um campo error com descrição legível:

{
  "error": "Candidate not found"
}
CódigoSignificado
200Sucesso
201Recurso criado com sucesso
400Parâmetros inválidos ou campos obrigatórios ausentes
401API key ausente ou inválida
404Recurso não encontrado
405Método HTTP não suportado para este recurso
409Conflito (ex: slug duplicado)
429Rate limit excedido
500Erro interno do servidor

Candidates

Gerencie o banco de talentos de técnicos de TI. Candidatos possuem geolocalização, certificações, perfil técnico e podem ser movidos por etapas de recrutamento (triagem → entrevista → proposta → contratado → arquivado).

List candidates

GET /candidates
ParâmetroTipoDescrição
etapastringFiltrar por etapa: triagem, entrevista, proposta, contratado, arquivado
cidadestringFiltrar por cidade (busca parcial)
searchstringBusca por nome, email ou cidade
curl -H "Authorization: Bearer $KEY" \
  "$BASE/candidates?etapa=contratado&cidade=São Paulo&limit=10"
Response example
{
  "data": [
    {
      "id": "uuid",
      "nome": "João Silva",
      "email": "joao@email.com",
      "telefone": "11999999999",
      "cidade": "São Paulo",
      "estado": "SP",
      "nivel_senioridade": "pleno",
      "etapa": "contratado",
      "status": "adequado",
      "cnpj": "12.345.678/0001-90",
      "created_at": "2024-01-15T10:00:00Z",
      "total_jobs_completed": 42
    }
  ],
  "total": 1,
  "limit": 10,
  "offset": 0
}

Get candidate

GET /candidates/{id}

Retorna dados detalhados incluindo perfil técnico, categorias de trabalho e disponibilidade.

Create candidate

POST /candidates
CampoTipoDescrição
nomestringobrigatórioNome completo
emailstringobrigatórioEmail
telefonestringobrigatórioTelefone com DDD
cidadestringobrigatórioCidade
estadostringobrigatórioUF (2 letras)
certificacoesstring[]opcionalLista de certificações
nivel_senioridadestringopcionaljunior, pleno, senior
nivel_inglesstringopcionalbasico, intermediario, avancado, fluente
observacoesstringopcionalNotas internas
curl -X POST -H "Authorization: Bearer $KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "nome": "Maria Souza",
    "email": "maria@email.com",
    "telefone": "21988887777",
    "cidade": "Rio de Janeiro",
    "estado": "RJ",
    "nivel_senioridade": "pleno",
    "certificacoes": ["ITIL", "Azure"]
  }' "$BASE/candidates"

Update candidate

PATCH /candidates/{id}

Campos atualizáveis: nome, email, telefone, cidade, estado, bairro, etapa, status, certificacoes, nivel_senioridade, nivel_ingles, observacoes, cnpj, cpf, disponibilidade_inicio, service_radius_km.

curl -X PATCH -H "Authorization: Bearer $KEY" \
  -H "Content-Type: application/json" \
  -d '{"etapa": "entrevista", "status": "adequado"}' \
  "$BASE/candidates/{id}"

Vacancies

Gerencie vagas de emprego com suporte a publicação multi-canal.

List vacancies

GET /vacancies

Filtros: status (open, closed, draft), search (título, cliente).

Get vacancy

GET /vacancies/{id}

Create vacancy

POST /vacancies
CampoTipoDescrição
titlestringobrigatórioTítulo da vaga
client_namestringopcionalEmpresa contratante
descriptionstringopcionalDescrição da vaga
locationstringopcionalLocalização
work_modestringopcionalpresencial, remoto, hibrido
contract_typestringopcionalpj, clt, freelancer
job_areastringopcionalÁrea de atuação
salary_range_minnumberopcionalSalário mínimo
salary_range_maxnumberopcionalSalário máximo

Update vacancy

PATCH /vacancies/{id}

Campos atualizáveis: title, description, client_name, location, status, work_mode, contract_type, job_area, requirements, salary_range_min, salary_range_max, published_at.

Vacancy Applications

Lista as candidaturas de uma vaga específica, incluindo dados do candidato.

GET /vacancy-applications/{vacancy_id}

Filtros: status (new, reviewed, shortlisted, rejected).

curl -H "Authorization: Bearer $KEY" \
  "$BASE/vacancy-applications/{vacancy_id}?status=new"
Response example
{
  "vacancy": { "id": "uuid", "title": "Técnico de Redes" },
  "data": [
    {
      "id": "uuid",
      "candidate_id": "uuid",
      "candidate_name": "João Silva",
      "candidate_email": "joao@email.com",
      "candidate_phone": "11999999999",
      "candidate_city": "São Paulo",
      "candidate_state": "SP",
      "form_answers": {},
      "status": "new",
      "created_at": "2024-01-15T10:00:00Z"
    }
  ],
  "total": 1, "limit": 50, "offset": 0
}

Vacancy Requests

Solicitações de vagas enviadas por clientes através do portal. Podem ser aprovadas e convertidas em vagas.

List vacancy requests

GET /vacancy-requests

Filtros: status (pending, approved, rejected), client_name.

Get vacancy request

GET /vacancy-requests/{id}

Create vacancy request

POST /vacancy-requests
CampoTipoDescrição
client_namestringobrigatórioNome do cliente
client_user_iduuidobrigatórioID do usuário do cliente
job_titlestringopcionalTítulo do cargo
job_descriptionstringopcionalDescrição do cargo
request_typestringopcionaloutsourcing (default), field_service
positions_countintegeropcionalNúmero de posições (default: 1)
work_modestringopcionalModo de trabalho

Update vacancy request

PATCH /vacancy-requests/{id}

Campos atualizáveis: status, admin_notes, reviewed_by, reviewed_at, converted_vacancy_id, job_title, job_description, work_mode, contract_type, positions_count.

Auto-fill. Ao mudar status para approved, o campo reviewed_at é preenchido automaticamente.

Allocations

Alocações ativas de técnicos em clientes. Inclui dados de billing e período.

List allocations

GET /allocations

Get allocation

GET /allocations/{id}

Retorna dados da alocação incluindo o candidato associado (nome, email, cidade, estado).

Scheduling

Gerencie links de agendamento de entrevistas para candidatos.

List scheduling links

GET /scheduling

Filtros: candidate_id, vacancy_id.

Create scheduling link

POST /scheduling
CampoTipoDescrição
candidate_iduuidobrigatórioID do candidato
created_byuuidobrigatórioID do usuário criador
vacancy_iduuidopcionalVaga associada
curl -X POST -H "Authorization: Bearer $KEY" \
  -H "Content-Type: application/json" \
  -d '{"candidate_id":"uuid","created_by":"uuid"}' \
  "$BASE/scheduling"
Response example
{
  "data": {
    "id": "uuid",
    "candidate_id": "uuid",
    "vacancy_id": null,
    "token": "uuid-token",
    "expires_at": "2024-01-22T10:00:00Z",
    "created_at": "2024-01-15T10:00:00Z",
    "scheduling_url": "https://encontreumnerd.com.br/agendar/uuid-token"
  }
}

Companies

Gerencie empresas clientes B2B.

List companies

GET /companies

Get company

GET /companies/{id}

Create company

POST /companies
CampoTipo
namestringobrigatório
cnpjstringopcional
emailstringopcional
phonestringopcional
citystringopcional
statestringopcional
segmentstringopcional

Update company

PATCH /companies/{id}

Campos: name, cnpj, email, phone, city, state, segment, is_active, contract_type, monthly_value, status.

Deal Pipelines

Lista os pipelines de vendas ativos com seus estágios configurados.

GET /deal-pipelines
curl -H "Authorization: Bearer $KEY" "$BASE/deal-pipelines"

Deals

Gerencie oportunidades comerciais no CRM. Mudanças de estágio são automaticamente registradas como atividades.

List deals

GET /deals

Filtros: pipeline_id, stage, search.

Get deal

GET /deals/{id}

Inclui company_name resolvido da tabela de empresas.

Create deal

POST /deals
CampoTipoDescrição
pipeline_iduuidobrigatórioPipeline de destino
company_namestringopcionalEmpresa (resolve company_id automaticamente)
contact_namestringopcionalNome do contato
contact_emailstringopcionalEmail do contato
contact_phonestringopcionalTelefone do contato
descriptionstringopcionalDescrição (salvo em notes)
stagestringopcionalEstágio inicial (default: lead)

Update deal

PATCH /deals/{id}

Campos: stage, value, priority, contact_name, contact_email, contact_phone, notes, owner_id.

Activity logging. Ao mudar o stage, uma atividade é registrada automaticamente em deal_activities com tipo stage_change.
curl -X PATCH -H "Authorization: Bearer $KEY" \
  -H "Content-Type: application/json" \
  -d '{"stage": "proposta", "value": 5000}' \
  "$BASE/deals/{id}"

Deal Activities

Histórico de atividades de um deal: notas, mudanças de estágio, emails, etc.

List activities

GET /deal-activities?deal_id={id}

Filtros: deal_id obrigatório, type (note, stage_change, email, call, meeting).

Create activity

POST /deal-activities
CampoTipo
deal_iduuidobrigatório
typestringobrigatório
contentstringobrigatório
metadataobjectopcional

Proposals

Propostas comerciais com workflow de envio, tracking de visualização e aceitação via link público.

List proposals

GET /proposals

Filtros: status (rascunho, ativa, aceita, expirada), client_name (busca parcial), proposal_type, search (título ou cliente).

Retorna: id, title, slug, client_name, proposal_type, status, sent_at, accepted_at, expires_at, created_at.

Get proposal

GET /proposals/{id}

Retorna TODOS os campos incluindo content (seções), metadata, signing_token, original_content, client_logo_url, source_file_url, vacancy_request_id, created_by, accepted_by.

Get proposal tracking

GET /proposals/{id}/tracking

Retorna dados de tracking: signing_token (para URL pública /proposta/{token}), sent_at, accepted_at, accepted_by, expires_at, metadata.

Create proposal

POST /proposals

Cria proposta em status rascunho. Auto-gera slug e signing_token (UUID).

CampoTipoDescrição
titlestringobrigatórioTítulo da proposta
client_namestringobrigatórioNome da empresa/cliente
proposal_typestringopcionalcustom, field_service, outsourcing, projeto (default: custom)
recipient_namestringopcionalNome do destinatário
recipient_emailstringopcionalEmail do destinatário
contentobjectopcional{ sections: [{ title, html, order }] }
metadataobjectopcionalInvestimento, escopo, brief answers, dados livres
expires_atstring (ISO)opcionalData de expiração
slugstringopcionalSlug customizado (auto-gerado se omitido)

Update proposal

PATCH /proposals/{id}

Campos permitidos: status, title, client_name, content, metadata, expires_at, recipient_name, recipient_email, proposal_type, client_logo_url, source_file_url.

Workflow de Status. Ao mudar status para ativa, o campo sent_at é preenchido automaticamente. Ao mudar para aceita, o campo accepted_at é preenchido. Ciclo: rascunho → ativa → aceita/expirada.
Estrutura do Content. O campo content segue o formato { sections: [{ title: string, html: string, order: number }] }. Cada seção é um bloco visual da proposta (ex: Escopo, Investimento, Cronograma).
Aceitação pelo Cliente. O cliente aceita a proposta via URL pública /proposta/{signing_token}. O signing_token é retornado no POST de criação e no GET de tracking.

Service Orders

Ordens de serviço de campo (OS). Códigos auto-gerados no formato OS-YYYY-XXXXX.

List service orders

GET /service-orders

Get service order

GET /service-orders/{id}

Create service order

POST /service-orders
CampoTipo
company_namestringobrigatório
descriptionstringobrigatório
categorystringopcional
prioritystringopcional (default: medium)
scheduled_datestringopcional
candidate_iduuidopcional
contact_namestringopcional
contact_phonestringopcional
citystringopcional
statestringopcional
addressstringopcional

Update service order

PATCH /service-orders/{id}

Campos: status, priority, category, candidate_id, scheduled_date, completion_notes, rating, description.

Auto-fill. Ao mudar status para completed, o campo completed_at é preenchido.

Tickets

Sistema de helpdesk. Tickets são auto-numerados no formato TK-YYYYMMDD-XXXX.

List tickets

GET /tickets

Filtros: status (open, in_progress, resolved, closed).

Get ticket

GET /tickets/{id}

Inclui client_ticket_messages associadas.

Create ticket

POST /tickets
CampoTipo
subjectstringobrigatório
sender_emailstringobrigatório
client_namestringopcional
categorystringopcional
prioritystringopcional (default: medium)
sender_namestringopcional

Update ticket

PATCH /tickets/{id}

Campos: status, priority, category, assigned_to, resolution_notes.

Auto-fill. Ao mudar status para resolved ou closed, o campo resolved_at é preenchido automaticamente.

Leads

Leads originados de formulários de diagnóstico, formulários de contato, website e deals de CRM. Subset filtrado da tabela client_tickets por source.

List leads

GET /leads

Filtros: status, source (diagnostic-form, diagnostic-form-partial, contact-form, website, crm-deal).

Busca: sender_email, sender_name, subject, client_name.

Get lead

GET /leads/{id}

Retorna registro completo incluindo parsed_data com:

Campo (parsed_data)TipoDescrição
scorenumberScore de maturidade (0-100)
maturityLevelstringNível de maturidade (baixo, médio, alto)
cnpjstringCNPJ da empresa
telefonestringTelefone de contato
companystringNome da empresa
recommendationsstring[]Recomendações da análise
recommendedModulesstring[]Módulos recomendados
wizardAnswersobjectRespostas do formulário de diagnóstico

Contracts

Contratos digitais com assinaturas. Somente leitura via API.

List contracts

GET /contracts

List contracts

GET /contracts

Cada contrato inclui um objeto candidate com id, nome e curriculo_url.

Get contract

GET /contracts/{id}

Inclui contract_signatures associadas e um objeto candidate com id, nome, email, telefone, curriculo_url e curriculo_mime_type.

Document Signatures

Crie e gerencie solicitações de assinatura digital de documentos. Suporta upload de URLs externas, envio de emails automático e download de documentos assinados.

List signature requests

GET /document-signatures

Filtros: status (sent, partially_signed, completed, cancelled).

Get signature request

GET /document-signatures/{id}

Inclui todos os document_signature_recipients.

Get signature status

GET /document-signatures/{id}/status

Resumo: total, assinados, pendentes. Inclui signing_url para pendentes.

Download document

GET /document-signatures/{id}/download

Query: format=url (default, retorna signed URL válida por 1h) ou format=binary (retorna o PDF).

Create signature request

POST /document-signatures
CampoTipoDescrição
titlestringobrigatórioTítulo do documento
file_urlstringobrigatórioURL do arquivo (PDF). URLs externas são baixadas automaticamente.
file_namestringobrigatórioNome do arquivo
recipientsarrayobrigatórioLista de signatários com name e email
messagestringopcionalMensagem no email de assinatura
file_typestringopcionalMIME type (default: application/pdf)
created_byuuidopcionalUUID do criador (fallback: master_admin)
curl -X POST -H "Authorization: Bearer $KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Contrato de Prestação",
    "file_url": "https://example.com/contrato.pdf",
    "file_name": "contrato-prestacao.pdf",
    "recipients": [
      { "name": "João Silva", "email": "joao@email.com" },
      { "name": "Maria Souza", "email": "maria@email.com" }
    ],
    "message": "Por favor assine o contrato anexo."
  }' "$BASE/document-signatures"

Resend signing email

POST /document-signatures/{id}/resend

Reenvia email de assinatura para destinatários pendentes. Opcionalmente passe recipient_id para reenviar apenas para um.

Cancel signature request

POST /document-signatures/{id}/cancel

Cancela a solicitação e todos os destinatários pendentes.

Invoice Batches

Lotes de pagamento de colaboradores via Transfeera (PIX/TED). O fluxo é: criar batch → processar (cria transferências) → fechar (executa pagamentos).

List batches

GET /invoice-batches

Filtros: status. Resposta enriquecida com estatísticas de faturas.

Get batch detail

GET /invoice-batches/{id}

Inclui faturas, transações de pagamento e estatísticas agregadas.

Check payment status

GET /invoice-batches/{id}/status

Retorna status de cada transação Transfeera com resumo (pending, processing, completed, failed, returned).

Process batch

POST /invoice-batches/{id}/process

Cria transferências na Transfeera para todas as faturas aprovadas. Inclui anti-duplicação, split automático de valores acima de R$15.000 e resolução de chaves PIX.

Close batch

POST /invoice-batches/{id}/close

Fecha o lote na Transfeera, disparando os pagamentos efetivos.

Ação irreversível. Fechar um batch dispara pagamentos reais. Certifique-se de que todas as faturas e dados bancários estão corretos antes de executar.

Employee Invoices

Faturas individuais de colaboradores dentro de um batch de pagamento.

List invoices

GET /employee-invoices

Filtros: status, batch_id, employee_id.

Get invoice

GET /employee-invoices/{id}

Inclui dados do colaborador (nome, email, cnpj, cargo, departamento).

Update invoice

PATCH /employee-invoices/{id}

Campos: status, paid_at, notes, final_value, rejection_reason.

Auto-fill. Ao mudar status para paid, o campo paid_at é preenchido automaticamente.
curl -X PATCH -H "Authorization: Bearer $KEY" \
  -H "Content-Type: application/json" \
  -d '{"status":"paid","notes":"Pago via Omie"}' \
  "$BASE/employee-invoices/{id}"

Provider Invoices

Notas fiscais de prestadores de serviço (candidatos contratados).

List provider invoices

GET /provider-invoices

Filtros: status, candidate_id.

Get provider invoice

GET /provider-invoices/{id}

Inclui dados do candidato (nome, email, cnpj).

Update provider invoice

PATCH /provider-invoices/{id}

Campos: status, notes, rejection_reason, estimated_payment_date, paid_at.

Auto-fill. Ao mudar status para approved, preenche reviewed_at. Ao mudar para paid, preenche paid_at.

Employees

Cadastro e consulta de colaboradores internos.

List employees

GET /employees

Filtros: status, departamento, tipo_contrato, search (nome, email, cargo).

Get employee

GET /employees/{id}

Retorna todos os campos do colaborador incluindo dados bancarios.

Create employee

POST /employees
CampoTipoDescricao
nomestringobrigatorioNome completo
emailstringobrigatorioE-mail do colaborador
cargostringopcionalCargo (default: Colaborador)
departamentostringopcionalDepartamento (default: Geral)
tipo_contratostringopcionalpj | clt | estagio (default: pj)
data_admissaodateopcionalData de admissao (default: hoje)
telefonestringopcionalTelefone
cpfstringopcionalCPF
cnpjstringopcionalCNPJ (PJ)
cidadestringopcionalCidade
estadostringopcionalEstado (UF)
salarionumberopcionalSalario/valor mensal
pix_keystringopcionalChave PIX
bancostringopcionalBanco
agenciastringopcionalAgencia
contastringopcionalConta
curl -X POST -H "Authorization: Bearer $KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "nome": "Maria Silva",
    "email": "maria@empresa.com",
    "cargo": "Analista de TI",
    "departamento": "Tecnologia",
    "tipo_contrato": "pj"
  }' "$BASE/employees"
Response example
{
  "data": {
    "id": "uuid",
    "nome": "Maria Silva",
    "email": "maria@empresa.com",
    "cargo": "Analista de TI",
    "departamento": "Tecnologia",
    "tipo_contrato": "pj",
    "status": "ativo",
    "data_admissao": "2026-03-19",
    "created_at": "2026-03-19T14:00:00Z"
  }
}
Auto-fill. cargo=Colaborador, departamento=Geral, tipo_contrato=pj quando nao informados.

WhatsApp

Envie mensagens via Meta Cloud API usando templates aprovados.

POST /whatsapp
CampoTipoDescrição
template_iduuidobrigatórioID do template WhatsApp
phonestringobrigatórioTelefone (aceita formatos variados: +55, DDD+9, etc.)
variablesobjectopcionalVariáveis do template. Chaves devem corresponder ao variables_schema do template.
curl -X POST -H "Authorization: Bearer $KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "template_id": "uuid",
    "phone": "11999999999",
    "variables": { "nome": "João", "empresa": "ACME" }
  }' "$BASE/whatsapp"
Response example
{
  "success": true,
  "meta_status": 200,
  "wamid": "wamid.xxxxx",
  "provider_response": { ... }
}

Articles

CRUD completo para o blog/knowledge base. Suporta lookup por UUID ou slug. Auto-geração de slug e preenchimento de campos SEO.

List articles

GET /articles

Filtros: status (draft, published, archived), category.

Get article

GET /articles/{id_or_slug}

Aceita UUID ou slug como identificador.

Create article

POST /articles
CampoTipoDescrição
titlestringobrigatórioTítulo do artigo
slugstringautoSlug URL (auto-gerado se omitido)
content_htmlstringopcionalConteúdo HTML
content_markdownstringopcionalConteúdo Markdown
categorystringopcionalCategoria
statusstringopcionaldraft (default), published, archived
tagsstring[]opcionalTags do artigo
meta_titlestringopcionalMeta título SEO
meta_descriptionstringopcionalMeta descrição SEO
featured_image_urlstringopcionalURL da imagem de capa
excerptstringopcionalResumo
author_namestringopcionalNome do autor
schema_markupobjectopcionalJSON-LD structured data
Auto-fill. Ao criar com status: "published", o published_at é preenchido automaticamente. Slugs duplicados retornam 409 Conflict.

Update article

PATCH /articles/{id_or_slug}

Aceita UUID ou slug. Todos os campos do POST são atualizáveis.

Delete article

DELETE /articles/{id_or_slug}

Remove permanentemente o artigo.

Metrics

Métricas agregadas da plataforma em tempo real.

GET /metrics
Response example
{
  "candidates": {
    "total": 3200,
    "triagem": 450,
    "entrevista": 89,
    "proposta": 23,
    "contratado": 1800,
    "arquivado": 838,
    "withCnpj": 1200,
    "profileComplete": 950
  },
  "total_vacancies": 45,
  "open_tickets": 12,
  "active_service_orders": 8
}

Payables (Contas a Pagar)

Gerenciamento de contas a pagar com filtros por status, período e busca.

GET /payables
status string Filter by payment status (pending, confirmed, paid, cancelled)
from date Start date (due_date ≥)
to date End date (due_date ≤)
search string Search in description
GET /payables/{id}

Returns detail with joined category, company, and bank_account.

Create payable

POST /payables
{
  "description": "Aluguel escritório",
  "amount": 5000.00,
  "due_date": "2026-05-10",
  "category_id": "uuid",
  "company_id": "uuid",
  "notes": "Contrato mensal"
}

Update payable

PATCH /payables/{id}

Allowed: description, amount, due_date, status, paid_date, paid_amount, notes, category_id, bank_account_id.

Receivables (Contas a Receber)

Gerenciamento de contas a receber com filtros por status, período e busca.

GET /receivables
status string Filter by status (pending, confirmed, paid, cancelled)
from date Start date
to date End date
search string Search in description
GET /receivables/{id}

Detail with joined category, company, and bank_account.

Create receivable

POST /receivables

Update receivable

PATCH /receivables/{id}

Allowed: description, amount, due_date, status, received_date, received_amount, notes, category_id, bank_account_id.

Cashflow (Fluxo de Caixa)

Projeção diária do fluxo de caixa com saldos brutos e ajustados.

GET /cashflow
from date Start date (default: today)
to date End date
days integer Days to project (default: 90, used when 'to' not provided)
Response example
{
  "totals": {
    "total_payables_pending": 125000,
    "total_payables_overdue": 8500,
    "total_receivables_pending": 340000,
    "total_receivables_overdue": 15000
  },
  "daily": [
    {
      "date": "2026-04-14",
      "payables_due": 5000,
      "payables_paid": 5000,
      "receivables_due": 12000,
      "receivables_received": 0,
      "receivables_adjusted": 11040,
      "balance": 7000,
      "balance_adjusted": 6040
    }
  ],
  "settings": {
    "default_rate": 0.03,
    "variable_cost_pct": 0.05
  }
}

Finance Settings

Configurações financeiras globais para projeções de caixa.

GET /finance-settings
PATCH /finance-settings

Allowed: default_default_rate, default_variable_cost_pct, payout_batch_day, horizon_days.

Recurring Rules (Regras Recorrentes)

Regras para geração automática de contas a pagar/receber recorrentes.

GET /recurring-rules
type string payable or receivable
is_active boolean
search string
GET /recurring-rules/{id}
POST /recurring-rules

Required: type, description, amount, recurrence, start_date.

PATCH /recurring-rules/{id}

Categories (Categorias Financeiras)

Categorias para classificação de contas a pagar e receber. Suporta upsert via omie_code.

GET /categories
type string payable or receivable
search string
GET /categories/{id}
POST /categories
{
  "name": "Infraestrutura",
  "type": "payable",
  "omie_code": "1.01.03",
  "is_active": true
}
PATCH /categories/{id}

Bank Accounts (Contas Bancárias)

Consulta de contas bancárias com saldo atual e dados de identificação.

GET /bank-accounts
is_active boolean
search string
GET /bank-accounts/{id}

Interview Bookings

Gerenciamento de agendamentos de entrevista com suporte a marcação de conduzida e avaliação.

GET /interview-bookings
candidate_id uuid
vacancy_id uuid
status string pending, confirmed, cancelled, completed
conducted boolean
GET /interview-bookings/{id}

Detail with joined slot, candidate, and vacancy data.

Update booking

PATCH /interview-bookings/{id}
{
  "conducted": true,
  "conduct_notes": "Candidato demonstrou boa experiência",
  "conduct_rating": 4
}

Google Drive

Operações de pasta e upload no Google Drive. Três ações disponíveis via sub-recurso.

Resolve folder

POST /google-drive/resolve-folder
{
  "clientName": "Acme Corp",
  "parentFolderId": "1abc..."
}

Upload files

POST /google-drive/upload

Max 10 files, 10MB each. Content must be base64-encoded.

Save (resolve + upload)

POST /google-drive/save
{
  "clientName": "Acme Corp",
  "parentFolderId": "1abc...",
  "files": [{ "name": "proposta.pdf", "mimeType": "application/pdf", "content": "base64..." }],
  "overwrite": true,
  "dealId": "uuid",
  "generatedBy": "crm-agent"
}