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

# Cancelar assinatura

> Cancela uma assinatura. **Ação irreversível.**

O `id` é o único ponto de cancelamento: não existe cancelar por cliente, por produto ou em lote.

Quando o cancelamento passa a valer:

| Situação da assinatura | `effective` | O que acontece |
| --- | --- | --- |
| Próxima cobrança no futuro | `end_of_paid_period` | O comprador mantém o acesso até o fim do período que já pagou. Nenhuma cobrança nova é feita. |
| Assinatura vencida | `immediate` | O cancelamento vale na hora. |

Escopo: `subscriptions:cancel`. Exige `Idempotency-Key`.

<Warning>
  O escopo `subscriptions:cancel` **não** é concedido por um token com escopo curinga. Ele precisa ser pedido nominalmente na emissão do token.
</Warning>

Restrições: assinaturas de parcelamento inteligente e de boleto parcelado não podem ser canceladas por aqui (`422`). Assinatura já cancelada também responde `422`.

Limites desta rota, mais estreitos que os do resto da API: **5 requisições por minuto** e **50 por dia**. Além disso, um token que acumula muitas respostas `404` (busca por `id` que não existe ou não é seu) é bloqueado temporariamente nesta rota.



## OpenAPI

````yaml /api-reference/openapi.json post /api/v2/subscriptions/{id}/cancel
openapi: 3.0.3
info:
  title: Ticto API v2
  version: 2.0.0
  description: >-
    API pública da Ticto para criar produtos e ofertas e ler pedidos,
    assinaturas e saques. Autenticação por token Bearer com escopos granulares.
    Todo acesso é isolado ao produtor dono do token — por construção, não por
    checagem por endpoint.
servers:
  - url: https://api.ticto.cloud
    description: Produção (tokens ticto_live_)
  - url: https://sandbox.ticto.cloud
    description: Sandbox (tokens ticto_test_)
security:
  - bearerAuth: []
tags:
  - name: Produtos
    description: Criação e leitura de produtos.
  - name: Ofertas
    description: Criação e leitura de ofertas de um produto.
  - name: Pedidos
    description: Leitura de pedidos (paridade com a API v1).
  - name: Assinaturas
    description: Leitura de assinaturas (paridade com a API v1).
  - name: Saques
    description: Leitura de saques/cashouts (paridade com a API v1).
paths:
  /api/v2/subscriptions/{id}/cancel:
    post:
      tags:
        - Assinaturas
      summary: Cancelar assinatura
      description: >-
        Cancela uma assinatura. **Ação irreversível.**


        O `id` é o único ponto de cancelamento: não existe cancelar por cliente,
        por produto ou em lote.


        Quando o cancelamento passa a valer:


        | Situação da assinatura | `effective` | O que acontece |

        | --- | --- | --- |

        | Próxima cobrança no futuro | `end_of_paid_period` | O comprador mantém
        o acesso até o fim do período que já pagou. Nenhuma cobrança nova é
        feita. |

        | Assinatura vencida | `immediate` | O cancelamento vale na hora. |


        Escopo: `subscriptions:cancel`. Exige `Idempotency-Key`.


        <Warning>
          O escopo `subscriptions:cancel` **não** é concedido por um token com escopo curinga. Ele precisa ser pedido nominalmente na emissão do token.
        </Warning>


        Restrições: assinaturas de parcelamento inteligente e de boleto
        parcelado não podem ser canceladas por aqui (`422`). Assinatura já
        cancelada também responde `422`.


        Limites desta rota, mais estreitos que os do resto da API: **5
        requisições por minuto** e **50 por dia**. Além disso, um token que
        acumula muitas respostas `404` (busca por `id` que não existe ou não é
        seu) é bloqueado temporariamente nesta rota.
      operationId: cancelSubscription
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
          description: ID da assinatura a cancelar.
        - $ref: '#/components/parameters/IdempotencyKey'
      responses:
        '200':
          description: Assinatura cancelada.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SubscriptionCanceled'
              example:
                id: 84213
                canceled_at: '2026-08-19T23:59:59-03:00'
                effective: end_of_paid_period
        '400':
          $ref: '#/components/responses/IdempotencyRequired'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/ValidationError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
      security:
        - bearerAuth:
            - subscriptions:cancel
components:
  parameters:
    IdempotencyKey:
      name: Idempotency-Key
      in: header
      required: true
      schema:
        type: string
        format: uuid
      description: >-
        UUID v4 único por operação. Garante que retries não criem recursos
        duplicados.
  schemas:
    SubscriptionCanceled:
      type: object
      description: Resultado do cancelamento (`POST /subscriptions/{id}/cancel`).
      properties:
        id:
          type: integer
          description: ID da assinatura cancelada.
        canceled_at:
          type: string
          nullable: true
          description: Quando o cancelamento passa a valer, em ISO 8601.
        effective:
          type: string
          enum:
            - immediate
            - end_of_paid_period
          description: >-
            `immediate`: valeu na hora. `end_of_paid_period`: o comprador mantém
            o acesso até o fim do período já pago.
      example:
        id: 84213
        canceled_at: '2026-08-19T23:59:59-03:00'
        effective: end_of_paid_period
    Error:
      type: object
      properties:
        error:
          type: string
          example: insufficient_scope
        message:
          type: string
          example: 'Token is missing the required ability: orders:read.'
        request_id:
          type: string
          nullable: true
    ValidationErrorBody:
      type: object
      properties:
        error:
          type: string
          example: validation_failed
        message:
          type: string
          example: The request payload is invalid.
        request_id:
          type: string
          nullable: true
        details:
          type: array
          items:
            type: string
          example:
            - The name field is required.
  responses:
    IdempotencyRequired:
      description: Operação de escrita sem o header `Idempotency-Key`.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error: idempotency_key_required
            message: POST requests must include an Idempotency-Key header.
            request_id: null
    Unauthorized:
      description: Token ausente, inválido ou expirado.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error: unauthorized
            message: Invalid or expired token.
            request_id: null
    Forbidden:
      description: O token não tem o escopo exigido.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error: insufficient_scope
            message: 'Token is missing the required ability: orders:read.'
            request_id: null
    NotFound:
      description: >-
        Recurso inexistente ou que não pertence ao produtor autenticado (o
        isolamento não confirma a existência de recursos de terceiros).
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error: not_found
            message: Resource not found.
            request_id: null
    ValidationError:
      description: Payload inválido.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ValidationErrorBody'
    TooManyRequests:
      description: >-
        Limite excedido. O header `Retry-After` traz em quantos segundos tentar
        de novo. Também é a resposta quando o token é bloqueado por acumular
        buscas por `id` inexistente.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error: too_many_requests
            message: >-
              Too many failed lookups on this endpoint. The token is temporarily
              blocked.
            request_id: null
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: >-
        Token opaco no formato `ticto_live_...` (produção) ou `ticto_test_...`
        (sandbox). Enviado como `Authorization: Bearer <token>`.

````

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