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

# Change plan

> Moves your organization to another plan: `starter`, `growth`, `scale` or `partner` (see `plans` in Get billing). What happens depends on how you're billed:

- **No plan yet (or a canceled one):** returns `status: checkout` and a `checkout_url` to pay by card. The plan starts when payment completes. Pass `email` to prefill the checkout.
- **Paid by card, moving to a pricier plan:** upgrades at once (`status: changed`). The difference for the rest of the period is charged to the card on file straight away, and the new plan's contacts apply now.
- **Anything else** (a downgrade, the same plan, a plan invoiced by DBEE, or no plan while online payment isn't set up): returns `202` with `status: pending_confirmation`. DBEE confirms the change; downgrades apply from the next period.

**Admin key required.** Standard keys get `403 admin_key_required`.



## OpenAPI

````yaml /api-reference/openapi.json post /api/v1/billing/plan
openapi: 3.1.0
info:
  title: Intent Leads API
  version: '1.0'
  description: >-
    The Intent Leads API finds B2B people actively researching the topics you
    sell into, and exports them with contact details into your own tools.


    **Authentication.** Send an API key as a bearer token: `Authorization:
    Bearer il_live_…`. Keys belong to one organization. Standard keys work with
    everything except billing, team and key management, which need an admin key.


    **What costs contacts.** Only `POST /api/v1/exports` with `"dry_run": false`
    uses contacts from your plan. Quotes, counts, checks, samples and
    re-downloads are free.


    **Errors.** Every error is JSON: `{"error": "code", "message":
    "Plain-English explanation"}`. Codes are stable; messages may change.


    **Conventions.** JSON by default. Dates are `YYYY-MM-DD` and timestamps ISO
    8601, all in UTC. Lane codes (`L1`) are case-insensitive.
servers:
  - url: https://intentleads.si
security:
  - bearerAuth: []
tags:
  - name: Exports
    description: Quote (free) and buy new people from your lanes, then download them.
  - name: Leads
    description: Pull and re-download the leads you've exported, and list deliveries.
  - name: Lanes
    description: >-
      Create, inspect and tune lanes: keywords plus the companies and roles you
      want.
  - name: Keywords
    description: Add and remove a lane's keywords; each one is approved as its own topic.
  - name: Checks
    description: >-
      Free lane checks that size every filter step over 14 days, plus quick
      topic signals.
  - name: Company list
    description: >-
      The target-company list your lanes can narrow to or use instead of
      industries.
  - name: Suppressions
    description: People you exported who later asked to be removed.
  - name: Usage
    description: Contacts used and left this billing period.
  - name: Billing
    description: Plan, invoices and plan changes. Admin keys only.
  - name: Team
    description: Members and invite links. Admin keys only.
  - name: API keys
    description: Create, rename, rotate and revoke API keys. Admin keys only.
  - name: Account
    description: Check which organization a key belongs to and its role.
  - name: Reference
    description: Valid values for lane filters.
  - name: Activity
    description: A feed of changes and events in your organization.
paths:
  /api/v1/billing/plan:
    post:
      tags:
        - Billing
      summary: Change plan
      description: >-
        Moves your organization to another plan: `starter`, `growth`, `scale` or
        `partner` (see `plans` in Get billing). What happens depends on how
        you're billed:


        - **No plan yet (or a canceled one):** returns `status: checkout` and a
        `checkout_url` to pay by card. The plan starts when payment completes.
        Pass `email` to prefill the checkout.

        - **Paid by card, moving to a pricier plan:** upgrades at once (`status:
        changed`). The difference for the rest of the period is charged to the
        card on file straight away, and the new plan's contacts apply now.

        - **Anything else** (a downgrade, the same plan, a plan invoiced by
        DBEE, or no plan while online payment isn't set up): returns `202` with
        `status: pending_confirmation`. DBEE confirms the change; downgrades
        apply from the next period.


        **Admin key required.** Standard keys get `403 admin_key_required`.
      operationId: changePlan
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                plan:
                  type: string
                  enum:
                    - starter
                    - growth
                    - scale
                    - partner
                email:
                  type: string
                  format: email
                  description: 'Only used for a new checkout: prefills the billing email.'
              required:
                - plan
            example:
              plan: growth
      responses:
        '200':
          description: A checkout link (no plan yet) or an immediate upgrade.
          content:
            application/json:
              schema:
                oneOf:
                  - type: object
                    properties:
                      plan:
                        type: string
                      status:
                        type: string
                        const: checkout
                      checkout_url:
                        type: string
                        format: uri
                        description: Hosted card checkout page. Send the owner there.
                    required:
                      - plan
                      - status
                      - checkout_url
                  - type: object
                    properties:
                      plan:
                        type: string
                      status:
                        type: string
                        const: changed
                      note:
                        type: string
                    required:
                      - plan
                      - status
                      - note
              examples:
                checkout:
                  summary: No plan yet
                  value:
                    plan: growth
                    status: checkout
                    checkout_url: https://checkout.example.com/session/7f3c2a9e
                changed:
                  summary: Card upgrade
                  value:
                    plan: scale
                    status: changed
                    note: >-
                      Upgraded now; the difference for the rest of this period
                      was charged to the card on file.
        '202':
          description: A request DBEE confirms.
          content:
            application/json:
              schema:
                type: object
                properties:
                  requested:
                    type: string
                    description: The plan you asked for.
                  status:
                    type: string
                    const: pending_confirmation
                  note:
                    type: string
                required:
                  - requested
                  - status
                  - note
              example:
                requested: starter
                status: pending_confirmation
                note: >-
                  DBEE confirms plan changes that aren't card upgrades;
                  downgrades apply from the next period.
        '400':
          description: Unknown plan.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                invalid_plan:
                  value:
                    error: invalid_plan
                    message: plan must be starter, growth, scale or partner.
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/AdminKeyRequired'
        '500':
          $ref: '#/components/responses/InternalError'
        '502':
          description: The payment provider refused the request.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                billing_failed:
                  value:
                    error: billing_failed
                    message: >-
                      The payment provider didn't accept that. Try again, or ask
                      your DBEE contact.
        '503':
          description: Online payment isn't set up.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                billing_not_configured:
                  value:
                    error: billing_not_configured
                    message: Online payment isn't set up yet. Ask your DBEE contact.
components:
  schemas:
    Error:
      type: object
      properties:
        error:
          type: string
          example: lane_not_found
          description: Stable machine-readable code, e.g. `lane_not_found`.
        message:
          type: string
          example: No lane L9.
          description: Plain-English explanation you can show to a person.
      required:
        - error
        - message
      description: Every error has this shape.
  responses:
    Unauthorized:
      description: Missing, malformed, unknown or revoked API key.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          examples:
            unauthorized:
              value:
                error: unauthorized
                message: 'Send a valid API key as: Authorization: Bearer il_live_…'
    AdminKeyRequired:
      description: This endpoint needs an admin key.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          examples:
            admin_key_required:
              value:
                error: admin_key_required
                message: >-
                  This needs an admin API key. Owners can create one on the API
                  and CLI page.
    InternalError:
      description: >-
        Unexpected server error. Safe to retry reads; retry an export only with
        the same `idempotency_key`.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          examples:
            internal_error:
              value:
                error: internal_error
                message: Something went wrong. Try again.
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: il_live_…
      description: >-
        An Intent Leads API key, e.g. `il_live_` followed by 32 letters and
        digits. Create one on the API and CLI page of the dashboard.

````

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