Products
Read the seller’s catalogue (own and adopted products) and push products.
List products
/productscursorstringFrom
nextCursor.limitintegerDefault 100, max 200.
updatedSinceISO 8601Only products changed after this instant (for adopted products: the adoption, the creator’s product or its prices).
countrystring (2)Only products sold in this country (must be one of the seller’s).
curl "https://coliswift.com/api/partner/v1/products?limit=100" \
-H "Authorization: Bearer $COLISWIFT_ACCESS_TOKEN"const res = await fetch('https://coliswift.com/api/partner/v1/products?limit=100', {
method: 'GET',
headers: {
Authorization: `Bearer ${process.env.COLISWIFT_ACCESS_TOKEN}`,
},
});
const data = await res.json();$ch = curl_init('https://coliswift.com/api/partner/v1/products?limit=100');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . getenv('COLISWIFT_ACCESS_TOKEN'),
],
]);
$data = json_decode(curl_exec($ch), true);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);import os, requests
res = requests.get(
"https://coliswift.com/api/partner/v1/products",
headers={"Authorization": f"Bearer {os.environ['COLISWIFT_ACCESS_TOKEN']}"},
params={
"limit": "100",
},
)
data = res.json()One stream in two halves: first the seller’s own products (by id), then the COD Drop products they adopted ("adopted": true, see COD Drop). Only products the seller can sell are listed: a product the seller switched off, or an adoption that is paused, blocked or given back, is not in the list (an adoption that ends also sends adoption.removed or adoption.updated).
{
"data": [
{
"id": "5e6f7a8b-9c0d-4e1f-a2b3-c4d5e6f7a8b9",
"reference": "SER-01",
"label": "Vitamin C serum 30 ml",
"description": "Brightening serum.",
"category": "beauty",
"imageUrl": "https://cdn.example.com/serum.jpg",
"imageUrls": [
"https://cdn.example.com/serum.jpg"
],
"countryCodes": [
"MA"
],
"pricesByCountry": [
{
"countryCode": "MA",
"price": "199.0000"
}
],
"offers": [
{
"countryCode": "MA",
"quantity": 2,
"label": "2 for 349",
"price": "349.0000"
}
],
"variants": [
{
"id": "9a8b7c6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d",
"label": "Orange",
"sku": "SER-01-OR",
"pricesByCountry": [
{
"countryCode": "MA",
"price": "199.0000"
}
]
}
],
"createdAt": "2026-10-20T08:00:00.000Z",
"updatedAt": "2026-11-01T17:30:00.000Z"
}
],
"nextCursor": null,
"hasMore": false
}The Product object
What an app needs to show and sell the product, nothing more:
idstringProduct id.
referencestringThe SKU used on order lines.
label · descriptionstring · string | nullName and text.
categorystring | nullhealthbeautyelectronicsfashionfoodsports
imageUrl · imageUrlsstring | null · string[]Main image and gallery.
countryCodesstring[]Countries the product is sold in.
pricesByCountry[]object[]countryCode,price— the seller’s sale price in that country (4-decimal string, local currency).offers[]object[]Quantity offers:
countryCode,quantity,label,price(the price for that quantity, 4-decimal string). Empty when none.variants[]object[]id,label,sku,pricesByCountry[](countryCode,price). Empty for a product without variants.createdAt · updatedAttimestamp
An adopted COD Drop product has its own shape, described on COD Drop. Ignore keys you do not know.
Retrieve a product
/products/{id}An own product, or an adopted one (same shape as in the list). Anything else — another seller’s product, a COD Drop product the seller did not adopt, a product that is no longer for sale — is 404 NOT_FOUND.
Create or update a product
/products/products/{id}Goes through the same validation and pricing as the seller’s own product form, and answers with the Product object (201 on create, 200 on update). On PUT every field is optional.
referencestring, 1–100requiredUnique per seller (
REFERENCE_EXISTSotherwise).labelstring, 1–255requiredcountryCodesstring[], ≥ 1requiredMust be the seller’s countries (
PRODUCT_COUNTRY_NOT_ALLOWED).description · notesForCallCenterstring | nullurlURL ≤ 2048 | nullProduct page.
categorystringhealthbeautyelectronicsfashionfoodsports
productTypestringsimplevariantpack
storeIdstringOne of the seller’s stores.
imageUrlURL | nullimageUrlsURL[], ≤ 6pricesByCountry[]object[]countryCode(required),purchasePrice,salePrice— money strings.offers[]object[]countryCode,quantity(≥ 1),label(1–60),price(required).variantAttributesobjectVariant axes; ColiSwift generates the variants from them.
weight · lengthCm · widthCm · heightCm · dimensionsanyAccepted and ignored: ColiSwift measures parcels itself.
curl -X POST "https://coliswift.com/api/partner/v1/products" \
-H "Authorization: Bearer $COLISWIFT_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"reference": "SER-01",
"label": "Vitamin C serum 30 ml",
"description": "Brightening serum.",
"url": "https://atlas-beauty.example/serum",
"category": "beauty",
"productType": "simple",
"storeId": "b2d4e6f8-1a3c-4e5f-8a9b-0c1d2e3f4a5b",
"countryCodes": [
"MA"
],
"imageUrl": "https://cdn.example.com/serum.jpg",
"notesForCallCenter": "Mention the 2-for-349 offer.",
"pricesByCountry": [
{
"countryCode": "MA",
"purchasePrice": "45.00",
"salePrice": "199.00"
}
],
"offers": [
{
"countryCode": "MA",
"quantity": 2,
"label": "2 for 349",
"price": "349.00"
}
]
}'const res = await fetch('https://coliswift.com/api/partner/v1/products', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.COLISWIFT_ACCESS_TOKEN}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"reference": "SER-01",
"label": "Vitamin C serum 30 ml",
"description": "Brightening serum.",
"url": "https://atlas-beauty.example/serum",
"category": "beauty",
"productType": "simple",
"storeId": "b2d4e6f8-1a3c-4e5f-8a9b-0c1d2e3f4a5b",
"countryCodes": [
"MA"
],
"imageUrl": "https://cdn.example.com/serum.jpg",
"notesForCallCenter": "Mention the 2-for-349 offer.",
"pricesByCountry": [
{
"countryCode": "MA",
"purchasePrice": "45.00",
"salePrice": "199.00"
}
],
"offers": [
{
"countryCode": "MA",
"quantity": 2,
"label": "2 for 349",
"price": "349.00"
}
]
}),
});
const data = await res.json();$ch = curl_init('https://coliswift.com/api/partner/v1/products');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . getenv('COLISWIFT_ACCESS_TOKEN'),
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => <<<'JSON'
{
"reference": "SER-01",
"label": "Vitamin C serum 30 ml",
"description": "Brightening serum.",
"url": "https://atlas-beauty.example/serum",
"category": "beauty",
"productType": "simple",
"storeId": "b2d4e6f8-1a3c-4e5f-8a9b-0c1d2e3f4a5b",
"countryCodes": [
"MA"
],
"imageUrl": "https://cdn.example.com/serum.jpg",
"notesForCallCenter": "Mention the 2-for-349 offer.",
"pricesByCountry": [
{
"countryCode": "MA",
"purchasePrice": "45.00",
"salePrice": "199.00"
}
],
"offers": [
{
"countryCode": "MA",
"quantity": 2,
"label": "2 for 349",
"price": "349.00"
}
]
}
JSON,
]);
$data = json_decode(curl_exec($ch), true);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);import os, requests
res = requests.post(
"https://coliswift.com/api/partner/v1/products",
headers={"Authorization": f"Bearer {os.environ['COLISWIFT_ACCESS_TOKEN']}"},
json={
"reference": "SER-01",
"label": "Vitamin C serum 30 ml",
"description": "Brightening serum.",
"url": "https://atlas-beauty.example/serum",
"category": "beauty",
"productType": "simple",
"storeId": "b2d4e6f8-1a3c-4e5f-8a9b-0c1d2e3f4a5b",
"countryCodes": [
"MA",
],
"imageUrl": "https://cdn.example.com/serum.jpg",
"notesForCallCenter": "Mention the 2-for-349 offer.",
"pricesByCountry": [
{
"countryCode": "MA",
"purchasePrice": "45.00",
"salePrice": "199.00",
},
],
"offers": [
{
"countryCode": "MA",
"quantity": 2,
"label": "2 for 349",
"price": "349.00",
},
],
},
)
data = res.json()
