From your first request to a connected shipping workflow.
Authenticate, create shipments and labels, and track your transport. Build with concrete JSON examples from the Customer Integration v2 Postman collection.
https://api.mmcore.techJSON8 REQUESTSYour first integration
- Import the collection
Set baseUrl, authUsername and authPassword as collection variables in Postman. The download contains no populated credentials.
- Obtain an API key
Run GET /auth. The Postman script saves the returned apikey in the apiKey variable.
- Configure your shipment
Replace example addresses and carrier_id / carrier_option_id with values for your account. DO=Y returns label content directly.
Create an API key
Authenticate using AUTH_USER and AUTH_PW headers. The test script stores apikey in the apiKey collection variable when present.
/authHeaders
| Name | Value |
|---|---|
AUTH_USER | {{authUsername}} |
AUTH_PW | {{authPassword}} |
curl --request GET "https://api.mmcore.tech/auth" \
--header "AUTH_USER: ${MMCORE_AUTH_USER}" \
--header "AUTH_PW: ${MMCORE_AUTH_PASSWORD}"Response examples
200 · GET /auth - Create API key
{
"state": "true",
"message": "APIKey gegenereerd.",
"Errors": "",
"accessByHeader": "Y",
"id": "EXAMPLE_CUSTOMER_ID",
"id2": "EXAMPLE_ACCOUNT_ID",
"name": "Example Customer",
"apikey": "EXAMPLE_API_KEY",
"DatumTijd": "2025-07-01 15:00:00"
}Create a shipment
Create a shipment using a JSON body without customs/commercial invoice shipment_details.
/action/{{apiKey}}/101?o=JSONHeaders
| Name | Value |
|---|---|
Content-Type | application/json |
Query parameters
| Name | Example value |
|---|---|
o | JSON |
curl --request POST "https://api.mmcore.tech/action/${MMCORE_API_KEY}/101?o=JSON" \
--header 'Content-Type: application/json' \
--data-binary @request.json{
"created_by": "CustomerMiddleware",
"print_phone_number": "+12025550123",
"carrier_id": 9999,
"carrier_option_id": 0,
"signature_required": false,
"number_of_packages": 1,
"weight": 1.2,
"length": 10,
"width": 30,
"height": 20,
"is_company": true,
"company_name": "Example Company",
"first_name": "John",
"last_name": "Doe",
"email": "john.doe@example.com",
"phone_number": "+12025550123",
"content": "Consumer goods",
"street": "Example Street",
"house_number": "1",
"postal_code": "1234AB",
"city": "Amsterdam",
"country": "NL",
"reference": "ORDER-10001",
"reference2": "CUSTOMER-20002",
"return_label": false
}Body fields and example types
Types are derived from the collection example. The collection does not include a complete required/optional validation specification.
| Field | Type |
|---|---|
created_by | string |
print_phone_number | string |
carrier_id | number |
carrier_option_id | number |
signature_required | boolean |
number_of_packages | number |
weight | number |
length | number |
width | number |
height | number |
is_company | boolean |
company_name | string |
first_name | string |
last_name | string |
email | string |
phone_number | string |
content | string |
street | string |
house_number | string |
postal_code | string |
city | string |
country | string |
reference | string |
reference2 | string |
return_label | boolean |
Response examples
200 · 200 OK - DO=Y direct label response
{
"status": true,
"labels": [
{
"barcode": "EXAMPLE_TRACKING_NUMBER",
"labeltype": "pdf",
"encodeType": "base64",
"content": "Base64Label",
"carrierId": "9999",
"carrierOptionId": "0",
"shipmentId": "EXAMPLE_SHIPMENT_ID"
}
],
"shipmentID": "EXAMPLE_SHIPMENT_ID",
"SubLogID": "EXAMPLE_SUBLOG_ID"
}200 · 200 OK - DO=N Only shipment creation
{
"state": "true",
"message": "Shipment created.",
"Errors": "",
"ActionName": 101,
"carrierId": "9999",
"carrierOptionId": "0",
"logId": "EXAMPLE_LOG_ID",
"parcelInformation": {
"MinL": "15.000",
"MaxL": "200.000",
"DBMinB": "10.000",
"DBMaxB": "80.000",
"DBMinH": "0.000",
"DBMaxH": "60.000",
"DBMinGewicht": "0.000",
"DBMaxGewicht": "31.000",
"DBMaxVolume": "200",
"DBMaxOmtrek": "300"
},
"Pricing": null,
"trace": "https://example.com/tracking/EXAMPLE_TRACKING_NUMBER",
"zpl": "",
"ZendingID": 123456,
"Barcode": "EXAMPLE_TRACKING_NUMBER",
"url": "https://example.com/labels/EXAMPLE_SHIPMENT_ID"
}Shipment with customs details
Create a shipment using a JSON body with customs/commercial invoice shipment_details.
/action/{{apiKey}}/101?o=JSONHeaders
| Name | Value |
|---|---|
Content-Type | application/json |
Query parameters
| Name | Example value |
|---|---|
o | JSON |
curl --request POST "https://api.mmcore.tech/action/${MMCORE_API_KEY}/101?o=JSON" \
--header 'Content-Type: application/json' \
--data-binary @request.json{
"created_by": "CustomerMiddleware",
"print_phone_number": "+12025550123",
"carrier_id": 9999,
"carrier_option_id": 0,
"signature_required": false,
"number_of_packages": 1,
"weight": 1.2,
"length": 10,
"width": 30,
"height": 20,
"is_company": false,
"company_name": "",
"first_name": "John",
"last_name": "Doe",
"email": "john.doe@example.com",
"phone_number": "+12025550123",
"content": "Consumer goods",
"street": "Example Street",
"house_number": "1",
"postal_code": "10001",
"city": "New York",
"country": "US",
"reference": "ORDER-10001",
"reference2": "CUSTOMER-20002",
"return_label": false,
"shipment_details": {
"invoice_number": "INV-10001",
"invoice_date": "2026-05-06",
"invoice_terms": "DDP",
"invoice_currency": "EUR",
"invoice_reason": "Sale",
"sender": {
"invoice_sender_company_name": "Example Seller B.V.",
"invoice_sender_name": "Jane Seller",
"invoice_sender_street": "Seller Street",
"invoice_sender_house_number": "10",
"invoice_sender_postal_code": "1234AB",
"invoice_sender_city": "Amsterdam",
"invoice_sender_country": "NL",
"invoice_sender_email": "seller@example.com",
"invoice_sender_phone_number": "+12025550123",
"invoice_sender_type": "Y",
"invoice_sender_vat_number": "NL000000000B00",
"invoice_sender_eori_number": "NL000000000"
},
"recipient": {
"invoice_recipient_company_name": "",
"invoice_recipient_name": "John Doe",
"invoice_recipient_street": "Example Street",
"invoice_recipient_house_number": "1",
"invoice_recipient_postal_code": "10001",
"invoice_recipient_city": "New York",
"invoice_recipient_country": "US",
"invoice_recipient_email": "john.doe@example.com",
"invoice_recipient_phone_number": "+12025550123",
"invoice_recipient_type": "N",
"invoice_recipient_vat_number": "",
"invoice_recipient_eori_number": ""
},
"invoice_items": [
{
"productcode": "SKU-123456",
"product": "Cotton T-shirt",
"quantity": 1,
"tariffcode": "610910",
"country_origin": "CN",
"weight": 0.2,
"itemprice": 14.9
}
]
}
}Body fields and example types
Types are derived from the collection example. The collection does not include a complete required/optional validation specification.
| Field | Type |
|---|---|
created_by | string |
print_phone_number | string |
carrier_id | number |
carrier_option_id | number |
signature_required | boolean |
number_of_packages | number |
weight | number |
length | number |
width | number |
height | number |
is_company | boolean |
company_name | string |
first_name | string |
last_name | string |
email | string |
phone_number | string |
content | string |
street | string |
house_number | string |
postal_code | string |
city | string |
country | string |
reference | string |
reference2 | string |
return_label | boolean |
shipment_details | object |
shipment_details.invoice_number | string |
shipment_details.invoice_date | string |
shipment_details.invoice_terms | string |
shipment_details.invoice_currency | string |
shipment_details.invoice_reason | string |
shipment_details.sender | object |
shipment_details.sender.invoice_sender_company_name | string |
shipment_details.sender.invoice_sender_name | string |
shipment_details.sender.invoice_sender_street | string |
shipment_details.sender.invoice_sender_house_number | string |
shipment_details.sender.invoice_sender_postal_code | string |
shipment_details.sender.invoice_sender_city | string |
shipment_details.sender.invoice_sender_country | string |
shipment_details.sender.invoice_sender_email | string |
shipment_details.sender.invoice_sender_phone_number | string |
shipment_details.sender.invoice_sender_type | string |
shipment_details.sender.invoice_sender_vat_number | string |
shipment_details.sender.invoice_sender_eori_number | string |
shipment_details.recipient | object |
shipment_details.recipient.invoice_recipient_company_name | string |
shipment_details.recipient.invoice_recipient_name | string |
shipment_details.recipient.invoice_recipient_street | string |
shipment_details.recipient.invoice_recipient_house_number | string |
shipment_details.recipient.invoice_recipient_postal_code | string |
shipment_details.recipient.invoice_recipient_city | string |
shipment_details.recipient.invoice_recipient_country | string |
shipment_details.recipient.invoice_recipient_email | string |
shipment_details.recipient.invoice_recipient_phone_number | string |
shipment_details.recipient.invoice_recipient_type | string |
shipment_details.recipient.invoice_recipient_vat_number | string |
shipment_details.recipient.invoice_recipient_eori_number | string |
shipment_details.invoice_items | array |
shipment_details.invoice_items[].productcode | string |
shipment_details.invoice_items[].product | string |
shipment_details.invoice_items[].quantity | number |
shipment_details.invoice_items[].tariffcode | string |
shipment_details.invoice_items[].country_origin | string |
shipment_details.invoice_items[].weight | number |
shipment_details.invoice_items[].itemprice | number |
Response examples
200 · 200 OK - DO=Y direct label response
{
"status": true,
"labels": [
{
"barcode": "EXAMPLE_TRACKING_NUMBER",
"labeltype": "pdf",
"encodeType": "base64",
"content": "Base64Label",
"carrierId": "9999",
"carrierOptionId": "0",
"shipmentId": "EXAMPLE_SHIPMENT_ID"
}
],
"shipmentID": "EXAMPLE_SHIPMENT_ID",
"SubLogID": "EXAMPLE_SUBLOG_ID"
}200 · 200 OK - DO=N Only shipment creation
{
"state": "true",
"message": "Shipment created.",
"Errors": "",
"ActionName": 101,
"carrierId": "9999",
"carrierOptionId": "0",
"logId": "EXAMPLE_LOG_ID",
"parcelInformation": {
"MinL": "15.000",
"MaxL": "200.000",
"DBMinB": "10.000",
"DBMaxB": "80.000",
"DBMinH": "0.000",
"DBMaxH": "60.000",
"DBMinGewicht": "0.000",
"DBMaxGewicht": "31.000",
"DBMaxVolume": "200",
"DBMaxOmtrek": "300"
},
"Pricing": null,
"trace": "https://example.com/tracking/EXAMPLE_TRACKING_NUMBER",
"zpl": "",
"ZendingID": 123456,
"Barcode": "EXAMPLE_TRACKING_NUMBER",
"url": "https://example.com/labels/EXAMPLE_SHIPMENT_ID"
}Create shipment and label
Use DO=Y when the response should return direct label content. When communicating with the developers the best way to help find an solution as fast as possible is to send over the SubLogID.
/action/{{apiKey}}/101?o=JSON&DO=YHeaders
| Name | Value |
|---|---|
Content-Type | application/json |
Query parameters
| Name | Example value |
|---|---|
o | JSON |
DO | Y |
curl --request POST "https://api.mmcore.tech/action/${MMCORE_API_KEY}/101?o=JSON&DO=Y" \
--header 'Content-Type: application/json' \
--data-binary @request.json{
"created_by": "CustomerMiddleware",
"print_phone_number": "+12025550123",
"carrier_id": 9999,
"carrier_option_id": 0,
"signature_required": false,
"number_of_packages": 1,
"weight": 1.2,
"length": 10,
"width": 30,
"height": 20,
"is_company": true,
"company_name": "Example Company",
"first_name": "John",
"last_name": "Doe",
"email": "john.doe@example.com",
"phone_number": "+12025550123",
"content": "Consumer goods",
"street": "Example Street",
"house_number": "1",
"postal_code": "1234AB",
"city": "Amsterdam",
"country": "NL",
"reference": "ORDER-10001",
"reference2": "CUSTOMER-20002",
"return_label": false
}Body fields and example types
Types are derived from the collection example. The collection does not include a complete required/optional validation specification.
| Field | Type |
|---|---|
created_by | string |
print_phone_number | string |
carrier_id | number |
carrier_option_id | number |
signature_required | boolean |
number_of_packages | number |
weight | number |
length | number |
width | number |
height | number |
is_company | boolean |
company_name | string |
first_name | string |
last_name | string |
email | string |
phone_number | string |
content | string |
street | string |
house_number | string |
postal_code | string |
city | string |
country | string |
reference | string |
reference2 | string |
return_label | boolean |
Response examples
200 · 200 OK - DO=Y direct label response
{
"status": true,
"labels": [
{
"barcode": "EXAMPLE_TRACKING_NUMBER",
"labeltype": "pdf",
"encodeType": "base64",
"content": "Base64Label",
"carrierId": "9999",
"carrierOptionId": "0",
"shipmentId": "EXAMPLE_SHIPMENT_ID"
}
],
"shipmentID": "EXAMPLE_SHIPMENT_ID",
"SubLogID": "EXAMPLE_SUBLOG_ID"
}200 · 200 OK - DO=N Only shipment creation
{
"state": "true",
"message": "Shipment created.",
"Errors": "",
"ActionName": 101,
"carrierId": "9999",
"carrierOptionId": "0",
"logId": "EXAMPLE_LOG_ID",
"parcelInformation": {
"MinL": "15.000",
"MaxL": "200.000",
"DBMinB": "10.000",
"DBMaxB": "80.000",
"DBMinH": "0.000",
"DBMaxH": "60.000",
"DBMinGewicht": "0.000",
"DBMaxGewicht": "31.000",
"DBMaxVolume": "200",
"DBMaxOmtrek": "300"
},
"Pricing": null,
"trace": "https://example.com/tracking/EXAMPLE_TRACKING_NUMBER",
"zpl": "",
"ZendingID": 123456,
"Barcode": "EXAMPLE_TRACKING_NUMBER",
"url": "https://example.com/labels/EXAMPLE_SHIPMENT_ID"
}Track a shipment
Retrieve tracking information for one barcode, box, or waybill. Query parameters: flight_tracking_setting=only|include|exclude, lang=en|nl, type=barcode|waybill|box, tracking_details=minimal|lastStatus|full.
/get_tracking_information/{{apiKey}}/{{trackingCode}}?flight_tracking_setting=include&lang=en&type=barcode&tracking_details=fullQuery parameters
| Name | Example value |
|---|---|
flight_tracking_setting | include |
lang | en |
type | barcode |
tracking_details | full |
flight_tracking_setting: only / include / excludelang: en / nltype: barcode / waybill / boxtracking_details: minimal / lastStatus / full
curl --request GET "https://api.mmcore.tech/get_tracking_information/${MMCORE_API_KEY}/${TRACKING_CODE}?flight_tracking_setting=include&lang=en&type=barcode&tracking_details=full"Response examples
200 · GET /get_tracking_information/{{apiKey}}/{{trackingCode}} - Single lookup
{
"state": true,
"numberOfItems": 1,
"notFound": [],
"items": {
"EXAMPLE_TRACKING_NUMBER": [
{
"itemNumber": 0,
"code": "9000",
"description": "Delivered",
"location": "Filipstad",
"dateTime": "2026-06-19 06:07:00"
},
{
"itemNumber": 1,
"code": "5001",
"description": "Parcel is out for delivery to recipient",
"location": "Karlstad",
"dateTime": "2026-06-18 20:45:00"
},
{
"itemNumber": 2,
"code": "3000",
"description": "Parcel has reached a depot",
"location": "Karlstad",
"dateTime": "2026-06-18 20:45:00"
},
{
"itemNumber": 3,
"code": "2006",
"description": "The cargo is delivered in the destination country",
"location": "",
"dateTime": "2026-06-17 16:45:00"
},
{
"itemNumber": 4,
"code": "2002",
"description": "The logistics provider has loaded the cargo.",
"location": "",
"dateTime": "2026-06-16 11:13:00"
},
{
"itemNumber": 5,
"code": "99",
"description": "Label has been created",
"location": "",
"dateTime": "2026-06-04 17:32:18"
}
]
},
"lastStatus": {
"EXAMPLE_TRACKING_NUMBER": {
"itemNumber": 0,
"code": "9000",
"description": "Delivered",
"location": "Filipstad",
"dateTime": "2026-06-19 06:07:00"
}
},
"flightTracking": []
}Bulk tracking
Retrieve tracking information for multiple barcodes using a JSON array request body.
/get_tracking_information/{{apiKey}}?flight_tracking_setting=include&lang=en&type=barcode&tracking_details=fullHeaders
| Name | Value |
|---|---|
Content-Type | application/json |
Query parameters
| Name | Example value |
|---|---|
flight_tracking_setting | include |
lang | en |
type | barcode |
tracking_details | full |
flight_tracking_setting: only / include / excludelang: en / nltype: barcode / waybill / boxtracking_details: minimal / lastStatus / full
curl --request GET "https://api.mmcore.tech/get_tracking_information/${MMCORE_API_KEY}?flight_tracking_setting=include&lang=en&type=barcode&tracking_details=full" \
--header 'Content-Type: application/json' \
--data-binary @request.json[
"EXAMPLE_TRACKING_NUMBER_1",
"EXAMPLE_TRACKING_NUMBER_2"
]Body fields and example types
Types are derived from the collection example. The collection does not include a complete required/optional validation specification.
| Field | Type |
|---|---|
body | array |
body[] | string |
Response examples
200 · GET /get_tracking_information/{{apiKey}} - Bulk barcode lookup
{
"state": true,
"numberOfItems": 2,
"notFound": [],
"items": {
"EXAMPLE_TRACKING_NUMBER_1": [
{
"itemNumber": 0,
"code": "9000",
"description": "Delivered",
"location": "Malmo",
"dateTime": "2026-06-24 01:59:00"
},
{
"itemNumber": 1,
"code": "5001",
"description": "Parcel is out for delivery to recipient",
"location": "Malmo",
"dateTime": "2026-06-23 16:22:00"
},
{
"itemNumber": 2,
"code": "3000",
"description": "Parcel has reached a depot",
"location": "Early Bird Malmo",
"dateTime": "2026-06-23 14:18:00"
},
{
"itemNumber": 3,
"code": "2006",
"description": "The cargo is delivered in the destination country",
"location": "",
"dateTime": "2026-06-23 11:10:00"
},
{
"itemNumber": 4,
"code": "2002",
"description": "The logistics provider has loaded the cargo.",
"location": "",
"dateTime": "2026-06-19 15:58:00"
},
{
"itemNumber": 5,
"code": "99",
"description": "Label has been created",
"location": "",
"dateTime": "2026-06-12 19:13:30"
}
],
"EXAMPLE_TRACKING_NUMBER_2": [
{
"itemNumber": 0,
"code": "9000",
"description": "Delivered",
"location": "Hassleholm",
"dateTime": "2026-06-24 03:39:00"
},
{
"itemNumber": 1,
"code": "3000",
"description": "Parcel has reached a depot",
"location": "Vaxjo",
"dateTime": "2026-06-23 16:15:00"
},
{
"itemNumber": 2,
"code": "5001",
"description": "Parcel is out for delivery to recipient",
"location": "Malmo",
"dateTime": "2026-06-23 16:15:00"
},
{
"itemNumber": 3,
"code": "2006",
"description": "The cargo is delivered in the destination country",
"location": "",
"dateTime": "2026-06-23 11:10:00"
},
{
"itemNumber": 4,
"code": "2002",
"description": "The logistics provider has loaded the cargo.",
"location": "",
"dateTime": "2026-06-19 15:58:00"
},
{
"itemNumber": 5,
"code": "99",
"description": "Label has been created",
"location": "",
"dateTime": "2026-06-12 19:04:53"
}
]
},
"lastStatus": {
"EXAMPLE_TRACKING_NUMBER_1": {
"itemNumber": 0,
"code": "9000",
"description": "Delivered",
"location": "Malmo",
"dateTime": "2026-06-24 01:59:00"
},
"EXAMPLE_TRACKING_NUMBER_2": {
"itemNumber": 0,
"code": "9000",
"description": "Delivered",
"location": "Hassleholm",
"dateTime": "2026-06-24 03:39:00"
}
},
"flightTracking": []
}Upload a manifest
Upload manifest records as a JSON array. Use ?ls=Y only when the AWB manifest should be locked after successful validation and this has been agreed operationally.
/post_manifest_data/{{apiKey}}Headers
| Name | Value |
|---|---|
Content-Type | application/json |
curl --request POST "https://api.mmcore.tech/post_manifest_data/${MMCORE_API_KEY}" \
--header 'Content-Type: application/json' \
--data-binary @request.json[
{
"transportType": "AWB",
"transportNumber": "999-12345678",
"packageId": "1",
"parcelId": "PARCEL-123456",
"name": "John Doe",
"address": "Example Street 1",
"address2": "",
"zipcode": "10001",
"city": "New York",
"country": "US",
"phone": "+12025550123",
"email": "john.doe@example.com",
"sellerName": "Example Seller B.V.",
"sellerAddress": "Seller Street 10",
"sellerZipcode": "1234AB",
"sellerCity": "Amsterdam",
"sellerCountry": "NL",
"sku": "SKU-123456",
"content": "Cotton T-shirt",
"hsCode": "610910",
"quantity": "1",
"itemPrice": "14.90",
"itemWeight": "0.20",
"parcelWeight": "0.30",
"parcelPrice": "14.90",
"currency": "EUR",
"taxType": "IOSS",
"taxIdent": "IM0000000000",
"grossWeight": "152.75"
}
]Body fields and example types
Types are derived from the collection example. The collection does not include a complete required/optional validation specification.
| Field | Type |
|---|---|
body | array |
[].transportType | string |
[].transportNumber | string |
[].packageId | string |
[].parcelId | string |
[].name | string |
[].address | string |
[].address2 | string |
[].zipcode | string |
[].city | string |
[].country | string |
[].phone | string |
[].email | string |
[].sellerName | string |
[].sellerAddress | string |
[].sellerZipcode | string |
[].sellerCity | string |
[].sellerCountry | string |
[].sku | string |
[].content | string |
[].hsCode | string |
[].quantity | string |
[].itemPrice | string |
[].itemWeight | string |
[].parcelWeight | string |
[].parcelPrice | string |
[].currency | string |
[].taxType | string |
[].taxIdent | string |
[].grossWeight | string |
Response examples
The collection does not include a response example for this route.
Upload an AWB pre-alert
Upload AWB PDF base64, ETA, AWB number, and gross weight after the manifest exists.
/post_pre_alert/{{apiKey}}Headers
| Name | Value |
|---|---|
Content-Type | application/json |
curl --request POST "https://api.mmcore.tech/post_pre_alert/${MMCORE_API_KEY}" \
--header 'Content-Type: application/json' \
--data-binary @request.json{
"airWaybillPdfBase64": "JVBERi0xLjQKJcTl8uXrp...truncated...==",
"estimatedTimeOfArrival": "2026-05-28",
"airWaybillNumber": "999-12345678",
"grossWeight": 152.75
}Body fields and example types
Types are derived from the collection example. The collection does not include a complete required/optional validation specification.
| Field | Type |
|---|---|
airWaybillPdfBase64 | string |
estimatedTimeOfArrival | string |
airWaybillNumber | string |
grossWeight | number |
Response examples
200 · 200 OK - success
{
"ok": true,
"message": "Validated and saved",
"estimatedTimeOfArrival": "2026-05-28",
"airWaybillNumber": "999-12345678",
"submittedGrossWeight": 152.75,
"boxes": 18,
"totalParcels": 342,
"totalManifestWeight": 150.22,
"iossManifestLocked": true,
"carrier": {
"name": "Example Cargo Carrier",
"awbPrefix": "999"
}
}Handle responses correctly
Response shapes differ by operation. Check the HTTP status and the relevant response fields: state and Errors for authentication and standard shipment responses, status for direct labels, state and notFound for tracking, and ok for pre-alerts. Some examples use a string for state; others use a boolean.
Keep SubLogID from direct label responses for support. Preserve field casing: shipmentID, shipmentId and ZendingID are distinct example fields. The collection does not specify a global error catalog, retry policy or idempotency guarantee; do not blindly repeat shipment requests after a timeout.
Discuss your integration ↗