Skip to content
Professional Hair Care — Made in Italy — Sulfate Free — Cruelty Free — EDTA Free — Recyclable Packaging — Professional Hair Care — Made in Italy — Sulfate Free — Cruelty Free — EDTA Free — Recyclable Packaging —
ProductsSign InWishlistThe brandFor Salons
For salons & partnersDropshipping · API v1

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.

  1. ApplicationSubmit a request via the form on the salons page (legal entity, registration number, VAT, contacts).
  2. VettingWe check the company and its solvency. Dropshipping runs on prepayment — orders are paid by bank transfer before dispatch.
  3. ContractWe sign a partner agreement and a data processing agreement (templates below). Your partner tier (Bronze/Silver/Gold) is fixed in the contract.
  4. 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.

GET /dropship/feed

Parameters: format — platform (see table); locale — data language: et, en, ru, fi, sv, lv, lt.

Platformformat valueHow to import
WooCommercewoocommerceProducts → Import (built-in CSV importer) or WP All Import by URL
ShopifyshopifyMatrixify app — CSV import from a file or URL
PrestaShopprestashopAdvanced → CSV import (delimiter “;”)
OpenCartopencartImport module (Export/Import and similar)
Google Merchant (XML)googleXML 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 URLhttps://api.emmebi.ee
Authorizationheader Authorization: Bearer emmebi_dsk_…
FormatJSON, UTF-8
Rate limit120 requests per minute (on exceed — 429 + Retry-After)
Price tiersBronze −5% / Silver −10% / Gold −15% off the retail price; bound to the key, shown in the catalog response.

2. Catalog

GET /dropship/products

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

GET /dropship/inventory/{sku}
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

POST /dropship/orders

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

CodeReason
400missing Idempotency-Key, empty items, incomplete address
404unknown SKU
409insufficient stock (see available in the response)
422SKU has no price

5. Order status

GET /dropship/orders/{order_id}
{
  "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 / tracking

7. Contacts

Questions about the API, keys, prices and tiers: [email protected]. Questions about orders and dispatch: [email protected].