Skip to content
You are viewing an outdated version of the documentation.
Click here to switch to the stable version (v6.6), or use the version switcher on the left to navigate between versions.

INFO

This document represents an architecture decision record (ADR) and has been mirrored from the ADR section in our Shopware 6 repository. You can find the original version here

Create a product with a new media

http
POST http://localhost:8000/api/import/{{import_id}}/record
Content-Type: application/json
Accept: application/json
Authorization: Bearer {{auth_token}}

{
    "products": [
        {
            "id": "018a6b222b5a734d956fb03dda765bfa",
            "name": "My product via API",
            "productNumber": "PRODNUMAPI1",
            "tax": {
                "name": "Reduced rate 2"
            },
            "prices": [
                {
                    "currency": "EUR",
                    "gross": 10,
                    "net": 20,
                    "linked": false
                }
            ],
            "media": [
                {
                    "url": "https://images.unsplash.com/photo-1660236822651-4263beb35fa8?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=1170&q=80",
                    "title": "pommes",
                    "alt": "alt",
                    "filename": "pommes.jpg"
                }
            ]
        }
    ]
}

Update a product and update its media

http
POST http://localhost:8000/api/import/{{import_id}}/record
Content-Type: application/json
Accept: application/json
Authorization: Bearer {{auth_token}}

{
    "media": [
        {
            "id": "018a6b222b5a734d956fb03dda765bfb",
            "title": "New title"
        }
    ],
    "products": [
        {
            "id": "018a6b222b5a734d956fb03dda765bfa",
            "name": "My update product"
        }
    ]
}

Delete a product and media

http
POST http://localhost:8000/api/import/{{import_id}}/record/delete
Content-Type: application/json
Accept: application/json
Authorization: Bearer {{auth_token}}
{
    "products": [
        "018a6b222b5a734d956fb03dda765bfa"
    ],
    "media": [
        "018a6b222b5a734d956fb03dda765bfb"
    ]
}

Create a product with a custom entity

http
POST http://localhost:8000/api/import/{{import_id}}/record
Content-Type: application/json
Accept: application/json
Authorization: Bearer {{auth_token}}

{
  "products": [
    {
      "id": "018a6b222b5a734d956fb03dda765bfa",
      "name": "My product via API",
      "productNumber": "PRODNUMAPI1",
      "tax": {
        "name": "Reduced rate 2"
      },
      "prices": [
        {
          "currency": "EUR",
          "gross": 10,
          "net": 20,
          "linked": false
        }
      ],
      "extensions": {
        "myCustomEntity": {
          "id": "018a6b222b5a734d956fb03dda765bf8",
          "name": "foo"
        }
      }
    }
  ]
}

Update a custom entity

http
POST http://localhost:8000/api/import/{{import_id}}/record
Content-Type: application/json
Accept: application/json
Authorization: Bearer {{auth_token}}

{
    "extensions": {
        "myCustomEntity": [
          {
            "id": "018a6b222b5a734d956fb03dda765bf8",
            "name": "bar"
          }
        ]
    },
    "products": [
        {
            "id": "018a6b222b5a734d956fb03dda765bfa",
            "name": "My update product"
        }
    ]
}

Create a category and assign products to it

http
POST http://localhost:8000/api/import/{{import_id}}/record
Content-Type: application/json
Accept: application/json
Authorization: Bearer {{auth_token}}

{
    "categories": [
        {
            "name": "Category 1",
            "parent": [
                "Home",
                "Category 2",
                "Category 3"
            ],
            "products": [
                {
                    "id": "prod1d1"
                },
                {
                    "id": "prod1d2"
                }
            ]
        }
    ]
}

Un-assign a media from a product

http
POST http://localhost:8000/api/import/{{import_id}}/record/unassign
Content-Type: application/json
Accept: application/json
Authorization: Bearer {{auth_token}}

{
    "products": {
        "id": "productId",
        "media": [
            {
                "id": "mediaId1"
            },
            {
                "filename": "pommes.jpg"
            }
        ]
    }
}

Error Response: Resolving Root Entities

Scenario: Updating a product which does not exist

Request

http
POST http://localhost:8000/api/import/{{import_id}}/record
Content-Type: application/json
Accept: application/json
Authorization: Bearer {{auth_token}}

{
    "products": [
        {
            "id": "018a6b222b5a734d956fb03dda765bfa",
            "productNumber": "PRODNUMAPI1",
        }
    ]
}

Response

json
{
    "containsErrors": true,
    "records": [
        {
            "errors": [
                {
                    "message": "ID 018a6b222b5a734d956fb03dda765bfa not found",
                    "path": "products.0"
                }
            ]
        }
    ]
}

Error Response: Resolving Nested Entities

Scenario: Product with ID prod1d1 does not exist

Request

http
POST http://localhost:8000/api/import/{{import_id}}/record
Content-Type: application/json
Accept: application/json
Authorization: Bearer {{auth_token}}

{
    "categories": [
        {
            "name": "Category 1",
            "parent": [
                "Home",
                "Category 2",
                "Category 3"
            ],
            "products": [
                {
                    "id": "prod1d1"
                },
                {
                    "id": "prod1d2"
                }
            ]
        }
    ]
}

Response

json
{
    "containsErrors": true,
    "records": [
        {
            "id" : "c642f3515aff4783991e361f381e77ca",
            "errors": [
                {
                    "message": "ID prod1d1 not found",
                    "path": "categories.0.products.1"
                },
                {
                    "message": "ID prod1d2 not found",
                    "path": "categories.0.products.2"
                }
            ]
        }
    ]
}

Error Response Status Root

Scenario: Create a product, productNumber is not unique

Request

http
POST http://localhost:8000/api/import/{{import_id}}/record
Content-Type: application/json
Accept: application/json
Authorization: Bearer {{auth_token}}

{
    "products": [
        {
            "id": "018a6b222b5a734d956fb03dda765bfa",
            "name": "My product via API",
            "productNumber": "PRODNUMAPI1",
            "tax": {
                "name": "Reduced rate 2"
            },
            "prices": [
                {
                    "currency": "EUR",
                    "gross": 10,
                    "net": 20,
                    "linked": false
                }
            ],
        }
    ]
}

Response

json
{
    "status": "done",
    "startTime": "25/12/2024",
    "duration": "10",
    "totals": {
        "product": 2,
        "media": 1,
        "total": 3,
        "failures": 1
    },
    "failures": [
        {
            "entity": "product",
            "path": "products.0",
            "details": [
                {
                    "severity": "error",
                    "entity": "product",
                    "path": "products.0",
                    "message": "Product number is not unique"
                }
            ]
        }
    ]
}

Error Response Status Nested

Scenario: Create a product with a media, media fails to download

Request

http
POST http://localhost:8000/api/import/{{import_id}}/record
Content-Type: application/json
Accept: application/json
Authorization: Bearer {{auth_token}}

{
    "products": [
        {
            "id": "018a6b222b5a734d956fb03dda765bfa",
            "name": "My product via API",
            "productNumber": "PRODNUMAPI1",
            "tax": {
                "name": "Reduced rate 2"
            },
            "prices": [
                {
                    "currency": "EUR",
                    "gross": 10,
                    "net": 20,
                    "linked": false
                }
            ],
            "media": [
                {
                    "url": "https://images.unsplash.com/photo-1660236822651-4263beb35fa8?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=1170&q=80",
                    "title": "pommes",
                    "alt": "alt",
                    "filename": "pommes.jpg"
                }
            ]
        }
    ]
}

Response

json
{
    "status": "done",
    "startTime": "25/12/2024",
    "duration": "10",
    "totals": {
        "product": 2,
        "media": 1,
        "total": 3,
        "failures": 1
    },
    "failures": [
        {
            "entity": "product",
            "path": "products.0",
            "details": [
                {
                    "severity": "error",
                    "entity": "product",
                    "path": "products.0",
                    "message": "Images could not be downloaded"
                },
                {
                    "severity": "error",
                    "entity": "media",
                    "path": "products.0.media.0",
                    "message": "Image %s could not be downloaded"
                },
                {
                    "severity": "error",
                    "entity": "media",
                    "path": "products.0.media.1",
                    "message": "Image %s could not be downloaded"
                }
            ]
        }
    ]
}