Solicite acesso antecipado

Informe seu nome e um e-mail ou número de telefone. Entraremos em contato com os detalhes de acesso à Tajo.

Referência do App Manifest

O arquivo de manifesto stripe-app.json é a configuração central do seu Stripe App. Ele declara a identidade do app, as permissões, as views da interface, as políticas de segurança e o comportamento após a instalação.

Exemplo completo de manifesto

{
"id": "com.tajo.brevo-integration",
"version": "1.2.0",
"name": "Tajo for Brevo",
"icon": "./assets/icon.png",
"distribution_type": "public",
"sandbox_install_compatible": true,
"stripe_api_access_type": "oauth",
"allowed_redirect_uris": [
"https://tajo.io/stripe/callback",
"https://tajo.io/stripe/oauth/complete"
],
"permissions": [
{
"permission": "customer_read",
"purpose": "Read customer profiles to sync with Brevo contacts"
},
{
"permission": "customer_write",
"purpose": "Update customer metadata with Brevo sync status"
},
{
"permission": "charge_read",
"purpose": "Access payment history for Brevo event tracking"
},
{
"permission": "product_read",
"purpose": "Sync product catalog to Brevo for personalized campaigns"
},
{
"permission": "event_read",
"purpose": "Subscribe to real-time events for Brevo automation triggers"
},
{
"permission": "invoice_read",
"purpose": "Track invoice lifecycle events in Brevo"
}
],
"ui_extension": {
"views": [
{
"viewport": "stripe.dashboard.customer.detail",
"component": "CustomerDetailView"
},
{
"viewport": "stripe.dashboard.customer.list",
"component": "CustomerListView"
},
{
"viewport": "stripe.dashboard.home.overview",
"component": "OverviewView"
},
{
"viewport": "stripe.dashboard.drawer.default",
"component": "DrawerView"
},
{
"viewport": "stripe.dashboard.settings",
"component": "SettingsView"
},
{
"viewport": "stripe.dashboard.onboarding",
"component": "OnboardingView"
}
],
"content_security_policy": {
"connect-src": [
"https://api.tajo.io",
"https://api.brevo.com"
],
"image-src": [
"https://cdn.tajo.io",
"https://assets.brevo.com"
],
"purpose": "Connect to Tajo API for data sync and Brevo API for contact management"
}
},
"post_install_action": {
"type": "onboarding"
},
"constants": {
"API_BASE_URL": "https://api.tajo.io/v1",
"SYNC_INTERVAL_SECONDS": "300"
}
}

Referência do schema

Campos de nível superior

CampoTipoObrigatórioDescrição
idstringSimIdentificador único do app em notação de domínio invertido (formato slug)
versionstringSimString de versão semântica (por exemplo, "1.2.0")
namestringSimNome de exibição mostrado no marketplace (máximo de 35 caracteres)
iconstringSimCaminho relativo do arquivo de ícone do app (PNG ou SVG de 300x300)
distribution_typestringSim"public" para o marketplace ou "private" para uso interno
sandbox_install_compatiblebooleanNãoDefine se o app pode ser instalado em modo sandbox/teste
stripe_api_access_typestringNãoMétodo de acesso à API: "oauth" ou "api_key"
allowed_redirect_urisstring[]NãoURIs de redirecionamento OAuth permitidas no fluxo de instalação
permissionsPermissionRequest[]SimArray com as solicitações de permissão
ui_extensionUIExtensionManifestNãoConfiguração da extensão de interface
post_install_actionPostInstallActionNãoAção executada após a instalação do app
constantsobjectNãoPares de chave e valor acessíveis no app em tempo de execução

id

O identificador do app é uma string em formato slug, normalmente em notação de domínio invertido:

"id": "com.tajo.brevo-integration"
  • Precisa ser único globalmente entre todos os Stripe Apps
  • Use apenas letras minúsculas, números, hifens e pontos
  • Não pode ser alterado depois que o app é criado
  • Define a URL do app no marketplace

version

Segue o versionamento semântico:

"version": "1.2.0"
  • MAJOR: mudanças incompatíveis ou adição de recursos importantes
  • MINOR: novos recursos, com compatibilidade retroativa
  • PATCH: correções de bugs e melhorias pequenas
  • Precisa ser incrementado a cada upload

distribution_type

Controla quem pode instalar o seu app:

ValorDescrição
"public"Disponível no Stripe App Marketplace para todos os usuários
"private"Só pode ser instalado pela sua própria conta Stripe

stripe_api_access_type

Determina como o seu app se autentica na API da Stripe:

ValorDescrição
"oauth"Usa o fluxo OAuth 2.0 para autenticação (recomendado para apps públicos)
"api_key"Usa chaves de API restritas (indicado para apps privados)

PermissionRequest

Cada solicitação de permissão declara uma permissão específica da API da Stripe que o seu app precisa:

{
"permission": "customer_read",
"purpose": "Read customer profiles to sync with Brevo contacts"
}
CampoTipoObrigatórioDescrição
permissionstringSimO identificador da permissão (veja a Referência de permissões)
purposestringSimExplicação legível de por que essa permissão é necessária

Diretrizes para o purpose:

  • Escreva explicações claras e específicas que os lojistas consigam entender
  • Explique para que a permissão é usada, não apenas o que ela concede
  • Mantenha as descrições curtas (uma frase)
  • Evite jargão técnico

UIExtensionManifest

Configura os componentes de interface do seu app:

{
"ui_extension": {
"views": [...],
"content_security_policy": {...}
}
}
CampoTipoObrigatórioDescrição
viewsViewManifest[]SimArray com as declarações de view
content_security_policyCSPRequestNãoContent Security Policy para recursos externos

ViewManifest

Cada view associa um componente React a um viewport do Stripe Dashboard:

{
"viewport": "stripe.dashboard.customer.detail",
"component": "CustomerDetailView"
}
CampoTipoObrigatórioDescrição
viewportstringSimO local do Dashboard onde essa view é renderizada (veja a Referência de viewports)
componentstringSimNome do componente React a ser renderizado (precisa coincidir com o nome do componente exportado)

Um único app pode declarar várias views para viewports diferentes:

"views": [
{
"viewport": "stripe.dashboard.customer.detail",
"component": "CustomerDetailView"
},
{
"viewport": "stripe.dashboard.payment.detail",
"component": "PaymentDetailView"
},
{
"viewport": "stripe.dashboard.home.overview",
"component": "OverviewView"
}
]

CSPRequest

A Content Security Policy controla a quais domínios externos o seu app pode se conectar:

{
"content_security_policy": {
"connect-src": [
"https://api.tajo.io",
"https://api.brevo.com"
],
"image-src": [
"https://cdn.tajo.io"
],
"purpose": "Connect to Tajo API for data sync and load images from CDN"
}
}
CampoTipoObrigatórioDescrição
connect-srcstring[]NãoDomínios para os quais o app pode fazer requisições de rede
image-srcstring[]NãoDomínios de onde o app pode carregar imagens
purposestringSimExplicação de por que essas conexões externas são necessárias

Caution

Inclua apenas os domínios aos quais o seu app realmente precisa se conectar. Entradas demais na CSP podem gerar uma análise mais rigorosa.

PostInstallAction

Configura o que acontece logo depois que um usuário instala o seu app:

{
"post_install_action": {
"type": "onboarding"
}
}
CampoTipoObrigatórioDescrição
typestringSimO tipo de ação (veja abaixo)
urlstringCondicionalURL para ações do tipo external

Tipos de ação

TipoComportamento
"onboarding"Abre a view de onboarding do app no Dashboard
"settings"Abre a view de configurações do app no Dashboard
"external"Redireciona o usuário para uma URL externa (exige o campo url)

Exemplos:

// Open onboarding flow
{
"post_install_action": {
"type": "onboarding"
}
}
// Open settings page
{
"post_install_action": {
"type": "settings"
}
}
// Redirect to external setup
{
"post_install_action": {
"type": "external",
"url": "https://app.tajo.io/stripe/setup"
}
}

Veja o guia de ações pós-instalação para conhecer os padrões de implementação em detalhe.

Constants

Defina pares estáticos de chave e valor acessíveis em tempo de execução no seu app:

{
"constants": {
"API_BASE_URL": "https://api.tajo.io/v1",
"SYNC_INTERVAL_SECONDS": "300",
"MAX_BATCH_SIZE": "100"
}
}
  • Todos os valores precisam ser strings
  • As constantes são embutidas no app no momento do build
  • Use constantes para configurações que mudam entre ambientes
  • Nunca guarde segredos ou chaves de API como constantes, use a Secret Store API no lugar

Acesse as constantes no código do seu app:

import { constants } from '@stripe/ui-extension-sdk/constants';
const apiUrl = constants.API_BASE_URL;

Manifesto estendido para desenvolvimento

Durante o desenvolvimento local, há campos adicionais disponíveis:

{
"id": "com.tajo.brevo-integration",
"version": "0.1.0",
"name": "Tajo for Brevo (Dev)",
"icon": "./assets/icon-dev.png",
"distribution_type": "private",
"sandbox_install_compatible": true,
"dev": {
"hot_reload": true,
"port": 4242
}
}

A seção dev é removida nos builds de produção e nos uploads do app. Use-a apenas para configurações que facilitam o desenvolvimento local.

Validação

Valide o seu manifesto antes de fazer o upload:

Terminal window
# Validate manifest syntax and schema
stripe apps validate
# Check for common issues
stripe apps check

Erros de validação comuns:

ErroCausaCorreção
Invalid permissionIdentificador de permissão desconhecidoConsulte a Referência de permissões
Invalid viewportIdentificador de viewport desconhecidoConsulte a Referência de viewports
Missing purposePermissão sem o campo purposeAdicione uma string de purpose a cada permissão
Invalid versionString de versão fora do padrão semverUse o formato MAJOR.MINOR.PATCH
Icon not foundO caminho do ícone não é resolvidoConfirme se o arquivo de ícone existe no caminho indicado

Solicite acesso antecipado

Informe seu nome e um e-mail ou número de telefone. Entraremos em contato com os detalhes de acesso à Tajo.

detecção automática
Assistente AI

Olá! Pergunte-me qualquer coisa sobre a documentação.