# Criando uma pré-autorização

Nesta seção, você aprenderá como criar uma pré-autorização para realizar pagamentos sem interação do usuário.

## Criar um destinatário de pagamento

Primeiro, você precisa criar **Destinatários de Pagamento**. Estes serão os destinos permitidos para enviar transferências. Todos os destinatários devem pertencer ao mesmo proprietário.

```shell
curl --location 'https://api.pluggy.ai/payments/recipients' \
--header 'Content-Type: application/json' \
--header 'X-API-KEY: ••••••' \
--data '{
  "account": {
    "type": "CHECKING_ACCOUNT",
    "number": "1111111",
    "branch": "0001"
  },
  "paymentInstitutionId": "abfd2a88-bc7b-407f-9fcc-395548ee6840",
  "name": "John Doe",
  "taxNumber": "11111111111"
}'
```

Verifique a [documentação da API](/reference/payment-recipient/payment-recipient-create) para saber como usar este endpoint. Para saber o `paymentInstitutionId`, você precisa usar este [endpoint](/reference/payment-recipient/payment-recipients-institution-list).

Isso retornará a seguinte resposta:

```json
{
  "type": "BANK_ACCOUNT",
  "id": "ded2e966-bd40-4e82-b467-d32fe4b4f40e",
  "name": "John Doe",
  "taxNumber": "11111111111",
  "isDefault": false,
  "paymentInstitution": {
    "id": "abfd2a88-bc7b-407f-9fcc-395548ee6840",
    "name": "Banco XP S.A.",
    "tradeName": "BCO XP S.A.",
    "ispb": "33264668",
    "compe": "348",
    "createdAt": "2023-12-08T17:52:21.001Z",
    "updatedAt": "2023-12-08T17:52:21.001Z"
  },
  "account": {
    "type": "CHECKING_ACCOUNT",
    "number": "1111111",
    "branch": "0001"
  },
  "pixKey": null,
  "createdAt": "2024-08-01T16:32:29.276Z",
  "updatedAt": "2024-08-01T16:32:29.276Z"
}
```

## Criar a Pré-autorização de Transferência Inteligente

Agora, você está pronto para criar uma pré-autorização de transferência inteligente. Para fazer isso, você precisa realizar a seguinte solicitação:

```shell
curl --location 'https://api.pluggy.ai/smart-transfers/preauthorizations' \
--header 'Content-Type: application/json' \
--header 'X-API-KEY: ••••••' \
--data '{
  "connectorId": 612,
  "parameters": {
    "cpf": "11111111111"
  },
  "recipientIds": [
    "ded2e966-bd40-4e82-b467-d32fe4b4f40e"
  ],
  "callbackUrls": {
    "success": "https://my-success-page.com",
    "error": "https://my-error-page.com"
  },
  "configuration": {
    "transactionLimit": 100
  }
}'
```

- O `connectorId` será aquele associado à instituição da sua conta de devedor (por exemplo, se você quiser criar a pré-autorização no Nubank, você precisa enviar o id `612`).

- Você pode configurar os limites de transação enviando o campo `configuration` (veja a [seção Configurando limites de transação](#configuring-transaction-limits)).

  Para mais detalhes sobre este endpoint, consulte nossa [documentação da API](/reference/smart-transfer/smart-transfer-preauthorization-create).

> **Importante: Para contas PF, você pode configurar apenas um destinatário por autorização. Apenas contas PJ podem configurar múltiplos destinatários para a mesma autorização.**

Isso retornará a seguinte resposta:

```json
{
  "id": "7e3e1dbb-8009-4966-9254-1eaab05ad18b",
  "status": "CREATED",
  "consentUrl": "https://this-is-the-consent-url.com",
  "clientPreauthorizationId": null,
  "callbackUrls": null,
  "recipients": [
    {
      "type": "BANK_ACCOUNT",
      "id": "ded2e966-bd40-4e82-b467-d32fe4b4f40e",
      "name": "John Doe",
      "taxNumber": "11111111111",
      "isDefault": false,
      "paymentInstitution": {
        "id": "abfd2a88-bc7b-407f-9fcc-395548ee6840",
        "name": "Banco XP S.A.",
        "tradeName": "BCO XP S.A.",
        "ispb": "33264668",
        "compe": "348",
        "createdAt": "2023-12-08T17:52:21.001Z",
        "updatedAt": "2023-12-08T17:52:21.001Z"
      },
      "account": {
        "type": "CHECKING_ACCOUNT",
        "number": "1111111",
        "branch": "0001"
      },
      "pixKey": null,
      "createdAt": "2024-07-31T15:56:03.938Z",
      "updatedAt": "2024-07-31T15:56:23.123Z"
    }
  ],
  "connector": {
    "id": 612,
    "name": "Nubank",
    "primaryColor": "8a0fbe",
    "institutionUrl": "https://nuapp.nubank.com.br/open-banking/logo.svg",
    "country": "BR",
    "type": "PERSONAL_BANK",
    "credentials": [
      {
        "validation": "^\\d{3}\\.?\\d{3}\\.?\\d{3}-?\\d{2}$",
        "validationMessage": "CPF deve ter 11 numeros.",
        "label": "CPF",
        "name": "cpf",
        "type": "number",
        "placeholder": "",
        "optional": false
      }
    ],
    "imageUrl": "https://cdn.pluggy.ai/assets/connector-icons/212.svg",
    "hasMFA": false,
    "oauth": true,
    "health": {
      "status": "ONLINE",
      "stage": null
    },
    "products": [
      "ACCOUNTS",
      "TRANSACTIONS",
      "IDENTITY",
      "CREDIT_CARDS",
      "PAYMENT_DATA",
      "LOANS",
      "INVESTMENTS"
    ],
    "createdAt": "2023-09-01T18:05:09.145Z",
    "isSandbox": false,
    "isOpenFinance": true,
    "updatedAt": "2024-08-01T16:33:57.978Z",
    "supportsPaymentInitiation": true,
    "supportsScheduledPayments": true,
    "supportsSmartTransfers": true
  },
  "createdAt": "2024-08-01T16:39:27.946Z",
  "updatedAt": "2024-08-01T16:39:32.448Z"
}
```

Após a pré-autorização ser criada, você precisa redirecionar seu usuário para a `consentUrl` retornada na resposta. Lá, o usuário precisa aprovar a pré-autorização em sua instituição de pagamento. Após o consentimento ser dado, o usuário será redirecionado para a URL de callback `success` se tudo estiver ok, ou para a URL de callback `error` se o consentimento for rejeitado ou se ocorrer um erro no processo.

Nota: se você não definir um conjunto de `callbackUrls`, o usuário será redirecionado para uma página padrão da Pluggy.

Agora, se você verificar o status da pré-autorização usando [este endpoint](/reference/smart-transfer/smart-transfer-preauthorization-retrieve), você verá com um dos seguintes status:

- **COMPLETED**: A pré-autorização foi concluída e você está pronto para criar pagamentos.
- **REJECTED**: O usuário rejeitou a pré-autorização no fluxo de consentimento da instituição.
- **ERROR**: Ocorreu um erro no fluxo de consentimento da instituição.

Na [próxima seção](/docs/smart-transfers/creating-payment), você verá como criar um pagamento sem interação do usuário.

## Configurando limites de transação

Você pode configurar os limites de transação enviando o objeto `configuration`.

| Campo | Tipo | Opcional | Descrição |
|-------|------|----------|-------------|
| totalAllowedAmount | number | true | Valor máximo a ser alcançado pela soma de todas as transações que utilizam o consentimento autorizado pelo cliente. |
| transactionLimit | number | true | Valor máximo para cada transação de pagamento associada a este consentimento. |
| periodicLimits | object | true | Limites transacionais por período conforme determinado pelo usuário pagador. |

No objeto `periodicLimits`, você pode configurar os limites por período. Os períodos disponíveis são `day`, `week`, `month` e `year`, e para cada um você pode configurar:

| Campo | Tipo | Opcional | Descrição |
|-------|------|----------|-------------|
| quantityLimit | number | true | Número máximo de transações permitidas no período. |
| transactionLimit | number | true | Valor máximo a ser transacionado no período. |

Exemplo:

```json
{
  "configuration": {
    "totalAllowedAmount": 100.5,
    "transactionLimit": 10,
    "periodicLimits": {
      "day": {
        "quantityLimit": 2,
        "transactionLimit": 5
      },
      "week": {
        // week limits
      },
      "month": {
        // month limits
      },
      "year": {
        // year limits
      }
    }
  }
}
```

No caso de algum limite ser atingido, você receberá um erro apropriado da API.