API reference
Orders
Send your customers' orders and follow them to delivery.
/ordersList orderspost/ordersCreate an orderget/orders/{id}Order (parcel) detail with status history and trackingget/orders/{id}/trackingCustomer-safe tracking: stage, courier, tracking number and a dated timelinepost/orders/{id}/cancelCancel before it is packedpost/orders/{id}/payPay an AWAITING_FUNDS order from your walletpost/orders/{id}/simulateSandbox only: move a test order to a stage and receive its webhookList orders
/ordersParameters
statusquery · string | One or more stages, comma-separated |
externalOrderIdquery · string | |
fromquery · string | |
toquery · string | |
limitquery · integer | Default 50 |
cursorquery · string |
|
Example request
curl "https://backend.markitmall.com/dropship/v1/orders" \
-H "Authorization: Bearer mk_test_XXXX:sk_test_XXXX"Response 200
datarequired | — |
nextCursorrequiredstring | null | — |
Example response
{
"data": [
{
"id": "66f0c2a1b2c3d4e5f6a7b8c9",
"externalOrderId": "66f0c2a1b2c3d4e5f6a7b8c9",
"externalOrderName": "string",
"parcel": {
"part": 0,
"of": 0
},
"orderNumber": "string",
"status": "AWAITING_FUNDS",
"paymentMode": "COD",
"codAmount": 1500,
"wholesaleTotal": 0,
"shippingCost": 1500,
"margin": 0,
"marginStatus": "NONE",
"marginReleaseAt": "2026-10-06T10:00:00.000Z",
"rtoCharge": 0,
"returnCredit": 0,
"items": [
{}
],
"tracking": {
"number": "string",
"courier": "string",
"url": "https://example.com/markitmall/webhook"
},
"cancellationReason": "string",
"mode": "live",
"confirmation": "PENDING",
"prepaidAmount": 1500,
"resaleTotal": 0,
"shippingCharged": 0,
"platformFee": {
"basis": "margin",
"percent": 0,
"amount": 1500
},
"expectedMargin": 0,
"rtoReserve": 0,
"customer": {},
"fundsDeadline": "2026-10-06T10:00:00.000Z",
"history": [
{
"status": "string",
"at": "2026-10-06T10:00:00.000Z",
"note": "string"
}
],
"createdAt": "2026-10-06T10:00:00.000Z"
}
],
"nextCursor": "string"
}Errors: 401 — the body is always { error: { code, message, details } }.
Create an order
/ordersItems from different MarkitMall stores ship as separate parcels; the response lists them under parcels and the top-level amounts are the totals.
Parameters
Idempotency-Keyrequiredheader · string | Your order id works well |
Request body
externalOrderIdrequiredstring · max 100 chars | Your order id; unique per account |
externalOrderNamestring | — |
paymentModerequiredenum | How YOUR customer paid. COD: our courier collects. PREPAID: you pay us from your wallet.
|
customerrequiredobject | — |
customer.namerequiredstring | — |
customer.phonerequiredstring | — |
customer.addressrequiredstring | — |
customer.cityrequiredstring | — |
customer.provincestring | — |
customer.postalCodestring | — |
itemsrequiredobject[] · min 1 items · max 50 items | — |
items[].variantIdstring | Our variant id (or product id for products without options) |
items[].externalVariantIdstring | Your variant id, mapped through POST /imports |
items[].externalLineIdstring | — |
items[].skustring | — |
items[].quantityrequiredinteger · ≥ 1 · ≤ 100 | — |
items[].resalePricerequiredinteger | Per unit, what your customer pays |
shippingChargedinteger · default 0 | Delivery charge you showed your customer |
senderNamestring | Printed as the parcel's sender; defaults to your brand |
notesstring · max 500 chars | — |
Example request
curl -X POST "https://backend.markitmall.com/dropship/v1/orders" \
-H "Authorization: Bearer mk_test_XXXX:sk_test_XXXX" \
-H "Idempotency-Key: order-1042" \
-H "Content-Type: application/json" \
-d '{
"externalOrderId": "1042",
"paymentMode": "COD",
"customer": {
"name": "Ali Raza",
"phone": "03001234567",
"address": "House 12, Street 4, DHA Phase 5",
"city": "Lahore",
"province": "Punjab"
},
"items": [
{
"variantId": "66f0c2a1b2c3d4e5f6a7b8c9",
"quantity": 1,
"resalePrice": 1500
}
],
"shippingCharged": 200,
"senderName": "Ali Gadgets",
"notes": "Call before delivery"
}'Response 201 — Created (or replayed — see the Idempotent-Replayed header)
idstring | — |
externalOrderIdstring | — |
orderNumberstring | null | — |
statusstring | — |
paymentModeenum | —
|
modeenum | —
|
codAmountinteger | — |
prepaidAmountinteger | — |
wholesaleTotalinteger | — |
shippingCostinteger | — |
platformFeeobject | Platform fee on this parcel: |
platformFee.basisenum | —
|
platformFee.percentnumber | — |
platformFee.amountinteger | — |
expectedMargininteger | COD: credited after delivery, the fee already taken off. Prepaid: minus the platform fee (debited then). |
rtoReserveinteger | — |
fundsDeadlinestring | null · date-time | — |
parcels | — |
Example response
{
"id": "66f0c2a1b2c3d4e5f6a7b8c9",
"externalOrderId": "66f0c2a1b2c3d4e5f6a7b8c9",
"orderNumber": "string",
"status": "string",
"paymentMode": "COD",
"mode": "live",
"codAmount": 1500,
"prepaidAmount": 1500,
"wholesaleTotal": 0,
"shippingCost": 1500,
"platformFee": {
"basis": "margin",
"percent": 0,
"amount": 1500
},
"expectedMargin": 0,
"rtoReserve": 0,
"fundsDeadline": "2026-10-06T10:00:00.000Z",
"parcels": [
{
"id": "66f0c2a1b2c3d4e5f6a7b8c9",
"externalOrderId": "66f0c2a1b2c3d4e5f6a7b8c9",
"externalOrderName": "string",
"parcel": {
"part": 0,
"of": 0
},
"orderNumber": "string",
"status": "AWAITING_FUNDS",
"paymentMode": "COD",
"codAmount": 1500,
"wholesaleTotal": 0,
"shippingCost": 1500,
"margin": 0,
"marginStatus": "NONE",
"marginReleaseAt": "2026-10-06T10:00:00.000Z",
"rtoCharge": 0,
"returnCredit": 0,
"items": [
{}
],
"tracking": {
"number": "string",
"courier": "string",
"url": "https://example.com/markitmall/webhook"
},
"cancellationReason": "string",
"mode": "live",
"confirmation": "PENDING",
"prepaidAmount": 1500,
"resaleTotal": 0,
"shippingCharged": 0,
"platformFee": {
"basis": "margin",
"percent": 0,
"amount": 1500
},
"expectedMargin": 0,
"rtoReserve": 0,
"customer": {},
"fundsDeadline": "2026-10-06T10:00:00.000Z",
"history": [
{
"status": "string",
"at": "2026-10-06T10:00:00.000Z",
"note": "string"
}
],
"createdAt": "2026-10-06T10:00:00.000Z"
}
]
}Errors: 400, 401, 403, 404, 409, 422, 429 — the body is always { error: { code, message, details } }.
Order (parcel) detail with status history and tracking
/orders/{id}Parameters
idrequiredpath · string |
Example request
curl "https://backend.markitmall.com/dropship/v1/orders/{id}" \
-H "Authorization: Bearer mk_test_XXXX:sk_test_XXXX"Response 200
idstring | — |
externalOrderIdstring | — |
externalOrderNamestring | null | — |
parcelobject | — |
parcel.partinteger | — |
parcel.ofinteger | — |
orderNumberstring | null | — |
status | — |
paymentModeenum | —
|
codAmountinteger | — |
wholesaleTotalinteger | — |
shippingCostinteger | — |
margininteger | — |
marginStatusenum | —
|
marginReleaseAtstring | null · date-time | — |
rtoChargeinteger | — |
returnCreditinteger | — |
itemsobject[] | — |
trackingobject | null | — |
tracking.numberstring | — |
tracking.courierstring | — |
tracking.urlstring | null | — |
cancellationReasonstring | null | — |
modeenum | —
|
confirmationenum | —
|
prepaidAmountinteger | — |
resaleTotalinteger | — |
shippingChargedinteger | — |
platformFeeobject | Platform fee on this parcel: |
platformFee.basisenum | —
|
platformFee.percentnumber | — |
platformFee.amountinteger | — |
expectedMargininteger | COD: credited after delivery, the fee already taken off. Prepaid: minus the platform fee. |
rtoReserveinteger | — |
customerobject | — |
fundsDeadlinestring | null · date-time | — |
historyobject[] | — |
history[].statusstring | — |
history[].atstring · date-time | — |
history[].notestring | null | — |
createdAtstring · date-time | — |
Example response
{
"id": "66f0c2a1b2c3d4e5f6a7b8c9",
"externalOrderId": "66f0c2a1b2c3d4e5f6a7b8c9",
"externalOrderName": "string",
"parcel": {
"part": 0,
"of": 0
},
"orderNumber": "string",
"status": "AWAITING_FUNDS",
"paymentMode": "COD",
"codAmount": 1500,
"wholesaleTotal": 0,
"shippingCost": 1500,
"margin": 0,
"marginStatus": "NONE",
"marginReleaseAt": "2026-10-06T10:00:00.000Z",
"rtoCharge": 0,
"returnCredit": 0,
"items": [
{}
],
"tracking": {
"number": "string",
"courier": "string",
"url": "https://example.com/markitmall/webhook"
},
"cancellationReason": "string",
"mode": "live",
"confirmation": "PENDING",
"prepaidAmount": 1500,
"resaleTotal": 0,
"shippingCharged": 0,
"platformFee": {
"basis": "margin",
"percent": 0,
"amount": 1500
},
"expectedMargin": 0,
"rtoReserve": 0,
"customer": {},
"fundsDeadline": "2026-10-06T10:00:00.000Z",
"history": [
{
"status": "string",
"at": "2026-10-06T10:00:00.000Z",
"note": "string"
}
],
"createdAt": "2026-10-06T10:00:00.000Z"
}Errors: 401, 404 — the body is always { error: { code, message, details } }.
Customer-safe tracking: stage, courier, tracking number and a dated timeline
/orders/{id}/trackingBuilt for your own "Track my order" page. White-label: no supplier store, no wholesale prices and no MarkitMall link — show it to your customer as is.
Parameters
idrequiredpath · string |
Example request
curl "https://backend.markitmall.com/dropship/v1/orders/{id}/tracking" \
-H "Authorization: Bearer mk_test_XXXX:sk_test_XXXX"Response 200
idstring | — |
externalOrderIdstring | — |
orderNumberstring | — |
parcelobject | — |
parcel.partinteger | — |
parcel.ofinteger | — |
statusenum | —
|
statusLabelstring | — |
paymentModeenum | —
|
amountToCollectinteger | Cash the courier collects; 0 for prepaid |
senderstring | The name printed on the parcel |
trackingobject | null | — |
tracking.numberstring | — |
tracking.courierstring | — |
shippedAtstring | null · date-time | — |
deliveredAtstring | null · date-time | — |
cancelledReasonstring | null | — |
stepsobject[] | Received → Confirmed → Being packed → On the way → Delivered, plus Cancelled/Returned when it ended there |
steps[].statusstring | — |
steps[].labelstring | — |
steps[].doneboolean | — |
steps[].atstring | null · date-time | — |
historyobject[] | — |
history[].statusstring | — |
history[].labelstring | — |
history[].atstring · date-time | — |
updatedAtstring · date-time | — |
Example response
{
"id": "66f0c2a1b2c3d4e5f6a7b8c9",
"externalOrderId": "66f0c2a1b2c3d4e5f6a7b8c9",
"orderNumber": "string",
"parcel": {
"part": 0,
"of": 0
},
"status": "AWAITING_FUNDS",
"statusLabel": "string",
"paymentMode": "COD",
"amountToCollect": 1500,
"sender": "string",
"tracking": {
"number": "string",
"courier": "string"
},
"shippedAt": "2026-10-06T10:00:00.000Z",
"deliveredAt": "2026-10-06T10:00:00.000Z",
"cancelledReason": "string",
"steps": [
{
"status": "string",
"label": "string",
"done": true,
"at": "2026-10-06T10:00:00.000Z"
}
],
"history": [
{
"status": "string",
"label": "string",
"at": "2026-10-06T10:00:00.000Z"
}
],
"updatedAt": "2026-10-06T10:00:00.000Z"
}Errors: 401, 404 — the body is always { error: { code, message, details } }.
Cancel before it is packed
/orders/{id}/cancelParameters
idrequiredpath · string |
Request body (optional)
reasonstring · max 300 chars | — |
Example request
curl -X POST "https://backend.markitmall.com/dropship/v1/orders/{id}/cancel" \
-H "Authorization: Bearer mk_test_XXXX:sk_test_XXXX" \
-H "Content-Type: application/json" \
-d '{
"reason": "Customer changed their mind"
}'Response 200
idstring | — |
externalOrderIdstring | — |
externalOrderNamestring | null | — |
parcelobject | — |
parcel.partinteger | — |
parcel.ofinteger | — |
orderNumberstring | null | — |
status | — |
paymentModeenum | —
|
codAmountinteger | — |
wholesaleTotalinteger | — |
shippingCostinteger | — |
margininteger | — |
marginStatusenum | —
|
marginReleaseAtstring | null · date-time | — |
rtoChargeinteger | — |
returnCreditinteger | — |
itemsobject[] | — |
trackingobject | null | — |
tracking.numberstring | — |
tracking.courierstring | — |
tracking.urlstring | null | — |
cancellationReasonstring | null | — |
modeenum | —
|
confirmationenum | —
|
prepaidAmountinteger | — |
resaleTotalinteger | — |
shippingChargedinteger | — |
platformFeeobject | Platform fee on this parcel: |
platformFee.basisenum | —
|
platformFee.percentnumber | — |
platformFee.amountinteger | — |
expectedMargininteger | COD: credited after delivery, the fee already taken off. Prepaid: minus the platform fee. |
rtoReserveinteger | — |
customerobject | — |
fundsDeadlinestring | null · date-time | — |
historyobject[] | — |
history[].statusstring | — |
history[].atstring · date-time | — |
history[].notestring | null | — |
createdAtstring · date-time | — |
Example response
{
"id": "66f0c2a1b2c3d4e5f6a7b8c9",
"externalOrderId": "66f0c2a1b2c3d4e5f6a7b8c9",
"externalOrderName": "string",
"parcel": {
"part": 0,
"of": 0
},
"orderNumber": "string",
"status": "AWAITING_FUNDS",
"paymentMode": "COD",
"codAmount": 1500,
"wholesaleTotal": 0,
"shippingCost": 1500,
"margin": 0,
"marginStatus": "NONE",
"marginReleaseAt": "2026-10-06T10:00:00.000Z",
"rtoCharge": 0,
"returnCredit": 0,
"items": [
{}
],
"tracking": {
"number": "string",
"courier": "string",
"url": "https://example.com/markitmall/webhook"
},
"cancellationReason": "string",
"mode": "live",
"confirmation": "PENDING",
"prepaidAmount": 1500,
"resaleTotal": 0,
"shippingCharged": 0,
"platformFee": {
"basis": "margin",
"percent": 0,
"amount": 1500
},
"expectedMargin": 0,
"rtoReserve": 0,
"customer": {},
"fundsDeadline": "2026-10-06T10:00:00.000Z",
"history": [
{
"status": "string",
"at": "2026-10-06T10:00:00.000Z",
"note": "string"
}
],
"createdAt": "2026-10-06T10:00:00.000Z"
}Errors: 401, 404, 409 — the body is always { error: { code, message, details } }.
Pay an AWAITING_FUNDS order from your wallet
/orders/{id}/payParameters
idrequiredpath · string |
Example request
curl -X POST "https://backend.markitmall.com/dropship/v1/orders/{id}/pay" \
-H "Authorization: Bearer mk_test_XXXX:sk_test_XXXX"Response 200
idstring | — |
externalOrderIdstring | — |
externalOrderNamestring | null | — |
parcelobject | — |
parcel.partinteger | — |
parcel.ofinteger | — |
orderNumberstring | null | — |
status | — |
paymentModeenum | —
|
codAmountinteger | — |
wholesaleTotalinteger | — |
shippingCostinteger | — |
margininteger | — |
marginStatusenum | —
|
marginReleaseAtstring | null · date-time | — |
rtoChargeinteger | — |
returnCreditinteger | — |
itemsobject[] | — |
trackingobject | null | — |
tracking.numberstring | — |
tracking.courierstring | — |
tracking.urlstring | null | — |
cancellationReasonstring | null | — |
modeenum | —
|
confirmationenum | —
|
prepaidAmountinteger | — |
resaleTotalinteger | — |
shippingChargedinteger | — |
platformFeeobject | Platform fee on this parcel: |
platformFee.basisenum | —
|
platformFee.percentnumber | — |
platformFee.amountinteger | — |
expectedMargininteger | COD: credited after delivery, the fee already taken off. Prepaid: minus the platform fee. |
rtoReserveinteger | — |
customerobject | — |
fundsDeadlinestring | null · date-time | — |
historyobject[] | — |
history[].statusstring | — |
history[].atstring · date-time | — |
history[].notestring | null | — |
createdAtstring · date-time | — |
Example response
{
"id": "66f0c2a1b2c3d4e5f6a7b8c9",
"externalOrderId": "66f0c2a1b2c3d4e5f6a7b8c9",
"externalOrderName": "string",
"parcel": {
"part": 0,
"of": 0
},
"orderNumber": "string",
"status": "AWAITING_FUNDS",
"paymentMode": "COD",
"codAmount": 1500,
"wholesaleTotal": 0,
"shippingCost": 1500,
"margin": 0,
"marginStatus": "NONE",
"marginReleaseAt": "2026-10-06T10:00:00.000Z",
"rtoCharge": 0,
"returnCredit": 0,
"items": [
{}
],
"tracking": {
"number": "string",
"courier": "string",
"url": "https://example.com/markitmall/webhook"
},
"cancellationReason": "string",
"mode": "live",
"confirmation": "PENDING",
"prepaidAmount": 1500,
"resaleTotal": 0,
"shippingCharged": 0,
"platformFee": {
"basis": "margin",
"percent": 0,
"amount": 1500
},
"expectedMargin": 0,
"rtoReserve": 0,
"customer": {},
"fundsDeadline": "2026-10-06T10:00:00.000Z",
"history": [
{
"status": "string",
"at": "2026-10-06T10:00:00.000Z",
"note": "string"
}
],
"createdAt": "2026-10-06T10:00:00.000Z"
}Errors: 401, 404, 409, 422 — the body is always { error: { code, message, details } }.
Sandbox only: move a test order to a stage and receive its webhook
/orders/{id}/simulateParameters
idrequiredpath · string |
Request body
statusrequiredenum | —
|
Example request
curl -X POST "https://backend.markitmall.com/dropship/v1/orders/{id}/simulate" \
-H "Authorization: Bearer mk_test_XXXX:sk_test_XXXX" \
-H "Content-Type: application/json" \
-d '{
"status": "CONFIRMED"
}'Response 200
idstring | — |
externalOrderIdstring | — |
externalOrderNamestring | null | — |
parcelobject | — |
parcel.partinteger | — |
parcel.ofinteger | — |
orderNumberstring | null | — |
status | — |
paymentModeenum | —
|
codAmountinteger | — |
wholesaleTotalinteger | — |
shippingCostinteger | — |
margininteger | — |
marginStatusenum | —
|
marginReleaseAtstring | null · date-time | — |
rtoChargeinteger | — |
returnCreditinteger | — |
itemsobject[] | — |
trackingobject | null | — |
tracking.numberstring | — |
tracking.courierstring | — |
tracking.urlstring | null | — |
cancellationReasonstring | null | — |
modeenum | —
|
confirmationenum | —
|
prepaidAmountinteger | — |
resaleTotalinteger | — |
shippingChargedinteger | — |
platformFeeobject | Platform fee on this parcel: |
platformFee.basisenum | —
|
platformFee.percentnumber | — |
platformFee.amountinteger | — |
expectedMargininteger | COD: credited after delivery, the fee already taken off. Prepaid: minus the platform fee. |
rtoReserveinteger | — |
customerobject | — |
fundsDeadlinestring | null · date-time | — |
historyobject[] | — |
history[].statusstring | — |
history[].atstring · date-time | — |
history[].notestring | null | — |
createdAtstring · date-time | — |
Example response
{
"id": "66f0c2a1b2c3d4e5f6a7b8c9",
"externalOrderId": "66f0c2a1b2c3d4e5f6a7b8c9",
"externalOrderName": "string",
"parcel": {
"part": 0,
"of": 0
},
"orderNumber": "string",
"status": "AWAITING_FUNDS",
"paymentMode": "COD",
"codAmount": 1500,
"wholesaleTotal": 0,
"shippingCost": 1500,
"margin": 0,
"marginStatus": "NONE",
"marginReleaseAt": "2026-10-06T10:00:00.000Z",
"rtoCharge": 0,
"returnCredit": 0,
"items": [
{}
],
"tracking": {
"number": "string",
"courier": "string",
"url": "https://example.com/markitmall/webhook"
},
"cancellationReason": "string",
"mode": "live",
"confirmation": "PENDING",
"prepaidAmount": 1500,
"resaleTotal": 0,
"shippingCharged": 0,
"platformFee": {
"basis": "margin",
"percent": 0,
"amount": 1500
},
"expectedMargin": 0,
"rtoReserve": 0,
"customer": {},
"fundsDeadline": "2026-10-06T10:00:00.000Z",
"history": [
{
"status": "string",
"at": "2026-10-06T10:00:00.000Z",
"note": "string"
}
],
"createdAt": "2026-10-06T10:00:00.000Z"
}Errors: 401, 404, 422 — the body is always { error: { code, message, details } }.
