Skip to main content

Customer Portal Settings

2 API calls in this section.

Get Customer Portal Settings

Delivery & Last-Mile / Customer Portal Settings
GET/delivery/customer-portal/settings?language=en

Returns the effective Customer Portal settings for delivery creation for the authenticated tenant. Tenant ID is derived from req.context.tenantId (JWT / auth). No tenant ID in URL. Access - Tenant admin with manage:tenant, manage:operations:tenant, or manage:module:delivery. Response data includes { options, values }. values.support_ticket_settings.support_users includes the selected support users with their names.

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

Query parameters

languageOptional
query string

en

Language code for response localization (Optional, default: en)

Headers

AuthorizationOptional
header string

Bearer {{access_token}}

Responses

Success200
Response body
json
1{2  "success": true,3  "data": {4    "options": {5      "pickup_settings": {6        "modes": [7          "fixed_default",8          "select_from_list",9          "predefined_only",10          "any_address"11        ],12        "allowed_address_types": [13          "pickup",14          "warehouse",15          "branch"16        ]17      },18      "wallet_settings": {19        "allowed_payout_user_types": [20          "individual",21          "business"22        ]23      }24    },25    "values": {26      "pickup_settings": {27        "mode": "fixed_default",28        "allow_change": false,29        "default_pickup_address_id": "uuid",30        "allowed_pickup_address_ids": []31      },32      "delivery_service_settings": {33        "default_delivery_service_id": "uuid",34        "allowed_delivery_service_ids": []35      },36      "cod_settings": {37        "enabled": true,38        "required": false,39        "allow_zero": true,40        "min": 0,41        "max": null42      },43      "delivery_creation_fields": {44        "reference_id_enabled": true,45        "invoicing_enabled": false,46        "custom_shipment_label_enabled": false47      },48      "package_settings": {49        "multipart_enabled": true50      },51      "visibility_settings": {52        "driver_info": {53          "show_driver_info": true,54          "show_driver_phone": true55        },56        "tracking": {57          "realtime_tracking_enabled": true58        },59        "chat": {60          "support_chat_enabled": true,61          "driver_chat_enabled": false62        }63      },64      "support_ticket_settings": {65        "enabled": true,66        "allow_customer_close": true,67        "support_user_ids": [68          "uuid",69          "uuid"70        ],71        "support_users": [72          {73            "id": "uuid",74            "full_name": "Support User One"75          },76          {77            "id": "uuid",78            "full_name": "Support User Two"79          }80        ],81        "default_priority": "medium",82        "auto_assign_on_first_reply": false83      },84      "wallet_settings": {85        "allowed_payout_user_types": [86          "business"87        ]88      },89      "brand_settings": {90        "brand": {91          "name": {92            "en": "",93            "ar": "",94            "ku": ""95          },96          "page_title": ""97        },98        "assets": {99          "favicon_url": "",100          "logo_url": ""101        },102        "theme": {103          "colors": {104            "primary": "#2B14DA",105            "primary2": "#000000",106            "misGrey": "#F7F8FA",107            "misGrey2": "#F3F5F9",108            "blueBigOrder": "#2B7FFF",109            "orangeBgTransit": "#FF6B2B",110            "yellowBgPending": "#E6C718",111            "greenBgDelivered": "#19B53B",112            "redBgDropOff": "#F40909",113            "selectedColor": "rgba(43, 20, 218, 0.05)",114            "activeTextColor": "rgba(0, 0, 0, 1)",115            "iconRestState": "rgba(105, 98, 98, 1)",116            "textRestState": "rgba(105, 98, 98, 1)",117            "characterDisabled": "rgba(0, 0, 0, 0.2)",118            "buttonTextColor": "rgba(255, 255, 255, 1)",119            "overlaysDefault": "rgba(0, 0, 0, 0.2)",120            "neutralStroke": "rgba(217, 217, 217, 1)",121            "backgroundColorWhite": "rgba(255, 255, 255, 1)",122            "borderColor": "rgba(243, 243, 243, 1)"123          }124        }125      }126    }127  }128}

Update Customer Portal Settings

Delivery & Last-Mile / Customer Portal Settings
PUT/delivery/customer-portal/settings?language=en

Upserts tenant customer portal settings for delivery creation. Tenant ID is derived from req.context.tenantId. No tenant ID in URL. Access - Tenant admin with manage:tenant, manage:operations:tenant, or manage:module:delivery. Validation - Pickup address/service IDs must belong to the tenant. - predefined_only requires allowed_pickup_address_ids. - fixed_default requires default_pickup_address_id. - any_address: no restrictions; customer provides pickup (address_id or location JSON) at order creation. support_ticket_settings (optional): - enabled: enable or disable customer support tickets. - allow_customer_close: allow customers to close their own tickets. - support_user_ids: array of tenant support user ids for the shared queue. Each must be an active tenant user in the same tenant. - support_users: optional frontend object list; if sent, its ids are also validated. - users with the driver tenant role are not allowed as support users. - default_priority: low | medium | high | urgent. - auto_assign_on_first_reply: when true, the first support reply to an unassigned ticket claims it automatically. brand_settings.theme.colors (partial update supported; defaults for omitted keys): - primary: #2B14DA | primary2: #000000 | misGrey: #F7F8FA | misGrey2: #F3F5F9 - blueBigOrder: #2B7FFF | orangeBgTransit: #FF6B2B | yellowBgPending: #E6C718 | greenBgDelivered: #19B53B | redBgDropOff: #F40909 - selectedColor: rgba(43, 20, 218, 0.05) | activeTextColor: rgba(0, 0, 0, 1) - iconRestState: rgba(105, 98, 98, 1) | textRestState: rgba(105, 98, 98, 1) | characterDisabled: rgba(0, 0, 0, 0.2) - buttonTextColor: rgba(255, 255, 255, 1) | overlaysDefault: rgba(0, 0, 0, 0.2) - neutralStroke: rgba(217, 217, 217, 1) | backgroundColorWhite: rgba(255, 255, 255, 1) | borderColor: rgba(243, 243, 243, 1) wallet_settings (optional): - allowed_payout_user_types: array of "individual" and/or "business" - which customer types can request payouts from customer portal. Default: ["business"]. Enterprise users are treated as business. track_orders (optional): - enable: enable or disable order tracking. - track_url: tracking application URL.

Send a bearer token in the Authorization header for an authenticated OnDi user session.
Request
curl
1curl --request PUT "$ONDI_BASE_URL/delivery/customer-portal/settings?language=en" \2  --header "Authorization: Bearer {{access_token}}" \3  --header "Content-Type: application/json" \4  --header "Content-Type: application/json" \5  --data '{6  "pickup_settings": {7    "mode": "predefined_only",8    "default_pickup_address_id": "uuid",9    "allowed_pickup_address_ids": [10      "uuid"11    ]12  },13  "delivery_service_settings": {14    "default_delivery_service_id": "uuid",15    "allowed_delivery_service_ids": []16  },17  "cod_settings": {18    "enabled": true,19    "required": false,20    "allow_zero": true,21    "min": 0,22    "max": 50000023  },24  "delivery_creation_fields": {25    "reference_id_enabled": true,26    "invoicing_enabled": false,27    "custom_shipment_label_enabled": false28  },29  "package_settings": {30    "multipart_enabled": true31  },32  "visibility_settings": {33    "driver_info": {34      "show_driver_info": true,35      "show_driver_phone": false36    },37    "tracking": {38      "realtime_tracking_enabled": true39    },40    "chat": {41      "support_chat_enabled": true,42      "driver_chat_enabled": false43    }44  },45  "support_ticket_settings": {46    "enabled": true,47    "allow_customer_close": true,48    "support_user_ids": [49      "uuid",50      "uuid"51    ],52    "default_priority": "medium",53    "auto_assign_on_first_reply": true54  },55  "wallet_settings": {56    "allowed_payout_user_types": [57      "individual",58      "business"59    ]60  },61  "track_orders": {62    "enable": true,63    "track_url": "https://staging-app.ondi.io/tracking"64  },65  "brand_settings": {66    "brand": {67      "name": {68        "en": "Acme",69        "ar": "",70        "ku": ""71      },72      "page_title": "Acme Tracking"73    },74    "assets": {75      "favicon_url": "https://...",76      "logo_url": "https://..."77    },78    "theme": {79      "colors": {80        "primary": "#2B14DA",81        "primary2": "#000000",82        "misGrey": "#F7F8FA",83        "misGrey2": "#F3F5F9",84        "blueBigOrder": "#2B7FFF",85        "orangeBgTransit": "#FF6B2B",86        "yellowBgPending": "#E6C718",87        "greenBgDelivered": "#19B53B",88        "redBgDropOff": "#F40909",89        "selectedColor": "rgba(43, 20, 218, 0.05)",90        "activeTextColor": "rgba(0, 0, 0, 1)",91        "iconRestState": "rgba(105, 98, 98, 1)",92        "textRestState": "rgba(105, 98, 98, 1)",93        "characterDisabled": "rgba(0, 0, 0, 0.2)",94        "buttonTextColor": "rgba(255, 255, 255, 1)",95        "overlaysDefault": "rgba(0, 0, 0, 0.2)",96        "neutralStroke": "rgba(217, 217, 217, 1)",97        "backgroundColorWhite": "rgba(255, 255, 255, 1)",98        "borderColor": "rgba(243, 243, 243, 1)"99      }100    }101  }102}'
Request body
json
1{2  "pickup_settings": {3    "mode": "predefined_only",4    "default_pickup_address_id": "uuid",5    "allowed_pickup_address_ids": [6      "uuid"7    ]8  },9  "delivery_service_settings": {10    "default_delivery_service_id": "uuid",11    "allowed_delivery_service_ids": []12  },13  "cod_settings": {14    "enabled": true,15    "required": false,16    "allow_zero": true,17    "min": 0,18    "max": 50000019  },20  "delivery_creation_fields": {21    "reference_id_enabled": true,22    "invoicing_enabled": false,23    "custom_shipment_label_enabled": false24  },25  "package_settings": {26    "multipart_enabled": true27  },28  "visibility_settings": {29    "driver_info": {30      "show_driver_info": true,31      "show_driver_phone": false32    },33    "tracking": {34      "realtime_tracking_enabled": true35    },36    "chat": {37      "support_chat_enabled": true,38      "driver_chat_enabled": false39    }40  },41  "support_ticket_settings": {42    "enabled": true,43    "allow_customer_close": true,44    "support_user_ids": [45      "uuid",46      "uuid"47    ],48    "default_priority": "medium",49    "auto_assign_on_first_reply": true50  },51  "wallet_settings": {52    "allowed_payout_user_types": [53      "individual",54      "business"55    ]56  },57  "track_orders": {58    "enable": true,59    "track_url": "https://staging-app.ondi.io/tracking"60  },61  "brand_settings": {62    "brand": {63      "name": {64        "en": "Acme",65        "ar": "",66        "ku": ""67      },68      "page_title": "Acme Tracking"69    },70    "assets": {71      "favicon_url": "https://...",72      "logo_url": "https://..."73    },74    "theme": {75      "colors": {76        "primary": "#2B14DA",77        "primary2": "#000000",78        "misGrey": "#F7F8FA",79        "misGrey2": "#F3F5F9",80        "blueBigOrder": "#2B7FFF",81        "orangeBgTransit": "#FF6B2B",82        "yellowBgPending": "#E6C718",83        "greenBgDelivered": "#19B53B",84        "redBgDropOff": "#F40909",85        "selectedColor": "rgba(43, 20, 218, 0.05)",86        "activeTextColor": "rgba(0, 0, 0, 1)",87        "iconRestState": "rgba(105, 98, 98, 1)",88        "textRestState": "rgba(105, 98, 98, 1)",89        "characterDisabled": "rgba(0, 0, 0, 0.2)",90        "buttonTextColor": "rgba(255, 255, 255, 1)",91        "overlaysDefault": "rgba(0, 0, 0, 0.2)",92        "neutralStroke": "rgba(217, 217, 217, 1)",93        "backgroundColorWhite": "rgba(255, 255, 255, 1)",94        "borderColor": "rgba(243, 243, 243, 1)"95      }96    }97  }98}

Query parameters

languageOptional
query string

en

Language code for response localization (Optional, default: en)

Request body fields

pickup_settingsExample
object

Example field from the request body.

pickup_settings.modeExample
string

Example field from the request body.

pickup_settings.default_pickup_address_idExample
string

Example field from the request body.

pickup_settings.allowed_pickup_address_idsExample
array<string>

Example field from the request body.

delivery_service_settingsExample
object

Example field from the request body.

delivery_service_settings.default_delivery_service_idExample
string

Example field from the request body.

delivery_service_settings.allowed_delivery_service_idsExample
array

Example field from the request body.

cod_settingsExample
object

Example field from the request body.

cod_settings.enabledExample
boolean

Example field from the request body.

cod_settings.requiredExample
boolean

Example field from the request body.

cod_settings.allow_zeroExample
boolean

Example field from the request body.

cod_settings.minExample
number

Example field from the request body.

cod_settings.maxExample
number

Example field from the request body.

delivery_creation_fieldsExample
object

Example field from the request body.

delivery_creation_fields.reference_id_enabledExample
boolean

Example field from the request body.

delivery_creation_fields.invoicing_enabledExample
boolean

Example field from the request body.

delivery_creation_fields.custom_shipment_label_enabledExample
boolean

Example field from the request body.

package_settingsExample
object

Example field from the request body.

package_settings.multipart_enabledExample
boolean

Example field from the request body.

visibility_settingsExample
object

Example field from the request body.

visibility_settings.driver_infoExample
object

Example field from the request body.

visibility_settings.driver_info.show_driver_infoExample
boolean

Example field from the request body.

visibility_settings.driver_info.show_driver_phoneExample
boolean

Example field from the request body.

visibility_settings.trackingExample
object

Example field from the request body.

visibility_settings.tracking.realtime_tracking_enabledExample
boolean

Example field from the request body.

visibility_settings.chatExample
object

Example field from the request body.

visibility_settings.chat.support_chat_enabledExample
boolean

Example field from the request body.

visibility_settings.chat.driver_chat_enabledExample
boolean

Example field from the request body.

support_ticket_settingsExample
object

Example field from the request body.

support_ticket_settings.enabledExample
boolean

Example field from the request body.

support_ticket_settings.allow_customer_closeExample
boolean

Example field from the request body.

support_ticket_settings.support_user_idsExample
array<string>

Example field from the request body.

support_ticket_settings.default_priorityExample
string

Example field from the request body.

support_ticket_settings.auto_assign_on_first_replyExample
boolean

Example field from the request body.

wallet_settingsExample
object

Example field from the request body.

wallet_settings.allowed_payout_user_typesExample
array<string>

Example field from the request body.

track_ordersExample
object

Example field from the request body.

track_orders.enableExample
boolean

Example field from the request body.

track_orders.track_urlExample
string

Example field from the request body.

brand_settingsExample
object

Example field from the request body.

brand_settings.brandExample
object

Example field from the request body.

brand_settings.brand.nameExample
object

Example field from the request body.

brand_settings.brand.page_titleExample
string

Example field from the request body.

brand_settings.assetsExample
object

Example field from the request body.

brand_settings.assets.favicon_urlExample
string

Example field from the request body.

brand_settings.assets.logo_urlExample
string

Example field from the request body.

brand_settings.themeExample
object

Example field from the request body.

brand_settings.theme.colorsExample
object

Example field from the request body.

Headers

AuthorizationOptional
header string

Bearer {{access_token}}

Content-TypeOptional
header string

application/json

Responses

Success200
Response body
json
1{2  "success": true,3  "message": "Tenant Setting Updated Successfully",4  "data": {5    "options": {6      "pickup_settings": {7        "modes": [8          "fixed_default",9          "select_from_list",10          "predefined_only",11          "any_address"12        ],13        "allowed_address_types": [14          "pickup",15          "warehouse",16          "branch"17        ]18      },19      "wallet_settings": {20        "allowed_payout_user_types": [21          "individual",22          "business"23        ]24      }25    },26    "values": {27      "pickup_settings": {28        "mode": "predefined_only",29        "allow_change": true,30        "default_pickup_address_id": "uuid",31        "allowed_pickup_address_ids": [32          "uuid"33        ]34      },35      "brand_settings": {36        "brand": {37          "name": {38            "en": "Acme",39            "ar": "",40            "ku": ""41          },42          "page_title": "Acme Tracking"43        },44        "assets": {45          "favicon_url": "https://...",46          "logo_url": "https://..."47        },48        "theme": {49          "colors": {50            "primary": "#2B14DA",51            "primary2": "#000000",52            "misGrey": "#F7F8FA",53            "misGrey2": "#F3F5F9",54            "blueBigOrder": "#2B7FFF",55            "orangeBgTransit": "#FF6B2B",56            "yellowBgPending": "#E6C718",57            "greenBgDelivered": "#19B53B",58            "redBgDropOff": "#F40909",59            "selectedColor": "rgba(43, 20, 218, 0.05)",60            "activeTextColor": "rgba(0, 0, 0, 1)",61            "iconRestState": "rgba(105, 98, 98, 1)",62            "textRestState": "rgba(105, 98, 98, 1)",63            "characterDisabled": "rgba(0, 0, 0, 0.2)",64            "buttonTextColor": "rgba(255, 255, 255, 1)",65            "overlaysDefault": "rgba(0, 0, 0, 0.2)",66            "neutralStroke": "rgba(217, 217, 217, 1)",67            "backgroundColorWhite": "rgba(255, 255, 255, 1)",68            "borderColor": "rgba(243, 243, 243, 1)"69          }70        }71      }72    }73  }74}