NAV Navbar
shell
  • Introduction
  • Authentication
  • Release History
  • Admin
  • Attributes
  • Attribute Type Values
  • Attribute Sets
  • Attribute Set Attributes
  • Blocks
  • Block Assets
  • Brands
  • Brand Assets
  • Brand Channels
  • Categories
  • Category Assets
  • Category Channels
  • Changelogs
  • Channels
  • Display Groups
  • Exports
  • Generic Entities
  • Concrete Entities
  • Options
  • Option Values
  • Option Sets
  • Option Set Options
  • Pages
  • Page Assets
  • Products
  • Product Assets
  • Product Barcodes
  • Product Categories
  • Product Prices
  • Product Inventory
  • Product Attributes
  • Product Channels
  • Product Relation Types
  • Product Relations
  • Product Relation Attributes
  • Product Tags
  • Templates
  • Webhooks
  • Errors
  • Introduction

    Welcome to the Jasper Standard PIM v1 API documentation.

    We have provided examples for command line use as well as via our PHP SDK. You can view code examples in the dark area to the right, and you can switch the programming language of the examples with the tabs in the top right.

    Authentication

    Environment & base URL

    # Replace {hash} and {region} with the values for your PIM
    curl "https://{hash}.{region}.jasperpim.com/api/v1/ping" \
      -H "Authorization: Bearer {token}"
    

    Every API request targets a base URL of the form:

    https://{hash}.{region}.jasperpim.com/api/v1/...

    Your account representative provides the {hash} and {region} values when your PIM is provisioned.

    Token rotation

    API tokens are issued and rotated by your account representative. If a token is rotated, the previous value stops working immediately and any client using it will receive a 401 Unauthorized. Update the token in your client and retry; no other change is needed.

    A 401 Unauthorized response from the API generally means one of:

    API token

    # With shell, you can just pass the correct header with each request
    curl "https://{hash}.{region}.jasperpim.com/api/v1/ping"
      -H "Authorization: Bearer {token}"
    # Note: when entering your curl request on the command line, add all options (such as -H, -d, -X etc) on the same line
    

    Make sure to replace token with your API token.

    Jasper uses API keys to allow access to the API. Contact your account representative to receive a key for your PIM.

    Jasper expects for the API key to be included in all API requests to the server in a header that looks like the following:

    Authorization: Bearer {token}

    Release History

    This section records changes to the v1 API itself: endpoints added or removed, parameters added or changed, and responses that changed status code or shape.

    It does not cover PIM application features. The Release Notes page inside your PIM covers those.

    Dates are the date the change reached production, not the date it was written.

    6.00.00 - 6 August 2026

    New parameters

    Parameter Endpoints Description
    brand_id Get All Products, Get All Products (Lite), Get All Products by Version Filters the list to products belonging to one brand. Use the id from Get All Brands.
    version Get All Brands Returns the language version of every brand on the page, the same data Get a Version of a Brand returns for a single brand.

    Both are optional. Omitting them leaves the existing behaviour unchanged.

    Changed response codes

    Five malformed request shapes returned 500 before this release and now return 422. A request that was already valid is unaffected.

    Endpoint Condition
    POST /exports profile_id missing from the body
    POST /brands/<BRANDID>/channel/<CHANNELID> web_id missing from the body
    POST /categories/<CATEGORYID>/channel/<CHANNELID> web_id missing from the body
    PUT and POST /products/<PRODUCTID>/barcodes/upsert barcodes missing, or not an array
    POST and PUT /products/<ID>/attributes payload not an object, attribute_id missing, or values missing, empty or not an array of objects

    If you were treating a 500 from these endpoints as a retryable server fault, they are now a client error and retrying will not change the result.

    Newly documented

    These endpoints were already available and are unchanged. They simply had no entry in this documentation before.

    Corrected documentation

    The response example for Get Product Relation Attributes previously showed a flat list of attribute rows. The endpoint returns a map nested first by version ID and then by attribute ID, and the example now shows that. The endpoint itself did not change; only the documentation was wrong.

    The Product Attributes section described id as the attribute identifier in the response. The field is named attribute_id, and the property table now says so. The type list omitted json, markdown and calculated, which are now included.

    Update a Specific Product Attribute showed its response wrapped in product_attributes. That endpoint wraps its response in data, and the example now shows that.

    Create a Product Attribute did not say that it creates only, and did not list the 422 returned when the attribute already holds a value for the version being written. Both are now documented, along with the placement of version_id, which is read from the top level of the attribute object and ignored inside values. None of these endpoints changed; only the documentation was wrong or incomplete.

    Admin

    Ping

    curl "https://{hash}.{region}.jasperpim.com/api/v1/ping" \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
            "time" : "Tue Feb 7 19:05:03 UTC 2017"
    }
    

    This endpoint returns the current PIM server time.

    Ping Properties

    Property Description
    time Current server time

    HTTP Request

    GET https://{hash}.{region}.jasperpim.com/api/v1/ping

    Query Parameters

    None.

    Attributes

    Attribute Properties

    Property Description
    id Jasper Attribute ID
    name Attribute name (must be unique)
    type (enum) Attribute type (allowed values: selectbox, date, datetime, text, textarea, multiselect, json, markdown)
    slug Slugified attribute name
    note User information about the attribute
    length (integer) Maximum length for the attribute value
    display_group_id ID of the display group used for UI grouping (responses)
    display_group_name Name of the display group (read only)
    sort_order (integer) The sort order for display
    publish (boolean) Whether to publish the attribute
    version_id The ID of the version
    typeValuesArray (array) Type values for select-type attributes (read only)
    created_at Time the attribute was created (read only)
    updated_at Time the attribute was updated (read only)

    Get All Attributes

    curl "https://{hash}.{region}.jasperpim.com/api/v1/attributes" \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
      "attributes": [
        {
          "id": 1,
          "name": "Brand",
          "type": "text",
          "display_group_id": null,
          "sort_order": 0,
          "slug": "Brand",
          "publish": true,
          "typeValuesArray": []
        },
        {
          "id": 2,
          "name": "Country",
          "type": "multiselect",
          "display_group_id": null,
          "sort_order": 0,
          "slug": "Country",
          "publish": true,
          "typeValuesArray": [
            {
              "id": 1,
              "attribute_id": 2,
              "value": "Brazil",
              "slug": "Brazil",
              "sort_order": 1,
              "version_id": 0
            },
            {
              "id": 2,
              "attribute_id": 2,
              "value": "Canada",
              "slug": "Canada",
              "sort_order": 2,
              "version_id": 0
            },
            {
              "id": 3,
              "attribute_id": 2,
              "value": "France",
              "slug": "France",
              "sort_order": 3,
              "version_id": 0
            },
            {
              "id": 4,
              "attribute_id": 2,
              "value": "USA",
              "slug": "USA",
              "sort_order": 4,
              "version_id": 0
            }
          ]
        }
      ]
    }
    

    This endpoint retrieves all attributes.

    HTTP Request

    GET https://{hash}.{region}.jasperpim.com/api/v1/attributes

    Get All Attributes By Version

    curl "https://{hash}.{region}.jasperpim.com/api/v1/attributes/version/1" \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
      "attributes": [
        {
          "id": 1,
          "name": "Marca",
          "type": "text",
          "display_group_id": null,
          "sort_order": 0,
          "slug": "Brand",
          "publish": true,
          "typeValuesArray": []
        },
        {
          "id": 2,
          "name": "Pais",
          "type": "multiselect",
          "display_group_id": null,
          "sort_order": 0,
          "slug": "Country",
          "publish": true,
          "typeValuesArray": [
            {
              "id": 6,
              "attribute_id": 2,
              "value": "Brasil",
              "slug": "Brasil",
              "sort_order": 1,
              "version_id": 1,
              "master_attribute_type_value_id": 1
            },
            {
              "id": 17,
              "attribute_id": 2,
              "value": "Canada",
              "slug": "Canada",
              "sort_order": 2,
              "version_id": 1,
              "master_attribute_type_value_id": 2
            },
            {
              "id": 18,
              "attribute_id": 2,
              "value": "França",
              "slug": "França",
              "sort_order": 3,
              "version_id": 1,
              "master_attribute_type_value_id": 3
            },
            {
              "id": 19,
              "attribute_id": 2,
              "value": "Estados Unidos",
              "slug": "Estados Unidos",
              "sort_order": 4,
              "version_id": 1,
              "master_attribute_type_value_id": 4
            }
          ]
        }
      ]
    }
    

    This endpoint retrieves all attributes of the version.

    HTTP Request

    GET https://{hash}.{region}.jasperpim.com/api/v1/attributes/version/<VERSION_ID>

    URL Parameters

    Parameter Description
    VERSION_ID The ID of the version

    Get a Specific Attribute

    curl "https://{hash}.{region}.jasperpim.com/api/v1/attributes/1" \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
      "attribute": {
        "id": 1,
        "name": "Brand",
        "type": "text",
        "display_group_id": null,
        "note": null,
        "length": null,
        "sort_order": 0,
        "slug": "Brand",
        "publish": true,
        "typeValuesArray": []
      }
    }
    

    This endpoint retrieves a specific attribute.

    HTTP Request

    GET https://{hash}.{region}.jasperpim.com/api/v1/attributes/<ATTRIBUTE_ID>

    URL Parameters

    Parameter Description
    ATTRIBUTE_ID The ID of the attribute to retrieve

    Get a Specific Attribute by Version

    curl "https://{hash}.{region}.jasperpim.com/api/v1/attributes/1/version/1" \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
      "attribute": {
        "id": 1,
        "name": "Marca",
        "type": "text",
        "display_group_id": null,
        "note": null,
        "length": null,
        "sort_order": 0,
        "slug": "Brand",
        "publish": true,
        "typeValuesArray": []
      }
    }
    

    This endpoint retrieves a specific attribute by version.

    HTTP Request

    GET https://{hash}.{region}.jasperpim.com/api/v1/attributes/<ATTRIBUTE_ID>/version/<VERSION_ID>

    URL Parameters

    Parameter Description
    ATTRIBUTE_ID The ID of the attribute to retrieve
    VERSION_ID The ID of the version

    Create an Attribute

    curl "https://{hash}.{region}.jasperpim.com/api/v1/attributes" \
      -X POST \
      -d '{
        "name": "Shipment Type",
        "type": "text",
        "sort_order": 3,
        "publish": false
       }' \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
      "attribute" : {
            "id" : 3,
            "name": "Shipment Type",
            "type": "text",
            "sort_order": 3,
            "publish": false
      }
    }
    

    This endpoint creates a new attribute.

    HTTP Request

    POST https://{hash}.{region}.jasperpim.com/api/v1/attributes

    Update a Specific Attribute

    curl "https://{hash}.{region}.jasperpim.com/api/v1/attributes/2" \
      -X PUT \
      -d '{
        "name":"Countries of origin"
       }' \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
      "attribute" : {
                "id": 2,
                "name": "Countries of origin",
                "type" : "text",
                "sort_order" : 2,
                "publish" : true
      } 
    }
    

    This endpoint updates a specific attribute.

    HTTP Request

    PUT https://{hash}.{region}.jasperpim.com/api/v1/attributes/<ATTRIBUTE_ID>

    URL Parameters

    Parameter Description
    ATTRIBUTE_ID The ID of the attribute to update

    Update a Specific Attribute Version

    curl "https://{hash}.{region}.jasperpim.com/api/v1/attributes/2/version/1" \
      -X PUT \
      -d '{
        "name":"País"
       }' \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
      "attribute": {
        "id": 2,
        "name": "Pais",
        "type": "multiselect",
        "display_group_id": null,
        "note": null,
        "length": null,
        "sort_order": 0,
        "slug": "Country",
        "publish": true
      }
    }
    

    This endpoint updates a specific attribute.

    HTTP Request

    PUT https://{hash}.{region}.jasperpim.com/api/v1/attributes/<ATTRIBUTE_ID>/version/<VERSION_ID>

    URL Parameters

    Parameter Description
    ATTRIBUTE_ID The ID of the attribute to update
    VERSION_ID The ID of the version

    Delete a Specific Attribute

    curl "https://{hash}.{region}.jasperpim.com/api/v1/attributes/2" \
      -X DELETE \
      -H "Authorization: Bearer {token}"
    

    This endpoint deletes a specific attribute.

    HTTP Request

    DELETE https://{hash}.{region}.jasperpim.com/api/v1/attributes/<ATTRIBUTE_ID>

    URL Parameters

    Parameter Description
    ATTRIBUTE_ID The ID of the attribute to delete

    Delete a Specific Attribute Version

    curl "https://{hash}.{region}.jasperpim.com/api/v1/attributes/<ATTRIBUTE_ID>/version/<VERSION_ID>" \
      -X DELETE \
      -H "Authorization: Bearer {token}"
    

    This endpoint deletes a specific attribute.

    HTTP Request

    DELETE https://{hash}.{region}.jasperpim.com/api/v1/attributes/<ATTRIBUTE_ID>/version/<VERSION_ID>

    URL Parameters

    Parameter Description
    ATTRIBUTE_ID The ID of the attribute to delete
    VERSION_ID The ID of the version

    Search Attributes by Name

    curl "https://{hash}.{region}.jasperpim.com/api/v1/attributes/search" \
      -X POST \
      -d '{
        "name": "Color"
      }' \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
      "attribute": {
        "id": 1,
        "name": "Color",
        "slug": "color",
        ...
      }
    }
    

    This endpoint searches for an attribute by exact name match. Returns a single attribute or an empty response if no match is found.

    HTTP Request

    POST https://{hash}.{region}.jasperpim.com/api/v1/attributes/search

    Request Body

    Parameter Required Description
    name yes Exact attribute name to search for

    Attribute Type Values

    Attribute Type Value Properties

    Property Description
    id Jasper attribute type value ID
    attribute_id ID of the attribute to which the type value belongs
    value Type value (e.g. for drop down list)
    slug Slugified type value
    sort_order (integer) Display sort order
    version_id The ID of the version
    created_at Time the type value was created (read only)
    updated_at Time the type value was updated (read only)

    Get All Attribute Type Values

    curl "https://{hash}.{region}.jasperpim.com/api/v1/attributes/1/type_values" \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
        "attribute_type_values" :
            [
              {
                "id": 1,
                "attribute_id": 1,
                "value" : "Yes"
              },
              {
                "id": 2,
                "attribute_id": 1,
                "value" : "No"
              }
            ]
    }
    

    This endpoint retrieves all attribute type values for a specific attribute.

    HTTP Request

    GET https://{hash}.{region}.jasperpim.com/api/v1/attributes/<ATTRIBUTE_ID>/type_values

    URL Parameters

    Parameter Description
    ATTRIBUTE_ID The ID of the attribute whose type values to retrieve

    Get All Attribute Type Values by Version

    curl "https://{hash}.{region}.jasperpim.com/api/v1/attributes/1/type_values/version/1" \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
        "attribute_type_values" :
            [
              {
                "id": 1,
                "attribute_id": 1,
                "value" : "Sim"
              },
              {
                "id": 2,
                "attribute_id": 1,
                "value" : "Não"
              }
            ]
    }
    

    This endpoint retrieves all attribute type values for a specific attribute.

    HTTP Request

    GET https://{hash}.{region}.jasperpim.com/api/v1/attributes/<ATTRIBUTE_ID>/type_values/version/<VERSION_ID>

    URL Parameters

    Parameter Description
    ATTRIBUTE_ID The ID of the attribute whose type values to retrieve
    VERSION_ID The ID of the version

    Get a Specific Attribute Type Value

    curl "https://{hash}.{region}.jasperpim.com/api/v1/attributes/2/type_values/1" \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
      "attribute_type_value" : {
        "id": 1,
        "attribute_id": 2,
        "value" : "Yes",
        "version_id": 0
      }
    }
    

    This endpoint retrieves the specific attribute type value.

    HTTP Request

    GET https://{hash}.{region}.jasperpim.com/api/v1/attributes/<ATTRIBUTE_ID>/type_values/<TYPE_VALUE_ID>

    URL Parameters

    Parameter Description
    ATTRIBUTE_ID The ID of the attribute type value to retrieve
    TYPE_VALUE_ID The ID of the attribute whose type value to retrieve

    Get a Version of the Specific Attribute Type Value

    curl "https://{hash}.{region}.jasperpim.com/api/v1/attributes/2/type_values/1/version/1" \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
      "attribute_type_value" : {
        "id": 1,
        "attribute_id": 2,
        "value" : "Sim",
        "version_id": 1
      }
    }
    

    This endpoint retrieves a version of the specific attribute type value.

    HTTP Request

    GET https://{hash}.{region}.jasperpim.com/api/v1/attributes/<ATTRIBUTE_ID>/type_values/<TYPE_VALUE_ID>/version/<VERSION_ID>

    URL Parameters

    Parameter Description
    ATTRIBUTE_ID The ID of the attribute type value to retrieve
    TYPE_VALUE_ID The ID of the attribute whose type value to retrieve
    VERSION_ID The ID of the version

    Create an Attribute Type Value

    curl "https://{hash}.{region}.jasperpim.com/api/v1/attributes/2/type_values" \
      -X POST \
      -d '{
                "value" : "Blue"
       }' \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
      "attribute_type_value" : {
                "id": 3,
                "attribute_id": 2,
                "value" : "Blue"
      }
    }
    

    This endpoint creates a new attribute type value.

    HTTP Request

    POST https://{hash}.{region}.jasperpim.com/api/v1/attributes/<ATTRIBUTE_ID>/type_values

    URL Parameters

    Parameter Description
    ATTRIBUTE_ID The ID of the attribute

    Update Attribute Type Value

    curl "https://{hash}.{region}.jasperpim.com/api/v1/attributes/2/type_values/1" \
      -X PUT \
      -d '{
        "value":"Country of origin"
       }' \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
      "attribute_type_value": {
        "id": 1,
        "attribute_id": 2,
        "value": "Country of origin",
        "version_id": 0
      }
    }
    

    This endpoint updates the specific attribute type value.

    HTTP Request

    PUT https://{hash}.{region}.jasperpim.com/api/v1/attributes/<ATTRIBUTE_ID>/type_values/<TYPE_VALUE_ID>

    URL Parameters

    Parameter Description
    ATTRIBUTE_ID The ID of the attribute
    TYPE_VALUE_ID The ID of the attribute type value

    Update the Version of the Attribute Type Value

    curl "https://{hash}.{region}.jasperpim.com/api/v1/attributes/2/type_values/1/version/1" \
      -X PUT \
      -d '{
        "value":"País"
       }' \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
      "attribute_type_value": {
        "id": 6,
        "attribute_id": 2,
        "value": "País",
        "slug": null,
        "version_id": 1
      }
    }
    

    This endpoint updates a version of the specific attribute type value.

    HTTP Request

    PUT https://{hash}.{region}.jasperpim.com/api/v1/attributes/<ATTRIBUTE_ID>/type_values/<TYPE_VALUE_ID>/version/<VERSION_ID>

    URL Parameters

    Parameter Description
    ATTRIBUTE_ID The ID of the attribute
    TYPE_VALUE_ID The ID of the attribute type value
    VERSION_ID The ID of the version

    Delete a Specific Attribute Type Value

    curl "https://{hash}.{region}.jasperpim.com/api/v1/attributes/2/type_values/1" \
      -X DELETE \
      -H "Authorization: Bearer {token}"
    

    This endpoint deletes a specific attribute type value.

    HTTP Request

    DELETE https://{hash}.{region}.jasperpim.com/api/v1/attributes/<ATTRIBUTE_ID>/type_values/<TYPE_VALUE_ID>

    URL Parameters

    Parameter Description
    ATTRIBUTE_ID The ID of the attribute to delete
    TYPE_VALUE_ID The ID of the type value

    Delete a Version of the Specific Attribute Type Value

    curl "https://{hash}.{region}.jasperpim.com/api/v1/attributes/2/type_values/1/version/1" \
      -X DELETE \
      -H "Authorization: Bearer {token}"
    

    This endpoint deletes a version of the specific attribute type value.

    HTTP Request

    DELETE https://{hash}.{region}.jasperpim.com/api/v1/attributes/<ATTRIBUTE_ID>/type_values/<TYPE_VALUE_ID>/version/<VERSION_ID>

    URL Parameters

    Parameter Description
    ATTRIBUTE_ID The ID of the attribute to delete
    TYPE_VALUE_ID The ID of the type value
    VERSION_ID The ID of the version

    Attribute Sets

    Attribute Set Properties

    Property Description
    id Jasper Attribute Set ID
    name Attribute Set name (must be unique)
    sort_order (integer) The sort order for display

    Get All Attribute Sets

    curl "https://{hash}.{region}.jasperpim.com/api/v1/attribute_sets" \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
        "attribute_sets" :
            [
              {
                "id": 1,
                "name": "Shoes",
                "sort_order" : 1
              },
              {
                "id": 2,
                "name": "Bow Ties",
                "sort_order" : 2
              }
            ]
    }
    

    This endpoint retrieves all attribute sets.

    HTTP Request

    GET https://{hash}.{region}.jasperpim.com/api/v1/attribute_sets

    Get a Specific Attribute Set

    curl "https://{hash}.{region}.jasperpim.com/api/v1/attribute_sets/2" \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
      "attribute_set" : {
                "id": 2,
                "name": "Bow Ties",
                "sort_order" : 2
      }
    }
    

    This endpoint retrieves a specific attribute set.

    HTTP Request

    GET https://{hash}.{region}.jasperpim.com/api/v1/attribute_sets/<ID>

    URL Parameters

    Parameter Description
    ID The ID of the attribute set to retrieve

    Create an Attribute Set

    curl "https://{hash}.{region}.jasperpim.com/api/v1/attribute_sets" \
      -X POST \
      -d '{
        "name" : "Gaskets",
        "sort_order" : 3
       }' \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
      "attribute_set" : {
            "id" : 3,
            "name" : "Gaskets",
            "sort_order" : 3
      }
    }
    

    This endpoint creates a new attribute set.

    HTTP Request

    POST https://{hash}.{region}.jasperpim.com/api/v1/attribute_sets

    Update a Specific Attribute Set

    curl "https://{hash}.{region}.jasperpim.com/api/v1/attribute_sets/2" \
      -X PUT \
      -d '{
        "name":"Bikes"
       }' \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
      "attribute_set" : {
                "id": 2,
                "name": "Bikes",
                "sort_order": 2
      } 
    }
    

    This endpoint updates a specific attribute set.

    HTTP Request

    PUT https://{hash}.{region}.jasperpim.com/api/v1/attribute_sets/<ID>

    URL Parameters

    Parameter Description
    ID The ID of the attribute set to update

    Delete a Specific Attribute Set

    curl "https://{hash}.{region}.jasperpim.com/api/v1/attribute_sets/2" \
      -X DELETE \
      -H "Authorization: Bearer {token}"
    

    This endpoint deletes a specific attribute set.

    HTTP Request

    DELETE https://{hash}.{region}.jasperpim.com/api/v1/attribute_sets/<ID>

    URL Parameters

    Parameter Description
    ID The ID of the attribute set to delete

    Search Attribute Sets by Name

    curl "https://{hash}.{region}.jasperpim.com/api/v1/attribute_sets/search" \
      -X POST \
      -d '{
        "name": "Default"
      }' \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
      "attribute_set": {
        "id": 1,
        "name": "Default",
        ...
      }
    }
    

    This endpoint searches for an attribute set by exact name match. Returns a single attribute set or an empty response if no match is found.

    HTTP Request

    POST https://{hash}.{region}.jasperpim.com/api/v1/attribute_sets/search

    Request Body

    Parameter Required Description
    name yes Exact attribute set name to search for

    Attribute Set Attributes

    Attribute Set Attribute Properties

    Property Description
    id Jasper attribute set attribute ID
    attribute_id ID of the attribute
    attribute_set_id ID of the attribute set

    Get All Attribute Set Attributes

    curl "https://{hash}.{region}.jasperpim.com/api/v1/attribute_sets/1/attributes" \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
        "attribute_set_attributes" :
            [
              {
                "id": 1,
                "attribute_id": 1,
                "attribute_set_id" : 1
              },
              {
                "id": 2,
                "attribute_id": 2,
                "attribute_set_id" : 1
              }
            ]
    }
    

    This endpoint retrieves all attribute set attributes for a specific attribute set.

    HTTP Request

    GET https://{hash}.{region}.jasperpim.com/api/v1/attribute_sets/<ATTRIBUTESETID>/attributes

    URL Parameters

    Parameter Description
    ATTRIBUTESETID The ID of the attribute set whose attributes to retrieve

    Errors

    Status Reason
    404 The attribute set has no attributes, or does not exist

    Get a Specific Attribute Set Attribute

    curl "https://{hash}.{region}.jasperpim.com/api/v1/attribute_sets/1/attributes/2" \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
        "attribute_set_attribute" : {
            "id": 2,
            "attribute_set_id": 1,
            "attribute_id": 2,
            "sort_order": 1,
            "created_at": "2026-05-09T14:10:55+00:00",
            "updated_at": "2026-05-09T14:10:55+00:00"
        }
    }
    

    This endpoint retrieves a single attribute as assigned to an attribute set.

    Note that ATTRIBUTEID is the ID of the attribute itself, not the ID of the assignment row returned as id.

    HTTP Request

    GET https://{hash}.{region}.jasperpim.com/api/v1/attribute_sets/<ATTRIBUTESETID>/attributes/<ATTRIBUTEID>

    URL Parameters

    Parameter Description
    ATTRIBUTESETID The ID of the attribute set
    ATTRIBUTEID The ID of the attribute whose assignment to retrieve

    Errors

    Status Reason
    404 The attribute is not assigned to this attribute set

    Create an Attribute Set Attribute

    curl "https://{hash}.{region}.jasperpim.com/api/v1/attribute_sets/2/attributes" \
      -X POST \
      -d '{
                "attribute_id" : 3
       }' \
      -H "Authorization: Bearer {token}"
    

    This endpoint creates a new attribute set attribute.

    HTTP Request

    POST https://{hash}.{region}.jasperpim.com/api/v1/attribute_sets/<ATTRIBUTESETID>/attributes

    URL Parameters

    Parameter Description
    ATTRIBUTESETID The ID of the attribute set

    Delete a Specific Attribute Set Attribute

    curl "https://{hash}.{region}.jasperpim.com/api/v1/attribute_sets/2/attributes/1" \
      -X DELETE \
      -H "Authorization: Bearer {token}"
    

    This endpoint deletes a specific attribute set attribute.

    HTTP Request

    DELETE https://{hash}.{region}.jasperpim.com/api/v1/attribute_sets/<ATTRIBUTESETID>/attributes/<ID>

    URL Parameters

    Parameter Description
    ID The attribute ID to delete
    ATTRIBUTESETID The ID of the attribute set whose attribute to delete

    Blocks

    Block Properties

    Property Description
    id Jasper Block ID
    name Block name
    slug Slug
    content Content

    Get All Blocks

    curl "https://{hash}.{region}.jasperpim.com/api/v1/blocks" \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
        "blocks" :
            [
              {
                "id": 1,
                "name": "Main Script",
                "slug": "main-script",
                ...
              },
              {
                "id": 2,
                "name": "Footer Script",
                "slug": "footer-script"
                ...
              }
            ]
    }
    

    This endpoint retrieves all blocks.

    HTTP Request

    GET https://{hash}.{region}.jasperpim.com/api/v1/blocks

    Get a Specific Block

    curl "https://{hash}.{region}.jasperpim.com/api/v1/blocks/2" \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
      "block" : {
                "id": 2,
                "name": "Footer Script",
                "slug": "footer-script"
                ...
      }
    }
    

    This endpoint retrieves a specific block.

    HTTP Request

    GET https://{hash}.{region}.jasperpim.com/api/v1/blocks/<ID>

    URL Parameters

    Parameter Description
    ID The ID of the block to retrieve

    Create a Block

    curl "https://{hash}.{region}.jasperpim.com/api/v1/blocks" \
      -X POST \
      -d '{
        "name":"Header Script",
        "slug":"header-script"
       }' \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
      "block" : {
          "id" : 3,
          "name" : "Header Script",
          "slug" : "header-script"
          ...
      }
    }
    

    This endpoint creates a new block.

    HTTP Request

    POST https://{hash}.{region}.jasperpim.com/api/v1/blocks

    Update a Specific Block

    curl "https://{hash}.{region}.jasperpim.com/api/v1/blocks/2" \
      -X PUT \
      -d '{
        "name":"Other Script"
       }' \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
      "block" : {
            "id": 2,
            "name": "Other Script",
            "slug": "Footer Script"
          ...
      } 
    }
    

    This endpoint updates a specific block.

    HTTP Request

    PUT https://{hash}.{region}.jasperpim.com/api/v1/blocks/<ID>

    URL Parameters

    Parameter Description
    ID The ID of the block to update

    Delete a Block

    Deleting a block is not available through the API. The route exists but always responds 501 Not Implemented, on every PIM and for every token.

    {
        "message": "Not implemented."
    }
    

    HTTP Request

    DELETE https://{hash}.{region}.jasperpim.com/api/v1/blocks/<ID>

    Block Assets

    Block Asset Properties

    Property Description
    id Jasper block asset ID
    block_id ID of the block to which the asset belongs
    uri URI
    alttext Image alternate text
    sort_order Sort order of the asset
    thumbnail (boolean) Whether the asset is the thumbnail

    Get All Block Assets

    curl "https://{hash}.{region}.jasperpim.com/api/v1/blocks/1/assets" \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
        "block_assets" :
            [
              {
                "id": 1,
                "block_id": 1,
                "uri": "https://cdnpim.com/coolimage.png",
                "alttext": "Description of image",
                "sort_order": 1,
                "thumbnail": 1
              },
              {
                "id": 2,
                "block_id": 1,
                "uri": "https://cdnpim.com/coolimage.png",
                "alttext": "Description of image",
                "sort_order": 2,
                "thumbnail": 0
              }
            ]
    }
    

    This endpoint retrieves all block assets for a specific block.

    HTTP Request

    GET https://{hash}.{region}.jasperpim.com/api/v1/blocks/<BLOCKID>/assets

    URL Parameters

    Parameter Description
    BLOCKID The ID of the block whose assets to retrieve

    Get a Specific Block Asset

    curl "https://{hash}.{region}.jasperpim.com/api/v1/blocks/2/assets/1" \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
      "block_asset" : {
                "id": 1,
                "block_id": 2,
                "uri": "https://cdnpim.com/coolimage.png",
                "alttext": "Description of image",
                "sort_order": 1,
                "thumbnail" : 1
      }
    }
    

    This endpoint retrieves a specific block asset.

    HTTP Request

    GET https://{hash}.{region}.jasperpim.com/api/v1/blocks/<BLOCKID>/assets/<ID>

    URL Parameters

    Parameter Description
    ID The ID of the block asset to retrieve
    BLOCKID The ID of the block whose assets to retrieve

    Adding, Updating and Deleting Block Assets

    Creating, updating and deleting block assets is not available through the API. These routes exist but always respond 501 Not Implemented, on every PIM and for every token. Block assets are read-only through the API; use the two endpoints above to retrieve them.

    {
        "message": "Not implemented."
    }
    

    HTTP Requests

    POST https://{hash}.{region}.jasperpim.com/api/v1/blocks/<BLOCKID>/assets

    PUT https://{hash}.{region}.jasperpim.com/api/v1/blocks/<BLOCKID>/assets/<ID>

    DELETE https://{hash}.{region}.jasperpim.com/api/v1/blocks/<BLOCKID>/assets/<ID>

    Brands

    Brand Properties

    Property Description
    id Jasper Brand ID
    name Brand name (required on create, must be unique)
    desc Description
    excluded (boolean) Whether the brand is excluded from syndication
    exclusion_start_date (datetime) Start of the exclusion window
    exclusion_end_date (datetime) End of the exclusion window
    exclusion_reason Reason for the exclusion
    seo_search_keywords Comma separated list of search keywords
    seo_meta_desc Meta description
    seo_meta_keywords Meta keywords
    seo_title Meta page title
    product_count (integer) Number of products assigned to the brand (read only)
    created_at Time the brand was created (read only)
    updated_at Time the brand was updated (read only)

    Get All Brands

    curl "https://{hash}.{region}.jasperpim.com/api/v1/brands" \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
        "brands" :
            [
              {
                "id": 1,
                "name": "Aurora",
                "seo_title": "Aurora",
                "seo_search_keywords": "shoes, running",
                "product_count": 120,
                ...
              },
              {
                "id": 2,
                "name": "Northwind",
                ...
              }
            ],
        "links": {
            "first": "https://{hash}.{region}.jasperpim.com/api/v1/brands?page=1",
            "last": "https://{hash}.{region}.jasperpim.com/api/v1/brands?page=3",
            "prev": null,
            "next": "https://{hash}.{region}.jasperpim.com/api/v1/brands?page=2"
        },
        "meta": {
            "current_page": 1,
            "from": 1,
            "last_page": 3,
            "path": "https://{hash}.{region}.jasperpim.com/api/v1/brands",
            "per_page": 25,
            "to": 25,
            "total": 64
        }
    }
    

    This endpoint retrieves all brands. Results are paginated (default 25 per page).

    HTTP Request

    GET https://{hash}.{region}.jasperpim.com/api/v1/brands

    Query Parameters

    Parameter Description
    page The page of brands to retrieve
    limit Number of brands per page (default: 25)
    version (integer) Return the language version of every brand on the page, the same data Get a Version of a Brand returns for a single brand. Omit it, or pass 0, for the master version.

    Get a Specific Brand

    curl "https://{hash}.{region}.jasperpim.com/api/v1/brands/2" \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
      "brand" : {
          "id": 2,
          "name": "Northwind",
          ...
      }
    }
    

    This endpoint retrieves a specific brand.

    HTTP Request

    GET https://{hash}.{region}.jasperpim.com/api/v1/brands/<ID>

    URL Parameters

    Parameter Description
    ID The ID of the brand to retrieve

    Get a Version of a Brand

    curl "https://{hash}.{region}.jasperpim.com/api/v1/brands/2/version/2" \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
      "brand" : {
        "id": 2,
        "name": "Northwind - V2",
        ...
      }
    }
    

    This endpoint retrieves a specific version of a brand.

    HTTP Request

    GET https://{hash}.{region}.jasperpim.com/api/v1/brands/<ID>/version/<VERSION_ID>

    URL Parameters

    Parameter Description
    ID The ID of the brand to retrieve
    VERSION_ID The ID of the version

    Create a Brand

    curl "https://{hash}.{region}.jasperpim.com/api/v1/brands" \
      -X POST \
      -d '{
        "name":"New Northwind",
        "seo_title":"New Northwind",
        "seo_search_keywords":"shoes, apparel"
       }' \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
      "brand" : {
          "id" : 3,
          "name": "New Northwind",
          "seo_title": "New Northwind",
          "seo_search_keywords": "shoes, apparel",
          ...
      }
    }
    

    This endpoint creates a new brand.

    name is required and must be unique; creating a brand with a name that already exists returns 422.

    HTTP Request

    POST https://{hash}.{region}.jasperpim.com/api/v1/brands

    Update a Specific Brand

    curl "https://{hash}.{region}.jasperpim.com/api/v1/brands/2" \
      -X PUT \
      -d '{
        "name":"New Northwind"
       }' \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
      "brand" : {
          "id" : 2,
          "name": "New Northwind",
          ... 
      } 
    }
    

    This endpoint updates a specific brand.

    HTTP Request

    PUT https://{hash}.{region}.jasperpim.com/api/v1/brands/<ID>

    URL Parameters

    Parameter Description
    ID The ID of the brand to update

    Delete a Specific Brand

    curl "https://{hash}.{region}.jasperpim.com/api/v1/brands/2" \
      -X DELETE \
      -H "Authorization: Bearer {token}"
    

    This endpoint deletes a specific brand.

    HTTP Request

    DELETE https://{hash}.{region}.jasperpim.com/api/v1/brands/<ID>

    URL Parameters

    Parameter Description
    ID The ID of the brand to delete

    Search Brands by Name

    curl "https://{hash}.{region}.jasperpim.com/api/v1/brands/search" \
      -X POST \
      -d '{
        "name": "Acme"
      }' \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
      "brand": {
        "id": 1,
        "name": "Acme",
        ...
      }
    }
    

    This endpoint searches for a brand by exact name match. Returns a single brand or an empty response if no match is found.

    HTTP Request

    POST https://{hash}.{region}.jasperpim.com/api/v1/brands/search

    Request Body

    Parameter Required Description
    name yes Exact brand name to search for

    Brand Assets

    Brand Asset Properties

    Property Description
    id Jasper Brand asset ID
    brand_id ID of the brand to which the asset belongs
    uri URI
    alttext Image alternate text
    thumbnail (boolean) Whether the asset is the thumbnail

    Get All Brand Assets

    curl "https://{hash}.{region}.jasperpim.com/api/v1/brands/1/assets" \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
        "brand_assets" :
            [
              {
                "id": 1,
                "brand_id": 1,
                "uri": "https://cdnpim.com/coolimage.png",
                "alttext": "Description of image",
                "thumbnail" : 1
              },
              {
                "id": 2,
                "brand_id": 1,
                "uri": "https://cdnpim.com/coolimage.png",
                "alttext": "Description of image",
                "thumbnail" : 0
              }
            ]
    }
    

    This endpoint retrieves all brand assets for a specific brand.

    HTTP Request

    GET https://{hash}.{region}.jasperpim.com/api/v1/brands/<BRANDID>/assets

    URL Parameters

    Parameter Description
    BRANDID The ID of the brand whose assets to retrieve

    Get a Specific Brand Asset

    curl "https://{hash}.{region}.jasperpim.com/api/v1/brands/2/assets/1" \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
      "brand_asset" : {
                "id": 1,
                "brand_id": 2,
                "uri": "https://cdnpim.com/coolimage.png",
                "alttext": "Description of image",
                "thumbnail" : 1
      }
    }
    

    This endpoint retrieves a specific brand asset.

    HTTP Request

    GET https://{hash}.{region}.jasperpim.com/api/v1/brands/<BRANDID>/assets/<ID>

    URL Parameters

    Parameter Description
    ID The ID of the brand asset to retrieve
    BRANDID The ID of the brand whose assets to retrieve

    Create a Brand Asset

    curl "https://{hash}.{region}.jasperpim.com/api/v1/brands/2/assets" \
      -X POST \
      -d '{
                "image_url": "https://cdnpim.com/coolimage.png",
                "alttext": "Description of image",
                "thumbnail" : 1
       }' \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
      "brand_asset" : {
                "id": 42,
                "brand_id": 2,
                "uri": "https://cdnpim.com/coolimage.png",
                "alttext": "Description of image",
                "thumbnail" : 1
      }
    }
    

    This endpoint creates a new brand asset.

    HTTP Request

    POST https://{hash}.{region}.jasperpim.com/api/v1/brands/<BRANDID>/assets

    URL Parameters

    Parameter Description
    BRANDID The ID of the brand

    Update a Specific Brand Asset

    curl "https://{hash}.{region}.jasperpim.com/api/v1/brands/2/assets/1" \
      -X PUT \
      -d '{
            "image_url": "https://cdnpim.com/coolimage.png",
            "alttext": "Description of image",
            "thumbnail" : 1
       }' \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
      "brand_asset" : {
            "id": 1,
            "brand_id" : 2,
            "uri": "https://cdnpim.com/coolimage.png",
            "alttext": "Description of image",
            "thumbnail" : 1
      } 
    }
    

    This endpoint updates a specific brand asset.

    HTTP Request

    PUT https://{hash}.{region}.jasperpim.com/api/v1/brands/<BRANDID>/assets/<ID>

    URL Parameters

    Parameter Description
    ID The ID of the brand asset to update
    BRANDID The ID of the brand whose asset to update

    Delete a Specific Brand Asset

    curl "https://{hash}.{region}.jasperpim.com/api/v1/brands/2/assets/1" \
      -X DELETE \
      -H "Authorization: Bearer {token}"
    

    This endpoint deletes a specific brand asset.

    HTTP Request

    DELETE https://{hash}.{region}.jasperpim.com/api/v1/brands/<BRANDID>/assets/<ID>

    URL Parameters

    Parameter Description
    ID The ID of the brand asset to delete
    BRANDID The ID of the brand whose asset to delete

    Brand Channels

    Update or Create Web ID

    curl "https://{hash}.{region}.jasperpim.com/api/v1/brands/1/channel/2" \
      -X POST \
      -d '{
            "web_id": 1
       }' \
      -H "Authorization: Bearer {token}"
    

    This endpoint updates or creates a web ID in brand_channels. If a web_id already exists in the given channel for a different brand, the request returns 422.

    HTTP Request

    POST https://{hash}.{region}.jasperpim.com/api/v1/brands/<BRANDID>/channel/<CHANNELID>

    URL Parameters

    Parameter Description
    BRANDID The ID of the brand.
    CHANNELID The ID of the channel.

    Request Body

    Parameter Required Description
    web_id yes The web ID to store for this brand and channel

    Errors

    Status Reason
    400 Request body was not valid JSON
    422 web_id was missing from the request body
    422 web_id already exists in this channel for a different brand

    Categories

    Category Properties

    Property Description
    id Jasper Category ID
    parent_id ID of the parent category (set to 0 if root category) (required)
    parent_name Name of the parent category (read only)
    name Category name (required, must be unique within its parent)
    slug Slugified category name
    desc Description
    status (string) Category status (allowed values: enabled, disabled)
    is_visible (boolean) Whether to display the category
    sort_order (integer) The sort order for display
    attribute_sets (array) Attribute set IDs (see the note below on how this field behaves on reads vs writes)
    seo_meta_desc Meta description
    seo_meta_keywords Meta keywords
    seo_meta_title Meta page title
    search_keywords Comma separated list of search keywords
    is_smart (boolean) Whether the category is a smart category (read only)
    fqn Fully qualified category name path (read only)
    category_attributes (array) Attributes with values assigned to the category (read only, always present)
    channels (array) Channels the category is assigned to, as {id, name} objects (read only)
    assets (array) Assets attached to the category (read only)
    assets_thumbnail (object) The category's thumbnail asset (read only)
    image_alttext Alt text of the thumbnail asset (read only)
    attributes (array) Array of attributes and the values assigned to the category, properties described below. Note: only present in certain requests when setting the query paramenter "?withAttributes=true"

    Category "attributes" properties

    Property Description
    id Jasper attribute ID
    name Name of the attribute
    slug Slugified category name
    displayName Display name of the attribute
    sortOrder Sort order of the attribute
    value Value of the attribute assigned to the category

    Get All Categories

    curl "https://{hash}.{region}.jasperpim.com/api/v1/categories?withAttributes=true" \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
        "categories" :
            [
              {
                "id" : 1,
                "parent_id" : null,
                "name" : "Shopify Root",
                "desc" : "Root for Shopify collections",
                "attribute_sets" : [1, 4, 5],
                "is_visible" : true,
                "seo_meta_desc": "Meta description",
                "seo_meta_keywords": "Keyword A, keyword B",
                "seo_meta_title": "Shopify Root",
                "search_keywords": "Keyword A, keyword B",
                "created_at": "1999-12-31 23:59:59",
                "updated_at": "2099-12-31 23:59:59",
                "attributes": [
                  {
                    "id": 55,
                    "name": "Special Tags",
                    "slug": "special-tags",
                    "displayName": "Special Tags",
                    "value": "TagOne,TagTwo",
                    "sortOrder": 0
                  },
                  {
                    "id": 56,
                    "name": "Is promotional?",
                    "slug": "is-promotional",
                    "displayName": "Is promotional?",
                    "value": "false",
                    "sortOrder": 1
                  }
                ]
              },
              {
                "id" : 2,
                "parent_id" : 1,
                "name" : "Shoes",
                "desc" : "Shoes",
                "attribute_sets" : [],
                "is_visible" : true
                ...
              }
            ],
        "links": {
            "first": "https://{hash}.{region}.jasperpim.com/api/v1/categories?page=1",
            "last": "https://{hash}.{region}.jasperpim.com/api/v1/categories?page=2",
            "prev": null,
            "next": "https://{hash}.{region}.jasperpim.com/api/v1/categories?page=2"
        },
        "meta": {
            "current_page": 1,
            "from": 1,
            "last_page": 2,
            "path": "https://{hash}.{region}.jasperpim.com/api/v1/categories",
            "per_page": 25,
            "to": 25,
            "total": 42
        }
    }
    

    This endpoint retrieves all categories. Results are paginated (default 25 per page).

    HTTP Request

    GET https://{hash}.{region}.jasperpim.com/api/v1/categories

    Query Parameters

    Parameter Description
    withAttributes (optional) If set to "true" will also pull the attributes assigned to the category and their values.
    page (optional) The page of categories to retrieve
    limit (optional) Number of categories per page (default: 25)

    Get a Specific Category

    curl "https://{hash}.{region}.jasperpim.com/api/v1/categories/1" \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
      "category" : {
                "id" : 1,
                "parent_id" : null,
                "name" : "Shopify Root",
                "desc" : "Root for Shopify collections",
                "attribute_sets" : [1, 4, 5],
                "is_visible" : true
                ...
      }
    }
    

    This endpoint retrieves a specific category.

    HTTP Request

    GET https://{hash}.{region}.jasperpim.com/api/v1/categories/<ID>

    URL Parameters

    Parameter Description
    ID The ID of the category to retrieve

    Query Parameters

    Parameter Description
    withAttributes (optional) If set to "true" will also pull the attributes assigned to the category and their values.

    Get a Version of a Category

    curl "https://{hash}.{region}.jasperpim.com/api/v1/categories/1/version/2" \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
      "category" : {
        "id" : 1,
        "parent_id" : null,
        "name" : "Shopify Root",
        "desc" : "Root for Shopify collections",
        "attribute_sets" : [1, 4, 5],
        "is_visible" : true,
        ...
      }
    }
    

    This endpoint retrieves a specific version of a category.

    HTTP Request

    GET https://{hash}.{region}.jasperpim.com/api/v1/categories/<ID>/version/<VERSION_ID>

    URL Parameters

    Parameter Description
    ID The ID of the category to retrieve
    VERSION_ID The ID of the version

    Create a Category

    curl "https://{hash}.{region}.jasperpim.com/api/v1/categories" \
      -X POST \
      -d '{
        "parent_id" : 2
        "name":"Men\'s"
       }' \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
      "category" : {
                "id" : 3,
                "parent_id" : 2,
                "name" : "Men's",
                ...
      }
    }
    

    This endpoint creates a new category.

    HTTP Request

    POST https://{hash}.{region}.jasperpim.com/api/v1/categories

    Update a Specific Category

    curl "https://{hash}.{region}.jasperpim.com/api/v1/categories/1" \
      -X PUT \
      -d '{
        "name":"Shopify New Root"
       }' \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
      "category" : {
                "id" : 1,
                "parent_id" : null,
                "name" : "Shopify New Root",
                "desc" : "Root for Shopify collections",
                "attribute_sets" : [1, 4, 5],
                "is_visible" : true,
                ...
      } 
    }
    

    This endpoint updates a specific category.

    Protected categories cannot be updated. parent_id cannot point to the category itself or to any of its descendants. The category name must remain unique within its parent.

    HTTP Request

    PUT https://{hash}.{region}.jasperpim.com/api/v1/categories/<ID>

    URL Parameters

    Parameter Description
    ID The ID of the category to update

    Delete a Specific Category

    HTTP Request

    DELETE https://{hash}.{region}.jasperpim.com/api/v1/categories/<ID>

    Category Assets

    Category Asset Properties

    Property Description
    id Jasper Category asset ID
    category_id ID of the category to which the asset belongs
    uri URI
    alttext Image alternate text
    thumbnail (boolean) Whether the asset is the thumbnail

    Get All Category Assets

    curl "https://{hash}.{region}.jasperpim.com/api/v1/categories/1/assets" \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
        "category_assets" :
            [
              {
                "id": 1,
                "category_id": 1,
                "uri": "https://cdnpim.com/coolimage.png",
                "alttext": "Description of image",
                "thumbnail" : 1
              },
              {
                "id": 2,
                "category_id": 1,
                "uri": "https://cdnpim.com/coolimage.png",
                "alttext": "Description of image",
                "thumbnail" : 0
              }
            ]
    }
    

    This endpoint retrieves all category assets for a specific category.

    HTTP Request

    GET https://{hash}.{region}.jasperpim.com/api/v1/categories/<CATEGORYID>/assets

    URL Parameters

    Parameter Description
    CATEGORYID The ID of the category whose assets to retrieve

    Get a Specific Category Asset

    curl "https://{hash}.{region}.jasperpim.com/api/v1/categories/2/assets/1" \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
      "category_asset" : {
                "id": 1,
                "category_id": 2,
                "uri": "https://cdnpim.com/coolimage.png",
                "alttext": "Description of image",
                "thumbnail" : 1
      }
    }
    

    This endpoint retrieves a specific category asset.

    HTTP Request

    GET https://{hash}.{region}.jasperpim.com/api/v1/categories/<CATEGORYID>/assets/<ID>

    URL Parameters

    Parameter Description
    ID The ID of the category asset to retrieve
    CATEGORYID The ID of the category whose assets to retrieve

    Create a Category Asset

    curl "https://{hash}.{region}.jasperpim.com/api/v1/categories/2/assets" \
      -X POST \
      -d '{
                "image_url": "https://cdnpim.com/coolimage.png",
                "alttext": "Description of image",
                "thumbnail" : 1
       }' \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
      "category_asset" : {
                "id": 42,
                "category_id": 2,
                "uri": "https://cdnpim.com/coolimage.png",
                "alttext": "Description of image",
                "thumbnail" : 1
      }
    }
    

    This endpoint creates a new category asset.

    HTTP Request

    POST https://{hash}.{region}.jasperpim.com/api/v1/categories/<CATEGORYID>/assets

    URL Parameters

    Parameter Description
    CATEGORYID The ID of the category

    Update a Specific Category Asset

    curl "https://{hash}.{region}.jasperpim.com/api/v1/categories/2/assets/1" \
      -X PUT \
      -d '{
            "image_url": "https://cdnpim.com/coolimage.png",
            "alttext": "Description of image",
            "thumbnail" : 1
       }' \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
      "category_asset" : {
            "id": 1,
            "category_id" : 2,
            "uri": "https://cdnpim.com/coolimage.png",
            "alttext": "Description of image",
            "thumbnail" : 1
      } 
    }
    

    This endpoint updates a specific category asset.

    HTTP Request

    PUT https://{hash}.{region}.jasperpim.com/api/v1/categories/<CATEGORYID>/assets/<ID>

    URL Parameters

    Parameter Description
    ID The ID of the category asset to update
    CATEGORYID The ID of the category whose asset to update

    Delete a Specific Category Asset

    curl "https://{hash}.{region}.jasperpim.com/api/v1/categories/2/assets/1" \
      -X DELETE \
      -H "Authorization: Bearer {token}"
    

    This endpoint deletes a specific category asset.

    HTTP Request

    DELETE https://{hash}.{region}.jasperpim.com/api/v1/categories/<CATEGORYID>/assets/<ID>

    URL Parameters

    Parameter Description
    ID The ID of the category asset to delete
    CATEGORYID The ID of the category whose asset to delete

    Category Channels

    Update or Create Web ID

    curl "https://{hash}.{region}.jasperpim.com/api/v1/categories/680/channel/2" \
      -X POST \
      -d '{
            "web_id": 1
       }' \
      -H "Authorization: Bearer {token}"
    

    This endpoint updates or creates a web ID in category_channels. If a web_id already exists in the given channel for a different category, the request returns 422.

    HTTP Request

    POST https://{hash}.{region}.jasperpim.com/api/v1/categories/<CATEGORYID>/channel/<CHANNELID>

    URL Parameters

    Parameter Description
    CATEGORYID The ID of the category.
    CHANNELID The ID of the channel.

    Request Body

    Parameter Required Description
    web_id yes The web ID to store for this category and channel

    Errors

    Status Reason
    400 Request body was not valid JSON
    422 web_id was missing from the request body
    422 web_id already exists in this channel for a different category

    Changelogs

    The Changelogs endpoint returns a feed of recent change events recorded against PIM entities (products, categories, brands, etc.). Use it to power incremental sync clients that need to know what has changed since their last poll.

    Changelog Properties

    Property Description
    id Changelog row ID
    updated_at (datetime) When the change was recorded (ISO 8601, UTC)
    entity_id The ID of the entity that changed
    entity_type (string) The entity type that changed (valid values: product, brand, category, product_asset, attribute, attribute_set)
    change_type (string) The type of change (valid values: full, delete, reset)

    Get All Changelogs

    curl "https://{hash}.{region}.jasperpim.com/api/v1/changelogs" \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
        "changelogs" : [
          {
            "id": 12345,
            "updated_at": "2026-05-09 14:10:55",
            "entity_id": 678,
            "entity_type": "product",
            "change_type": "full"
          },
          {
            "id": 12346,
            "updated_at": "2026-05-09 14:11:02",
            "entity_id": 9,
            "entity_type": "brand",
            "change_type": "full"
          }
        ]
    }
    

    This endpoint returns a paginated list of changelog entries. Default page size is 250 entries.

    HTTP Request

    GET https://{hash}.{region}.jasperpim.com/api/v1/changelogs

    Query Parameters

    Parameter Default Description
    limit 250 Page size (entries per response)
    entity_type (none) Filter to a single entity type, e.g. product
    updated_at (none) Return only entries with updated_at >= this value (ISO 8601 datetime)

    Get a Specific Changelog

    curl "https://{hash}.{region}.jasperpim.com/api/v1/changelogs/12345" \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
        "changelogs" : {
            "id": 12345,
            "updated_at": "2026-05-09 14:10:55",
            "entity_id": 678,
            "entity_type": "product",
            "change_type": "full"
        }
    }
    

    This endpoint returns a single changelog entry by ID.

    HTTP Request

    GET https://{hash}.{region}.jasperpim.com/api/v1/changelogs/<ID>

    URL Parameters

    Parameter Description
    ID The ID of the changelog entry to retrieve

    Channels

    Channel Properties

    Property Description
    id Jasper Channel ID
    channel_name Channel name
    sync (boolean) Whether the channel is currently enabled
    price_base Code for price book base for use on channel
    inventory_location Code for base inventory for use on channel
    version_id ID of the version (language) the channel publishes; 0 is master
    version_name Name of that version (Master when version_id is 0)

    Channels are read-only

    Get All Channels

    curl "https://{hash}.{region}.jasperpim.com/api/v1/channels" \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
        "channels" :
            [
              {
                "id": 1,
                "channel_name": "Shopify",
                "sync": true,
                "price_base": "USD",
                "inventory_location": "NYC",
                "version_id": 0,
                "version_name": "Master"
              },
              {
                "id": 2,
                "channel_name": "BigCommerce",
                "sync" : false,
                "price_base": "CAD",
                "inventory_location": "YYZ",
                "version_id": 0,
                "version_name": "Master"
              }
            ]
    }
    

    This endpoint retrieves all channels.

    HTTP Request

    GET https://{hash}.{region}.jasperpim.com/api/v1/channels

    Get a Specific Channel

    curl "https://{hash}.{region}.jasperpim.com/api/v1/channels/2" \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
      "channel" : {
          "id": 2,
          "channel_name": "BigCommerce",
          "sync" : false,
          "price_base": "CAD",
          "inventory_location": "YYZ",
          "version_id": 0,
          "version_name": "Master"
      }
    }
    

    This endpoint retrieves a specific channel.

    HTTP Request

    GET https://{hash}.{region}.jasperpim.com/api/v1/channels/<ID>

    URL Parameters

    Parameter Description
    ID The ID of the channel to retrieve

    Display Groups

    Display Group Properties

    Property Description
    id Jasper Display Group Id
    name Display Group Name
    sort_order (integer) the sort order for display
    in_navigation (boolean) Whether to display the display group

    Get All Display Groups

    curl "https://{hash}.{region}.jasperpim.com/api/v1/display-groups" \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
        "display_groups" :
            [
              {
                "id" : 1,
                "name" : "Textiles",
                "sort_order" : 1,
                "in_navigation" : true
              },          
              {
                "id" : 2,
                "name" : "Logos",
                "sort_order" : 2,
                "in_navigation" : false
              }
            ]
    }
    

    This endpoint retrieves all display groups.

    HTTP request

    GET https://{hash}.{region}.jasperpim.com/api/v1/display-groups

    Get a Specific Display Group

    curl "https://{hash}.{region}.jasperpim.com/api/v1/display-groups/1" \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    
    {
      "display_group": {
                 "id" : 1,
                 "name" : "Textiles",
                 "sort_order" : 1,
                 "in_navigation" : true
            }
    }         
    

    This endpoint retrieves a specific display group.

    HTTP Request

    GET https://{hash}.{region}.jasperpim.com/api/v1/display-groups/<ID>

    URL Parameters

    Parameter Description
    ID The ID of the display group to retrieve

    Create a Display Group

    curl "https://{hash}.{region}.jasperpim.com/api/v1/display-groups" \
      -X POST \
      -d '{
        "name":"Technical Specifications"
       }' \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
      "display_group" : {
                "id" : 3,
                "name" : "Technical Specifications"
      }
    }
    

    This endpoint creates a new display group.

    HTTP Request

    POST https://{hash}.{region}.jasperpim.com/api/v1/display-groups

    Update a Specific Display Group

    curl "https://{hash}.{region}.jasperpim.com/api/v1/display-groups/1" \
      -X PUT \
      -d '{
        "name":"Textile Classifications"
       }' \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
      "display_group" : {
            "id" : 1,
            "name" : "Textiles",
            "sort_order" : 1,
            "in_navigation" : true
      }
    }
    

    This endpoint updates a specific display group.

    HTTP Request

    PUT https://{hash}.{region}.jasperpim.com/api/v1/display-groups/<ID>

    URL Parameters

    Parameter Description
    ID The ID of the display group to update

    Exports

    Get Export File and Status

    curl "https://{hash}.{region}.jasperpim.com/api/v1/exports/2" \
      -X GET \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
        "export" : {
            "id": 1,
            "profile_id": 1,
            "status": "queued",
            "filename": "something",
            "file_url": "https://{hash}.{region}.jasperpim.com/exports/1/download",
            "created_at": "2020-02-07T21:09:01+00:00"
        }
    }
    

    This endpoint gets the export status and retrieves the exported file.

    HTTP Request

    GET https://{hash}.{region}.jasperpim.com/api/v1/exports/<ID>

    URL Parameters

    Parameter Description
    ID The ID of the export to check status and retrieve file

    Create an Export

    curl "https://{hash}.{region}.jasperpim.com/api/v1/exports" \
      -X POST \
      -d '{
        "profile_id": 1
       }' \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
        "export" : {
            "id": 2,
            "profile_id": 1,
            "status": "queued",
            "filename": null,
            "file_url": "https://{hash}.{region}.jasperpim.com/exports/2/download",
            "created_at": "2026-05-09T14:10:55+00:00"
        }
    }
    

    This endpoint queues a new export job for the given import/export profile. The export starts in queued state; poll GET /exports/{id} to check progress and retrieve the file_url once status is done. Possible status values: queued, processing, done, failed.

    HTTP Request

    POST https://{hash}.{region}.jasperpim.com/api/v1/exports

    Request Body

    Parameter Required Description
    profile_id yes The ID of the import/export profile to run

    Errors

    Status Reason
    400 Request body was not valid JSON
    404 No profile exists with the given profile_id
    422 profile_id was missing from the request body

    Generic Entities

    Generic Entity Properties

    Property Description
    id Jasper generic entity ID
    name Generic entity name
    description Generic entity description
    is_tree (boolean) Whether to display the listing as a flat table or nested view
    is_product_attribute (boolean) Whether the generic entity is selectable in the product details
    priority Generic entity priority
    publishable (boolean) Whether the generic entity can be published to channels
    display_on_navigation (boolean) Whether the generic entity gets displayed on the navigation bar

    Get All Generic Entities

    curl "https://{hash}.{region}.jasperpim.com/api/v1/generic-entities" \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
        "generic_entities" :
            [
              {
                "id" : 1,
                "name" : "Ambassador",
                "description" : "Product Ambassador campaign",
                "is_tree" : 1,
                "is_product_attribute" : 0,
                "priority" : 1,
                "publishable" : 1,
                "display_on_navigation" : 1,
                "attributes" : []
              },
              {
                "id" : 1,
                "name" : "Lookbook",
                "description" : "Stylized model shots",
                "is_tree" : 0,
                "is_product_attribute" : 1,
                "priority" : 2,
                "publishable" : 1,
                "display_on_navigation" : 1,
                "attributes" : []
              }
            ],
            "links": {
                "first": "https://{hash}.{region}.jasperpim.com/api/v1/generic-entities?page=1",
                "last": "https://{hash}.{region}.jasperpim.com/api/v1/generic-entities?page=1",
                "prev": null,
                "next": null
            },
            "meta": {
                "current_page": 1,
                "from": 1,
                "last_page": 1,
                "path": "https://{hash}.{region}.jasperpim.com/api/v1/generic-entities",
                "per_page": 250,
                "to": 1,
                "total": 1
            }
    }
    

    This endpoint retrieves all generic entities.

    HTTP Request

    GET https://{hash}.{region}.jasperpim.com/api/v1/generic-entities

    Optional URL Parameter

    Parameter Description
    Page number page number

    Example: GET https://{hash}.{region}.jasperpim.com/api/v1/generic-entities?page=1

    Generic entities are paginated in groups of 250

    Get a Specific Generic Entity

    curl "https://{hash}.{region}.jasperpim.com/api/v1/generic-entities/1" \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
      "generic_entity" : {
                "id" : 1,
                "name" : "Ambassador",
                "description" : "Product Ambassador campaign",
                "is_tree" : 1,
                "is_product_attribute" : 0,
                "priority" : 1,
                "publishable" : 1,
                "display_on_navigation" : 1,
                "attributes" : []
      }
    }
    

    This endpoint retrieves a specific generic entity.

    HTTP Request

    GET https://{hash}.{region}.jasperpim.com/api/v1/generic-entities/<ID>

    URL Parameters

    Parameter Description
    ID The ID of the generic entity to retrieve

    Create a Generic Entity

    curl "https://{hash}.{region}.jasperpim.com/api/v1/generic-entities" \
      -X POST \
      -d '{
        "name" : "Designer",
        "is_tree" : 0,
        "display_on_navigation" : 1,
        "publishable" : 0,
        "is_product_attribute" : 0,
        "priority" : 3
       }' \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
      "generic_entity" : {
             "id" : 3, 
             "name" : "Designer",
             "description" : null,
             "parent_id" : null,
             "is_tree" : 0,
             "display_on_navigation" : 1,
             "publishable" : 0,
             "is_product_attribute" : 0,
             "priority" : 3
      }
    }
    

    This endpoint creates a new generic entity.

    HTTP Request

    POST https://{hash}.{region}.jasperpim.com/api/v1/generic-entities

    Update a Specific Generic Entity

    curl "https://{hash}.{region}.jasperpim.com/api/v1/generic-entities/1" \
      -X PUT \
      -d '{
            "name" : "Designer",
            "is_tree" : 1,
            "description" : "Product designer",
            "display_on_navigation" : 0,
            "publishable" : 1,
            "is_product_attribute" : 1,
            "priority" : 4
       }' \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
      "generic_entity" : {
             "id" : 3, 
             "name" : "Designer",
             "description" : "Product designer",
             "parent_id" : null,
             "is_tree" : 1,
             "display_on_navigation" : 0,
             "publishable" : 1,
             "is_product_attribute" : 1,
             "priority" : 3
      }
    }
    

    This endpoint updates a specific generic entity.

    HTTP Request

    PUT https://{hash}.{region}.jasperpim.com/api/v1/generic-entities/<ID>

    URL Parameters

    Parameter Description
    ID The ID of the generic entity to update

    Delete a Specific Generic Entity

    curl "https://{hash}.{region}.jasperpim.com/api/v1/generic-entities/2" \
      -X DELETE \
      -H "Authorization: Bearer {token}"
    

    This endpoint deletes a specific generic entity.

    HTTP Request

    DELETE https://{hash}.{region}.jasperpim.com/api/v1/generic-entities/<ID>

    URL Parameters

    Parameter Description
    ID The ID of the generic entity to delete

    Concrete Entities

    Concrete Entity Properties

    Property Description
    id Concrete entity ID
    name Concrete entity name
    parent_id ID of the parent concrete entity
    generic_entity_id ID of the generic entity to which the concrete entity is attached
    priority Concrete entity priority
    slug Concrete entity slug

    Get Generic Entity Concrete Entities

    curl "https://{hash}.{region}.jasperpim.com/api/v1/generic-entities/1/concrete-entities" \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
        "concrete_entities": [
            {
                "id": 1,
                "name": "Summer Lookbook",
                "priority": 1,
                "parent_id": null,
                "generic_entity_id": 2,
                ...
            }
        ],
        "links": {
            "first": "https://{hash}.{region}.jasperpim.com/api/v1/generic-entities/1/concrete-entities?page=1",
            "last": "https://{hash}.{region}.jasperpim.com/api/v1/generic-entities/1/concrete-entities?page=1",
            "prev": null,
            "next": null
        },
        "meta": {
            "current_page": 1,
            "from": 1,
            "last_page": 1,
            "path": "https://{hash}.{region}.jasperpim.com/api/v1/generic-entities/1/concrete-entities",
            "per_page": 1000,
            "to": 1,
            "total": 1
        }
    }
    

    This endpoint retrieves all concrete entities assigned to a specific generic entity.

    HTTP Request

    GET https://{hash}.{region}.jasperpim.com/api/v1/generic-entities/<ID>/concrete-entities

    URL Parameters

    Parameter Description
    ID The ID of the generic entity from which you want to retrieve concrete entities`

    Generic entities are paginated in groups of 1000

    Get a Specific Concrete Entity

    curl "https://{hash}.{region}.jasperpim.com/api/v1/generic-entities/1/concrete-entities/1" \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
          "concrete_entity": {
              "id": 1,
              "name": "Summer Lookbook",
              "priority": 1,
              "parent_id": null,
              "generic_entity_id": 1,
              ...
          }
    }
    

    This endpoint retrieves a specific concrete entity within a specific generic entity.

    HTTP Request

    GET https://{hash}.{region}.jasperpim.com/api/v1/generic-entities/<genID>/concrete-entities/<conID>

    URL Parameters

    Parameter Description
    conID The ID of the concrete entity
    genID The ID of the generic entity

    Create a Concrete Entity

    curl "https://{hash}.{region}.jasperpim.com/api/v1/generic-entities/1/concrete-entities" \
      -X POST \
      -d '{
        "name" : "Winter Lookbook",
        "priority" : 2,
      }' \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
          "concrete_entity": {
              "id": 1,
              "name": "Winter Lookbook",
              "priority": 2,
              "parent_id": null,
              "generic_entity_id": 1,
              ...
          }
    }
    

    This endpoint creates a concrete entity for a generic entity

    HTTP Request

    POST https://{hash}.{region}.jasperpim.com/api/v1/generic-entities/<ID>/concrete-entities

    URL Parameters

    Parameter Description
    ID The ID of the generic entity for which you want to create a concrete entity

    Delete a Specific Concrete Entity

    curl "https://{hash}.{region}.jasperpim.com/api/v1/generic-entities/1/concrete-entities/2" \
      -X DELETE \
      -H "Authorization: Bearer {token}"
    

    This endpoint deletes a specific concrete entity.

    HTTP Request

    DELETE https://{hash}.{region}.jasperpim.com/api/v1/generic-entities/<genID>/concrete-entities/<conID>

    URL Parameters

    Parameter Description
    conID The ID of the concrete entity to delete
    genID The ID of the generic entity from which you're deleting the concrete entity

    Update a Concrete Entity

    curl "https://{hash}.{region}.jasperpim.com/api/v1/generic-entities/1/concrete-entities/1" \
      -X PUT \
      -d '{
            "name" : "Summer Lookbook",
            "priority" : 3,
            "parent_id" : 2,
            "generic_entity_id" : 1
       }' \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
          "concrete_entity": {
              "id": 1,
              "name": "Summer Lookbook",
              "priority": 3,
              "parent_id": 2,
              "generic_entity_id": 1,
              ...
          }
    }
    

    This endpoint updates a specific concrete entity.

    HTTP Request

    PUT https://{hash}.{region}.jasperpim.com/api/v1/generic-entities/<genID>/concrete-entities/<conID>

    URL Parameters

    Parameter Description
    conID The ID of the concrete entity to update
    genID The ID of the generic entity to update

    Options

    Option Properties

    Property Description
    id Jasper Option ID
    name Option name (must be unique)
    display_name Display name of the option
    slug Slugified option name
    created_at Time the option was created (read only)
    updated_at Time the option was updated (read only)

    Get All Options

    curl "https://{hash}.{region}.jasperpim.com/api/v1/options" \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
        "options" :
            [
              {
                "id": 1,
                "name": "Size"
              },
              {
                "id": 2,
                "name": "Colour"
              }
            ]
    }
    

    This endpoint retrieves all options.

    HTTP Request

    GET https://{hash}.{region}.jasperpim.com/api/v1/options

    Get a Specific Option

    curl "https://{hash}.{region}.jasperpim.com/api/v1/options/2" \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
      "option" : {
                "id": 2,
                "name": "Colour"
      }
    }
    

    This endpoint retrieves a specific option.

    HTTP Request

    GET https://{hash}.{region}.jasperpim.com/api/v1/options/<ID>

    URL Parameters

    Parameter Description
    ID The ID of the option to retrieve

    Create an Option

    curl "https://{hash}.{region}.jasperpim.com/api/v1/options" \
      -X POST \
      -d '{
        "name": "Finish",
       }' \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
      "option" : {
            "id" : 3,
            "name": "Finish"
      }
    }
    

    This endpoint creates a new option.

    HTTP Request

    POST https://{hash}.{region}.jasperpim.com/api/v1/options

    Update a Specific Option

    curl "https://{hash}.{region}.jasperpim.com/api/v1/options/2" \
      -X PUT \
      -d '{
        "name":"Type of Finish"
       }' \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
      "option" : {
                "id": 2,
                "name": "Type of Finish"
      } 
    }
    

    This endpoint updates a specific option.

    HTTP Request

    PUT https://{hash}.{region}.jasperpim.com/api/v1/options/<ID>

    URL Parameters

    Parameter Description
    ID The ID of the option to update

    Delete a Specific Option

    curl "https://{hash}.{region}.jasperpim.com/api/v1/options/2" \
      -X DELETE \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
      "message": "Deleted."
    }
    

    This endpoint deletes a specific option.

    HTTP Request

    DELETE https://{hash}.{region}.jasperpim.com/api/v1/options/<ID>

    URL Parameters

    Parameter Description
    ID The ID of the option to delete

    Search Options by Name

    curl "https://{hash}.{region}.jasperpim.com/api/v1/options/search" \
      -X POST \
      -d '{
        "name": "Size"
      }' \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
      "option": {
        "id": 1,
        "name": "Size",
        ...
      }
    }
    

    This endpoint searches for an option by exact name match. Returns a single option or an empty response if no match is found.

    HTTP Request

    POST https://{hash}.{region}.jasperpim.com/api/v1/options/search

    Request Body

    Parameter Required Description
    name yes Exact option name to search for

    Option Values

    Option Value Properties

    Property Description
    id Jasper option value ID
    optionId ID of the option to which the value belongs (response key)
    value Value of the Option Value
    label Label of the Option Value
    sortOrder (integer) Sort order for the value (response key)
    version_id ID of the version (language) the value belongs to; 0 is master
    versions (object) Per-version variants of the value, keyed by version ID (read only)
    createdAt Time the value was created (read only)
    updatedAt Time the value was updated (read only)

    Get All Option Values

    curl "https://{hash}.{region}.jasperpim.com/api/v1/options/1/values" \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
        "option_values" :
            [
              {
                "id": 1,
                "version_id": 0,
                "optionId": 1,
                "value" : "Yes",
                "label": "Yes",
                "sortOrder": 0,
                "versions": {}
              },
              {
                "id": 2,
                "version_id": 0,
                "optionId": 1,
                "value" : "No",
                "label": "No",
                "sortOrder": 1,
                "versions": {}
              }
            ]
    }
    

    This endpoint retrieves all option values for a specific option.

    HTTP Request

    GET https://{hash}.{region}.jasperpim.com/api/v1/options/<OPTION_ID>/values

    URL Parameters

    Parameter Description
    OPTION_ID The ID of the option whose values to retrieve

    Get a Specific Option Value

    curl "https://{hash}.{region}.jasperpim.com/api/v1/options/2/values/1" \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
      "option_value" : {
        "id": 1,
        "version_id": 0,
        "optionId": 2,
        "value": "Yes",
        "label": "Yes",
        "sortOrder": 0,
        "versions": {}
      }
    }
    

    This endpoint retrieves a specific option value.

    HTTP Request

    GET https://{hash}.{region}.jasperpim.com/api/v1/options/<OPTION_ID>/values/<ID>

    URL Parameters

    Parameter Description
    ID The ID of the option value to retrieve
    OPTION_ID The ID of the option whose value to retrieve

    Create an Option Value

    curl "https://{hash}.{region}.jasperpim.com/api/v1/options/2/values" \
      -X POST \
      -d '{
                "value" : "Blue",
                "label" : "Blue"
       }' \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
      "option_value" : {
                "id": 3,
                "version_id": 0,
                "optionId": 2,
                "value": "Blue",
                "label": "Blue",
                "sortOrder": 0,
                "versions": {}
      }
    }
    

    This endpoint creates a new option value.

    If a value with the same value already exists for the option, no new record is created; the existing option value is returned with status 200 instead of 201.

    HTTP Request

    POST https://{hash}.{region}.jasperpim.com/api/v1/options/<OPTION_ID>/values

    URL Parameters

    Parameter Description
    OPTION_ID The ID of the option

    Update a Specific Option Value

    curl "https://{hash}.{region}.jasperpim.com/api/v1/options/2/values/1" \
      -X PUT \
      -d '{
            "value": "Pink",
            "label": "Pink"
       }' \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
      "option_value" : {
            "id": 1,
            "version_id": 0,
            "optionId": 2,
            "value": "Pink",
            "label": "Pink",
            "sortOrder": 0,
            "versions": {}
      } 
    }
    

    This endpoint updates a specific option value.

    HTTP Request

    PUT https://{hash}.{region}.jasperpim.com/api/v1/options/<OPTION_ID>/values/<ID>

    URL Parameters

    Parameter Description
    ID The ID of the option value to update
    OPTION_ID The ID of the option whose value to update

    Delete a Specific Option Value

    curl "https://{hash}.{region}.jasperpim.com/api/v1/options/2/values/1" \
      -X DELETE \
      -H "Authorization: Bearer {token}"
    

    This endpoint deletes a specific option value.

    HTTP Request

    DELETE https://{hash}.{region}.jasperpim.com/api/v1/options/<OPTION_ID>/values/<ID>

    URL Parameters

    Parameter Description
    ID The ID of the option value to delete
    OPTION_ID The ID of the option whose value to delete

    Option Sets

    Option Set Properties

    Property Description
    id Jasper Option Set ID
    name Option Set name

    Get All Option Sets

    curl "https://{hash}.{region}.jasperpim.com/api/v1/option_sets" \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
        "option_sets" :
            [
              {
                "id": 1,
                "name": "Shoes"
              },
              {
                "id": 2,
                "name": "Bow Ties"
              }
            ]
    }
    

    This endpoint retrieves all option sets.

    HTTP Request

    GET https://{hash}.{region}.jasperpim.com/api/v1/option_sets

    Get a Specific Option Set

    curl "https://{hash}.{region}.jasperpim.com/api/v1/option_sets/2" \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
      "option_set" : {
                "id": 2,
                "name": "Bow Ties"
      }
    }
    

    This endpoint retrieves a specific option set.

    HTTP Request

    GET https://{hash}.{region}.jasperpim.com/api/v1/option_sets/<ID>

    URL Parameters

    Parameter Description
    ID The ID of the option set to retrieve

    Create an Option Set

    curl "https://{hash}.{region}.jasperpim.com/api/v1/option_sets" \
      -X POST \
      -d '{
        "name" : "Gaskets"
       }' \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
      "option_set" : {
            "id" : 3,
            "name" : "Gaskets"
      }
    }
    

    This endpoint creates a new option set.

    HTTP Request

    POST https://{hash}.{region}.jasperpim.com/api/v1/option_sets

    Update a Specific Option Set

    curl "https://{hash}.{region}.jasperpim.com/api/v1/option_sets/2" \
      -X PUT \
      -d '{
        "name":"Bikes"
       }' \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
      "option_set" : {
                "id": 2,
                "name": "Bikes"
      } 
    }
    

    This endpoint updates a specific option set.

    HTTP Request

    PUT https://{hash}.{region}.jasperpim.com/api/v1/option_sets/<ID>

    URL Parameters

    Parameter Description
    ID The ID of the option set to update

    Delete a Specific Option Set

    curl "https://{hash}.{region}.jasperpim.com/api/v1/option_sets/2" \
      -X DELETE \
      -H "Authorization: Bearer {token}"
    

    The above command returns a JSON structured like this:

    {
      "message": "Deleted."
    }
    

    This endpoint deletes a specific option set.

    HTTP Request

    DELETE https://{hash}.{region}.jasperpim.com/api/v1/option_sets/<ID>

    URL Parameters

    Parameter Description
    ID The ID of the option set to delete

    Option Set Options

    Option Set Option Properties

    Property Description
    id Jasper option set option ID
    option_id (integer) ID of the option
    option_set_id (integer) ID of the option set
    sort_order (integer) Sort order for the option within the option set

    Get All Option Set Options

    curl "https://{hash}.{region}.jasperpim.com/api/v1/option_sets/1/options" \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
        "option_set_options" :
            [
              {
                "id": 1,
                "option_id": 1,
                "option_set_id": 1
              },
              {
                "id": 2,
                "option_id": 2,
                "option_set_id": 1
              }
            ]
    }
    

    This endpoint retrieves all option set options for a specific option set.

    HTTP Request

    GET https://{hash}.{region}.jasperpim.com/api/v1/option_sets/<OPTIONSETID>/options

    URL Parameters

    Parameter Description
    OPTIONSETID The ID of the option set whose options to retrieve

    Get a Specific Option Set Option

    curl "https://{hash}.{region}.jasperpim.com/api/v1/option_sets/1/options/2" \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
        "option_set_option" : {
            "id": 2,
            "option_set_id": 1,
            "option_id": 2,
            "sort_order": 1,
            "created_at": "2026-05-09T14:10:55+00:00",
            "updated_at": "2026-05-09T14:10:55+00:00"
        }
    }
    

    This endpoint retrieves a single option as assigned to an option set.

    Note that OPTIONID is the ID of the option itself, not the ID of the assignment row returned as id.

    HTTP Request

    GET https://{hash}.{region}.jasperpim.com/api/v1/option_sets/<OPTIONSETID>/options/<OPTIONID>

    URL Parameters

    Parameter Description
    OPTIONSETID The ID of the option set
    OPTIONID The ID of the option whose assignment to retrieve

    Errors

    Status Reason
    403 The option is not assigned to this option set, or does not exist

    Create/Update an Option Set Option

    curl "https://{hash}.{region}.jasperpim.com/api/v1/option_sets/2/options" \
      -X POST \
      -d '{
                "option_id" : 3,
                "sort_order" : 2
       }' \
      -H "Authorization: Bearer {token}"
    

    This endpoint creates a new option set option or updates an option set option.

    HTTP Request

    POST https://{hash}.{region}.jasperpim.com/api/v1/option_sets/<OPTIONSETID>/options

    URL Parameters

    Parameter Description
    OPTIONSETID The ID of the option set

    Delete a Specific Option Set Option

    curl "https://{hash}.{region}.jasperpim.com/api/v1/option_sets/2/options/1" \
      -X DELETE \
      -H "Authorization: Bearer {token}"
    

    The above command returns a JSON structured like this:

    {
      "message": "Deleted."
    }
    

    This endpoint deletes a specific option set option.

    HTTP Request

    DELETE https://{hash}.{region}.jasperpim.com/api/v1/option_sets/<OPTIONSETID>/options/<ID>

    URL Parameters

    Parameter Description
    ID The option ID to delete
    OPTIONSETID The ID of the option set whose option to delete

    Pages

    Page Properties

    Property Description
    id Jasper Page ID
    name Page name
    slug Page slug
    content HTML Content
    mobile_body Mobile optimized HTML content
    url Page URL
    has_mobile_version (boolean) The page has a mobile version
    is_customers_only (boolean) The page is restricted to logged in customers
    is_homepage (boolean) The page is a homepage
    is_visible (boolean) The page is visible
    seo_meta_desc Meta description
    seo_meta_keywords Meta keywords
    seo_meta_title Meta page title
    search_keywords Comma separated list of search keywords

    Get All Pages

    curl "https://{hash}.{region}.jasperpim.com/api/v1/pages" \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
        "pages" :
            [
              {
                "id": 1,
                "name": "About Us",
                "url": "/about-us/"
                ...
              },
              {
                "id": 2,
                "name": "Contact Us",
                "url": "/contact-us/"
                ...
              }
            ]
    }
    

    This endpoint retrieves all pages.

    HTTP Request

    GET https://{hash}.{region}.jasperpim.com/api/v1/pages

    Get a Specific Page

    curl "https://{hash}.{region}.jasperpim.com/api/v1/pages/2" \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
      "page" : {
            "id": 2,
            "name": "Contact Us",
            "url": "/contact-us/"
          ...
      }
    }
    

    This endpoint retrieves a specific page.

    HTTP Request

    GET https://{hash}.{region}.jasperpim.com/api/v1/pages/<ID>

    URL Parameters

    Parameter Description
    ID The ID of the page to retrieve

    Create a Page

    curl "https://{hash}.{region}.jasperpim.com/api/v1/pages" \
      -X POST \
      -d '{
        "name":"Our History",
        "url":"/our-history/",
        "parent_id":"1"
       }' \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
      "page" : {
          "id" : 3,
          "name" : "Our History",
          "url" : "/our-history/"
          ...
      }
    }
    

    This endpoint creates a new page.

    HTTP Request

    POST https://{hash}.{region}.jasperpim.com/api/v1/pages

    Update a Specific Page

    curl "https://{hash}.{region}.jasperpim.com/api/v1/pages/2" \
      -X PUT \
      -d '{
        "name":"Where We Are"
       }' \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
      "page" : {
            "id": 2,
            "name": "Where We Are",
            "url": "/contact-us/"
          ...
      } 
    }
    

    This endpoint updates a specific page.

    HTTP Request

    PUT https://{hash}.{region}.jasperpim.com/api/v1/pages/<ID>

    URL Parameters

    Parameter Description
    ID The ID of the page to update

    Delete a Page

    Deleting a page is not available through the API. The route exists but always responds 501 Not Implemented, on every PIM and for every token.

    {
        "message": "Not implemented."
    }
    

    HTTP Request

    DELETE https://{hash}.{region}.jasperpim.com/api/v1/pages/<ID>

    Page Assets

    Page Asset Properties

    Property Description
    id Jasper page asset ID
    page_id ID of the page to which the asset belongs
    uri URI
    alttext Image alternate text
    thumbnail (boolean) Whether the asset is the thumbnail

    Get All Page Assets

    curl "https://{hash}.{region}.jasperpim.com/api/v1/pages/1/assets" \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
        "page_assets" :
            [
              {
                "id": 1,
                "page_id": 1,
                "uri": "https://cdnpim.com/coolimage.png",
                "alttext": "Description of image",
                "thumbnail" : 1
              },
              {
                "id": 2,
                "page_id": 1,
                "uri": "https://cdnpim.com/coolimage.png",
                "alttext": "Description of image",
                "thumbnail" : 0
              }
            ]
    }
    

    This endpoint retrieves all page assets for a specific page.

    HTTP Request

    GET https://{hash}.{region}.jasperpim.com/api/v1/pages/<PAGEID>/assets

    URL Parameters

    Parameter Description
    PAGEID The ID of the page whose assets to retrieve

    Get a Specific Page Asset

    curl "https://{hash}.{region}.jasperpim.com/api/v1/pages/2/assets/1" \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
      "page_asset" : {
                "id": 1,
                "page_id": 2,
                "uri": "https://cdnpim.com/coolimage.png",
                "alttext": "Description of image",
                "thumbnail" : 1
      }
    }
    

    This endpoint retrieves a specific page asset.

    HTTP Request

    GET https://{hash}.{region}.jasperpim.com/api/v1/pages/<PAGEID>/assets/<ID>

    URL Parameters

    Parameter Description
    ID The ID of the page asset to retrieve
    PAGEID The ID of the page whose assets to retrieve

    Adding, Updating and Deleting Page Assets

    Creating, updating and deleting page assets is not available through the API. These routes exist but always respond 501 Not Implemented, on every PIM and for every token. Page assets are read-only through the API; use the two endpoints above to retrieve them.

    {
        "message": "Not implemented."
    }
    

    HTTP Requests

    POST https://{hash}.{region}.jasperpim.com/api/v1/pages/<PAGEID>/assets

    PUT https://{hash}.{region}.jasperpim.com/api/v1/pages/<PAGEID>/assets/<ID>

    DELETE https://{hash}.{region}.jasperpim.com/api/v1/pages/<PAGEID>/assets/<ID>

    Products

    Product Properties

    Property Description
    id Jasper Product ID
    name Name
    sku Sku (must be unique)
    product_url Product URL
    style_id Style ID
    brand_id Brand ID
    parent_id Parent product ID
    option_set_id Option set ID
    option_values (array) Required for variant child products
    is_bundle Product is the top of a bundle
    bundle_id Bundle that product belongs to
    categories (array) Category objects
    children (array) Child product objects (READ ONLY)
    is_visible (boolean) Product is visible
    enabled (boolean) Product is enabled
    desc_short Master short description
    desc_long Master long description
    prices (array) Product price objects (READ ONLY)
    inventory (array) Product inventory objects (READ ONLY)

    Get All Products

    curl "https://{hash}.{region}.jasperpim.com/api/v1/products?page=1" \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
      "products": [
        {
          "id": 1,
          "name": "Red T-Shirt",
          "sku": "RED1",
          ...
        },
        {
          "id": 2,
          "name": "Blue T-Shirt",
          "sku": "BLUE1",
          ...
        }
      ],
      "links": {
        "first": "https://{hash}.{region}.jasperpim.com/api/v1/products?page=1",
        "last": "https://{hash}.{region}.jasperpim.com/api/v1/products?page=6",
        "prev": null,
        "next": "https://{hash}.{region}.jasperpim.com/api/v1/products?page=2"
      },
      "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 6,
        "path": "https://{hash}.{region}.jasperpim.com/api/v1/products",
        "per_page": 25,
        "to": 25,
        "total": 127
      }
    }
    

    This endpoint show a collection of products (with attributes, categories, channels, product children and assets).

    The default is to list 25 products per page (but you can change it using the "limit" parameter in the URL).

    Also use the "page" parameter in the URL to navigate in the pagination of the product list.

    HTTP Request

    GET https://{hash}.{region}.jasperpim.com/api/v1/products?page=1&limit=50

    URL Parameters

    Parameter Description
    page The page of the products
    limit The limit of products to retrieve
    sku Filter by exact SKU match
    brand_id Filter to products belonging to one brand. Use the id from Get All Brands.

    Get All Products (Lite)

    curl "https://{hash}.{region}.jasperpim.com/api/v1/products/lite?page=1&limit=25" \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
      "products": [
        {
          "id": 1,
          "name": "Red T-Shirt",
          "sku": "RED1",
          ...
        }
      ],
      "links": {
        "first": "https://{hash}.{region}.jasperpim.com/api/v1/products/lite?limit=25&page=1",
        "last": "https://{hash}.{region}.jasperpim.com/api/v1/products/lite?limit=25&page=6",
        "prev": null,
        "next": "https://{hash}.{region}.jasperpim.com/api/v1/products/lite?limit=25&page=2"
      },
      "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 6,
        "path": "https://{hash}.{region}.jasperpim.com/api/v1/products/lite",
        "per_page": 25,
        "to": 25,
        "total": 127
      }
    }
    

    A lightweight version of the "Get All Products" endpoint optimized for bulk retrieval. Returns paginated products with only the relations you request via the with parameter, reducing response size and query load.

    Child variants are returned under the key children (instead of variants used by the standard endpoint).

    HTTP Request

    GET https://{hash}.{region}.jasperpim.com/api/v1/products/lite

    Query Parameters

    Parameter Description
    page Page number for pagination
    limit Number of products per page (default: 25)
    sku Filter by exact SKU match
    brand_id Filter to products belonging to one brand. Use the id from Get All Brands.
    with Comma-separated list of relations to include (see below)

    Allowed with values

    Value Description
    variants Child/variant products
    variants-attributes Variant attributes
    variants-prices Variant prices
    variants-inventory Variant inventory
    attributes Product attributes
    active-prices Currently active prices
    all-prices All prices including inactive
    inventory Product inventory
    generic-entities Generic entity associations
    related-products Related product associations
    tags Product tags
    assets Product assets
    categories Product categories

    Get All Products by Version

    curl "https://{hash}.{region}.jasperpim.com/api/v1/products/version/1" \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
      "products": [
        {
          "id": 1,
          "name": "Tshirt Rouge",
          "sku": "ts-rouge1",
          ...
        },
        {
          "id": 2,
          "name": "Tshirt Bleue",
          "sku": "ts-bleue1",
          ...
        }
      ],
      "links": {
        "first": "https://{hash}.{region}.jasperpim.com/api/v1/products/version/1?limit=25&page=1",
        "last": "https://{hash}.{region}.jasperpim.com/api/v1/products/version/1?limit=25&page=2",
        "prev": null,
        "next": "https://{hash}.{region}.jasperpim.com/api/v1/products/version/1?limit=25&page=2"
      },
      "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 2,
        "path": "https://{hash}.{region}.jasperpim.com/api/v1/products/version/1",
        "per_page": 25,
        "to": 25,
        "total": 50
      }
    }
    

    This endpoint shows a collection of versioned products with option of filtering out some products and/or adding some relations such as attributes, categories, product variant, assets, etc. to them.

    Refer to the URL Optional Parameters below to check all the possible filters and/or relations to the endpoint.

    HTTP Request

    GET https://{hash}.{region}.jasperpim.com/api/v1/products/version/<VERSION_ID>?status=enabled&with=variants,assets,categories&limit=25&page=1

    URL Required Parameters

    Parameter Description
    VERSION_ID The ID of the version

    URL Optional Parameters

    Parameter Description
    sku Filters the result by product SKU.
    brand_id Filters the result to products belonging to one brand. Use the id from Get All Brands.
    type Filters the type of products to be retrieved (allowed values: all, parents. default: parents).
    status Filters the type of products to be retrieved (allowed values: all, enabled, disabled. default: all).
    with Comma separated relation to be added to the product (allowed values: variants,variants-attributes,variants-prices,variants-inventory,attributes,active-prices,all-prices,inventory,generic-entities,related-products,tags,assets,categories)
    limit Limit the quantity of products at each request (default: 25).
    page Navigate through the pagination of product list (default: 1).

    Get a Specific Product by ID

    curl "https://{hash}.{region}.jasperpim.com/api/v1/products/2" \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
      "product": {
        "id": 2,
        "name": "Blue T-Shirt",
        "sku": "TSHIRT-BLUE-2",
        "product_url": "tshirt-blue",
        "page_title": "Product page - Blue T-shirt",
        "enabled": 1,
        "is_visible": 1,
        ...
      }
    }
    

    This endpoint retrieves a specific product.

    HTTP Request

    GET https://{hash}.{region}.jasperpim.com/api/v1/products/<ID>

    URL Parameters

    Parameter Description
    ID The ID of the product to retrieve

    Get a Version of a Product

    curl "https://{hash}.{region}.jasperpim.com/api/v1/products/2/version/2" \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
      "product": {
        "id": 2,
        "name": "T-shirt bleu",
        "sku": "BLEU-TSHIRT-2",
        "product_url": "tshirt-bleu",
        "page_title": "Fiche produit - t-shirt bleu",
        "enabled": 1,
        "is_visible": 1,
        ...
      }
    }
    

    This endpoint retrieves a specific version of product.

    HTTP Request

    GET https://{hash}.{region}.jasperpim.com/api/v1/products/<ID>/version/<VERSION_ID>

    URL Parameters

    Parameter Description
    ID The ID of the product to retrieve
    VERSION_ID The ID of the version

    Get a Specific Product by SKU

    curl "https://{hash}.{region}.jasperpim.com/api/v1/products/sku/12345" \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
      "product": {
        "id": 2,
        "name": "Blue T-Shirt",
        "sku": "12345",
        "product_url": "tshirt-blue",
        "page_title": "Product page - Blue T-shirt",
        "enabled": 1,
        "is_visible": 1,
        ...
      }
    }
    

    This endpoint retrieves a specific product.

    HTTP Request

    GET https://{hash}.{region}.jasperpim.com/api/v1/products/sku/<SKU>

    URL Parameters

    Parameter Description
    SKU The SKU of the product to retrieve

    Create a Product

    curl "https://{hash}.{region}.jasperpim.com/api/v1/products" \
      -X POST \
      -d '{
        "name":"Green T-Shirt",
        "sku":"GREEN1",
        "enabled": 1,
        "is_visible": 1
       }' \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
      "product" : {
          "id" : 3,
          "name" : "Green T-Shirt",
          "sku" : "GREEN-1",
          "enabled": 1,
          "is_visible": 1,
          ...
      }
    }
    

    This endpoint creates a new product.

    HTTP Request

    POST https://{hash}.{region}.jasperpim.com/api/v1/products

    Create a Child Product

    curl "https://{hash}.{region}.jasperpim.com/api/v1/products" \
      -X POST \
      -d '{
        "name": "T-Shirt",
        "sku": "GREEN1",
        "enabled": 1,
        "is_visible": 1,
        "option_values": [
            {
                "option_id": 1,
                "option_value_id": 2
            },
            {
                "option_id": 2,
                "option_value_id": 5
            }
        ],
        "parent_id": 5
       }' \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
      "product" : {
            "id" : 4,
            "name":"T-Shirt",
            "sku":"GREEN1",
            "parent_id": 5,
            "updated_at": "2020-03-12",
            "enabled": 1,
            "is_visible": 1,
            "is_bundle": 0,
            "featured": 0,
            "shipping_weight": "0.00",
            "shipping_override": "inherit",
            "special_order": 0,
            "generic_entities": [],
            "product_attributes": [],
            "related_products": [],
            "categories": [],
            "channels": [],
            "barcodes": [],
            "prices": [],
            "inventory": [],
            "children": []
      }
    }
    

    This endpoint creates a new product.

    HTTP Request

    POST https://{hash}.{region}.jasperpim.com/api/v1/products

    Update a Specific Product

    curl "https://{hash}.{region}.jasperpim.com/api/v1/products/2" \
      -X PUT \
      -d '{
        "name":"Bluish T-Shirt",
        "sku":"BLUE1",
        "product_url":"bluish-tshirt"
       }' \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
      "product" : {
                "id": 2,
                "name": "Bluish T-Shirt",
                "sku": "BLUE1",
                "product_url": "bluish-tshirt",
                "enabled": 1,
                "is_visible": 1,
                ...
      }
    }
    

    This endpoint updates a specific product.

    HTTP Request

    PUT https://{hash}.{region}.jasperpim.com/api/v1/products/<ID>

    URL Parameters

    Parameter Description
    ID The ID of the product to update

    Update a Specific Version of a Product

    curl "https://{hash}.{region}.jasperpim.com/api/v1/products/2/version/2" \
      -X PUT \
      -d '{
        "name":"Bleu T-Shirt",
        "sku":"BLEU-TSHIRT-2",
        "product_url":"bleu-tshirt"
       }' \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
      "product" : {
                "id": 2,
                "name": "Bleu T-Shirt",
                "sku": "BLEU-TSHIRT-2",
                "product_url": "bleu-tshirt",
                "enabled": 1,
                "is_visible": 1,
                ...
      }
    }
    

    This endpoint updates a specific version of a product. If the product version does not exist (and the version is set up in your PIM), it creates a new product version.

    HTTP Request

    PUT https://{hash}.{region}.jasperpim.com/api/v1/products/<ID>/version/<VERSION_ID>

    URL Parameters

    Parameter Description
    ID The ID of the product to update
    VERSION_ID The ID of the version

    Delete a Specific Product

    curl "https://{hash}.{region}.jasperpim.com/api/v1/products/2" \
      -X DELETE \
      -H "Authorization: Bearer {token}"
    

    This endpoint deletes a specific product.

    HTTP Request

    DELETE https://{hash}.{region}.jasperpim.com/api/v1/products/<ID>

    URL Parameters

    Parameter Description
    ID The ID of the product to delete

    Delete a Specific Version of a Product

    curl "https://{hash}.{region}.jasperpim.com/api/v1/products/2/version/2" \
      -X DELETE \
      -H "Authorization: Bearer {token}"
    

    This endpoint deletes a specific version of a product.

    HTTP Request

    DELETE https://{hash}.{region}.jasperpim.com/api/v1/products/<ID>/version/<VERSION_ID>

    URL Parameters

    Parameter Description
    ID The ID of the product to delete
    VERSION_ID The ID of the version

    Remove Child Product From Parent

    curl "https://{hash}.{region}.jasperpim.com/api/v1/products/123/remove-from-parent" \
      -X DELETE \
      -H "Authorization: Bearer {token}"
    

    This endpoint remove a given child product from it's parent product. The child product will be unpublished as a result of this operation.

    HTTP Request

    DELETE https://{hash}.{region}.jasperpim.com/api/v1/products/<ID>/remove-from-parent

    URL Parameters

    Parameter Description
    ID The ID of the child product

    Product Assets

    Product Asset Properties

    Property Description
    id Jasper Product asset ID
    product_id ID of the product to which the asset belongs
    uri URI
    sort_order Sort order
    private (boolean)
    alttext Image alternate text
    name Name of the Image
    desc Description of the Image
    type Type of the Image
    thumbnail (boolean) Whether the asset is the thumbnail

    Product Asset Channel Properties

    Property Description
    channel_id ID of the channel or "default"
    enabled (boolean) Whether the asset is enabled or not in the channel
    is_thumbnail (boolean) Wheter the asset is the thumbnail for the channel

    Get All Product Assets

    curl "https://{hash}.{region}.jasperpim.com/api/v1/products/1/assets" \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
        "product_assets" :
            [
              {
                "id": 1,
                "product_id": 1,
                "uri": "https://cdnpim.com/coolimage.png",
                "alttext": "Image alternate text",
                "name": "Name of the Image",
                "desc": "Description of the Image",
                "type": "Type of the Image",
                "thumbnail" : 1, 
                ...
              },
              {
                "id": 2,
                "product_id": 1,
                "uri": "https://cdnpim.com/coolimage.png",
                "alttext": "Image alternate text",
                "name": "Name of the Image",
                "desc": "Description of the Image",
                "type": "Type of the Image",
                "thumbnail" : 0, 
                ...
              }
            ]
    }
    

    This endpoint retrieves all product assets for a specific product.

    HTTP Request

    GET https://{hash}.{region}.jasperpim.com/api/v1/products/<PRODUCT_ID>/assets

    URL Parameters

    Parameter Description
    PRODUCT_ID The ID of the product whose assets to retrieve

    Query Parameters

    Parameter Description
    with_channel (optional) If set to "true" then the request will also pull the product asset channel information.

    Get a Specific Product Asset

    curl "https://{hash}.{region}.jasperpim.com/api/v1/products/2/assets/1" \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
      "product_asset" : {
                "id": 1,
                "product_id": 2,
                "uri": "https://cdnpim.com/coolimage.png",
                "alttext": "Image alternate text",
                "name": "Name of the Image",
                "desc": "Description of the Image",
                "type": "Type of the Image",
                "thumbnail" : 1, 
                ...
      }
    }
    

    This endpoint retrieves a specific product asset.

    HTTP Request

    GET https://{hash}.{region}.jasperpim.com/api/v1/products/<PRODUCT_ID>/assets/<ID>

    URL Parameters

    Parameter Description
    ID The ID of the product asset to retrieve
    PRODUCT_ID The ID of the product whose assets to retrieve

    Query Parameters

    Parameter Description
    with_channel (optional) If set to "true" then the request will also pull the product asset channel information.

    Create a Product Asset

    curl "https://{hash}.{region}.jasperpim.com/api/v1/products/2/assets" \
      -X POST \
      -d '{
                "image_url": "https://cdnpim.com/coolimage.png",
       }' \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
      "product_asset" : {
                "id": 42,
                "product_id": 2,
                "uri": "https://cdnpim.com/coolimage.png",
                "alttext": "Image alternate text",
                "name": "Name of the Image",
                "desc": "Description of the Image",
                "type": "Type of the Image",
                "thumbnail" : 1,
                ...
      }
    }
    

    This endpoint creates a new product asset.

    HTTP Request

    POST https://{hash}.{region}.jasperpim.com/api/v1/products/<PRODUCT_ID>/assets

    URL Parameters

    Parameter Description
    PRODUCT_ID The ID of the product

    Update a Specific Product Asset

    curl "https://{hash}.{region}.jasperpim.com/api/v1/products/2/assets/1" \
      -X PUT \
      -d '{
            "image_url": "https://cdnpim.com/coolimage.png",
            "alttext": "Description of image",
            "name": "Name of the Image",
            "desc": "Description of the Image",
            "type": "Type of the Image",
            "thumbnail" : 1
       }' \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
      "product_asset" : {
            "id": 1,
            "product_id" : 2,
            "uri": "https://cdnpim.com/coolimage.png",
            "alttext": "Image alternate text",
            "name": "Name of the Image",
            "desc": "Description of the Image",
            "type": "Type of the Image",
            "thumbnail" : 1, 
            ...
      } 
    }
    

    This endpoint updates a specific product asset.

    HTTP Request

    PUT https://{hash}.{region}.jasperpim.com/api/v1/products/<PRODUCT_ID>/assets/<ID>

    URL Parameters

    Parameter Description
    ID The ID of the product asset to update
    PRODUCT_ID The ID of the product whose asset to update

    Delete a Specific Product Asset

    curl "https://{hash}.{region}.jasperpim.com/api/v1/products/2/assets/1" \
      -X DELETE \
      -H "Authorization: Bearer {token}"
    

    This endpoint deletes a specific product asset.

    HTTP Request

    DELETE https://{hash}.{region}.jasperpim.com/api/v1/products/<PRODUCT_ID>/assets/<ID>

    URL Parameters

    Parameter Description
    ID The ID of the product asset to delete
    PRODUCT_ID The ID of the product whose asset to delete

    Get Product Asset Channel Data for ALL Channels

    curl "https://{hash}.{region}.jasperpim.com/api/v1/products/2/assets/1/channels" \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
      "product_assets_channels" : {
        "id": 1,
        "channels": [
          {
            "channel_id": "default",
            "enabled": true,
            "is_thumbnail": true
          },
          {
            "channel_id": 1,
            "enabled": true,
            "is_thumbnail": true
          }
        ]
      }
    }
    

    This endpoint retrieves product asset channel data for ALL channels.

    HTTP Request

    GET https://{hash}.{region}.jasperpim.com/api/v1/products/<PRODUCT_ID>/assets/<ID>/channels

    URL Parameters

    Parameter Description
    ID The ID of the product asset to retrieve or "all" to get ALL assets at once
    PRODUCT_ID The ID of the product whose assets to retrieve

    Get Product Asset Channel Data for One Channel

    curl "https://{hash}.{region}.jasperpim.com/api/v1/products/2/assets/1/channels/1" \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
      "product_assets_channels" : {
        "id": 1,
        "channels": {
            "channel_id": 1,
            "enabled": true,
            "is_thumbnail": true
        }
      }
    }
    

    This endpoint retrieves product asset channel data for one channel.

    HTTP Request

    GET https://{hash}.{region}.jasperpim.com/api/v1/products/<PRODUCT_ID>/assets/<ID>/channels/<CHANNEL_ID>

    URL Parameters

    Parameter Description
    ID The ID of the product asset to retrieve or "all" to get ALL assets at once
    PRODUCT_ID The ID of the product whose assets to retrieve
    CHANNEL_ID The ID of the channel or "default"

    Update Product Asset Channel Data for ALL Channels

    curl "https://{hash}.{region}.jasperpim.com/api/v1/products/2/assets/1/channels" \
      -X PUT \
      -d '{
            "enabled": false,
            "is_thumbnail": false
       }' \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
      "product_assets_channels" : {
        "id": 1,
        "channels": [
          {
            "channel_id": "default",
            "enabled": false,
            "is_thumbnail": false
          },
          {
            "channel_id": 1,
            "enabled": false,
            "is_thumbnail": false
          }
        ]
      }
    }
    

    This endpoint updates product asset channel data for ALL channels.

    HTTP Request

    PUT https://{hash}.{region}.jasperpim.com/api/v1/products/<PRODUCT_ID>/assets/<ID>/channels

    URL Parameters

    Parameter Description
    ID The ID of the product asset to update or "all" to update ALL assets at once
    PRODUCT_ID The ID of the product whose assets to update

    Update Product Asset Channel Data for One Channel

    curl "https://{hash}.{region}.jasperpim.com/api/v1/products/2/assets/1/channels/1" \
      -X PUT \
      -d '{
            "enabled": false,
            "is_thumbnail": false
       }' \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
      "product_assets_channels" : {
        "id": 1,
        "channels": {
          "channel_id": 1,
          "enabled": false,
          "is_thumbnail": false
        }
      }
    }
    

    This endpoint updates product asset channel data for one channel.

    HTTP Request

    PUT https://{hash}.{region}.jasperpim.com/api/v1/products/<PRODUCT_ID>/assets/<ID>/channels/<CHANNEL_ID>

    URL Parameters

    Parameter Description
    ID The ID of the product asset to update or "all" to update ALL assets at once
    PRODUCT_ID The ID of the product whose assets to update
    CHANNEL_ID The ID of the channel or "default"

    Product Barcodes

    Product Barcodes Properties

    Property Description
    id Product barcode ID
    product_id ID of the product to which the barcode belongs
    type The type of this barcode (EAN, UPC-A, GTIN-13, ITF-14, Custom)
    barcode The barcode number
    created_at Datetime of the creation
    updated_at Datetime of the last update

    Get All Product Barcodes

    curl "https://{hash}.{region}.jasperpim.com/api/v1/products/1/barcodes" \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
        "barcodes" :
            [
              {
                "id": 1,
                "product_id": 1,
                "type": "UPC-A",
                "barcode": "123456789000",
                "created_at": "2022-11-11T19:58:12+00:00",
                "updated_at": "2022-11-11T19:59:55+00:00"
              },
              {
                "id": 2,
                "product_id": 1,
                "type": "ITF-14",
                "barcode": "01234567891234",
                "created_at": "2022-11-11T19:58:12+00:00",
                "updated_at": "2022-11-11T19:58:12+00:00"
              }
            ]
    }
    

    This endpoint retrieves all product barcodes for a specific product.

    HTTP Request

    GET https://{hash}.{region}.jasperpim.com/api/v1/products/<PRODUCTID>/barcodes

    URL Parameters

    Parameter Description
    PRODUCTID The ID of the product whose barcodes to retrieve

    Create a Product Barcode

    curl "https://{hash}.{region}.jasperpim.com/api/v1/products/1/barcodes" \
      -X POST \
      -d '{
                "type": "UPC-A",
                "barcode": "123456789000"
       }' \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
        "barcode": {
            "id": 1,
            "product_id": 1,
            "type": "UPC-A",
            "barcode": "123456789000",
            "created_at": "2022-11-11T19:58:12+00:00",
            "updated_at": "2022-11-11T19:59:55+00:00"
        }
    }
    

    This endpoint creates a new product barcode.

    Note: For "UPC-A" we expect 12 digits. "ITF-14": 14 digits. "GTIN-13": 13 digits. "EAN": 13 digits. "Custom": any number of digits.

    HTTP Request

    POST https://{hash}.{region}.jasperpim.com/api/v1/products/<PRODUCTID>/barcodes

    URL Parameters

    Parameter Description
    PRODUCTID The ID of the product

    Update a Product Barcode

    curl "https://{hash}.{region}.jasperpim.com/api/v1/products/1/barcodes/1" \
      -X PUT \
      -d '{
                "type": "UPC-A",
                "barcode": "123456789123"
       }' \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
        "barcode": {
            "id": 1,
            "product_id": 1,
            "type": "UPC-A",
            "barcode": "123456789123",
            "created_at": "2022-11-11T19:58:12+00:00",
            "updated_at": "2022-11-12T12:30:38+00:00"
        }
    }
    

    This endpoint updates a given product barcode.

    Note: For "UPC-A" we expect 12 digits. "ITF-14": 14 digits. "GTIN-13": 13 digits. "EAN": 13 digits. "Custom": any number of digits.

    HTTP Request

    PUT https://{hash}.{region}.jasperpim.com/api/v1/products/<PRODUCTID>/barcodes/<BARCODEID>

    URL Parameters

    Parameter Description
    PRODUCTID The ID of the product
    BARCODEID The ID of the product barcode

    Delete a Product Barcode

    curl "https://{hash}.{region}.jasperpim.com/api/v1/products/1/barcodes/1" \
      -X DELETE \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
        "barcode": {
            "id": 1,
            "product_id": 1,
            "type": "UPC-A",
            "barcode": "123456789123",
            "created_at": "2022-11-11T19:58:12+00:00",
            "updated_at": "2022-11-12T12:30:38+00:00"
        }
    }
    

    This endpoint deletes a given product barcode.

    HTTP Request

    DELETE https://{hash}.{region}.jasperpim.com/api/v1/products/<PRODUCTID>/barcodes/<BARCODEID>

    URL Parameters

    Parameter Description
    PRODUCTID The ID of the product
    BARCODEID The ID of the product barcode

    Upsert Product Barcodes (with delete)

    curl "https://{hash}.{region}.jasperpim.com/api/v1/products/1/barcodes/upsert" \
      -X PUT \
      -d '{
                "barcodes": [
                    {
                        "type": "UPC-A",
                        "barcode": "123456789123"
                    },
                    {
                        "type": "Custom",
                        "barcode": "0000444498765321"
                    }
                ]
    
       }' \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
        "barcodes": [
            {
                "id": 1,
                "product_id": 1,
                "type": "UPC-A",
                "barcode": "123456789123",
                "created_at": "2022-11-11T19:58:12+00:00",
                "updated_at": "2022-11-12T12:30:38+00:00"
            },
            {
                "id": 3,
                "product_id": 1,
                "type": "Custom",
                "barcode": "0000444498765321",
                "created_at": "2022-11-12T12:30:38+00:00",
                "updated_at": "2022-11-12T12:30:38+00:00"
            }
        ]
    
    }
    

    This endpoint upsert (update and/or insert) a list of given product barcodes. If a product has barcodes that were not touched by this operation then those are going to be DELETED. Only the barcodes present on the request payload will remain on the product.

    Note: For "UPC-A" we expect 12 digits. "ITF-14": 14 digits. "GTIN-13": 13 digits. "EAN": 13 digits. "Custom": any number of digits.

    HTTP Request

    PUT https://{hash}.{region}.jasperpim.com/api/v1/products/<PRODUCTID>/barcodes/upsert

    URL Parameters

    Parameter Description
    PRODUCTID The ID of the product

    Errors

    Status Reason
    422 barcodes was missing from the request body, or was not an array

    Upsert Product Barcodes (without delete)

    curl "https://{hash}.{region}.jasperpim.com/api/v1/products/1/barcodes/upsert" \
      -X POST \
      -d '{
                "barcodes": [
                    {
                        "type": "UPC-A",
                        "barcode": "123456789123"
                    },
                    {
                        "type": "Custom",
                        "barcode": "0000444498765321"
                    }
                ]
    
       }' \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
        "barcodes": [
            {
                "id": 1,
                "product_id": 1,
                "type": "UPC-A",
                "barcode": "123456789123",
                "created_at": "2022-11-11T19:58:12+00:00",
                "updated_at": "2022-11-12T12:30:38+00:00"
            },
            {
                "id": 2,
                "product_id": 1,
                "type": "ITF-14",
                "barcode": "01234567891234",
                "created_at": "2022-11-11T19:58:12+00:00",
                "updated_at": "2022-11-11T19:58:12+00:00"
            },
            {
                "id": 3,
                "product_id": 1,
                "type": "Custom",
                "barcode": "0000444498765321",
                "created_at": "2022-11-12T12:30:38+00:00",
                "updated_at": "2022-11-12T12:30:38+00:00"
            }
        ]
    
    }
    

    This endpoint upsert (update and/or insert) a list of given product barcodes. No barcode will be deleted with this endpoint.

    Note: For "UPC-A" we expect 12 digits. "ITF-14": 14 digits. "GTIN-13": 13 digits. "EAN": 13 digits. "Custom": any number of digits.

    HTTP Request

    POST https://{hash}.{region}.jasperpim.com/api/v1/products/<PRODUCTID>/barcodes/upsert

    URL Parameters

    Parameter Description
    PRODUCTID The ID of the product

    Errors

    Status Reason
    422 barcodes was missing from the request body, or was not an array

    Product Categories

    Product Categories Properties

    Property Description
    id Jasper Product category ID
    parent_id Category parent ID
    name Category name
    desc Category description
    slug Category slug
    attribute_sets (array) Attribute set IDs for the category
    is_visible (boolean) Whether to display the category
    seo_meta_desc Meta description
    seo_meta_keywords Meta keywords
    seo_meta_title Meta page title
    search_keywords Comma separated list of search keywords
    created_at Time the category was created (read only)
    updated_at Time the category was updated (read only)

    Get All Product Categories

    curl "https://{hash}.{region}.jasperpim.com/api/v1/products/1/categories" \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
        "product_categories": [
            {
                "id": 1,
                "parent_id": 0,
                "name": "Clothes",
                "desc": null,
                "slug": "clothes",
                ...
            },
            {
                "id": 5,
                "parent_id": 1,
                "name": "T-Shirts",
                "desc": null,
                "slug": "t-shirts",
                ...
            }
        ]
    }
    

    This endpoint retrieves all categories assigned to a product, including smart categories.

    HTTP Request

    GET https://{hash}.{region}.jasperpim.com/api/v1/products/<PRODUCT_ID>/categories

    URL Parameters

    Parameter Description
    PRODUCT_ID The ID of the product

    Get a Specific Product Category

    curl "https://{hash}.{region}.jasperpim.com/api/v1/products/1/categories/5" \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
        "product_categories": {
            "id": 5,
            "parent_id": 1,
            "name": "T-Shirts",
            "desc": null,
            "slug": "t-shirts",
            ...
        }
    }
    

    This endpoint retrieves a specific category assigned to a product. Returns 404 if the category is not assigned to the product.

    HTTP Request

    GET https://{hash}.{region}.jasperpim.com/api/v1/products/<PRODUCT_ID>/categories/<CATEGORY_ID>

    URL Parameters

    Parameter Description
    PRODUCT_ID The ID of the product
    CATEGORY_ID The ID of the category

    Assign a Category to a Product

    curl "https://{hash}.{region}.jasperpim.com/api/v1/products/1/categories" \
      -X POST \
      -d '{
        "category_id": "1"
      }' \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
        "product_categories": {
            "id": 1,
            "parent_id": 0,
            "name": "Clothes",
            "desc": null,
            "slug": "root",
            ...
        }
    }
    

    This endpoint assigns a category to a product. If the category is already assigned, the request succeeds without creating a duplicate.

    HTTP Request

    POST https://{hash}.{region}.jasperpim.com/api/v1/products/<PRODUCT_ID>/categories

    URL Parameters

    Parameter Description
    PRODUCT_ID The ID of the product

    Remove a Category from a Product

    curl "https://{hash}.{region}.jasperpim.com/api/v1/products/1/categories/5" \
      -X DELETE \
      -H "Authorization: Bearer {token}"
    

    This endpoint removes a category assignment from a product. Returns 404 if the category is not assigned to the product.

    HTTP Request

    DELETE https://{hash}.{region}.jasperpim.com/api/v1/products/<PRODUCT_ID>/categories/<CATEGORY_ID>

    URL Parameters

    Parameter Description
    PRODUCT_ID The ID of the product
    CATEGORY_ID The ID of the category to remove

    Product Prices

    Product Price Properties

    Property Description
    id Jasper Product price ID
    product_id ID of the product to which the price belongs
    msrp MSRP
    map Minimum Advertised Price
    cost Cost Price
    sell_price Selling price
    from (datetime) Price start date. On create, must use the exact format YYYY-MM-DD HH:MM:SS; defaults to the current time when omitted
    to (datetime) Price end date. On create, must use the exact format YYYY-MM-DD HH:MM:SS
    currency (string) Price currency code
    tax_class_id Tax class ID
    author Price author. Set by the system to API on create; any value sent is ignored
    booktype Pricebook Type. Set by the system on create (ProductPrice - Create or ProductPrice - BulkCreate); any value sent is ignored
    price_book_code Price book code
    batch_id Batch Import ID
    sell_price_reason Price over-ride reason
    base Price base (required)
    source Price source
    is_expired (boolean) Whether the price is expired (read only, computed)
    is_future (boolean) Whether the price starts in the future (read only, computed)
    created_at Time the price was created (read only)
    updated_at Time the price was updated (read only)

    Get All Product Prices

    curl "https://{hash}.{region}.jasperpim.com/api/v1/products/1/prices" \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
        "product_prices" :
            [
              {
                "id": 1,
                "product_id": 1,
                "msrp": 250.00,
                "cost": 73.00,
                "base": "US" 
                ...
              },
              {
                "id": 2,
                "product_id": 2,
                "msrp": 254.00,
                "cost": 53.00,
                "base": "US" 
    
                ...
              }
            ]
    }
    

    This endpoint retrieves all product prices for a specific product.

    Each price includes computed is_future and is_expired flags relative to today's date. When more than one price record for the same base is active at the same time, only the newest record (highest ID) is reported as active; the older ones are returned with is_expired set to 1.

    HTTP Request

    GET https://{hash}.{region}.jasperpim.com/api/v1/products/<PRODUCTID>/prices

    URL Parameters

    Parameter Description
    PRODUCTID The ID of the product whose prices to retrieve

    Get a Specific Product Price

    curl "https://{hash}.{region}.jasperpim.com/api/v1/products/2/prices/1" \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
      "product_price" : {
                "id": 2,
                "product_id": 2,
                "msrp": 254.00,
                "cost": 53.00,
                "base": "US"  
                ...
      }
    }
    

    This endpoint retrieves a specific product price.

    HTTP Request

    GET https://{hash}.{region}.jasperpim.com/api/v1/products/<PRODUCTID>/prices/<ID>

    URL Parameters

    Parameter Description
    ID The ID of the product price to retrieve
    PRODUCTID The ID of the product whose prices to retrieve

    Create a Product Price

    curl "https://{hash}.{region}.jasperpim.com/api/v1/products/2/prices" \
      -X POST \
      -d '{
                "msrp": 75.99,
                "cost" : 10.00,
                "base" : "US"
       }' \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
      "product_price" : {
                "id": 42,
                "product_id": 3,
                "msrp": 75.99,
                "cost" : 10.00,
                "base" : "US"
                ...
      }
    }
    

    This endpoint creates a new product price.

    Note: when creating a price, you must have at least one value for msrp, cost, map or sell_price

    Validation on create:

    HTTP Request

    POST https://{hash}.{region}.jasperpim.com/api/v1/products/<PRODUCTID>/prices

    URL Parameters

    Parameter Description
    PRODUCTID The ID of the product

    Update a Specific Product Price

    curl "https://{hash}.{region}.jasperpim.com/api/v1/products/2/prices/1" \
      -X PUT \
      -d '{
                "msrp": 99.99,
                "cost" : 15.00,
                "base" : "US"
       }' \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
      "product_price" : {
                "id": 1,
                "product_id": 2,
                "msrp": 99.99,
                "cost" : 15.00,
                "base" : "US"
                ...
      }
    }
    

    This endpoint updates a specific product price.

    On update, from and to accept any parseable date, but from must be today or later and to must be after both from and the current time.

    HTTP Request

    PUT https://{hash}.{region}.jasperpim.com/api/v1/products/<PRODUCTID>/prices/<ID>

    URL Parameters

    Parameter Description
    PRODUCTID The ID of the product
    ID The ID of the product price to update

    Update Active Product Price

    curl "https://{hash}.{region}.jasperpim.com/api/v1/products/2/prices" \
      -X PUT \
      -d '{
                "sell_price": 89.99,
                "base" : "US"
       }' \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
      "product_price" : {
                "id": 42,
                "product_id": 2,
                "sell_price": 89.99,
                "base" : "US"
                ...
      }
    }
    

    This endpoint updates the currently active price for a product. The active price is the most recent price whose from and to date range includes the current time.

    HTTP Request

    PUT https://{hash}.{region}.jasperpim.com/api/v1/products/<PRODUCTID>/prices

    URL Parameters

    Parameter Description
    PRODUCTID The ID of the product

    Create Product Prices in Bulk

    curl "https://{hash}.{region}.jasperpim.com/api/v1/product_prices/bulk" \
      -X POST \
      -d '[
            {
                "sku":"4d0db189",
                "msrp": null,
                "map": null,
                "cost": 49,
                "sell_price": 99,
                "base": "USD"
            },
            {
                "sku":"3w1fd67f5s",
                "msrp": null,
                "map": null,
                "cost": null,
                "sell_price": 75,
                "base": "USD"
            },
            {
                "sku":"f9ef83cf1b54",
                "msrp": null,
                "map": null,
                "cost": null,
                "sell_price": 123,
                "from": "2026-08-01 01:00:00",
                "to": "2026-08-31 23:59:59",
                "base": "CAD"
            }
       ]' \
      -H "Authorization: Bearer {token}"
    

    Success response:

    {
      "status": 200,
      "message": "Product prices updated successfully."
    }
    

    Error response:

    {
      "status": 422,
      "error": "ValidationErrors",
      "message": "One or more items in the request have validation errors.",
      "details": [
        {
          "index": 1,
          "errors": [
            "You must have at least one price in your payload."
          ]
        },
        {
          "index": 2,
          "errors": [
            "The sku field is required."
          ]
        }
      ]
    }
    

    This endpoint creates new product prices in bulk.

    Note: when creating a price, you must have at least one value for msrp, cost, map or sell_price

    Each item requires a sku identifying the product. The same create validation applies per item: from and to must use the exact format YYYY-MM-DD HH:MM:SS, from defaults to the current time when omitted, and author / booktype are set by the system (API and ProductPrice - BulkCreate). If any item fails validation, no prices are created and the response lists the errors per item index.

    HTTP Request

    POST https://{hash}.{region}.jasperpim.com/api/v1/product_prices/bulk

    Delete a Specific Product Price

    curl "https://{hash}.{region}.jasperpim.com/api/v1/products/2/prices/1" \
      -X DELETE \
      -H "Authorization: Bearer {token}"
    

    This endpoint deletes a specific product price.

    HTTP Request

    DELETE https://{hash}.{region}.jasperpim.com/api/v1/products/<PRODUCTID>/prices/<ID>

    URL Parameters

    Parameter Description
    ID The ID of the product price to delete
    PRODUCTID The ID of the product

    Product Inventory

    Product Inventory Properties

    Property Description
    id Jasper Product inventory ID
    product_id ID of the product to which the inventory belongs
    site Site of inventory
    bin Bin
    location Location
    type Inventory type
    count_on_hand Count on hand
    count_on_hold Count on hold
    source Inventory source
    batch_id Batch ID from inventory loading

    Get All Product Inventories

    curl "https://{hash}.{region}.jasperpim.com/api/v1/products/1/inventory" \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
        "product_inventory" :
            [
              {
                "id": 1,
                "product_id": 1,
                "count_on_hand" : 42
                ...
              },
              {
                "id": 2,
                "product_id": 2,
                "count_on_hand" : 52
                ...
              }
            ]
    }
    

    This endpoint retrieves all product inventory for a specific product.

    HTTP Request

    GET https://{hash}.{region}.jasperpim.com/api/v1/products/<PRODUCTID>/inventory

    URL Parameters

    Parameter Description
    PRODUCTID The ID of the product whose inventory to retrieve

    Get a Specific Product Inventory

    curl "https://{hash}.{region}.jasperpim.com/api/v1/products/2/inventory/1" \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
      "product_inventory" : {
                "id": 2,
                "product_id": 2,
                "count_on_hand" : 52
                ...
      }
    }
    

    This endpoint retrieves a specific product inventory.

    HTTP Request

    GET https://{hash}.{region}.jasperpim.com/api/v1/products/<PRODUCTID>/inventory/<ID>

    URL Parameters

    Parameter Description
    ID The ID of the product inventory to retrieve
    PRODUCTID The ID of the product whose inventory to retrieve

    Create a Product Inventory

    curl "https://{hash}.{region}.jasperpim.com/api/v1/products/2/inventory" \
      -X POST \
      -d '{
                "product_id": 3,
                "count_on_hand": 75
       }' \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
      "product_inventory" : {
                "id": 42,
                "product_id": 3,
                "count_on_hand": 75
                ...
      }
    }
    

    This endpoint creates a new product inventory.

    HTTP Request

    POST https://{hash}.{region}.jasperpim.com/api/v1/products/<PRODUCTID>/inventory

    URL Parameters

    Parameter Description
    PRODUCTID The ID of the product

    Update a Specific Product Inventory

    curl "https://{hash}.{region}.jasperpim.com/api/v1/products/2/inventory/1" \
      -X PUT \
      -d '{
            "count_on_hand": 22
       }' \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
      "product_inventory" : {
            "id": 1,
            "product_id" : 2,
            "count_on_hand" : 22
            ...
      } 
    }
    

    This endpoint updates a specific product inventory.

    HTTP Request

    PUT https://{hash}.{region}.jasperpim.com/api/v1/products/<PRODUCTID>/inventory/<ID>

    URL Parameters

    Parameter Description
    ID The ID of the product inventory to update
    PRODUCTID The ID of the product whose inventory to update

    Delete a Specific Product Inventory

    curl "https://{hash}.{region}.jasperpim.com/api/v1/products/2/inventory/1" \
      -X DELETE \
      -H "Authorization: Bearer {token}"
    

    This endpoint deletes a specific product inventory.

    HTTP Request

    DELETE https://{hash}.{region}.jasperpim.com/api/v1/products/<PRODUCTID>/inventory/<ID>

    URL Parameters

    Parameter Description
    ID The ID of the product inventory to delete
    PRODUCTID The ID of the product whose inventory to delete

    Product Attributes

    Product Attribute Properties

    Property Description
    attribute_id Jasper Attribute ID
    name Attribute name (must be unique)
    slug Slugified Attribute name
    user_defined_key User Key
    type (enum) Attribute type (allowed values: selectbox, multiselect, text, textarea, date, datetime, json, markdown, calculated)
    values The values held for this attribute, one entry per version

    Product Attribute Value Properties

    Each entry in values is the value held for one version.

    Property Description
    id ID of this value row. Use it in the Update a Specific Product Attribute and Delete a Specific Product Attribute Value URLs
    version_id ID of the version (language) the value belongs to; 0 is master
    value The stored value

    Writing to a specific version

    version_id belongs at the top level of the attribute object, next to attribute_id. It is not read from inside values.

    A request that puts version_id inside a values entry is still accepted, but the field is ignored and the write falls back to the default of 0. It lands on master rather than on the version you intended.

    Writes to version 3:

    { "attribute_id": 1, "version_id": 3, "values": [{ "value": "No" }] }

    Writes to master, because version_id is in the wrong place:

    { "attribute_id": 1, "values": [{ "value": "No", "version_id": 3 }] }

    Get All Product Attributes

    curl "https://{hash}.{region}.jasperpim.com/api/v1/products/1/attributes" \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
      "product_attributes" : [
        {
          "attribute_id" : 1,
          "name" : "Attribute One",
          "slug" : "attribute-one",
          "user_defined_key" : "{}",
          "type" : "text",
          "values" : []
        },
        {
          "attribute_id" : 2,
          "name" : "Attribute Two",
          "slug" : "attribute-two",
          "user_defined_key" : "{}",
          "type" : "selectbox",
          "values" : [
            {
              "id" : 1,
              "version_id" : 0,
              "value" : "Selected"
            }
          ]
        }
      ]
    }
    

    This endpoint retrieves all product attributes.

    HTTP Request

    GET https://{hash}.{region}.jasperpim.com/api/v1/products/<ID>/attributes

    URL Parameters

    Parameter Description
    ID The ID of the product related with the attributes to retrieve

    Get A Product Attribute

    curl "https://{hash}.{region}.jasperpim.com/api/v1/products/1/attributes/1" \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
      "product_attributes" : [
        {
          "attribute_id" : 1,
          "name" : "Attribute One",
          "slug" : "attribute-one",
          "user_defined_key" : "{}",
          "type" : "text",
          "values" : [
            {
              "id" : 1,
              "version_id" : 0,
              "value" : "Text"
            }
          ]
        }
      ]
    }
    

    This endpoint retrieves a specific product attribute.

    HTTP Request

    GET https://{hash}.{region}.jasperpim.com/api/v1/products/<ID>/attributes/<AttributeID>

    URL Parameters

    Parameter Description
    ID The ID of the product related with the specific attribute to retrieve
    AttributeID The ID of the attribute to retrieve

    Create a Product Attribute

    curl "https://{hash}.{region}.jasperpim.com/api/v1/products/1/attributes" \
      -X POST \
      -d '{
        "attribute_id" : 1,
        "version_id" : 0,
        "values" : [
          {
            "value" : "Text"
          }
        ]
      }' \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
      "product_attributes" : {
        "attribute_id" : 1,
        "name" : "Attribute One",
        "slug" : "attribute-one",
        "user_defined_key" : "{}",
        "type" : "text",
        "values" : [
          {
            "id" : 1,
            "version_id" : 0,
            "value" : "Text"
          },
          {
            "id" : 2,
            "version_id" : 1,
            "value" : "Texte"
          }
        ]
      }
    }
    

    This endpoint creates the value of a product attribute for one version.

    It creates only. If the attribute already holds a value for that version_id, the request returns 422 and writes nothing, even when the value being sent is the same as the value already stored. To overwrite an existing value, use Update many Product Attributes or Update a Specific Product Attribute.

    HTTP Request

    POST https://{hash}.{region}.jasperpim.com/api/v1/products/<ID>/attributes

    URL Parameters

    Parameter Description
    ID The ID of the product

    Errors

    Status Reason
    422 Request body was empty or not valid JSON
    422 Payload was not an object, or attribute_id was missing
    422 values was missing, empty, or not an array of objects
    422 attribute_id is not an attribute in this PIM, or version_id is not a version in this PIM
    422 A value already exists for this attribute_id and version_id
    422 The value is not one of the available values of a selectbox or multiselect attribute
    422 More than one value was sent for an attribute that is not a multiselect

    A 422 response carries an errors array naming each problem it found.

    The already-exists message differs by attribute type. A selectbox returns Selectbox Attribute Value already exists, a multiselect returns Attribute Value already exists, and every other type returns Attribute Value Version already exists.

    Some releases return the selectbox message spelled Selextbox. It is the same error and carries the same status code.

    Update many Product Attributes

    curl "https://{hash}.{region}.jasperpim.com/api/v1/products/1/attributes" \
      -X PUT \
      -d '[
      {
          "attribute_id":1,
          "version_id":0,
          "values":[
             {
                "value":"No"
             }
          ]
       },
       {
          "attribute_id":3,
          "version_id":0,
          "values":[
             {
                "value":"Yes"
             }
          ]
       }
    ]' \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
      "product_attributes": [
        {
          "attribute_id": 1,
          "name": "Attribute One",
          "slug": "attribute-one",
          "user_defined_key": null,
          "type": "text",
          "values": [
            {
              "id": 998,
              "version_id": 0,
              "value": "No"
            }
          ]
        },
        {
          "attribute_id": 3,
          "name": "Attribute Three",
          "slug": "attribute-three",
          "user_defined_key": null,
          "type": "text",
          "values": [
            {
              "id": 999,
              "version_id": 0,
              "value": "Yes"
            }
          ]
        }
      ]
    }
    

    This endpoint updates or creates the values of several product attributes in one request.

    The body is a list, even when it holds a single attribute. For each entry, the existing value for that attribute_id and version_id is replaced. Values held for other versions of the same attribute are left alone. An entry whose version_id is omitted is written to master.

    HTTP Request

    PUT https://{hash}.{region}.jasperpim.com/api/v1/products/<ID>/attributes

    URL Parameters

    Parameter Description
    ID The ID of the product

    Errors

    Status Reason
    422 Request body was empty or not valid JSON
    422 Body was a single object instead of a list, or an entry was missing attribute_id
    422 values was missing, empty, or not an array of objects

    A 422 response carries an errors array naming each problem it found.

    Update a Specific Product Attribute

    curl "https://{hash}.{region}.jasperpim.com/api/v1/products/1/attributes/1/values/1" \
    -X PUT \
      -d '{
        "attribute_id" : 1,
        "version_id" : 1,
        "values" : [
          {
            "value" : "Text Update"
          }
        ]
      }' \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
      "data" : {
        "attribute_id" : 1,
        "name" : "Attribute One",
        "slug" : "attribute-one",
        "user_defined_key" : "{}",
        "type" : "text",
        "values" : [
          {
            "id" : 1,
            "version_id" : 0,
            "value" : "Text"
          },
          {
            "id" : 2,
            "version_id" : 1,
            "value" : "Text Update"
          }
        ]
      }
    }
    

    This endpoint updates one existing product attribute value in place.

    Take AttributeValueID from the values array returned by Get All Product Attributes. This endpoint checks that the version_id in the body matches the version of that value row and returns 422 if it does not, so it cannot write to a version you did not name. That makes it the safer choice when a write has to land on one version.

    Unlike every other endpoint in this section, the response is wrapped in data rather than product_attributes.

    HTTP Request

    PUT https://{hash}.{region}.jasperpim.com/api/v1/products/<ID>/attributes/<AttributeID>/values/<AttributeValueID>

    URL Parameters

    Parameter Description
    ID The ID of the product
    AttributeID The ID of the attribute
    AttributeValueID The ID of the attribute value to update

    Errors

    Status Reason
    422 Request body was empty or not valid JSON
    422 Payload was not an object, or attribute_id was missing
    422 values was missing, empty, or not an array of objects
    422 version_id does not match the version of the value named in the URL
    422 The value is not one of the available values of a selectbox or multiselect attribute

    A 422 response carries an errors array naming each problem it found.

    Delete All Product Attributes

    curl "https://{hash}.{region}.jasperpim.com/api/v1/products/1/attributes" \
      -X DELETE \
      -H "Authorization: Bearer {token}"
    

    This endpoint deletes all attributes for a specific product.

    HTTP Request

    DELETE https://{hash}.{region}.jasperpim.com/api/v1/products/<ID>/attributes

    URL Parameters

    Parameter Description
    ID The ID of the product

    Delete a Specific Product Attribute Value

    curl "https://{hash}.{region}.jasperpim.com/api/v1/products/1/attributes/1/values/1" \
      -X DELETE \
      -H "Authorization: Bearer {token}"
    

    This endpoint deletes a specific product attribute value.

    HTTP Request

    DELETE https://{hash}.{region}.jasperpim.com/api/v1/products/<ID>/attributes/<AttributeID>/values/<AttributeValueID>

    URL Parameters

    Parameter Description
    ID The ID of the product
    AttributeID The ID of the attribute
    AttributeValueID The id of the attribute value to delete

    Product Assign Attribute

    curl "https://{hash}.{region}.jasperpim.com/api/v1/products/1/assigned-attributes" \ 
      -X POST \ 
      -d '{
        "attribute_id" : 1
      }' \
      -H "Authorization: Bearer {token}"
    

    This endpoint assigns a specific attribute to a product.

    HTTP Request

    POST https://{hash}.{region}.jasperpim.com/api/v1/products/<ID>/assigned-attributes

    URL Parameters

    Parameter Description
    ID The ID of the product

    Product Assign Attribute Set

    curl "https://{hash}.{region}.jasperpim.com/api/v1/products/1/assigned-attribute-sets" \
      -X POST \
      -d '{
        "attribute_set_id" : 1
      }' \
      -H "Authorization: Bearer {token}"
    

    This endpoint assigns a specific attribute set to a product.

    HTTP Request

    POST https://{hash}.{region}.jasperpim.com/api/v1/products/<ID>/assigned-attribute-sets

    URL Parameters

    Parameter Description
    ID The ID of the product

    Product Channels

    Update or Create Web ID

    curl "https://{hash}.{region}.jasperpim.com/api/v1/products/680/channel/2" \
      -X POST \
      -d '{
            "web_id": 1
       }' \
      -H "Authorization: Bearer {token}"
    

    This endpoint updates or creates a web ID in product_channels.

    HTTP Request

    POST https://{hash}.{region}.jasperpim.com/api/v1/products/<PRODUCTID>/channel/<CHANNELID>

    URL Parameters

    Parameter Description
    PRODUCTID The ID of the product.
    CHANNELID The ID of the channel.

    Product Relation Types

    Product Relation Type Properties

    Property Description
    id Jasper Product Relation Type ID
    name Product Relation Type name
    description Product Relation Type description
    child_label How the relation is labeled when saw from the products assigned in the relation. Example: Parent, Is a part of
    parent_label How the relation is labeled when saw from the product where the related are being assigned. Example: Children, Parts
    relationship_cardinality Controls how products can be assigned to a relation in different products
    label grouping label for product relation type

    Get All Product Relation Types

    curl "https://{hash}.{region}.jasperpim.com/api/v1/product-relation-types" \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
        "product_relation_types" :
            [
              {
                  "id": 1,
                  "name": "Footwear",
                  "description": "Related footwear",
                  "child_label": "Is a part of",
                  "parent_label": null,
                  "relationship_cardinality": "many-to-many",
                  "created_at": null,
                  "updated_at": null,
                  "label": "shoes",
                  "deleted_at": null
              },
              {
                  "id": 2,
                  "name": "Athletic footwear",
                  "description": "Running and sports shoes",
                  "child_label": null,
                  "parent_label": "Parts",
                  "relationship_cardinality": "one-to-many",
                  "created_at": null,
                  "updated_at": null,
                  "label": "shoes",
                  "deleted_at": null
              }
            ]
    }
    

    This endpoint retrieves all product relation types.

    HTTP Request

    GET https://{hash}.{region}.jasperpim.com/api/v1/product-relation-types

    Get a Specific Product Relation Type

    curl "https://{hash}.{region}.jasperpim.com/api/v1/product-relation-types/1" \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
      "product_relation_type" : {
                     "id": 1,
                     "name": "Footwear",
                     "description": "Related footwear",
                     "child_label": "Is a part of",
                     "parent_label": null,
                     "relationship_cardinality": "many-to-many",
                     "created_at": null,
                     "updated_at": null,
                     "label": "shoes",
                     "deleted_at": null
          }
    }
    

    This endpoint retrieves a specific product relation type.

    HTTP Request

    GET https://{hash}.{region}.jasperpim.com/api/v1/product-relation-types/<ID>

    URL Parameters

    Parameter Description
    ID The ID of the product relation type to retrieve

    Create a Product Relation Type

    curl "https://{hash}.{region}.jasperpim.com/api/v1/product-relation-types" \
      -X POST \
      -d '{
            "name": "Jackets"
       }' \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
        "product_relation_type": {
            "name": "Jackets",
            "updated_at": "2019-06-10 20:40:07",
            "created_at": "2019-06-10 20:40:07",
            "id": 3
        }
    }
    

    This endpoint creates a new product relation type.

    HTTP Request

    POST https://{hash}.{region}.jasperpim.com/api/v1/product-relation-types

    Update a Specific Product Relation Type

    curl "https://{hash}.{region}.jasperpim.com/api/v1/product-relation-types/1" \
      -X PUT \
      -d '{
            "name":"Shoes"
       }' \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
      "product_relation_type" : {
                     "id": 1,
                     "name": "Shoes",
                     "description": "Related footwear",
                     "child_label": "Is a part of",
                     "parent_label": null,
                     "relationship_cardinality": "many-to-many",
                     "created_at": null,
                     "updated_at": null,
                     "label": "shoes",
                     "deleted_at": null
          }
    }
    

    This endpoint updates a specific product relation type.

    HTTP Request

    PUT https://{hash}.{region}.jasperpim.com/api/v1/product-relation-types/<ID>

    URL Parameters

    Parameter Description
    ID The ID of the product relation type to update

    Delete a Specific Product Relation Type

    curl "https://{hash}.{region}.jasperpim.com/api/v1/product-relation-types/1" \
      -X DELETE \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
      "message": "Deleted."
    }
    

    This endpoint deletes a specific product relation type.

    HTTP Request

    DELETE https://{hash}.{region}.jasperpim.com/api/v1/product-relation-types/<ID>

    URL Parameters

    Parameter Description
    ID The ID of the product relation type to delete

    Product Relations

    Get All Product Relations From a Single Product

    curl "https://{hash}.{region}.jasperpim.com/api/v1/products/1/relations" \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
      "product_relations" : {
          "Related products" : [
              {
                  "id" : 2,
                  "name" : "Blue T-Shirt",
                  "sku" : "BLUE1",
                  ...
              },
              {
                  "id" : 3,
                  "name" : "Red T-Shirt",
                  "sku" : "RED1",
                  ...
              },
              {
                  "id" : 4,
                  "name" : "Navy Blue T-Shirt",
                  "sku" : "BLUE2",
                  ...
              }
          ]
      }
    }
    

    This endpoint retrieves all relations to a single product, grouped by relation type name. Each related product is returned as a full product object.

    HTTP Request

    GET https://{hash}.{region}.jasperpim.com/api/v1/products/<ID>/relations

    URL Parameters

    Parameter Description
    ID The ID of the product from which you are retrieving relations

    Get Product Relations From a Product by Relation Type

    curl "https://{hash}.{region}.jasperpim.com/api/v1/products/1/relations/type/1" \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
      "product_relations_by_type" : [
          {
              "id" : 2,
              "name" : "Blue T-Shirt",
              "sku" : "BLUE1",
              ...
          },
          {
              "id" : 4,
              "name" : "Navy Blue T-Shirt",
              "sku" : "BLUE2",
              ...
          }
      ]
    }
    

    This endpoint retrieves relations to a product for a single relation type, as a flat list of full product objects.

    HTTP Request

    GET https://{hash}.{region}.jasperpim.com/api/v1/products/<PRODUCT-ID>/relations/type/<RELATION-ID>

    URL Parameters

    Parameter Description
    PRODUCT-ID The ID of the product from which you are retrieving relations
    RELATION-ID The ID of the relation type from which you are retrieving relations

    Create Product Relation

    curl "https://{hash}.{region}.jasperpim.com/api/v1/products/1/relations/5/type/1" \
      -X POST \
      -H "Authorization: Bearer {token}"
    

    The above command returns HTTP 201 and JSON structured like this:

    {
      "product_relations" : [
          {
              "id" : 2,
              "name" : "Blue T-Shirt",
              "sku" : "BLUE1",
              ...
          },
          {
              "id" : 4,
              "name" : "Navy Blue T-Shirt",
              "sku" : "BLUE2",
              ...
          },
          {
              "id" : 5,
              "name" : "Maroon Red T-Shirt",
              "sku" : "RED2",
              ...
          }
      ]
    }
    

    This endpoint creates a product relation between two products on a single relation type. No request body is required. The response is the product's current relations for that type. Creating a relation also queues a sync of the product to its connected channels.

    HTTP Request

    POST https://{hash}.{region}.jasperpim.com/api/v1/products/<PRODUCT-ID>/relations/<RELATED-PRODUCT-ID>/type/<RELATION-ID>

    URL Parameters

    Parameter Description
    PRODUCT-ID The ID of the product on which the relation is based
    RELATED-PRODUCT-ID The ID of the product to which the base product is being attached
    RELATION-ID The ID of the relation type to which the relation should belong

    Delete a Product Relation

    curl "https://{hash}.{region}.jasperpim.com/api/v1/products/1/relations/5/type/1" \
      -X DELETE \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
      "message" : "Product relation removed"
    }
    

    This endpoint deletes a specific product relation. Deleting a relation also queues a sync of the product to its connected channels.

    HTTP Request

    DELETE https://{hash}.{region}.jasperpim.com/api/v1/products/<PRODUCT-ID>/relations/<RELATED-PRODUCT-ID>/type/<RELATION-ID>

    URL Parameters

    Parameter Description
    PRODUCT-ID The ID of the product on which the relation is based
    RELATED-PRODUCT-ID The ID of the product to which the base product is attached
    RELATION-ID The ID of the relation type to which the relation belongs

    Product Relation Attributes

    Get Product Relation Attributes From a Product by Relation and Relation Type

    curl "https://{hash}.{region}.jasperpim.com/api/v1/products/1/relations/2/type/1/attributes" \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
      "product_relation_attributes": [
        {
          "0": {
            "1": {
              "id": 2,
              "entity_type": "product_related_product",
              "entity_id": 3,
              "language_id": 0,
              "attribute_id": 1,
              "value": "blue",
              "attribute_name": "Colour"
            },
            "4": {
              "id": 7,
              "entity_type": "product_related_product",
              "entity_id": 3,
              "language_id": 0,
              "attribute_id": 4,
              "value": "12 cm",
              "attribute_name": "Length"
            }
          },
          "2": {
            "1": {
              "id": 9,
              "entity_type": "product_related_product",
              "entity_id": 3,
              "language_id": 2,
              "attribute_id": 1,
              "value": "bleu",
              "attribute_name": "Colour"
            }
          }
        }
      ]
    }
    
    

    This endpoint retrieves relations to a product for a single relation type.

    product_relation_attributes holds one entry per matching relation. Each entry is a nested map keyed first by version ID and then by attribute ID, so product_relation_attributes[0]["2"]["1"] is the value of attribute 1 on the master version. Version 0 is the master version.

    HTTP Request

    GET https://{hash}.{region}.jasperpim.com/api/v1/products/<PRODUCT-ID>/relations/<RELATED-PRODUCT-ID>/type/<RELATION-ID>/attributes

    URL Parameters

    Parameter Description
    PRODUCT-ID The ID of the product from which you are retrieving relations
    RELATED-PRODUCT-ID The ID of the product to which the base product is being attached
    RELATION-ID The ID of the relation type to which the relation should belong

    Errors

    Status Reason
    422 The product, related product, and relation type do not form a valid relation

    Get Product Relation Attributes for a Single Version

    curl "https://{hash}.{region}.jasperpim.com/api/v1/products/1/relations/2/type/1/attributes/version/2" \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
      "product_relation_attributes": [
        {
          "2": {
            "1": {
              "id": 9,
              "entity_type": "product_related_product",
              "entity_id": 3,
              "language_id": 2,
              "attribute_id": 1,
              "value": "bleu",
              "attribute_name": "Colour"
            }
          }
        }
      ]
    }
    

    The same data as above, restricted to one version. The response keeps the same nested shape, so the version you asked for is still the outer key.

    Passing 0, or leaving the version off the end of the URL, returns every version rather than the master version alone.

    HTTP Request

    GET https://{hash}.{region}.jasperpim.com/api/v1/products/<PRODUCT-ID>/relations/<RELATED-PRODUCT-ID>/type/<RELATION-ID>/attributes/version/<VERSION-ID>

    URL Parameters

    Parameter Description
    PRODUCT-ID The ID of the product from which you are retrieving relations
    RELATED-PRODUCT-ID The ID of the product to which the base product is being attached
    RELATION-ID The ID of the relation type to which the relation should belong
    VERSION-ID The ID of the version to return

    Errors

    Status Reason
    422 The product, related product, and relation type do not form a valid relation

    Create or Update Product Relation Attributes

    curl "https://{hash}.{region}.jasperpim.com/api/v1/products/1/relations/5/type/1/attributes" \
      -X POST \
      -d '{}' \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
      "product_relation_attributes": [
        {
          "id": 2,
          "entity_id": 3,
          "attribute_id": 1,
          "value": "blue",
          ...
        },
        {
          "id": 4,
          "entity_id": 3,
          "attribute_id": 1,
          "value": "red",
          ...
        }
      ]
    }
    

    This endpoint creates or updates product relation attributes between two products on a single relation type.

    HTTP Request

    POST https://{hash}.{region}.jasperpim.com/api/v1/products/<PRODUCT-ID>/relations/<RELATED-PRODUCT-ID>/type/<RELATION-ID>/attributes

    URL Parameters

    Parameter Description
    PRODUCT-ID The ID of the product on which the relation is based
    RELATED-PRODUCT-ID The ID of the product to which the base product is being attached
    RELATION-ID The ID of the relation type to which the relation should belong

    Create or Update a Single Attribute of a Product Relation

    curl "https://{hash}.{region}.jasperpim.com/api/v1/products/1/relations/5/type/1/attribute/3" \
      -X POST \
      -d '{}' \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
      "product_relation_attributes": [
        {
          "id": 2,
          "entity_id": 3,
          "attribute_id": 1,
          "value": "blue",
          ...
        }
      ]
    }
    

    This endpoint creates or updates a single attribute of a product relation between two products on a single relation type.

    HTTP Request

    POST https://{hash}.{region}.jasperpim.com/api/v1/products/<PRODUCT-ID>/relations/<RELATED-PRODUCT-ID>/type/<RELATION-ID>/attribute/<ATTRIBUTE-ID>

    URL Parameters

    Parameter Description
    PRODUCT-ID The ID of the product on which the relation is based
    RELATED-PRODUCT-ID The ID of the product to which the base product is being attached
    RELATION-ID The ID of the relation type to which the relation should belong
    ATTRIBUTE-ID The ID of the attribute to create or update

    Delete a Product Relation Attribute

    curl "https://{hash}.{region}.jasperpim.com/api/v1/products/1/relations/5/type/1/attribute/3" \
      -X DELETE \
      -H "Authorization: Bearer {token}"
    

    This endpoint deletes a specific attribute of a product relation.

    HTTP Request

    DELETE https://{hash}.{region}.jasperpim.com/api/v1/products/<PRODUCT-ID>/relations/<RELATED-PRODUCT-ID>/type/<RELATION-ID>/attribute/<ATTRIBUTE-ID>

    URL Parameters

    Parameter Description
    PRODUCT-ID The ID of the product on which the relation is based
    RELATED-PRODUCT-ID The ID of the product to which the base product is attached
    RELATION-ID The ID of the relation type to which the relation belongs
    ATTRIBUTE-ID The ID of the attribute to delete

    Product Tags

    Get All Product Tags From a Single Product

    curl "https://{hash}.{region}.jasperpim.com/api/v1/products/1/tags/2" \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
      "product_id": 1,
      "2": [
        "tag_1",
        "tag_2",
        "tag_3"
      ]
    }
    
    curl "https://{hash}.{region}.jasperpim.com/api/v1/products/1/tags" \
      -H "Authorization: Bearer {token}"
    

    Without the specific version as a last parameter it will return all tags from all versions.

    {
      "product_id": 1,
      "0": [
        "tag_1",
        "tag_2",
        "tag_3"
      ],
      "1": [
        "tag_a",
        "tag_b",
        "tag_c"
      ],
      "2": [
        "tag_x",
        "tag_y",
        "tag_z"
      ]
    }
    

    This endpoint retrieves all tags to a single product.

    HTTP Request

    GET https://{hash}.{region}.jasperpim.com/api/v1/products/<ID>/tags/<VERSION-ID>

    URL Parameters

    Parameter Description
    ID The ID of the product from which you are retrieving tags
    VERSION-ID The ID of the version (optional)

    Modify Product Tags

    curl "https://{hash}.{region}.jasperpim.com/api/v1/products/2/tags/1" \
      -X PUT \
      -d '{
      "product_id": 2,
      "0": [
        "tag_1",
        "tag_2",
        "tag_3"
      ]
      }' \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
      "product_id": 2,
      "1": [
        "tag_1",
        "tag_2",
        "tag_3"
      ]
    }
    

    This endpoint updates a specific product.

    HTTP Request

    PUT https://{hash}.{region}.jasperpim.com/api/v1/products/<ID>/tags/<VERSION-ID>

    URL Parameters

    Parameter Description
    ID The ID of the product to update
    VERSION-ID The version ID

    Templates

    Template Properties

    Property Description
    id Jasper Template ID
    name Template name
    slug Slug
    content Content

    Get All Templates

    curl "https://{hash}.{region}.jasperpim.com/api/v1/templates" \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
        "templates" :
            [
              {
                "id": 1,
                "name": "Main",
                "slug": "main",
                ...
              },
              {
                "id": 2,
                "name": "Side",
                "slug": "side"
                ...
              }
            ]
    }
    

    This endpoint retrieves all templates.

    HTTP Request

    GET https://{hash}.{region}.jasperpim.com/api/v1/templates

    Get a Specific Template

    curl "https://{hash}.{region}.jasperpim.com/api/v1/templates/2" \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
      "template" : {
                "id": 2,
                "name": "Footer",
                "slug": "footer"
                ...
      }
    }
    

    This endpoint retrieves a specific template.

    HTTP Request

    GET https://{hash}.{region}.jasperpim.com/api/v1/templates/<ID>

    URL Parameters

    Parameter Description
    ID The ID of the template to retrieve

    Create a Template

    curl "https://{hash}.{region}.jasperpim.com/api/v1/templates" \
      -X POST \
      -d '{
        "name":"Header",
        "slug":"header"
       }' \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
      "template" : {
          "id" : 3,
          "name" : "Header",
          "slug" : "header"
          ...
      }
    }
    

    This endpoint creates a new template.

    HTTP Request

    POST https://{hash}.{region}.jasperpim.com/api/v1/templates

    Update a Specific Template

    curl "https://{hash}.{region}.jasperpim.com/api/v1/templates/2" \
      -X PUT \
      -d '{
        "name":"Other"
       }' \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
      "template" : {
            "id": 2,
            "name": "Other",
            "slug": "footer"
          ...
      } 
    }
    

    This endpoint updates a specific template.

    HTTP Request

    PUT https://{hash}.{region}.jasperpim.com/api/v1/templates/<ID>

    URL Parameters

    Parameter Description
    ID The ID of the template to update

    Delete a Template

    Deleting a template is not available through the API. The route exists but always responds 501 Not Implemented, on every PIM and for every token.

    {
        "message": "Not implemented."
    }
    

    HTTP Request

    DELETE https://{hash}.{region}.jasperpim.com/api/v1/templates/<ID>

    Webhooks

    Webhook Properties

    Property Description
    name (string, required) Webhook name. Must be unique per entity_type.
    callback_url (string, required) Webhook callback URL
    entity_type (string, required) Entity type (valid values: product, category, brand, product_asset, concrete_entity)
    include_entity_data (integer) Include entity data with the payload (valid values: 0 or 1)
    headers (json, nullable) Custom headers to include with the payload
    connection_timeout (integer) Connection timeout in seconds (between 1 and 30)
    retry_policy (string, required) Retry policy (valid values: linear, exponential, no_retry)
    minimum_retry_interval (integer) Interval time before retry in seconds (between 60 and 86400)
    retry_limit (integer) Retry limit (between 0 and 10)
    channel_id (integer) PIM channel ID (channel-specific webhook)
    event_type (string) Sync channel type (channel-specific webhook)
    status (string, read-only) Current status (enabled, disabled, failed)
    signing_secret (string, read-only) Auto-generated HMAC signing secret

    Get All Webhooks

    curl "https://{hash}.{region}.jasperpim.com/api/v1/webhooks" \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
        "webhooks" :
            [
              {
                "id": 1,
                "created_at": "2022-01-10 15:14:18",
                "updated_at": "2022-01-10 15:14:18",
                "created_by": 12,
                "updated_by": 12,
                "status": "enabled",
                "name": "Product Update",
                "callback_url": "https://callback_url.com/product",
                "entity_type": "product",
                "include_entity_data": 1,
                "signing_secret":"EXAMPLE-SIGNING-SECRET-WEBHOOK-1-VALUE-IS-GENERATED-PER-WEBHOOK",
                "headers": "{'header-title': 'header_value'}",
                "connection_timeout": 3,
                "retry_policy": "exponential",
                "minimum_retry_interval": 120,
                "retry_limit": 10
              },
              {
                "id": 2,
                "created_at": "2022-01-11 16:55:08",
                "updated_at": "2022-01-11 16:55:08",
                "created_by": 3,
                "updated_by": 3,
                "status": "enabled",
                "name": "Category Update",
                "callback_url": "https://callback_url.com/category",
                "entity_type": "category",
                "include_entity_data": 1,
                "signing_secret":"EXAMPLE-SIGNING-SECRET-WEBHOOK-2-VALUE-IS-GENERATED-PER-WEBHOOK",
                "headers": "{'header-title': 'header_value'}",
                "connection_timeout": 3,
                "retry_policy": "linear",
                "minimum_retry_interval": 120,
                "retry_limit": 10
              }
            ]
    }
    

    This endpoint will retrieve all webhooks.

    HTTP Request

    GET https://{hash}.{region}.jasperpim.com/api/v1/webhooks

    Get a Specific Webhook

    curl "https://{hash}.{region}.jasperpim.com/api/v1/webhooks/2" \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
      "webhooks" : {
          "id": 2,
          "created_at": "2022-01-11 16:55:08",
          "updated_at": "2022-01-11 16:55:08",
          "created_by": 3,
          "updated_by": 3,
          "status": "enabled",
          "name": "Category Update",
          "callback_url": "https://callback_url.com/category",
          "entity_type": "category",
          "include_entity_data": 1,
          "signing_secret":"EXAMPLE-SIGNING-SECRET-WEBHOOK-2-VALUE-IS-GENERATED-PER-WEBHOOK",
          "headers": "{'header-title': 'header_value'}",
          "connection_timeout": 3,
          "retry_policy": "linear",
          "minimum_retry_interval": 120,
          "retry_limit": 10
      }
    }
    

    This endpoint will retrieve a specific webhook.

    HTTP Request

    GET https://{hash}.{region}.jasperpim.com/api/v1/webhooks/<ID>

    URL Parameters

    Parameter Description
    ID The ID of the webhook to retrieve

    Create a Webhook

    curl "https://{hash}.{region}.jasperpim.com/api/v1/webhooks" \
      -X POST \
      -d '{
        "name": "Product Update",
        "callback_url": "https://callback_url.com/product",
        "entity_type": "product",
        "include_entity_data" : 1,
        "headers" : "{\"header-title\": \"header_value\"}",
        "retry_policy" : "linear",
        "minimum_retry_interval" : 60,
        "retry_limit" : 3
       }' \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
      "webhooks" : {
          "id": 1,
          "created_at": "2022-01-11 16:55:08",
          "updated_at": "2022-01-11 16:55:08",
          "created_by": 3,
          "updated_by": 3,
          "status": "enabled",
          "name": "Product Update",
          "callback_url": "https://callback_url.com/product",
          "entity_type": "product",
          "include_entity_data": 1,
          "signing_secret":"EXAMPLE-SIGNING-SECRET-WEBHOOK-3-VALUE-IS-GENERATED-PER-WEBHOOK",
          "headers": "{'header-title': 'header_value'}",
          "connection_timeout": 3,
          "retry_policy": "linear",
          "minimum_retry_interval": 60,
          "retry_limit": 3
      }
    }
    

    This endpoint will create a webhook. The webhook will be enabled by default. A signing secret is auto-generated.

    The combination of name and entity_type must be unique. Creating a webhook with an existing name and entity_type returns 422.

    HTTP Request

    POST https://{hash}.{region}.jasperpim.com/api/v1/webhooks

    Update a Webhook

    curl "https://{hash}.{region}.jasperpim.com/api/v1/webhooks/1" \
      -X PUT \
      -d '{
        "name": "Product Update Edited",
        "callback_url": "https://callback_url.com/product",
        "entity_type": "product",
        "include_entity_data" : 1,
        "headers" : "{\"header-title\": \"header_value\"}",
        "retry_policy" : "linear",
        "minimum_retry_interval" : 60,
        "retry_limit" : 5
       }' \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
      "webhooks" : {
          "id": 1,
          "created_at": "2022-01-11 16:55:08",
          "updated_at": "2022-01-11 16:55:08",
          "created_by": 3,
          "updated_by": 3,
          "status": "enabled",
          "name": "Product Update Edited",
          "callback_url": "https://callback_url.com/product",
          "entity_type": "product",
          "include_entity_data": 1,
          "signing_secret":"EXAMPLE-SIGNING-SECRET-WEBHOOK-3-VALUE-IS-GENERATED-PER-WEBHOOK",
          "headers": "{'header-title': 'header_value'}",
          "connection_timeout": 3,
          "retry_policy": "linear",
          "minimum_retry_interval": 60,
          "retry_limit": 5
      }
    }
    

    This endpoint will update a webhook. The combination of name and entity_type must be unique across all webhooks.

    HTTP Request

    PUT https://{hash}.{region}.jasperpim.com/api/v1/webhooks/<ID>

    URL Parameters

    Parameter Description
    ID The ID of the webhook to retrieve

    Disable a Webhook

    curl "https://{hash}.{region}.jasperpim.com/api/v1/webhooks/1/disable" \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
      "webhooks" : {
          "id": 1,
          "created_at": "2022-01-11 16:55:08",
          "updated_at": "2022-01-11 16:55:08",
          "created_by": 3,
          "updated_by": 3,
          "status": "disabled",
          "name": "Product Update",
          "callback_url": "https://callback_url.com/product",
          "entity_type": "product",
          "include_entity_data": 1,
          "signing_secret":"EXAMPLE-SIGNING-SECRET-WEBHOOK-3-VALUE-IS-GENERATED-PER-WEBHOOK",
          "headers": "{'header-title': 'header_value'}",
          "connection_timeout": 3,
          "retry_policy": "linear",
          "minimum_retry_interval": 60,
          "retry_limit": 15
      }
    }
    

    This endpoint will disable a webhook.

    HTTP Request

    GET https://{hash}.{region}.jasperpim.com/api/v1/webhooks/<ID>/disable

    URL Parameters

    Parameter Description
    ID The ID of the webhook to retrieve

    Enable a Webhook

    curl "https://{hash}.{region}.jasperpim.com/api/v1/webhooks/1/enable" \
      -H "Authorization: Bearer {token}"
    

    The above command returns JSON structured like this:

    {
      "webhooks" : {
          "id": 1,
          "created_at": "2022-01-11 16:55:08",
          "updated_at": "2022-01-11 16:55:08",
          "created_by": 3,
          "updated_by": 3,
          "status": "enabled",
          "name": "Product Update",
          "callback_url": "https://callback_url.com/product",
          "entity_type": "product",
          "include_entity_data": 1,
          "signing_secret":"EXAMPLE-SIGNING-SECRET-WEBHOOK-3-VALUE-IS-GENERATED-PER-WEBHOOK",
          "headers": "{'header-title': 'header_value'}",
          "connection_timeout": 3,
          "retry_policy": "linear",
          "minimum_retry_interval": 60,
          "retry_limit": 15
      }
    }
    

    This endpoint will enable a webhook.

    HTTP Request

    GET https://{hash}.{region}.jasperpim.com/api/v1/webhooks/<ID>/enable

    URL Parameters

    Parameter Description
    ID The ID of the webhook to retrieve

    Errors

    The Jasper API uses the following error codes:

    Error Code Meaning
    200 Success -- The request was successfully processed by Jasper.
    201 Created -- The request has been fulfilled and a new resource has been created.
    202 Accepted --The request has been accepted, but not yet processed.
    400 Bad Request -- The request was not understood by the server.
    401 Unauthorized -- The server was unable to authenticate the request.
    403 Forbidden -- The current API user doesn't have correct permissions to execute the request.
    404 Not Found -- The requested resource cannot be found.
    418 I'm a teapot.
    429 Too Many Requests -- The request was not accepted because the application has exceeded the rate limit.
    500 Internal Server Error -- We had a problem with our server. Please report errors to Jasper.
    503 Service Unavailable -- We're temporarily offline for maintenance. Please try again later.