Criar um aplicativo
Esta página percorre a criação de um aplicativo do início ao fim — cadastro, credenciais, permissões, teste e publicação — primeiro pelas telas do Console e depois pela CLI iugu. As duas rotas produzem o mesmo resultado; escolha a que combina com o seu fluxo de trabalho.
Info
Para criar aplicativos é preciso ter a permissão console:workspace.apps.add na área de trabalho publicadora (o papel Administrador a tem). Cada aba do Gerenciador de Aplicativos tem a sua própria permissão de edição — veja a lista de ações do Console em Políticas.
Pelo Console
1. Cadastrar o aplicativo
- Acesse Desenvolvimento na área de trabalho que vai publicar o app.
- Clique em e informe o Nome.
- Salve: o aplicativo entra na lista.
O app nasce privado, na categoria Rascunho, e aparece na lista de Desenvolvimento. O Console deriva do nome o slug (usado na Loja de Apps) e a tag — o prefixo de todas as ações que o app implementar, no formato <tag>:<ação>.
Warning
A tag não pode ser alterada depois da criação. Escolha o nome pensando no prefixo que as outras áreas de trabalho verão nas permissões (por exemplo, acme-invoices:invoice.create).
2. URL, callbacks e credenciais
Na aba Credenciais:
- Preencha a URL do aplicativo (a página inicial para os usuários) e os Callbacks — as URLs de retorno do fluxo OAuth (
redirect_uri). Só callbacks cadastrados são aceitos em/authorize. - Clique em para criar o primeiro par
client_id/client_secret.
Danger
O segredo é exibido uma única vez, no momento da criação. Guarde-o no cofre de segredos do seu ambiente; se ele se perder, revogue a chave e crie outra.
Pela CLI ou pela Lifecycle API uma chave pode nascer restrita a áreas de trabalho (iugu app credentials create --name dev --workspaces <ids>): os tokens emitidos com ela só valem nas áreas indicadas — o padrão para credenciais de desenvolvimento.
3. Permissões
Na aba Permissões:
| Campo | O que definir |
|---|---|
| Nível de integração | O nível de autenticação mais alto que o app poderá pedir aos usuários. Marque ao menos Acesso a Informações; marque Gerenciamento de Configurações ou Movimentação de Valores só se o app realmente pedir um segundo fator recente para algumas operações. |
| Ações Implementadas | As permissões que o seu app oferece, sem prefixo (invoice.create, invoice.read). Elas aparecem para as áreas de trabalho como <tag>:<ação> e são o que você verificará no seu backend. |
| Ações Consumidas | As permissões de outros apps que o seu app usa, com prefixo (billing:event.create). Ao instalar o app, a área de trabalho concede exatamente essa lista; mudar a lista depois exige que cada área de trabalho instalada aceite de novo. |
| Ids de áreas de trabalho autorizadas | Enquanto o app estiver privado, as áreas de trabalho listadas aqui já podem instalá-lo (compartilhamento). |
O modelo completo — como o Console decide quem pode o quê e como verificar isso no seu código — está em Permissões e ações.
4. Privilégios e URL da API de Serviço
Só é necessário se o seu app expõe ações para o Workflow, o Iugu for AI e a CLI, ou oferece widgets para o painel das áreas de trabalho. Na aba Privilégios, marque Actions Provider e informe a URL da API de Serviço — a base a partir da qual o Console lê o manifesto em GET {URL da API de Serviço}/actions. O formato do manifesto está em Expor ações.
5. Listagem, imagens, contratos e proteção
| Aba | Para quê |
|---|---|
| Listagens | Descrição, texto promocional, logo, categorias, Público e Emite cobrança. É aqui que o app é publicado. |
| Imagens | Capturas de tela exibidas na Loja de Apps (JPG/PNG, até 20 MB). |
| Contratos | Termos que as áreas de trabalho precisam aceitar para instalar; uma nova versão gera uma pendência para quem já instalou. |
| Filtro por IPs | Até 5 máscaras de IP de onde o app pode chamar a plataforma. |
| Certificados | Chaves públicas para autenticação com certificado (mTLS) e para dados protegidos. |
6. Testar na própria área de trabalho
Instale o app na área de trabalho publicadora (na tela de Desenvolvimento ou na Loja de Apps) e percorra o fluxo de login:
- Envie o usuário para
https://identity.iugu.com/authorizecomclient_id,response_type=code, umredirect_uricadastrado,code_challenge(PKCE S256) e, se precisar de um nível acima do padrão,acr_values=urn:iugu:grant_scopes:<nível>. - Troque o
codeemPOST https://identity.iugu.com/token(grant_type=authorization_code, autenticando o app com HTTP Basic ou comclient_id/client_secretno corpo). - Leia quem entrou em
GET https://identity.iugu.com/userinfoe verifique o que a pessoa pode fazer comPOST https://identity.iugu.com/verify— detalhes em Permissões e ações.
A referência dos endpoints está na seção API desta documentação: /authorize, /token, /userinfo e /verify.
7. Publicar na Loja de Apps
Na aba Listagens, marque Público, retire a categoria Rascunho e clique em . O app aparece na Loja de Apps quando todas as condições abaixo valem:
| Condição | Onde resolver |
|---|---|
| Marcado como Público | Listagens |
| Fora da categoria Rascunho | Listagens |
| URL preenchida | Credenciais |
| Área de trabalho publicadora ativa e app não bloqueado | — |
As pendências que o Console mostra na tela de Pendências da área de trabalho não bloqueiam o app, mas indicam o que falta:
- Aplicativos sem URL não serão visíveis na App-Store — preencha a URL na aba Credenciais.
- Nível de integração mínimo deve ser ‘acesso a informações’ — marque ao menos um nível na aba Permissões.
- Aplicativos com cobrança devem ter um plano configurado e publicado — veja Cobrança.
Pela CLI
A CLI iugu faz o mesmo percurso em poucos comandos, com saída --json para uso por agentes. As mudanças sensíveis (a primeira credencial, a publicação) não são executadas na hora: a CLI devolve o código de saída 5 e uma approval.url que uma pessoa abre no navegador para aprovar com um segundo fator.
iugu login # login no navegador + consentimento (escopos × áreas de trabalho)
iugu me # quem sou eu e quais áreas de trabalho foram consentidas
iugu app init --name "Acme Invoices" --workspace <id da área de trabalho de desenvolvimento>
# → cria o app (privado, rascunho), instala na área de trabalho, pede uma credencial
# restrita a ela (uma aprovação humana: saída 5 com approval.url) e escreve iugu.toml
iugu changeset wait <id> --write-env .env.local # espera a aprovação; o segredo vai para .env.local (0600)
iugu app permissions set --implemented invoice.create,invoice.read --consumed billing:event.create --grant-scopes informations
iugu test-principal create --name qa # principal temporário com papéis ⊆ os seus, válido por 1 h
iugu verify --principal temp:… --action acme-invoices:invoice.create
iugu app env --format fly # variáveis de ambiente não secretas para o seu alvo de deploy
iugu changeset create \
--op 'oauth.update:{"url":"https://acme.example","callbacks":["https://acme.example/oauth/callback"]}' \
--op 'listing.publish:{"public":true,"draft":false}' --submit --wait
Info
O arquivo iugu.toml, criado na pasta do projeto por iugu app init, guarda o id do app, a área de trabalho de desenvolvimento e a credencial em uso. Os comandos seguintes o leem automaticamente, então não é preciso repetir --app nem --workspace.
Um agente de código faz exatamente esses passos sozinho: o roteiro embutido na CLI (iugu docs) explica a ele o que precisa de uma pessoa, como esperar a aprovação e como tratar segredos sem os expor. Veja Agentes e aprovações.