> ## Documentation Index
> Fetch the complete documentation index at: https://docs.abacatepay.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Criar um link do portal

> Gera o link do portal do cliente para um cliente e um checkout que ele pagou. Chamar de novo com o mesmo `customerId` e `checkoutId` devolve o mesmo link.

O cliente entra no portal com um código de 6 dígitos enviado ao e-mail do cadastro e consegue ver os pagamentos, pedir reembolso, cancelar a assinatura e trocar o cartão.


Gera o link do portal do cliente para um cliente e um checkout que ele pagou. Veja o que o cliente consegue fazer no portal em [Referência](/pages/customer-portal/reference).

<Card horizontal>
  Requer uma destas permissões: `CHECKOUT:CREATE`, `SUBSCRIPTION:CREATE` ou `CUSTOMER:CREATE`.
</Card>

**Exemplo:**

```json theme={null}
{
  "customerId": "cust_abc123xyz",
  "checkoutId": "bill_abc123xyz"
}
```

<Tip title="Pode chamar sempre" horizontal>
  Chamar de novo com o mesmo `customerId` e `checkoutId` devolve o mesmo link. Não precisa guardar a `url`.
</Tip>

## Quando o link não sai

| Erro | Motivo |
| - | - |
| `Checkout not found` | O `checkoutId` não existe na sua loja (ou é de outro modo, dev ou produção). |
| `Customer not found` | O `customerId` não existe ou foi removido. |
| `Customer has no email to receive the access code` | O cliente não tem e-mail; o código de acesso vai por e-mail. |
| `Customer has no payment for this checkout` | O cliente ainda não pagou esse checkout. Em assinatura, ainda não tem assinatura criada nele. |


## OpenAPI

````yaml POST /customer-portal/create
openapi: 3.1.0
info:
  title: API AbacatePay
  description: API para gerenciamento de cobranças e pagamentos usando o AbacatePay.
  version: 1.0.0
servers:
  - url: https://api.abacatepay.com/v2
    description: Único servidor para os ambientes de produção e sandbox.
security: []
paths:
  /customer-portal/create:
    post:
      summary: Criar um link do portal do cliente
      description: >
        Gera o link do portal do cliente para um cliente e um checkout que ele
        pagou. Chamar de novo com o mesmo `customerId` e `checkoutId` devolve o
        mesmo link.


        O cliente entra no portal com um código de 6 dígitos enviado ao e-mail
        do cadastro e consegue ver os pagamentos, pedir reembolso, cancelar a
        assinatura e trocar o cartão.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - customerId
                - checkoutId
              additionalProperties: false
              properties:
                customerId:
                  type: string
                  description: ID do cliente que pagou o checkout
                  example: cust_abc123xyz
                checkoutId:
                  type: string
                  description: ID do checkout (avulso ou de assinatura)
                  example: bill_abc123xyz
      responses:
        '200':
          description: Link do portal criado (ou o existente).
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: object
                    properties:
                      id:
                        type: string
                        description: ID do link
                        example: cpl_abc123xyz
                      url:
                        type: string
                        description: Link para mandar ao cliente
                        example: >-
                          https://portal.abacatepay.com/k3J9xQ2mP7vL1nR8sT4wY6zA0bC5dE2f
                      customerId:
                        type: string
                        example: cust_abc123xyz
                      checkoutId:
                        type: string
                        example: bill_abc123xyz
                      devMode:
                        type: boolean
                        example: false
                      createdAt:
                        type: string
                        format: date-time
                        example: '2026-10-19T12:00:00.000Z'
                  error:
                    type: string
                    nullable: true
                    example: null
                  success:
                    $ref: '#/components/schemas/Success'
        '401':
          description: Não autorizado. Falha na autenticação.
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    example: Token de autenticação inválido ou ausente.
      security:
        - bearerAuth: []
components:
  schemas:
    Success:
      type: boolean
      description: Se a requisição obteve sucesso ou não.
      example: true
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: >
        Todas as requisições devem incluir sua chave de API no header
        Authorization usando o formato `Bearer <abacatepay-api-key>`. Sem esse
        header a requisição será rejeitada.


        Saiba mais sobre como criar e usar chaves de API na [documentação de
        autenticação](/pages/authentication).

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.