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

# Get a scheduled downgrade

> Read the customer's downgrade that's waiting for the period end.

Returns `{ "scheduled": … }`: the customer's downgrade waiting for its period end, or `null`. Once the renewal applies it, or it's undone, there's none.


## OpenAPI

````yaml openapi.json GET /v1/billing/downgrade
openapi: 3.1.0
info:
  title: Ledger API
  version: 0.1.0
servers:
  - url: https://api.integrateledger.com
    description: Hosted Ledger API
security: []
paths:
  /v1/billing/downgrade:
    get:
      tags:
        - Billing
      summary: Get a customer's scheduled downgrade
      operationId: getScheduledDowngrade
      parameters:
        - schema:
            type: string
            minLength: 1
            maxLength: 255
          required: true
          name: customerId
          in: query
      responses:
        '200':
          description: The customer's downgrade waiting for its period end
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ScheduledDowngrade'
        '400':
          description: Invalid query
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                  downgradeId:
                    type: integer
                required:
                  - error
        '401':
          description: Invalid Ledger API key
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                  downgradeId:
                    type: integer
                required:
                  - error
        '429':
          $ref: '#/components/responses/RateLimited'
      security:
        - ApiKey: []
      x-codeSamples:
        - lang: python
          label: Python SDK
          source: |-
            import os
            from integrateledger import ledger

            client = ledger(api_key=os.environ["LEDGER_API_KEY"])
            client.get_scheduled_downgrade(customer_id="user_123")
        - lang: bash
          label: cURL
          source: >-
            curl --request GET
            'https://api.integrateledger.com/v1/billing/downgrade?customerId=user_123'
            \
              -H "Authorization: Bearer $LEDGER_API_KEY"
        - lang: typescript
          label: TypeScript SDK
          source: >-
            import ledger from "integrateledger";


            const client = new ledger({ apiKey: process.env.LEDGER_API_KEY ?? ""
            });

            await client.getScheduledDowngrade({ customerId: "user_123" });
components:
  schemas:
    ScheduledDowngrade:
      type: object
      properties:
        scheduled:
          allOf:
            - $ref: '#/components/schemas/Downgrade'
            - nullable: true
      required:
        - scheduled
    Downgrade:
      type: object
      properties:
        downgradeId:
          type: integer
        status:
          type: string
          enum:
            - pending
            - scheduled
            - applied
            - closed
        fromPlanId:
          type: string
        planId:
          type: string
        timing:
          type: string
          enum:
            - period_end
            - immediately
        refund:
          type: string
          enum:
            - none
            - prorated
        oldPlanCredits:
          type: string
          enum:
            - keep
            - expire
        overageOnPlanChange:
          type: string
          enum:
            - carry_to_renewal
            - bill_now
        effectiveAt:
          type: string
          nullable: true
          format: date-time
        refundAmountCents:
          type: integer
          nullable: true
        creditNoteId:
          type: string
          nullable: true
      required:
        - downgradeId
        - status
        - fromPlanId
        - planId
        - timing
        - refund
        - oldPlanCredits
        - overageOnPlanChange
        - effectiveAt
        - refundAmountCents
        - creditNoteId
    RateLimitError:
      type: object
      properties:
        error:
          type: string
          example: rate_limited
      required:
        - error
  responses:
    RateLimited:
      description: >-
        Too many requests. Wait Retry-After seconds, then retry. See the rate
        limits guide.
      headers:
        Retry-After:
          description: Seconds until a request is allowed again
          schema:
            type: integer
        RateLimit-Limit:
          description: 'The burst: requests allowed at once'
          schema:
            type: integer
        RateLimit-Remaining:
          description: Requests left right now
          schema:
            type: integer
        RateLimit-Reset:
          description: Seconds until the full burst is back
          schema:
            type: integer
        RateLimit-Policy:
          description: >-
            The sustained rate per second and the burst, such as
            200;w=1;burst=1000
          schema:
            type: string
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/RateLimitError'
  securitySchemes:
    ApiKey:
      type: http
      scheme: bearer

````

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