RD Station Marketing
Verifica e opera a integração da loja com o RD Station Marketing: estado, teste de credenciais, evento de teste, cache de tokens, carrinhos abandonados e log.
O RD Station Marketing é uma ferramenta brasileira de automação de marketing. Com a integração ligada, a loja envia a ele eventos de e-commerce (pedido feito, pago, enviado, entregue, cancelado, reembolsado, checkout iniciado e carrinho abandonado), e o RD usa esses eventos para segmentar contatos e disparar fluxos de e-mail.
As credenciais (client_id, client_secret, refresh_token) e os ajustes (enabled, abandon_after_hours, abandon_limit) são configurados na tela do módulo rd-station-marketing, não por estas rotas. Aqui você apenas verifica e opera: ver o estado, testar as credenciais, mandar um evento de teste, limpar o cache de tokens, rodar a varredura de carrinhos abandonados e ler o log.
Todas as seis rotas exigem o módulo rd-station-marketing ligado (sem ele: 403 module_disabled) e o privilégio manage_settings.
Estado da integração
/api/v1/admin/rd-station/statusAdminVer o estado e a configuração mascarada
Mostra se as credenciais estão preenchidas, os parâmetros da varredura de carrinhos e a situação do token em cache. Não chama o RD Station.
curl "$BASE_URL/api/v1/admin/rd-station/status" \
-H "Authorization: Bearer $TOKEN"{
"module_slug": "rd-station-marketing",
"enabled": true,
"credentials_set": true,
"client_id": "3f9a1c7e-2b4…",
"client_secret_set": true,
"refresh_token_set": true,
"abandon_after_hours": 4,
"abandon_limit": 50,
"token_cache": { "state": "valid", "expires_at": "2026-10-12T01:04:10Z" },
"api_base_url": "https://api.rd.services"
}Campos da resposta
module_slugstringenabledbooleancredentials_setbooleantrue quando os três dados de credencial estão preenchidos.client_idstring… quando é mais longo.client_secret_setbooleanrefresh_token_setbooleanabandon_after_hoursintegerabandon_limitintegertoken_cache.statestringvalidexpirednot_foundvalid há token em cache dentro do prazo; expired há token vencido; not_found não há token (ou faltam credenciais).token_cache.expires_atstringnot_found.api_base_urlstringTestar as credenciais
/api/v1/admin/rd-station/test-connectionAdminForçar uma renovação de token para validar as credenciais
Ignora o cache e troca o refresh token por um novo token de acesso no RD Station. Se der certo, o token novo vira o do cache. Sem corpo.
curl -X POST "$BASE_URL/api/v1/admin/rd-station/test-connection" \
-H "Authorization: Bearer $TOKEN"O status HTTP é 200 mesmo quando o teste falha; quem diz se deu certo é ok.
{ "ok": true, "expires_at": "2026-10-12T01:04:10Z" }{ "ok": false, "message": "rd-station: not configured" }Campos da resposta
okbooleantrue quando o RD aceitou as credenciais.messagestringok é true.expires_atstringok é false.Enviar um evento de teste
/api/v1/admin/rd-station/test-eventAdminEnviar um evento de e-commerce de teste ao RD Station
Monta um evento sintético (pedido de R$ 150,00, identificador começando em TEST-) com os mesmos construtores dos eventos reais e o envia ao RD para o e-mail informado. Use para conferir, no RD, se o contato e o evento chegam como esperado. O envio aparece no log da integração (última rota desta página).
Corpo da requisição
event_typestringobrigatórioECOMMERCE_ORDER_PLACEDECOMMERCE_ORDER_PAIDECOMMERCE_CHECKOUT_STARTEDECOMMERCE_CART_ABANDONEDECOMMERCE_ORDER_FULFILLEDECOMMERCE_SHIPMENT_DELIVEREDECOMMERCE_ORDER_CANCELLEDECOMMERCE_ORDER_REFUNDEDemailstringobrigatóriocurl -X POST "$BASE_URL/api/v1/admin/rd-station/test-event" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"event_type":"ECOMMERCE_ORDER_PLACED","email":"qa@example.com"}'{ "success": true, "event_type": "ECOMMERCE_ORDER_PLACED", "email": "qa@example.com" }Limpar o cache de tokens
/api/v1/admin/rd-station/clear-cacheAdminApagar os tokens de acesso em cache
Apaga os tokens de acesso guardados para a loja (no banco e na memória). O próximo envio renova o token sozinho. Use depois de trocar as credenciais ou quando o RD passar a recusar um token que ainda parece válido. Sem corpo.
curl -X POST "$BASE_URL/api/v1/admin/rd-station/clear-cache" \
-H "Authorization: Bearer $TOKEN"{ "success": true, "deleted": 1 }Campos da resposta
successbooleantrue em sucesso.deletedintegerVarredura de carrinhos abandonados
/api/v1/admin/rd-station/abandoned-runAdminRodar uma passada de carrinhos abandonados
Executa agora, sob demanda, a mesma passada que roda periodicamente: procura carrinhos parados há mais de abandon_after_hours e envia ao RD o evento ECOMMERCE_CART_ABANDONED de cada um, uma única vez por carrinho. Com dry_run: true ela só conta, sem enviar nada e sem marcar carrinhos como reportados. Faça um dry_run antes da primeira execução real.
Corpo da requisição
dry_runbooleanpadrão: falsetrue classifica os carrinhos sem enviar. O corpo inteiro é opcional.curl -X POST "$BASE_URL/api/v1/admin/rd-station/abandoned-run" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"dry_run":true}'{ "scanned": 12, "sent": 9, "skipped": 3, "failed": 0, "dry_run": true }Campos da resposta
scannedintegerabandon_limit).sentintegerdry_run, quantos seriam enviados.skippedintegerfailedintegerdry_runbooleanLer o log
/api/v1/admin/rd-station/logsAdminLer as entradas recentes do log da integração
Devolve as entradas mais recentes do log de atividade da integração (renovações de token, eventos enviados, falhas, passadas de carrinhos), da mais nova para a mais antiga.
Parâmetros de consulta
limitintegerpadrão: 50curl "$BASE_URL/api/v1/admin/rd-station/logs?limit=20" \
-H "Authorization: Bearer $TOKEN"{
"count": 2,
"logs": [
{
"id": 412,
"level": "info",
"event_type": "ECOMMERCE_ORDER_PLACED",
"message": "Event sent to RD Station",
"detail": { "email": "qa@example.com" },
"created_at": "2026-10-11T21:05:12.331Z"
},
{
"id": 411,
"level": "info",
"event_type": "TOKEN_REFRESH",
"message": "OAuth2 access token refreshed",
"created_at": "2026-10-11T21:05:11.902Z"
}
]
}Campos da resposta
countintegerlogs[].idintegerlogs[].levelstringinfoerrorlogs[].event_typestringTOKEN_REFRESH, TOKEN_CACHE, ABANDONED_PASS. Pode estar ausente.logs[].messagestringlogs[].detailobjectlogs[].created_atstringErros
| Status | Quando | Corpo de exemplo |
|---|---|---|
| 400 | test-event com event_type fora da lista, ou sem email, ou com a integração sem credenciais. | {"error":"test_event_failed","detail":"rd-station: unsupported test event_type \"X\""} |
| 400 | test-event com corpo que não é JSON. | {"error":"invalid_body","detail":"invalid JSON body"} |
| 400 | abandoned-run sem credenciais configuradas. | {"error":"not_configured","detail":"..."} |
| 401 | Sem token ou token expirado. | {"error":"invalid or expired token"} |
| 403 | Módulo desligado. | {"error":"module_disabled","module":"rd-station-marketing"} |
| 403 | Sem manage_settings. | {"error":"insufficient privileges","privilege_required_any":["manage_settings"]} |
| 500 | Falha interna ao ler o estado, limpar o cache, rodar a passada ou ler o log. | {"error":"abandoned_pass_failed","detail":"..."} |
| 502 | O RD Station recusou ou não respondeu ao test-event. | {"error":"test_event_failed","detail":"..."} |
| 503 | Serviço do RD Station não configurado no servidor. | {"error":"rd_station_unavailable","detail":"RD Station service not configured on this server"} |