REST API · OpenAPI 3.1 · v1.0

Ship to Ukrainian
customers from
your Shopify store

Production REST API for European integrators connecting Shopify, WooCommerce, BigCommerce, or custom stacks to a bonded Ukrainian warehouse. 18 methods, JSON, HTTPS, 99.5% SLA. Gateway to a 40M-consumer market with EU-compatible logistics.

✓ Integration manager will issue the key and walk you through setup

Or message us on Telegram →
18REST methods
7endpoint groups
99.5%uptime SLA
<300msp95 latency
01

Quick Start — first order in 5 minutes

If you run an EU-based Shopify or WooCommerce store and want to ship into Ukraine without a local entity, this API is the shortest path. Request an ApiKey, plug in order and status endpoints, and Nova Poshta handles last-mile delivery. Customs paperwork is a separate workflow — our integration team handles it for you at onboarding.

1

Request an ApiKey

Contact your integration manager or call GetToken with your credentials. The key is bearer-style and does not expire until revoked.

2

Import the collection

Grab the Postman Collection or the OpenAPI 3.1 JSON.

3

Test in staging

Your manager issues a staging ApiKey with isolated data. Call AddOrder with dummy data; we return the order ID and status.

4

Subscribe to status webhooks

Register a URL and we POST JSON on every status change (new → picked → shipped → delivered). Retries 3x with exponential backoff.

02

Authentication

The API expects the ApiKey in the request body, not as an HTTP header. This is a legacy design from the original 1C (Ukraine ERP) integrators, preserved for backward compatibility. Include an ApiKey field at the root of every JSON body.

POST /GetToken — exchange credentials for ApiKey
curl -X POST 'https://fulfillment.in.ua:34443/MTPGroupFulfillment/hs/api/GetToken' \
  -H 'Content-Type: application/json' \
  -d '{"Login":"your_login","Password":"your_password"}'
Security: store the ApiKey server-side only — never in browser JavaScript. Rotate every 90 days. For CI/CD, use environment secret variables (GitHub Actions, GitLab CI).
03

Endpoint groups

Endpoints are grouped by domain model. Full parameters and response schemas are in the OpenAPI specification.

Auth 1 method

  • GetToken — get ApiKey from login/password

Orders 6 methods

  • AddOrder — create a customer order
  • EditOrder — edit before picking starts
  • CancelOrder — cancel an order
  • ReportStatusOrder — status changes within a period
  • getStatusOrder — current status of one order
  • ListOrder — order register

Products 1 method

  • AddProduct — add SKU to the catalog

Inventory 2 methods

  • ReportSklad — warehouse stock levels
  • ReportMoveProduct — goods movement over a period

Delivery 3 methods (v2)

  • ListDeliveryRequest — list inbound delivery requests
  • AddDeliveryRequest — new inbound delivery
  • ReportDeliveryRequest — report on deliveries

Returns 1 method

  • ListReturnOrder — return shipments register

Reference 4 methods

  • getCities — Nova Poshta city directory
  • getWarehouses — branches in a city
  • getStreet — streets for courier delivery
  • senderDetails — sender registration data
04

Code examples

Ready-to-use snippets for creating orders. Paste your ApiKey, map fields to your store's data model.

cURL — create order
curl -X POST 'https://fulfillment.in.ua:34443/MTPGroupFulfillment/hs/api/AddOrder' \
  -H 'Content-Type: application/json' \
  -d '{
    "ApiKey": "YOUR_API_KEY",
    "OrderNumber": "WEB-10542",
    "Recipient": {"Name": "Petrenko O.", "Phone": "+380501234567"},
    "Delivery": {"Carrier": "NovaPoshta", "City": "Kyiv", "Warehouse": "№12"},
    "Items": [{"SKU": "TSHIRT-BLK-L", "Qty": 1, "Price": 550}]
  }'
Node.js — create order
const res = await fetch('https://fulfillment.in.ua:34443/MTPGroupFulfillment/hs/api/AddOrder', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    ApiKey: process.env.MTP_API_KEY,
    OrderNumber: order.id,
    Recipient: { Name: order.name, Phone: order.phone },
    Delivery: { Carrier: 'NovaPoshta', City: order.city, Warehouse: order.branch },
    Items: order.items.map(i => ({ SKU: i.sku, Qty: i.qty, Price: i.price }))
  })
});
const data = await res.json();
Python — create order
import os, requests

r = requests.post(
    'https://fulfillment.in.ua:34443/MTPGroupFulfillment/hs/api/AddOrder',
    json={
        'ApiKey': os.environ['MTP_API_KEY'],
        'OrderNumber': order['id'],
        'Recipient': {'Name': order['name'], 'Phone': order['phone']},
        'Delivery': {'Carrier': 'NovaPoshta', 'City': order['city'], 'Warehouse': order['branch']},
        'Items': [{'SKU': i['sku'], 'Qty': i['qty'], 'Price': i['price']} for i in order['items']]
    }
)
r.raise_for_status()
05

Interactive playground

The Swagger UI below reads our OpenAPI 3.1 spec and lets you fire real requests from this page. For authenticated endpoints, paste your ApiKey into the request body. Reference methods (getCities, getWarehouses) work without a key.

06

Errors and rate limits

The API returns HTTP 200 even for business-level errors — operation status lives in the Result field of the response body. Network errors (400/401/500) indicate a malformed request or auth problem.

ResultMeaningAction
0OKOperation succeeded
1Auth failedCheck the ApiKey
2Validation errorRead the Message field
3Not foundResource (order, SKU) does not exist
9InternalContact support with the request ID

Rate limits: 60 requests/minute per ApiKey. Bulk report endpoints (ReportSklad, ReportMoveProduct) are capped at 1/min. Exceeding the limit returns HTTP 429.

07

Developer FAQ

Is there a sandbox environment?

Yes. Your integration manager issues a separate staging ApiKey. Same URL, different key — data does not touch the production warehouse.

How do I subscribe to status webhooks?

Register a URL in your integration profile. We POST JSON on every status change. Retries 3x with exponential backoff.

Do you support GraphQL?

No, REST only. GraphQL is not on the roadmap — 18 methods do not justify the overhead.

Is there an official SDK?

Not yet. Node.js and PHP libraries are on the 2026 Q3 roadmap. Current workaround: your own HTTP client around the spec.

How do I integrate Shopify / WooCommerce?

Write a middleware service that listens to Shopify/Woo order webhooks, transforms payloads into our schema, and calls AddOrder. Status updates flow back to Shopify via its Fulfillment API. Typical build: one week for a senior dev.

Do you support batch operations?

Partially — AddOrder accepts an array of up to 100 orders per request. For higher volumes, queue on your side with rate-limit control.

Ready to outsource
logistics?

Leave your number — we call back within 15 minutes with a custom quote

✓ Free consultation✓ No obligations✓ Contract in 1 day
📞 Call 💬 Telegram