About API

SolEx B2B platform API has been designed for developers who want to automate data flow between systems and optimize sales processes. Its functionalities make it possible to:

  • Automatically place orders – directly from external systems such as online stores, ERP systems, or custom applications. The end user doesn't need to enter data manually; orders can be sent directly to the B2B platform.
  • Use the B2B platform as a product database – enabling real-time access to up-to-date information on availability, pricing, descriptions, and product images. This significantly simplifies product offer management across other sales channels, such as online stores.
  • Create custom integrations – the API offers flexibility that allows the development of tailor-made solutions suited to specific business needs. For example, the B2B platform can be integrated with CRM systems, marketing automation tools, or internal analytics solutions.

As a result, full integration of the sales environment becomes possible - without the need to manually transfer data - while ensuring information consistency across the entire ecosystem.

Detailed API reference is available on https://[your-platform-address]/swagger/ui/index

BASE URL
https://[your-platform-address]

Authentication

This endpoint is used to authenticate a client and retrieve a temporary token for further API access. Authentication is based on a combination of the client's API key, current timestamp, and client identifier hashed using the MD5 algorithm.

Since the hash is generated based on the current timestamp, it must be regenerated when refreshing the token.

Usage Notes
  • First you have to generate MD5 hash.
  • Ensure the API key is converted to uppercase before generating the hash.
  • The timestamp must match exactly the format YYYY-MM-DD HH:MM:SS and reflect the current UTC time.
  • The token returned should be included in the Authorization header for all subsequent requests as "Authorization": "Bearer " + token so API can identify you.
You can find example of hash generating under address below:
https://[your-platform-address]/static/ApiExamples/GettingToken.html

Response parameters:

Parameter Value Description Data Type
AccessToken string Token to use in further API methods string
TokenType string Token type string
ExpiresIn integer Token expiration time in seconds int
POST /api3/token
// Generate necessary data for example in JavaScript:
const apiKey = "AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAA"; // User's API key
const timestamp = new Date().toISOString().slice(0, 19).replace('T', ' '); // Date Format: YYYY-MM-DD HH:MM:SS
const clientId = 10; // Example client number associated with API Key
const rawString = `${upperApiKey}${timestamp}${clientId}`; // Merge necessary data into one string
const hash = CryptoJS.MD5(rawString).toString(); // Generate MD5 hash

const requestData = {
    Hash: hash,
    ClientId: clientId,
    Timestamp: timestamp
};
console.log(requestData);

// We can now use generated data to prepare a cURL request

curl -X POST "https://[your-platform-address]/api3/token" ^
     -H "Content-Type: application/json" ^
     -d "@body.json"
File: body.json
{ 
    "Hash": "8fcf8e0609e5107142dd4df279ce04a2", 
    "ClientId": "10", 
    "Timestamp": "2025-08-05 08:31:05" 
}
API response example
{
    "AccessToken": "12345678-abcd-1234-abcd-1234abcd5678",
    "TokenType": "bearer",
    "ExpiresIn": 3600
}

PRODUCTS

Searching products GET

This method allows you to search and filter products based on a variety of parameters. You can narrow down the results using keywords, specific field filters, product IDs, SKUs, EANs, categories, and more. The response contains a paginated list of products with configurable fields, pricing, availability, attributes, and media data.

Use this method to retrieve a filtered list of products from the catalog. You can specify which fields to return, apply search conditions, define sorting rules, and limit results by product IDs, SKUs, EANs, or categories.

Request parameters avaiable to use in request:
field, optionsId, categoryId, where, preset, orderBy, order, productsId, productsSku, productsEan, modificationTimestamp

You can find detailed information about each of them below.

Request parameters:

Response parameters:

GET /api3/product/findProduct
curl -X GET "https://[your-platform-address]/api3/product/findProduct?field=Ean%2CName&optionsId=1&productsId=12%2C13" ^
     -H "Authorization: Bearer 12345678-abcd-1234-abcd-1234abcd5678"
API response example
{
  "Count": 2,
  "PageSize": 2147483647,
  "PageNumber": 1,
  "HasMore": false,
  "CollectionType": "Product",
  "Items": [
    {
      "Id": 12,
      "Name": "Example product 1",
      "Ean": "1234567890123"
    },
    {
      "Id": 13,
      "Name": "Example product 2",
      "Ean": "3210987654321"
    }
  ]
}

CLIENT ADDRESSES

Get client address GET

You can retrieve a complete list of addresses that are currently assigned to your client account. This functionality allows you to review all stored delivery locations associated with your profile in one place, ensuring that you have full visibility over your saved contact details.

These addresses are not just for reference – they can be seamlessly reused in a variety of subsequent operations within the platform, such as placing a new order or specifying a delivery location without the need to enter the same information repeatedly.

Response parameters:

GET /api3/address/clientAddress cURL example
curl -X GET "https://[your-platform-address]/api3/address/clientAddress" ^ 
     -H "Authorization: Bearer 12345678-abcd-1234-abcd-1234abcd5678"
     
API response example
{
  "Items": [
    {
      "Id": "452000000000",
      "Country": "Polska",
      "Region": "śląskie",
      "Name": "John Smith",
      "Street": "Maple Street",
      "City": "New York",
      "PostalCode": "10-001",
      "Phone": "600123321",
      "CountryId": 1,
      "RegionId": 1,
      "Email": "john.smith@example.com",
      "ApartmentNumber": "12B",
      "HouseNumber": "120",
      "TaxNumber": null,
      "OneTimeAdress": false
    }
  ]
}

Add new address

This method is used to add a new address to the customer's account. This is a shipping addresses required in the ordering process. The response typically returns a unique identifier of the newly created address for future reference.

Structure of object:

Field Type Required/Validated Description
Name string Yes (regex validation) Full name of the recipient.
Street string Yes (regex validation) Street name.
City string Yes (regex validation) City name.
PostalCode string No (regex validation) Postal code (e.g., "10-001").
Phone string No (regex validation) Contact phone number.
CountryId integer Yes Country identifier.
RegionId integer No Region/province identifier.
Email string No (regex validation) Contact email address.
HouseNumber string No (regex validation) House number.
ApartmentNumber string No (regex validation) Apartment number.
TaxNumber string No (regex validation) Tax Identification Number (NIP/VAT ID).
OneTimeAdress boolean No Set to true for one-time addresses. Default false.
Temporary address deleted after ERP synchronization.
POST /api3/address/clientAddress
curl -X POST "https://[your-platform-address]/api3/address/clientAddress" ^
     -H "Authorization: Bearer 12345678-abcd-1234-abcd-1234abcd5678" ^
     -H "Content-Type: application/json" ^
     -d "@body.json"
File: body.json
{ 
    "CountryId": 1, 
    "Name": "John Smith Home Address", 
    "Street": "Maple Street", 
    "City": "New York", 
    "HouseNumber": "120", 
    "ApartmentNumber": "1A", 
    "PostalCode": "10-001", 
    "RegionId": 12, 
    "Email": "john.smith@example.com", 
    "Phone": "600123321", 
    "TaxNumber": "0000000000", 
    "OneTimeAddress": true 
}
API response example
"-1" // Id of new address

WAYBILLS

Add new waybill

This endpoint allows you to create a new waybill for a given order ID. You can attach a PDF file which contains a waybill. Once the request is processed successfully, the system returns the identifier of the newly added attachment.

You have to add an attachment containing shipping label in PDF format. The file must be uploaded together with the request in multipart/form-data.

Returns ID of new attachment or message: There is already a waybill for the order witch that ID.

POST /api3/order/waybill/{orderId}
curl -X POST "https://[your-platform-address]/api3/order/waybill/-12345" ^ 
     -H "Authorization: Bearer 12345678-abcd-1234-abcd-1234abcd5678" ^ 
     -F "file=@waybill.pdf"
API response example
-123 // Id of new attachment
// OR message if there is already a waybill for the order witch that ID
{
    "Message": "Istnieje już list przewozowy dla zamówienia o ID: -12345"
}
          

Get waybill for order GET

Retrieves the waybill document for a given order ID. The document is returned as an URL. Null response means that no waybill was found for specific order.

Available response parameters

Field Type Description Data type
RelativePath integer Relative path to waybill file int
Size integer File size int
Url string Url to waybill string
UploadDate string Receiver name string
GET /api3/order/waybill/{documentId}
curl -X GET "https://[your-platform-address]/api3/order/waybill/-12345" ^
     -H "Accept: application/json" ^
     -H "Authorization: Bearer 12345678-abcd-1234-abcd-1234abcd5678"
API response example
{
  "RelativePath": "/Zasoby/OrderWaybill/-12345/d92057ea-16f0-4bb9-9f82-fc9339162663.pdf",
  "Size": 8175,
  "Url": null,
  "UploadDate": "2025-09-03T12:48:12.78"
}

ORDERS

Add new order

This request is used to place a new order in the system via the API. It requires providing key details such as the selected payment and delivery methods, an optional comment, and a list of products with their identifiers and quantities. The request must also include the delivery address ID that is already stored in the system. Additionally, the request allows passing extra parameters in the AdditionalProperties array, which can be used to extend the order definition with custom attributes (e.g., promo codes or special handling instructions).

Please always remember to set appropriate comment such as "!! TESTING order via SolEx API !!" or similar so order would not be processed by the staff during tests!

Request parameters:

Response parameters:

Parameter Type Description Data Type
OrderId int Unique identifier of the created order. Negative values may indicate a test or temporary order. integer
BasketStatements[].Message string General message related to the basket (e.g., warnings, validations, additional information). string
BasketStatements[].Type string Type of the basket message. string
BasketProductsStatements[].Message string Message related to specific products in the basket (e.g., stock warnings, availability notes). string
BasketProductsStatements[].Type string Type of the product-related message. string
POST /api3/order
curl -X POST "https://[your-platform-address]/api3/order" ^
     -H "Content-Type: application/json" ^
     -H "Authorization: Bearer 12345678-abcd-1234-abcd-1234abcd5678" ^
     -d "@body.json"
File: body.json
{
    "PaymentName": "string",
    "DeliveryName": "string",
    "Comment": "!! TESTING order via SolEx API !!",
    "OrderLines": {
        "KeyType": "Ean",
        "Lines": 
            [  
                { "Key": "996633", "Quantity": 7 },
                { "Key": "4779039731181", "Quantity": 2 }
            ]
    },
    "AddressId": 2400000000,
    "AdditionalProperties": []
}
API response example
{
    "OrderId": -12345,
    "BasketStatements": [
        {
            "Message": " Example warning message for basket",
            "Type": "warning"
        }
    ],
    "BasketProductsStatements": [
        {
            "Message": " Example warning message for products",
            "Type": "warning"          
        }
    ]
}

Get delivery options GET

This method is used to retrieve a complete list of all delivery methods available in the system. It provides general information about each delivery option, such as its identifier and name, without applying any restrictions at this stage. It returns an array of all delivery options availabile.

It is important to note that the availability of a specific delivery method during the actual ordering process (handled in a separate API method) may be subject to certain conditions. For example, factors such as the delivery address, payment method, order weight, selected products, or the customer's location may limit which options are offered at checkout. In some cases, selected delivery methods may be unavailable. In such a case, the request to /api3/order will return available delivery methods.

This method is intended primarily for displaying or storing the full catalog of delivery methods, which can later be cross-checked during order placement to ensure the chosen option is valid for the given transaction.

Response parameters:

Parameter Value Description Data Type
Id integer Identifier of the delivery option int
Name string Delivery option name string
GET /api3/order/delivery
curl -X GET "https://[your-platform-address]/api3/order/delivery" ^
     -H "Authorization: Bearer 12345678-abcd-1234-abcd-1234abcd5678"
API response example
{
  "Items": [
    {
      "Id": 1,
      "Name": "Delivery option 1"
    },
    {
      "Id": 2,
      "Name": "Delivery option 2"
    }
  ]
}

Get payment options GET

This method is used to retrieve a list of all available payment methods. These options can be presented to the customer during the checkout process, allowing them to select their preferred method of payment.

It is important to note that the availability of a specific payment method during the actual ordering process may be subject to certain conditions. In some cases, selected payment methods may be unavailable. In such a case, the request to /api3/order will return available payment methods.

The response typically includes details such as the payment identifier and name.

Response parameters:

Parameter Value Description Data Type
Id integer Identifier of the delivery option int
Name string Payment option name string
GET /api3/order/payment
curl -X GET "https://[your-platform-address]/api3/order/payment" ^
     -H "Authorization: Bearer 12345678-abcd-1234-abcd-1234abcd5678"
     
API response example
{
  "Items": [
    {
      "Id": 1,
      "Name": "Payment option 1"
    },
    {
      "Id": 2,
      "Name": "Payment option 2"
    }
  ]
}

BASKETS

Creating new basket

This method is used to create a new shopping basket. It initializes an empty basket that can later be filled with products, assigned to a customer, and processed through the checkout flow. The response typically includes a unique basket identifier, which should be used in subsequent operations related to that basket such as adding products or finalizing a basket.

Request parameters

Parameter Value Description Required Data Type
BasketName string Name of newly created basket Yes string
ShowOnFront boolean Indicates if the basket should be displayed on the frontend No bool
SetActual boolean Indicates if the basket should be choosen as a main basket in frontend No bool

Response:

Parameter Value Description Data Type
BasketId integer Identifier of new basket int
POST /api3/basket
curl -X POST "https://[your-platform-address]/api3/basket" ^
     -H "Content-Type: application/json" ^
     -H "Authorization: Bearer 12345678-abcd-1234-abcd-1234abcd5678" ^
     -d "@body.json"
File: body.json
{ 
  "BasketName": "New basket name", 
  "ShowOnFront": true, 
  "SetActual": true 
}
API response example
{
  "BasketId": "54321"
}

Delete basket DELETE

This method is used to remove the current shopping basket. Once executed, all items previously added to the basket will be cleared, and the basket will no longer be available for further operations. This method is typically used when a customer cancels their order or decides to start a new shopping process.

WARNING! All data related to deleted basket will be erased, especially products included in that basket. This operation cannot be reversed!

Request parameters

Parameter Value Description Required Data Type
Id integer Identifier of the basket to remove Yes int
DELETE /api3/basket/{id}
curl -X DELETE "https://[your-platform-address]/api3/basket/12345" ^
     -H "Content-Type: application/json" ^
     -H "Authorization: Bearer 12345678-abcd-1234-abcd-1234abcd5678"
API response example
"Basket '12345' deleted."

Get baskets list GET

This method is used to retrieve a list of all shopping baskets associated with the customer or account. The response typically includes details such as basket identifiers, creation dates, current status, and summary information about the contents. This allows the customer or system to manage multiple baskets, review their state, or continue a previously started shopping process.

Response parameters:

Parameter Value Description Data Type
BasketId string Unique identifier of the basket string
BasketName string Product SKU (stock keeping unit) string
ShowOnFront boolean Indicates if the basket should be displayed on the frontend bool
IsActual boolean Indicates whether the item is marked as the current (active) one bool
GET /api3/basket/list
curl -X GET "https://[your-platform-address]/api3/basket/list" ^
     -H "Content-Type: application/json" ^
     -H "Authorization: Bearer 12345678-abcd-1234-abcd-1234abcd5678"
API response example
            [
  {
    "BasketId": "12345",
    "BasketName": "Example basket",
    "ShowOnFront": true,
    "IsActual": true
  }
]

Get basket GET

Retrieves detailed information about a specific basket, including its items, quantities, and related metadata.

Path parameters:

Parameter Value Description Required Data Type
id string Id of basket, which data is requested Yes string

Response parameters:

GET /api3/basket/{id}
curl -X GET "https://[your-platform-address]/api3/basket/12345" ^
     -H "Content-Type: application/json" ^
     -H "Authorization: Bearer 12345678-abcd-1234-abcd-1234abcd5678"
API response example
            {
  "BasketId": "12345",
  "Items": [
    {
      "Id": 98765,
      "Sku": "ProductSymbol",
      "Ean": "1234567890123",
      "Quantity": 1.00,
      "NetPrice": 4.9410,
      "Description": null,
      "AddDate": "2025-08-19T12:13:36.167",
      "Type": 1
    }
  ],
  "Comment": null,
  "DeliveryId": null,
  "Delivery": null,
  "DeliveryCost": null,
  "PaymentId": null,
  "Payment": null,
  "DeliveryAddressId": null,
  "DeliveryAddress": null,
  "TotalNetValue": {
    "Value": 14.823000,
    "Currency": "PLN"
  },
  "TotalNetValueProducts": {
    "Value": 14.823000,
    "Currency": "PLN"
  },
  "AdditionalProperties": {
    "AdditionalField1": null,
    "AdditionalField2": null
  },
  "ShowOnFront": true
}

Change basket fields PATCH

Updates an existing basket with new data such as payment & delivery methods or customer-related information etc.

Parameters description:

Parameter Value Description Required Data Type
PaymentId integer Identifier of the new payment method No int|null
DeliveryId integer Identifier of the new delivery method No int|null
Comment string Additional comment added to the order No string|null
AddressId integer Identifier of the delivery address No int|null
ShowOnFront boolean Indicates if the basket should be displayed on the frontend No bool
AdditionalProperties Array Custom additional fields defined in the system No Array<object>
AdditionalProperties[].Key string Name of additional field Yes (if AdditionalProperties defined) string
AdditionalProperties[].Values[] Array List of values for additional field Yes (if AdditionalProperties defined) Array<string>
PATCH /api3/basket/{id}
curl -X PATCH "https://[your-platform-address]/api3/basket/12345" ^
     -H "Content-Type: application/json" ^
     -H "Authorization: Bearer 12345678-abcd-1234-abcd-1234abcd5678" ^
     -d "@body.json"
File: body.json
{
  "PaymentId": 1,
  "DeliveryId": 1,
  "Comment": "!! TESTING order via SolEx API !!",
  "AddressId": 123,
  "ShowOnFront": true,
  "AdditionalProperties": [
    {
      "Key": "AdditionalField1",
      "Values": [
        "ExampleValue"
      ]
    }
  ]
}

Add products to basket

This method is used to add one or more products to an existing shopping basket. The request includes the basket identifier along with product details such as product ID, quantity, and optional attributes (e.g., variants or customizations). The response confirms that the products have been added and usually returns updated basket information, including totals and item details.

Request parameters:

Parameter Value Description Required Data Type
ProductKey Object Container for product identification details Yes <object>
ProductKey.KeyType "Ean" Type of product key (e.g., Ean, SKU) Yes string
ProductKey.Key "4779039731181" Actual product identifier (e.g., Ean number) Yes long
Quantity "1" Quantity of the product to be added Yes string
UnitId "-3" Identifier of the unit in which the product is measured (e.g., -3 for pieces) Yes string
Config Object Configuration options for validation and error handling. No object
Config.ErrorOnProductQuantityChange boolean If set to true, an error is returned when the product quantity is adjusted automatically. No bool
Config.ErrorOnProductWarning boolean If set to true, an error is returned when the product has warnings (e.g., limited availability). No bool
POST /api3/basket/{id}/item
curl -X POST "https://[your-platform-address]/api3/basket/51972/item" ^
     -H "Content-Type: application/json" ^
     -H "Authorization: Bearer 12345678-abcd-1234-abcd-1234abcd5678" ^
     -d "@body.json"
File: body.json
{ 
  "ProductKey": 
    { 
        "KeyType": "Ean", 
        "Key": "4779039731181" 
    }, 
  "Quantity": "1", 
  "UnitId": "-3", 
  "Config": 
    { 
        "ErrorOnProductQuantityChange": true, 
        "ErrorOnProductWarning": true 
    } 
}
API response example
"Basket item added."

Remove product from the basket DELETE

This method is used to remove a specific product from an existing shopping basket. The request requires the basket identifier and the product identifier that should be removed (e.g. Ean, SKU).

Request parameters:

Parameter Value Description Required Data Type
Key "4779039731181" Actual product identifier (e.g., Ean number) Yes long
KeyType "Ean" Type of product key (e.g., Ean, SKU) Yes string
DELETE /api3/basket/{id}/item
curl -X DELETE "https://[your-platform-address]/api3/basket/12345/item" ^
       -H "Content-Type: application/json" ^
       -H "Authorization: Bearer 12345678-abcd-1234-abcd-1234abcd5678"
	   -d "@body.json"
File: body.json
{
  "Key": "4779039731181",
  "KeyType": "Ean"
}
API response example
"Basket item deleted."

Finalize basket

The FinalizeBasket method is used to complete the shopping process for a given basket. Once executed, the basket is confirmed and converted into an order. The request may include additional details such as selected payment method, shipping option, or customer notes. The response typically returns the created order identifier and confirmation data required for further processing.

The basket must meet all conditions to be finalized. That means that basket should be able to be finalized on the frontend side.

Response parameters:

Parameter Value Description Data Type
OrderId integer Identifier of the new order int
OrderNumber string Order number string
ResultMessage string Identifier of the new payment method string
POST /api3/basket/{id}/finalize
curl -X POST "https://[your-platform-address]/api3/basket/12345/finalize" ^
     -H "Accept: application/json" ^
     -H "Authorization: Bearer 12345678-abcd-1234-abcd-1234abcd5678" ^
     -d {}
API response example
{
  "OrderId": -1583,
  "OrderNumber": "1/10/25",
  "ResultMessage": "Your order was sent"
}

COUNTRIES AND REGIONS

Get countries GET

This method is used to retrieve a list of available countries supported by the system. The response typically includes country unique identifiers, names and their ISO codes. This information can be used when creating addresses, configuring shipping options, or validating customer data.

Response parameters:

Parameter Value Description Data Type
Id integer Identifier of the country (to use in addresses) int
Name string Country name string
Symbol string Country code in the ISO 3166-1 alpha-2 format string
GET /api3/country
curl -X GET "https://[your-platform-address]/api3/country" ^
     -H "Authorization: Bearer 12345678-abcd-1234-abcd-1234abcd5678"
API response example
{
  "Items": [
    {
      "Id": 1,
      "Name": "Polska",
      "Symbol": "PL"
    },
    {
      "Id": 2,
      "Name": "Czechy",
      "Symbol": "CZ"
    },
    {
      "Id": 3,
      "Name": "Słowacja",
      "Symbol": "SK"
    }
  ]
}

Get regions GET

This method is used to retrieve a list of regions (such as states, provinces, or administrative areas) available to choose during creating an address or placing an order. The response typically includes region identifiers, names, and related country identifiers. This method is often used to support address creation.

Response parameters:

Parameter Value Description Data Type
Id integer Identifier of the region (to use in addresses) int
Name string Country name string
CountryId integer Identifier of the country, see the Get countries method int
GET /api3/region
curl -X GET "https://[your-platform-address]/api3/region" ^
     -H "Authorization: Bearer 12345678-abcd-1234-abcd-1234abcd5678"
API response example
{
  "Items": [
    {
      "Id": 1,
      "Name": "dolnośląskie",
      "CountryId": 1
    },
    {
      "Id": 2,
      "Name": "kujawsko-pomorskie",
      "CountryId": 1
    }
  ]
}

Data Feed

Get data feed file list

Returns a structured list of all currently available integration files that can be downloaded by the client. This endpoint allows external systems to programmatically discover which integration files (by data type, format, and version) are exposed for download. Only the latest version of each file is returned.

The response is a JSON array, where each object represents one available integration file variant (e.g., same file in different encodings or formats).

Response parameters:

Parameter Value Description Data Type
IntegrationDataType integer Type of integration data (e.g., 0 = Products, 1 = Shops). int
IntegrationDataFormat integer File format or encoding identifier. 0 for XML, 1 for CSV. int
Version integer Version number of the file. Only the highest version per data type is relevant for consumption. int
Url string Absolute download URL for the file. string
GET /api3/DataFeed/List
curl -X GET https://[your-platform-address]/api3/DataFeed/List ^
     -H "Authorization: Bearer 12345678-abcd-1234-abcd-1234abcd5678"
API response example
[
  {
    "IntegrationDataType": 0,
    "IntegrationDataFormat": 0,
    "Version": 3,
    "Url": "https://[your-platform-address]/xmlapi/1/3/UTF8/AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAA"
  },
  {
    "IntegrationDataType": 0,
    "IntegrationDataFormat": 0,
    "Version": 3,
    "Url": "https://[your-platform-address]/xmlapi/1/3/Windows1250/AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAA"
  },
  {
    "IntegrationDataType": 0,
    "IntegrationDataFormat": 1,
    "Version": 2,
    "Url": "https://[your-platform-address]/xmlapi/2/2/UTF8/AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAA"
  }
]