Pular para o conteúdo principal

Handoff SSO de cotação

O vendedor está com uma cotação aberta no seu ERP. Ele clica em um botão e cai no catálogo Sipru autenticado na conta real dele, com a cotação e o cliente já identificados — sem digitar login.

O fluxo

1. Pedir a URL

curl -X POST https://app.sipru.ai/api/erp/sso/session \
-H "X-Sipru-Partner-Id: seu-partner-id" \
-H "Authorization: Bearer $SIPRU_PARTNER_SECRET" \
-H "Content-Type: application/json" \
-d '{
"tempQuoteId": "TMP-90321",
"vendedor": { "cpf": "12345678909" },
"cliente": {
"cnpj": "04252011000110",
"razaoSocial": "Construtora Alvorada Ltda",
"nomeFantasia": "Alvorada Materiais"
},
"locationId": "07526557000100",
"pricingPolicy": "margem2",
"environment": "dev"
}'
{
"url": "https://app.sipru.ai/erp/session?token=eyJ1aWQ...",
"expiresAt": "2026-08-31T18:42:11.000Z",
"contextId": "0f1c8b2e-..."
}

Os campos, tipos e limites estão na referência da API. Três pontos merecem destaque:

  • tempQuoteId é obrigatório e é a chave de idempotência. É por ele que o Sipru evita duplicar o pedido em reenvios: uma gravação por cotação, 409 nas demais.
  • vendedor.cpf precisa corresponder a uma conta Sipru já existente. Não há provisionamento automático — CPF desconhecido devolve VENDEDOR_NOT_FOUND.
  • companyId é opcional. Omitindo-o, o locationId é tratado como o CNPJ da loja e o Sipru resolve a empresa e a loja pelo catálogo. É o caminho mais simples para quem não quer manter um mapa de identificadores.

2. Redirecionar o vendedor

Mande o navegador para a url devolvida. Nada mais é necessário.

A URL funciona exatamente uma vez

O resgate é atômico: um segundo clique ou um reload da mesma URL responde ERP_SSO_TOKEN_ALREADY_USED. Isso é a proteção contra replay, não um defeito. Para testar de novo, gere uma URL nova — não aumente o TTL nem tente reaproveitar o link.

A URL também expira sozinha em 10 minutos (ERP_SSO_TOKEN_INVALID). Gere-a no momento do clique, não antes.

Códigos de erro

Ramifique pelo code, não pela mensagem — a mensagem pode mudar.

HTTPcodeSignificado
400Falta tempQuoteId, vendedor.cpf ou locationId, ou o JSON é inválido.
400STORE_NOT_FOUNDcompanyId foi omitido e o locationId (lido como CNPJ) não corresponde a nenhuma loja cadastrada.
401Credencial de parceiro ausente, inválida ou revogada.
404VENDEDOR_NOT_FOUNDO CPF não corresponde a nenhuma conta Sipru.
401ERP_SSO_TOKEN_INVALID(em /erp/session) Link expirado ou adulterado.
401ERP_SSO_TOKEN_ALREADY_USED(em /erp/session) Link já usado.
503Dependência do Sipru indisponível. É seguro repetir.

3. O pedido volta para o ERP

Quando o vendedor finaliza o carrinho, o Sipru grava as linhas do pedido na tabela pedido_sipru do seu banco — ver Retorno do pedido.