Elastic Path Jobs API

Jobs manage the indexing operations for catalog search. When catalogs are published or when reindexing is required, jobs process the product data and build search indexes. ### Job Types | Type | Description | |---------------------------|-----------------------------------------------------------------------------------------------------| | `index-release` | Index a specific catalog release. Created automatically when a search-enabled catalog is published. | | `delete-release` | Remove the search index for a catalog release. | | `reindex-tenant-releases` | Reindex all catalog releases for the store. Use when indexable fields have changed. | ### Job Lifecycle Jobs progress through the following states: 1. **pending**: Job has been created and is waiting to be processed 2. **processing**: Job is actively indexing products 3. **complete**: Job finished successfully 4. **failed**: Job encountered an error ### Automatic Indexing When you publish a catalog with search enabled, an `index-release` job is automatically created. The catalog release remains in a publishing state until the indexing job completes successfully. ### Manual Reindexing Use the reindex endpoint when: - You've added, modified, or deleted indexable fields - Search indexes are out of sync (check via [Search Indexes](/docs/api/pxm/catalog-search/search-indexes)) - You need to rebuild indexes after a failure The reindex operation creates jobs for all catalog releases that need updating. You can optionally force a full reindex of all releases regardless of their sync status. ### Conflict Handling Only one reindexing operation can run at a time. If you attempt to start a reindex while another is in progress, the API returns a 409 Conflict error.

OpenAPI Specification

elastic-path-jobs-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  version: 25.1126.6886238
  x-version-timestamp: 2025-11-26 19:10:23+00:00
  title: Addresses Introduction Account Addresses Jobs API
  description: 'The Addresses API allows you to organize account addresses. Addresses are a sub-resource of `account` resources, an account can have multiple addresses, such as home, work, and neighbour.


    You can use an account address with either [client_credentials access token](/docs/api/authentication/create-an-access-token) or a combination of [implicit access token](/docs/api/authentication/create-an-access-token) and [Account Management authentication](/docs/api/accounts/post-v-2-account-members-tokens) token.

    '
  contact:
    name: Elastic Path
    url: https://www.elasticpath.com
    email: support@elasticpath.com
  license:
    url: https://elasticpath.dev
    name: MIT
servers:
- url: https://useast.api.elasticpath.com
  description: US East
- url: https://euwest.api.elasticpath.com
  description: EU West
security:
- BearerToken: []
tags:
- name: Jobs
  description: 'Jobs manage the indexing operations for catalog search. When catalogs are published or when reindexing is required, jobs process the product data and build search indexes.


    ### Job Types


    | Type                      | Description                                                                                         |

    |---------------------------|-----------------------------------------------------------------------------------------------------|

    | `index-release`           | Index a specific catalog release. Created automatically when a search-enabled catalog is published. |

    | `delete-release`          | Remove the search index for a catalog release.                                                      |

    | `reindex-tenant-releases` | Reindex all catalog releases for the store. Use when indexable fields have changed.                 |


    ### Job Lifecycle


    Jobs progress through the following states:


    1. **pending**: Job has been created and is waiting to be processed

    2. **processing**: Job is actively indexing products

    3. **complete**: Job finished successfully

    4. **failed**: Job encountered an error


    ### Automatic Indexing


    When you publish a catalog with search enabled, an `index-release` job is automatically created. The catalog release remains in a publishing state until the indexing job completes successfully.


    ### Manual Reindexing


    Use the reindex endpoint when:


    - You''ve added, modified, or deleted indexable fields

    - Search indexes are out of sync (check via [Search Indexes](/docs/api/pxm/catalog-search/search-indexes))

    - You need to rebuild indexes after a failure


    The reindex operation creates jobs for all catalog releases that need updating. You can optionally force a full reindex of all releases regardless of their sync status.


    ### Conflict Handling


    Only one reindexing operation can run at a time. If you attempt to start a reindex while another is in progress, the API returns a 409 Conflict error.

    '
paths:
  /pcm/catalogs/reindex-releases:
    post:
      tags:
      - Jobs
      operationId: ReindexTenantReleases
      summary: Reindex all releases for tenant
      description: Create a new job to reindex all releases for the tenant.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ReindexTenantReleasesJobRequest'
      responses:
        '200':
          description: Reindex tenant releases request successful
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Job'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Conflict - another reindexing job already queued or in progress
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /v2/jobs:
    get:
      tags:
      - Jobs
      summary: Get All Jobs
      description: You can use this endpoint to display the status of your jobs.
      operationId: getMultipleJobs
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/Job_2'
              examples:
                default:
                  value:
                    data:
                    - id: 974c9db4-38da-4dbf-90c2-33eed5f3e77c
                      type: job
                      job_type: order_export
                      status: failed
                      error: No results matched the supplied filter
                      link:
                        href: ''
                      links:
                        self: https://useast.api.elasticpath.com/v2/jobs/974c9db4-38da-4dbf-90c2-33eed5f3e77c
                      timestamps:
                        created_at: '2018-10-04T11:08:49.156490335Z'
                        updated_at: '2018-10-04T11:08:49.162867081Z'
        '500':
          $ref: '#/components/responses/InternalServerError_2'
    post:
      tags:
      - Jobs
      summary: Create Job
      description: Create a Job to export orders to a CSV file. Jobs automatically expire one week after creation. You must fetch the exported data before the jobs expire.
      operationId: createJob
      requestBody:
        content:
          application/json:
            schema:
              allOf:
              - $ref: '#/components/schemas/CreateJob'
              - examples:
                - data:
                    description: Extends the default product object
                    enabled: true
                    name: Products
                    slug: products
                    type: flow
              contentMediaType: application/json
            examples:
              default:
                value:
                  data:
                    filter: gt(created_at,2018-09-01):lt(created_at,2018-10-01):eq(payment,refunded)
                    job_type: order_export
                    type: job
        required: true
      responses:
        '202':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/Job_2'
              examples:
                default:
                  value:
                    data:
                    - id: 974c9db4-38da-4dbf-90c2-33eed5f3e77c
                      type: job
                      job_type: order_export
                      status: failed
                      error: No results matched the supplied filter
                      link:
                        href: ''
                      links:
                        self: https://useast.api.elasticpath.com/v2/jobs/974c9db4-38da-4dbf-90c2-33eed5f3e77c
                      timestamps:
                        created_at: '2018-10-04T11:08:49.156490335Z'
                        updated_at: '2018-10-04T11:08:49.162867081Z'
        '500':
          $ref: '#/components/responses/InternalServerError_2'
  /v2/jobs/{jobID}:
    get:
      tags:
      - Jobs
      summary: Get a Job
      description: Retrieves the specified job.
      operationId: getAJob
      parameters:
      - name: jobID
        description: The unique identifier of the requested job.
        in: path
        required: true
        style: simple
        schema:
          type: string
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: '#/components/schemas/Job_2'
              examples:
                default:
                  value:
                    data:
                      id: 974c9db4-38da-4dbf-90c2-33eed5f3e77c
                      type: job
                      job_type: order_export
                      status: failed
                      error: No results matched the supplied filter
                      link:
                        href: ''
                      links:
                        self: https://useast.api.elasticpath.com/v2/jobs/974c9db4-38da-4dbf-90c2-33eed5f3e77c
                      timestamps:
                        created_at: '2018-10-04T11:08:49.156490335Z'
                        updated_at: '2018-10-04T11:08:49.162867081Z'
        '404':
          $ref: '#/components/responses/NotFoundError'
        '500':
          $ref: '#/components/responses/InternalServerError_2'
  /v2/jobs/{jobID}/file:
    get:
      tags:
      - Jobs
      summary: Get a Job File
      description: Retrieves a link to the CSV file that contains your exported order.
      operationId: getAJobFile
      parameters:
      - name: jobID
        description: The unique identifier of the job whose CSC file you want to retrieve.
        in: path
        required: true
        style: simple
        schema:
          type: string
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: '#/components/schemas/FileLink'
        '404':
          $ref: '#/components/responses/NotFoundError'
        '500':
          $ref: '#/components/responses/InternalServerError_2'
  /pcm/jobs:
    get:
      summary: Get All Jobs
      description: The jobs endpoints displays the status of a number of endpoints that function as jobs, for example, product import and export, price book import, building child products, and duplicating hierarchies.
      operationId: getAllJobs
      tags:
      - Jobs
      responses:
        '200':
          description: Returns all the jobs.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/multi'
              examples:
                completed:
                  summary: Get all jobs
                  $ref: '#/components/examples/multi'
        '400':
          $ref: '#/components/responses/bad_request'
        '404':
          $ref: '#/components/responses/not_found'
        '422':
          $ref: '#/components/responses/unprocessable_entity'
        '500':
          $ref: '#/components/responses/internal'
  /pcm/jobs/{jobID}:
    get:
      summary: Get a Job
      operationId: getJob
      tags:
      - Jobs
      parameters:
      - $ref: '#/components/parameters/job_id'
      responses:
        '200':
          description: Returns a job with the following attributes.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/single'
              examples:
                started:
                  summary: Started Job
                  $ref: '#/components/examples/started'
                successful:
                  summary: Product Import Job
                  $ref: '#/components/examples/successful'
                product-export:
                  summary: Product Export Job
                  $ref: '#/components/examples/product-export'
                hierarchy-duplicate:
                  summary: Hierarchy Duplicate Job
                  $ref: '#/components/examples/hierarchy-duplicate'
                build-child-products:
                  summary: Build Child Products Job
                  $ref: '#/components/examples/build-child-products'
        '400':
          $ref: '#/components/responses/bad_request'
        '404':
          $ref: '#/components/responses/not_found'
        '422':
          $ref: '#/components/responses/unprocessable_entity'
        '500':
          $ref: '#/components/responses/internal'
  /pcm/jobs/{jobID}/cancel:
    post:
      summary: Cancel a Job
      description: 'The jobs endpoints display the status of a number of endpoints that function as jobs, for example, product import and export, and duplicating hierarchies.


        Jobs are processed one at a time. You can continue to send job requests, but those jobs are queued. In other words, Commerce looks for any jobs that have a status of PENDING and starts the job with the earliest created date. If you decide that a specific job needs to be prioritized over another, you can cancel the less critical job using the `Cancel a job` endpoint. You can only cancel jobs whose status is PENDING.

        '
      operationId: cancelJob
      tags:
      - Jobs
      requestBody:
        content:
          application/json:
            schema:
              type: object
      parameters:
      - $ref: '#/components/parameters/job_id'
      responses:
        '200':
          description: Successfully cancelled job
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/single'
              examples:
                cancelled:
                  summary: Cancelled Job
                  $ref: '#/components/examples/cancelled'
        '400':
          $ref: '#/components/responses/bad_request'
        '404':
          $ref: '#/components/responses/not_found'
        '422':
          $ref: '#/components/responses/unprocessable_entity'
        '500':
          $ref: '#/components/responses/internal'
  /pcm/jobs/{jobID}/errors:
    get:
      summary: Get Job Errors
      operationId: getJobErrors
      tags:
      - Jobs
      parameters:
      - $ref: '#/components/parameters/job_id'
      responses:
        '200':
          description: Successful
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/errors'
              examples:
                errors:
                  summary: Errors Returned
                  $ref: '#/components/examples/errors'
        '400':
          $ref: '#/components/responses/bad_request'
        '404':
          $ref: '#/components/responses/not_found'
        '422':
          $ref: '#/components/responses/unprocessable_entity'
        '500':
          $ref: '#/components/responses/internal'
  /v2/subscriptions/jobs:
    parameters:
    - $ref: '#/components/parameters/Filter'
    post:
      tags:
      - Jobs
      summary: Create a job
      operationId: CreateJob
      requestBody:
        content:
          application/json:
            schema:
              type: object
              title: JobCreateJSON
              required:
              - data
              properties:
                data:
                  $ref: '#/components/schemas/JobCreate'
      responses:
        '201':
          description: Success. The job was created.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: '#/components/schemas/Job_3'
        '400':
          $ref: '#/components/responses/ValidationError'
        '409':
          $ref: '#/components/responses/WriteConflictError'
        '500':
          $ref: '#/components/responses/InternalServerError'
    get:
      tags:
      - Jobs
      summary: List jobs
      description: "Retrieves a list of all jobs.\n\n### Filtering\n\nThis endpoint supports filtering. For the general syntax, see [**Filtering**](/guides/Getting-Started/filtering).\n\nThe following attributes and operators are supported.\n\n| Operator | Attribute | Description |\n| --- | --- | --- | \n| `eq` | `external_ref` | Equals. Checks if the values of two operands are equal. If they are, the condition is true. |\n| `in` | `external_ref` | In. Checks if the value is in the specified list. If it is, the condition is true. |\n"
      parameters:
      - $ref: '#/components/parameters/PageOffset'
      - $ref: '#/components/parameters/PageLimit'
      operationId: ListJobs
      responses:
        '200':
          description: Success. A list of jobs is returned.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/Job_3'
                  links:
                    $ref: '#/components/schemas/Links_2'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /v2/subscriptions/jobs/{job_uuid}:
    parameters:
    - name: job_uuid
      in: path
      description: The unique identifier of the job.
      required: true
      schema:
        $ref: '#/components/schemas/UUID_2'
    get:
      tags:
      - Jobs
      summary: Get job
      operationId: GetJob
      responses:
        '200':
          description: Success. The job is returned.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: '#/components/schemas/Job_3'
        '400':
          $ref: '#/components/responses/ValidationError'
        '404':
          $ref: '#/components/responses/NotFoundError_2'
        '500':
          $ref: '#/components/responses/InternalServerError'
    delete:
      tags:
      - Jobs
      summary: Delete job
      operationId: DeleteJob
      responses:
        '204':
          description: Success. The job was deleted.
        '409':
          $ref: '#/components/responses/WriteConflictError'
components:
  responses:
    NotFoundError:
      description: Forbidden. The operation is forbidden on this entity.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
            example:
              title: Resource Not Found
              status: 404
              detail: The resource you are requesting does not exist
    WriteConflictError:
      description: Write conflict. Unable to perform the operation at this time.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            errors:
            - title: Write Conflict
              status: '409'
    NotFoundError_2:
      description: Not found. The requested entity does not exist.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          examples:
            not-found:
              value:
                errors:
                - title: Not Found
                  status: '404'
                  detail: No plan found
    internal:
      description: Internal server error. There was a system failure in the platform.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/error'
          examples:
            internal-server-error:
              value:
                errors:
                - status: '500'
                  title: Internal Server Error
                  detail: There was an internal server error, you can report with your request id.
                  request_id: 635da56d-75a1-43cd-b696-7ab119756b3a
    unprocessable_entity:
      description: Bad request. The request failed validation.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/error'
          examples:
            failed-validation:
              value:
                errors:
                - title: Failed Validation
                  status: '422'
                  detail: <XYZ> can not be empty
    ValidationError:
      description: Bad request. The request failed validation.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          examples:
            missing-name:
              value:
                errors:
                - title: Validation Error
                  status: '400'
                  detail: 'data.attributes.name: "name" is required'
    InternalServerError:
      description: Internal server error. There was a system failure in the platform.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          examples:
            internal-server-error:
              value:
                errors:
                - title: Internal Server Error
                  status: '500'
    InternalServerError_2:
      description: Internal server error. There was a system failure in the platform.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          examples:
            internal-server-error:
              value:
                errors:
                - status: 500
                  title: Internal Server Error
                  detail: There was an internal server error, you can report with your request id.
                  request_id: 635da56d-75a1-43cd-b696-7ab119756b3a
    bad_request:
      description: Bad request. The request failed validation.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/error'
          examples:
            bad-request:
              value:
                errors:
                - title: Bad Request
                  detail: Could not parse the supplied filter
                  status: '400'
    not_found:
      description: Bad Request. Not Found.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/error'
          examples:
            internal-server-error:
              value:
                errors:
                - title: Not Found
                  status: '404'
  schemas:
    Timestamps:
      type: object
      description: The date and time a job is created/updated.
      properties:
        created_at:
          description: The date and time a job is created.
          type: string
          example: '2018-10-04T11:08:49.156490335Z'
        updated_at:
          description: The date and time a job is updated.
          type: string
          example: '2018-10-04T11:08:49.162867081Z'
    SubscriptionJobType:
      type: string
      example: subscription_job
      enum:
      - subscription_job
    Link:
      anyOf:
      - $ref: '#/components/schemas/LinkURI'
      - $ref: '#/components/schemas/LinkObject'
    JobCreate:
      required:
      - type
      - attributes
      properties:
        type:
          $ref: '#/components/schemas/SubscriptionJobType'
        attributes:
          $ref: '#/components/schemas/JobCreateAttributes'
    InvoiceTaxItems:
      required:
      - invoice_id
      - tax_items
      properties:
        invoice_id:
          $ref: '#/components/schemas/UUID_2'
        tax_items:
          type: array
          items:
            $ref: '#/components/schemas/TaxItem'
    Relationship:
      anyOf:
      - $ref: '#/components/schemas/SingleRelationship'
      - $ref: '#/components/schemas/ManyRelationship'
    ImportJobAttributes:
      required:
      - job_type
      properties:
        job_type:
          type: string
          example: import
    JobAttributes:
      type: object
      required:
      - status
      - type
      properties:
        status:
          description: The status of the job.
          type: string
          enum:
          - pending
          - processing
          - complete
          - failed
          example: pending
        catalog_id:
          description: The ID of the catalog.
          type: string
          format: uuid
          example: ac107ce9-96ac-4bd5-aa3d-59f40b91279b
          x-go-name: CatalogID
        catalog_release_id:
          description: The ID of the catalog release.
          type: string
          format: uuid
          example: c12c4e5b-f5e4-4bd0-ac86-9f1202fc27f9
          x-go-name: CatalogReleaseID
        type:
          description: The type of the job.
          type: string
          enum:
          - index-release
          - delete-release
          - reindex-tenant-releases
          example: index-release
          default: index
          x-go-type: model.JobType
          x-go-type-import:
            name: model
            path: gitlab.elasticpath.com/commerce-cloud/ncl-projects/paragon/catalog-search.svc/internal/domain/model
    Job_2:
      properties:
        id:
          description: A unique ID generated when a job is created
          $ref: '#/components/schemas/UUID'
        type:
          description: This represents the type of object being returned. Always `job`.
          type: string
          example: job
        job_type:
          description: This represents the type of job. For example, `order_export`.
          type: string
          example: order_export
        status:
          description: 'The status of a job.

            - PENDING - Commerce has received the request but is currently busy processing other requests.

            - STARTED - Commerce has started processing the job.

            - SUCCESS - The job has successfully completed.

            - FAILED - The job has failed.'
          type: string
          example: failed
        error:
          description: A message describing the error that caused a job to fail.
          type: string
          example: No results matched the supplied filter
        timestamps:
          $ref: '#/components/schemas/Timestamps'
        links:
          $ref: '#/components/schemas/Links'
        link:
          $ref: '#/components/schemas/FileLink'
    JobResponseAttributes:
      allOf:
      - $ref: '#/components/schemas/JobCreateAttributes'
      - $ref: '#/components/schemas/JobAttributes_2'
      - $ref: '#/components/schemas/Timestamps_2'
    Relationships:
      description: Relationships are established between different subscription entities. For example, a plan and a pricing option are related to an offering, as both are attached to it.
      additionalProperties:
        $ref: '#/components/schemas/Relationship'
      example:
        pricing-options:
          links:
            related: /offerings/:offering-id/pricing-options
            self: /offerings/:offering-id
          data:
            type: offering-pricing-option
            id: 625fe958-7b4b-40a0-a2c0-dbb8f31eec0d
    BillingRunReport:
      required:
      - invoices_ready_for_payment
      - invoices_tax_required
      - invoice_failures
      - total_ready_for_payment
      - total_tax_required
      properties:
        invoices_ready_for_payment:
          description: The total number of invoices created that are ready for payment.
          type: integer
          example: 100
        invoices_tax_required:
          description: The total number of invoices created that need taxes to be applied before payment can be made.
          type: integer
          example: 100
        invoice_failures:
          description: The total number of invoices that were scheduled but creation failed.
          type: integer
          example: 0
        total_ready_for_payment:
          allOf:
          - description: The total amount ready for payment invoiced in the billing run, segmented by currency.
          - $ref: '#/components/schemas/Price'
        total_tax_required:
          allOf:
          - description: The total amount (excluding tax) invoiced in the billing run but still requiring taxes, segmented by currency.
          - $ref: '#/components/schemas/Price'
    RelationshipLinks:
      description: "Links are used to allow you, as an API consumer, to move between requests. Single entities use a self parameter with a link to that specific resource. Sometimes, there aren’t enough entities for a project to fill multiple pages. In this situation, we return some defaults, instead of expecting you to check for these special cases. \n\n - current - Always the current page.\n - first - Always the first page.\n - last - always `null`.\n - next - `null` if the user is on the first page.\n - previous - `null` if there is only one page.\n"
      type: object
      properties:
        related:
          type: string
          example: foo.bar
    JobMeta_2:
      readOnly: true
      required:
      - owner
      - timestamps
      properties:
        owner:
          $ref: '#/components/schemas/OwnerMeta'
        timestamps:
          $ref: '#/components/schemas/JobTimestamps'
        report:
          $ref: '#/components/schemas/JobReport'
    multi_links:
      type: object
      description: 'Links allow you to navigate between pages of results.


        :::caution Planned pagination changes — on or after 1 September 2026


        The pagination behaviour of PIM list endpoints (for example, `GET /pcm/products` and `GET /pcm/hierarchies`) currently differs from the rest of the Elastic Path Commerce Cloud platform. We plan to align PIM pagination with the platform standard on or after **1 September 2026**. Please review the details below and check that your integration code will handle the new behaviour correctly.


        :::


        #### Current behaviour


        The current pagination link behaviour in PIM has the following known issues:


        - The `current` link is **not returned**.

        - The `first` and `last` links are **not always returned**.

        - The `prev` link is omitted on both the first **and** second pages. It should only be omitted on the first page.

        - The `next` link is omitted on both the last **and** second-to-last pages. It should only be omitted on the last page.


        #### Planned behaviour (on or after 1 September 2026)


        On or after 1 September 2026, PIM list endpoints will adopt the following pagination link behaviour, aligning with the rest of the platform:


        - `current` — always present, pointing to the current page.

        - `first` — always present.

        - `last` — present on all pages **except the final page**. Omitting `last` on the final page is intentional, to avoid triggering infinite‑loop bugs in integration code that uses the presence of `last` to detect whether more pages remain.

        - `next` — present on all pages except the last page.

        - `prev` — present on all pages except the first page.

        '
      properties:
        current:
          description: 'A link to the current page of results. **Note:** this link is not currently returned by PIM endpoints. It will be introduced on or after 1 September 2026.

            '
          type: string
          example: /pcm/hierarchies?page[offset]=10&page[limit]=10
        first:
          description: 'A link to the first page of results. Currently this may not always be present. After the planned changes it will always be present.

            '
          type: string
          example: /pcm/hierarchies?page[offset]=0&page[limit]=10
        last:
          description: 'A link to the last page of results. Currently this may not always be present. After the planned changes it will be present on all pages except the final page (where it is intentionally omitted).

            '
          type: string
          example: /pcm/hierarchies?page[offset]=20&page[limit]=10
        next:
          description: 'A link to the next page of results. Should be absent on the last page. Currently this is incorrectly absent on the second-to-last page as well; this will be fixed on or after 1 September 2026.

            '
          type: string
          example: /pcm/hierarchies?page[offset]=10&page[limit]=10
        prev:
          description: 'A link to the previous page of results. Should be absent on the first page. Currently this is incorrectly absent on the second page as well; this will be fixed on or after 1 September 2026.

            '
          type: string
          example: /pcm/hierarchies?page[offset]=8&page[limit]=10
    Price:
      additionalProperties:
        type: object
        description: The base price.
        required:
        - amount
        properties:
          amount:
            type: integer
            format: int64
            minimum: 0
            example: 100
            description: The value as a whole number of 

# --- truncated at 32 KB (61 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/elastic-path/refs/heads/main/openapi/elastic-path-jobs-api-openapi.yml