# Instruções

Deverá ser um endpoint com método POST.

* Será enviado um token JWT com criptografia HS256, assinado com o `clientSecret`  fornecido ao parceiro.
* O token terá duração de 1h (apenas para referência).

Payload JWT

```typescript
{
    businessId: businessId // identificador único básico do seu negócio.
}
```

## Requisição

<mark style="color:green;">`POST`</mark> `/seuEndPoint`

**Headers**

| Name          | Value              | Description |
| ------------- | ------------------ | ----------- |
| Content-Type  | `application/json` |             |
| Authorization | `Bearer <token>`   | JWT         |

**Body**

```json
{
  "ids": {
    "businessId": "string",
    "transactionId": "string",
    "partnerTransactionId": "string",
    "afterPaymentId": "string",
    "endToEndId": "string",
    "brCode": "string",
    "gatewayId": "string",
    "hashWeb3": "string"
  },
  "transactionPayload": {
    "userId": "string",
    "userCpf": "string",
    "userPixKey": "string",
    "userWalletAddress": "string",
    "productName": "string",
    "quantity": number,
    "unitPrice": number,
    "usdtAmount": number,
    "reaisAmount": number
  },
  "transactionType": "PIX_PURCHASE",
  "transactionStatus": "COMPLETED",
  "transactionErrorType": "NONE",
  "transactionErrorMessage": "NONE"
}

```

Descrição dos campos

<details>

<summary><strong>Identificadores da transação (ids) :</strong></summary>

Sobre os campos com observação: &#x20;

<sub>Caso os campos marcoados no checkBox abaixo sejam enviados com o sufixo "-NOT-UPDATED", significa que a transação deu erro OU que o fluxo da transação não atualiza o ID, caso seja um erro virá acompanhado do</sub> <sub></sub><sub>`transactionStatus`</sub>  <sub></sub><sub>e</sub> <sub></sub><sub>`transactionErrorMessage`</sub>  <sub></sub><sub>relacionado.</sub>&#x20;

<table><thead><tr><th width="192.57147216796875" align="center">Name</th><th width="332.9993896484375" align="center">Descriptiton</th><th width="124.28570556640625" data-type="checkbox">Observação</th></tr></thead><tbody><tr><td align="center"><code>businessId</code></td><td align="center">identificador único básico do seu negócio.</td><td>false</td></tr><tr><td align="center"><code>transactionId</code></td><td align="center">identificador único da transação, fornecido pela nossa API.</td><td>false</td></tr><tr><td align="center"><code>partnerTransactionId</code></td><td align="center">identificador único da transação, fornecido pela API do parceiro.</td><td>false</td></tr><tr><td align="center"><code>afterPaymentId</code></td><td align="center">Identificador único da transação para conciliação e estornos.</td><td>true</td></tr><tr><td align="center"><code>endToEndId</code></td><td align="center">Identificador único da transação para conciliação e identificação de um pagamento PIX.</td><td>true</td></tr><tr><td align="center"><code>brCode</code></td><td align="center">Identificador único do <a href="../partners/ordem-de-saque">qr code </a>para conciliação com o que já foi enviado anteriormente, vale lembrar que esse é o PIX copia e cola.</td><td>true</td></tr><tr><td align="center"><code>gatewayId</code></td><td align="center">Identificador único de conciliação tripla, também recebido após o pagamento do <a href="../partners/ordem-de-saque">qr code</a>, único.</td><td>true</td></tr><tr><td align="center"><code>hashWeb3</code></td><td align="center">Identificador único de transação no blockchain.</td><td>true</td></tr></tbody></table>

</details>

<details>

<summary>Dados da transação (transactionPayload):</summary>

Sobre os campos com observação: &#x20;

<sub>Os campos marcado com observação podem ser</sub> <sub></sub><sub>`undefined`</sub>  <sub></sub><sub>por não fazer parte do fluxo da transação.</sub>

<table><thead><tr><th width="192.57147216796875" align="center">Name</th><th width="332.9993896484375" align="center">Descriptiton</th><th width="124.28570556640625" data-type="checkbox">Observação</th></tr></thead><tbody><tr><td align="center"><code>userId</code></td><td align="center">identificador único fornecido pelo parceiro para identificar de usuário pagador da transação e conciliar com a base de dados do parceiro.</td><td>false</td></tr><tr><td align="center"><code>userCpf</code></td><td align="center">cpf do pagador da transação para identificação de pagamento que foi enviado pelo parceiro. </td><td>false</td></tr><tr><td align="center"><code>userPixKey</code></td><td align="center">identificador único da transação, fornecido pela API do parceiro.</td><td>true</td></tr><tr><td align="center"><code>userWalletAddress</code></td><td align="center">Endereço BEP20 da carteira de recebimento do usuário nas transações que envolvem cripto.</td><td>true</td></tr><tr><td align="center"><code>productName</code></td><td align="center">Nome do produto ou serviço.</td><td>false</td></tr><tr><td align="center"><code>quantity</code></td><td align="center">Quantidade do produto ou serviço.</td><td>false</td></tr><tr><td align="center"><code>unitPrice</code></td><td align="center">Preço unitário do produto ou serviço.</td><td>false</td></tr><tr><td align="center"><code>usdtAmount</code></td><td align="center">Montante em dólares (UDST)</td><td>false</td></tr><tr><td align="center"><code>reaisAmount</code></td><td align="center">Montante em reais (R$)</td><td>false</td></tr></tbody></table>

</details>

<table><thead><tr><th width="238.28570556640625" align="center">Name</th><th width="490.7138671875" align="center">Descriptiton</th></tr></thead><tbody><tr><td align="center"><code>transactionType</code></td><td align="center">Tipo da transação.</td></tr><tr><td align="center"><code>transactionStatus</code></td><td align="center">Status da transação</td></tr><tr><td align="center"><code>transactionErrorType</code></td><td align="center">Tipo do erro da transação.</td></tr><tr><td align="center"><code>transactionErrorMessage</code></td><td align="center">Mensagem de erro da transação.</td></tr></tbody></table>

Claro, aqui está uma descrição breve para cada uma das tipagens, que você pode colocar antes da tabela no seu documento ou documentação:

***

#### Detalhes dos status de transação.

Abaixo estão os tipos utilizados para definir o status, tipo e possíveis erros relacionados a uma transação. Eles são essenciais para o controle e entendimento do fluxo de uma operação dentro do sistema.

`transactionType`

Define o **tipo da transação**. Pode ser:

* `PIX_PURCHASE`: Ordem de compra via Pix.
* `CRYPTO_PURCHASE`: Compra via cripto.
* `PIX_WITHDRAW`: Ordem de saque via Pix.
* `CRYPTO_WITHDRAW`: Saque via cripto.

`transactionStatus`

Define o **status atual da transação**. Os valores possíveis são:

* `CREATED`: Transação criada.
* `WAITING_PAYMENT`: Aguardando pagamento.
* `PAID`: Pagamento confirmado.
* `PROCESSING`: Transação em processamento.
* `RETRYING`: Tentando novamente após falha.
* `COMPLETED`: Transação concluída com sucesso.
* `REFUNDED`: Valor reembolsado.
* `ERROR`: Transação com erro.

`transactionErrorType`

Define o **tipo do erro ocorrido**, caso exista. Os valores possíveis são:

* `NONE`: Sem erro.
* `DIVERGENT_PAYER`: Pagador divergente.
* `DIVERGENT_RECEIVER`: Recebedor divergente.
* `BLOCKCHAIN_ERROR`: Erro relacionado à blockchain.
* `TRANSACTION_NOT_FOUND`: Transação não encontrada.
* `REFUNDED_BY_ERROR`: Reembolso causado por erro.
* `MISSING_REFUND_USER`: Falha no reembolso após um erro.

`transactionErrorMessage`

Define a **mensagem descritiva do erro**, oferecendo mais contexto. Pode conter:

* `NONE`: Nenhuma mensagem de erro.
* `Divergent payer`: O pagador é diferente do esperado.
* `Divergent receiver`: O recebedor é diferente do esperado.
* `Blockchain error`: Erro na execução da transação na blockchain.
* `Transaction not found`: Transação não localizada.
* `Max attempts reached`: Número máximo de tentativas excedido.
* `Refunded by error`: Reembolsada por conta de erro.
* `Missing refund user`: Falh no reembolso após um erro ou divergência.
