API
Introduction

Welcome to the API documentation for Quickbutik! Our API has resource-orientated, predictable URLs which use HTTP codes to indicate the status for the call. All results will be returned in JSON, including error messages. We hope this makes it easy to work with.

The Quickbutik API endpoint is always: https://api.quickbutik.com/v1

All feature requests, feedback or technical questions are greatly appreciated: support@quickbutik.com.

Happy coding!

Authentication

All calls are made using the Basic Authorization authentication method that is sent with all calls. This is used to identify you as an API user with the Quickbutik you would like access to.

Basic Authorization is the easiest method for managing access and permissions in a standardized way. It mainly consists of an HTTP Authorization Basic header followed by the user information (username and password) - encoded with base64.

For calls to the Quickbutik API, use the API key as username and password. api_key:api_key (base64-encoded).

Example header would look like this:

Authorization: Basic YXBpX2tleV9oZXJlOmFwaV9rZXlfaGVyZQ ==

Your API key can be created and managed in Quickbutik’s control panel under ** Settings> API ** by the store owner.

All API calls must be made over HTTPS. All calls with standard HTTP are denied and the same for calls without authentication.

Update: Have you already been working with Quickbutik API before? The older authentication method (apiKey-query) will be discontinued shortly and we therefore recommend that you update to the above authentication method.

Change log

This section lists all changes to the API by date.

2020-10-16

  • Added custom product fields to the get products endpoints.

2020-10-07

  • Added price field to the create & update orders endpoints.
  • Added total_weight to the get orders endpoints.
  • Custom Payment methods now visible in paymethods endpoints.
  • The include_details option can be used on the products get-endpoints in order to show additional details, such as variants. This includes custom data fields.
  • Added category_id, category_name and category_path to products get-endpoints.

2020-09-08

  • Added qty field to order.products
  • Added currency field to order.payment
Products
GET /v1/products
POST /v1/products
PUT /v1/products
GET /v1/products/count
Get products
GET /v1/products

Fetch products in store

Request parameters

product_id
string optional

Specific id for product

Examples:
1010,12,14
limit
integer optional

The maximum number of rows returned. The default is 100, and the value may not exceed 500.

offset
integer optional

The amount of rows to skip before returning. This can be used to loop through all objects if there are more than the limit allows to be returned.

include_details
boolean optional

Indicates whether or not details (such as variants and images) are returned. Default is false.

Request body

Responses

200 OK

(without product_id)

application/json
200 OK

(with product_id)

application/json
404 Kunde inte hittas

Product/s could not be found

Example 1 (Specific)
Example 2 (Non specific)

Specific product requested, full product information return.

GET https://api.quickbutik.com/v1/products?product_id=123 HTTP/1.1 

Content-Type: application/json

Non specific request - 50 latest products returns (product information summary only - not full).

GET https://api.quickbutik.com/v1/products HTTP/1.1 

Content-Type: application/json
Create products
POST /v1/products

Create and add products to store

Request body

Object
sku
string

Article Number (SKU)

Example:
T-SHIRT123
title
string

Product title

Example:
My white tee!
description
string

Product description. Accepts HTML.

Example:
<p><strong>This is so so cool!</strong> Heee</p>
price
integer

Price

Example:
299
before_price
integer

Compare price

Example:
399
purchase_price
integer

Purchase price (excl. vat)

Example:
69
tax_rate
integer

VAT percent (%)

weight
number

Weight (in grams)

Example:
400
stock
integer

Stock quantity

Example:
1
disable_minusqty
string

Stock: Disable minus quantity?

Examples:
10
gtin
string

EAN-number / GTN (Global Trade Item Number)

headcategory_name
string

Category name if product should be placed into a new category.

Example:
T-shirts
visible
integer

Visibility in store

Example:
1

Responses

200 OK

Product created, returns array of created product ids.

Body
application/json
Object
created
Array
Object
product_id
integer
Example:
123
success
integer
Example:
1
404 ERROR

An error occurred.

Create single product
Create multiple products
[
  {
    "sku": "SHIRT-123",
    "title": "T-shirt",
    "description":"<p><strong>This is so cool!</strong> Heee</p>",
    "price": 199
  },
  "created": [
    {
      "product_id": 1
    }
  ],
  "success": 1
]
[
  {
    "sku": "SHIRT-123",
    "title": "T-shirt",
    "description":"<p><strong>This is so cool!</strong> Heee</p>",
    "price": 199
  },
  {
    "sku": "SHIRT-333",
    "title": "T-shirt Special",
    "description":"<p><strong>This is so so cool!</strong> Heee</p>",
    "price": 399
  },
  "created": [
    {
      "product_id": 1
    },
    {
      "product_id": 2
    }
  ],
  "success": 1
]
Update products
PUT /v1/products

Update products in store.

Product can be identified by product_id/variant_id or directly with SKU/Article Number if unique.

Request body

Object
product_id
integer

Product id - which you would like to update.

variant_id
integer

Product variant id (if specific variant)

sku
string

(OR) Article Number - on product/variant which you would like to update.

title
string

Product title

price
integer

Price

Example:
299
before_price
integer

Compare price

Example:
399
purchase_price
integer

Purchase price (excl. vat)

Example:
69
tax_rate
integer

VAT percentage (%)

Examples:
25126
stock
integer

Stock quantity

Example:
1
qty_location
string

Stock location

disable_minusqty
string

Disable minus stock (dont allow the stock to go negative)

Examples:
10
visible
integer
Example:
1
description
string

Product description

gtin
string

EAN number (GTIN)

supplier_name
string

Supplier name

supplier_sku
string

Supplier SKU/article number

datafield_1
string

Data field #1

datafield_2
string

Data field #2

datafield_3
string

Data field #3

seo_description
string

SEO description (if specific)

seo_title
string

SEO title (if specific)

weight
number

Weight (in grams)

Example:
400

Responses

200 OK

Product updated

Body
application/json
Object
success
integer
Example:
1
errors
Array of unknown
404 Error

An error occurred.

500 Error processing

An error occurred.

Update single product (by SKU)
Update multiple products (by SKU and IDs)
[
  {
    "sku": "SHIRT-123",
    "title": "T-shirt",
    "description":"<p><strong>This is so cool!</strong> Heee</p>",
    "supplier_name": "Shirt Factory",
    "supplier_sku": "SHIRT-WHITE-123",
    "datafield_1": "CustomData",
    "gtin": "Shirt-100BNMB"
  }
]
[
  {
    "sku": "SHIRT-123",
    "title": "ASUS",
    "title": "T-shirt",
    "description":"<p><strong>This is so cool!</strong> Heee</p>",
    "supplier_name": "Shirt Factory",
    "supplier_sku": "SHIRT-WHITE-123",
    "datafield_1": "CustomData",
    "gtin": "Shirt-100BNMB"
  },
  {
    "product_id": 1,
    "variant_id": 2,
    "price": 123
  },
  {
    "sku": "SHIRT-123",
    "price": 120
  }
]
Count products
GET /v1/products/count

Fetches a count of the total number of products.

Responses

200 OK
Orders
GET /v1/orders
POST /v1/orders
PUT /v1/orders
PUT /v1/orders
Get orders
GET /v1/orders

Fetch store orders.

Request parameters

order_id
string optional

Order number for the order you would like to load

from_date_paid
string optional

Fetch paid orders since a specific date. UNIX timestamp should be used here.

Example:
1596097247
from_status_date
string optional

Fetch orders since a specific status transition date. UNIX timestamp should be used here.

Example:
1596097247
status
string optional

Fetch orders with a specific status. Can be used together with from_date_paid parameter.

Examples:
donepaiddone,paidunpaid
apps_load
boolean optional

Optional. Used together with a specific order_id and will return app specific order data (such as productproperties from the order).

Example:
true

Request body

Responses

200 OK

with order_id

Body
Object
order_id
string
Example:
115
date_created
string
Example:
2020-01-01 12:01:45
status_date
string
status
string
Examples:
0 = unpaid1 = paid2 = done-1 = cancelled
items_amount
string
Example:
398.00
shipping_amount
string
Example:
29.00
total_amount
string
Example:
427.00
discount_amount
unknown nullable
total_pay_amount
string
Example:
427.00
tax_amount
string
Example:
85.40
currency
string
Example:
SEK
shipping_name
string
Example:
Postnord
is_taxfree
boolean
products
Array
Object
product_id
string
Example:
34
title
string
Example:
T-shirt
price
string
Example:
199.00
qty
string
Example:
2
variant
unknown nullable
sku
string
Example:
34
customer
Object
email
string
Example:
dummy@email.com
phone
string
Example:
0123456789
customer_type
string
Example:
consumer
company_name
string
full_name
string
Example:
Sven Svensson
address
string
Example:
Vasatorpsvägen 147
address2
string
city
string
Example:
Munka-ljungby
zipcode
string
Example:
266 93
country
string
Example:
Sweden
paymethod
Object
method
string
Example:
klarna
transaction_id
string
Example:
XYZ1234567890
200 OK

(without order_id)

Body
Array
Object
order_id
string
Example:
12345
date_created
string
Example:
2020-07-29 11:35:39
total_amount
string
Example:
148.95
status
string
Example:
1
404 Kunde inte hittas
Single order
New orders, since date

Specific order: 12345, full order information.

GET https://api.quickbutik.com/v1/orders?order_id=12345 HTTP/1.1 

Content-Type: application/json

None specific order, summarized order information (not full).

GET https://api.quickbutik.com/v1/orders?from_date_paid=1596097247&status=1 HTTP/1.1 

Content-Type: application/json
Create orders
POST /v1/orders

Create new order and add order content. Status for new orders will always be set to unpaid (can be updated with Update order status request).

Request body

Array
Object
order_id
string

Must be of value create to create a new order.

Example:
create
customer
payment
shipping
products
products_add
products_remove
discount_add
discount_remove

Responses

200 OK
Body
Object
results
Object
create_1
Object
success
integer
Example:
1
new_order_id
integer
Example:
55213
checkout_url
string
Example:
https://checkout-url-here
Single order - JSON Request
Single order - CURL Request
POST https://api.quickbutik.com/v1/orders HTTP/1.1 

Content-Type: application/json

[
    {
        "order_id": "create",
        "customer": {
            "type": "business",
            "email": "kalle@anka.com",
            "phone_number": "+46123456789",
            "shipping_details": {
                "company_name": "Name AS",
                "firstname": "Kalle",
                "lastname": "Anka Ankesson",
                "address": "Gladagatan 10",
                "address2": "",
                "city": "Ankeborg",
                "zipcode": "12345",
                "country": "SE, DK, NO"
            }
        },
        "shipping": {
            "id": 1,
            "name": "Postnord Parcel Special"
        },
        "products": [
            {
                "sku": "SHIRT-123"
            }
        ]
    }
]
curl -X POST "http://api.quickbutik.com/v1/v1/orders"  \
 -H "Content-Type: application/json"  \
 -d '[
    {
        "order_id": "create",
        "customer": {
            "type": "business",
            "email": "kalle@anka.com",
            "phone_number": "+46123456789",
            "shipping_details": {
                "company_name": "Name AS",
                "firstname": "Kalle",
                "lastname": "Anka Ankesson",
                "address": "Gladagatan 10",
                "address2": "",
                "city": "Ankeborg",
                "zipcode": "12345",
                "country": "SE, DK, NO"
            }
        },
        "shipping": {
            "id": 1,
            "name": "Postnord Parcel Special"
        },
        "products": [
            {
                "sku": "SHIRT-123"
            }
        ]
    }
]'
Update orders
PUT /v1/orders

Update orders and add/modify order content.

Request body

Array
Object
order_id
string

Enter order_id you would like to update with content

Example:
12345
customer
payment
shipping
products
products_add
products_remove
discount_add
discount_remove

Responses

200 OK
Body
Object
results
Object
12345
Object

the updated order_id

order_id
integer
Example:
12345
success
integer
Example:
1
errors
Array of string
Single order - JSON Request
Single order - CURL Request
PUT https://api.quickbutik.com/v1/orders HTTP/1.1 

Content-Type: application/json

[
    {
        "order_id": 12345,
        "customer": {
            "type": "business",
            "email": "kalle@anka.com",
            "phone_number": "+46123456789",
            "shipping_details": {
                "company_name": "Name AS",
                "firstname": "Kalle",
                "lastname": "Anka Ankesson",
                "address": "Gladagatan 10",
                "address2": "",
                "city": "Ankeborg",
                "zipcode": "12345",
                "country": "SE, DK, NO"
            },
            "newsletter_subscribe": "true",
            "login_create": ""
        },
        "payment": {
            "method": "MySaleChannel",
            "transaction_id": ""
        },
        "shipping": {
            "id": 1,
            "name": "Postnord Parcel",
            "price": ""
        },
        "products": [
            {
                "sku": "SHIRT-123",
                "product_id": ""
            }
        ],
        "discount_add": {
            "amount": 100
        }
    }
]

HTTP/1.1 200 OK 

Content-Type: application/json

{
    "results": {
        "12345": {
            "order_id": 55750,
            "success": 1
        }
    }
}
curl -X PUT "http://api.quickbutik.com/v1/v1/orders"  \
 -H "Content-Type: application/json"  \
 -d '[
    {
        "order_id": 12345,
        "customer": {
            "type": "business",
            "email": "kalle@anka.com",
            "phone_number": "+46123456789",
            "shipping_details": {
                "company_name": "Name AS",
                "firstname": "Kalle",
                "lastname": "Anka Ankesson",
                "address": "Gladagatan 10",
                "address2": "",
                "city": "Ankeborg",
                "zipcode": "12345",
                "country": "SE, DK, NO"
            },
            "newsletter_subscribe": "true",
            "login_create": ""
        },
        "payment": {
            "method": "MySaleChannel",
            "transaction_id": ""
        },
        "shipping": {
            "id": 1,
            "name": "Postnord Parcel",
            "price": ""
        },
        "products": [
            {
                "sku": "SHIRT-123",
                "product_id": ""
            }
        ],
        "discount_add": {
            "amount": 100
        }
    }
]'
Update order status
PUT /v1/orders

Change order state (status) for one or more orders.

Request body

Array
Object
order_id
string

Enter order_id you would like to update status on.

Example:
948102
status
string

Changes state of the order.

Examples:
paiddonecancelled
shipping_info
Object

Valfritt: I samband med status done.

trackingnumber
string

Spårningsnummer

Example:
230491712300
company
string

Fraktföretag

Example:
DHL
email_confirmation
string

Valfritt: I samband med status done. Skicka fraktbekräftelse till kund?

Example:
true
skip_email_confirmation
string

Valfritt: I samband med status paid.

Example:
true
skip_webhook
string

Valfritt: I samband med status paid.

language
string

Valfritt: I samband med status paid. Two-letter language code (ISO 639-1).

Examples:
ensvda

Responses

200 OK
Body
Object
results
Object
1111
Object
order_id
integer
Example:
1111
errors
Array
string
Example:
Could not find order
success
string
Example:
0
2222
Object
order_id
integer
Example:
2222
success
string
Example:
1
Mark single order paid: Example 2
Mark single order paid: Example 1
Mark multiple orders paid
Mark multiple orders delivered
Mark multiple orders, different states.

Mark order paid. Order confirmation will be sent to customer.

[
  {
    "order_id": 55750,
    "status": "paid"
  }
]

Mark order paid. Order confirmation will NOT be sent to the customer (use case: if taken care of from the third party system).

[
  {
    "order_id": 55750,
    "status": "paid",
    "email_confirmation": false
  }
]
[
  {
    "order_id": 55750,
    "status": "paid",
    "email_confirmation": false
  },
  {
    "order_id": 55750,
    "status": "paid",
    "email_confirmation": false
  }
]
[
  {
    "order_id": 1111,
    "status": "done"
  },
  {
    "order_id": 2222,
    "status": "done",
    "shipping_info": {
      	"trackingnumber": "NAJ10192938",
      	"company": "Postnord"
    }
  }
]
[
  {
    "order_id": 1111,
    "status": "paid"
  },
  {
    "order_id": 2222,
    "status": "done",
    "shipping_info": {
      	"trackingnumber": "NAJ10192938",
      	"company": "Postnord"
    }
  },
  {
    "order_id": 3333,
    "status": "cancelled"
  }
]
Shippingmethods
GET /v1/shippingmethods
Get shipping methods
GET /v1/shippingmethods

Fetch store shipping methods.

Request parameters

shipping_id
string optional

Optional. Enter if you would like to fetch a specific shipping_id.

Request body

Responses

200 OK
Body
Object
results
Array
Object
id
string
Example:
4
title
string
Example:
Postnord Företag
description
string
active
string
Example:
1
price
unknown nullable
price_basedon
string
Example:
weight
404 Could not be found
400 Bad Request
Paymentmethods
GET /v1/paymentmethods
Get payment methods
GET /v1/paymentmethods

Fetch store payment methods

Request parameters

method_id
string optional

Optional. Enter if you would like to fetch a specific payment method.

Request body

Responses

200 OK
Body
Object
results
Array
Object
method_id
string
Example:
klarna3
customer_type
string
Example:
3
404 Kunde inte hittas
Categories
GET /v1/categories
Get categories
GET /v1/categories

Fetch store categories

Request parameters

category_id
string optional

Optional. Enter if you would like to fetch data from a specific category_id.

Request body

Responses

200 OK
Body
Object
results
Object
category_id
integer
Example:
14
uri
string
Example:
sulor
url
string
Example:
/herr/skor/sulor
name
string
Example:
Sulor
name_path
string
Example:
Herr > Skor > Sulor
description1
unknown nullable
description2
unknown nullable
parent_id
integer

Returns NULL if this category is main

Example:
13
404 Could not be found
Data Objects
Order
order.customer
Object
type
string
Examples:
consumerbusiness
email
string
Example:
kalle@anka.com
phone_number
string
Example:
+46123456789
shipping_details
Object
company_name
string

If customer.type is business, please specify a company_name.

Examples:
Bolaget ABCompany LLCName AS
firstname
string
Example:
Kalle
lastname
string
Example:
Anka Ankesson
address
string
Example:
Gladagatan 10
address2
string
city
string
Example:
Ankeborg
zipcode
string
Example:
12345
country
string

Two-letter country code (ISO 3166-1 alpha-2 format)

Example:
SE, DK, NO
newsletter_subscribe
string
Example:
true
login_create
string
Consumer
Business
{
    "type": "consumer",
    "email": "kalle@anka.com",
    "phone_number": "+46123456789",
    "shipping_details": {
        "firstname": "Kalle",
        "lastname": "Anka Ankesson",
        "address": "Gladagatan 10",
        "address2": "",
        "city": "Ankeborg",
        "zipcode": "12345",
        "country": "SE, DK, NO"
    },
    "newsletter_subscribe": "true",
    "login_create": ""
}
{
    "type": "business",
    "email": "kalle@anka.com",
    "phone_number": "+46123456789",
    "shipping_details": {
        "company_name": "Bolaget AB",
        "firstname": "Kalle",
        "lastname": "Anka Ankesson",
        "address": "Gladagatan 10",
        "address2": "",
        "city": "Ankeborg",
        "zipcode": "12345",
        "country": "SE, DK, NO"
    },
    "newsletter_subscribe": "true",
    "login_create": ""
}
order.payment
Object
method
string

Optional. Enter if purchase is not made in store checkout.

Example:
MySaleChannel
transaction_id
string

Optional. Order reference from the payment method.

currency
string

Must be one of the example values.

Examples:
SEKDKKEURGBPNOKUSD
Payment through Checkout
Payment through External App

Leave as null or dont specify at all.

{
    "method": null,
    "transaction_id": null
}

Specify method and transaction_id for reference.

{
    "method": "MySaleChannel",
    "transaction_id": "ABC-QWERY-123456-1"
}
order.shipping
Object
id
integer

shippingmethod_id (from the /shippingmethods available in the store)

Example:
1
name
string

Shipping method name (optional, uses title from shippingmethod otherwise if id specified)

Examples:
Postnord ParcelDHL Express
price
string

Shipping amount (optional, uses price from shippingmethod otherwise if id specified)

Example 1
{
    "id": 1,
    "name": "Postnord Parcel",
    "price": "49"
}
order.products

Specify products in this order. When used, all other existing products in the order will be removed and be replaced with the ones specified here.

Array

Specify products in this order. When used, all other existing products in the order will be removed and be replaced with the ones specified here.

Object
sku
string

Optional. You can use this parameter, or product_id/variant_id parameters, to identify product.

Example:
SHIRT-123
product_id
string
variant_id
string
Example:
NULL (no variant)
qty
integer

The quantity of this product in the order. Defaults to 1.

Example:
1
With SKU and IDs combined
With SKUs only
With IDs only
[
    {
        "sku": "SHIRT-123"
    },
    {
        "product_id": 10,
        "variant_id": 43
    },
    {
        "product_id": 10,
        "variant_id": null
    }
]

Specify the content of the order through SKUs only.

[
    {
        "sku": "SHIRT-123"
    },
    {
        "sku": "GLASS-456"
    },
    {
        "sku": "TIE-789"
    }
]
[
    {
        "product_id": 10
        "variant_id": 59
    },
    {
        "product_id": 11,
        "variant_id": 60
    },
    {
        "product_id": 329
    }
]
order.products_add

Optional. If you would like to add products from the order. You can pass multiple objects/products into this parameter, to add multiple at once.

Array

Optional. If you would like to add products from the order. You can pass multiple objects/products into this parameter, to add multiple at once.

Object
sku
string

Optional. You can use this parameter, or product_id/variant_id parameters, to identify product.

Example:
SHIRT-123
product_id
string
variant_id
string
Example:
NULL (no variant)
With SKUs and IDs combined
With SKUs only
[
    {
        "sku": "SHIRT-123"
    },
    {
        "product_id": 10,
        "variant_id": 43
    },
    {
        "product_id": 10,
        "variant_id": null
    }
]
[
    {
        "sku": "SHIRT-123"
    },
    {
        "sku": "GLASS-456"
    },
    {
        "sku": "TIE-789"
    }
]
order.products_remove

Optional. If you would like to remove products from the order. You can pass multiple objects/products into this parameter, to remove multiple at once.

Array

Optional. If you would like to remove products from the order. You can pass multiple objects/products into this parameter, to remove multiple at once.

Object
sku
string

Optional. You can use this parameter, or product_id/variant_id parameters, to identify product.

Example:
SHIRT-123
product_id
string
variant_id
string
Example:
NULL (no variant)
With SKUs and IDs combined
With SKUs only
[
    {
        "sku": "SHIRT-123"
    },
    {
        "product_id": 10,
        "variant_id": 43
    },
    {
        "product_id": 10,
        "variant_id": null
    }
]
[
    {
        "sku": "SHIRT-123"
    },
    {
        "sku": "GLASS-456"
    },
    {
        "sku": "TIE-789"
    }
]
order.discount_add

Optional. Set only if you would like to add a discount for this order.

Object

Optional. Set only if you would like to add a discount for this order.

amount
number

Valfritt. Ange rabattvärde.

Example 1

Specify if you would like to add a discount value on the order.

{
    "amount": 100
}
order.discount_remove

Optional. Set only if you would like to add a discount for this order.

boolean

Optional. Set only if you would like to add a discount for this order.

Example 2

Boolean (true) if you would like to remove the current discount added for the order.

true
Webhooks
Introduction

Webhooks can be activated by the store owner in Quickbutiks control panel.

A webhook can be seen as a technical notice or “pling” that tells a third party that a certain event has occurred. It can be a new incoming order or something else. We call this an event Event and Events can send Webhooks (notice of an event) to one / several specified urls.

All Events are sent with GET parameters, always consisting of at least event_type which tells what the event is.

Webhooks are most often used together with the API to obtain the necessary additional information.

Example

  • Webhook with Event order.new is received in your system. With that, you get the order number that then can be used to load the complete order via the API to process/handle it further.
Events

Available Events:

order

  • event_type: order.new

New order (paid). Sent with parameter order_id.

  • event_type: order.done

Order marked as done (sent). Sent with parameter order_id.

  • event_type: order.cancelled

Order marked as cancelled. Sent with parameter order_id.

product

  • event_type: product.add

Product added. Sent with parameter product_id.

  • event_type: product.update

Product updated. Sent with parameter product_id.

  • event_type: product.delete

Product deleted. Sent with parameter product_id.

Change log

This section lists all changes to the webhooks by date.

2020-10-07

  • Added event for product.delete

2020-09-09

  • Added events for product.add and product.update