Dropshipping API — partner guide
Wholesale REST API: Emmebi Italia''s live catalog with your partner prices, real-time per-warehouse stock, and order placement shipped straight to your customer. You hold no stock — we dispatch.
How to get access
API access is granted manually. You can''t self-serve the first key: we vet the partner and sign a contract before issuing a key.
- ApplicationSubmit a request via the form on the salons page (legal entity, registration number, VAT, contacts).
- VettingWe check the company and its solvency. Dropshipping runs on prepayment — orders are paid by bank transfer before dispatch.
- ContractWe sign a partner agreement and a data processing agreement (templates below). Your partner tier (Bronze/Silver/Gold) is fixed in the contract.
- Key issuanceThe manager issues an API key
emmebi_dsk_…. The key is shown once — store it like a password. If compromised, tell us: the key is revoked instantly and a new one issued.
Contracts
Partner contracts (the dropshipping agreement and the DPA) are available to registered business partners inside your account.
Open contracts in your partner cabinet →Ready-to-import data for your platform
Import our entire catalog straight into your store — no scraping. A single GET /dropship/feed request returns every published product with translations, photos, stock and your prices in a format your CMS importer reads directly.
Parameters: format — platform (see table); locale — data language: et, en, ru, fi, sv, lv, lt.
| Platform | format value | How to import |
|---|---|---|
| WooCommerce | woocommerce | Products → Import (built-in CSV importer) or WP All Import by URL |
| Shopify | shopify | Matrixify app — CSV import from a file or URL |
| PrestaShop | prestashop | Advanced → CSV import (delimiter “;”) |
| OpenCart | opencart | Import module (Export/Import and similar) |
| Google Merchant (XML) | google | XML feed (RSS 2.0) for Google Merchant and any feed plugin |
curl -H "Authorization: Bearer emmebi_dsk_..." \ "https://api.emmebi.ee/dropship/feed?format=woocommerce&locale=et" \ -o emmebi-catalog.csv
The sell price in the feed is our recommended retail (VAT incl.), ready to sell — you can adjust the markup. Your purchase price (retail minus your tier discount) rides in a separate column: Meta: _dropship_cost (WooCommerce), Variant Cost (Shopify), Wholesale price (PrestaShop).
On a different platform? We can prepare an export for it — contact us and we will add the format you need.
Automatic updates
The feed is generated live on every request. A new product, photo, price or stock change shows up in it immediately. Schedule a recurring import from the feed URL in your CMS importer (WP All Import schedule, Matrixify, PrestaShop cron import) and your catalog keeps itself in sync.
1. API access
| Base URL | https://api.emmebi.ee |
|---|---|
| Authorization | header Authorization: Bearer emmebi_dsk_… |
| Format | JSON, UTF-8 |
| Rate limit | 120 requests per minute (on exceed — 429 + Retry-After) |
| Price tiers | Bronze −5% / Silver −10% / Gold −15% off the retail price; bound to the key, shown in the catalog response. |
2. Catalog
Parameters: limit (up to 100, default 50), offset, handle (filter by a single product).
curl -H "Authorization: Bearer emmebi_dsk_..." \ "https://api.emmebi.ee/dropship/products?limit=50&offset=0"
{
"tier": "silver",
"discount": 0.1,
"count": 106,
"products": [
{
"title": "Argania Sahara Secrets Mask",
"handle": "argania-sahara-secrets-mask",
"variants": [
{
"variant_id": "variant_01...",
"sku": "ARGMASK200",
"barcode": "8032825918934",
"retail_price": 18, // recommended retail, EUR, incl. VAT
"your_price": 16.2, // your tier price
"available": 3 // total available across warehouses
}
]
}
]
}Recommendation: sync the catalog no more than once an hour; check a specific SKU''s stock precisely right before placing an order.
3. Stock
curl -H "Authorization: Bearer emmebi_dsk_..." \ "https://api.emmebi.ee/dropship/inventory/ARGMASK200"
{
"sku": "ARGMASK200",
"available": 3,
"warehouses": [
{ "name": "Rakvere Warehouse", "available": 2 },
{ "name": "Kohtla-Järve Warehouse", "available": 1 }
]
}4. Creating an order
The Idempotency-Key header is required — any unique string of yours (e.g. your order number). A repeat request with the same key returns the already-created order rather than a duplicate — safe to retry on timeouts.
curl -X POST "https://api.emmebi.ee/dropship/orders" \
-H "Authorization: Bearer emmebi_dsk_..." \
-H "Idempotency-Key: my-shop-order-10422" \
-H "Content-Type: application/json" \
-d '{
"items": [
{ "sku": "ARGMASK200", "quantity": 2 }
],
"shipping_address": {
"first_name": "Mari",
"last_name": "Tamm",
"address_1": "Pikk 12-4",
"city": "Tallinn",
"postal_code": "10123",
"country_code": "ee",
"phone": "+372 5xxx xxxx"
},
"end_customer_email": "[email protected]",
"reference": "my-shop-order-10422"
}'shipping_address is the address of your end customer: we ship the parcel straight to them. In items you may pass sku or variant_id.
// Response 201
{
"order_id": "order_01...",
"display_id": 137,
"status": "awaiting_payment",
"total": 32.4,
"proforma_emailed": true,
"payment": {
"method": "bank_transfer",
"recipient": "HairFresh OÜ",
"iban": "EE73 1010 2202 9766 2225",
"swift": "EEUHEE2X",
"bank": "SEB Pank",
"reference": "EMB-PRO-137",
"amount": 32.4
}
}Payment
We work on prepayment. Once the order is created, a proforma invoice (PDF) with bank details is emailed to your account automatically. Pay by bank transfer, quoting the reference in the payment purpose (e.g. EMB-PRO-137). The goods are reserved for you from the moment the order is created; we dispatch on the day payment is confirmed.
Errors
| Code | Reason |
|---|---|
400 | missing Idempotency-Key, empty items, incomplete address |
404 | unknown SKU |
409 | insufficient stock (see available in the response) |
422 | SKU has no price |
5. Order status
{
"display_id": 137,
"payment_status": "paid",
"shipped": true,
"delivered": false,
"fulfillments": [
{
"shipped_at": "2026-07-04T09:12:00Z",
"tracking": [
{ "tracking_number": "JJFI123...", "tracking_url": "https://..." }
]
}
]
}Polling every 15–30 minutes is enough. Once a tracking_number appears — pass it on to your customer.
6. Typical integration cycle
hourly GET /dropship/products → refresh storefront and prices
before order GET /dropship/inventory/{sku} → check stock
sale on your end POST /dropship/orders → create order (Idempotency-Key!)
after payment bank transfer per the proforma
every 15-30 min GET /dropship/orders/{id} → payment_status / tracking7. Contacts
Questions about the API, keys, prices and tiers: [email protected]. Questions about orders and dispatch: [email protected].