v1 v2
API v2

API de Pagamentos v2

Crie transações avulsas ou assinaturas (Pix Automático ou cartão recorrente), consulte, estorne e receba tudo em tempo real por webhook — com um schema consistente do início ao fim.

Checklist rápido

  1. Crie uma credencial v2 no painel, em Integrações → API.
  2. Envie as duas chaves em todo request, nos headers x-api-key e x-api-secret.
  3. Configure uma URL de webhook para receber atualizações de status em tempo real.

URL Base

Todas as requisições da v2 usam este domínio base:

BASE https://api.sunize.com.br/v2
Importante Anexe sempre esta URL base aos endpoints documentados. Para criar uma transação, por exemplo, a requisição vai para https://api.sunize.com.br/v2/transactions.

Autenticação

Toda requisição precisa dos dois cabeçalhos abaixo:

Cabeçalhos
x-api-key: SEU_API_KEY
x-api-secret: SEU_API_SECRET
Content-Type: application/json
Onde encontrar Painel da sua conta → Integrações → API. Ao criar a credencial, escolha a versão v2 — cada credencial funciona só na versão em que foi criada, e essa escolha não pode ser alterada depois.
x-api-secret é obrigatório Um request sem x-api-secret, ou com o valor errado, retorna 401.

Criar Transação

Cria uma nova transação avulsa (PIX ou cartão de crédito).

POST /v2/transactions

Requisição

curl -X POST https://api.sunize.com.br/v2/transactions \
  -H "x-api-key: SEU_API_KEY" \
  -H "x-api-secret: SEU_API_SECRET" \
  -H "Content-Type: application/json" \
  -d '{
    "external_id": "pedido-1029",
    "amount": 149.90,
    "payment_method": "PIX",
    "items": [
      {
        "id": "prod-1",
        "title": "Curso de Marketing",
        "description": "Acesso vitalício",
        "price": 149.90,
        "quantity": 1,
        "is_physical": false
      }
    ],
    "ip": "203.0.113.10",
    "customer": {
      "name": "Maria Silva",
      "email": "maria@example.com",
      "phone": "+5511999999999",
      "document_type": "CPF",
      "document": "12345678900"
    },
    "tracking": {
      "utm_source": "instagram",
      "utm_medium": "cpc",
      "utm_campaign": "lancamento-julho"
    }
  }'
const response = await fetch("https://api.sunize.com.br/v2/transactions", {
  method: "POST",
  headers: {
    "x-api-key": process.env.SUNIZE_API_KEY,
    "x-api-secret": process.env.SUNIZE_API_SECRET,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    external_id: "pedido-1029",
    amount: 149.90,
    payment_method: "PIX",
    items: [
      {
        id: "prod-1",
        title: "Curso de Marketing",
        description: "Acesso vitalício",
        price: 149.90,
        quantity: 1,
        is_physical: false,
      },
    ],
    ip: "203.0.113.10",
    customer: {
      name: "Maria Silva",
      email: "maria@example.com",
      phone: "+5511999999999",
      document_type: "CPF",
      document: "12345678900",
    },
    tracking: {
      utm_source: "instagram",
      utm_medium: "cpc",
      utm_campaign: "lancamento-julho",
    },
  }),
});

const transaction = await response.json();
console.log(transaction);
<?php

$body = [
    "external_id" => "pedido-1029",
    "amount" => 149.90,
    "payment_method" => "PIX",
    "items" => [
        [
            "id" => "prod-1",
            "title" => "Curso de Marketing",
            "description" => "Acesso vitalício",
            "price" => 149.90,
            "quantity" => 1,
            "is_physical" => false,
        ],
    ],
    "ip" => "203.0.113.10",
    "customer" => [
        "name" => "Maria Silva",
        "email" => "maria@example.com",
        "phone" => "+5511999999999",
        "document_type" => "CPF",
        "document" => "12345678900",
    ],
    "tracking" => [
        "utm_source" => "instagram",
        "utm_medium" => "cpc",
        "utm_campaign" => "lancamento-julho",
    ],
];

$ch = curl_init("https://api.sunize.com.br/v2/transactions");
curl_setopt_array($ch, [
    CURLOPT_POST => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => [
        "x-api-key: " . getenv("SUNIZE_API_KEY"),
        "x-api-secret: " . getenv("SUNIZE_API_SECRET"),
        "Content-Type: application/json",
    ],
    CURLOPT_POSTFIELDS => json_encode($body),
]);

$response = json_decode(curl_exec($ch), true);
curl_close($ch);

print_r($response);
import os
import requests

response = requests.post(
    "https://api.sunize.com.br/v2/transactions",
    headers={
        "x-api-key": os.environ["SUNIZE_API_KEY"],
        "x-api-secret": os.environ["SUNIZE_API_SECRET"],
    },
    json={
        "external_id": "pedido-1029",
        "amount": 149.90,
        "payment_method": "PIX",
        "items": [
            {
                "id": "prod-1",
                "title": "Curso de Marketing",
                "description": "Acesso vitalício",
                "price": 149.90,
                "quantity": 1,
                "is_physical": False,
            }
        ],
        "ip": "203.0.113.10",
        "customer": {
            "name": "Maria Silva",
            "email": "maria@example.com",
            "phone": "+5511999999999",
            "document_type": "CPF",
            "document": "12345678900",
        },
        "tracking": {
            "utm_source": "instagram",
            "utm_medium": "cpc",
            "utm_campaign": "lancamento-julho",
        },
    },
)

transaction = response.json()
print(transaction)

Parâmetros

ParâmetroTipoDescrição
external_idstringIdentificador único externo da transação
amountnumberValor total em reais (mínimo R$ 5,00)
payment_methodstringPIX ou CREDIT_CARD
itemsarrayItens da transação (id, title, description, price, quantity, is_physical)
ipstringEndereço IP do cliente
customerobjectname, email, phone (E.164, ex: +5511999999999), document_type (CPF/CNPJ), document
cardobjectObrigatório se payment_method for CREDIT_CARD: card_number, card_holder_name, card_expiration_date (MM/AAAA), card_cvv, installment
splitsarrayOpcional. user_id, type (percentage/fixed), value
tracking novoobjectOpcional. utm_source, utm_medium, utm_campaign, utm_content, utm_term — voltam no webhook

Resposta

JSON Response
{
  "id": "string",
  "external_id": "string",
  "status": "AUTHORIZED" | "PENDING" | "CHARGEBACK" | "REFUNDED" | "FAILED" | "IN_DISPUTE",
  "amount": 149.9,
  "customer": { "email": "string", "name": "string" },
  "payment_method": "string",
  "pix": { "payload": "string" },
  "hasError": false
}

Status possíveis

PENDING AUTHORIZED FAILED CHARGEBACK REFUNDED IN_DISPUTE

Consultar Transação

Consulta os detalhes de uma transação criada anteriormente.

GET /v2/transactions/:transaction_id
curl https://api.sunize.com.br/v2/transactions/TRANSACTION_ID \
  -H "x-api-key: SEU_API_KEY" \
  -H "x-api-secret: SEU_API_SECRET"
const response = await fetch(
  `https://api.sunize.com.br/v2/transactions/${transactionId}`,
  {
    headers: {
      "x-api-key": process.env.SUNIZE_API_KEY,
      "x-api-secret": process.env.SUNIZE_API_SECRET,
    },
  }
);

const transaction = await response.json();
<?php

$ch = curl_init("https://api.sunize.com.br/v2/transactions/{$transactionId}");
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => [
        "x-api-key: " . getenv("SUNIZE_API_KEY"),
        "x-api-secret: " . getenv("SUNIZE_API_SECRET"),
    ],
]);

$response = json_decode(curl_exec($ch), true);
curl_close($ch);
import os
import requests

response = requests.get(
    f"https://api.sunize.com.br/v2/transactions/{transaction_id}",
    headers={
        "x-api-key": os.environ["SUNIZE_API_KEY"],
        "x-api-secret": os.environ["SUNIZE_API_SECRET"],
    },
)

transaction = response.json()

Resposta

JSON Response
{
  "id": "c22dc7e1-8b10-4580-9dc4-ebf78ceca475",
  "external_id": "pedido-1029",
  "status": "AUTHORIZED",
  "amount": 149.9,
  "payment_method": "PIX",
  "customer": {
    "name": "Maria Silva",
    "email": "maria@example.com",
    "phone": "+5511999999999",
    "document": "12345678900",
    "address": null
  },
  "created_at": "2026-08-19T20:45:33.855Z"
}

Estornar Transação

Estorna uma venda avulsa criada via API — a mesma operação disponível no painel em "Estornar venda".

POST /v2/transactions/:transaction_id/refund
curl -X POST https://api.sunize.com.br/v2/transactions/TRANSACTION_ID/refund \
  -H "x-api-key: SEU_API_KEY" \
  -H "x-api-secret: SEU_API_SECRET"
const response = await fetch(
  `https://api.sunize.com.br/v2/transactions/${transactionId}/refund`,
  {
    method: "POST",
    headers: {
      "x-api-key": process.env.SUNIZE_API_KEY,
      "x-api-secret": process.env.SUNIZE_API_SECRET,
    },
  }
);

const result = await response.json();
<?php

$ch = curl_init("https://api.sunize.com.br/v2/transactions/{$transactionId}/refund");
curl_setopt_array($ch, [
    CURLOPT_POST => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => [
        "x-api-key: " . getenv("SUNIZE_API_KEY"),
        "x-api-secret: " . getenv("SUNIZE_API_SECRET"),
    ],
]);

$response = json_decode(curl_exec($ch), true);
curl_close($ch);
import os
import requests

response = requests.post(
    f"https://api.sunize.com.br/v2/transactions/{transaction_id}/refund",
    headers={
        "x-api-key": os.environ["SUNIZE_API_KEY"],
        "x-api-secret": os.environ["SUNIZE_API_SECRET"],
    },
)

result = response.json()

Resposta

{ "id": "c22dc7e1-8b10-4580-9dc4-ebf78ceca475", "status": "REFUNDED" }
Pré-condições Só é possível estornar vendas AUTHORIZED, criadas por esta mesma API, cujos participantes (produtor e coprodutores/afiliados de split) tenham saldo suficiente para devolver o valor — as mesmas regras do estorno manual no painel.

Criar Assinatura novo

Cria uma venda recorrente. Suporta dois trilhos: cartão de crédito (cobrança automática a cada ciclo) e Pix Automático (débito automático via Pix, autorizado uma única vez pelo comprador).

POST /v2/subscriptions
Pix Automático já vem habilitado Toda credencial v2 já pode criar assinaturas por Pix Automático. Cartão recorrente não vem habilitado por padrão — entre em contato com a nossa equipe para ativar essa funcionalidade na sua conta.

Requisição — Cartão de crédito

curl -X POST https://api.sunize.com.br/v2/subscriptions \
  -H "x-api-key: SEU_API_KEY" \
  -H "x-api-secret: SEU_API_SECRET" \
  -H "Content-Type: application/json" \
  -d '{
    "external_id": "assinatura-482",
    "amount": 97.00,
    "payment_method": "CREDIT_CARD",
    "membership_period": "MENSAL",
    "items": [
      { "id": "plano-pro", "title": "Plano PRO", "description": "Assinatura mensal", "price": 97.00, "quantity": 1, "is_physical": false }
    ],
    "ip": "203.0.113.10",
    "customer": {
      "name": "João Souza",
      "email": "joao@example.com",
      "phone": "+5511988888888",
      "document_type": "CPF",
      "document": "98765432100"
    },
    "card": {
      "card_number": "4111111111111111",
      "card_holder_name": "JOAO SOUZA",
      "card_expiration_date": "12/2030",
      "card_cvv": "123",
      "installment": 1
    }
  }'
const response = await fetch("https://api.sunize.com.br/v2/subscriptions", {
  method: "POST",
  headers: {
    "x-api-key": process.env.SUNIZE_API_KEY,
    "x-api-secret": process.env.SUNIZE_API_SECRET,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    external_id: "assinatura-482",
    amount: 97.0,
    payment_method: "CREDIT_CARD",
    membership_period: "MENSAL",
    items: [
      {
        id: "plano-pro",
        title: "Plano PRO",
        description: "Assinatura mensal",
        price: 97.0,
        quantity: 1,
        is_physical: false,
      },
    ],
    ip: "203.0.113.10",
    customer: {
      name: "João Souza",
      email: "joao@example.com",
      phone: "+5511988888888",
      document_type: "CPF",
      document: "98765432100",
    },
    card: {
      card_number: "4111111111111111",
      card_holder_name: "JOAO SOUZA",
      card_expiration_date: "12/2030",
      card_cvv: "123",
      installment: 1,
    },
  }),
});

const subscription = await response.json();
<?php

$body = [
    "external_id" => "assinatura-482",
    "amount" => 97.00,
    "payment_method" => "CREDIT_CARD",
    "membership_period" => "MENSAL",
    "items" => [
        [
            "id" => "plano-pro",
            "title" => "Plano PRO",
            "description" => "Assinatura mensal",
            "price" => 97.00,
            "quantity" => 1,
            "is_physical" => false,
        ],
    ],
    "ip" => "203.0.113.10",
    "customer" => [
        "name" => "João Souza",
        "email" => "joao@example.com",
        "phone" => "+5511988888888",
        "document_type" => "CPF",
        "document" => "98765432100",
    ],
    "card" => [
        "card_number" => "4111111111111111",
        "card_holder_name" => "JOAO SOUZA",
        "card_expiration_date" => "12/2030",
        "card_cvv" => "123",
        "installment" => 1,
    ],
];

$ch = curl_init("https://api.sunize.com.br/v2/subscriptions");
curl_setopt_array($ch, [
    CURLOPT_POST => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => [
        "x-api-key: " . getenv("SUNIZE_API_KEY"),
        "x-api-secret: " . getenv("SUNIZE_API_SECRET"),
        "Content-Type: application/json",
    ],
    CURLOPT_POSTFIELDS => json_encode($body),
]);

$response = json_decode(curl_exec($ch), true);
curl_close($ch);
import os
import requests

response = requests.post(
    "https://api.sunize.com.br/v2/subscriptions",
    headers={
        "x-api-key": os.environ["SUNIZE_API_KEY"],
        "x-api-secret": os.environ["SUNIZE_API_SECRET"],
    },
    json={
        "external_id": "assinatura-482",
        "amount": 97.00,
        "payment_method": "CREDIT_CARD",
        "membership_period": "MENSAL",
        "items": [
            {
                "id": "plano-pro",
                "title": "Plano PRO",
                "description": "Assinatura mensal",
                "price": 97.00,
                "quantity": 1,
                "is_physical": False,
            }
        ],
        "ip": "203.0.113.10",
        "customer": {
            "name": "João Souza",
            "email": "joao@example.com",
            "phone": "+5511988888888",
            "document_type": "CPF",
            "document": "98765432100",
        },
        "card": {
            "card_number": "4111111111111111",
            "card_holder_name": "JOAO SOUZA",
            "card_expiration_date": "12/2030",
            "card_cvv": "123",
            "installment": 1,
        },
    },
)

subscription = response.json()

Resposta — Cartão de crédito

{
  "id": "rs_8f2a...",
  "external_id": "assinatura-482",
  "status": "ACTIVE",
  "amount": 97,
  "membership_period": "MENSAL",
  "payment_method": "CREDIT_CARD",
  "next_payment_date": "2026-09-19T14:32:10.000Z"
}

Requisição — Pix Automático

Mesmo endpoint — troque payment_method para PIX e remova card.

curl -X POST https://api.sunize.com.br/v2/subscriptions \
  -H "x-api-key: SEU_API_KEY" \
  -H "x-api-secret: SEU_API_SECRET" \
  -H "Content-Type: application/json" \
  -d '{
    "external_id": "assinatura-483",
    "amount": 97.00,
    "payment_method": "PIX",
    "membership_period": "MENSAL",
    "items": [
      { "id": "plano-pro", "title": "Plano PRO", "description": "Assinatura mensal", "price": 97.00, "quantity": 1, "is_physical": false }
    ],
    "ip": "203.0.113.10",
    "customer": {
      "name": "João Souza",
      "email": "joao@example.com",
      "phone": "+5511988888888",
      "document_type": "CPF",
      "document": "98765432100"
    }
  }'
const response = await fetch("https://api.sunize.com.br/v2/subscriptions", {
  method: "POST",
  headers: {
    "x-api-key": process.env.SUNIZE_API_KEY,
    "x-api-secret": process.env.SUNIZE_API_SECRET,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    external_id: "assinatura-483",
    amount: 97.0,
    payment_method: "PIX",
    membership_period: "MENSAL",
    items: [
      {
        id: "plano-pro",
        title: "Plano PRO",
        description: "Assinatura mensal",
        price: 97.0,
        quantity: 1,
        is_physical: false,
      },
    ],
    ip: "203.0.113.10",
    customer: {
      name: "João Souza",
      email: "joao@example.com",
      phone: "+5511988888888",
      document_type: "CPF",
      document: "98765432100",
    },
  }),
});

const subscription = await response.json();
// subscription.pix.qr_code -> mostre este código pro comprador autorizar
<?php

$body = [
    "external_id" => "assinatura-483",
    "amount" => 97.00,
    "payment_method" => "PIX",
    "membership_period" => "MENSAL",
    "items" => [
        [
            "id" => "plano-pro",
            "title" => "Plano PRO",
            "description" => "Assinatura mensal",
            "price" => 97.00,
            "quantity" => 1,
            "is_physical" => false,
        ],
    ],
    "ip" => "203.0.113.10",
    "customer" => [
        "name" => "João Souza",
        "email" => "joao@example.com",
        "phone" => "+5511988888888",
        "document_type" => "CPF",
        "document" => "98765432100",
    ],
];

$ch = curl_init("https://api.sunize.com.br/v2/subscriptions");
curl_setopt_array($ch, [
    CURLOPT_POST => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => [
        "x-api-key: " . getenv("SUNIZE_API_KEY"),
        "x-api-secret: " . getenv("SUNIZE_API_SECRET"),
        "Content-Type: application/json",
    ],
    CURLOPT_POSTFIELDS => json_encode($body),
]);

$response = json_decode(curl_exec($ch), true);
curl_close($ch);
// $response['pix']['qr_code'] -> mostre este código pro comprador autorizar
import os
import requests

response = requests.post(
    "https://api.sunize.com.br/v2/subscriptions",
    headers={
        "x-api-key": os.environ["SUNIZE_API_KEY"],
        "x-api-secret": os.environ["SUNIZE_API_SECRET"],
    },
    json={
        "external_id": "assinatura-483",
        "amount": 97.00,
        "payment_method": "PIX",
        "membership_period": "MENSAL",
        "items": [
            {
                "id": "plano-pro",
                "title": "Plano PRO",
                "description": "Assinatura mensal",
                "price": 97.00,
                "quantity": 1,
                "is_physical": False,
            }
        ],
        "ip": "203.0.113.10",
        "customer": {
            "name": "João Souza",
            "email": "joao@example.com",
            "phone": "+5511988888888",
            "document_type": "CPF",
            "document": "98765432100",
        },
    },
)

subscription = response.json()
# subscription["pix"]["qr_code"] -> mostre este código pro comprador autorizar

Resposta — Pix Automático

{
  "id": "rs_9c31...",
  "external_id": "assinatura-483",
  "status": "PENDING_AUTHORIZATION",
  "amount": 97,
  "membership_period": "MENSAL",
  "payment_method": "PIX",
  "pix": {
    "qr_code": "00020126...6304ABCD",
    "payment_link": "https://pay.sunize.com.br/pix-automatico/..."
  }
}
Fluxo do Pix Automático A assinatura nasce em PENDING_AUTHORIZATION. Mostre o qr_code (ou o link) pro comprador escanear/autorizar uma única vez — depois disso as cobranças seguintes acontecem automaticamente, sem novo QR. Você recebe o webhook SUBSCRIPTION_AUTHORIZED quando isso acontece.

Parâmetros

ParâmetroTipoDescrição
external_idstringIdentificador único externo da assinatura
amountnumberValor cobrado a cada ciclo, em reais
payment_methodstringPIX (Pix Automático) ou CREDIT_CARD
membership_periodstringSEMANAL, MENSAL, BIMESTRAL, SEMESTRAL ou ANUAL. Pix Automático só aceita SEMANAL/MENSAL/ANUAL.
itemsarrayMesmo formato de itens da transação avulsa
ipstringEndereço IP do comprador
customerobjectMesmo formato da transação avulsa
cardobjectObrigatório se payment_method for CREDIT_CARD — dados do cartão usados na 1ª cobrança e salvos para as próximas. Envie installment: 1.
splitsarrayOpcional — mesmo formato da transação avulsa
trackingobjectOpcional — mesmo formato da transação avulsa

Erros específicos

CódigoDescrição
400Cartão recorrente não habilitado para esta credencial — fale com a nossa equipe
400Pagamento com cartão recusado — assinatura não foi criada
400Período incompatível com Pix Automático (use SEMANAL, MENSAL ou ANUAL)

Consultar Assinatura novo

Consulta o status atual de uma assinatura.

GET /v2/subscriptions/:subscription_id
curl https://api.sunize.com.br/v2/subscriptions/SUBSCRIPTION_ID \
  -H "x-api-key: SEU_API_KEY" \
  -H "x-api-secret: SEU_API_SECRET"
const response = await fetch(
  `https://api.sunize.com.br/v2/subscriptions/${subscriptionId}`,
  {
    headers: {
      "x-api-key": process.env.SUNIZE_API_KEY,
      "x-api-secret": process.env.SUNIZE_API_SECRET,
    },
  }
);

const subscription = await response.json();
<?php

$ch = curl_init("https://api.sunize.com.br/v2/subscriptions/{$subscriptionId}");
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => [
        "x-api-key: " . getenv("SUNIZE_API_KEY"),
        "x-api-secret: " . getenv("SUNIZE_API_SECRET"),
    ],
]);

$response = json_decode(curl_exec($ch), true);
curl_close($ch);
import os
import requests

response = requests.get(
    f"https://api.sunize.com.br/v2/subscriptions/{subscription_id}",
    headers={
        "x-api-key": os.environ["SUNIZE_API_KEY"],
        "x-api-secret": os.environ["SUNIZE_API_SECRET"],
    },
)

subscription = response.json()

Resposta

{
  "id": "rs_8f2a...",
  "external_id": "assinatura-482",
  "status": "ACTIVE" | "PENDING_AUTHORIZATION" | "LATE" | "PAUSED" | "CANCELED",
  "amount": 97,
  "membership_period": "MENSAL",
  "payment_method": "CREDIT_CARD",
  "next_payment_date": "2026-09-19T14:32:10.000Z",
  "last_payment_date": "2026-08-19T14:32:10.000Z"
}

Cancelar Assinatura novo

Cancela uma assinatura ativa. O comprador mantém acesso até o fim do ciclo já pago.

POST /v2/subscriptions/:subscription_id/cancel
curl -X POST https://api.sunize.com.br/v2/subscriptions/SUBSCRIPTION_ID/cancel \
  -H "x-api-key: SEU_API_KEY" \
  -H "x-api-secret: SEU_API_SECRET"
const response = await fetch(
  `https://api.sunize.com.br/v2/subscriptions/${subscriptionId}/cancel`,
  {
    method: "POST",
    headers: {
      "x-api-key": process.env.SUNIZE_API_KEY,
      "x-api-secret": process.env.SUNIZE_API_SECRET,
    },
  }
);

const result = await response.json();
<?php

$ch = curl_init("https://api.sunize.com.br/v2/subscriptions/{$subscriptionId}/cancel");
curl_setopt_array($ch, [
    CURLOPT_POST => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => [
        "x-api-key: " . getenv("SUNIZE_API_KEY"),
        "x-api-secret: " . getenv("SUNIZE_API_SECRET"),
    ],
]);

$response = json_decode(curl_exec($ch), true);
curl_close($ch);
import os
import requests

response = requests.post(
    f"https://api.sunize.com.br/v2/subscriptions/{subscription_id}/cancel",
    headers={
        "x-api-key": os.environ["SUNIZE_API_KEY"],
        "x-api-secret": os.environ["SUNIZE_API_SECRET"],
    },
)

result = response.json()

Resposta

{ "id": "rs_8f2a...", "status": "CANCELED" }

Webhook de Transações

Enviado para a URL configurada sempre que o status de uma transação muda.

Payload
{
  "id": "string",
  "external_id": "string",
  "amount": 149.9,
  "status": "AUTHORIZED" | "PENDING" | "CHARGEBACK" | "REFUNDED" | "FAILED" | "IN_DISPUTE",
  "payment_method": "string",
  "tracking": {
    "utm_source": "string" | null,
    "utm_medium": "string" | null,
    "utm_campaign": "string" | null,
    "utm_content": "string" | null,
    "utm_term": "string" | null
  }
}
Segurança O webhook é enviado com o cabeçalho x-api-secret — valide-o pra confirmar que a chamada veio da Sunize.

Webhook de Assinaturas novo

Enviado para a mesma URL configurada, sempre que uma assinatura mudar de estado.

Payload
{
  "event": "SUBSCRIPTION_CREATED" | "SUBSCRIPTION_AUTHORIZED" | "SUBSCRIPTION_RENEWED" | "SUBSCRIPTION_LATE" | "SUBSCRIPTION_CANCELED" | "SUBSCRIPTION_RECOVERED",
  "id": "string",
  "external_id": "string",
  "status": "ACTIVE" | "PENDING_AUTHORIZATION" | "LATE" | "CANCELED",
  "amount": 97,
  "payment_method": "PIX" | "CREDIT_CARD",
  "membership_period": "string",
  "next_payment_date": "string" | null
}
EventoQuando dispara
SUBSCRIPTION_CREATEDAssinatura criada (cartão: já ativa; Pix: aguardando autorização)
SUBSCRIPTION_AUTHORIZEDComprador autorizou o Pix Automático — assinatura passa a ACTIVE
SUBSCRIPTION_RENEWEDUma nova cobrança do ciclo foi aprovada
SUBSCRIPTION_LATECobrança do ciclo falhou (produtor pode configurar tentativas automáticas)
SUBSCRIPTION_CANCELEDAssinatura cancelada (pelo comprador, produtor ou plataforma)
SUBSCRIPTION_RECOVEREDUma cobrança que havia falhado foi recuperada com sucesso

Erros

Códigos de erro comuns a todos os endpoints da v2:

CódigoDescrição
401API Key ou API Secret ausentes ou inválidos
400Dados inválidos na requisição
500Erro interno do servidor

Integrando com ajuda de uma IA?

Publicamos um guia único em Markdown com toda a API v2 — cole no ChatGPT, Claude ou Copilot e peça pra gerar a integração na sua linguagem.