Docs Gerenciamento de Assinaturas

Gerenciamento de Assinaturas

Tudo o que você precisa para gerenciar cobranças recorrentes através da stryhub. Da criação de assinaturas ao tratamento de upgrades, cancelamentos, testes gratuitos e pagamentos falhos — tudo integrado com o Stripe.

Visão Geral

A stryhub oferece gerenciamento completo de assinaturas sobre a sua conta Stripe existente. Você não precisa construir infraestrutura de cobrança do zero — conecte sua conta Stripe, e a stryhub cuida do resto.

Principais funcionalidades:

Nenhum código para configuração básica. Se você precisa apenas de páginas de checkout e acompanhamento de assinaturas, conecte sua conta Stripe e pronto. Webhooks só são necessários se você quiser automatizar o controle de acesso no seu SaaS (conceder/revogar funcionalidades com base no status da assinatura).

Como Funciona

A stryhub fica entre o Stripe e o seu SaaS, atuando como uma camada de gerenciamento:

Stripe
← produtos & pagamentos →
stryhub
← webhooks →
Seu SaaS
  1. Stripe armazena seus produtos, preços e processa os pagamentos
  2. stryhub lê seus produtos automaticamente, gera páginas de checkout, gerencia assinaturas e acompanha analytics
  3. Seu SaaS recebe eventos de webhook da stryhub para conceder/revogar acesso, enviar e-mails e atualizar seu banco de dados
A stryhub não substitui o Stripe. Ela é uma camada de gerenciamento sobre ele. Sua conta Stripe, produtos, clientes e histórico de pagamentos permanecem inalterados. A stryhub apenas facilita o gerenciamento.

Ciclo de Vida da Assinatura

Cada assinatura passa por uma série de estados. Entender esses estados é essencial para gerenciar o acesso no seu SaaS.

Status Significado Ação no seu SaaS
trialing O cliente está no período de teste gratuito. Nenhuma cobrança ainda. Conceder acesso completo. Mostrar data de expiração do teste.
active A assinatura está paga e em dia. Conceder acesso completo.
past_due O pagamento mais recente falhou. O Stripe está retentando. Manter acesso (período de carência). Notificar o cliente para atualizar a forma de pagamento.
paused A cobrança está temporariamente pausada. A assinatura ainda existe. Limitar ou revogar acesso. Mostrar mensagem de "assinatura pausada".
unpaid Todas as tentativas de cobrança falharam. Sem mais tentativas automáticas. Revogar acesso. Solicitar ao cliente que pague manualmente ou atualize a forma de pagamento.
canceled A assinatura foi cancelada. Este é um estado final. Revogar acesso. Oferecer opção de reassinatura.
incomplete A primeira tentativa de pagamento falhou ou requer autenticação. Não conceder acesso ainda. Aguardar o pagamento ser concluído.

Transições de estado

lifecycle
trialing ──> active ──> canceled
                │
                ├──> past_due ──> active (pagamento realizado)
                │        │
                │        └──> unpaid ──> canceled
                │
                └──> paused ──> active (retomada)
                         │
                         └──> canceled

incomplete ──> active (pagamento realizado)
     │
     └──> incomplete_expired (timeout de 23h)

Configurando Produtos

A stryhub possui um sistema completo de gerenciamento de produtos e preços integrado ao painel. Você pode criar produtos, definir preços, personalizar opções de checkout e obter links de pagamento compartilháveis — tudo em um passo, sem precisar abrir o Stripe Dashboard.

Criando um produto na stryhub

  1. No painel administrativo, acesse Programs e clique no ícone de Products ao lado do seu programa
  2. Clique em New Product
  3. Preencha os detalhes do produto:
    • Name — o nome do produto que seus clientes verão
    • Description — descrição opcional
    • Image — imagem do produto (JPEG, PNG ou WEBP, máximo 2MB)
    • Statement descriptor — o que aparece na fatura do cartão de crédito do cliente (máximo 22 caracteres)
    • Unit label — ex.: "licença", "vaga", "usuário"
  4. Defina o preço:
    • Amount — o valor do preço (ex.: 29,90)
    • Currency — BRL, USD ou EUR
    • Type — Recurring (assinatura) ou One-time (compra avulsa)
    • Billing interval (para recorrente): Diário, Semanal, Mensal, Trimestral, Anual ou personalizado
  5. Configure as opções de checkout (veja abaixo)
  6. Clique em Create
Um passo, tudo pronto. Quando você cria um produto na stryhub, ele automaticamente cria o produto no Stripe, configura o preço e gera um Payment Link compartilhável — tudo de uma vez. Sem necessidade de abrir o Stripe Dashboard.

Personalização do checkout

Ao criar um produto (ou editar um link de pagamento posteriormente), você pode configurar quais dados são coletados no checkout:

Opção Descrição
Coletar nome Exigir nome completo do cliente
Coletar telefone Exigir número de telefone
Exigir endereço de cobrança Coletar endereço de cobrança completo
Coletar identificação fiscal Coletar identificação fiscal (CPF/CNPJ)
Campos personalizados (até 2) Adicionar campos de texto personalizados ao formulário de checkout (ex.: "Nome da empresa", "Chave de licença")
Mensagem de conclusão Mensagem personalizada exibida após compra bem-sucedida (máximo 500 caracteres)
Métodos de pagamento Escolha quais métodos aceitar: Cartão de crédito/débito, Boleto Bancário, PIX (PIX é excluído automaticamente para assinaturas)

Adicionando mais preços a um produto

Você pode adicionar múltiplos preços ao mesmo produto — por exemplo, um plano mensal e um anual:

  1. Acesse Products no seu programa
  2. Clique no botão + ao lado do produto
  3. Defina o novo valor, moeda e intervalo
  4. Cada preço recebe seu próprio link de checkout e Payment Link

Exemplos de configuração de preços

Cenário Tipo de preço Intervalo
Assinatura mensal Recorrente A cada 1 mês
Assinatura anual (com desconto) Recorrente A cada 1 ano
Cobrança trimestral Recorrente A cada 3 meses
Compra avulsa Avulso N/A

Gerenciando produtos e preços

Na página de Products no painel, você pode:

Já tem produtos no Stripe?

Se você está conectando uma conta Stripe existente que já possui produtos e preços, eles são sincronizados automaticamente. Você não precisa recriar nada.

Visibilidade bidirecional. Produtos criados na stryhub aparecem no seu Stripe Dashboard, e produtos que já estão no Stripe aparecem na stryhub. Ambos são totalmente gerenciados — você pode usar qualquer interface, mas a stryhub é mais rápida e fácil para a maioria das tarefas.

Checkout e Criação de Assinatura

Quando você cria um produto na stryhub, dois tipos de links de checkout são gerados automaticamente:

1. Payment Link (vendas diretas)

Um Payment Link compartilhável do Stripe é criado automaticamente para cada preço. Você pode encontrá-lo na página de Products — basta copiar o link e compartilhar em qualquer lugar (site, e-mail, redes sociais). Sem necessidade de rastreamento de afiliados.

2. Link de checkout de afiliado

Para vendas rastreadas por afiliados, o formato é:

URL
https://app.stryhub.com/checkout/{affiliate_ref_code}/{stripe_price_id}

Os afiliados veem seus links personalizados de checkout na página "My Links". Cada link tem o código de referência incorporado, então as comissões são rastreadas automaticamente.

Ambos os links são gerados automaticamente. Quando você cria um produto na stryhub, o Payment Link e todos os links de checkout de afiliados ficam prontos instantaneamente. Nenhuma configuração extra necessária.

O que acontece após o checkout

  1. O cliente conclui o pagamento na página de checkout hospedada pelo Stripe
  2. O Stripe cria a assinatura e cobra a primeira fatura
  3. A stryhub recebe o evento e cria o registro da assinatura
  4. A stryhub dispara os seguintes webhooks para o seu SaaS:
    • checkout.completed — sessão de checkout concluída
    • payment.completed — primeiro pagamento realizado com sucesso
    • subscription.created — nova assinatura ativa
  5. Se a venda veio por um link de afiliado, a comissão é calculada e transferida automaticamente

Métodos de pagamento suportados

Você escolhe quais métodos de pagamento aceitar ao criar o produto:

PIX não é suportado para assinaturas. Ao criar um preço recorrente, o PIX é automaticamente excluído dos métodos de pagamento. Ele está disponível apenas para compras avulsas.

Tratando Webhooks

Esta é a seção mais importante se você deseja automatizar o controle de acesso no seu SaaS. A stryhub encaminha eventos de assinatura para seus endpoints de webhook como payloads simplificados e consistentes.

Referência de eventos de assinatura

Evento Quando é disparado O que fazer no seu SaaS
checkout.completed O cliente conclui uma compra Criar conta do usuário, conceder acesso, enviar e-mail de boas-vindas
payment.completed Pagamento realizado com sucesso (inicial ou recorrente) Estender período de acesso, enviar recibo
subscription.created Nova assinatura iniciada Armazenar ID da assinatura, provisionar funcionalidades
subscription.renewed Pagamento recorrente realizado com sucesso Estender período de acesso
subscription.canceled Assinatura cancelada Revogar acesso, enviar e-mail de cancelamento
subscription.paused Cobrança da assinatura pausada Limitar ou revogar acesso, notificar usuário
subscription.resumed Assinatura pausada reativada Restaurar acesso completo
payment.failed Tentativa de pagamento falhou Notificar o cliente, mostrar solicitação de atualização de pagamento
subscription.past_due Fatura em atraso Alertar o cliente, considerar um período de carência antes de revogar acesso
customer.created Novo cliente registrado Criar registro do cliente no seu banco de dados

Exemplo: handler completo de webhook

Aqui está um exemplo completo de como tratar eventos de assinatura no seu SaaS. Este código verifica a assinatura do webhook e roteia cada evento para o handler apropriado.

const crypto = require('crypto');
const express = require('express');
const app = express();

const WEBHOOK_SECRET = process.env.STRYHUB_WEBHOOK_SECRET;

// IMPORTANTE: use express.raw() para obter o corpo bruto para verificação de assinatura
app.post('/webhooks/stryhub', express.raw({ type: 'application/json' }), async (req, res) => {
  const signature = req.headers['x-stryhub-signature'];

  // 1. Verificar assinatura
  if (!verifySignature(req.body.toString(), signature, WEBHOOK_SECRET)) {
    return res.status(401).json({ error: 'Invalid signature' });
  }

  const event = JSON.parse(req.body);
  const { type, data } = event;

  // 2. Tratar cada tipo de evento
  switch (type) {
    case 'checkout.completed':
      // Novo cliente acabou de comprar — criar conta
      await createUserAccount({
        email: data.customer.email,
        name: data.customer.name,
        stripeCustomerId: data.customer.stripe_customer_id,
        subscriptionId: data.subscription_id,
        plan: data.mode, // 'subscription' ou 'payment'
      });
      break;

    case 'subscription.created':
      // Assinatura agora ativa — conceder acesso
      await grantAccess(data.customer.stripe_customer_id, data.subscription_id);
      break;

    case 'subscription.renewed':
      // Pagamento recorrente bem-sucedido — estender acesso
      await extendAccess(data.customer.stripe_customer_id, data.subscription_id);
      break;

    case 'subscription.canceled':
      // Assinatura cancelada — revogar acesso
      await revokeAccess(data.customer.stripe_customer_id, data.subscription_id);
      await sendEmail(data.customer.email, 'Your subscription has been canceled');
      break;

    case 'subscription.paused':
      // Assinatura pausada — limitar acesso
      await pauseAccess(data.customer.stripe_customer_id, data.subscription_id);
      break;

    case 'subscription.resumed':
      // Assinatura retomada — restaurar acesso
      await grantAccess(data.customer.stripe_customer_id, data.subscription_id);
      break;

    case 'payment.failed':
      // Pagamento falhou — notificar cliente
      await sendEmail(data.customer.email, 'Your payment failed. Please update your payment method.');
      break;

    case 'subscription.past_due':
      // Fatura em atraso — mostrar aviso (manter acesso durante período de carência)
      await flagPastDue(data.customer.stripe_customer_id, data.subscription_id);
      break;

    case 'customer.created':
      // Novo cliente — armazenar no banco de dados
      await createCustomerRecord(data.customer);
      break;
  }

  // 3. Sempre responder 200 rapidamente
  res.status(200).json({ received: true });
});

function verifySignature(rawBody, signatureHeader, secret) {
  const parts = {};
  signatureHeader.split(',').forEach(p => {
    const [key, value] = p.split('=');
    parts[key] = value;
  });
  const signedContent = `${parts['t']}.${rawBody}`;
  const expected = crypto.createHmac('sha256', secret).update(signedContent).digest('hex');
  return crypto.timingSafeEqual(Buffer.from(parts['v1'], 'hex'), Buffer.from(expected, 'hex'));
}
import hmac, hashlib, json, os
from flask import Flask, request, jsonify

app = Flask(__name__)
WEBHOOK_SECRET = os.environ['STRYHUB_WEBHOOK_SECRET']

@app.route('/webhooks/stryhub', methods=['POST'])
def handle_webhook():
    signature = request.headers.get('X-Stryhub-Signature', '')

    # 1. Verificar assinatura
    if not verify_signature(request.data, signature, WEBHOOK_SECRET):
        return jsonify({'error': 'Invalid signature'}), 401

    event = json.loads(request.data)
    event_type = event['type']
    data = event['data']

    # 2. Tratar cada tipo de evento
    if event_type == 'checkout.completed':
        create_user_account(
            email=data['customer']['email'],
            name=data['customer']['name'],
            stripe_customer_id=data['customer']['stripe_customer_id'],
            subscription_id=data.get('subscription_id'),
        )

    elif event_type == 'subscription.created':
        grant_access(data['customer']['stripe_customer_id'], data['subscription_id'])

    elif event_type == 'subscription.renewed':
        extend_access(data['customer']['stripe_customer_id'], data['subscription_id'])

    elif event_type == 'subscription.canceled':
        revoke_access(data['customer']['stripe_customer_id'], data['subscription_id'])
        send_email(data['customer']['email'], 'Your subscription has been canceled')

    elif event_type == 'subscription.paused':
        pause_access(data['customer']['stripe_customer_id'], data['subscription_id'])

    elif event_type == 'subscription.resumed':
        grant_access(data['customer']['stripe_customer_id'], data['subscription_id'])

    elif event_type == 'payment.failed':
        send_email(data['customer']['email'], 'Your payment failed. Please update your payment method.')

    elif event_type == 'subscription.past_due':
        flag_past_due(data['customer']['stripe_customer_id'], data['subscription_id'])

    elif event_type == 'customer.created':
        create_customer_record(data['customer'])

    # 3. Sempre responder 200 rapidamente
    return jsonify({'received': True}), 200

def verify_signature(raw_body, signature_header, secret):
    parts = dict(p.split('=', 1) for p in signature_header.split(','))
    signed_content = f"{parts['t']}.{raw_body.decode('utf-8')}"
    expected = hmac.new(secret.encode(), signed_content.encode(), hashlib.sha256).hexdigest()
    return hmac.compare_digest(parts['v1'], expected)
<?php
$webhookSecret = getenv('STRYHUB_WEBHOOK_SECRET');
$rawBody = file_get_contents('php://input');
$signature = $_SERVER['HTTP_X_STRYHUB_SIGNATURE'] ?? '';

// 1. Verificar assinatura
if (!verifySignature($rawBody, $signature, $webhookSecret)) {
    http_response_code(401);
    echo json_encode(['error' => 'Invalid signature']);
    exit;
}

$event = json_decode($rawBody, true);
$type = $event['type'];
$data = $event['data'];

// 2. Tratar cada tipo de evento
switch ($type) {
    case 'checkout.completed':
        createUserAccount(
            $data['customer']['email'],
            $data['customer']['name'],
            $data['customer']['stripe_customer_id'],
            $data['subscription_id'] ?? null
        );
        break;

    case 'subscription.created':
        grantAccess($data['customer']['stripe_customer_id'], $data['subscription_id']);
        break;

    case 'subscription.renewed':
        extendAccess($data['customer']['stripe_customer_id'], $data['subscription_id']);
        break;

    case 'subscription.canceled':
        revokeAccess($data['customer']['stripe_customer_id'], $data['subscription_id']);
        sendEmail($data['customer']['email'], 'Your subscription has been canceled');
        break;

    case 'subscription.paused':
        pauseAccess($data['customer']['stripe_customer_id'], $data['subscription_id']);
        break;

    case 'subscription.resumed':
        grantAccess($data['customer']['stripe_customer_id'], $data['subscription_id']);
        break;

    case 'payment.failed':
        sendEmail($data['customer']['email'], 'Payment failed. Please update your payment method.');
        break;

    case 'subscription.past_due':
        flagPastDue($data['customer']['stripe_customer_id'], $data['subscription_id']);
        break;

    case 'customer.created':
        createCustomerRecord($data['customer']);
        break;
}

// 3. Sempre responder 200 rapidamente
http_response_code(200);
echo json_encode(['received' => true]);

function verifySignature(string $rawBody, string $signatureHeader, string $secret): bool {
    $parts = [];
    foreach (explode(',', $signatureHeader) as $part) {
        [$key, $value] = explode('=', $part, 2);
        $parts[$key] = $value;
    }
    $signedContent = "{$parts['t']}.{$rawBody}";
    $expected = hash_hmac('sha256', $signedContent, $secret);
    return hash_equals($parts['v1'] ?? '', $expected);
}
?>
Responda rapidamente. Retorne um código de status 200 dentro de 15 segundos. Se precisar fazer processamento pesado (ex.: enviar e-mails, consultar APIs externas), confirme o recebimento do webhook primeiro e processe de forma assíncrona. Veja o guia de Integração de Webhooks para detalhes sobre verificação de assinatura e política de tentativas.

Portal do Cliente

O Stripe Billing Portal é uma página segura, hospedada pelo Stripe, onde seus clientes podem gerenciar suas próprias assinaturas — sem que você precise construir nenhuma interface.

O que os clientes podem fazer

Configuração

No painel administrativo da stryhub, acesse Billing Portal para configurar quais funcionalidades estão disponíveis:

Configuração O que controla
Permitir cancelamento Se os clientes podem cancelar a assinatura pelo portal
Permitir troca de plano Se os clientes podem fazer upgrade/downgrade para preços diferentes
Permitir atualização de pagamento Se os clientes podem atualizar a forma de pagamento

Abrindo o portal para um cliente

No painel administrativo da stryhub, acesse Customers, clique em um cliente e use o botão "Open Customer Portal". Isso gera um link seguro e de uso único que redireciona o cliente para sua página de gerenciamento hospedada pelo Stripe.

Nenhum código necessário. O portal do cliente é totalmente hospedado pelo Stripe. Ele automaticamente utiliza sua identidade visual (logo, cores) conforme configurado no seu Stripe Dashboard. Você não precisa construir ou manter nenhuma interface para gerenciamento de assinaturas.

Recursos avançados do portal

Upgrades e Downgrades

Quando um cliente muda de plano (ex.: de Básico para Pro), o Stripe automaticamente faz o rateio — calculando o crédito pelo tempo não utilizado no plano antigo e cobrando a diferença do plano novo.

Como o rateio funciona

Exemplo: Cliente no plano de R$50/mês faz upgrade para R$100/mês no dia 15 de um ciclo de 30 dias:

Como os clientes fazem upgrade/downgrade

  1. Através do Portal do Cliente (se troca de plano estiver habilitada)
  2. Através do Stripe Dashboard diretamente
  3. Via Stripe API a partir do backend do seu SaaS

Quando uma mudança de plano acontece, a stryhub dispara um webhook subscription.created com os detalhes atualizados da assinatura (novo preço, novo valor).

Configure os planos disponíveis. Na área de Billing Portal da stryhub, você pode especificar quais produtos e preços estão disponíveis para troca de plano. Isso impede que os clientes mudem para planos que você não pretende que eles vejam.

Cancelamentos

Assinaturas podem ser canceladas de duas formas:

Método Comportamento Recomendado para
Ao final do período O cliente mantém acesso até o fim do período de cobrança atual. Sem reembolso. A maioria dos casos. Melhor experiência para o cliente.
Imediatamente A assinatura termina na hora. O acesso é revogado imediatamente. Violações de política, fraude ou quando o cliente solicita parada imediata.

Quem pode cancelar

Webhook disparado

Quando uma assinatura é cancelada, a stryhub dispara subscription.canceled com os detalhes do cliente e o timestamp do cancelamento. Seu SaaS deve revogar o acesso ao receber este evento.

Final do período é recomendado. O cancelamento imediato interrompe o acesso na hora, o que pode frustrar clientes que já pagaram pelo período atual. Use "cancelar ao final do período" a menos que haja um motivo específico para cancelamento imediato.

Pausar e Retomar

Em vez de cancelar, você pode pausar uma assinatura. Isso interrompe a cobrança mantendo o registro da assinatura intacto — facilitando o retorno do cliente.

Como funciona

Ações do administrador

No painel da stryhub, acesse Subscriptions, encontre uma assinatura ativa e clique em Pause. Para retomar, encontre a assinatura pausada e clique em Resume.

Webhooks disparados

Período de Teste Gratuito

O período de teste gratuito permite que os clientes experimentem seu produto antes de serem cobrados. Durante o teste, a assinatura existe com status trialing.

Configurando testes gratuitos

Os testes gratuitos são configurados no nível do preço no Stripe. Você pode configurar isso ao criar um preço no Stripe Dashboard:

  1. Edite o preço do seu produto e procure a opção Free trial
  2. Defina o número de dias de teste (ex.: 7 ou 14)
  3. Escolha o que acontece quando o teste termina sem forma de pagamento:
    • Cancel — a assinatura é cancelada automaticamente
    • Pause — a assinatura é pausada até o cliente adicionar uma forma de pagamento
A stryhub lê a configuração de teste automaticamente. Uma vez que você configura um período de teste em um preço no Stripe, a stryhub o utiliza para todos os checkouts com esse preço. Nenhuma configuração adicional necessária na stryhub.

Linha do tempo do teste

Quando O que acontece
Início do teste Assinatura criada com status trialing. Sem cobrança.
3 dias antes do fim do teste O Stripe envia o evento customer.subscription.trial_will_end. Use para lembrar o cliente.
Fim do teste A primeira fatura é gerada. Se o pagamento for bem-sucedido, o status muda para active.
Fim do teste (sem forma de pagamento) A assinatura é cancelada ou pausada conforme sua configuração.
Forma de pagamento não é obrigatória. Você pode oferecer testes gratuitos sem exigir cartão de crédito antecipadamente. O Stripe tentará cobrar o cliente quando o teste terminar — se não houver forma de pagamento cadastrada, a assinatura será cancelada ou pausada.

Pagamentos Falhos e Cobrança Automática

Quando um pagamento recorrente falha, o Stripe não desiste imediatamente. Ele usa Smart Retries — um sistema de aprendizado de máquina que analisa padrões de pagamento para determinar o momento ideal para retentar.

O que acontece quando um pagamento falha

  1. O Stripe tenta cobrar a forma de pagamento do cliente
  2. Se falhar, o Stripe agenda tentativas automáticas nas próximas semanas
  3. O status da assinatura muda para past_due
  4. A stryhub dispara os webhooks payment.failed e subscription.past_due
  5. O Stripe envia e-mails de cobrança automaticamente para o cliente
  6. Se uma tentativa for bem-sucedida, a assinatura retorna para active
  7. Se todas as tentativas falharem, a assinatura pode ser cancelada (configurável no Stripe Dashboard)

O que seu SaaS deve fazer

Evento Ação recomendada
payment.failed Exibir um banner no seu app: "Seu pagamento falhou. Por favor, atualize sua forma de pagamento." Incluir um link para o Portal do Cliente.
subscription.past_due Implementar um período de carência (ex.: 7 dias). Manter acesso mas exibir avisos. Após o período de carência, limitar acesso a funcionalidades essenciais.
subscription.canceled Revogar acesso completamente. Oferecer um link para reassinar.

Configurando o comportamento de tentativas

No seu Stripe Dashboard > Settings > Billing > Automatic collection, você pode configurar:

Como as Smart Retries funcionam

O Stripe cuida das tentativas automaticamente. Você não precisa construir lógica de retentativa. Smart Retries usa aprendizado de máquina para encontrar o melhor momento para cobrar, reduzindo significativamente o churn involuntário. Sua única tarefa é notificar o cliente e oferecer uma forma de atualizar o método de pagamento.

Pagamentos Globais e Conformidade

stryhub + Stripe suporta pagamentos de clientes do mundo inteiro com conformidade enterprise integrada.

Suporte Multi-Moeda

Aceite pagamentos em 135+ moedas com conversão automática de câmbio. Clientes pagam na moeda local enquanto você recebe na sua. A Stripe cuida de todos os cálculos de taxa de câmbio.

3D Secure e Conformidade SCA

Para clientes europeus, a Autenticação Forte do Cliente (SCA) é exigida pela PSD2. A Stripe aciona automaticamente a autenticação 3D Secure quando necessário, garantindo que suas assinaturas estejam em conformidade com as regulamentações europeias sem desenvolvimento adicional.

Automação de Impostos (Stripe Tax)

O Stripe Tax calcula e coleta automaticamente o valor correto de impostos com base na localização do cliente:

A Stripe monitora suas obrigações fiscais e alerta quando você se aproxima dos limites de registro em novas jurisdições. Faturas com conformidade fiscal são geradas automaticamente.

Migração para a stryhub

Se você já usa o Stripe (ou outra plataforma), migrar para a stryhub é simples. Seus dados existentes permanecem intactos.

Migração passo a passo

  1. Crie sua conta na stryhub em app.stryhub.com
  2. Conecte sua conta Stripe existente — acesse Configurações e clique em "Connect Stripe Account." Seus produtos, preços e clientes são sincronizados automaticamente.
  3. Sincronize dados existentes — use o botão "Sync Data" no painel administrativo para importar todas as assinaturas e clientes existentes do Stripe.
  4. Configure os endpoints de webhook — acesse Webhooks e adicione o endpoint do seu SaaS para começar a receber eventos.
  5. Atualize seu SaaS — implemente um handler de webhook (veja Tratando Webhooks acima) para gerenciar acesso com base nos eventos de assinatura.
  6. Configure o Portal do Cliente — acesse Billing Portal e habilite as funcionalidades que deseja (cancelamento, troca de plano, atualização de pagamento).
  7. Substitua os links de checkout — troque suas URLs de checkout antigas pelos links de checkout da stryhub. Assinaturas existentes continuam funcionando — apenas novas compras usam o checkout da stryhub.
  8. Configure afiliados (opcional) — crie um programa de afiliados para aumentar suas vendas. Veja o guia de Programas de Afiliados.
Migração sem tempo de inatividade. Suas assinaturas, clientes e histórico de pagamentos existentes no Stripe permanecem completamente intactos. A stryhub lê seus dados — ela nunca modifica ou exclui nada na sua conta Stripe. Você pode executar ambos os sistemas em paralelo durante a transição.

Vindo de outra plataforma?

Se você está migrando de uma plataforma que não usa Stripe (ex.: Paddle, Gumroad, PayPal), será necessário:

  1. Criar uma conta Stripe, caso ainda não tenha
  2. Recriar seus produtos e preços no Stripe
  3. Pedir aos clientes existentes para reassinarem pelo novo link de checkout da stryhub
  4. Executar ambos os sistemas em paralelo até que todos os clientes tenham migrado
Precisa de ajuda na migração? Se tiver dúvidas sobre o processo de migração, entre em contato com nossa equipe de suporte. Teremos prazer em ajudar você a planejar a transição.