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

# Get the plan catalog

> Returns the current public plan catalog: prices, included (Mainnet) credits, the daily free Testnet request cap, rate limits, page sizes, RPC method credits, webhook endpoint caps and the credit weight of every route class. No authentication. catalog_state is self_serve when plans with subscribable true can be bought through `POST /billing/checkout` on this host, else legacy_reference (prices for reference only). Mainnet and Testnet report their own state.



## OpenAPI

````yaml /api-reference/activity.json get /v1/plans
openapi: 3.0.3
info:
  title: Lumeus Activity API
  version: '2026-09-15'
  description: >-
    Lumeus Activity API on Stellar. Sign up at https://app.lumeus.dev: Free,
    Starter, Growth and Scale plans are self-serve, Enterprise by agreement.


    - **Pricing.** Testnet is free: Testnet requests cost no credits and are
    never billed. Each organization can make 10,000 Testnet requests a day
    across Activity, Assets and RPC (unlimited on Enterprise); the count resets
    at 00:00 UTC, and a request over it answers 429 rate_limited with
    Retry-After set to the seconds until then. Mainnet requests draw from the
    plan's monthly credits. Plans, limits and credit weights: `GET
    https://api.lumeus.dev/v1/plans`.

    - **Authentication.** Send `Authorization: Bearer <key>`. Testnet:
    `lum_test_…`; Mainnet: `lum_live_…`. A key works only on its own network, so
    pick the server that matches it (the other network answers 401). Publishable
    `lum_pub_…` keys call the GET data routes only, from an allowed browser
    origin. Webhook keys (`whk_…`) are not accepted here.

    - **Headers.** Every response except `GET /readyz` carries X-Request-Id;
    authenticated responses carry RateLimit-Limit, RateLimit-Remaining and
    RateLimit-Reset; 429 and 503 carry Retry-After.

    - **Errors.** JSON with a machine-readable code (see
    [errors](/guides/errors)). A path with an empty, `.` or `..` segment answers
    400 invalid_request, a trailing slash answers 404 not_found, and a method
    the path does not accept answers 405 with an Allow header.

    - **CORS.** Browser calls (CORS) are allowed from https://docs.lumeus.dev
    (the Try it playground of this reference) and https://app.lumeus.dev only,
    without cookies; responses expose ETag, Link, Location, Retry-After,
    X-Request-Id, X-Lumeus-Operation-Id, X-Lumeus-Idempotency and
    RateLimit-Limit, RateLimit-Remaining and RateLimit-Reset (errors included).
    Other websites cannot read responses made with a server key: use a
    publishable key with your own allowed origins ([browser
    keys](/guides/browser-keys)).
  license:
    name: Lumeus API contract
servers:
  - url: https://api-testnet.lumeus.dev
    description: Testnet (default)
  - url: https://api.lumeus.dev
    description: Mainnet
security:
  - Bearer: []
tags:
  - name: Queries
    description: >-
      Decoded Stellar history: the token movements and contract events of an
      account, asset, contract or transaction, the network feed, contract-event
      topic search and transaction headers.
  - name: Results
    description: >-
      Recover the saved result of a long prepaid request without running it
      again. Only prepaid accounts receive operation IDs; every other account
      gets 404 here.
  - name: Workspace
    description: >-
      Your workspace (organization): its name, plan, current period usage and
      API base URLs. Served by the Activity host for every product.
  - name: API keys
    description: >-
      Create, list, update, rotate and revoke the `lum_` keys used by the
      Activity API, the Assets API and RPC.
  - name: Usage
    description: >-
      Credits and requests used, the free Testnet daily count, per-route
      breakdowns, time series and the request log of your keys.
  - name: Billing
    description: >-
      The public plan catalog, plan subscriptions through Stripe Checkout, the
      billing portal and payment status.
  - name: Retired
    description: >-
      Routes kept only so old clients get a clear answer. Do not use them in new
      code.
  - name: Health
    description: Liveness and readiness probes for monitoring. No authentication.
paths:
  /v1/plans:
    get:
      tags:
        - Billing
      summary: Get the plan catalog
      description: >-
        Returns the current public plan catalog: prices, included (Mainnet)
        credits, the daily free Testnet request cap, rate limits, page sizes,
        RPC method credits, webhook endpoint caps and the credit weight of every
        route class. No authentication. catalog_state is self_serve when plans
        with subscribable true can be bought through `POST /billing/checkout` on
        this host, else legacy_reference (prices for reference only). Mainnet
        and Testnet report their own state.
      operationId: getPlanCatalog
      responses:
        '200':
          description: Plans, prices, limits and credit weights.
          content:
            application/json:
              schema:
                type: object
                properties:
                  plans:
                    type: array
                    items:
                      type: object
                      properties:
                        name:
                          type: string
                        monthly_fee_cents:
                          type: integer
                        included_credits:
                          type: integer
                        rate_per_minute:
                          type: integer
                        max_page_size:
                          type: integer
                          description: >-
                            Page size ceiling for every Activity collection
                            except account activity.
                        account_max_page_size:
                          type: integer
                          description: Page size ceiling for `/accounts/{id}/activity`.
                        deep_history:
                          type: boolean
                        hard_cap:
                          type: boolean
                        overage_per_1k_cents:
                          type: integer
                        subscribable:
                          type: boolean
                          description: >-
                            True when the plan can be bought now through POST
                            /billing/checkout (Stripe Checkout).
                        custom:
                          type: boolean
                        rpc_enabled:
                          type: boolean
                        rpc_rate_per_minute:
                          type: integer
                        rpc_method_credits:
                          type: object
                          properties: {}
                          additionalProperties:
                            type: integer
                        rpc_response_bytes_per_credit:
                          type: integer
                        max_webhook_endpoints:
                          type: integer
                          description: 0 means unlimited.
                        free_testnet_webhooks:
                          type: integer
                          description: Uncharged Testnet webhook endpoints.
                        free_testnet_daily_deliveries:
                          type: integer
                          description: >-
                            Admitted sponsored deliveries per organization per
                            UTC day.
                        testnet_free:
                          type: boolean
                          description: >-
                            Always true: Testnet requests and Testnet webhook
                            deliveries cost no credits.
                        testnet_daily_requests:
                          type: integer
                          description: >-
                            Testnet requests per organization per UTC day
                            (10000); null on Enterprise (unlimited).
                          nullable: true
                      required:
                        - name
                        - monthly_fee_cents
                        - included_credits
                        - testnet_free
                        - testnet_daily_requests
                  credit_weights:
                    type: object
                    properties: {}
                    additionalProperties:
                      type: integer
                  credit_formula:
                    type: string
                  catalog_state:
                    type: string
                    description: >-
                      self_serve: at least one plan can be bought through `POST
                      /billing/checkout` on this host. legacy_reference: no
                      self-serve checkout on this host; prices are for
                      reference.
                    enum:
                      - self_serve
                      - legacy_reference
                  funded_purchases_enabled:
                    type: boolean
                    description: >-
                      Prepaid offers through `POST /billing/purchases` are open
                      on this host.
              example:
                catalog_state: legacy_reference
                credit_formula: >-
                  credits = max(base_weight × ceil(rows / 100),
                  ceil(response_bytes / 64 KiB)), minimum 1 block
                credit_weights:
                  account: 1
                  activity: 10
                  asset: 5
                  assets-account: 1
                  assets-history: 5
                  assets-holder: 2
                  assets-holders: 5
                  assets-holdings: 1
                  assets-registry: 1
                  assets-snapshot: 50
                  contract: 5
                  rpc: 1
                  transaction: 1
                  tx-activity: 1
                  webhooks: 1
                funded_purchases_enabled: false
                plans:
                  - name: free
                    monthly_fee_cents: 0
                    included_credits: 250000
                    rate_per_minute: 60
                    max_page_size: 200
                    account_max_page_size: 1000
                    deep_history: true
                    hard_cap: true
                    overage_per_1k_cents: 0
                    subscribable: false
                    custom: false
                    rpc_enabled: true
                    rpc_rate_per_minute: 30
                    rpc_method_credits:
                      getEvents: 2
                      getFeeStats: 1
                      getHealth: 1
                      getLatestLedger: 1
                      getLedgerEntries: 2
                      getLedgers: 2
                      getNetwork: 1
                      getTransaction: 1
                      getTransactions: 2
                      getVersionInfo: 1
                      sendTransaction: 2
                      simulateTransaction: 5
                    rpc_response_bytes_per_credit: 65536
                    max_webhook_endpoints: 1
                    free_testnet_webhooks: 1
                    free_testnet_daily_deliveries: 1000
                    testnet_free: true
                    testnet_daily_requests: 10000
                  - name: starter
                    monthly_fee_cents: 2900
                    included_credits: 3000000
                    rate_per_minute: 600
                    max_page_size: 200
                    account_max_page_size: 1000
                    deep_history: true
                    hard_cap: false
                    overage_per_1k_cents: 1
                    subscribable: false
                    custom: false
                    rpc_enabled: true
                    rpc_rate_per_minute: 300
                    rpc_method_credits:
                      getEvents: 2
                      getFeeStats: 1
                      getHealth: 1
                      getLatestLedger: 1
                      getLedgerEntries: 2
                      getLedgers: 2
                      getNetwork: 1
                      getTransaction: 1
                      getTransactions: 2
                      getVersionInfo: 1
                      sendTransaction: 2
                      simulateTransaction: 5
                    rpc_response_bytes_per_credit: 65536
                    max_webhook_endpoints: 10
                    free_testnet_webhooks: 0
                    free_testnet_daily_deliveries: 0
                    testnet_free: true
                    testnet_daily_requests: 10000
                  - name: growth
                    monthly_fee_cents: 9900
                    included_credits: 12000000
                    rate_per_minute: 3000
                    max_page_size: 200
                    account_max_page_size: 1000
                    deep_history: true
                    hard_cap: false
                    overage_per_1k_cents: 1
                    subscribable: false
                    custom: false
                    rpc_enabled: true
                    rpc_rate_per_minute: 600
                    rpc_method_credits:
                      getEvents: 2
                      getFeeStats: 1
                      getHealth: 1
                      getLatestLedger: 1
                      getLedgerEntries: 2
                      getLedgers: 2
                      getNetwork: 1
                      getTransaction: 1
                      getTransactions: 2
                      getVersionInfo: 1
                      sendTransaction: 2
                      simulateTransaction: 5
                    rpc_response_bytes_per_credit: 65536
                    max_webhook_endpoints: 50
                    free_testnet_webhooks: 0
                    free_testnet_daily_deliveries: 0
                    testnet_free: true
                    testnet_daily_requests: 10000
                  - name: scale
                    monthly_fee_cents: 49900
                    included_credits: 64000000
                    rate_per_minute: 6000
                    max_page_size: 200
                    account_max_page_size: 1000
                    deep_history: true
                    hard_cap: false
                    overage_per_1k_cents: 1
                    subscribable: false
                    custom: false
                    rpc_enabled: true
                    rpc_rate_per_minute: 1200
                    rpc_method_credits:
                      getEvents: 2
                      getFeeStats: 1
                      getHealth: 1
                      getLatestLedger: 1
                      getLedgerEntries: 2
                      getLedgers: 2
                      getNetwork: 1
                      getTransaction: 1
                      getTransactions: 2
                      getVersionInfo: 1
                      sendTransaction: 2
                      simulateTransaction: 5
                    rpc_response_bytes_per_credit: 65536
                    max_webhook_endpoints: 250
                    free_testnet_webhooks: 0
                    free_testnet_daily_deliveries: 0
                    testnet_free: true
                    testnet_daily_requests: 10000
                  - name: enterprise
                    monthly_fee_cents: 0
                    included_credits: 0
                    rate_per_minute: 30000
                    max_page_size: 200
                    account_max_page_size: 1000
                    deep_history: true
                    hard_cap: false
                    overage_per_1k_cents: 0
                    subscribable: false
                    custom: true
                    rpc_enabled: true
                    rpc_rate_per_minute: 10000
                    rpc_method_credits:
                      getEvents: 2
                      getFeeStats: 1
                      getHealth: 1
                      getLatestLedger: 1
                      getLedgerEntries: 2
                      getLedgers: 2
                      getNetwork: 1
                      getTransaction: 1
                      getTransactions: 2
                      getVersionInfo: 1
                      sendTransaction: 2
                      simulateTransaction: 5
                    rpc_response_bytes_per_credit: 65536
                    max_webhook_endpoints: 0
                    free_testnet_webhooks: 0
                    free_testnet_daily_deliveries: 0
                    testnet_free: true
                    testnet_daily_requests: null
          headers:
            X-Request-Id:
              description: >-
                Identifier of this request: req_ followed by 24 hex characters.
                Error bodies repeat it as request_id. Quote it when contacting
                support.
              schema:
                type: string
                pattern: ^req_[0-9a-f]{24}$
        '405':
          $ref: '#/components/responses/HTTP405_19'
        '429':
          $ref: '#/components/responses/HTTP429_4'
      security: []
      x-codeSamples:
        - lang: bash
          label: cURL
          source: curl --fail-with-body -sS 'https://api-testnet.lumeus.dev/v1/plans'
        - lang: javascript
          label: JavaScript
          source: |-
            // Node 18+ (ES module)
            const res = await fetch('https://api-testnet.lumeus.dev/v1/plans', {
              method: 'GET',
            });
            console.log(res.status, JSON.stringify(await res.json(), null, 2));
        - lang: python
          label: Python
          source: |-
            import json

            import requests

            res = requests.get(
                "https://api-testnet.lumeus.dev/v1/plans",
                timeout=30,
            )
            print(res.status_code, json.dumps(res.json(), indent=2))
components:
  responses:
    HTTP405_19:
      description: >-
        This path does not accept the HTTP method you sent (code
        method_not_allowed). The Allow header lists the methods it accepts.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            code: method_not_allowed
            error: 'method POST is not allowed on /v1/plans; allowed: GET, HEAD'
            request_id: req_6f1c2a9b0e4d4c7a8b3f5e21
      headers:
        X-Request-Id:
          description: >-
            Identifier of this request: req_ followed by 24 hex characters.
            Error bodies repeat it as request_id. Quote it when contacting
            support.
          schema:
            type: string
            pattern: ^req_[0-9a-f]{24}$
    HTTP429_4:
      description: >-
        The rate limit of this route was reached (code rate_limited). Wait
        Retry-After seconds. This route does not count toward the daily Testnet
        request cap, so its Retry-After is never the time until 00:00 UTC.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            code: rate_limited
            error: rate limit exceeded
            request_id: req_6f1c2a9b0e4d4c7a8b3f5e21
      headers:
        X-Request-Id:
          description: >-
            Identifier of this request: req_ followed by 24 hex characters.
            Error bodies repeat it as request_id. Quote it when contacting
            support.
          schema:
            type: string
            pattern: ^req_[0-9a-f]{24}$
        Retry-After:
          description: Seconds to wait before retrying.
          schema:
            type: integer
  schemas:
    Error:
      type: object
      properties:
        error:
          type: string
          description: Human-readable message. It may change; branch on code.
        code:
          type: string
          description: >-
            Machine-readable error code. Branch on code, not on the error text,
            which may change. RPC carries the same codes as the string
            error.data of a JSON-RPC error. invalid_request: 400: invalid input,
            including a malformed Idempotency-Key or an unknown or repeated
            query parameter (Webhooks also uses it for an oversized request
            body, 413). Fix the request; do not retry unchanged. unauthorized:
            401: missing, revoked, invalid or wrong-network credential.
            payment_required: 402 (Mainnet): monthly credit quota exhausted on a
            hard-capped plan. forbidden: 403: the key or account policy does not
            allow this action. not_found: 404 (Webhooks also 410): the resource
            does not exist in this organization and network.
            topic_search_disabled: 404: contract-event topic search is not
            enabled on this network. method_not_allowed: 405: the route does not
            accept this method. conflict: 409: conflicting request identity,
            idempotency key, funding or recovery state. generation_changed: 409:
            the index generation or network changed since the snapshot was
            taken; restart the walk without generation and snapshot_ledger.
            history_unavailable: 409 (Assets): as_of_ledger is not answered from
            the balance history; start a snapshot job (POST /snapshots) or retry
            later. precondition_failed: 412 (Webhooks): the subscription version
            changed; fetch the current ETag. response_too_large: 413: the result
            exceeds the response budget; lower limit or narrow the request.
            precondition_required: 428 (Webhooks): If-Match with the
            subscription ETag is required. rate_limited: 429: a rate,
            concurrency or credit-cap limit was reached, or (Activity, Assets
            and RPC on Testnet) the daily Testnet request cap (message `daily
            Testnet request cap of 10000 reached; resets at 00:00 UTC`,
            Retry-After until 00:00 UTC). Wait Retry-After seconds (a refused
            request consumes nothing). A Retry-After greater than 60 means the
            daily Testnet cap: wait until 00:00 UTC or switch to Mainnet. RPC
            carries it as the string error.data. internal_error: 500 or another
            unexpected 5xx; quote request_id when contacting support.
            not_implemented: 501: the feature is not enabled on this host. busy:
            503: reads are saturated (the queue wait expired or the database
            refused another query or ran short of memory). Retry the same
            request after Retry-After (2) seconds. query_timeout: 503: the read
            ran out of time. Do not retry unchanged right away: narrow the
            ledger range (since_ledger/until_ledger) or lower limit; Retry-After
            is 30. index_not_ready: 503: the index or snapshot is not ready yet
            or is rebuilding; retry after Retry-After seconds. topic_coverage:
            503: the effective range is outside the contract-event topic index
            coverage (the message states it); pass a range inside it or retry
            after Retry-After (60) seconds. unavailable: 503: another temporary
            failure (billing, rate limiter, queue); retry after Retry-After
            seconds.
          enum:
            - invalid_request
            - unauthorized
            - payment_required
            - forbidden
            - not_found
            - topic_search_disabled
            - method_not_allowed
            - conflict
            - generation_changed
            - history_unavailable
            - precondition_failed
            - response_too_large
            - precondition_required
            - rate_limited
            - internal_error
            - not_implemented
            - busy
            - query_timeout
            - index_not_ready
            - topic_coverage
            - unavailable
        request_id:
          type: string
          description: >-
            Identifier of this request, the same value as the X-Request-Id
            header. Quote it when contacting support.
      required:
        - error
  securitySchemes:
    Bearer:
      type: http
      scheme: bearer
      description: >-
        Send `Authorization: Bearer <key>`. Testnet: `lum_test_…`; Mainnet:
        `lum_live_…`. A key works only on its own network, so pick the server
        that matches it (the other network answers 401). Publishable `lum_pub_…`
        keys call the GET data routes only, from an allowed browser origin.
        Webhook keys (`whk_…`) are not accepted here.

````

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