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

# Arquivar checkout link

> Tira o template do ar — a URL deixa de vender e nenhuma Session nova nasce dele.

`DELETE /checkout/links/{id}`

Faz parte do recurso [Links](/pt-BR/checkout/links) — o conceito e os estados estão lá.

O `status` passa a `archived`, a URL pública deixa de vender e nenhuma Session nova é materializada.
A resposta é `200` com o Link inteiro, já com o estado novo.

<Warning>
  **Quem estava com a página aberta também para de poder pagar.** O comprador que clicar em "Pagar"
  recebe `409` com `key: "errors.checkout.link_not_active"` — a confirmação revalida o Link a cada
  tentativa, de propósito, para que ninguém pague contra algo que você já tirou do ar.

  Se a intenção é só parar de divulgar e deixar quem está no meio da compra terminar, **não arquive
  agora**: espere as Sessions abertas expirarem (24h por padrão) ou
  [cancele-as](/pt-BR/checkout/charges/cancel) explicitamente.
</Warning>

<Warning>
  **Não há como desarquivar pela API.** Não existe rota de restauração, e o
  [`PATCH`](/pt-BR/checkout/links/update) não aceita `status` no corpo — pelo painel dá, pela
  integração não. Se precisar do mesmo checkout de volta, o caminho é criar um Link novo, com outro
  `chk_`, e o mesmo `slug` só se você tiver liberado o antigo.
</Warning>

<Note>
  **Não é remoção, é mudança de estado** — não há `deletedAt`. O Link continua existindo e sendo
  devolvido pelo [`GET`](/pt-BR/checkout/links/get) com `status: "archived"`, o que permite reler a
  configuração depois.
</Note>

<Info>
  Endpoint idempotente. Veja [Convenções](/pt-BR/convencoes#idempot%C3%AAncia).
</Info>

## Exemplo

```bash theme={null}
curl -X DELETE https://api.sandbox.z2pay.com/v1/checkout/links/chk_byd8p3p79re859jpkmr0j65n3 \
  -H "x-api-key: SUA_CHAVE_DE_SANDBOX"
```

```json Resposta 200 theme={null}
{
  "id": "chk_byd8p3p79re859jpkmr0j65n3",
  "name": "Curso de Backend",
  "status": "archived",
  "sellable": true,
  "mode": "payment",
  "currency": "BRL",
  "updatedAt": "2026-06-26T18:40:00.000Z",
  "url": "https://pay.sandbox.z2pay.com/c/chk_byd8p3p79re859jpkmr0j65n3"
}
```


## OpenAPI

````yaml openapi/checkout.json DELETE /checkout/links/{id}
openapi: 3.0.3
info:
  title: Z2Pay Checkout API
  version: 1.0.0
  description: >-
    API pública dedicada do Checkout. Autenticação via header x-api-key com a
    API key unificada da conta (z2_{live|test}_{sk|pk}_...). Endpoints privados
    exigem uma key secret (sk); endpoints públicos aceitam a key publishable
    (pk) consumida pelo frontend do comprador.
servers:
  - url: https://api.sandbox.z2pay.com/v1
    description: Sandbox
  - url: https://api.z2pay.com/v1
    description: Produção
security: []
tags:
  - name: Checkout Links
    description: Checkout Links (integração API via sk_)
  - name: Checkout Sessions
    description: Checkout Sessions (integração API via sk_)
  - name: Vendas rápidas
    description: Cobrança individual sem Link — Sessions ad-hoc criadas com a chave secreta
paths:
  /checkout/links/{id}:
    delete:
      tags:
        - Checkout Links
      summary: Arquivar checkout link
      description: >-
        Muda o status do Link para `archived` — não é soft delete, o registro
        continua existindo e o GET segue devolvendo. A URL pública deixa de
        vender, e Sessions já abertas passam a recusar o pagamento com
        `errors.checkout.link_not_active`.
      operationId: CheckoutLinkApiController_archive
      parameters:
        - name: id
          in: path
          required: true
          description: ID do CheckoutLink
          schema:
            type: string
      responses:
        '200':
          description: Link arquivado
          content:
            application/json:
              schema:
                type: object
                properties:
                  id:
                    type: string
                    description: Identificador único do registro.
                  slug:
                    type: string
                    nullable: true
                    description: Slug único global usado na URL pública /c/{slug}.
                  status:
                    type: string
                    description: Estado atual do registro.
                  mode:
                    type: string
                    description: >-
                      Modo do checkout: 'payment' (pagamento único) ou
                      'subscription' (assinatura).
                  currency:
                    type: string
                    description: 'Moeda no padrão ISO 4217 (ex.: BRL).'
                  locale:
                    type: string
                    description: 'Idioma do checkout (ex.: pt-BR, en-US, es-ES).'
                  name:
                    type: string
                    nullable: true
                    description: Nome de exibição do registro.
                  description:
                    type: string
                    nullable: true
                    description: Descrição exibida no checkout.
                  sellable:
                    type: boolean
                    description: >-
                      Se o Link pode vender agora. É false quando um recebedor
                      do splits, ou o dono da conta, não está ativo no PSP — o
                      comprador vê uma página de indisponível. Independente do
                      status.
                  config:
                    type: object
                    description: >-
                      Snapshot da configuração do checkout (formas de pagamento,
                      itens e personalização visual).
                  requiredFields:
                    type: array
                    items:
                      type: string
                    nullable: true
                    description: >-
                      Campos do comprador exigidos no checkout (ex.: email,
                      document, phone, address).
                  customFields:
                    type: array
                    items:
                      type: object
                    nullable: true
                    description: >-
                      Definições dos campos personalizados solicitados no
                      checkout.
                  successUrl:
                    type: string
                    nullable: true
                    description: >-
                      URL de redirecionamento após o pagamento ser concluído com
                      sucesso.
                  cancelUrl:
                    type: string
                    nullable: true
                    description: >-
                      URL de redirecionamento quando o comprador cancela o
                      checkout.
                  metadata:
                    type: object
                    nullable: true
                    description: >-
                      Metadados livres (pares chave-valor) para uso do
                      integrador; não afeta o processamento.
                  expirationMinutes:
                    type: integer
                    nullable: true
                    description: Tempo de validade da sessão de checkout, em minutos.
                  createdAt:
                    type: string
                    format: date-time
                    description: Data e hora de criação do registro (ISO 8601).
                  updatedAt:
                    type: string
                    format: date-time
                    description: Data e hora da última atualização do registro (ISO 8601).
              example:
                id: chk_byd8p3p79re859jpkmr0j65n3
                slug: curso-marketing-digital
                status: archived
                mode: payment
                currency: BRL
                locale: pt-BR
                name: Curso de Marketing Digital
                description: Acesso vitalício ao curso completo
                sellable: true
                config:
                  items:
                    - name: Curso de Marketing Digital
                      quantity: 1
                      unitAmount: 49700
                      chargeType: one_time
                  paymentMethods:
                    card:
                      enabled: true
                    pix:
                      enabled: true
                requiredFields:
                  - email
                  - document
                  - phone
                customFields: null
                successUrl: https://academia.com/obrigado
                cancelUrl: null
                metadata: null
                expirationMinutes: 1440
                createdAt: '2025-06-29T13:45:30.000Z'
                updatedAt: '2025-06-29T16:00:00.000Z'
        '401':
          description: Chave de API ausente, malformada ou inválida
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: object
                    properties:
                      code:
                        type: string
                        description: >-
                          Identificador estável do erro. É por ele que você deve
                          ramificar, não pela mensagem.
                      message:
                        type: string
                        description: >-
                          Descrição legível. Pode mudar sem aviso e não deve ser
                          usada em condicional.
              example:
                error:
                  code: UNAUTHORIZED
                  message: Invalid API key
        '403':
          description: >-
            A chave é válida, mas não tem permissão para esta operação — é o
            caso de usar uma publishable key (pk) onde a rota exige uma secret
            key (sk)
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: object
                    properties:
                      code:
                        type: string
                        description: >-
                          Identificador estável do erro. É por ele que você deve
                          ramificar, não pela mensagem.
                      message:
                        type: string
                        description: >-
                          Descrição legível. Pode mudar sem aviso e não deve ser
                          usada em condicional.
              example:
                error:
                  code: FORBIDDEN
                  message: Forbidden — insufficient permissions
        '404':
          description: Link não encontrado
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: object
                    properties:
                      code:
                        type: string
                        description: >-
                          Identificador estável do erro. É por ele que você deve
                          ramificar, não pela mensagem.
                      message:
                        type: string
                        description: >-
                          Descrição legível. Pode mudar sem aviso e não deve ser
                          usada em condicional.
              example:
                error:
                  code: NOT_FOUND
                  message: Checkout link not found
        '409':
          description: >-
            Já existe uma requisição em andamento com esta Idempotency-Key. A
            API aguarda a primeira concluir por até 5 segundos antes de
            responder assim
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    description: >-
                      Mensagem do conflito de idempotência. Aqui `error` é
                      texto, não objeto — ramifique pelo status HTTP.
              example:
                error: A request with this idempotency key is already being processed
        '422':
          description: >-
            Idempotency-Key já usada com um corpo diferente. Use uma chave nova
            para uma operação diferente
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    description: >-
                      Mensagem do conflito de idempotência. Aqui `error` é
                      texto, não objeto — ramifique pelo status HTTP.
              example:
                error: Idempotency key already used with a different request body
      security:
        - apiKey: []
components:
  securitySchemes:
    apiKey:
      type: apiKey
      in: header
      name: x-api-key
      description: >-
        API key unificada (z2_{live|test}_{sk|pk}_...) — secret (sk) para
        integração backend, publishable (pk) para uso no frontend público

````