Skip to main content

Teams

17 API calls in this section.

List Teams

Delivery & Last-Mile / Teams
GET/delivery/teams?page=1&limit=20&active=true&search=&tenant_id=&language=en

List all teams for the tenant with member counts.

Send a bearer token in the Authorization header for an authenticated OnDi user session.
Request
curl
1curl --request GET "$ONDI_BASE_URL/delivery/teams?page=1&limit=20&active=true&search=&tenant_id=&language=en" \2  --header "Authorization: Bearer {{access_token}}"

Query parameters

pageOptional
query string

1

Page number

limitOptional
query string

20

Items per page (max 100)

activeOptional
query string

true

Filter by active status (true/false)

searchOptional
query string

Search by name or code

tenant_idOptional
query string

Tenant ID

languageOptional
query string

en

Preferred language

Headers

AuthorizationOptional
header string

Bearer {{access_token}}

Responses

Success200OK
Response body
json
1{2  "success": true,3  "data": [4    {5      "id": "uuid",6      "tenant_id": "uuid",7      "name": "Erbil",8      "code": "erbil",9      "description": "Erbil city operations",10      "active": true,11      "created_at": "2026-05-09T10:00:00Z",12      "updated_at": "2026-05-09T10:00:00Z",13      "counts": {14        "services": 3,15        "drivers": 12,16        "users": 4,17        "customers": 018      }19    }20  ],21  "pagination": {22    "page": 1,23    "limit": 20,24    "total": 3,25    "total_pages": 126  }27}

Create Team

Delivery & Last-Mile / Teams
POST/delivery/teams?tenant_id=&language=en

Create a new team. Code is auto-generated (T001, T002, ...). Name/description accept a plain string or a multilingual object { en, ar, ku, ... }.

Send a bearer token in the Authorization header for an authenticated OnDi user session.
Request
curl
1curl --request POST "$ONDI_BASE_URL/delivery/teams?tenant_id=&language=en" \2  --header "Authorization: Bearer {{access_token}}" \3  --header "Content-Type: application/json" \4  --header "Content-Type: application/json" \5  --data '{6  "name": {7    "en": "Erbil",8    "ar": "أربيل",9    "ku": "ھەولێر"10  },11  "description": {12    "en": "Erbil city operations team",13    "ar": "فريق عمليات مدينة أربيل"14  }15}'
Request body
json
1{2  "name": {3    "en": "Erbil",4    "ar": "أربيل",5    "ku": "ھەولێر"6  },7  "description": {8    "en": "Erbil city operations team",9    "ar": "فريق عمليات مدينة أربيل"10  }11}

Query parameters

tenant_idOptional
query string

Tenant ID

languageOptional
query string

en

Preferred language

Request body fields

nameExample
object

Example field from the request body.

name.enExample
string

Example field from the request body.

name.arExample
string

Example field from the request body.

name.kuExample
string

Example field from the request body.

descriptionExample
object

Example field from the request body.

description.enExample
string

Example field from the request body.

description.arExample
string

Example field from the request body.

Headers

AuthorizationOptional
header string

Bearer {{access_token}}

Content-TypeOptional
header string

application/json

Responses

Created201Created
Response body
json
1{2  "success": true,3  "message": "team_created",4  "data": {5    "id": "uuid",6    "tenant_id": "uuid",7    "name": "Erbil",8    "code": "T001",9    "description": "Erbil city operations team",10    "active": true,11    "created_at": "2026-05-09T10:00:00Z",12    "updated_at": "2026-05-09T10:00:00Z"13  }14}
Duplicate Code409Conflict
Response body
json
1{2  "success": false,3  "message": "team_code_already_exists"4}

Get Team

Delivery & Last-Mile / Teams
GET/delivery/teams/:teamId?tenant_id=&language=en

Get team detail with assigned services, drivers, users, and customers.

Send a bearer token in the Authorization header for an authenticated OnDi user session.
Request
curl
1curl --request GET "$ONDI_BASE_URL/delivery/teams/:teamId?tenant_id=&language=en" \2  --header "Authorization: Bearer {{access_token}}"

Path parameters

teamIdRequired
path string

Team UUID

Query parameters

tenant_idOptional
query string

Tenant ID

languageOptional
query string

en

Preferred language

Headers

AuthorizationOptional
header string

Bearer {{access_token}}

Responses

Success200OK
Response body
json
1{2  "success": true,3  "data": {4    "id": "uuid",5    "tenant_id": "uuid",6    "name": "Erbil",7    "code": "erbil",8    "description": "Erbil city operations",9    "active": true,10    "created_at": "2026-05-09T10:00:00Z",11    "updated_at": "2026-05-09T10:00:00Z",12    "services": [13      {14        "id": "uuid",15        "name": "Erbil Same Day",16        "code": "erbil-sd",17        "active": true18      }19    ],20    "drivers": [21      {22        "id": "uuid",23        "user_id": "uuid",24        "status": "active",25        "full_name": "Ahmad",26        "avatar_url": null27      }28    ],29    "users": [30      {31        "id": "uuid",32        "full_name": "Dispatcher Ali",33        "avatar_url": null,34        "email": "ali@example.com"35      }36    ],37    "customers": []38  }39}
Not Found404Not Found
Response body
json
1{2  "success": false,3  "message": "team_not_found"4}

Update Team

Delivery & Last-Mile / Teams
PUT/delivery/teams/:teamId?tenant_id=&language=en

Update team properties. All fields optional. Code is auto-generated and cannot be changed. Name/description accept a plain string or multilingual object.

Send a bearer token in the Authorization header for an authenticated OnDi user session.
Request
curl
1curl --request PUT "$ONDI_BASE_URL/delivery/teams/:teamId?tenant_id=&language=en" \2  --header "Authorization: Bearer {{access_token}}" \3  --header "Content-Type: application/json" \4  --header "Content-Type: application/json" \5  --data '{6  "name": {7    "en": "Erbil Updated",8    "ar": "أربيل محدث"9  },10  "description": "Updated description",11  "active": true12}'
Request body
json
1{2  "name": {3    "en": "Erbil Updated",4    "ar": "أربيل محدث"5  },6  "description": "Updated description",7  "active": true8}

Path parameters

teamIdRequired
path string

Team UUID

Query parameters

tenant_idOptional
query string

Tenant ID

languageOptional
query string

en

Preferred language

Request body fields

nameExample
object

Example field from the request body.

name.enExample
string

Example field from the request body.

name.arExample
string

Example field from the request body.

descriptionExample
string

Example field from the request body.

activeExample
boolean

Example field from the request body.

Headers

AuthorizationOptional
header string

Bearer {{access_token}}

Content-TypeOptional
header string

application/json

Responses

Success200OK
Response body
json
1{2  "success": true,3  "message": "team_updated",4  "data": {5    "id": "uuid",6    "name": "Erbil Updated",7    "code": "erbil",8    "active": true9  }10}

Delete Team

Delivery & Last-Mile / Teams
DELETE/delivery/teams/:teamId?tenant_id=&language=en

Delete a team. Clears all entity mappings (entities become 'All Teams' if no other assignments).

Send a bearer token in the Authorization header for an authenticated OnDi user session.
Request
curl
1curl --request DELETE "$ONDI_BASE_URL/delivery/teams/:teamId?tenant_id=&language=en" \2  --header "Authorization: Bearer {{access_token}}"

Path parameters

teamIdRequired
path string

Team UUID

Query parameters

tenant_idOptional
query string

Tenant ID

languageOptional
query string

en

Preferred language

Headers

AuthorizationOptional
header string

Bearer {{access_token}}

Responses

Success200OK
Response body
json
1{2  "success": true,3  "message": "team_deleted"4}

Assign Services to Team

Delivery & Last-Mile / Teams
PUT/delivery/teams/:teamId/services?tenant_id=&language=en

Replace all services assigned to this team. Send empty array to clear.

Send a bearer token in the Authorization header for an authenticated OnDi user session.
Request
curl
1curl --request PUT "$ONDI_BASE_URL/delivery/teams/:teamId/services?tenant_id=&language=en" \2  --header "Authorization: Bearer {{access_token}}" \3  --header "Content-Type: application/json" \4  --header "Content-Type: application/json" \5  --data '{6  "service_ids": [7    "service-uuid-1",8    "service-uuid-2"9  ]10}'
Request body
json
1{2  "service_ids": [3    "service-uuid-1",4    "service-uuid-2"5  ]6}

Path parameters

teamIdRequired
path string

Team UUID

Query parameters

tenant_idOptional
query string

Tenant ID

languageOptional
query string

en

Preferred language

Request body fields

service_idsExample
array<string>

Example field from the request body.

Headers

AuthorizationOptional
header string

Bearer {{access_token}}

Content-TypeOptional
header string

application/json

Responses

Success200OK
Response body
json
1{2  "success": true,3  "message": "team_services_updated"4}

Assign Drivers to Team

Delivery & Last-Mile / Teams
PUT/delivery/teams/:teamId/drivers?tenant_id=&language=en

Replace all drivers assigned to this team.

Send a bearer token in the Authorization header for an authenticated OnDi user session.
Request
curl
1curl --request PUT "$ONDI_BASE_URL/delivery/teams/:teamId/drivers?tenant_id=&language=en" \2  --header "Authorization: Bearer {{access_token}}" \3  --header "Content-Type: application/json" \4  --header "Content-Type: application/json" \5  --data '{6  "driver_ids": [7    "driver-uuid-1",8    "driver-uuid-2"9  ]10}'
Request body
json
1{2  "driver_ids": [3    "driver-uuid-1",4    "driver-uuid-2"5  ]6}

Path parameters

teamIdRequired
path string

Team UUID

Query parameters

tenant_idOptional
query string

Tenant ID

languageOptional
query string

en

Preferred language

Request body fields

driver_idsExample
array<string>

Example field from the request body.

Headers

AuthorizationOptional
header string

Bearer {{access_token}}

Content-TypeOptional
header string

application/json

Responses

Success200OK
Response body
json
1{2  "success": true,3  "message": "team_drivers_updated"4}

Assign Users to Team

Delivery & Last-Mile / Teams
PUT/delivery/teams/:teamId/users?tenant_id=&language=en

Replace all users (admins/dispatchers) assigned to this team.

Send a bearer token in the Authorization header for an authenticated OnDi user session.
Request
curl
1curl --request PUT "$ONDI_BASE_URL/delivery/teams/:teamId/users?tenant_id=&language=en" \2  --header "Authorization: Bearer {{access_token}}" \3  --header "Content-Type: application/json" \4  --header "Content-Type: application/json" \5  --data '{6  "user_ids": [7    "user-uuid-1",8    "user-uuid-2"9  ]10}'
Request body
json
1{2  "user_ids": [3    "user-uuid-1",4    "user-uuid-2"5  ]6}

Path parameters

teamIdRequired
path string

Team UUID

Query parameters

tenant_idOptional
query string

Tenant ID

languageOptional
query string

en

Preferred language

Request body fields

user_idsExample
array<string>

Example field from the request body.

Headers

AuthorizationOptional
header string

Bearer {{access_token}}

Content-TypeOptional
header string

application/json

Responses

Success200OK
Response body
json
1{2  "success": true,3  "message": "team_users_updated"4}

Assign Customers to Team

Delivery & Last-Mile / Teams
PUT/delivery/teams/:teamId/customers?tenant_id=&language=en

Replace all customers assigned to this team.

Send a bearer token in the Authorization header for an authenticated OnDi user session.
Request
curl
1curl --request PUT "$ONDI_BASE_URL/delivery/teams/:teamId/customers?tenant_id=&language=en" \2  --header "Authorization: Bearer {{access_token}}" \3  --header "Content-Type: application/json" \4  --header "Content-Type: application/json" \5  --data '{6  "customer_ids": [7    "customer-uuid-1"8  ]9}'
Request body
json
1{2  "customer_ids": [3    "customer-uuid-1"4  ]5}

Path parameters

teamIdRequired
path string

Team UUID

Query parameters

tenant_idOptional
query string

Tenant ID

languageOptional
query string

en

Preferred language

Request body fields

customer_idsExample
array<string>

Example field from the request body.

Headers

AuthorizationOptional
header string

Bearer {{access_token}}

Content-TypeOptional
header string

application/json

Responses

Success200OK
Response body
json
1{2  "success": true,3  "message": "team_customers_updated"4}

Remove Service from Team

Delivery & Last-Mile / Teams
DELETE/delivery/teams/:teamId/services/:serviceId?tenant_id=&language=en

Remove a single service from a team without affecting other assignments.

Send a bearer token in the Authorization header for an authenticated OnDi user session.
Request
curl
1curl --request DELETE "$ONDI_BASE_URL/delivery/teams/:teamId/services/:serviceId?tenant_id=&language=en" \2  --header "Authorization: Bearer {{access_token}}"

Path parameters

teamIdRequired
path string

Team UUID

serviceIdRequired
path string

Delivery Service UUID

Query parameters

tenant_idOptional
query string

Tenant ID

languageOptional
query string

en

Preferred language

Headers

AuthorizationOptional
header string

Bearer {{access_token}}

Responses

Success200OK
Response body
json
1{2  "success": true,3  "message": "service_removed_from_team"4}
Not Found404Not Found
Response body
json
1{2  "success": false,3  "message": "assignment_not_found"4}

Remove Driver from Team

Delivery & Last-Mile / Teams
DELETE/delivery/teams/:teamId/drivers/:driverId?tenant_id=&language=en

Remove a single driver from a team. Also removes the driver's auto-synced user_teams entry.

Send a bearer token in the Authorization header for an authenticated OnDi user session.
Request
curl
1curl --request DELETE "$ONDI_BASE_URL/delivery/teams/:teamId/drivers/:driverId?tenant_id=&language=en" \2  --header "Authorization: Bearer {{access_token}}"

Path parameters

teamIdRequired
path string

Team UUID

driverIdRequired
path string

Driver UUID

Query parameters

tenant_idOptional
query string

Tenant ID

languageOptional
query string

en

Preferred language

Headers

AuthorizationOptional
header string

Bearer {{access_token}}

Responses

Success200OK
Response body
json
1{2  "success": true,3  "message": "driver_removed_from_team"4}
Not Found404Not Found
Response body
json
1{2  "success": false,3  "message": "assignment_not_found"4}

Remove User from Team

Delivery & Last-Mile / Teams
DELETE/delivery/teams/:teamId/users/:userId?tenant_id=&language=en

Remove a single user (admin/dispatcher) from a team.

Send a bearer token in the Authorization header for an authenticated OnDi user session.
Request
curl
1curl --request DELETE "$ONDI_BASE_URL/delivery/teams/:teamId/users/:userId?tenant_id=&language=en" \2  --header "Authorization: Bearer {{access_token}}"

Path parameters

teamIdRequired
path string

Team UUID

userIdRequired
path string

User UUID

Query parameters

tenant_idOptional
query string

Tenant ID

languageOptional
query string

en

Preferred language

Headers

AuthorizationOptional
header string

Bearer {{access_token}}

Responses

Success200OK
Response body
json
1{2  "success": true,3  "message": "user_removed_from_team"4}
Not Found404Not Found
Response body
json
1{2  "success": false,3  "message": "assignment_not_found"4}

Remove Customer from Team

Delivery & Last-Mile / Teams
DELETE/delivery/teams/:teamId/customers/:customerId?tenant_id=&language=en

Remove a single customer from a team.

Send a bearer token in the Authorization header for an authenticated OnDi user session.
Request
curl
1curl --request DELETE "$ONDI_BASE_URL/delivery/teams/:teamId/customers/:customerId?tenant_id=&language=en" \2  --header "Authorization: Bearer {{access_token}}"

Path parameters

teamIdRequired
path string

Team UUID

customerIdRequired
path string

Customer UUID

Query parameters

tenant_idOptional
query string

Tenant ID

languageOptional
query string

en

Preferred language

Headers

AuthorizationOptional
header string

Bearer {{access_token}}

Responses

Success200OK
Response body
json
1{2  "success": true,3  "message": "customer_removed_from_team"4}
Not Found404Not Found
Response body
json
1{2  "success": false,3  "message": "assignment_not_found"4}

Set Teams for Service

Delivery & Last-Mile / Teams
PUT/delivery/services/:serviceId/teams?tenant_id=&language=en

Set teams for a delivery service. Use all_teams:true to make unrestricted.

Send a bearer token in the Authorization header for an authenticated OnDi user session.
Request
curl
1curl --request PUT "$ONDI_BASE_URL/delivery/services/:serviceId/teams?tenant_id=&language=en" \2  --header "Authorization: Bearer {{access_token}}" \3  --header "Content-Type: application/json" \4  --header "Content-Type: application/json" \5  --data '{6  "all_teams": false,7  "team_ids": [8    "team-uuid-1",9    "team-uuid-2"10  ]11}'
Request body
json
1{2  "all_teams": false,3  "team_ids": [4    "team-uuid-1",5    "team-uuid-2"6  ]7}

Path parameters

serviceIdRequired
path string

Delivery Service UUID

Query parameters

tenant_idOptional
query string

Tenant ID

languageOptional
query string

en

Preferred language

Request body fields

all_teamsExample
boolean

Example field from the request body.

team_idsExample
array<string>

Example field from the request body.

Headers

AuthorizationOptional
header string

Bearer {{access_token}}

Content-TypeOptional
header string

application/json

Responses

Success200OK
Response body
json
1{2  "success": true,3  "message": "service_teams_updated"4}

Set Teams for Driver

Delivery & Last-Mile / Teams
PUT/delivery/drivers/:driverId/teams?tenant_id=&language=en

Set teams for a driver. Use all_teams:true to make unrestricted.

Send a bearer token in the Authorization header for an authenticated OnDi user session.
Request
curl
1curl --request PUT "$ONDI_BASE_URL/delivery/drivers/:driverId/teams?tenant_id=&language=en" \2  --header "Authorization: Bearer {{access_token}}" \3  --header "Content-Type: application/json" \4  --header "Content-Type: application/json" \5  --data '{6  "all_teams": false,7  "team_ids": [8    "team-uuid-1"9  ]10}'
Request body
json
1{2  "all_teams": false,3  "team_ids": [4    "team-uuid-1"5  ]6}

Path parameters

driverIdRequired
path string

Driver UUID

Query parameters

tenant_idOptional
query string

Tenant ID

languageOptional
query string

en

Preferred language

Request body fields

all_teamsExample
boolean

Example field from the request body.

team_idsExample
array<string>

Example field from the request body.

Headers

AuthorizationOptional
header string

Bearer {{access_token}}

Content-TypeOptional
header string

application/json

Responses

Success200OK
Response body
json
1{2  "success": true,3  "message": "driver_teams_updated"4}

Set Teams for User

Delivery & Last-Mile / Teams
PUT/delivery/users/:userId/teams?tenant_id=&language=en

Set teams for a user (admin/dispatcher). Use all_teams:true to make unrestricted.

Send a bearer token in the Authorization header for an authenticated OnDi user session.
Request
curl
1curl --request PUT "$ONDI_BASE_URL/delivery/users/:userId/teams?tenant_id=&language=en" \2  --header "Authorization: Bearer {{access_token}}" \3  --header "Content-Type: application/json" \4  --header "Content-Type: application/json" \5  --data '{6  "all_teams": false,7  "team_ids": [8    "team-uuid-1",9    "team-uuid-2"10  ]11}'
Request body
json
1{2  "all_teams": false,3  "team_ids": [4    "team-uuid-1",5    "team-uuid-2"6  ]7}

Path parameters

userIdRequired
path string

User UUID

Query parameters

tenant_idOptional
query string

Tenant ID

languageOptional
query string

en

Preferred language

Request body fields

all_teamsExample
boolean

Example field from the request body.

team_idsExample
array<string>

Example field from the request body.

Headers

AuthorizationOptional
header string

Bearer {{access_token}}

Content-TypeOptional
header string

application/json

Responses

Success200OK
Response body
json
1{2  "success": true,3  "message": "user_teams_updated"4}

Set Teams for Customer

Delivery & Last-Mile / Teams
PUT/delivery/customers/:customerId/teams?tenant_id=&language=en

Set teams for a customer. Use all_teams:true to make unrestricted.

Send a bearer token in the Authorization header for an authenticated OnDi user session.
Request
curl
1curl --request PUT "$ONDI_BASE_URL/delivery/customers/:customerId/teams?tenant_id=&language=en" \2  --header "Authorization: Bearer {{access_token}}" \3  --header "Content-Type: application/json" \4  --header "Content-Type: application/json" \5  --data '{6  "all_teams": false,7  "team_ids": [8    "team-uuid-1"9  ]10}'
Request body
json
1{2  "all_teams": false,3  "team_ids": [4    "team-uuid-1"5  ]6}

Path parameters

customerIdRequired
path string

Customer UUID

Query parameters

tenant_idOptional
query string

Tenant ID

languageOptional
query string

en

Preferred language

Request body fields

all_teamsExample
boolean

Example field from the request body.

team_idsExample
array<string>

Example field from the request body.

Headers

AuthorizationOptional
header string

Bearer {{access_token}}

Content-TypeOptional
header string

application/json

Responses

Success200OK
Response body
json
1{2  "success": true,3  "message": "customer_teams_updated"4}