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). Use parcelType to choose the parcel type: online (online parcel, the default) or internalShipment (domestic shipment within Georgia). Which types your operator may create is set by an Inex Group administrator; requesting a type that is not allowed returns 403 Forbidden.
POST
/integrators/parcels/create
Parameters
| Field | Type | Required | Description |
|---|---|---|---|
| parcelType | string | No |
Parcel type. When omitted, an online parcel is created. Use only a type allowed for your operator, otherwise 403 is returned. Values: online (online parcel), internalShipment (internal shipment, Georgia → Georgia).internalShipment: the sender branch is the branch attached to your operator, shipping is always by road (byRoad) and the tariff is the one attached to your operator. The receiver branch / courier address must be in Georgia. All other fields (receiver, declaration, delivery) are the same as for an online parcel. |
| 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.Ignored for internalShipment — shipping is always byRoad. |
| senderCountryCode | string | Conditional | Sender country code (ISO 3166-1 alpha-2, e.g. CN, TR, US). Required when your operator has no country attached; otherwise the country attached to the operator is used. The country must be active for online parcels. Must not be sent with parcelType internalShipment (422) — the sender country is always Georgia. |
| deliveryType | string | Yes |
Reception type. Values: pickupInStore (Takeout from branch), delivery (Home delivery).
|
| pickupLocationId | string | Conditional |
Branch code (locationCode). Required if deliveryType is pickupInStore and prohibited if deliveryType is delivery.
See branches service |
| receiver.inexUserId | string (uuid) | Conditional |
Identifier of a customer signed in with INEX SSO (the id_token's sub). The receiver is given either in full (personalId, firstname, lastname, phoneNumber) or by this field alone. No account is created.
See INEX SSO |
| receiver.personalId | string | Conditional | Receiver's personal number. Maximum 255 characters. Required unless receiver.inexUserId is sent; optional with inexUserId and written only when the account has no personal number. |
| receiver.firstname | string | Conditional | Receiver's first name. Maximum 255 characters. Required unless receiver.inexUserId is sent; forbidden together with inexUserId. |
| receiver.lastname | string | Conditional | Receiver's last name. Maximum 255 characters. Required unless receiver.inexUserId is sent; forbidden together with inexUserId. |
| receiver.phoneNumber | string | Conditional | Receiver's phone number. Maximum 255 characters. Required unless receiver.inexUserId is sent; forbidden together with inexUserId. |
| receiver.email | string | No | Receiver's email. Maximum 255 characters. Forbidden together with inexUserId. |
| deliveryDetail | object | Conditional | Address object. Required if deliveryType is delivery and prohibited in every other case. |
| 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. |
| deliveryDetail.latitude | number | No | Address latitude. |
| deliveryDetail.longitude | number | No | Address longitude. |
| 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 | array | Yes | Array of items. At least 1 element. |
| 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, stored, form4, temporarilySuspended |
| data.subStatus | string|null | null | Parcel sub-status. May be null. Possible values: readyForTerminal, goingToTerminal, arrivedAtTerminalStored, readyFromTerminal, comingFromTerminal, arrivedAtBranch, readyForCustoms, goingToCustoms, arrivedAtCustomsStored, readyFromCustoms, comingFromCustoms, readyForTerminalTakeout |
| data.parcelType | string | internalShipment | Parcel type: online or internalShipment. |
| data.deliveryType | string | pickupInStore | Takeout type: pickupInStore (pick up from branch) or delivery (courier). |
| 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.locationCode | string | 200001 | Branch code. This is exactly the value to send as pickupLocationId when creating a parcel. |
| 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. |
| 422 Unprocessable | Validation error, e.g. no receiver given, an unknown receiver.inexUserId, or one sent together with other receiver fields. |
| 404 Not Found | Parcel with the specified waybill number was not found. |
| 403 Forbidden | You do not have permission to perform this operation, e.g. the requested parcelType is not allowed for your operator, or for internalShipment your operator has no tariff or sender branch attached. |
| 500 Server Error | An error occurred while creating the parcel, see the attached message |
cURL (Pickup in Store)
BASH
curl -X POST https://api.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",
"senderCountryCode": "CN",
"deliveryType": "pickupInStore",
"pickupLocationId": "200001",
"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.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",
"senderCountryCode": "TR",
"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"
}
]
}
}'
cURL (Internal Shipment)
BASH
curl -X POST https://api.inex.ge/api/v1/integrators/parcels/create \
-H "Authorization: Bearer {TOKEN}" \
-H "Content-Type: application/json" \
-d '{
"parcelType": "internalShipment",
"clientReferenceId": "ORDER-77881",
"waybillNumbers": ["SHOP-000123"],
"status": "received",
"weight": 1500,
"shipmentType": "byRoad",
"deliveryType": "pickupInStore",
"pickupLocationId": "200001",
"receiver": {
"personalId": "01024085678",
"firstname": "Nino",
"lastname": "Beridze",
"phoneNumber": "555123456"
},
"declaration": {
"sourceUrl": "https://shop.example.ge",
"currencyCode": "GEL",
"items": [
{
"price": 2500,
"quantity": 1,
"description": "Headphones"
}
]
}
}'
Response (200 OK)
JSON Response
JSON
{
"data": {
"weight": 500,
"length": 0,
"height": 0,
"width": 0,
"status": "received",
"subStatus": null,
"parcelType": "online",
"senderCountry": {
"name": "United States",
"code": "US"
},
"deliveryType": "pickupInStore",
"receiverCity": {
"name": "Tbilisi"
},
"receiverPickupLocation": {
"locationCode": "200001",
"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 (403 - Parcel type not allowed)
JSON Response
JSON
{
"errors": {
"general": [
"You are not allowed to create parcels of type internalShipment, please contact administrator."
]
},
"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"
}
cURL (Receiver by INEX SSO)
BASH
curl -X POST https://api.inex.ge/api/v1/integrators/parcels/create \
-H "Authorization: Bearer {TOKEN}" \
-H "Content-Type: application/json" \
-d '{
"waybillNumbers": ["TRACK-002"],
"status": "created",
"shipmentType": "byAir",
"senderCountryCode": "CN",
"deliveryType": "pickupInStore",
"pickupLocationId": "200001",
"receiver": {
"inexUserId": "9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d"
},
"declaration": {
"sourceUrl": "https://shop.example.com",
"currencyCode": "USD",
"items": [{ "price": 2500, "quantity": 1, "description": "T-Shirt" }]
}
}'