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

# List cancellation records

> Provider-specific resource available only when the authenticated organization is backed by the supported Sonny's Shared data source. An unavailable provider returns the documented 400 or 404 response. Availability is determined server-side; credentials, connection details, and provider configuration are never returned. Signup discounts and firstYearPayments are normalized into the documented schema.



## OpenAPI

````yaml /api-reference/openapi.json get /api/v1/cancellations/records
openapi: 3.1.0
info:
  title: Nautilus Public API
  version: 1.0.0
  description: >-
    Tenant-scoped public API. Except for /api/v1/openapi.json, requests use a
    Clerk tenant API key as a Bearer token. The key's organizationId is the sole
    tenant scope; organization IDs supplied by callers are never accepted.
    Detail endpoints deliberately return 404 for both missing and cross-tenant
    records. Canonical collections use the standard envelope and endpoint-bound
    cursor pagination. Timestamps are UTC ISO 8601 values and monetary amounts
    ending in Cents are integer cents. Responses use narrow serializers and
    exclude credentials, API keys, provider configuration, access tokens,
    webhook secrets, raw provider payloads, and internal workflow or activity
    data.
servers:
  - url: https://app.nautilus.co
security:
  - tenantApiKey: []
tags:
  - name: Contract
  - name: Cancellations
  - name: Sites
  - name: Products
  - name: Checkout links
  - name: Purchases
  - name: Contact lists
  - name: Contacts
  - name: Marketing
  - name: Forms
  - name: Vouchers
  - name: Links
  - name: Automations
  - name: Surveys
  - name: Cases
  - name: Sonny's POS
  - name: Analytics
  - name: Messaging
  - name: Legacy
    description: Deprecated noncanonical endpoints retained for compatibility.
paths:
  /api/v1/cancellations/records:
    get:
      tags:
        - Cancellations
      summary: List cancellation records
      description: >-
        Provider-specific resource available only when the authenticated
        organization is backed by the supported Sonny's Shared data source. An
        unavailable provider returns the documented 400 or 404 response.
        Availability is determined server-side; credentials, connection details,
        and provider configuration are never returned. Signup discounts and
        firstYearPayments are normalized into the documented schema.
      operationId: listCancellationRecords
      parameters:
        - name: cancelledAfter
          in: query
          required: false
          schema:
            type: string
            format: date-time
            description: UTC ISO 8601 timestamp.
          description: >-
            Inclusive cancellation lower bound. Must include an explicit UTC
            offset.
        - name: cancelledBefore
          in: query
          required: false
          schema:
            type: string
            format: date-time
            description: UTC ISO 8601 timestamp.
          description: >-
            Inclusive cancellation upper bound. Must include an explicit UTC
            offset.
        - name: limit
          in: query
          required: false
          schema:
            type: integer
            minimum: 1
            maximum: 500
            default: 100
          description: >-
            Page size. Invalid values use 100; values above 500 are capped at
            500.
        - name: cursor
          in: query
          required: false
          schema:
            type: string
          description: >-
            Opaque continuation token returned by this cancellation records
            collection. Cursors are bound to this endpoint (and, for nested or
            sorted collections, to that parent or sort) and cannot be reused
            elsewhere.
      responses:
        '200':
          description: Tenant-scoped collection.
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/CollectionEnvelope'
                  - type: object
                    properties:
                      data:
                        type: array
                        items:
                          $ref: '#/components/schemas/CancellationRecord'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '500':
          $ref: '#/components/responses/InternalServerError'
components:
  schemas:
    CollectionEnvelope:
      type: object
      additionalProperties: false
      properties:
        organizationId:
          type: string
        filters:
          type: object
          additionalProperties: true
          description: Normalized filters actually applied to the request.
        data:
          type: array
          items: {}
        pagination:
          $ref: '#/components/schemas/Pagination'
      required:
        - organizationId
        - filters
        - data
        - pagination
      description: Standard envelope for canonical collection endpoints.
    CancellationRecord:
      type: object
      additionalProperties: false
      properties:
        membershipId:
          type: string
        customerId:
          anyOf:
            - type: string
            - type: 'null'
        signupAt:
          anyOf:
            - type: string
              format: date-time
              description: UTC ISO 8601 timestamp.
            - type: 'null'
        cancelledAt:
          type: string
          format: date-time
          description: UTC ISO 8601 timestamp.
        reason:
          type: string
        churnType:
          type: string
          enum:
            - voluntary
            - involuntary
        planName:
          anyOf:
            - type: string
            - type: 'null'
        billingAmountCents:
          anyOf:
            - type: integer
              description: Amount in integer cents.
            - type: 'null'
        hadSignupDiscount:
          anyOf:
            - type: boolean
            - type: 'null'
        signupDiscounts:
          anyOf:
            - type: array
              items:
                $ref: '#/components/schemas/CancellationSignupDiscount'
            - type: 'null'
        firstYearPayments:
          anyOf:
            - type: array
              items:
                $ref: '#/components/schemas/CancellationPaymentPeriod'
            - type: 'null'
        firstYearPaymentCoverage:
          type: object
          additionalProperties: false
          properties:
            available:
              type: boolean
            unavailableReason:
              anyOf:
                - type: string
                  enum:
                    - signup_time_unavailable
                - type: 'null'
            observedMonths:
              type: integer
            requestedMonths:
              type: integer
              const: 12
          required:
            - available
            - unavailableReason
            - observedMonths
            - requestedMonths
      required:
        - membershipId
        - customerId
        - signupAt
        - cancelledAt
        - reason
        - churnType
        - planName
        - billingAmountCents
        - hadSignupDiscount
        - signupDiscounts
        - firstYearPayments
        - firstYearPaymentCoverage
      description: >-
        Cancellation detail with sanitized signup discounts and twelve UTC
        monthly firstYearPayments periods. Null coverage means the source data
        was not sufficient; it never exposes raw payment-provider objects.
    Pagination:
      type: object
      additionalProperties: false
      properties:
        limit:
          type: integer
        hasMore:
          type: boolean
        nextCursor:
          anyOf:
            - type: string
            - type: 'null'
      required:
        - limit
        - hasMore
        - nextCursor
    CancellationSignupDiscount:
      type: object
      additionalProperties: false
      properties:
        name:
          anyOf:
            - type: string
            - type: 'null'
        code:
          anyOf:
            - type: string
            - type: 'null'
        sku:
          anyOf:
            - type: string
            - type: 'null'
        amountCents:
          anyOf:
            - type: integer
              description: Amount in integer cents.
            - type: 'null'
        appliedToItemName:
          anyOf:
            - type: string
            - type: 'null'
      required:
        - name
        - code
        - sku
        - amountCents
        - appliedToItemName
    CancellationPaymentPeriod:
      type: object
      additionalProperties: false
      properties:
        periodNumber:
          type: integer
        periodStart:
          type: string
          format: date-time
          description: UTC ISO 8601 timestamp.
        periodEnd:
          type: string
          format: date-time
          description: UTC ISO 8601 timestamp.
        amountPaidCents:
          anyOf:
            - type: integer
              description: Amount in integer cents.
            - type: 'null'
        chargeCount:
          type: integer
        status:
          type: string
          enum:
            - observed
            - unobserved
      required:
        - periodNumber
        - periodStart
        - periodEnd
        - amountPaidCents
        - chargeCount
        - status
    Error:
      type: object
      additionalProperties: false
      properties:
        error:
          type: string
      required:
        - error
  responses:
    BadRequest:
      description: >-
        Malformed parameters, unsupported provider, or unavailable resource for
        this organization.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    Unauthorized:
      description: Missing, invalid, legacy, or non-tenant Bearer credential.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    InternalServerError:
      description: Internal server error. No internal exception data is exposed.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  securitySchemes:
    tenantApiKey:
      type: http
      scheme: bearer
      bearerFormat: Clerk tenant API key
      description: >-
        Clerk tenant API key. The organizationId encoded by the key is the exact
        and only tenant scope.

````