Create Parcel
With this service, you can create a parcel in the Inex Group system. The service automatically checks if a parcel with the specified tracking code exists. If the parcel already exists and belongs to your vendor, the existing parcel information will be returned (200 OK). If the parcel is registered by another vendor, an error will be returned (403 Forbidden).
POST
/integrators/parcels/create
Parameters
| Field | Type | Required | Description |
|---|---|---|---|
| clientReferenceId | string | No | Your internal ID (e.g. order number). Maximum 255 characters. |
| waybillNumbers | array | Yes | Array of tracking codes. |
| waybillNumbers.* | string | Yes | Tracking code. Maximum 255 characters. |
| status | string | Yes |
Parcel status. Values: created (Created), received (Received in WH), pending (Dispatched).
|
| weight | integer | Conditional | Weight in grams. Required if status is received or pending. |
| width / height / length | integer | No | Dimensions in millimeters. |
| shipmentType | string | Yes |
Shipment type. Values: byAir, bySea, byTrain, byRoad.
|
| deliveryType | string | Yes |
Reception type. Values: pickupInStore (Takeout from branch), delivery (Home delivery).
|
| pickupLocationId | string | Conditional |
Branch ID. Required if deliveryType is pickupInStore.
See branches service |
| receiver.personalId | string | Yes | Receiver's personal number. Maximum 255 characters. |
| receiver.firstname | string | Yes | Receiver's first name. Maximum 255 characters. |
| receiver.lastname | string | Yes | Receiver's last name. Maximum 255 characters. |
| receiver.phoneNumber | string | Yes | Receiver's phone number. Maximum 255 characters. |
| receiver.email | string | No | Receiver's email. Maximum 255 characters. |
| deliveryDetail.city | string | Conditional | City name. Required if deliveryType is delivery. Maximum 255 characters. |
| deliveryDetail.address | string | Conditional | Exact address. Required if deliveryType is delivery. Maximum 1000 characters. |
| deliveryDetail.district | string | No | District. Maximum 255 characters. |
| declaration.sourceUrl | string (url) | Yes | Source of purchase (website). |
| declaration.currencyCode | string | Yes | Currency code (e.g. USD, EUR, GEL). Exactly 3 characters. |
| declaration.fileUids | array (uuids) | No |
Uploaded file IDs (invoice).
See file upload service |
| declaration.items.*.description | string | Yes | Item description. Maximum 5000 characters. |
| declaration.items.*.price | integer | Yes | Item price in cents/tetri (e.g. 10.50$ = 1050). Minimum 0. |
| declaration.items.*.quantity | integer | Yes | Quantity. Minimum 1. |
| declaration.items.*.categoryName | string | No | Category name. Maximum 255 characters. |
| declaration.items.*.pictureUrl | string (url) | No | Item image link. Maximum 5000 characters. |
Note on address detection (home delivery)
If you choose courier delivery (delivery), it is advisable to indicate the district. In case the district is empty or invalid, the system will try to automatically detect the appropriate district from the provided address text. If detection fails or the detected district is not served by a branch, the system will return a 400 status with a corresponding message.
Response Structure 200 OK
| Attribute | Type | Value | Description |
|---|---|---|---|
| data.weight | integer | 1551 | Parcel weight in grams. |
| data.length | integer | 318 | Parcel width in millimeters. |
| data.height | integer | 684 | Parcel height in millimeters. |
| data.width | integer | 489 | Parcel length in millimeters. |
| data.status | string | disposed | Parcel status. Possible options: created, received, pending, arrived, takeout, returned, confiscated, lost, dropOfDate, damaged, compensated, notCompensated, returnToSellerIsInProgress, disposed |
| data.senderCountry.name | string | United States | Sender country name in Latin. |
| data.senderCountry.code | string | US | Sender country code - ISO 3166-1 alpha-2. |
| data.receiverCity.name | string | Tbilisi | Receiver city name in Latin. |
| data.receiverPickupLocation.name | string | Isani | Receiver branch name in Latin. |
| data.receiverPickupLocation.address | string | Isani, Atskuri Street #45 | Receiver branch address in Latin. |
| data.receiverPickupLocation.phone | string | (0322) 2222222 | Receiver branch phone number. |
| data.receiverPickupLocation.latitude | float | 56.961032 | Receiver branch coordinates. |
| data.receiverPickupLocation.longitude | float | 94.614571 | Receiver branch coordinates. |
| data.receiverPickupLocation.postalCode | string | Isani | Receiver branch postal code. |
| data.waybillNumbers | array | [] | Array of parcel waybill numbers. |
| data.waybillNumbers.* | string | eqweqwecwrekjewqionwqe.ewqe1eqq | Parcel waybill number. |
Status Descriptions
Possible Responses
| Code | Description |
|---|---|
| 200 OK | Parcel object. |
| 400 Bad Request | Logical error, for example: a duplicate tracking code was detected or the district/branch could not be identified from the address. |
| 404 Not Found | Parcel with the specified waybill number was not found. |
| 403 Forbidden | You do not have permission to perform this operation |
| 500 Server Error | An error occurred while creating the parcel, see the attached message |
cURL (Pickup in Store)
BASH
curl -X POST https://api-staging.inex.ge/api/v1/integrators/parcels/create \
-H "Authorization: Bearer {TOKEN}" \
-H "Content-Type: application/json" \
-d '{
"clientReferenceId": "ORDER-12345",
"waybillNumbers": ["TRACK-001"],
"status": "received",
"weight": 500,
"shipmentType": "byAir",
"deliveryType": "pickupInStore",
"pickupLocationId": "LOC-123",
"receiver": {
"personalId": "01024085678",
"firstname": "John",
"lastname": "Doe",
"phoneNumber": "555123456",
"email": "john@example.com"
},
"declaration": {
"sourceUrl": "https://amazon.com",
"currencyCode": "USD",
"items": [
{
"price": 1000,
"quantity": 1,
"description": "T-Shirt"
}
]
}
}'
cURL (Courier Delivery)
BASH
curl -X POST https://api-staging.inex.ge/api/v1/integrators/parcels/create \
-H "Authorization: Bearer {TOKEN}" \
-H "Content-Type: application/json" \
-d '{
"waybillNumbers": ["TRACK-DEL-001"],
"status": "received",
"weight": 1200,
"shipmentType": "byAir",
"deliveryType": "delivery",
"deliveryDetail": {
"city": "Tbilisi",
"address": "Chavchavadze Ave 1",
"district": "Vake"
},
"receiver": {
"personalId": "01024085678",
"firstname": "Jane",
"lastname": "Doe",
"phoneNumber": "555987654"
},
"declaration": {
"sourceUrl": "https://ebay.com",
"currencyCode": "USD",
"items": [
{
"price": 5000,
"quantity": 1,
"description": "Sneakers"
}
]
}
}'
Response (200 OK)
JSON Response
JSON
{
"data": {
"weight": 500,
"length": 0,
"height": 0,
"width": 0,
"status": "received",
"senderCountry": {
"name": "United States",
"code": "US"
},
"deliveryType": "pickupInStore",
"receiverCity": {
"name": "Tbilisi"
},
"receiverPickupLocation": {
"name": "Vake Branch",
"address": "Chavchavadze Ave 33",
"phone": "(032) 2222222",
"latitude": 41.7151,
"longitude": 44.7271,
"postalCode": "0179"
},
"waybillNumbers": [
"TRACK-001"
]
}
}
Error Response (403 - Exists for other vendor)
JSON Response
JSON
{
"errors": {
"general": [
"Parcel is already processed by another vendor."
]
},
"message": "error"
}
Error Response (422 - Validation)
JSON Response
JSON
{
"errors": {
"pickupLocationId": [
"The pickup location id field is required when delivery type is pickupInStore."
]
},
"message": "error"
}