Base URLs:
- Production:
https://api.pindelivery.rs
- Development:
https://dev.api.pindelivery.rs
All endpoints require Authorization: Bearer <JWT> header unless noted otherwise. Some endpoints also accept ?API_KEY=<key> query parameter for client integrations.
| Method |
Path |
Auth |
Description |
| POST |
/auth/client/login |
None |
Client login (username + password) |
| GET |
/auth/courier/authenticate?deviceID= |
None |
Courier device auth |
| GET |
/auth/warehouse/authenticate?deviceID= |
None |
Warehouseman device auth |
| GET |
/auth/staff/login?deviceID= |
None |
Staff login (tries Courier then Warehouse) |
| GET |
/auth/profile |
Client |
Get client profile |
| PATCH |
/auth/client/editProfile?clientID= |
Admin/Owner/Client |
Update client profile |
| PATCH |
/auth/client/webhook?clientID= |
Admin/Owner/Client |
Update client webhook config |
| GET |
/auth/getClientByID?clientID= |
Admin/Owner/Client |
Get client by ID |
| GET |
/auth/staff/getProfile |
Courier/Warehouseman |
Get staff profile |
| GET |
/auth/requestPasswordChange?verificationData=&account=&verificationType= |
None |
Request password reset |
| PATCH |
/auth/verifyCode?pin=&verificationData=&verificationType= |
None |
Verify reset code |
| PATCH |
/auth/finalizePasswordChange?account=&password=&requestID= |
None |
Set new password |
| POST |
/auth/packageShop/login |
None |
Package shop staff login |
| Method |
Path |
Auth |
Description |
| POST |
/package/create |
Client/Admin/Owner |
Create package |
| POST |
/package/createMultiple |
Client/Admin/Owner |
Bulk create packages |
| PATCH |
/package/edit?packageID= |
Admin/Owner/Client |
Edit package |
| GET |
/package/getBy |
Admin/Owner/Client |
Get packages with filters |
| GET |
/package/getByID?packageID= |
Any |
Get single package |
| GET |
/package/previewPackage?packageID= |
Any |
Preview package (mobile) |
| PATCH |
/package/intent |
Any |
Execute intent (status change) |
| POST |
/package/generateReport |
Admin/Owner |
Generate PDF report (basic) |
| POST |
/package/generateFilteredReport |
Admin/Owner |
Generate PDF report (full filters) |
| GET |
/package/track?trackingNumber= |
None |
Public tracking endpoint |
| POST |
/package/importFromExcel |
Client/Admin/Owner |
Import packages from Excel |
Query parameters for filtering:
startDate, endDate - date range
status - comma-separated statuses
clientID - filter by client
courierID - filter by courier
keyword - search in name, phone, address, tracking number
vendor - filter by vendor
direction - SEND or RETURN
page, perPage - pagination
PATCH /package/intent
{
"packageID": "ObjectID hex string",
"intent": "IntentName",
"courierID": "optional - for courier assignment",
"note": "optional - for delivery notes"
}
Available intents vary by current package status and user role. Use previewPackage to get AvailableIntents for a given package.
| Method |
Path |
Auth |
Description |
| GET |
/admin/getClients |
Admin/Owner |
List all clients |
| POST |
/admin/createClient |
Admin/Owner |
Create client |
| PATCH |
/admin/editClient?clientID= |
Admin/Owner |
Edit client |
| DELETE |
/admin/deleteClient?clientID= |
Admin/Owner |
Delete client |
| GET |
/admin/getCouriers |
Admin/Owner |
List all couriers |
| POST |
/admin/createCourier |
Admin/Owner |
Create courier |
| PATCH |
/admin/editCourier?courierID= |
Admin/Owner |
Edit courier |
| GET |
/admin/getAdmins |
Owner |
List admins |
| POST |
/admin/createAdmin |
Owner |
Create admin |
| PATCH |
/admin/editProfile |
Admin/Owner |
Edit admin profile |
| GET |
/admin/getLogs |
Admin/Owner |
Get action logs |
| Method |
Path |
Auth |
Description |
| GET |
/geo/getZones |
Admin/Owner |
Get delivery zones |
| POST |
/geo/createZone |
Admin/Owner |
Create zone (polygon) |
| PATCH |
/geo/editZone?zoneID= |
Admin/Owner |
Edit zone |
| DELETE |
/geo/deleteZone?zoneID= |
Admin/Owner |
Delete zone |
| GET |
/geo/getMunicipalities |
Any |
Get municipalities |
| GET |
/geo/getCities |
Any |
Get cities |
| PATCH |
/package/setZone?packageID= |
Admin/Owner |
Auto-resolve zone for package |
| Method |
Path |
Auth |
Description |
| GET |
/billing/getByClient?clientID=&month=&year= |
Admin/Owner/Client |
Get billing data |
| POST |
/billing/generate |
Admin/Owner |
Generate billing for period |
| Method |
Path |
Auth |
Description |
| POST |
/b2b/delegate |
Admin/Owner |
Delegate package to partner |
| POST |
/b2b/receive |
None (API key) |
Receive delegated package webhook |
| PATCH |
/b2b/statusUpdate |
None (API key) |
Receive status update from partner |
| Method |
Path |
Auth |
Description |
| POST |
/webhook/instagram |
None (verified by signature) |
Instagram chatbot webhook |
| GET |
/webhook/instagram |
None |
Instagram webhook verification |
Success responses return HTTP 200 with JSON body.
Error responses return HTTP 400/401/403 with:
{
"message": "Error description in Serbian"
}