Plasma

Autenticação

Aprenda a gerar e usar API Keys para autenticar suas requisições.

Visão Geral

O Plasma SDK usa duas API Keys em conjunto para autenticar todas as requisições. Ambas devem ser enviadas como headers HTTP customizados:

HeaderValorDescrição
X-PLASMA-Public-Keypk_test_xxx ou pk_live_xxxIdentifica sua loja
X-PLASMA-Secret-Keysk_test_xxx ou sk_live_xxxAutentica a operação

Nunca exponha sua Secret Key (sk_) no frontend. Use apenas no backend.


Gerando API Keys

Via Dashboard

  1. Acesse o Dashboard do Plasma
  2. Navegue até Configurações → API Keys
  3. Clique em Gerar Nova Chave
  4. Copie e armazene ambas as chaves em local seguro

A Secret Key é exibida apenas uma vez. Guarde-a em um local seguro!


Usando a Autenticação

Headers Obrigatórios

Inclua ambas as chaves em todas as requisições autenticadas:

X-PLASMA-Public-Key: pk_live_xxxxxxxxxxxxxxxxxxxx
X-PLASMA-Secret-Key: sk_live_xxxxxxxxxxxxxxxxxxxx

Ambas as chaves devem usar o mesmo ambiente (ambas _test_ ou ambas _live_). Misturar ambientes retornará erro 401 Environment Mismatch.

Exemplo Completo

curl -X GET "https://api.plasmacheckout.com/api/sdk/products" \
  -H "X-PLASMA-Public-Key: pk_live_xxxxxxxxxxxxxxxxxxxx" \
  -H "X-PLASMA-Secret-Key: sk_live_xxxxxxxxxxxxxxxxxxxx" \
  -H "Content-Type: application/json"
const response = await fetch('https://api.plasmacheckout.com/api/sdk/products', {
  method: 'GET',
  headers: {
    'X-PLASMA-Public-Key': 'pk_live_xxxxxxxxxxxxxxxxxxxx',
    'X-PLASMA-Secret-Key': 'sk_live_xxxxxxxxxxxxxxxxxxxx',
    'Content-Type': 'application/json'
  }
});

const data = await response.json();
console.log(data);
import requests

headers = {
    'X-PLASMA-Public-Key': 'pk_live_xxxxxxxxxxxxxxxxxxxx',
    'X-PLASMA-Secret-Key': 'sk_live_xxxxxxxxxxxxxxxxxxxx',
    'Content-Type': 'application/json'
}

response = requests.get(
    'https://api.plasmacheckout.com/api/sdk/products',
    headers=headers
)

print(response.json())
<?php
$ch = curl_init();

curl_setopt_array($ch, [
    CURLOPT_URL => 'https://api.plasmacheckout.com/api/sdk/products',
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => [
        'X-PLASMA-Public-Key: pk_live_xxxxxxxxxxxxxxxxxxxx',
        'X-PLASMA-Secret-Key: sk_live_xxxxxxxxxxxxxxxxxxxx',
        'Content-Type: application/json'
    ]
]);

$response = curl_exec($ch);
curl_close($ch);

$data = json_decode($response, true);
print_r($data);

Permissões

OperaçãoPublic Key (pk_)Secret Key (sk_)
Listar produtos
Criar produtos
Listar pedidos
Criar checkout
Gerenciar webhooks

Mesmo endpoints que aceitam Public Key ainda exigem ambas as chaves nos headers. A tabela indica qual tipo de chave concede permissão para cada operação.


Erros de Autenticação

Status HTTPCódigoDescrição
401UNAUTHORIZEDAPI Keys inválidas, ausentes ou desativadas
401KEY_EXPIREDAPI Key expirada
401ENVIRONMENT_MISMATCHPublic Key e Secret Key com ambientes diferentes
403FORBIDDENSem permissão para esta operação
429RATE_LIMITEDLimite de requisições excedido
Exemplo de erro
{
  "error": "Invalid API key. Key not found or deactivated.",
  "code": "UNAUTHORIZED"
}

Rate Limiting

Todas as requisições são limitadas por API Key. Os headers de rate limit são retornados em cada resposta:

HeaderDescrição
X-RateLimit-LimitMáximo de requests por janela
X-RateLimit-RemainingRequests restantes
X-RateLimit-ResetTimestamp Unix do reset
Retry-AfterSegundos para retry (apenas em 429)
Resposta 429 Too Many Requests
{
  "error": "Rate limit exceeded. Try again later.",
  "code": "RATE_LIMITED"
}

Boas Práticas

Use variáveis de ambiente

Nunca coloque API Keys diretamente no código:

.env
PLASMA_PUBLIC_KEY=pk_live_xxxxxxxxxxxxxxxxxxxx
PLASMA_SECRET_KEY=sk_live_xxxxxxxxxxxxxxxxxxxx

Rotacione suas chaves regularmente

Gere novas chaves periodicamente e revogue as antigas no Dashboard.

Use chaves diferentes por ambiente

Mantenha chaves _test_ para desenvolvimento e _live_ para produção.

Trate erros de rate limit

Implemente retry com backoff exponencial ao receber 429:

async function fetchWithRetry(url, options, maxRetries = 3) {
  for (let attempt = 0; attempt < maxRetries; attempt++) {
    const response = await fetch(url, options);
    
    if (response.status === 429) {
      const retryAfter = parseInt(response.headers.get('Retry-After') || '5');
      await new Promise(resolve => setTimeout(resolve, retryAfter * 1000));
      continue;
    }
    
    return response;
  }
  throw new Error('Max retries exceeded');
}