# Registrar receita

Registre pagamentos confirmados dos seus clientes, com valores e vínculos determinísticos.

## Antes de registrar

A receita dos seus clientes é diferente da cobrança do seu plano Pulsant. Use integrations:write e envie somente um pagamento confirmado pelo provedor.


> Valores monetários: amountMinor e feeMinor são strings de inteiros em unidades mínimas. BRL usa centavos: 12480 representa R$ 124,80. Não use ponto flutuante para dinheiro.



## Enviar um pagamento confirmado

Use IDs estáveis do pedido e do pagamento para retries e notificações repetidas. O SDK local e o exemplo HTTP abaixo chamam a mesma rota.


### HTTP / fetch



```ts
const siteId = process.env.PULSANT_SITE_ID!;
const payment = {
  externalId: 'pedido_123456',
  logicalId: 'pedido_123456',
  amountMinor: '12480',
  currency: 'BRL',
  occurredAt: new Date().toISOString(),
  status: 'paid',
  // feeMinor: '85', // apenas quando confirmada pelo provedor
};

const response = await fetch(
  `https://api.pulsant.app/v1/account/sites/${siteId}/payments`,
  {
    method: 'POST',
    headers: {
      Authorization: `Bearer ${process.env.PULSANT_SECRET_KEY}`,
      'Content-Type': 'application/json',
    },
    body: JSON.stringify(payment),
  },
);
if (!response.ok) throw new Error(`Pagamento recusado: ${response.status}`);
```


### SDK Node.js



```ts
import { Pulsant } from '@pulsant/sdk';

const pulsant = new Pulsant({
  baseUrl: 'https://api.pulsant.app',
  key: process.env.PULSANT_SECRET_KEY!,
  siteId: process.env.PULSANT_SITE_ID!,
});

await pulsant.revenue({
  externalId: 'pedido_123456',
  logicalId: 'pedido_123456',
  amountMinor: '12480',
  currency: 'BRL',
  occurredAt: new Date().toISOString(),
  status: 'paid',
});
```

> SDK local: O SDK está disponível no monorepo. Para integrar um projeto externo, use o exemplo HTTP.



## Vincular aquisição

Use attributionId retornado pelo tracker ou o ID externo opaco associado por identify. Sem um vínculo determinístico elegível, o pagamento permanece sem atribuição; IP ou coincidência de horário não substituem essa ligação.


- [Conexões e atribuição](/connections)
- [Assinaturas, MRR e LTV](/subscriptions)

## Ajustes e taxas

feeMinor é opcional; omitir mantém a taxa desconhecida. Use a rota de ajustes para estornos e chargebacks, sem registrar o mesmo pagamento como nova receita. Confira o schema vigente no OpenAPI.


- [Abrir OpenAPI](https://api.pulsant.app/openapi)
- [SDK Node.js](/server)