Get Shipment Packages With Cursor (getShipmentPackagesStream)
getShipmentPackagesStream
getShipmentPackagesStream is an endpoint that allows you to fetch order packages in a cursor-based (stream) manner.
IMPORTANT
The existing
getShipmentPackagesendpoint is not optimized for scanning large data sets.For this endpoint:
- Maximum accessible record count: 10,000
- High-volume data fetching can cause load on the system
- Rate limit restrictions can be hit more quickly
Therefore, getShipmentPackagesStream is recommended for the following scenarios:
✔ Large data scanning (full scan) ✔ Periodic synchronization (polling / cron) ✔ Exporting all orders
✅ The response structure is the same; only pagination-related fields will not be returned. (totalElements, totalPages, page, size) ❗ The pagination mechanism has changed (cursor-based)
📦 Data Scope & Date Restrictions
- Data from the last 3 months is accessible through this endpoint.
❗ The time range is limited to a maximum of 2 weeks (14 days):
- If
lastModifiedStartDateandlastModifiedEndDateare not provided → the system automatically limits to the last 2 weeks.
❗ Response Difference
The response structure of the getShipmentPackagesStream endpoint is the same as the existing endpoint; only the following fields are no longer returned:
totalElementstotalPagespageInstead, the following fields are used:
hasMorenextCursorsizeTherefore, integrations using page-based pagination need to migrate to a cursor-based structure.
Migration Note
- Instead of
page++→ usenextCursor- Instead of checking
totalPages→ checkhasMore
Stream Service vs. Existing Service
| Feature | Existing Service (getShipmentPackages) | Stream Service (getShipmentPackagesStream) |
|---|---|---|
| Use Case | Small / instant queries | Large data scanning & synchronization |
| Pagination | Page-based (page, totalPages) | Cursor-based (nextCursor, hasMore) |
| Maximum Data Access | ⚠️ Limited to 10,000 records | ✅ High-limit streaming |
| Large Data Performance | ⚠️ Limited | ✅ Optimized |
How Does Cursor-Based Pagination Work?
The cursor mechanism differs from the classic page logic:
- Instead of
page, a stream pointer (cursor) is used - Each request continues from where the previous one left off
- Provides stable and efficient progression for large data sets
Flow
- On the first request,
nextCursoris not sent - If
hasMore = truein the response, continue - The
nextCursorvalue is retrieved and used in the next request - When
hasMore = false, the stream is complete
⚠️ Critical Rules
nextCursoris an opaque value → it must not be parsed or modified.- The filters that were initially set when using the same cursor value must not be changed
- If the filter changes → a 400 Bad Request is returned
- Sorting is fixed; results are returned in DESC order by Last Modified Date
- To work with a new filter → a new stream must be started
Recommended Usage:
- The recommended usage is to send requests at minimum 5-second intervals.
Endpoint
PROD
GET https://apigw.trendyol.com/integration/order/sellers/{sellerId}/orders/streamSTAGE
GET https://stageapigw.trendyol.com/integration/order/sellers/{sellerId}/orders/streamExample Service Response
{
"hasMore": true,
"nextCursor": "609ca79b-1fdf-4c4e-a814-498ce9c1c039",
"size": 50,
"content": [
{
"shipmentAddress": {
"id": 11111111,
"firstName": "Trendyol",
"lastName": "Customer",
"company": "",
"address1": "DSM Grup Danışmanlık İletişim ve Satış Ticaret A.Ş. Maslak Mahallesi Saat Sokak Spine Tower No:5 İç Kapı No:19 Sarıyer/İstanbul",
"address2": "",
"city": "İstanbul",
"cityCode": 34,
"district": "Sarıyer",
"districtId": 54,
"countyId": 0,
"countyName": "",
"shortAddress": "",
"stateName": "",
"addressLines": {
"addressLine1": "",
"addressLine2": ""
},
"postalCode": "34200",
"countryCode": "TR",
"neighborhoodId": 21111,
"neighborhood": "Maslak Mahallesi",
"phone": null,
"fullAddress": "DSM Grup Danışmanlık İletişim ve Satış Ticaret A.Ş. Maslak Mahallesi Saat Sokak Spine Tower No:5 İç Kapı No:19 Sarıyer/İstanbul",
"fullName": "Trendyol Customer"
},
"orderNumber": "10654411111",
"packageGrossAmount": 498.90,
"packageSellerDiscount": 0.00,
"packageTyDiscount": 0.00,
"packageTotalDiscount": 0.00,
"discountDisplays": [
{
"displayName": "20% Discount in Cart",
"discountAmount": 100
}
],
"taxNumber": null,
"invoiceAddress": {
"id": 11111112,
"firstName": "Trendyol",
"lastName": "Customer",
"company": "",
"address1": "DSM Grup Danışmanlık İletişim ve Satış Ticaret A.Ş. Maslak Mahallesi Saat Sokak Spine Tower No:5 İç Kapı No:19 Sarıyer/İstanbul",
"address2": "",
"city": "İstanbul",
"cityCode": 0,
"district": "Sarıyer",
"districtId": 54,
"countyId": 0,
"countyName": "",
"shortAddress": "",
"stateName": "",
"addressLines": {
"addressLine1": "",
"addressLine2": ""
},
"postalCode": "",
"countryCode": "TR",
"neighborhoodId": 0,
"phone": null,
"latitude": "11.111111",
"longitude": "22.222222",
"fullAddress": "DSM Grup Danışmanlık İletişim ve Satış Ticaret A.Ş. Maslak Mahallesi Saat Sokak Spine Tower No:5 İç Kapı No:19 Sarıyer/İstanbul",
"fullName": "Trendyol Customer",
"taxOffice": "Company of OMS's Tax Office",
"taxNumber": "Company of OMS's Tax Number"
},
"customerFirstName": "Trendyol",
"customerEmail": "[email protected]",
"customerId": 1451111111,
"supplierId": 2738,
"customerLastName": "Customer",
"shipmentPackageId": 3330111111,
"cargoTrackingNumber": 7280027504111111,
"cargoTrackingLink": "https://tracking.trendyol.com/?id=111111111-1111-1111-1111-11111111",
"cargoSenderNumber": "210090111111",
"cargoProviderName": "Trendyol Express",
"lines": [
{
"quantity": 1,
"salesCampaignId": 11,
"productSize": "One Size",
"stockCode": "111111",
"productName": "Bird and Flower Patterned Tray - Green / Gold - 49 cm, 01SYM134, One Size",
"contentId": 1239111111,
"productOrigin": "TR",
"sellerId": 2738,
"lineGrossAmount": 498.90,
"lineTotalDiscount": 0.00,
"lineSellerDiscount": 0.00,
"lineTyDiscount": 0.00,
"discountDetails": [
{
"lineItemPrice": 498.90,
"lineItemSellerDiscount": 0.00,
"lineItemTyDiscount": 0.00
}
],
"currencyCode": "TRY",
"productColor": "Green",
"lineId": 4765111111,
"vatRate": 20.00,
"barcode": "8683772071724",
"orderLineItemStatusName": "Delivered",
"lineUnitPrice": 498.90,
"fastDeliveryOptions": [],
"productCategoryId": 2710,
"commission": 13,
"businessUnit": "Sports Shoes",
"cancelledBy": "",
"cancelReason": "",
"cancelReasonCode": 0
}
],
"orderDate": 1762253333685,
"identityNumber": "11111111111",
"currencyCode": "TRY",
"packageHistories": [
{
"createdDate": 1762242537624,
"status": "Created"
}
],
"shipmentPackageStatus": "Delivered",
"status": "Delivered",
"whoPays": 1,
"deliveryType": "normal",
"timeSlotId": 0,
"estimatedDeliveryStartDate": 1762858136000,
"estimatedDeliveryEndDate": 1763030936000,
"packageTotalPrice": 498.90,
"deliveryAddressType": "Shipment",
"agreedDeliveryDate": 1762376340000,
"fastDelivery": false,
"originShipmentDate": 1762242537619,
"lastModifiedDate": 1762865408581,
"commercial": false,
"fastDeliveryType": "",
"deliveredByService": false,
"warehouseId": 372389,
"invoiceLink": "https://efatura01.evidea.com/11111111111",
"micro": true,
"giftBoxRequested": false,
"3pByTrendyol": false,
"etgbNo": "25341453EX025864",
"etgbDate": 1762646400000,
"containsDangerousProduct": false,
"cargoDeci": 10,
"isCod": false,
"createdBy": "order-creation",
"originPackageIds": null,
"hsCode": "711111000000",
"shipmentNumber": 606404425
}
]
}Response Field Descriptions
| Field | Description |
|---|---|
hasMore | Indicates whether there are more records to fetch |
nextCursor | Opaque cursor value to use in the next request |
size | Number of returned data |
packageGrossAmount | Total gross amount of the package (without discounts) |
packageSellerDiscount | Seller discount amount |
packageTyDiscount | May be populated when commercial is true, will return 0 when false |
packageTotalDiscount | Total discount amount (packageSellerDiscount + packageTyDiscount) |
shipmentPackageId | Package ID |
stockCode | Seller stock code |
sellerId | Seller ID |
lineGrossAmount | Unit gross price of the product (without discounts) |
lineTotalDiscount | Unit total discount (lineSellerDiscount + lineTyDiscount) |
lineSellerDiscount | Unit seller discount (average of items) |
lineTyDiscount | Unit Trendyol discount (average of items) |
discountDetails | Separate discount details for each unit (item) |
lineItemPrice | Discounted unit price (lineGrossAmount - lineItemSellerDiscount - lineItemTyDiscount) |
lineItemSellerDiscount | Seller discount applied to this item |
lineItemTyDiscount | Trendyol discount applied to this item |
lineId | Order line item ID |
vatRate | VAT rate |
commission | Commission rate |
cancelledBy | Cancelling party |
cancelReason | Cancellation reason |
cancelReasonCode | Cancellation reason code |
lineUnitPrice | Net unit price (lineGrossAmount - lineSellerDiscount - lineTyDiscount) |
packageTotalPrice | Total net price of the package (discounted) |
whoPays | Returns 1 if it is a seller agreement; the field is not returned if it is a Trendyol agreement |
invoiceAddress.company | May be empty for GULF region orders |
invoiceAddress.district | May be empty for GULF region orders |
invoiceAddress.postalCode | May be empty for GULF region orders |
invoiceAddress.taxOffice | Will not be returned in the body when there is no corporate invoice (if commercial=false) |
invoiceAddress.taxNumber | Will not be returned in the body when there is no corporate invoice (if commercial=false) |
shipmentAddress.countyId | Will be provided for the CEE region |
shipmentAddress.countyName | Will be provided for the CEE region |
shipmentAddress.shortAddress | Will be provided for the GULF region |
shipmentAddress.stateName | Will be provided for the GULF region |
etgbNo | The etgbNo field will return information when micro is true |
etgbDate | The etgbDate field will return information when micro is true |
containsDangerousProduct | In micro export orders, if there is any dangerous product in the package such as batteries, perfume, etc., it will return true |
createdBy | Indicates how the package was created; can be "order-creation", "split", "cancel", or "transfer" |
originPackageIds | This field is populated after cancel or split operations and provides the packageId of the original package after these operations |
hsCode | This field will be returned as a string for micro orders |
Updated 3 days ago