Teams
17 API calls in this section.
List Teams
/delivery/teams?page=1&limit=20&active=true&search=&tenant_id=&language=enList all teams for the tenant with member counts.
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
pageOptional1
Page number
limitOptional20
Items per page (max 100)
activeOptionaltrue
Filter by active status (true/false)
searchOptionalSearch by name or code
tenant_idOptionalTenant ID
languageOptionalen
Preferred language
Headers
AuthorizationOptionalBearer {{access_token}}
Responses
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/teams?tenant_id=&language=enCreate a new team. Code is auto-generated (T001, T002, ...). Name/description accept a plain string or a multilingual object { en, ar, ku, ... }.
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}'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_idOptionalTenant ID
languageOptionalen
Preferred language
Request body fields
nameExampleExample field from the request body.
name.enExampleExample field from the request body.
name.arExampleExample field from the request body.
name.kuExampleExample field from the request body.
descriptionExampleExample field from the request body.
description.enExampleExample field from the request body.
description.arExampleExample field from the request body.
Headers
AuthorizationOptionalBearer {{access_token}}
Content-TypeOptionalapplication/json
Responses
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}1{2 "success": false,3 "message": "team_code_already_exists"4}Get Team
/delivery/teams/:teamId?tenant_id=&language=enGet team detail with assigned services, drivers, users, and customers.
1curl --request GET "$ONDI_BASE_URL/delivery/teams/:teamId?tenant_id=&language=en" \2 --header "Authorization: Bearer {{access_token}}"Path parameters
teamIdRequiredTeam UUID
Query parameters
tenant_idOptionalTenant ID
languageOptionalen
Preferred language
Headers
AuthorizationOptionalBearer {{access_token}}
Responses
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}1{2 "success": false,3 "message": "team_not_found"4}Update Team
/delivery/teams/:teamId?tenant_id=&language=enUpdate team properties. All fields optional. Code is auto-generated and cannot be changed. Name/description accept a plain string or multilingual object.
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}'1{2 "name": {3 "en": "Erbil Updated",4 "ar": "أربيل محدث"5 },6 "description": "Updated description",7 "active": true8}Path parameters
teamIdRequiredTeam UUID
Query parameters
tenant_idOptionalTenant ID
languageOptionalen
Preferred language
Request body fields
nameExampleExample field from the request body.
name.enExampleExample field from the request body.
name.arExampleExample field from the request body.
descriptionExampleExample field from the request body.
activeExampleExample field from the request body.
Headers
AuthorizationOptionalBearer {{access_token}}
Content-TypeOptionalapplication/json
Responses
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/teams/:teamId?tenant_id=&language=enDelete a team. Clears all entity mappings (entities become 'All Teams' if no other assignments).
1curl --request DELETE "$ONDI_BASE_URL/delivery/teams/:teamId?tenant_id=&language=en" \2 --header "Authorization: Bearer {{access_token}}"Path parameters
teamIdRequiredTeam UUID
Query parameters
tenant_idOptionalTenant ID
languageOptionalen
Preferred language
Headers
AuthorizationOptionalBearer {{access_token}}
Responses
1{2 "success": true,3 "message": "team_deleted"4}Assign Services to Team
/delivery/teams/:teamId/services?tenant_id=&language=enReplace all services assigned to this team. Send empty array to clear.
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}'1{2 "service_ids": [3 "service-uuid-1",4 "service-uuid-2"5 ]6}Path parameters
teamIdRequiredTeam UUID
Query parameters
tenant_idOptionalTenant ID
languageOptionalen
Preferred language
Request body fields
service_idsExampleExample field from the request body.
Headers
AuthorizationOptionalBearer {{access_token}}
Content-TypeOptionalapplication/json
Responses
1{2 "success": true,3 "message": "team_services_updated"4}Assign Drivers to Team
/delivery/teams/:teamId/drivers?tenant_id=&language=enReplace all drivers assigned to this team.
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}'1{2 "driver_ids": [3 "driver-uuid-1",4 "driver-uuid-2"5 ]6}Path parameters
teamIdRequiredTeam UUID
Query parameters
tenant_idOptionalTenant ID
languageOptionalen
Preferred language
Request body fields
driver_idsExampleExample field from the request body.
Headers
AuthorizationOptionalBearer {{access_token}}
Content-TypeOptionalapplication/json
Responses
1{2 "success": true,3 "message": "team_drivers_updated"4}Assign Users to Team
/delivery/teams/:teamId/users?tenant_id=&language=enReplace all users (admins/dispatchers) assigned to this team.
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}'1{2 "user_ids": [3 "user-uuid-1",4 "user-uuid-2"5 ]6}Path parameters
teamIdRequiredTeam UUID
Query parameters
tenant_idOptionalTenant ID
languageOptionalen
Preferred language
Request body fields
user_idsExampleExample field from the request body.
Headers
AuthorizationOptionalBearer {{access_token}}
Content-TypeOptionalapplication/json
Responses
1{2 "success": true,3 "message": "team_users_updated"4}Assign Customers to Team
/delivery/teams/:teamId/customers?tenant_id=&language=enReplace all customers assigned to this team.
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}'1{2 "customer_ids": [3 "customer-uuid-1"4 ]5}Path parameters
teamIdRequiredTeam UUID
Query parameters
tenant_idOptionalTenant ID
languageOptionalen
Preferred language
Request body fields
customer_idsExampleExample field from the request body.
Headers
AuthorizationOptionalBearer {{access_token}}
Content-TypeOptionalapplication/json
Responses
1{2 "success": true,3 "message": "team_customers_updated"4}Remove Service from Team
/delivery/teams/:teamId/services/:serviceId?tenant_id=&language=enRemove a single service from a team without affecting other assignments.
1curl --request DELETE "$ONDI_BASE_URL/delivery/teams/:teamId/services/:serviceId?tenant_id=&language=en" \2 --header "Authorization: Bearer {{access_token}}"Path parameters
teamIdRequiredTeam UUID
serviceIdRequiredDelivery Service UUID
Query parameters
tenant_idOptionalTenant ID
languageOptionalen
Preferred language
Headers
AuthorizationOptionalBearer {{access_token}}
Responses
1{2 "success": true,3 "message": "service_removed_from_team"4}1{2 "success": false,3 "message": "assignment_not_found"4}Remove Driver from Team
/delivery/teams/:teamId/drivers/:driverId?tenant_id=&language=enRemove a single driver from a team. Also removes the driver's auto-synced user_teams entry.
1curl --request DELETE "$ONDI_BASE_URL/delivery/teams/:teamId/drivers/:driverId?tenant_id=&language=en" \2 --header "Authorization: Bearer {{access_token}}"Path parameters
teamIdRequiredTeam UUID
driverIdRequiredDriver UUID
Query parameters
tenant_idOptionalTenant ID
languageOptionalen
Preferred language
Headers
AuthorizationOptionalBearer {{access_token}}
Responses
1{2 "success": true,3 "message": "driver_removed_from_team"4}1{2 "success": false,3 "message": "assignment_not_found"4}Remove User from Team
/delivery/teams/:teamId/users/:userId?tenant_id=&language=enRemove a single user (admin/dispatcher) from a team.
1curl --request DELETE "$ONDI_BASE_URL/delivery/teams/:teamId/users/:userId?tenant_id=&language=en" \2 --header "Authorization: Bearer {{access_token}}"Path parameters
teamIdRequiredTeam UUID
userIdRequiredUser UUID
Query parameters
tenant_idOptionalTenant ID
languageOptionalen
Preferred language
Headers
AuthorizationOptionalBearer {{access_token}}
Responses
1{2 "success": true,3 "message": "user_removed_from_team"4}1{2 "success": false,3 "message": "assignment_not_found"4}Remove Customer from Team
/delivery/teams/:teamId/customers/:customerId?tenant_id=&language=enRemove a single customer from a team.
1curl --request DELETE "$ONDI_BASE_URL/delivery/teams/:teamId/customers/:customerId?tenant_id=&language=en" \2 --header "Authorization: Bearer {{access_token}}"Path parameters
teamIdRequiredTeam UUID
customerIdRequiredCustomer UUID
Query parameters
tenant_idOptionalTenant ID
languageOptionalen
Preferred language
Headers
AuthorizationOptionalBearer {{access_token}}
Responses
1{2 "success": true,3 "message": "customer_removed_from_team"4}1{2 "success": false,3 "message": "assignment_not_found"4}Set Teams for Service
/delivery/services/:serviceId/teams?tenant_id=&language=enSet teams for a delivery service. Use all_teams:true to make unrestricted.
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}'1{2 "all_teams": false,3 "team_ids": [4 "team-uuid-1",5 "team-uuid-2"6 ]7}Path parameters
serviceIdRequiredDelivery Service UUID
Query parameters
tenant_idOptionalTenant ID
languageOptionalen
Preferred language
Request body fields
all_teamsExampleExample field from the request body.
team_idsExampleExample field from the request body.
Headers
AuthorizationOptionalBearer {{access_token}}
Content-TypeOptionalapplication/json
Responses
1{2 "success": true,3 "message": "service_teams_updated"4}Set Teams for Driver
/delivery/drivers/:driverId/teams?tenant_id=&language=enSet teams for a driver. Use all_teams:true to make unrestricted.
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}'1{2 "all_teams": false,3 "team_ids": [4 "team-uuid-1"5 ]6}Path parameters
driverIdRequiredDriver UUID
Query parameters
tenant_idOptionalTenant ID
languageOptionalen
Preferred language
Request body fields
all_teamsExampleExample field from the request body.
team_idsExampleExample field from the request body.
Headers
AuthorizationOptionalBearer {{access_token}}
Content-TypeOptionalapplication/json
Responses
1{2 "success": true,3 "message": "driver_teams_updated"4}Set Teams for User
/delivery/users/:userId/teams?tenant_id=&language=enSet teams for a user (admin/dispatcher). Use all_teams:true to make unrestricted.
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}'1{2 "all_teams": false,3 "team_ids": [4 "team-uuid-1",5 "team-uuid-2"6 ]7}Path parameters
userIdRequiredUser UUID
Query parameters
tenant_idOptionalTenant ID
languageOptionalen
Preferred language
Request body fields
all_teamsExampleExample field from the request body.
team_idsExampleExample field from the request body.
Headers
AuthorizationOptionalBearer {{access_token}}
Content-TypeOptionalapplication/json
Responses
1{2 "success": true,3 "message": "user_teams_updated"4}Set Teams for Customer
/delivery/customers/:customerId/teams?tenant_id=&language=enSet teams for a customer. Use all_teams:true to make unrestricted.
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}'1{2 "all_teams": false,3 "team_ids": [4 "team-uuid-1"5 ]6}Path parameters
customerIdRequiredCustomer UUID
Query parameters
tenant_idOptionalTenant ID
languageOptionalen
Preferred language
Request body fields
all_teamsExampleExample field from the request body.
team_idsExampleExample field from the request body.
Headers
AuthorizationOptionalBearer {{access_token}}
Content-TypeOptionalapplication/json
Responses
1{2 "success": true,3 "message": "customer_teams_updated"4}