# Rest API References

For full details of our Admin Rest API, please visit [ShopBase API Docs](https://api-doc.shopbase.com)

### Frequent Asked API Questions

#### Product API

**Create a Product**

Create a simple product:

```
POST: /admin/products.json
{
   "product": {
   	"title": "Simple product title"
   }
}
```

Create a product with multiple product variants and multiple options:

```
POST: /admin/products.json
{
    "product": {
        "title": "Simple product title",
        "variants": [
            {
                "option1": "Black",
                "option2": "Small",
                "price": "19.99",
                "sku": "sku-189234-123-12-1",
                "compare_at_price": "21.99"
            },
            {
                "option1": "Red",
                "option2": "Large",
                "price": "19.99",
                "sku": "sku-189234-123-12-2",
                "compare_at_price": "21.99"
            },
            {
                "option1": "Red",
                "option2": "Medium",
                "price": "19.99",
                "sku": "sku-189234-123-12-3",
                "compare_at_price": "21.99"
            }
        ],
        "options": [
            {
                "values": [
                    "Black",
                    "Red",
                    "Purple"
                ],
                "name": "Color"
            },
            {
                "values": [
                    "Small",
                    "Medium",
                    "Large"
                ],
                "name": "Size"
            }
        ],
        "images": [
            {
                "metafields": [],
                "src": "https://example.com/image-src-url-001.jpg",
                "alt": "some-alt-text-01"
            },
            {
                "metafields": [],
                "src": "https://example.com/image-src-url-002.jpg",
                "alt": "some-alt-text-02"
            }
        ]
    }
}
```

**Update Product:**

Update product title:

```
PUT admin/products/${product_id}.json
{
  "product": {
    "id": ${product_id},
    "title": "New product title"
  }
}
```

Update product by adding new product images:

```
PUT admin/products/${product_id}.json
{
  "product": {
    "id": ${product_id},
    "images": [
      {
        "src": "https://example.com/new-product-image-001.jpg"
      }
    ]
  }
}
```

Update product by reordering product images:

```
PUT admin/products/${product_id}.json
{
  "product": {
    "id": ${product_id},
    "images": [
      {
        "id": ${product_image_id_01},
        "position": 2
      },
      {
        "id": ${product_image_id_02},
        "position": 1
      }
    ]
  }
}
```

Show/hide product:

```
# Show product
PUT admin/products/${product_id}.json
{
  "product": {
    "id": ${product_id},
    "published": true
  }
}

# Hide product
PUT admin/products/${product_id}.json
{
  "product": {
    "id": ${product_id},
    "published": false
  }
}
```

#### Product variant API

Add a new variant with an image for a product:

```
POST: /admin/products/${product_id}/variants.json
{
  "variant": {
    "option1": "Purple",
    "option2": "Small",
    "image_id": ${product_image_id},
    "price": "19.99",
    "sku": "sku-189234-123-12-4",
    "compare_at_price": "21.99"
  }
}
```

Update product variant - Add an existing image to an existing variant:

```
PUT: /admin/variants/${variant_id}.json
{
  "variant": {
    "id": ${variant_id},
    "image_id": ${product_image_id},
    "product_id": ${productID}
  }
}
```

Update product variant - Update price:

```
PUT: /admin/variants/${variant_id}.json
{
  "variant": {
    "id": ${variant_id},
    "price": 3.99,
    "product_id": ${productID}
  }
}
```

#### Product image API

Create new product image for a product with image attachment:

```
POST: /admin/products/${product_id}/images.json
{
  "image": {
    "attachment": "Data endcode Base64 of image",
    "filename": "image.jpg"
  }
}
```

Create a new product image for a product with an image URL:

```
POST: /admin/products/${product_id}/images.json
{
  "image": {
    "src": "https://example.com/image.jpg"
  }
}
```

Create a new product image for a product and make it as the main image:

```
POST: /admin/products/${product_id}/images.json
{
  "image": {
    "src": "https://example.com/image.jpg",
    "position": 1
  }
}
```

Create a new product image for a product and assign it for product variants:

```
POST: /admin/products/${product_id}/images.json
{
  "image": {
    "src": "https://example.com/image.jpg",
    "variant_ids": [
      ${variant_1_id},
      ${variant_2_id}
    ]
  }
}
```

Update product image: assign it for product variants:

```
PUT: /admin/products/${product_id}/images/${image_id}.json
{
  "image": {
    "id": ${image_id},
    "variant_ids": [
      ${variant_1_id},
      ${variant_2_id}
    ]
  }
}
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://developers.shopbase.com/build-an-app/making-your-first-request/rest-api-references.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
