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

# List migrations

> Migration history for your organisation, newest first (up to 100 runs).

History is served from Vortex IQ's durable store rather than the engine's own volume, so finished runs remain readable long after their run containers are torn down. The `X-Read-Source` response header records which store served the read (`opensearch`, `mysql`, or `engine`) and is informational only.



## OpenAPI

````yaml vortex-apps/staging-pro/api/openapi.json GET /migrations
openapi: 3.1.0
info:
  title: StagingPro V2 Migration API (BigCommerce)
  version: 2.0.0
  description: >-
    REST API for the StagingPro V2 BC Migration app. Browse a connected store's
    catalogue, size a migration before you run it, launch bulk or selective
    store-to-store migrations, control runs, and follow live progress.


    All endpoints are served from `https://app.vortexiq.ai/v2/api/bc-migration`
    and are scoped to your organisation. Authenticate with a bearer token from
    the Login endpoint (scripts and services) or your signed-in session
    (browser). See
    [Authentication](/vortex-apps/staging-pro/api/authentication).
  contact:
    name: Vortex IQ Support
    url: https://www.vortexiq.ai/contact-us
servers:
  - url: https://app.vortexiq.ai/v2/api/bc-migration
    description: Vortex IQ platform (production)
security:
  - sessionAuth: []
  - bearerAuth: []
tags:
  - name: Authentication
    description: >-
      Exchange your identity and your organisation's API credential for a bearer
      token.
  - name: Migrations
    description: >-
      Create migrations, list history, read run detail and per-item issues, and
      follow live progress.
  - name: Migration Controls
    description: Pause, resume, cancel, and verify-only re-runs.
  - name: Counts & Forecast
    description: Size a migration before launching it. Neither endpoint creates a run.
paths:
  /migrations:
    get:
      tags:
        - Migrations
      summary: List migrations
      description: >-
        Migration history for your organisation, newest first (up to 100 runs).


        History is served from Vortex IQ's durable store rather than the
        engine's own volume, so finished runs remain readable long after their
        run containers are torn down. The `X-Read-Source` response header
        records which store served the read (`opensearch`, `mysql`, or `engine`)
        and is informational only.
      operationId: listMigrations
      responses:
        '200':
          description: Migration summaries.
          headers:
            X-Read-Source:
              description: >-
                Which store served this read: `opensearch`, `mysql`, or
                `engine`. Observability only.
              schema:
                type: string
                enum:
                  - opensearch
                  - mysql
                  - engine
          content:
            application/json:
              schema:
                type: object
                properties:
                  migrations:
                    type: array
                    items:
                      $ref: '#/components/schemas/MigrationSummary'
        '403':
          $ref: '#/components/responses/Forbidden'
components:
  schemas:
    MigrationSummary:
      type: object
      description: One row of migration history.
      properties:
        requestId:
          type: string
        platform:
          type: string
        source:
          $ref: '#/components/schemas/StoreRef'
        destination:
          $ref: '#/components/schemas/StoreRef'
        mode:
          type: string
          enum:
            - full
            - dry-run
            - verify
            - counts
        status:
          $ref: '#/components/schemas/MigrationStatus'
        autoHeal:
          type: boolean
        selective:
          type: boolean
          description: >-
            True when the run used a selection — shown as Selective rather than
            Bulk.
        sourceStorefront:
          type:
            - string
            - 'null'
        destStorefront:
          type:
            - string
            - 'null'
        selectedEntities:
          type: array
          items:
            type: string
        summary:
          type:
            - string
            - 'null'
          description: One-line outcome summary.
        startedAt:
          type:
            - string
            - 'null'
          format: date-time
        completedAt:
          type:
            - string
            - 'null'
          format: date-time
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
        forecast:
          oneOf:
            - $ref: '#/components/schemas/Forecast'
            - type: 'null'
    StoreRef:
      type: object
      properties:
        hash:
          type: string
        label:
          type: string
    MigrationStatus:
      type: string
      enum:
        - queued
        - in_progress
        - paused
        - completed
        - failed
        - cancelled
        - partial_completed
      description: '`completed`, `failed`, and `cancelled` are terminal.'
    Forecast:
      type: object
      description: >-
        Sizing and ETA estimate.


        Sizing and ETA are priced from different bases deliberately: the ETA
        follows the run's real scope (picks, strategy, order statuses), while
        memory is pinned to **store scale** — the engine's working set does not
        shrink with a small pick, so sizing on picked counts alone would
        under-provision the run.
      properties:
        products:
          type: integer
        variants:
          type: integer
        brands:
          type: integer
        categories:
          type: integer
        counts:
          type: object
          additionalProperties:
            type: integer
          description: >-
            Per-entity counts the estimate was priced from, scoped by
            `selection` when supplied.
        estimated:
          type: array
          items:
            type: string
          description: Count keys that are sampled estimates rather than exact totals.
        memMB:
          type: integer
          description: >-
            Memory the run will be given (MiB). Pinned to store scale, not to
            the picked subset.
        cpus:
          type: number
          description: CPUs the run will be given.
        etaSeconds:
          type: integer
          description: Estimated total wall-clock for the run.
        etaBreakdown:
          type: object
          additionalProperties:
            type: number
          description: Per-phase seconds.
        etaAssumedRttMs:
          type: number
          description: The blended latency the estimate assumed.
        etaAssumedMs:
          type: object
          description: >-
            Per-operation-class latencies the estimate assumed, so heavy writes
            are not judged against a blended baseline.
          properties:
            read:
              type: number
            write:
              type: number
            heavy:
              type: number
        strategy:
          type: string
          enum:
            - skip
            - update
            - replace
          description: >-
            The conflict strategy the ETA was priced with. Absent means
            create-only.
        destProducts:
          type: integer
          description: >-
            Destination catalogue size at kickoff. Absent or `0` when the
            destination wasn't known.
        tier:
          type: string
          enum:
            - small
            - medium
            - large
            - xlarge
            - xxlarge
            - xxxlarge
          description: Capacity band the run was placed in.
        basis:
          type: string
          enum:
            - forecast
            - fallback
            - fix
          description: '`fallback` means counts were unavailable and defaults were used.'
        at:
          type: string
          format: date-time
    Error:
      type: object
      properties:
        error:
          type: string
          description: Machine-readable error code.
        message:
          type: string
          description: Human-readable explanation.
        status:
          type: integer
          description: 'Present on `bc_error`: the status BigCommerce returned.'
        errors:
          type: object
          additionalProperties: true
          description: 'Present on validation failures: field-level messages.'
  responses:
    Forbidden:
      description: >-
        Store Migration is not enabled for your organisation. Requests with no
        valid bearer token or session return `401` instead.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            message: Store Migration is not enabled for this organization.
  securitySchemes:
    sessionAuth:
      type: apiKey
      in: cookie
      name: vortexiq_session
      description: >-
        Your signed-in Vortex IQ session (browser calls). Requests are scoped to
        your organisation, which must have Store Migration enabled. For
        server-to-server calls use a bearer token instead — see
        [Authentication](/vortex-apps/staging-pro/api/authentication).
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: >-
        A bearer token from [Login](/vortex-apps/staging-pro/api/login). Valid
        for 10 days; scoped to the user and organisation it was issued for.
        Rotating or disabling the organisation's API credential immediately
        invalidates all outstanding tokens.

````