1. Guia de integração
Phantom API
  • Raiz
    • Programa de Afiliados B2B
      • Guia de integração
        • Como gerar link de acesso válido
          POST
  • Esquemas
    • ValidateLinkByUrl
    • ValidateLinkByFields
    • ValidLinkResponse
    • InvalidLinkResponse
  1. Guia de integração

Como gerar link de acesso válido

POST
/partners/validate-link
Esta página explica como o parceiro deve gerar o link de acesso válido ao cupom protegido.
O Phantom não gera esse link para o parceiro. O link deve ser gerado no backend do parceiro, porque a signingKey é secreta e não pode ir para o navegador.

1. Dados que o Phantom fornece#

CampoExemploUso
refattrionIdentificador público do parceiro. Vai na URL final e no payload assinado.
signingKey<chave-gerada-pelo-Phantom>Chave secreta em hexadecimal usada para gerar sig. Fica somente no backend do parceiro.
ttlDays7Validade máxima do link, em dias. Pode ser menor que o limite configurado.
destinationUrlhttps://phantomcloak.app/plansURL do Phantom para onde o usuário será enviado.

2. Campos que o backend do parceiro gera#

CampoComo gerarExemplo
expMath.floor(Date.now() / 1000) + ttlDays * 24 * 60 * 601771604800
payload<ref>:<exp>partner-slug:1771604800
sigbase64url(HMAC-SHA256(payload, hexToBytes(signingKey)))Ks2LxH...
url<destinationUrl>?ref=<ref>&sig=<sig>&exp=<exp>https://phantomcloak.app/plans?ref=partner-slug&sig=Ks2LxH...&exp=1771604800
O payload é apenas a string usada para gerar sig. Ele não vai na URL. O formato deve ser exatamente <ref>:<exp>. Não assine JSON, a URL completa nem adicione espaços.

3. Exemplo backend em Node.js#

4. Frontend do parceiro#

O frontend não calcula assinatura. Ele chama o backend do parceiro e redireciona o usuário para a URL retornada.

5. Testar se o link está válido#

Para homologação ou debug, envie a URL gerada para POST /partners/validate-link. No fluxo real, o usuário é redirecionado para o site do Phantom e o Phantom valida o link automaticamente.
Quando o link é válido, a resposta retorna couponCode e partnerAttributionToken. Esses dois campos devem seguir juntos para o checkout quando o cupom exige assinatura de parceiro.

Requisição

Parâmetros Bodyapplication/jsonNecessário

Examples

Respostas

🟢200OK
application/json
Resultado da validação. Link inválido também retorna HTTP 200 com valid=false.
Bodyapplication/json

🟠400Requisição inválida
🟠429
Request Request Example
Shell
JavaScript
Java
Swift
cURL
curl --location '/partners/validate-link' \
--header 'Content-Type: application/json' \
--data '{
    "url": "https://phantomcloak.app/plans?ref=partner-slug&sig=Ks2LxH...&exp=1771604800"
}'
Response Response Example
200 - Link válido
{
    "valid": true,
    "ref": "partner-slug",
    "partnerId": "550e8400-e29b-41d4-a716-446655440001",
    "partnerName": "Parceiro Exemplo",
    "couponId": "550e8400-e29b-41d4-a716-446655440002",
    "couponCode": "PARCEIRO10",
    "expiresAt": "2026-05-25T20:25:27.000Z",
    "expiresInSeconds": 604800,
    "partnerAttributionToken": "v1.eyJwYXJ0bmVySWQiOiIuLi4ifQ.signature"
}
Modificado em 2026-05-19 10:04:07
Próxima página
ValidateLinkByUrl
Built with