API

Lê e atualiza os dados do programa de fidelização a partir do teu próprio backend com a API GraphQL externa da Gibbond: inscreve membros, atribui e resgata pontos e sincroniza atividades de qualquer canal.

Nesta página
⚡

Requer o plano Pro. A API externa está disponível no plano Pro. Para a ativar, atualiza o plano em Plans & billing no admin do Gibbond.

🚀

É a primeira vez que usas a API? O guia de integração apresenta exemplos práticos para copiar e colar: chamadas a partir do backend, integração numa app móvel ou web e atribuição de pontos noutro canal de venda. Esta página contém a referência completa do esquema.

A API tem um único endpoint GraphQL. Envia um pedido POST com um corpo JSON que contenha a tua query (ou mutação) e, opcionalmente, variables:

POST https://app.gibbond.com/api/v1/graphql

Todos os carimbos temporais são strings ISO-8601 e todos os IDs são GIDs da Shopify (por exemplo, gid://shopify/Customer/123), salvo indicação em contrário. Os pontos são números inteiros.

Autenticação

Cada pedido inclui uma credencial no cabeçalho Authorization. Existem dois tipos de credenciais para situações diferentes.

Chaves de API (do lado do servidor)

As chaves de API identificam o teu backend. Cria-as na página API keys do admin da Gibbond, onde cada chave recebe um âmbito (READ, WRITE ou ADMIN). A chave é apresentada apenas uma vez, durante a criação, e tem um formato semelhante a glk_live_…. Envia-a como token bearer:

Authorization: Bearer glk_live_xxxxxxxxxxxxxxxxxxxx
⚠️

Apenas no servidor. Uma chave de API pode ler e alterar os dados de todos os membros, por isso nunca deve ser exposta num browser, numa app móvel ou noutro cliente que não controles. Guarda-a numa variável de ambiente do servidor e substitui-a no admin se for exposta.

Tokens de cliente (do lado do cliente)

Para chamar a API a partir de uma interface destinada aos clientes, como um widget da loja ou uma app móvel, gera um token de cliente no teu backend com a mutation mintCustomerToken e passa-o ao cliente. Os tokens de cliente têm curta duração e estão associados a um único cliente: cada pedido só pode consultar os dados desse cliente e executar ações em seu nome. A query me devolve o cliente associado ao token e redeemReward permite-lhe resgatar uma recompensa sem uma chave de comerciante; por isso, o token pode ser enviado para o browser em segurança.

Authorization: Bearer <customer token>

Âmbitos

O âmbito de uma chave de API determina as operações que pode executar. Os âmbitos são cumulativos.

ÂmbitoPermissões
READTodas as consultas (saldos, histórico, recompensas, níveis e configuração).
WRITETudo o que está incluído em READ, mais mutations para inscrever membros, atribuir pontos positivos, resgatar recompensas, confirmar pontos e gerar tokens de cliente.
ADMINTudo o que está incluído em WRITE, mais a reversão de pontos (clawbackPoints) e ajustes negativos através de awardPoints (com um valor negativo em points).
ℹ️

Usa o âmbito mínimo necessário: uma chave READ para análises, uma chave WRITE para acumular e resgatar pontos e ADMIN apenas para fluxos de reembolso e correção.

Limites de pedidos

Cada credencial (chave de API ou token de cliente) tem um limite de 600 pedidos por minuto. Ao exceder esse limite, a API devolve o estado HTTP 429 e um cabeçalho Retry-After que indica quantos segundos deves aguardar antes de voltar a tentar.

Consultas

As consultas exigem uma chave com âmbito READ ou superior, ou um token de cliente, que só pode consultar os dados do próprio cliente.

ConsultaArgumentosResultado / descrição
me—O cliente associado ao token. Devolve um erro se for chamada com uma chave de API do comerciante.
customerid: ID!Um cliente identificado pelo GID.
customersids: [ID!]!Consulta em lote de clientes por GID (chave do comerciante, READ).
customerByEmailemail: String!Pesquisar um cliente pelo endereço de email (chave do comerciante, READ).
rewards—Catálogo de recompensas resgatáveis da loja.
tiers—Níveis VIP da loja (slug, nome, limite e multiplicador).
shopConfig—Configuração do programa: nome, moeda, pontos por unidade monetária, modo de confirmação, níveis e recompensas.
pointHistorycustomerId: ID!, limit: IntEventos de pontos do cliente, do mais recente para o mais antigo.
activeCodescustomerId: ID!Códigos de desconto não utilizados pelo cliente (resgates e benefícios de nível).
referralcustomerId: ID!Código de recomendação do cliente e totais de pessoas convidadas, recomendações qualificadas e recompensas atribuídas.
totalLiability—Total de pontos por resgatar em toda a loja, como número inteiro (chave do comerciante, READ).

Mutações

As mutations exigem uma chave WRITE, salvo indicação em contrário; as operações ADMIN estão assinaladas.

MutaçãoArgumentosResultado / descrição
enrollCustomercustomerId: ID!, email: StringInscrever um cliente no programa de fidelização (WRITE). Devolve CustomerResult.
awardPointscustomerId: ID!, points: Int!, reason: String, idempotencyKey: StringAtribuir ou ajustar pontos. Um valor negativo em points requer ADMIN; idempotencyKey evita duplicações em novas tentativas. Devolve PointResult.
awardPointsForOrderinput: OrderInput!Atribuir pontos por uma encomenda feita noutro canal; aplica o multiplicador de nível, os boosts e os marcos. orderId permite repetir a operação sem duplicar pontos (WRITE). Devolve PointResult.
redeemRewardcustomerId: ID!, rewardId: ID!Resgatar uma recompensa por um código de desconto de utilização única (WRITE ou um token do próprio cliente). Devolve RedeemResult.
confirmPointscustomerId: ID!, orderId: IDConfirmar os pontos pendentes de um cliente, por exemplo, após o processamento da encomenda (WRITE). Devolve o número de pontos confirmados.
clawbackPointscustomerId: ID!, orderId: ID!, refundAmount: Float!, orderTotal: Float!, refundId: IDReverter pontos após um reembolso (ADMIN). Devolve o número de pontos revertidos.
mintCustomerTokencustomerId: ID!, ttlSeconds: IntCriar um token de curta duração associado a um cliente para utilização do lado do cliente (WRITE / ADMIN). Devolve um CustomerToken com o campo expiresAt.
ℹ️

awardPointsForOrder recebe um OrderInput com orderId, customerId, customerEmail e orderName opcionais, além de uma lista de lineItems. Cada linha pode incluir productId e collectionIds opcionais, bem como lineTotal. Assim, os boosts e as exclusões por produto e coleção aplicam-se como nas encomendas nativas da Shopify.

Exemplo de pedido

Consulta o saldo e o nível de um cliente com uma chave de API do lado do servidor:

curl https://app.gibbond.com/api/v1/graphql \
  -X POST \
  -H "Authorization: Bearer glk_live_xxxxxxxxxxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "query": "query($id: ID!) { customer(id: $id) { email balance pending lifetime tier { name multiplier } } }",
    "variables": { "id": "gid://shopify/Customer/123456789" }
  }'

Códigos de erro

Os erros seguem a convenção GraphQL: um array errors de nível superior, em que cada entrada contém um code em extensions e o estado HTTP correspondente.

CódigoHTTPSignificado
UNAUTHENTICATED401Credencial em falta, malformada ou expirada.
FORBIDDEN403A credencial é válida, mas não tem o âmbito necessário para esta operação.
RATE_LIMITED429Limite de pedidos excedido; volta a tentar após o intervalo indicado em Retry-After.
BAD_USER_INPUT400Argumentos inválidos — GID incorreto, campo obrigatório em falta ou valor fora do intervalo permitido.
NOT_FOUND404O cliente, a recompensa ou outro recurso indicado não existe.