Ankorstore Catalog Integrations API

## 👋 Getting Started The catalogue integration process relies on the concept of operations. An operation is a batch of records representing the products to create, update or delete. The completion state of an operation depends on the execution result for every record it contains. It means an operation might fail without necessarily stopping or marking the whole operation as failed (this particular state is defined as “Partially failed”). - Operations can be of type `import`, `update` or `delete`. - Only one open operation (not yet started) is allowed at a time. - Only one operation can be performed (`started`) at a time. - Any subsequent operation will be queued with status `pending` until previous one has finished processing. - If no previous operation is being processed, operation will start processing right away. ### Operation Statuses The `status` attribute represents the current state of the operation, below is a table that describes each state: | Status | Description | |--------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | `created` | The operation was created and not yet started. At this stage, the operation is considered open and products can still be added to the batch. | | `skipped` | The operation is empty and was skipped (No action required). When an operation is skipped, an empty report is generated and the callback URL is called to notify operation is completed. | | `started` | The operation started and is processing. | | `pending` | Operation is waiting for its turn on the processing queue. The operation could not be started because another one was being processed. | | `succeeded` | All products were successfully processed. | | `failed` | All products failed to be processed. | | `partially_failed` | Not all products were successfully processed. | ## 💡 Operation workflow The complete workflow for an operation occurs in 3 stages: operation creation, operation processing and reporting. The following diagram illustrates these stages and how they are chained. %%{init: {"flowchart": {"curve":"basis", "htmlLabels":false, "diagramPadding":24 } } }%% graph LR created("Operation Created") start("Start Processing") started("Processing\nStarted") succeeded(Succeeded):::success skipped("Processing Skipped"):::success pending("Operation pending") failed(Failed):::failure partial(Partially Failed):::warning report("Report\nGenerated") notified(Callback Sent) subgraph creating[Creating Operation] created -- Add Products --> created end created -- Start Operation --> Start{?} Start -->|"Another Operation execution in progress"| pending Start --->|"No other Operation in progress"| start --> E{?} E -->|"Batch.size > 0"| processing E --->|"Batch is empty"| skipped subgraph processing[Processing Operation] direction LR started --> succeeded started --> partial started --> failed end succeeded --> operationCompletedActions partial --> operationCompletedActions failed --> operationCompletedActions subgraph reporting[Reporting] report -- Notify --> notified end subgraph triggerNext[Trigger next pending Operation] end subgraph operationCompletedActions[Post-Complete Operation Actions] reporting triggerNext end pending -- Wait for previous Operation to finish execution --> start skipped -- Generate empty report --> operationCompletedActions classDef default stroke:#4b475f,stroke-width:1px,fill:#ffffff,color:#4b475f classDef success stroke:#1aae9f,stroke-width:1px,fill:#cfeeeb,color:#293845 classDef failure stroke:#d3455b,stroke-width:1px,fill:#f6d8dd,color:#293845 classDef warning stroke:#f7c325,stroke-width:1px,fill:#fdf2d1,color:#293845 linkStyle default stroke:#788896,stroke-width:1px,fill:transparent ### Creating an Operation The full flow of creating a complete operation consists in two steps: #### 1. Create a new operation Send a `POST` request to `/api/v1/catalog/integrations/operations` Example request: ```json { "data": { "type": "catalog-integration-operation", "attributes": { "source": "shopify", "callbackUrl": "https://callback.url/called/after/processing", "operationType": "import" } } } ``` - At this point the new operation has been created and waiting to receive products data - Operation ID will be returned in the response payload #### 2. Add product data to operation Send a `POST` request to `/api/v1/catalog/integrations/operations/{operationId}/products` Products can be added only to operations with status `created`. If operation has been started already (having any of `started`, `pending`, `skipped`, `succeeded`, `partially_failed`, `failed`, `cancelled` status), the request will fail with a `403 Forbidden` status code. Example request: ```json { "products": [ { "id": "B006GWO5WK", "type": "catalog-integration-product", "attributes": { "external_id": "B006GWO5WK", "name": "Example product" // ... } } ] } ``` You can perform as many requests as needed to append product data during this stage. ### Operation Processing In order to start processing the operation, you have to send a `PATCH` request to `/api/v1/catalog/integrations/operations/{operationId}` with the expected operation status (i.e. “started”). If there is any other operation being executed at that time, the operation will be enqueued to be processed with the status `pending` and will be started as soon as it gets a free slot in the queue. Otherwise, the operation will be started right away. Example request: ```json { "data": { "id": "90567710-de47-49e4-8536-aab80c1a469c", "type": "catalog-integration-operation", "attributes": { "status": "started" } } } ``` ### Execution Report When an operation completes, an execution report is generated. It provides the execution results (success or failure) for every product of the operation. You can access this report by reading from the following endpoint. ```http GET /api/v1/catalog/integrations/operations/{operationId}/results ``` ## 💡 Event Callbacks Callbacks enable you to get notified when events occur in the operation process. For example, you can configure a callback to notify you when the operation is completed. The notification is sent via an HTTP request to the URL you specify in the operation settings. Callbacks can be used to trigger automated actions in your integration. ### Supported events You can find here below the complete list of all the topics `{{resource}}.{{event}}` you can monitor: | Topic | Trigger | |-------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------| | `catalog-integration-operation.completed` | An operation reaches a completed state such as **Success**, **Failed**, or **Partially Failed** | | `catalog-integration-operation.cancelled` | An operation was cancelled. This event is triggered when an operation processing is **Skipped** (i.e. the operation batch is empty and no action is required). | ### Event schema A callback event is represented as a JSON object and has the following properties: - `event` — the name of the event that occurred (e.g. “completed”) - `topic` — the event category represented as a unique identifier of the event type. The topic is defined as a concatenation of the resource and event names `{$.data.type}.{$.event}`, e.g. “catalog-integration-operation.completed”. You might use this topic as a partition key to distribute the callback events you receive to separate queues or pools of workers to process the callbacks asynchronously. - `occurredAt` — the date and time when the event occurred - `data` — the JSON:API resource describing the state of the entity which triggered the callback A callback event is delivered as a `POST` request to your endpoint. The following payload represents the notification request that is triggered when an operation successfully completes: ```json { "event": "completed", "topic": "catalog-integration-operation.completed", "occurredAt": "2024-03-21T13:42:54+00:00", "data": { "id": "90567710-de47-49e4-8536-aab80c1a469c", "type": "catalog-integration-operation", "attributes": { // ... "status": "succeeded", "createdAt": "2024-03-21T13:13:03+00:00", "startedAt": "2024-03-21T13:19:32+00:00", "completedAt": "2024-03-21T13:42:54+00:00" // ... } } } ``` ### Handling callbacks The endpoint listening for callbacks has **3 seconds** to respond with a `2xx` (usually `200`) response code, acknowledging a successful delivery. If the request times out or gets a response with a status code other than `2xx`, it is considered failed. #### Handling webhook failures If a callback fails (whatever the reason) no further calls to the related endpoint are made. ### Testing callback A number of websites, such as https://webhook.site and https://requestbin.com, provide free URLs that can be used to test callbacks. Simply create a URL on one of these sites, then configure your webhook to use it. These sites allow you to see the details of the request sent to them by the callback service. In addition, the Ngrok service (https://ngrok.com) allows you to tunnel callback requests to a non-publicly accessible server, enabling you to test your callback-handling code before making it public. ### Operations and Drafts behaviour | Type | Behaviour | |----------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | `import` | When executing an import operation existing drafts will be cleaned and new ones will be created if any of the products attached to the operation has any validation issue. | | `update` | Will not have any impact on existing drafts. | | `delete` | Will not have any impact on existing drafts. |

Operations 6

POST /api/v1/catalog/integrations/operations Create a new operation #
POST /api/v1/catalog/integrations/operations/delete Create a deletion operation #
GET /api/v1/catalog/integrations/operations/{operationId} Retrieve an operation #
PATCH /api/v1/catalog/integrations/operations/{operationId} Patch Operation resource #
POST /api/v1/catalog/integrations/operations/{operationId}/products Add products to an operation #
GET /api/v1/catalog/integrations/operations/{operationId}/results Retrieve an operation report #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/ankorstore-catalog-integrations-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no email required.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

ankorstore-catalog-integrations-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  version: 1.0.0
  title: Ankorstore Public Catalog Integrations API
  description: 'The Ankorstore API enables brands and their partners to programmatically manage their presence on the

    Ankorstore wholesale marketplace. Through the API you can manage your product catalog and stock, process

    orders, handle shipping and fulfillment, and receive real-time event notifications via webhooks.


    ### Quick Links


    - **[Getting Started](#section/Getting-Started)** — Register an application, authenticate, and make your first API call

    - **[Available APIs](#section/Available-APIs)** — Overview of all API capabilities

    - **[Authentication](#section/Authentication)** — OAuth2 setup and rate limits

    - **[How to work with API](#section/How-to-work-with-API)** — JSON:API conventions, pagination, filters, and includes

    - **[Testing API](#section/Testing-API)** — Sandbox environment and test data

    - **[Webhook Subscription](#section/Webhook-Subscription)** — Real-time event notifications


    ### Support


    For API support, contact us at [api@ankorstore.com](mailto:api@ankorstore.com).

    '
  contact:
    name: Ankorstore Support
    email: api@ankorstore.com
    url: https://www.ankorstore.com
  license:
    name: CC0 1.0 Universal
    url: https://creativecommons.org/publicdomain/zero/1.0/
  x-prefix: Ankorstore
  x-logo:
    url: https://cdn.ankorstore.com/images/logo/logo-black.svg
    altText: Ankorstore
    href: /
servers:
- url: https://www.public.ankorstore-sandbox.com
  description: Staging Environment
- url: https://www.ankorstore.com
  description: Production Environment
security:
- ProductionOAuth2ClientCredentials: []
tags:
- name: Catalog Integrations
  description: "## \U0001F44B Getting Started\n\nThe catalogue integration process relies on the concept of operations. An operation is a batch of records\nrepresenting the products to create, update or delete. The completion state of an operation depends\non the execution result for every record it contains. It means an operation might fail without necessarily\nstopping or marking the whole operation as failed (this particular state is defined as “Partially failed”).\n\n- Operations can be of type `import`, `update` or `delete`.\n- Only one open operation (not yet started) is allowed at a time.\n- Only one operation can be performed (`started`) at a time.\n  - Any subsequent operation will be queued with status `pending` until previous one has finished processing.\n  - If no previous operation is being processed, operation will start processing right away.\n\n### Operation Statuses\n\nThe `status` attribute represents the current state of the operation, below is a table that describes each state:\n\n| Status             | Description                                                                                                                                                                              |\n|--------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| `created`          | The operation was created and not yet started. At this stage, the operation is considered open and products can still be added to the batch.                                             |\n| `skipped`          | The operation is empty and was skipped (No action required). When an operation is skipped, an empty report is generated and the callback URL is called to notify operation is completed. |\n| `started`          | The operation started and is processing.                                                                                                                                                 |\n| `pending`          | Operation is waiting for its turn on the processing queue. The operation could not be started because another one was being processed.                                                                                                                               |\n| `succeeded`        | All products were successfully processed.                                                                                                                                                |\n| `failed`           | All products failed to be processed.                                                                                                                                                     |\n| `partially_failed` | Not all products were successfully processed.                                                                                                                                            |\n\n## \U0001F4A1 Operation workflow\n\nThe complete workflow for an operation occurs in 3 stages: operation creation, operation processing and reporting.\nThe following diagram illustrates these stages and how they are chained.\n\n<pre class=\"mermaid\">\n%%{init: {\"flowchart\": {\"curve\":\"basis\", \"htmlLabels\":false, \"diagramPadding\":24 } } }%%\ngraph LR\n\ncreated(\"Operation Created\")\nstart(\"Start Processing\")\nstarted(\"Processing\\nStarted\")\nsucceeded(Succeeded):::success\nskipped(\"Processing Skipped\"):::success\npending(\"Operation pending\")\nfailed(Failed):::failure\npartial(Partially Failed):::warning\nreport(\"Report\\nGenerated\")\nnotified(Callback Sent)\n\nsubgraph creating[Creating Operation]\ncreated -- Add Products --> created\nend\n\ncreated -- Start Operation --> Start{?}\nStart -->|\"Another Operation execution in progress\"| pending\nStart --->|\"No other Operation in progress\"| start --> E{?}\nE -->|\"Batch.size > 0\"| processing\nE --->|\"Batch is empty\"| skipped\n\nsubgraph processing[Processing Operation]\ndirection LR\nstarted --> succeeded\nstarted --> partial\nstarted --> failed\nend\n\nsucceeded --> operationCompletedActions\npartial --> operationCompletedActions\nfailed --> operationCompletedActions\n\nsubgraph reporting[Reporting]\nreport -- Notify --> notified\nend\n\nsubgraph triggerNext[Trigger next pending Operation]\nend\n\nsubgraph operationCompletedActions[Post-Complete Operation Actions]\nreporting\ntriggerNext\nend\n\npending -- Wait for previous Operation to finish execution --> start\n\nskipped -- Generate empty report --> operationCompletedActions\n\nclassDef default stroke:#4b475f,stroke-width:1px,fill:#ffffff,color:#4b475f\nclassDef success stroke:#1aae9f,stroke-width:1px,fill:#cfeeeb,color:#293845\nclassDef failure stroke:#d3455b,stroke-width:1px,fill:#f6d8dd,color:#293845\nclassDef warning stroke:#f7c325,stroke-width:1px,fill:#fdf2d1,color:#293845\nlinkStyle default stroke:#788896,stroke-width:1px,fill:transparent\n</pre>\n\n### Creating an Operation\n\nThe full flow of creating a complete operation consists in two steps:\n\n#### 1. Create a new operation\n\nSend a `POST` request to `/api/v1/catalog/integrations/operations`\n\nExample request:\n```json\n{\n    \"data\": {\n        \"type\": \"catalog-integration-operation\",\n        \"attributes\": {\n            \"source\": \"shopify\",\n            \"callbackUrl\": \"https://callback.url/called/after/processing\",\n            \"operationType\": \"import\"\n        }\n    }\n}\n```\n\n- At this point the new operation has been created and waiting to receive products data\n- Operation ID will be returned in the response payload\n\n#### 2. Add product data to operation\n\nSend a `POST` request to `/api/v1/catalog/integrations/operations/{operationId}/products`\n\nProducts can be added only to operations with status `created`.\n\nIf operation has been started already (having any of `started`, `pending`, `skipped`, `succeeded`, `partially_failed`, `failed`, `cancelled` status),\nthe request will fail with a `403 Forbidden` status code.\n\nExample request:\n```json\n{\n    \"products\": [\n        {\n            \"id\": \"B006GWO5WK\",\n            \"type\": \"catalog-integration-product\",\n            \"attributes\": {\n                \"external_id\": \"B006GWO5WK\",\n                \"name\": \"Example product\"\n                // ...\n            }\n        }\n    ]\n}\n```\n\nYou can perform as many requests as needed to append product data during this stage.\n\n### Operation Processing\n\nIn order to start processing the operation, you have to send a `PATCH` request\nto `/api/v1/catalog/integrations/operations/{operationId}` with the expected operation status (i.e. “started”).\n\nIf there is any other operation being executed at that time, the operation will be enqueued to be processed\nwith the status `pending` and will be started as soon as it gets a free slot in the queue. Otherwise, the\noperation will be started right away.\n\nExample request:\n```json\n{\n    \"data\": {\n        \"id\": \"90567710-de47-49e4-8536-aab80c1a469c\",\n        \"type\": \"catalog-integration-operation\",\n        \"attributes\": {\n            \"status\": \"started\"\n        }\n    }\n}\n```\n\n### Execution Report\n\nWhen an operation completes, an execution report is generated.\nIt provides the execution results (success or failure) for every product of the operation.\n\nYou can access this report by reading from the following endpoint.\n\n```http\nGET /api/v1/catalog/integrations/operations/{operationId}/results\n```\n\n## \U0001F4A1 Event Callbacks\n\nCallbacks enable you to get notified when events occur in the operation process. For example, you can\nconfigure a callback to notify you when the operation is completed. The notification is sent via\nan HTTP request to the URL you specify in the operation settings.\n\nCallbacks can be used to trigger automated actions in your integration.\n\n### Supported events\n\nYou can find here below the complete list of all the topics `{{resource}}.{{event}}` you can monitor:\n\n| Topic                                     | Trigger                                                                                                                                                        |\n|-------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| `catalog-integration-operation.completed` | An operation reaches a completed state such as **Success**, **Failed**, or **Partially Failed**                                                                |\n| `catalog-integration-operation.cancelled` | An operation was cancelled. This event is triggered when an operation processing is **Skipped** (i.e. the operation batch is empty and no action is required). |\n\n### Event schema\n\nA callback event is represented as a JSON object and has the following properties:\n\n- `event` — the name of the event that occurred (e.g. “completed”)\n- `topic` — the event category represented as a unique identifier of the event type.\n  The topic is defined as a concatenation of the resource and event names `{$.data.type}.{$.event}`,\n  e.g. “catalog-integration-operation.completed”. You might use this topic as a partition key to distribute\n  the callback events you receive to separate queues or pools of workers to process the callbacks asynchronously.\n- `occurredAt` — the date and time when the event occurred\n- `data` — the JSON:API resource describing the state of the entity which triggered the callback\n\nA callback event is delivered as a `POST` request to your endpoint. The following payload represents the notification\nrequest that is triggered when an operation successfully completes:\n\n```json\n{\n    \"event\": \"completed\",\n    \"topic\": \"catalog-integration-operation.completed\",\n    \"occurredAt\": \"2024-03-21T13:42:54+00:00\",\n    \"data\": {\n        \"id\": \"90567710-de47-49e4-8536-aab80c1a469c\",\n        \"type\": \"catalog-integration-operation\",\n        \"attributes\": {\n            // ...\n            \"status\": \"succeeded\",\n            \"createdAt\": \"2024-03-21T13:13:03+00:00\",\n            \"startedAt\": \"2024-03-21T13:19:32+00:00\",\n            \"completedAt\": \"2024-03-21T13:42:54+00:00\"\n            // ...\n        }\n    }\n}\n```\n\n### Handling callbacks\n\nThe endpoint listening for callbacks has **3 seconds** to respond with a `2xx` (usually `200`)\nresponse code, acknowledging a successful delivery. If the request times out or gets a response\nwith a status code other than `2xx`, it is considered failed.\n\n<div class=\"warning\">\n\n#### Handling webhook failures\n\nIf a callback fails (whatever the reason) no further calls to the related endpoint are made.\n</div>\n\n### Testing callback\n\nA number of websites, such as https://webhook.site and https://requestbin.com, provide free URLs that\ncan be used to test callbacks. Simply create a URL on one of these sites, then configure your webhook\nto use it. These sites allow you to see the details of the request sent to them by the callback service.\n\nIn addition, the Ngrok service (https://ngrok.com) allows you to tunnel callback requests to a non-publicly\naccessible server, enabling you to test your callback-handling code before making it public.\n\n### Operations and Drafts behaviour\n\n| Type     | Behaviour                                                                                                                                                                  |\n|----------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| `import` | When executing an import operation existing drafts will be cleaned and new ones will be created if any of the products attached to the operation has any validation issue. |\n| `update` | Will not have any impact on existing drafts.                                                                                                                               |\n| `delete` | Will not have any impact on existing drafts.                                                                                                                               |\n"
paths:
  /api/v1/catalog/integrations/operations:
    post:
      summary: Create a new operation
      description: "Create new Operation to process over related Catalog Integration\n> ID of the operation will be returned on the response payload.\n  This ID should be used to add products data through `POST /catalog/integrations/operations/{ID}`\n"
      operationId: post-catalog-integration-operations
      tags:
      - Catalog Integrations
      parameters:
      - name: Accept
        in: header
        description: application/vnd.api+json
        schema:
          type: string
          default: application/vnd.api+json
      requestBody:
        content:
          application/vnd.api+json:
            schema:
              type: object
              properties:
                data:
                  type: object
                  properties:
                    type:
                      type: string
                      description: The type of resource to create
                      enum:
                      - catalog-integration-operation
                    attributes:
                      type: object
                      description: The operation attributes
                      required:
                      - source
                      - operationType
                      - callbackUrl
                      optional:
                      - updateFields
                      properties:
                        source:
                          title: OperationSource
                          description: Source of the operation
                          type: string
                          enum:
                          - shopify
                          - woocommerce
                          - prestashop
                          - other
                        callbackUrl:
                          type: string
                          description: 'The url of the endpoint that will be called when an operation completes. When an operation reaches a completed state such as **Success**, **Failed**, or **Partially Failed** the API platform will trigger a request to your endpoint.

                            '
                        operationType:
                          title: OperationType
                          description: Operation type
                          type: string
                          enum:
                          - import
                          - update
                          - delete
                        updateFields:
                          type: array
                          description: 'Optional list of fields that will be taken into account when updating the products provided. This list will be

                            only taken into account for operations of type `update`.

                            - For sources `shopify`, `woocommerce` and `prestashop`: If list is not provided or empty, all `stock`

                            and `prices` related fields will be updated

                            - For source `other`: If list is not provided or empty, all fields will be updated


                            Group fields:

                            - If `stock` is provided, both `stock_quantity` and `is_always_in_stock` properties will be updated

                            - If `prices` is provided, both `wholesale_price` and `retail_price` will be updated

                            '
                          items:
                            type: string
                            enum:
                            - stock
                            - prices
                            - description
                            - dimensions
                            - images
                            - name
                            - prices
                            - retail_price
                            - stock
                            - tags
                            - unit_multiplier
                            - vat_rate
                            - wholesale_price
            examples:
              import:
                value:
                  data:
                    type: catalog-integration-operation
                    attributes:
                      source: shopify
                      callbackUrl: https://callback.url/called/after/processing
                      operationType: import
              update:
                value:
                  data:
                    type: catalog-integration-operation
                    attributes:
                      source: shopify
                      callbackUrl: https://callback.url/called/after/processing
                      operationType: update
                      updateFields:
                      - stock
      responses:
        '201':
          description: The operation that was successfully created
          content:
            application/vnd.api+json:
              schema:
                type: object
                properties:
                  data:
                    title: Operation
                    description: An operation resource
                    type: object
                    required:
                    - id
                    - type
                    properties:
                      id:
                        type: string
                        format: uuid
                        description: A globally-unique identifier for the operation
                        readOnly: true
                      type:
                        type: string
                        description: Resource type.
                        enum:
                        - catalog-integration-operation
                        readOnly: true
                      attributes:
                        type: object
                        description: The operation attributes.
                        properties:
                          source:
                            title: OperationSource
                            description: Source of the operation
                            type: string
                            enum:
                            - shopify
                            - woocommerce
                            - prestashop
                            - other
                          status:
                            title: OperationStatus
                            type: string
                            enum:
                            - created
                            - started
                            - skipped
                            - succeeded
                            - partially_failed
                            - failed
                          operationType:
                            title: OperationType
                            description: Operation type
                            type: string
                            enum:
                            - import
                            - update
                            - delete
                          updateFields:
                            title: updateFields
                            description: List of fields or group of fields that will be updated on provided products
                            type: array
                            items:
                              type: string
                              enum:
                              - stock
                              - prices
                          createdAt:
                            type: string
                            format: date-time
                            description: Date and time when operation was created
                          startedAt:
                            type:
                            - 'null'
                            - string
                            format: date-time
                            description: Date and time when operation processing started
                          completedAt:
                            type:
                            - 'null'
                            - string
                            format: date-time
                            description: Date and time when operation was completed
                          callbackUrl:
                            type:
                            - 'null'
                            - string
                            format: uri
                            description: a URL where the user will be notified after the operation is complete
                          totalProductsCount:
                            type: integer
                            description: Total number of products in the batch
                          processedProductsCount:
                            type: integer
                            description: Number of products successfully processed
                          failedProductsCount:
                            type: integer
                            description: Number of products which processing failed
              examples:
                Operation Created:
                  value:
                    jsonapi:
                      version: '1.0'
                    links:
                      self: https://www.ankorstore.com/api/v1/catalog/integrations/operations/90567710-de47-49e4-8536-aab80c1a469c
                    data:
                      id: 90567710-de47-49e4-8536-aab80c1a469c
                      type: catalog-integration-operation
                      attributes:
                        source: shopify
                        status: created
                        operationType: import
                        createdAt: '2024-01-01T14:15:22Z'
                        startedAt: null
                        completedAt: null
                        callbackUrl: https://callback.url/called/after/processing
                        totalProductsCount: 132
                        processedProductsCount: 0
                        failedProductsCount: 0
                      relationships:
                        results:
                          links:
                            related: https://www.ankorstore.com/api/v1/catalog/integrations/operations/90567710-de47-49e4-8536-aab80c1a469c/results
                            self: https://www.ankorstore.com/api/v1/catalog/integrations/operations/90567710-de47-49e4-8536-aab80c1a469c/relationships/results
                      links:
                        self: https://www.ankorstore.com/api/v1/catalog/integrations/operations/90567710-de47-49e4-8536-aab80c1a469c
                Operation Started:
                  value:
                    jsonapi:
                      version: '1.0'
                    links:
                      self: https://www.ankorstore.com/api/v1/catalog/integrations/operations/90567710-de47-49e4-8536-aab80c1a469c
                    data:
                      id: 90567710-de47-49e4-8536-aab80c1a469c
                      type: catalog-integration-operation
                      attributes:
                        source: shopify
                        status: started
                        operationType: import
                        createdAt: '2024-01-01T14:15:22Z'
                        startedAt: '2024-01-01T15:27:22Z'
                        completedAt: null
                        callbackUrl: https://callback.url/called/after/processing
                        totalProductsCount: 132
                        processedProductsCount: 0
                        failedProductsCount: 0
                      relationships:
                        results:
                          links:
                            related: https://www.ankorstore.com/api/v1/catalog/integrations/operations/90567710-de47-49e4-8536-aab80c1a469c/results
                            self: https://www.ankorstore.com/api/v1/catalog/integrations/operations/90567710-de47-49e4-8536-aab80c1a469c/relationships/results
                      links:
                        self: https://www.ankorstore.com/api/v1/catalog/integrations/operations/90567710-de47-49e4-8536-aab80c1a469c
                Operation Succeeded:
                  value:
                    jsonapi:
                      version: '1.0'
                    links:
                      self: https://www.ankorstore.com/api/v1/catalog/integrations/operations/90567710-de47-49e4-8536-aab80c1a469c
                    data:
                      id: 90567710-de47-49e4-8536-aab80c1a469c
                      type: catalog-integration-operation
                      attributes:
                        source: shopify
                        status: succeeded
                        operationType: import
                        createdAt: '2024-01-01T14:15:22Z'
                        startedAt: '2024-01-01T15:27:45Z'
                        completedAt: '2024-01-01T16:10:03Z'
                        callbackUrl: https://callback.url/called/after/processing
                        totalProductsCount: 132
                        processedProductsCount: 132
                        failedProductsCount: 0
                      relationships:
                        results:
                          links:
                            related: https://www.ankorstore.com/api/v1/catalog/integrations/operations/90567710-de47-49e4-8536-aab80c1a469c/results
                            self: https://www.ankorstore.com/api/v1/catalog/integrations/operations/90567710-de47-49e4-8536-aab80c1a469c/relationships/results
                      links:
                        self: https://www.ankorstore.com/api/v1/catalog/integrations/operations/90567710-de47-49e4-8536-aab80c1a469c
        '401':
          description: Unauthorized
          content:
            application/vnd.api+json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  errors:
                    type: array
                    uniqueItems: true
                    items:
                      type: object
                      properties:
                        code:
                          description: An application-specific error code, expressed as a string value.
                          type: string
                        detail:
                          description: A human-readable explanation specific to this occurrence of the problem.
                          type: string
                        status:
                          description: The HTTP status code applicable to this problem, expressed as a string value.
                          type: string
                        title:
                          description: The HTTP status code description applicable to this problem
                          type: string
                        source:
                          type: object
                          description: Optional object pointing towards the problematic field
                          properties:
                            pointer:
                              type: string
                              description: The field key
                        meta:
                          description: Non-standard meta-information that can not be represented as an attribute or relationship.
                          type: object
                          additionalProperties: true
                      additionalProperties: false
                  jsonapi:
                    description: An object describing the server's implementation
                    type: object
                    properties:
                      version:
                        type: string
                      meta:
                        description: Non-standard meta-information that can not be represented as an attribute or relationship.
                        type: object
                        additionalProperties: true
                    additionalProperties: false
                required:
                - errors
              example:
                jsonapi:
                  version: '1.0'
                errors:
                - detail: Unauthorized
                  status: '401'
        '406':
          description: Not Acceptable
          content:
            application/vnd.api+json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  errors:
                    type: array
                    uniqueItems: true
                    items:
                      type: object
                      properties:
                        code:
                          description: An application-specific error code, expressed as a string value.
                          type: string
                        detail:
                          description: A human-readable explanation specific to this occurrence of the problem.
                          type: string
                        status:
                          description: The HTTP status code applicable to this problem, expressed as a string value.
                          type: string
                        title:
                          description: The HTTP status code description applicable to this problem
                          type: string
                        source:
                          type: object
                          description: Optional object pointing towards the problematic field
                          properties:
                            pointer:
                              type: string
                              description: The field key
                        meta:
                          description: Non-standard meta-information that can not be represented as an attribute or relationship.
                          type: object
                          additionalProperties: true
                      additionalProperties: false
                  jsonapi:
                    description: An object describing the server's implementation
                    type: object
                    properties:
                      version:
                        type: string
                      meta:
                        description: Non-standard meta-information that can not be represented as an attribute or relationship.
                        type: object
                        additionalProperties: true
                    a

# --- truncated at 32 KB (162 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/ankorstore/refs/heads/main/openapi/ankorstore-catalog-integrations-api-openapi.yml