Ir para a documentação
SparkGlimSparkGlim Programadores
Pesquisar em toda a documentação

Experimente um tema na sua língua ou um caminho API exato.

    SparkGlim Programadores

    A credencial certa para cada limite.

    Leituras públicas, assinaturas de Organização e sessões de Revenda têm modelos distintos.

    Chaves e capacidades

    Copie o valor único keyId:secret nas definições de Criador. Chaves públicas usam x-white-label-key; privadas ficam no servidor.

    Domínios e origem dos pedidos

    Vincule a assinatura ao domínio verificado, método, caminho completo, consulta canónica e bytes exatos do corpo. Use um nonce novo em cada tentativa.

    Repetições e idempotência

    A tolerância temporal é de cinco minutos. Nonces e chaves usam 16–128 letras, números, hífenes ou sublinhados. Uma chave estável não substitui um nonce novo.

    Acesso Revenda

    O portal de revenda usa a sessão SparkGlim existente e a relação autorizada do membro. As rotas públicas seguem as suas regras, não cabeçalhos de chave privada Organização.

    Pedido ilustrativo com valores de exemplo

    API Organização Versão 1
    typescript
    import { createHash, createHmac, randomBytes } from 'node:crypto'
    
    // Server-side only; this example signs but does not send a request.
    const [keyId, secret] = process.env.SPARKGLIM_PRIVATE_KEY.split(':')
    const domain = process.env.SPARKGLIM_VERIFIED_DOMAIN
    const url = new URL('https://api.sparkglim.net/api/white-label/v1/context')
    const timestamp = String(Date.now())
    const nonce = randomBytes(16).toString('hex')
    const method = 'GET'
    const body = ''
    const idempotencyKey = '' // Stable operation key for routes that require it.
    const campaignKey = '' // Complete optional scoped campaign credential.
    const pairs = [...url.searchParams.entries()].sort((a, b) =>
      a[0] === b[0] ? a[1].localeCompare(b[1]) : a[0].localeCompare(b[0]))
    const query = pairs.map(([key, value]) =>
      encodeURIComponent(key) + '=' + encodeURIComponent(value)).join('&')
    const pathname = url.pathname.replace(/\/$/, '') || '/'
    const bodyHash = createHash('sha256').update(body).digest('hex')
    const canonical = ['v2', domain, idempotencyKey, campaignKey,
      timestamp, nonce, method, pathname, query, bodyHash].join('.')
    const signature = createHmac('sha256', secret).update(canonical).digest('hex')
    const headers = {
      'x-white-label-domain': domain,
      'x-white-label-key-id': keyId,
      'x-white-label-signature-version': '2',
      'x-white-label-timestamp': timestamp,
      'x-white-label-nonce': nonce,
      'x-white-label-signature': signature,
    }
    // For signed POST requests, hash the exact JSON string sent as the body.
    // Add X-Idempotency-Key when required and include it in canonical.
    // Never expose this private key or generated headers to a public client.