Settings
Permission: management.
Routes
| Method | Route | Since |
|---|---|---|
| GET, PUT, PATCH | /settings/fulfillment | 1.17.0 |
| GET, PUT, PATCH, DELETE | /settings/appearance | 1.19.0 |
| GET, PUT, PATCH, DELETE | /settings/catalog-layout | 1.20.0 |
| PUT | /settings/catalog-layout/category-order | 1.28.0 |
Operations: delivery, pickup and hours
These are the same settings as Delivery, pickup and hours in the app and Services and hours in wp-admin.
GET /settings/fulfillment:
{
"schema_version": 2,
"timezone": "America/Bogota",
"emergency_closed": false,
"allow_scheduled_while_closed": false,
"delivery": {
"enabled": true, "force_disabled": false, "prep_time_minutes": 30, "enforce_hours": true, "minimum_order": "20000",
"date_selection": { "enabled": true, "advance_days": 7 },
"time_selection": { "enabled": true, "allow_now": true, "allow_asap": true, "slot_minutes": 30, "max_orders_per_slot": 8 },
"hours": { "monday": [ { "start": "11:00", "end": "22:00" } ], "sunday": [] },
"fee": { "mode": "distance", "amount": "5000", "per_km_amount": "0",
"distance_tiers": [ { "km_from": 0, "km_to": 3, "fee": "4000" }, { "km_from": 3, "km_to": 8, "fee": "7000" } ] },
"distance": { "store_address": "Carrera 7 # 1-1, Bogotá", "store_latitude": 4.6, "store_longitude": -74.07,
"max_distance_km": 15, "mode": "default", "has_api_key": true, "has_browser_map_key": true }
},
"pickup": {
"enabled": true, "prep_time_minutes": 15, "hide_address": false,
"tables": { "enabled": true, "selection": "qr_or_list", "tables": [ { "id": "t1", "label": "Mesa 1", "zone": "Salón", "capacity": 2, "active": true } ] }
}
}
timezone is read-only: it is the WordPress time zone.
Save
PUT and PATCH merge what you send with what is stored, and hours are merged per day. Send only what you want to change:
curl -X PATCH https://tienda.example.test/wp-json/notiwoo/v1/settings/fulfillment \
-H "Authorization: Bearer <token>" -H "Content-Type: application/json" \
-d '{"delivery": {"prep_time_minutes": 40, "hours": {"tuesday": [{"start": "11:00", "end": "15:00"}]}}}'
- Google keys: send
delivery.distance.google_api_key(server key for the Routes API) andgoogle_maps_browser_key(public Maps JS key). They are never returned: the response only showshas_api_keyandhas_browser_map_key. If you omit a key or send it empty, it is kept. To delete it, sendclear_google_api_key: trueorclear_google_maps_browser_key: true. - Tables:
pickup.tables.tablesreplaces the full list of tables. Prefer/settings/tables.
Validation errors (400): notiwoo_invalid_hours, notiwoo_invalid_hours_range, notiwoo_overlapping_hours, notiwoo_invalid_slot_size, notiwoo_invalid_slot_capacity, notiwoo_invalid_advance_days, notiwoo_invalid_delivery_fee_mode, notiwoo_invalid_delivery_fee, notiwoo_invalid_distance_tiers, notiwoo_overlapping_distance_tiers, notiwoo_invalid_store_location, and other notiwoo_invalid_*. Removing an occupied table responds 409 table_occupied.
Extras popup appearance
GET /settings/appearance responds { colors, defaults, labels, variables }.
PUT takes { "colors": { "surface": "#111827", "text": "#f8fafc", "option": "#1f2937", "accent": "#2563eb" } }. All values must be hexadecimal colors.
DELETE restores the default colors.
Error: 400 notiwoo_invalid_appearance_payload (empty body, unknown key or non-hexadecimal value).
After changing the colors, purge the store cache.
Category menu
GET /settings/catalog-layout responds { settings, defaults, styles, category_order }.
| Setting | Default | Values |
|---|---|---|
enabled | false | |
style | chips | chips, sidebar, tabs or accordion |
sticky | true | Menu stays fixed on scroll. |
show_counts | true | |
show_images | false | Category thumbnails. |
show_all | true | "All" option. |
columns | 3 | 1 to 6. |
max_depth | 2 | Levels, from 1 to 4. |
hide_empty | true | |
product_cap | 300 | 20 to 2000 products. |
menu_mode | false | Menu mode. |
show_description | false | Short description. |
PUT takes { "settings": {...} }. DELETE restores the defaults.
Category order
PUT /settings/catalog-layout/category-order with { "order": [22, 15, 31] } orders the top-level categories. Unknown IDs are discarded and categories you do not send are added at the end. It responds with the full configuration.
See Catalog menu.