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

# List packages

> Retrieve a paginated list of proxy packages accessible to the API key. If the key is restricted to specific packages, only those are returned. Use cursor-based pagination: pass the `next_cursor` value from one response as the `cursor` parameter of the next request until `has_more` is `false`. Traffic values are in bytes.

Requires the `proxy:packages:read` scope.



## OpenAPI

````yaml api/openapi.json GET /v1/proxy/packages
openapi: 3.1.0
info:
  title: SOAX API
  version: v1
  description: >-
    Programmatic access to your SOAX account: manage proxy packages, generate
    connection strings, browse available locations, pull usage analytics, and
    manage API keys. All endpoints are served over HTTPS and return JSON.
servers:
  - url: https://api.platform.soax.com
security:
  - bearerAuth: []
tags:
  - name: API Keys
    description: >-
      Self-service management of the API keys used to authenticate with this
      API.
  - name: Packages
    description: >-
      Read proxy packages, build proxy connection strings, and rotate package
      passwords.
  - name: Locations
    description: >-
      Location reference data: tiers, countries, regions, cities, ISPs, ASNs,
      and ZIP codes.
  - name: Account
    description: Read-only account, credit, and subscription information.
  - name: Analytics
    description: Usage analytics for your proxy packages.
paths:
  /v1/proxy/packages:
    get:
      tags:
        - Packages
      summary: List proxy packages
      description: >-
        Retrieve a paginated list of proxy packages accessible to the API key.
        If the key is restricted to specific packages, only those are returned.
        Use cursor-based pagination: pass the `next_cursor` value from one
        response as the `cursor` parameter of the next request until `has_more`
        is `false`. Traffic values are in bytes.


        Requires the `proxy:packages:read` scope.
      operationId: list_organization_packages_v1_proxy_packages_get
      parameters:
        - name: cursor
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            title: Cursor
            description: >-
              Opaque pagination cursor from a previous response's `next_cursor`.
              Omit for the first page.
          description: >-
            Opaque pagination cursor from a previous response's `next_cursor`.
            Omit for the first page.
        - name: limit
          in: query
          required: false
          schema:
            type: integer
            maximum: 100
            minimum: 1
            default: 20
            title: Limit
            description: Number of packages per page (1–100).
          description: Number of packages per page (1–100).
        - name: status
          in: query
          required: false
          schema:
            anyOf:
              - type: string
                enum:
                  - active
                  - deleted
                  - limited
                  - paused
                  - suspended
              - type: 'null'
            title: Status
            description: >-
              Filter by package status. A single value only — comma-separated
              lists are rejected with 400.
          description: >-
            Filter by package status. A single value only — comma-separated
            lists are rejected with 400.
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProxyPackagesListResponse'
              example:
                data:
                  - id: b2f0c3d4-e5a6-4b7c-8d9e-0f1a2b3c4d5e
                    name: Residential - EU scraping
                    status: active
                    status_reason: null
                    created_at: '2026-03-15T12:00:00Z'
                    types:
                      - wifi
                    tiers:
                      - 1
                      - 2
                      - 3
                    allowed_countries: null
                    traffic_limit: 500000000000
                    traffic_spent: 120000000000
                    traffic_left: 380000000000
                  - id: 9d8c7b6a-5f4e-4d3c-2b1a-0e9f8d7c6b5a
                    name: Mobile - US
                    status: limited
                    status_reason: traffic_limit_reached
                    created_at: '2026-05-02T08:30:00Z'
                    types:
                      - mobile
                    tiers:
                      - 1
                    allowed_countries:
                      - us
                    traffic_limit: 100000000000
                    traffic_spent: 100000000000
                    traffic_left: 0
                has_more: false
                next_cursor: null
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/ForbiddenScope'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
        '429':
          $ref: '#/components/responses/RateLimited'
components:
  schemas:
    ProxyPackagesListResponse:
      properties:
        data:
          items:
            $ref: '#/components/schemas/ProxyPackageResponse'
          type: array
          title: Data
        has_more:
          type: boolean
          title: Has More
        next_cursor:
          anyOf:
            - type: string
            - type: 'null'
          title: Next Cursor
      type: object
      required:
        - data
        - has_more
      title: ProxyPackagesListResponse
      description: Public response model for listing proxy packages with pagination.
    HTTPValidationError:
      properties:
        detail:
          items:
            $ref: '#/components/schemas/ValidationError'
          type: array
          title: Detail
      type: object
      title: HTTPValidationError
    ProxyPackageResponse:
      properties:
        id:
          type: string
          title: Id
        name:
          type: string
          title: Name
        status:
          type: string
          title: Status
          description: >-
            Display status: `active`, `paused` (manually paused), `limited`
            (traffic limit reached), `suspended`, or `deleted`.
        status_reason:
          anyOf:
            - type: string
            - type: 'null'
          title: Status Reason
          description: >-
            Why the package is not active: `user_paused`,
            `traffic_limit_reached`, `out_of_credits`, `account_suspended`,
            `plan_limit_exceeded`, or `null`.
        created_at:
          anyOf:
            - type: string
              format: date-time
            - type: 'null'
          title: Created At
        types:
          items:
            $ref: '#/components/schemas/ProxyPackageType'
          type: array
          title: Types
          default: []
        tiers:
          items:
            type: integer
          type: array
          title: Tiers
          default: []
        allowed_countries:
          anyOf:
            - items:
                type: string
              type: array
            - type: 'null'
          title: Allowed Countries
        traffic_limit:
          anyOf:
            - type: integer
            - type: 'null'
          title: Traffic Limit
        traffic_spent:
          anyOf:
            - type: integer
            - type: 'null'
          title: Traffic Spent
        traffic_left:
          anyOf:
            - type: integer
            - type: 'null'
          title: Traffic Left
          description: Calculate the remaining traffic for the package.
          readOnly: true
      type: object
      required:
        - id
        - name
        - status
        - traffic_left
      title: ProxyPackageResponse
      description: Public response model for a single proxy package.
    ValidationError:
      properties:
        loc:
          items:
            anyOf:
              - type: string
              - type: integer
          type: array
          title: Location
        msg:
          type: string
          title: Message
        type:
          type: string
          title: Error Type
      type: object
      required:
        - loc
        - msg
        - type
      title: ValidationError
    ProxyPackageType:
      type: string
      enum:
        - mix
        - wifi
        - mobile
      title: ProxyPackageType
  responses:
    BadRequest:
      description: >-
        A parameter value is invalid. Depending on which validation layer
        rejects the request, the message is under `detail` (endpoint-level
        checks) or `error` (service-level checks); read `detail ?? error`. The
        message names the parameter and lists valid values where applicable.
      content:
        application/json:
          schema:
            type: object
            properties:
              detail:
                type: string
              error:
                type: string
          example:
            detail: >-
              Invalid status value: archived. Valid values are: active, deleted,
              limited, paused, suspended
    Unauthorized:
      description: Missing, invalid, or revoked API key.
      content:
        application/json:
          schema:
            type: object
            properties:
              detail:
                type: string
          example:
            detail: Invalid API key
    ForbiddenScope:
      description: The API key does not carry the scope this endpoint requires.
      content:
        application/json:
          schema:
            type: object
            properties:
              detail:
                type: string
          example:
            detail: 'Missing required scope: proxy:packages:read'
    RateLimited:
      description: >-
        Rate limit exceeded (5 requests/second per API key, 500 requests/minute
        per IP). The response includes `Retry-After` (seconds),
        `RateLimit-Limit`, `RateLimit-Remaining`, and `RateLimit-Reset` (Unix
        time) headers — wait `Retry-After` seconds and retry.
      content:
        application/json:
          schema:
            type: object
            properties:
              error:
                type: string
          example:
            error: 'Rate limit exceeded: 5 per 1 second'
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: >-
        API key secret (starts with `s_live_`). Create keys in the dashboard
        under **Settings → API keys**, or via `POST /v1/api-keys/`. Send it as
        `Authorization: Bearer <secret>`.

````