NAV
shell

Introduction

The API is organized around REST. Our API has predictable resource-oriented URLs, accepts form-encoded request bodies, returns JSON-encoded responses, and uses standard HTTP response codes, authentication, and verbs.

To use the API in test mode, use your assigned test server. If you do not have a known test server then send us an email at support@spp.cloud

Authentication

To authorize, pass your API key as a Bearer token:

# With shell, you can just pass the correct header with each request
curl https://{server}/api/v1/accounts/ -H "Authorization: Bearer {api-key}"

Replace {api-key} with your API key & {server} with your server.

API keys are required to access the API. You can register a new API key at your portal, admin access required to register new API keys.

Authentication is performed by passing the API key as a Bearer token in the Authorization header.

Authorization: Bearer {API-key}

The API key must be in the format prefix.owner.secret. The system will validate the key and grant access to the resources owned by the key's owner.

Lists

Each list request in the system can be paginated, sorted, and filtered using QueryString parameters.

Pagination

Each list can be paginated using the two parameters offset and limit.

Get all results from index 10 to 20

curl "/api/v1/accounts/?offset=11&limit=20" \
  -H "Authorization: Bearer {api-key}"

The parameter offset indicates where, in the result-set, to begin return items. The parameter limit indicates the upper limit of items, that should be returned, in one request.

Sorting

Sort by name in ascending order

curl "/api/v1/accounts/?sort=name" \
  -H "Authorization: Bearer {api-key}"

Sort by name in ascending order and by postal code in descending order

curl "/api/v1/accounts/?sort=name,-postal" \
  -H "Authorization: Bearer {api-key}"

Sorting is a powerful way to get the most relevant data based on a sort-order expression. Each property of a result-set is a potential candidate for sorting. There are two prefixes that determines the sort-order, "+" and "-". The "+" and "-" represents ascend and descend. It is also possible to combine multiple sorting-expression with , in order to refine the result even further.

Filtering

The system has a built-in filtering protocol, that can be used to filter list result-sets into smaller pieces.

Filtering accounts by name using operator -and-

curl "/api/v1/accounts/?filter=$like(name,'%customer%')" \
  -H "Authorization: Bearer {api-key}"

There are two kind of operators: -and- and -or-.

Filter all Accounts containing "customer" in their name

curl "/api/v1/accounts/?filter=$like(name,'%customer%')" \
  -H "Authorization: Bearer {api-key}"

Several helper-functions are provided in order to make it easier to drilldown a result.

Filter all Orders belonging to a specific customer

curl "/api/v1/orders/?filter=$eq(customer_id,'test-account-001')" \
  -H "Authorization: Bearer {api-key}"
Function Description
$date_add(date,amount,unit) Adds amount of unit to date
$date_now() Returns current date
$eq(prop,value) Test a property against a value exactly
$gt(prop,value) Test a property against greater-then
$gteq(prop,value) Test a property against greater-then or equal to
$like(prop,value) Test a property against a value likely
$lt(prop,value) Test a property against less-then
$in(prop,value) Test an array property against a value
$lteq(prop,value) Test a property against less-than or equal to
$neq(prop,value) Test a property against a value not equal to

Accounts

Endpoints

GET /api/v1/accounts/
GET /api/v1/accounts/:id/
PATCH /api/v1/accounts/:id/

Account represents a company with a direct or indirect relation. Accounts are usually created as result of an order.

The Account Object

Attribute Type Description
id string Unique Identifier
name string Company Name
account_type string Account Type
account_manager_name string Name of Account Manager
address_line1 string Address row 1
address_line2 string Address row 2
address_line3 string Address row 3
city string City address
zip_code string Zip / postal code
state_province_code string State / Province code
country string Country name
country_code string 2-Letter Country Code
vat_number string VAT registration number
company_number string Company registration number
private boolean Whether the account is private
seats integer Number of seats
primary_contact_email string Email of primary contact
validity_status string Validity status of the account
verified boolean Whether the account has been verified
verified_at string Date Time when account was verified
local_name string Native Company Name
last_updated string Date Time when object was last changed.

List Accounts

List Accounts

curl "https://{server}/api/v1/accounts/" \
  -H "Authorization: Bearer {api-key}"

The above command returns JSON structured like this:

{
    "count": 1,
    "items": [
        {
            "id": "test-account-001",
            "name": "Test Company AB",
            "account_type": "END_CUSTOMER",
            "account_manager_name": null,
            "address_line1": "Testgatan 1",
            "address_line2": null,
            "address_line3": null,
            "city": "Stockholm",
            "zip_code": "111 22",
            "state_province_code": null,
            "country": "Sweden",
            "country_code": "SE",
            "vat_number": "SE556677889901",
            "company_number": null,
            "private": false,
            "seats": 5,
            "primary_contact_email": "test@example.com",
            "validity_status": "VERIFIED",
            "verified": true,
            "verified_at": "2025-01-15T10:00:00.000Z",
            "local_name": null,
            "last_updated": "2025-01-15T10:00:00.000Z"
        }
    ]
}

This endpoint retrieves all accounts.

HTTP Request

GET /api/v1/accounts/

Query Parameters

Parameter Default Description
offset 0 After filter and sort, how many records should be skipped
limit 25 After filter, sort and offset how many records should be returned.
sort - Specify an optional sorting
filter - Specify an optional filter

Retrieve an Account

Get an account based on ID

curl "https://{server}/api/v1/accounts/test-account-001/" \
  -H "Authorization: Bearer {api-key}"

The above command returns JSON structured like this:

{
    "id": "test-account-001",
    "name": "Test Company AB",
    "account_type": "END_CUSTOMER",
    "account_manager_name": null,
    "address_line1": "Testgatan 1",
    "address_line2": null,
    "address_line3": null,
    "city": "Stockholm",
    "zip_code": "111 22",
    "state_province_code": null,
    "country": "Sweden",
    "country_code": "SE",
    "vat_number": "SE556677889901",
    "company_number": null,
    "private": false,
    "seats": 5,
    "primary_contact_email": "test@example.com",
    "validity_status": "VERIFIED",
    "verified": true,
    "verified_at": "2025-01-15T10:00:00.000Z",
    "local_name": null,
    "last_updated": "2025-01-15T10:00:00.000Z"
}

This endpoint retrieves a specific account.

HTTP Request

GET /api/v1/accounts/:id/

URL Parameters

Parameter Description
id The ID of the account to retrieve

Update an Account

Patch an Account

curl "https://{server}/api/v1/accounts/test-account-001/" \
  -X PATCH \
  -H "Authorization: Bearer {api-key}" \
  -H "Content-Type: application/json" \
  -d '{"name":"Updated Company AB", "address_line1":"New Street 5", "city":"Gothenburg", "zip_code":"411 00", "country_code":"SE"}'

The above command returns HTTP 200 with body:

"OK"

This endpoint updates a specific account. At least one of the following fields must be provided.

HTTP Request

PATCH /api/v1/accounts/:id/

Body Parameters

Parameter Type Description
vat_number string VAT registration number (1-35 characters)
company_number string Company registration number (1-35 characters)
name string Company name (1-50 characters)
address_line1 string Address row 1 (1-50 characters)
address_line2 string Address row 2 (1-50 characters)
address_line3 string Address row 3 (1-50 characters)
city string City (1-35 characters)
zip_code string Zip / postal code (1-35 characters)
state_province_code string State / Province code (1-35 characters)
country_code string 2-Letter Country Code
validity_status string Validity status (1-35 characters)

Assets

Endpoints

GET /api/v1/assets/
GET /api/v1/assets/:id/

Asset represents a licensed product key or subscription. Assets contain information about the product, its validity period, contact information, and related SKUs for renewal or upgrade.

The Asset Object

Attribute Type Description
id string Unique Identifier
activation_key string Activation key for the asset
account_id string ID of associated account
contact_email string Email of the contact
contact_first_name string Contact first name
contact_last_name string Contact last name
end_date string End date of the asset
entry_date string Entry date of the asset
expiry_date string Expiry date of the asset
expiry_mode string Expiry mode (e.g. Permanent)
last_updated string Date Time when object was last changed
organization_text string Name of the associated organisation
order_date string Date the asset was ordered
order_id string ID of the associated order
product_line string Product line identifier
product_type string Product type (e.g. Maintenance, Subscription)
reengage_price object Re-engage Price object, may be null
reengage_sku string SKU for re-engage, may be null
renewal_sku string SKU for renewal
renewal_sku_3y string SKU for 3-year renewal
seats integer Number of seats
start_date string Start date of the asset
status string Status of the asset (e.g. ACTIVE, EXPIRED)
term integer Length of term in months
unit_price object Unit Price object, may be null
upgrade_sku string SKU for upgrade, may be null
user_code string User code (e.g. Single user)
version integer Product version

List Assets

List Assets

curl "https://{server}/api/v1/assets/" \
  -H "Authorization: Bearer {api-key}"

The above command returns JSON structured like this:

{
    "count": 1,
    "items": [
        {
            "id": "1234-5678-0024-900001-0001",
            "activation_key": "1234-5678-0024-900001-0001",
            "account_id": null,
            "contact_email": "test@example.com",
            "contact_first_name": "Test",
            "contact_last_name": "User",
            "end_date": "2026-07-08",
            "entry_date": "2025-07-09",
            "expiry_date": "",
            "expiry_mode": "Permanent",
            "last_updated": "2025-06-27T13:17:25.365Z",
            "organization_text": "Test Company AB",
            "order_date": null,
            "order_id": null,
            "product_line": "BRICSCAD_PRO",
            "product_type": "Maintenance",
            "reengage_price": null,
            "reengage_sku": null,
            "renewal_sku": "PRO-SU-MNT-REN-NA-1Y",
            "renewal_sku_3y": "PRO-SU-MNT-REN-NA-3Y",
            "seats": 1,
            "start_date": "2025-07-09",
            "status": "ACTIVE",
            "term": 12,
            "unit_price": null,
            "upgrade_sku": null,
            "user_code": "Single user",
            "version": 25
        }
    ]
}

This endpoint retrieves all assets.

HTTP Request

GET /api/v1/assets/

Query Parameters

Parameter Default Description
offset 0 After filter and sort, how many records should be skipped
limit 25 After filter, sort and offset how many records should be returned.
sort - Specify an optional sorting
filter - Specify an optional filter

Retrieve an Asset

Get an asset based on ID

curl "https://{server}/api/v1/assets/1234-5678-0024-900001-0001/" \
  -H "Authorization: Bearer {api-key}"

The above command returns JSON structured like this:

{
    "id": "1234-5678-0024-900001-0001",
    "activation_key": "1234-5678-0024-900001-0001",
    "account_id": null,
    "contact_email": "test@example.com",
    "contact_first_name": "Test",
    "contact_last_name": "User",
    "end_date": "2026-07-08",
    "entry_date": "2025-07-09",
    "expiry_date": "",
    "expiry_mode": "Permanent",
    "last_updated": "2025-06-27T13:17:25.365Z",
    "organization_text": "Test Company AB",
    "order_date": null,
    "order_id": null,
    "product_line": "BRICSCAD_PRO",
    "product_type": "Maintenance",
    "reengage_price": null,
    "reengage_sku": null,
    "renewal_sku": "PRO-SU-MNT-REN-NA-1Y",
    "renewal_sku_3y": "PRO-SU-MNT-REN-NA-3Y",
    "seats": 1,
    "start_date": "2025-07-09",
    "status": "ACTIVE",
    "term": 12,
    "unit_price": null,
    "upgrade_sku": null,
    "user_code": "Single user",
    "version": 25
}

This endpoint retrieves a specific asset.

HTTP Request

GET /api/v1/assets/:id/

URL Parameters

Parameter Description
id The ID of the asset to retrieve

Contacts

Endpoints

GET /api/v1/contacts/
GET /api/v1/contacts/:id/

Contact represents a person associated with an account, such as the primary contact or administrator.

The Contact Object

Attribute Type Description
id string Unique Identifier (same as email)
email string Email address
bricsys_id string Bricsys ID
first_name string First Name
last_name string Last Name
job_title string Job title
company_phone string Company phone number
direct_phone string Direct phone number
organization_text string Name of associated organisation
account_id string ID of associated account
account_name string Name of associated account
country string Country name
country_code string 2-Letter Country Code
state string State / Province
postal_code string Postal number / zip code
language string Operating language
status string Contact status (e.g. ACTIVE)
seats integer Number of seats
last_updated string Date Time when object was last changed

List Contacts

List Contacts

curl "https://{server}/api/v1/contacts/" \
  -H "Authorization: Bearer {api-key}"

The above command returns JSON structured like this:

{
    "count": 1,
    "items": [
        {
            "id": "test@example.com",
            "email": "test@example.com",
            "bricsys_id": "9900001",
            "first_name": "Test",
            "last_name": "User",
            "job_title": "Engineer",
            "company_phone": "+46701234567",
            "direct_phone": null,
            "organization_text": "Test Company AB",
            "account_id": "test-account-001",
            "account_name": "Test Company AB",
            "country": "Sweden",
            "country_code": "SE",
            "state": "",
            "postal_code": "11122",
            "language": "English",
            "status": "ACTIVE",
            "seats": 2,
            "last_updated": "2025-01-15T10:00:00.000Z"
        }
    ]
}

This endpoint retrieves all contacts.

HTTP Request

GET /api/v1/contacts/

Query Parameters

Parameter Default Description
offset 0 After filter & sort, how many records should be skipped
limit 25 After filter, sort & offset how many records should be returned.
sort - Specify an optional sorting
filter - Specify an optional filter

Retrieve a Contact

Get specific Contact with id test@example.com

curl "https://{server}/api/v1/contacts/test@example.com/" \
  -H "Authorization: Bearer {api-key}"

The above command returns JSON structured like this:

{
    "id": "test@example.com",
    "email": "test@example.com",
    "bricsys_id": "9900001",
    "first_name": "Test",
    "last_name": "User",
    "job_title": "Engineer",
    "company_phone": "+46701234567",
    "direct_phone": null,
    "organization_text": "Test Company AB",
    "account_id": "test-account-001",
    "account_name": "Test Company AB",
    "country": "Sweden",
    "country_code": "SE",
    "state": "",
    "postal_code": "11122",
    "language": "English",
    "status": "ACTIVE",
    "seats": 2,
    "last_updated": "2025-01-15T10:00:00.000Z"
}

This endpoint retrieves a specific contact.

HTTP Request

GET /api/v1/contacts/:id/

URL Parameters

Parameter Description
id The ID of the contact to retrieve

Articles

Endpoints

GET /api/v1/articles/
GET /api/v1/articles/:id/
GET /api/v1/articles/?q={search}&limit={limit}

Article represents something that can be ordered (SKU / Item). An article comes with fields that describe the product, pricing, and how it can be used for transactions.

The Article Object

Attribute Type Description
id string Unique Identifier (SKU)
description string Description of Article
product_line string Product line identifier
product_type string Product type
product_group string Product group
user_code string User code (e.g. Single user)
coming_from string Source article, may be null
crossgrade string Crossgrade article, may be null
term integer Length of term in months
discount number Discount rate (e.g. 0.32 for 32%)
srp_price object Suggested Retail Price object
pur_price object Purchase Price object
last_updated string Date Time when object was last changed.

List Articles

List Articles

curl "https://{server}/api/v1/articles/" \
  -H "Authorization: Bearer {api-key}"

The above command returns JSON structured like this:

{
    "count": 1,
    "items": [
        {
            "id": "PRO-SU-MNT-REN-NA-1Y",
            "description": "BricsCAD Pro - Single User Annual Maintenance Renewal",
            "product_line": "BRICSCAD_PRO",
            "product_type": "MAINTENANCE",
            "product_group": "RENEWAL",
            "user_code": "Single user",
            "coming_from": null,
            "crossgrade": null,
            "term": 12,
            "discount": 0.32,
            "srp_price": {
                "eur": 253,
                "usd": 266,
                "gbp": 226
            },
            "pur_price": {
                "eur": 172.04,
                "usd": 180.88,
                "gbp": 153.68
            },
            "last_updated": "2025-09-08T11:04:03.307Z"
        }
    ]
}

This endpoint retrieves all articles.

HTTP Request

GET /api/v1/articles/

Query Parameters

Parameter Default Description
offset 0 After filter & sort, how many records should be skipped
limit 25 After filter, sort & offset how many records should be returned.
sort - Specify an optional sorting
filter - Specify an optional filter

Search Articles

Search Articles by query string

curl "https://{server}/api/v1/articles/?q=BricsCAD&limit=10" \
  -H "Authorization: Bearer {api-key}"

The above command returns JSON structured like this:

{
    "count": 1,
    "items": [
        {
            "id": "PRO-SU-MNT-REN-NA-1Y",
            "description": "BricsCAD Pro - Single User Annual Maintenance Renewal",
            "product_line": "BRICSCAD_PRO",
            "product_type": "MAINTENANCE",
            "product_group": "RENEWAL",
            "user_code": "Single user",
            "coming_from": null,
            "crossgrade": null,
            "term": 12,
            "discount": 0.32,
            "srp_price": {
                "eur": 253,
                "usd": 266,
                "gbp": 226
            },
            "pur_price": {
                "eur": 172.04,
                "usd": 180.88,
                "gbp": 153.68
            },
            "last_updated": "2025-09-08T11:04:03.307Z"
        }
    ]
}

This endpoint searches articles by a text query.

HTTP Request

GET /api/v1/articles/?q={search}

Query Parameters

Parameter Default Description
q - Search query string
limit 50 Maximum number of results to return
filter - Specify an optional filter

Retrieve an Article

Get an Article based on SKU

curl "https://{server}/api/v1/articles/PRO-SU-MNT-REN-NA-1Y/" \
  -H "Authorization: Bearer {api-key}"

The above command returns JSON structured like this:

{
    "id": "PRO-SU-MNT-REN-NA-1Y",
    "description": "BricsCAD Pro - Single User Annual Maintenance Renewal",
    "product_line": "BRICSCAD_PRO",
    "product_type": "MAINTENANCE",
    "product_group": "RENEWAL",
    "user_code": "Single user",
    "coming_from": null,
    "crossgrade": null,
    "term": 12,
    "discount": 0.32,
    "srp_price": {
        "eur": 253,
        "usd": 266,
        "gbp": 226
    },
    "pur_price": {
        "eur": 172.04,
        "usd": 180.88,
        "gbp": 153.68
    },
    "last_updated": "2025-09-08T11:04:03.307Z"
}

This endpoint retrieves a specific article.

HTTP Request

GET /api/v1/articles/:id/

URL Parameters

Parameter Description
id The ID (SKU) of the article to retrieve

Orders

Endpoints

GET /api/v1/orders/
GET /api/v1/orders/:id/
POST /api/v1/orders/
PATCH /api/v1/orders/:id/

Orders represent transactions placed through the system. Orders can be created, listed, retrieved, and their status can be updated.

The Order Object

Attribute Type Description
id string Unique Identifier
creation_date string Date when order was created
order_type string Order type (e.g. standard)
reseller_id string Reseller ID
reseller_name string Name of Reseller
customer_id string Customer account ID
customer_name string Name of the customer
customer_address_line1 string Address Line 1 of customer
customer_address_line2 string Address Line 2 of customer
customer_address_line3 string Address Line 3 of customer
customer_city string City of customer
customer_postal string Postal code of customer
customer_country string Country of customer
customer_country_code string 2-Letter Country Code of customer
customer_state string State / Province of customer
currency string Currency of the order (e.g. eur)
contact_bricsys_id string Bricsys ID of the contact
contact_first_name string First name of the contact
contact_last_name string Last name of the contact
contact_email string Email of the contact
user_id string User ID that created the order
contact_country_code string 2-Letter Country Code of the contact
quantity integer Total number of items in order
items array Array of Order Items
delivery_date string Delivery Date for the order
reference_number string Reference order number
status string Order status (e.g. CREATED, PROCESSED, REJECTED)
srp_total number Total SRP price
pur_total number Total purchase price
last_updated string Date Time when object was last changed

Order Items

Attribute Type Description
action string Order action: NEW, RENEWAL, or UPDATE
sku string SKU of the Article being ordered
description string Description of the article
quantity integer Number of items
term integer Length of term in months
srp_price number SRP price per item
discount number Discount rate
pur_price number Purchase price per item
start_date string Start date for the item
end_date string End date for the item
activation_key string Short activation key, may be null
activation_key_full string Full activation key, may be null

List Orders

List Orders

curl "https://{server}/api/v1/orders/" \
  -H "Authorization: Bearer {api-key}"

The above command returns JSON structured like this:

{
    "count": 1,
    "items": [
        {
            "id": "90000000001",
            "creation_date": "2025-06-28",
            "order_type": "standard",
            "reseller_id": "1218",
            "reseller_name": "Test Reseller AB",
            "customer_id": "test-customer-001",
            "customer_name": "Test Customer Corp",
            "customer_address_line1": "123 Test Street",
            "customer_address_line2": null,
            "customer_address_line3": null,
            "customer_city": "Stockholm",
            "customer_postal": "11122",
            "customer_country": "Sweden",
            "customer_country_code": "SE",
            "customer_state": null,
            "currency": "eur",
            "contact_bricsys_id": "9000001",
            "contact_first_name": "Anna",
            "contact_last_name": "Testsson",
            "contact_email": "anna@testcustomer.se",
            "user_id": "test@proxydev.se",
            "contact_country_code": "SE",
            "quantity": 2,
            "items": [
                {
                    "action": "NEW",
                    "sku": "PRO-SU-SUB-NEW-NA-1Y",
                    "description": "BricsCAD Pro - Single User Annual Subscription New",
                    "quantity": 1,
                    "end_date": "2026-06-27",
                    "activation_key": null,
                    "activation_key_full": null,
                    "start_date": "2025-06-28",
                    "srp_price": 780,
                    "discount": 0.32,
                    "pur_price": 530.40,
                    "term": 12
                }
            ],
            "delivery_date": "2025-06-28",
            "reference_number": "TEST-ORDER-001",
            "status": "CREATED",
            "srp_total": 1560,
            "pur_total": 1060.80,
            "last_updated": "2025-06-28T10:00:00.000Z"
        }
    ]
}

This endpoint retrieves all orders.

HTTP Request

GET /api/v1/orders/

Query Parameters

Parameter Default Description
offset 0 After filter and sort, how many records should be skipped
limit 25 After filter, sort and offset how many records should be returned.
sort - Specify an optional sorting
filter - Specify an optional filter

Retrieve an Order

Get an order based on ID

curl "https://{server}/api/v1/orders/90000000001/" \
  -H "Authorization: Bearer {api-key}"

The above command returns JSON structured like this:

{
    "id": "90000000001",
    "creation_date": "2025-06-28",
    "order_type": "standard",
    "reseller_id": "1218",
    "reseller_name": "Test Reseller AB",
    "customer_id": "test-customer-001",
    "customer_name": "Test Customer Corp",
    "customer_address_line1": "123 Test Street",
    "customer_address_line2": null,
    "customer_address_line3": null,
    "customer_city": "Stockholm",
    "customer_postal": "11122",
    "customer_country": "Sweden",
    "customer_country_code": "SE",
    "customer_state": null,
    "currency": "eur",
    "contact_bricsys_id": "9000001",
    "contact_first_name": "Anna",
    "contact_last_name": "Testsson",
    "contact_email": "anna@testcustomer.se",
    "user_id": "test@proxydev.se",
    "contact_country_code": "SE",
    "quantity": 2,
    "items": [
        {
            "action": "NEW",
            "sku": "PRO-SU-SUB-NEW-NA-1Y",
            "description": "BricsCAD Pro - Single User Annual Subscription New",
            "quantity": 1,
            "end_date": "2026-06-27",
            "activation_key": null,
            "activation_key_full": null,
            "start_date": "2025-06-28",
            "srp_price": 780,
            "discount": 0.32,
            "pur_price": 530.40,
            "term": 12
        }
    ],
    "delivery_date": "2025-06-28",
    "reference_number": "TEST-ORDER-001",
    "status": "CREATED",
    "srp_total": 1560,
    "pur_total": 1060.80,
    "last_updated": "2025-06-28T10:00:00.000Z"
}

This endpoint retrieves a specific order.

HTTP Request

GET /api/v1/orders/:id/

URL Parameters

Parameter Description
id The ID of the order to retrieve

Create an Order

Create a new order

curl -X POST "https://{server}/api/v1/orders/" \
  -H "Authorization: Bearer {api-key}" \
  -H "Content-Type: application/json" \
  -d '{
    "currency": "eur",
    "delivery_date": "2025-06-28",
    "reference_number": "MY-ORDER-001",
    "customer_id": "test-account-001",
    "contact_email": "test@example.com",
    "items": [
        {
            "action": "NEW",
            "sku": "PRO-SU-SUB-NEW-NA-1Y",
            "quantity": 1
        }
    ]
}'

The above command returns HTTP 200 with body:

"OK"

This endpoint creates a new order. The system resolves customer and contact details from the provided IDs, looks up article pricing, and calculates start/end dates based on the article term.

HTTP Request

POST /api/v1/orders/

Order Payload

Attribute Type Description
currency string Currency code for the order (e.g. eur, usd, gbp)
delivery_date string optional Delivery date (defaults to today)
reference_number string optional Your reference order number
customer_id string optional ID of existing customer account. If not provided, use company_name, city, zip_code, country, country_code
company_name string optional Customer company name (when not using customer_id)
customer_address_line1 string optional Address line 1
customer_address_line2 string optional Address line 2
customer_address_line3 string optional Address line 3
city string optional Customer city (when not using customer_id)
zip_code string optional Customer postal code (when not using customer_id)
country string optional Customer country (when not using customer_id)
country_code string optional Customer country code (when not using customer_id)
state_province_code string optional State / Province code
contact_email string Contact email. If the email matches an existing contact, their details will be used automatically
contact_first_name string optional Contact first name (used if contact doesn't already exist)
contact_last_name string optional Contact last name (used if contact doesn't already exist)
contact_country_code string optional Contact country code
items array Array of Order Items

Create Order Items

Attribute Type Description
action string Order action: NEW, RENEWAL, or UPDATE
sku string SKU of the Article to order (for NEW and UPDATE actions)
quantity integer Number of items to order
activation_key string Full activation key (required for RENEWAL and UPDATE actions)
start_date string optional Start date (defaults to today, max 30 days in the future). Only for NEW and UPDATE
term integer optional Term in months. For RENEWAL, use 36 for 3-year renewal SKU (defaults to 1-year)

Update Order Status

Patch an Order status

curl "https://{server}/api/v1/orders/90000000001/" \
  -X PATCH \
  -H "Authorization: Bearer {api-key}" \
  -H "Content-Type: application/json" \
  -d '{"status": "PROCESSED"}'

The above command returns JSON structured like this:

{
    "status": "ok"
}

This endpoint updates the status of an existing order.

HTTP Request

PATCH /api/v1/orders/:id/

URL Parameters

Parameter Description
id The ID of the order to update

Body Parameters

Parameter Type Description
status string New order status. Must be a valid status value.

Price Object

Price objects are consistently represented with this object when it is attached with a non-financial document. A financial object is denoted in one currency while other objects support several currencies. The currencies listed in price object depends on your solution setup. Each currency defined in solution setup is represented as a three-letter ISO currency code, in lowercase

Price Object Example

{
    "dkk": 15400,
    "eur": 1855,
    "gbp": 1855,
    "nok": 23200,
    "sek": 23000,
    "usd": 1855
}
Attribute Type Description
cur number Amount in currency

Errors

API uses conventional HTTP response codes to indicate the success or failure of an API request. In general: Codes in the 2xx range indicate success. Codes in the 4xx range indicate an error that failed given the information provided (e.g., a required parameter was omitted, a charge failed, etc.). Codes in the 5xx range indicate an error server side.

The API uses the following HTTP Status codes:

Code Description
200 - OK Everything worked as expected.
400 - Bad Request The request was unacceptable, often due to missing a required parameter.
401 - Unauthorized Your authentication is invalid or expired.
403 - Forbidden The API key doesn't have permissions to perform the request.
404 - Not Found The requested resource doesn't exist.
405 - Method Not Allowed Target resource doesn't support this method.
500, 502, 503, 504 - Server Errors Something went wrong on our end, feel free to contact us.