Do zero à fatura paga: qual caminho escolher, o que guardar, e o que fazer no clique duplo.
Antes da primeira venda: hoje a venda é no Brasil (você e o comprador no
Brasil), por Pix ou cartão à vista, os dois em ambiente de teste. A cobrança cai
na sua conta de recebimento no provedor de pagamento. Venda internacional, com a
Infi UK Ltd como vendedora oficial, está em breve. Veja
colocar em produção.
Venda pontual, cobrança por WhatsApp, primeira venda antes de existir app
Fatura + charge
o botão “Comprar” e a página de retorno
Você tem app e quer o comprador dentro do seu fluxo, sem montar tela de pagamento
Os dois terminam no mesmo lugar: o comprador paga na página de checkout da
Infi (/pay/...), que mostra o QR do Pix ou o formulário de cartão. Os dois
terminam na mesma fatura e no mesmo webhook. A diferença é quanto da
experiência é sua.
Na dúvida, comece pelo link. É o único que não exige nada do seu app. Você troca depois: o produto e o
catálogo são os mesmos.
Assumindo que você já tem um produto publicado (veja
catálogo), uma chave e a conta pronta para receber:
# 1. cria a fatura do seu clienteINV=$(curl -s -X POST $API/billing/products/$PID/invoices \ -H "Authorization: Bearer $K" -H 'Content-Type: application/json' -H "$(IDEM)" \ -d '{"customer":{"externalId":"u1","email":"u1@x.com","taxId":"52998224725"}}' | jq -r .id)# 2. GUARDE ISSO. É o passo que ninguém documenta e todo mundo esquece.# (no seu banco: invoiceId -> seu usuário, status "aberta")
Você precisa mapear invoiceId → seu usuário. Nós não sabemos quem é o seu usuário: você passa um externalId e nós
devolvemos um invoiceId. Quando o pagamento confirmar, o webhook traz o
invoiceId, não o seu usuário. Se você não guardou o par, recebeu dinheiro e
não sabe de quem.É a decisão de arquitetura mais importante desta página e ela cabe em uma linha
de tabela no seu banco.
Todo método que não é GETna API autenticada exige Idempotency-Key (as
rotas públicas de /pay/*, que o navegador do comprador chama, não exigem). É o
que impede que dois cliques virem duas faturas.
# a MESMA chave para a MESMA intenção de compraKEY="pedido-$USER_ID-$PID-$(date +%F)"curl -s -X POST $API/billing/products/$PID/invoices \ -H "Authorization: Bearer $K" -H 'Content-Type: application/json' \ -H "Idempotency-Key: $KEY" -d '{"customer":{"externalId":"u1","email":"u1@x.com","taxId":"52998224725"}}'
Mesma chave, mesmo corpo → você recebe a resposta original de volta. Uma
fatura só.
Mesma chave, corpo diferente → 409 idempotency_key_reused. É proteção:
quer dizer que você reusou a chave pra outra coisa.
Sem chave → 400 idempotency_key_required.
Gerar uma chave nova a cada chamada protege contra retry de rede, não contra
clique duplo. Para o clique duplo, a chave tem que vir de algo estável na sua
intenção, como no exemplo acima.
O mais simples é não deixar clicar duas vezes. Desabilite o botão no primeiro clique e trate a Idempotency-Key como a rede de
segurança, não como a primeira linha de defesa.
Seu tenant nasce com um nome de placeholder. Se você não trocar, o checkout e o
link de pagamento dizem literalmente “New app”, e ninguém compra de uma loja
chamada New app.
await infi.account.update({ name: "Cafeteria Orvalho" });// opcional, citado no mandato de pagamento:await infi.account.update({ termsUrl: "https://cafeteriaorvalho.com/termos" });
Vale em seguida, sem republicar produto e sem gerar link novo: o mesmo link passa a
mostrar o nome novo. infi.account.get() lê de volta. (A partir do
@beinfi/sdk@0.10.7; antes disso é PATCH /account/tenant.)
Se o que você vende é um arquivo ou um acesso, não monte isso à mão: anexe o
entregável ao produto e a Infi manda o link pessoal pro comprador quando o
pagamento confirma, e te devolve o mesmo link pra você mostrar na sua página de
obrigado. Está em
entregar o produto.O lado do comprador (descobrir que pagou, entregar, e os dois polling que ninguém
adivinha) está em a página de obrigado.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Infi","colors":{"primary":"#0A1430","light":"#E2B13C","dark":"#0A1430"},"logo":{"light":"https://mintcdn.com/beinfi/owBheEE6vXSyqXTj/logo/logo.svg?fit=max\u0026auto=format\u0026n=owBheEE6vXSyqXTj\u0026q=85\u0026s=b1b9ce09a8814e42032ef2bf2c08fb54","dark":"https://mintcdn.com/beinfi/owBheEE6vXSyqXTj/logo/logo.svg?fit=max\u0026auto=format\u0026n=owBheEE6vXSyqXTj\u0026q=85\u0026s=b1b9ce09a8814e42032ef2bf2c08fb54","href":"https://beinfi.com"},"favicon":"https://mintcdn.com/beinfi/owBheEE6vXSyqXTj/favicon.svg?fit=max\u0026auto=format\u0026n=owBheEE6vXSyqXTj\u0026q=85\u0026s=cbb3280c14965b007e9662521134e88c","api":{"playground":{"display":"interactive"}},"navbar":{"links":[{"href":"https://app-sandbox.beinfi.com","label":"Sandbox"}],"primary":{"type":"button","label":"Começar","href":"https://app.beinfi.com"}},"footer":{"socials":{"website":"https://beinfi.com"}},"styling":{"latex":true},"navigation":{"languages":[{"language":"pt-BR","default":true,"href":"introducao"},{"language":"en","href":"en/introducao"}]}},"deployment":{"deploymentMetadataValue":{"subdomain":"beinfi","hasAudioNarration":false,"actualSubdomain":"beinfi","customDomains":["docs.beinfi.com"],"gitSource":{"type":"github","owner":"be-infinitum","repo":"infi","deployBranch":"main","contentDirectory":"infi-docs","isPrivate":true,"mountPath":"","label":"","_id":"6adfafa06d56e5c194b62908"},"entitlements":{"AI_CHAT":{"status":"DISABLED"},"WEB_MCP":{"status":"DISABLED"},"NARRATION":{"status":"DISABLED"}},"buildId":"6ae91a58c27bfbde36d8601a","clientVersion":"0.0.4094","searchFilterCounts":[{"language":"pt-BR","tag":"Referência da API","count":72},{"language":"en","tag":"API reference","count":72},{"language":"pt-BR","tag":"Catálogo","count":21},{"language":"en","tag":"Catalog","count":21},{"language":"pt-BR","tag":"Guias","count":17},{"language":"en","tag":"Guides","count":17},{"language":"pt-BR","tag":"Começar","count":13},{"language":"en","tag":"Get started","count":13},{"language":"pt-BR","tag":"Clientes","count":8},{"language":"pt-BR","tag":"Faturas","count":8},{"language":"en","tag":"Customers","count":8},{"language":"en","tag":"Invoices","count":8},{"language":"pt-BR","tag":"Webhooks","count":7},{"language":"en","tag":"Webhooks","count":7},{"language":"pt-BR","tag":"Conta","count":5},{"language":"pt-BR","tag":"Cupons","count":5},{"language":"pt-BR","tag":"Pagamentos","count":5},{"language":"en","tag":"Account","count":5},{"language":"en","tag":"Coupons","count":5},{"language":"en","tag":"Payments","count":5}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"comment-mode","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"primeira-venda","slug":"/primeira-venda","pageMetadata":{"title":"Sua primeira venda","description":"Do zero à fatura paga: qual caminho escolher, o que guardar, e o que fazer no clique duplo.","href":"/primeira-venda"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Do zero à fatura paga: qual caminho escolher, o que guardar, e o que fazer no clique duplo.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,em:`em`,li:`li`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,Heading,Info,Table,Tip,Warning}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Info)_missingMdxReference(`Info`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Tip)_missingMdxReference(`Tip`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`Antes da primeira venda: hoje a venda é `,_jsx(_components.strong,{children:`no Brasil`}),` (você e o comprador no\nBrasil), por Pix ou cartão à vista, os dois em ambiente de teste. A cobrança cai\nna sua conta de recebimento no provedor de pagamento. Venda internacional, com a\nInfi UK Ltd como vendedora oficial, está em breve. Veja\n`,_jsx(_components.a,{href:`/producao`,children:`colocar em produção`}),`.`]}),`\n`,_jsx(Heading,{level:`2`,id:`qual-caminho-é-o-seu`,children:`Qual caminho é o seu`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{}),_jsx(_components.th,{children:`O que você constrói`}),_jsx(_components.th,{children:`Quando usar`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Link de pagamento`})}),_jsx(_components.td,{children:`nada`}),_jsx(_components.td,{children:`Venda pontual, cobrança por WhatsApp, primeira venda antes de existir app`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsxs(_components.strong,{children:[`Fatura + `,_jsx(_components.code,{children:`charge`})]})}),_jsx(_components.td,{children:`o botão “Comprar” e a página de retorno`}),_jsx(_components.td,{children:`Você tem app e quer o comprador dentro do seu fluxo, sem montar tela de pagamento`})]})]})]}),`\n`,_jsxs(_components.p,{children:[`Os dois terminam no mesmo lugar: o comprador `,_jsx(_components.strong,{children:`paga na página de checkout da\nInfi`}),` (`,_jsx(_components.code,{children:`/pay/...`}),`), que mostra o QR do Pix ou o formulário de cartão. Os dois\nterminam na mesma fatura e no mesmo webhook. A diferença é `,_jsx(_components.strong,{children:`quanto da\nexperiência é sua`}),`.`]}),`\n`,_jsx(Info,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Na dúvida, comece pelo link.`}),` É o único que não exige nada do seu app. Você troca depois: o produto e o\ncatálogo são os mesmos.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`o-caminho-do-meio-ponta-a-ponta`,children:`O caminho do meio, ponta a ponta`}),`\n`,_jsxs(_components.p,{children:[`Assumindo que você já tem um produto `,_jsx(_components.strong,{children:`publicado`}),` (veja\n`,_jsx(_components.a,{href:`/catalogo`,children:`catálogo`}),`), uma chave e a conta pronta para receber:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`7`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`7`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# 1. cria a fatura do seu cliente`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`INV`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`$(`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`curl`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -s`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -X`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` POST`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` $API`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`/billing/products/`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$PID`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`/invoices`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -H`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"Authorization: Bearer `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$K`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -H`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 'Content-Type: application/json'`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -H`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"$(`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`IDEM`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`)\"`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -d`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` '{\"customer\":{\"externalId\":\"u1\",\"email\":\"u1@x.com\",\"taxId\":\"52998224725\"}}'`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` |`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:` jq`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -r`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` .id`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# 2. GUARDE ISSO. É o passo que ninguém documenta e todo mundo esquece.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# (no seu banco: invoiceId -> seu usuário, status \"aberta\")`})}),`\n`]})})}),`\n`,_jsxs(Warning,{children:[_jsxs(_components.p,{children:[_jsxs(_components.strong,{children:[`Você precisa mapear `,_jsx(_components.code,{children:`invoiceId`}),` → seu usuário.`]}),` Nós não sabemos quem é o seu usuário: você passa um `,_jsx(_components.code,{children:`externalId`}),` e nós\ndevolvemos um `,_jsx(_components.code,{children:`invoiceId`}),`. Quando o pagamento confirmar, o webhook traz o\n`,_jsx(_components.code,{children:`invoiceId`}),`, `,_jsx(_components.strong,{children:`não o seu usuário`}),`. Se você não guardou o par, recebeu dinheiro e\nnão sabe de quem.`]}),_jsx(_components.p,{children:`É a decisão de arquitetura mais importante desta página e ela cabe em uma linha\nde tabela no seu banco.`})]}),`\n`,_jsxs(Heading,{level:`2`,id:`cobrar-a-resposta-do-charge`,children:[`Cobrar: a resposta do `,_jsx(_components.code,{children:`charge`})]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`2`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`2`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`curl`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -s`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -X`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` POST`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` $API`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`/pay/`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$SLUG`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`/invoices/`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$INV`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`/charge`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -H`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 'Content-Type: application/json'`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -H`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"$(`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`IDEM`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`)\"`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -d`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` '{\"method\":\"pix\"}'`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`A resposta traz o que o comprador precisa para concluir, como o QR Code do Pix,\ne o fluxo fica na página de checkout da Infi. O `,_jsx(_components.code,{children:`status`}),` volta `,_jsx(_components.code,{children:`pending`}),`.`]}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Não confie na volta do comprador.`}),` Ele pode voltar sem ter pago, ou nem voltar. Quem confirma é o webhook; a query string\ndo retorno nunca prova nada.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`saber-que-pagou`,children:`Saber que pagou`}),`\n`,_jsxs(_components.p,{children:[`Não confie no retorno do `,_jsx(_components.code,{children:`charge`}),`: ele volta `,_jsx(_components.code,{children:`pending`}),`. Pagamento é assíncrono, e\na confirmação chega por webhook (`,_jsx(_components.code,{children:`payment.confirmed`}),`, `,_jsx(_components.code,{children:`invoice.paid`}),`).`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`2`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`2`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# sandbox: polling, porque registrar webhook responde 503`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`curl`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -s`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` $API`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`/pay/`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$SLUG`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`/invoices/`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$INV`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` |`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:` jq`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` .invoice.status`}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` # \"open\" | \"paid\"`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`Quando confirmar, use o `,_jsx(_components.code,{children:`invoiceId`}),` do evento pra achar o pedido que você guardou\nno passo 2. Detalhes em `,_jsx(_components.a,{href:`/webhooks`,children:`webhooks`}),`.`]}),`\n`,_jsx(Heading,{level:`2`,id:`o-comprador-clicou-duas-vezes-em-“comprar”`,children:`O comprador clicou duas vezes em “Comprar”`}),`\n`,_jsxs(_components.p,{children:[`Todo método que não é `,_jsx(_components.code,{children:`GET`}),` `,_jsx(_components.strong,{children:`na API autenticada`}),` exige `,_jsx(_components.code,{children:`Idempotency-Key`}),` (as\nrotas públicas de `,_jsx(_components.code,{children:`/pay/*`}),`, que o navegador do comprador chama, não exigem). É o\nque impede que dois cliques virem duas faturas.`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`6`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`6`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# a MESMA chave para a MESMA intenção de compra`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`KEY`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"pedido-`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$USER_ID`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`-`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$PID`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`-$(`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`date`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` +%F)\"`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`curl`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -s`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -X`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` POST`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` $API`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`/billing/products/`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$PID`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`/invoices`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -H`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"Authorization: Bearer `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$K`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -H`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 'Content-Type: application/json'`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -H`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"Idempotency-Key: `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$KEY`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -d`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` '{\"customer\":{\"externalId\":\"u1\",\"email\":\"u1@x.com\",\"taxId\":\"52998224725\"}}'`})]}),`\n`]})})}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Mesma chave, mesmo corpo`}),` → você recebe a resposta original de volta. Uma\nfatura só.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Mesma chave, corpo diferente`}),` → `,_jsx(_components.code,{children:`409 idempotency_key_reused`}),`. É proteção:\nquer dizer que você reusou a chave pra outra coisa.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Sem chave`}),` → `,_jsx(_components.code,{children:`400 idempotency_key_required`}),`.`]}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`Gerar uma chave nova a cada chamada protege contra `,_jsx(_components.em,{children:`retry de rede`}),`, não contra\nclique duplo. Para o clique duplo, a chave tem que vir de algo estável na sua\nintenção, como no exemplo acima.`]}),`\n`,_jsx(Tip,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`O mais simples é não deixar clicar duas vezes.`}),` Desabilite o botão no primeiro clique e trate a `,_jsx(_components.code,{children:`Idempotency-Key`}),` como a rede de\nsegurança, não como a primeira linha de defesa.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`antes-de-vender-o-nome-que-o-comprador-vê`,children:`Antes de vender: o nome que o comprador vê`}),`\n`,_jsxs(_components.p,{children:[`Seu tenant nasce com um nome de placeholder. Se você não trocar, o checkout e o\nlink de pagamento dizem literalmente `,_jsx(_components.strong,{children:`“New app”`}),`, e ninguém compra de uma loja\nchamada New app.`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`3`,language:`typescript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`typescript`,children:_jsxs(_components.code,{language:`typescript`,numberOfLines:`3`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`await`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` infi`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`account`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`update`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`({ `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`name:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"Cafeteria Orvalho\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` });`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// opcional, citado no mandato de pagamento:`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`await`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` infi`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`account`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`update`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`({ `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`termsUrl:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"https://cafeteriaorvalho.com/termos\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` });`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`Vale em seguida, sem republicar produto e sem gerar link novo: o mesmo link passa a\nmostrar o nome novo. `,_jsx(_components.code,{children:`infi.account.get()`}),` lê de volta. (A partir do\n`,_jsx(_components.code,{children:`@beinfi/sdk@0.10.7`}),`; antes disso é `,_jsx(_components.code,{children:`PATCH /account/tenant`}),`.)`]}),`\n`,_jsx(Heading,{level:`2`,id:`vendeu-agora-entrega`,children:`Vendeu. Agora entrega`}),`\n`,_jsxs(_components.p,{children:[`Se o que você vende é um arquivo ou um acesso, não monte isso à mão: anexe o\nentregável ao produto e a Infi manda o link pessoal pro comprador quando o\npagamento confirma, e te devolve o mesmo link pra você mostrar na sua página de\nobrigado. Está em\n`,_jsx(_components.a,{href:`/entrega-do-produto`,children:`entregar o produto`}),`.`]}),`\n`,_jsxs(_components.p,{children:[`O lado do comprador (descobrir que pagou, entregar, e os dois polling que ninguém\nadivinha) está em `,_jsx(_components.a,{href:`/pagina-de-obrigado`,children:`a página de obrigado`}),`.`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Sua primeira venda","description":"Do zero à fatura paga: qual caminho escolher, o que guardar, e o que fazer no clique duplo.","href":"/primeira-venda"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Qual caminho é o seu","slug":"qual-caminho-é-o-seu","depth":2,"children":[]},{"title":"O caminho do meio, ponta a ponta","slug":"o-caminho-do-meio-ponta-a-ponta","depth":2,"children":[]},{"title":"Cobrar: a resposta do charge","slug":"cobrar-a-resposta-do-charge","depth":2,"children":[]},{"title":"Saber que pagou","slug":"saber-que-pagou","depth":2,"children":[]},{"title":"O comprador clicou duas vezes em “Comprar”","slug":"o-comprador-clicou-duas-vezes-em-“comprar”","depth":2,"children":[]},{"title":"Antes de vender: o nome que o comprador vê","slug":"antes-de-vender-o-nome-que-o-comprador-vê","depth":2,"children":[]},{"title":"Vendeu. Agora entrega","slug":"vendeu-agora-entrega","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"beinfi","siteName":"Infi","title":"Sua primeira venda - Infi","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{"pt-BR":{"href":"/primeira-venda","matchLevel":0},"en":{"href":"/en/primeira-venda","matchLevel":1}}},"lastModified":"2026-10-26T19:53:37.490Z","originalFileLocation":"primeira-venda.mdx","locale":"pt-BR"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Do zero à fatura paga: qual caminho escolher, o que guardar, e o que fazer no clique duplo.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Infi\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/beinfi/6L9ijlDVcq5aSfgL/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/beinfi/6L9ijlDVcq5aSfgL/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/beinfi/6L9ijlDVcq5aSfgL/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/beinfi/6L9ijlDVcq5aSfgL/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/beinfi/6L9ijlDVcq5aSfgL/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/beinfi/6L9ijlDVcq5aSfgL/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/beinfi/6L9ijlDVcq5aSfgL/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/beinfi/6L9ijlDVcq5aSfgL/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/beinfi/6L9ijlDVcq5aSfgL/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Sua primeira venda - Infi\">\u003cmeta data-mint-head property=\"og:description\" content=\"Do zero à fatura paga: qual caminho escolher, o que guardar, e o que fazer no clique duplo.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Infi\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.beinfi.com/primeira-venda\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://beinfi.mintlify.site/_mintlify/api/og/v2?division=Come%C3%A7ar\u0026amp;title=Sua+primeira+venda\u0026amp;description=Do+zero+%C3%A0+fatura+paga%3A+qual+caminho+escolher%2C+o+que+guardar%2C+e+o+que+fazer+no+clique+duplo.\u0026amp;theme=0f1e10ebee4743982aba108c\u0026amp;signature=6090957c03617f47c5b80567a1e8a761c45e58d7acd57105ec0a37da99d92662\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Sua primeira venda - Infi\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Do zero à fatura paga: qual caminho escolher, o que guardar, e o que fazer no clique duplo.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://beinfi.mintlify.site/_mintlify/api/og/v2?division=Come%C3%A7ar\u0026amp;title=Sua+primeira+venda\u0026amp;description=Do+zero+%C3%A0+fatura+paga%3A+qual+caminho+escolher%2C+o+que+guardar%2C+e+o+que+fazer+no+clique+duplo.\u0026amp;theme=0f1e10ebee4743982aba108c\u0026amp;signature=6090957c03617f47c5b80567a1e8a761c45e58d7acd57105ec0a37da99d92662\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/beinfi/6L9ijlDVcq5aSfgL/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Infi\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#0A1430\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.beinfi.com/primeira-venda\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/primeira-venda.md\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"pt-BR\" href=\"https://docs.beinfi.com/primeira-venda\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"en\" href=\"https://docs.beinfi.com/en/primeira-venda\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"x-default\" href=\"https://docs.beinfi.com/primeira-venda\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.beinfi.com/#organization\",\"name\":\"Infi\",\"url\":\"https://docs.beinfi.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/beinfi/owBheEE6vXSyqXTj/logo/logo.svg?fit=max\u0026auto=format\u0026n=owBheEE6vXSyqXTj\u0026q=85\u0026s=b1b9ce09a8814e42032ef2bf2c08fb54\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.beinfi.com#website\",\"name\":\"Infi\",\"url\":\"https://docs.beinfi.com\",\"publisher\":{\"@id\":\"https://docs.beinfi.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.beinfi.com/primeira-venda#webpage\",\"url\":\"https://docs.beinfi.com/primeira-venda\",\"name\":\"Sua primeira venda\",\"description\":\"Do zero à fatura paga: qual caminho escolher, o que guardar, e o que fazer no clique duplo.\",\"dateModified\":\"2026-10-26T19:53:37.490Z\",\"isPartOf\":{\"@id\":\"https://docs.beinfi.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.beinfi.com/primeira-venda#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.beinfi.com/primeira-venda#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Começar\",\"item\":\"https://docs.beinfi.com/introducao\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Sua primeira venda\",\"item\":\"https://docs.beinfi.com/primeira-venda\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.beinfi.com/primeira-venda#article\",\"headline\":\"Sua primeira venda\",\"name\":\"Sua primeira venda\",\"description\":\"Do zero à fatura paga: qual caminho escolher, o que guardar, e o que fazer no clique duplo.\",\"url\":\"https://docs.beinfi.com/primeira-venda\",\"mainEntityOfPage\":{\"@id\":\"https://docs.beinfi.com/primeira-venda#webpage\"},\"dateModified\":\"2026-10-26T19:53:37.490Z\",\"publisher\":{\"@id\":\"https://docs.beinfi.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.beinfi.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Infi\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Infi","nav":{"global":null,"languages":[{"language":"pt-BR","default":true,"tabs":[{"tab":"Guias","groups":[{"group":"Começar","pages":[{"title":"Introdução","href":"/introducao"},{"title":"Início rápido","href":"/inicio-rapido"},{"title":"Cadastro pelo agente","description":"O agente coleta os dados, prepara o ambiente e entrega a conta para você finalizar.","href":"/agent-onboarding"},{"title":"Sua primeira venda","href":"/primeira-venda"},{"title":"Catálogo","description":"Produto → versão publicada → link: a corrente que existe antes de você vender qualquer coisa.","href":"/catalogo"},{"title":"Link de pagamento","href":"/link-de-pagamento"},{"title":"Entregar o produto","href":"/entrega-do-produto"},{"title":"A página de obrigado","href":"/pagina-de-obrigado"},{"title":"Testar no sandbox","href":"/testar-no-sandbox"},{"title":"Reembolso","href":"/reembolso"},{"title":"Claim","href":"/sandbox"},{"title":"Company as code","href":"/company-as-code"},{"title":"Colocar em produção","href":"/producao"}]},{"group":"Integração","pages":[{"title":"SDK","href":"/sdk"},{"title":"Webhooks","href":"/webhooks"},{"title":"API HTTP","href":"/api-http"},{"title":"Lovable","href":"/lovable"}]}]},{"tab":"Referência da API","pages":[{"title":"Referência da API","href":"/api-reference/checkout/ler-fatura-no-checkout"}]}]},{"language":"en","pages":[{"title":"en","href":"/en/primeira-venda"}]}]},"basePath":"","title":"Sua primeira venda - Infi","buildId":"dpl_42LwxxU1kGN114H4XzwGYXa9ZDah","deploymentId":"dpl_42LwxxU1kGN114H4XzwGYXa9ZDah","dynamics":[],"chunks":[]}