Passo a passo para quem vai fazer a integração: criar a chave, testar, usar a API, receber avisos por webhook ou ligar sem programar.
Nos exemplos, troque SUAEMPRESA pelo endereço da empresa no GoCode Trade (o mesmo que aparece no navegador quando ela entra no sistema).
Este é o caminho para ligar o GoCode Trade a outro sistema: o ERP ou o site da empresa, uma planilha ou uma ferramenta de automação. Siga os passos na ordem. Quem não programa pode ir direto ao passo 6.
Há dois caminhos, que podem ser usados juntos:
visita.realizada: Visita realizada (check-out feito)ruptura.registrada: Ruptura registrada no formulário da visitamensagem.contratante: Mensagem nova do contratante na conversa do contratogct_ e aparece uma vez só. Se perder, revogue e crie outra.No terminal (Prompt de Comando, PowerShell, Terminal do Mac ou Linux), troque gct_SUACHAVE pela chave e rode:
curl -H "Authorization: Bearer gct_SUACHAVE" "https://SUAEMPRESA.trade.gocodesystems.com.br/api?r=/"Se a chave estiver certa, a resposta mostra a empresa, a chave e os recursos disponíveis:
{
"sistema": "GoCode Trade",
"empresa": "suaempresa",
"chave": {
"nome": "Site",
"escopo": "leitura"
},
"pessoa": {
"nome": "Maria Souza",
"email": "maria@suaempresa.com.br"
},
"recursos": [
"contratantes",
"contratos",
"pdvs",
"visitas"
]
}Se vier {"erro": "Chave ausente ou inválida..."}, confira se copiou a chave inteira e se o cabeçalho está escrito como acima.
Endereço base: https://SUAEMPRESA.trade.gocodesystems.com.br/api?r= + o caminho. Exemplo: https://SUAEMPRESA.trade.gocodesystems.com.br/api?r=/contratantes.
Authorization: Bearer gct_....Content-Type: application/json.AAAA-MM-DD; data e hora no formato ISO 8601 (2026-11-12T14:30:00-03:00). Valores em dinheiro vão em centavos (campos terminados em _cents).&pagina=2 e &por_pagina=100 (até 100). A resposta traz total e paginas.&desde=2026-11-01 ou &desde=2026-11-01T08:00./contratantesLista os contratantes.
Campos: filtros: desde, pagina, por_pagina
curl "https://SUAEMPRESA.trade.gocodesystems.com.br/api?r=/contratantes" \
-H "Authorization: Bearer gct_SUACHAVE"Resposta:
{
"contratantes": [
{
"id": 7,
"nome": "Café Bom Dia Alimentos",
"cnpj": "12.345.678/0001-90",
"email": "compras@cafebomdia.com.br",
"telefone": "85999990000",
"status": "ativo",
"criado_em": "2026-03-02T10:00:00-03:00",
"atualizado_em": null
}
],
"pagina": 1,
"por_pagina": 50,
"total": 1,
"paginas": 1
}/contratantes/{id}Um contratante, com os contratos dele.
curl "https://SUAEMPRESA.trade.gocodesystems.com.br/api?r=/contratantes/12" \
-H "Authorization: Bearer gct_SUACHAVE"Resposta:
{
"id": 7,
"nome": "Café Bom Dia Alimentos",
"cnpj": "12.345.678/0001-90",
"email": "compras@cafebomdia.com.br",
"telefone": "85999990000",
"status": "ativo",
"criado_em": "2026-03-02T10:00:00-03:00",
"atualizado_em": null,
"contratos": [
{
"id": 12,
"numero": "Contrato 012",
"status": "ativo"
}
]
}/contratosLista os contratos.
Campos: filtros: contratante_id, status (ativo ou encerrado), desde, pagina, por_pagina
curl "https://SUAEMPRESA.trade.gocodesystems.com.br/api?r=/contratos" \
-H "Authorization: Bearer gct_SUACHAVE"Resposta:
{
"contratos": [
{
"id": 12,
"numero": "Contrato 012",
"contratante_id": 7,
"contratante": "Café Bom Dia Alimentos",
"servico": "promocao",
"descricao": "Promoção nas redes de Fortaleza",
"inicio": "2026-03-01",
"fim": null,
"status": "ativo",
"produtos": [
"Café Bom Dia 500 g"
],
"profissionais": [
{
"id": 18,
"nome": "Ana Souza"
}
]
}
],
"pagina": 1,
"por_pagina": 50,
"total": 1,
"paginas": 1
}/contratos/{id}Um contrato, com os profissionais e os produtos.
curl "https://SUAEMPRESA.trade.gocodesystems.com.br/api?r=/contratos/12" \
-H "Authorization: Bearer gct_SUACHAVE"Resposta:
{
"id": 12,
"numero": "Contrato 012",
"contratante_id": 7,
"contratante": "Café Bom Dia Alimentos",
"servico": "promocao",
"descricao": "Promoção nas redes de Fortaleza",
"inicio": "2026-03-01",
"fim": null,
"status": "ativo",
"produtos": [
"Café Bom Dia 500 g"
],
"profissionais": [
{
"id": 18,
"nome": "Ana Souza"
}
]
}/pdvsLista os pontos de venda (lojas).
Campos: filtros: contratante_id, desde, pagina, por_pagina
curl "https://SUAEMPRESA.trade.gocodesystems.com.br/api?r=/pdvs" \
-H "Authorization: Bearer gct_SUACHAVE"Resposta:
{
"pdvs": [
{
"id": 33,
"contratante_id": 7,
"nome": "Supermercado Central - Aldeota",
"rede": "Central",
"codigo": "L-104",
"cep": "60150-000",
"logradouro": "Av. Santos Dumont",
"numero": "1500",
"bairro": "Aldeota",
"cidade": "Fortaleza",
"uf": "CE",
"lat": -3.7372,
"lng": -38.4972,
"ativo": true
}
],
"pagina": 1,
"por_pagina": 50,
"total": 1,
"paginas": 1
}/visitasLista as visitas (das mais novas para as mais antigas).
Campos: filtros: contrato_id, contratante_id, de e ate (AAAA-MM-DD, pela data da visita), so_realizadas=1, desde, pagina, por_pagina
curl "https://SUAEMPRESA.trade.gocodesystems.com.br/api?r=/visitas" \
-H "Authorization: Bearer gct_SUACHAVE"Resposta:
{
"visitas": [
{
"id": 4821,
"data": "2026-11-12",
"hora_prevista": "08:00",
"contrato_id": 12,
"contratante_id": 7,
"contratante": "Café Bom Dia Alimentos",
"loja": {
"id": 33,
"nome": "Supermercado Central - Aldeota",
"cidade": "Fortaleza",
"uf": "CE"
},
"profissional": {
"id": 18,
"nome": "Ana Souza"
},
"checkin_em": "2026-11-12T08:04:00-03:00",
"checkin_distancia_m": 35,
"checkout_em": "2026-11-12T09:10:00-03:00",
"checkout_distancia_m": 28,
"espaco_frentes": 6,
"material": "instalado",
"observacoes": "Gôndola organizada.",
"formulario_em": "2026-11-12T09:05:00-03:00",
"produtos": [
{
"produto": "Café Bom Dia 500 g",
"preco_cents": 1899,
"ruptura": false,
"validade": "2027-03-01"
}
],
"fotos": [
{
"momento": "antes",
"tirada_em": "2026-11-12T08:06:00-03:00"
}
],
"atualizada_em": "2026-11-12T09:10:00-03:00"
}
],
"pagina": 1,
"por_pagina": 50,
"total": 1,
"paginas": 1
}/visitas/{id}Uma visita, com os produtos e a lista das fotos.
curl "https://SUAEMPRESA.trade.gocodesystems.com.br/api?r=/visitas/12" \
-H "Authorization: Bearer gct_SUACHAVE"Resposta:
{
"id": 4821,
"data": "2026-11-12",
"hora_prevista": "08:00",
"contrato_id": 12,
"contratante_id": 7,
"contratante": "Café Bom Dia Alimentos",
"loja": {
"id": 33,
"nome": "Supermercado Central - Aldeota",
"cidade": "Fortaleza",
"uf": "CE"
},
"profissional": {
"id": 18,
"nome": "Ana Souza"
},
"checkin_em": "2026-11-12T08:04:00-03:00",
"checkin_distancia_m": 35,
"checkout_em": "2026-11-12T09:10:00-03:00",
"checkout_distancia_m": 28,
"espaco_frentes": 6,
"material": "instalado",
"observacoes": "Gôndola organizada.",
"formulario_em": "2026-11-12T09:05:00-03:00",
"produtos": [
{
"produto": "Café Bom Dia 500 g",
"preco_cents": 1899,
"ruptura": false,
"validade": "2027-03-01"
}
],
"fotos": [
{
"momento": "antes",
"tirada_em": "2026-11-12T08:06:00-03:00"
}
],
"atualizada_em": "2026-11-12T09:10:00-03:00"
}/contratos/{id}/mensagensAs mensagens da conversa do contrato (das mais antigas para as mais novas).
Campos: filtros: desde
curl "https://SUAEMPRESA.trade.gocodesystems.com.br/api?r=/contratos/12/mensagens" \
-H "Authorization: Bearer gct_SUACHAVE"Resposta:
{
"mensagens": [
{
"id": 316,
"contrato_id": 12,
"autor": "equipe",
"autor_nome": "Maria (Supervisão)",
"texto": "Combinado, a reposição sai na sexta.",
"tem_foto": false,
"lida_em": null,
"criada_em": "2026-11-12T10:02:00-03:00"
}
]
}/contratos/{id}/mensagensResponde ao contratante em nome da equipe (a pessoa da chave é a autora). Precisa de chave de leitura e escrita.
Campos: texto (obrigatório, até 4000 caracteres)
curl -X POST "https://SUAEMPRESA.trade.gocodesystems.com.br/api?r=/contratos/12/mensagens" \
-H "Authorization: Bearer gct_SUACHAVE" \
-H "Content-Type: application/json" \
-d '{"texto":"Combinado, a reposição sai na sexta."}'Resposta:
{
"id": 316,
"contrato_id": 12,
"autor": "equipe",
"autor_nome": "Maria (Supervisão)",
"texto": "Combinado, a reposição sai na sexta.",
"tem_foto": false,
"lida_em": null,
"criada_em": "2026-11-12T10:02:00-03:00"
}Os erros vêm sempre no formato {"erro": "explicação"}.
| Código | Quando | O que fazer |
|---|---|---|
| 400 | O corpo não é um JSON válido. | Confira o JSON e o cabeçalho Content-Type: application/json. |
| 401 | Chave ausente, errada ou revogada, ou a pessoa da chave perdeu o acesso. | Confira a chave ou crie outra. |
| 403 | A chave é só de leitura, ou a pessoa da chave não tem permissão para aquilo. | Use uma chave de leitura e escrita criada por quem tem a permissão. |
| 404 | O endereço ou o registro não existe (ou a pessoa da chave não o vê). | Confira o caminho e o número. |
| 422 | Um campo faltou ou veio inválido. | A mensagem diz qual campo corrigir. |
| 429 | Passou de 120 chamadas por minuto com a mesma chave. | Espere o tempo do cabeçalho Retry-After (segundos) e tente de novo. |
teste. O resultado aparece em Últimas entregas.Cabeçalhos: Content-Type: application/json, X-GoCode-Evento (o evento), X-GoCode-Entrega (número da entrega, o mesmo nas novas tentativas: use para não processar duas vezes) e X-GoCode-Assinatura. Corpo:
{
"evento": "visita.realizada",
"criado_em": "2026-11-12T14:30:00-03:00",
"empresa": "suaempresa",
"dados": {
"visita": {
"id": 4821,
"data": "2026-11-12",
"hora_prevista": "08:00",
"contrato_id": 12,
"contratante_id": 7,
"contratante": "Café Bom Dia Alimentos",
"loja": {
"id": 33,
"nome": "Supermercado Central - Aldeota",
"cidade": "Fortaleza",
"uf": "CE"
},
"profissional": {
"id": 18,
"nome": "Ana Souza"
},
"checkin_em": "2026-11-12T08:04:00-03:00",
"checkin_distancia_m": 35,
"checkout_em": "2026-11-12T09:10:00-03:00",
"checkout_distancia_m": 28,
"espaco_frentes": 6,
"material": "instalado",
"observacoes": "Gôndola organizada.",
"formulario_em": "2026-11-12T09:05:00-03:00",
"produtos": [
{
"produto": "Café Bom Dia 500 g",
"preco_cents": 1899,
"ruptura": false,
"validade": "2027-03-01"
}
],
"fotos": [
{
"momento": "antes",
"tirada_em": "2026-11-12T08:06:00-03:00"
}
],
"atualizada_em": "2026-11-12T09:10:00-03:00"
}
}
}visita.realizada: Visita realizada (check-out feito)
{
"visita": {
"id": 4821,
"data": "2026-11-12",
"hora_prevista": "08:00",
"contrato_id": 12,
"contratante_id": 7,
"contratante": "Café Bom Dia Alimentos",
"loja": {
"id": 33,
"nome": "Supermercado Central - Aldeota",
"cidade": "Fortaleza",
"uf": "CE"
},
"profissional": {
"id": 18,
"nome": "Ana Souza"
},
"checkin_em": "2026-11-12T08:04:00-03:00",
"checkin_distancia_m": 35,
"checkout_em": "2026-11-12T09:10:00-03:00",
"checkout_distancia_m": 28,
"espaco_frentes": 6,
"material": "instalado",
"observacoes": "Gôndola organizada.",
"formulario_em": "2026-11-12T09:05:00-03:00",
"produtos": [
{
"produto": "Café Bom Dia 500 g",
"preco_cents": 1899,
"ruptura": false,
"validade": "2027-03-01"
}
],
"fotos": [
{
"momento": "antes",
"tirada_em": "2026-11-12T08:06:00-03:00"
}
],
"atualizada_em": "2026-11-12T09:10:00-03:00"
}
}ruptura.registrada: Ruptura registrada no formulário da visita
{
"visita_id": 4821,
"contrato_id": 12,
"contratante": "Café Bom Dia Alimentos",
"loja": "Supermercado Central - Aldeota",
"data": "2026-11-12",
"profissional": "Ana Souza",
"produtos_em_ruptura": [
"Café Bom Dia 500 g",
"Café Bom Dia Extraforte 250 g"
]
}mensagem.contratante: Mensagem nova do contratante na conversa do contrato
{
"mensagem": {
"id": 315,
"contrato_id": 12,
"autor": "contratante",
"autor_nome": "Carlos (Café Bom Dia)",
"texto": "Bom dia! A loja da Aldeota pediu reposição na sexta.",
"tem_foto": false,
"criada_em": "2026-11-12T09:41:00-03:00"
}
}X-GoCode-Assinatura vale sha256= seguido do HMAC-SHA256 do corpo exatamente como chegou, com o segredo. Calcule e compare; se não bater, ignore o aviso.
PHP
$corpo = file_get_contents('php://input');
$esperado = 'sha256=' . hash_hmac('sha256', $corpo, 'SEU_SEGREDO');
if (!hash_equals($esperado, $_SERVER['HTTP_X_GOCODE_ASSINATURA'] ?? '')) {
http_response_code(401);
exit;
}
$aviso = json_decode($corpo, true); // $aviso['evento'], $aviso['dados']
http_response_code(204);Node.js (Express)
const crypto = require('crypto');
app.post('/aviso', express.raw({ type: 'application/json' }), (req, res) => {
const esperado = 'sha256=' + crypto.createHmac('sha256', process.env.SEGREDO).update(req.body).digest('hex');
const recebido = req.get('X-GoCode-Assinatura') || '';
if (esperado.length !== recebido.length || !crypto.timingSafeEqual(Buffer.from(esperado), Buffer.from(recebido))) {
return res.sendStatus(401);
}
const aviso = JSON.parse(req.body); // aviso.evento, aviso.dados
res.sendStatus(204);
});Python (Flask)
import hmac, hashlib
@app.post('/aviso')
def aviso():
corpo = request.get_data()
esperado = 'sha256=' + hmac.new(SEGREDO.encode(), corpo, hashlib.sha256).hexdigest()
if not hmac.compare_digest(esperado, request.headers.get('X-GoCode-Assinatura', '')):
return '', 401
dados = request.get_json() # dados['evento'], dados['dados']
return '', 204Sem resposta 2xx, tentamos de novo depois de 1, 5 e 30 minutos, 2 horas e 10 horas. Depois de 30 falhas seguidas o webhook é desligado e o proprietário recebe um aviso; para voltar, clique em Ligar. Os avisos podem chegar fora de ordem e, raramente, repetidos: use X-GoCode-Entrega para ignorar o que já processou.
Nas ferramentas abaixo, use o endereço e a chave do passo 2. Os nomes dos menus podem mudar um pouco conforme a versão da ferramenta.
https://SUAEMPRESA.trade.gocodesystems.com.br/api?r=/contratantes, cabeçalho Authorization com o valor Bearer gct_SUACHAVE e, para gravar, corpo do tipo JSON.Authorization: Bearer gct_SUACHAVE. O Webhooks by Zapier faz parte dos planos pagos do Zapier.Authorization, valor Bearer gct_SUACHAVE.Authorization. Esses dois conectores são do tipo premium no Power Automate.Na planilha, abra Extensões > Apps Script, cole o código abaixo, troque a chave e rode a função importar (na primeira vez o Google pede autorização). Para repetir sozinho, crie um acionador de tempo em Acionadores.
function importar() {
var resp = UrlFetchApp.fetch('https://SUAEMPRESA.trade.gocodesystems.com.br/api?r=/contratantes&por_pagina=100', {
headers: { Authorization: 'Bearer gct_SUACHAVE' },
muteHttpExceptions: true
});
var dados = JSON.parse(resp.getContentText());
var lista = dados[Object.keys(dados)[0]]; // a lista vem na primeira chave da resposta
var aba = SpreadsheetApp.getActiveSheet();
aba.clear();
if (!lista || !lista.length) return;
var colunas = Object.keys(lista[0]);
aba.appendRow(colunas);
lista.forEach(function (item) {
aba.appendRow(colunas.map(function (c) { var v = item[c]; return typeof v === 'object' && v !== null ? JSON.stringify(v) : v; }));
});
}Para receber avisos numa planilha, publique o script como App da Web com uma função doPost(e) e cadastre a URL no passo 5. O Apps Script não mostra os cabeçalhos do pedido, então ali não dá para conferir a assinatura: use esse caminho só para dados que não sejam sensíveis.
Precisa de ajuda com a integração? Fale com o suporte do GoCode Trade pelo e-mail suporte@gocodesystems.com.br, contando o que está tentando fazer, o endereço usado e a resposta recebida (nunca mande a chave).
Crie a conta em minutos, cadastre o contratante e as lojas e mande a equipe a campo hoje.