Una sucursal de una Company: el comercio que vende productos o servicios, con su ubicación,
su catálogo, sus tarifas y su configuración. Varias sucursales de la misma marca se agrupan en
un BranchGroup (branch_group_id), del que heredan la identidad visual.
enabled — la company habilitó la sucursal. Si es false, no opera.in_service — está abierta ahora. false = cerrada.is_visible — se muestra en las apps de clientes.Transiciones: set-enabled / set-disabled (deshabilitar además apaga is_visible e
in_service), set-visible / set-hidden, set-in-service-enabled / set-in-service-disabled.
Poner en servicio exige que la sucursal sea válida: dirección con coordenadas, stock de
productos, ciudad visible, cuentas de payout y administradores activos; y respetar el horario
de trabajo salvo settings.allow_timetable_skipping.
Estos atributos se leen del branch_group: description, logo_url, logo_alt_url,
is_market (tratar como mercado, muchos SKU), is_featured (destacado), in_order (orden de
aparición), group_rating_e2 / group_rating_sum / group_rating_count y is_digital
(productos digitales). set-featured-enabled / set-featured-disabled operan sobre el
branch_group y están deprecados.
options)options es un bitmask; los flags booleanos derivados (can_*, enable_*, disable_*) se
definen en App\Models\Companies\CommerceBitMasks. Hay dos juegos espejo, uno para envíos
(*_deliveries, *_delivery_*) y otro para servicios (*_services, *_service_*):
can_providers_pick_*_from_pool — los repartidores pueden autoasignarse desde el pool.can_providers_confirm_*_from_clients / _from_admins — el repartidor debe confirmar antes
de tomar la orden, según quién la creó.can_clients_pick_providers_for_* — el cliente elige el repartidor al crear la orden.can_clients_choose_*_after_provider_confirmation / can_admins_choose_*_after_provider_confirmation
— cliente/admin elige entre los repartidores que confirmaron.enable_*_orders_confirmation_by_admins_before_payment — un admin debe aprobar la orden antes del pago.can_providers_forfeit_from_assigned_* — el repartidor puede renunciar a una asignación.disable_* — deshabilita ese tipo de orden (disable_deliveries,
disable_services_on_client_location) o su programación (disable_*_scheduling).enable_bot_for_deliveries / enable_bot_for_services / enable_bot_for_shoppers — bot de
asignación automática.enable_pickups (envíos) — permite retiro en tienda; enable_services_on_branch_location
(servicios) — el servicio puede prestarse en la sucursal.Prueba de entrega (POD): enable_pod_code (PIN), enable_pod_pictures (fotos),
enable_pod_forms (formularios), enable_pod_signature (firma). enabled_pods es la
combinación de esos cuatro bits.
promo_info)Etiqueta de la promo actual; el front la interpreta según el primer carácter:
! → mostrar el resto literal (promo_info.substring(1)).% → porcentaje de descuento: "{resto}% Off".< → agregar prefijo "Hasta": "Hasta {resto}$ de descuento"."10.00" se muestra como "-10.00$".settings)settings es un objeto con la configuración y estadísticas de la sucursal (heredada de la
company si has_custom_settings es false). editable_settings devuelve solo las claves que
el administrador puede modificar (PATCH settings); allowed_settings (solo super-admin)
devuelve todas las filas BranchSetting en crudo. Los setting_* del modelo son el acceso
tipado a estas mismas claves.
Claves editables:
| Clave | Tipo | Descripción |
|---|---|---|
uid |
string | Identificador fiscal del comercio |
slogan |
string | Eslogan |
terms_of_service |
string | Términos de servicio |
max_scheduling_days |
int | Días máximos para programar una orden (0–365) |
scheduling_delay_minutes |
int | Anticipación mínima para programar |
enable_work_schedules |
bool | Usa horarios de trabajo para restringir pedidos |
auto_sync_work_schedules |
bool | El sistema abre/cierra la sucursal según el horario |
pay_in_store |
bool|null | Permite pago en tienda (órdenes pickup) |
order_expiration_minutes |
int | Expiración de una orden no pagada (min, ≥ 5) |
system_expiration_hours |
int|null | Expiración de la orden por el sistema (horas) |
service_fee_name |
string | Nombre del cargo por servicio de la app |
service_fee_e2 / service_fee_prc |
int / float | Cargo por servicio: monto fijo (× 100) y porcentaje (fracción 0–1) — cliente |
order_tax_e2 / order_tax_prc |
int / float | Cargo por servicio total (incluye lo del comercio) |
shopper_fee_e2 / shopper_fee_prc |
int / float | Tarifa de shopper: monto fijo y porcentaje |
shopper_assign_distance |
int | Radio (m) para asignar shopper (≥ 100) |
use_company_service_fees |
bool | Usa los cargos por servicio de la company |
force_branch_service_fees |
bool | Fuerza los cargos por servicio de la sucursal |
min_purchase_amount_e2 |
int | Monto mínimo de compra (× 100) |
max_simultaneous_deliveries |
int | Envíos simultáneos por repartidor (0–20) |
orders_driver_assigning_in_mins |
int | Minutos para asignar repartidor tras el pago |
orders_shopper_eta_config |
array | Config de ETA de shopper (time_base_in_minutes, weight_base_in_kg, extra_minutes_per_10kg) |
auto_assign_driver_upon_payment |
bool | Asigna repartidor automáticamente al pagar |
is_pool_automatic |
bool | Pool automático |
pool_mode |
string | Pool por defecto: company (la company entrega) o branch (el comercio entrega) |
payments_mode |
string | Destino de los pagos: company | branch | both |
auto_eta_calc |
bool | Calcula el ETA automáticamente |
checkout_disclaimer |
string | Aviso a mostrar en el checkout |
allow_offline_orders |
bool | Acepta órdenes con la sucursal cerrada |
allow_timetable_skipping |
bool | Permite operar fuera del horario configurado |
weight_rounding_mode / tax_rounding_mode |
string | Modo de redondeo de peso / de impuestos |
inventory_reminder_delay |
int | Horas para recordar sincronizar inventario (0–720) |
service_reminder_delay |
int | Minutos para recordar servicios (0–60) |
add_rating_sum / add_rating_count |
int | Ajuste manual del rating (suma y cantidad) |
import_config |
array | Configuración de importación de catálogo |
is_special_contributor |
bool | Contribuyente especial (fiscal) |
islr_prc |
float | Retención de ISLR (%) |
iva_retention_prc |
float | Retención de IVA (%) |
is_payment_deduction_disabled |
bool | No deducir el servicio del pago |
is_digital_invoice_enabled |
bool | Factura digital habilitada |
is_global_tax_included |
bool | El impuesto global ya está incluido en los precios |
payout_accounts |
array | Cuentas para recibir pagos |
address_for_fiscal_docs / email_for_fiscal_docs / legal_name_for_fiscal_docs |
string|null | Datos para documentos fiscales |
emails_for_payments |
array|null | Emails para notificaciones de pago |
mark_too_busy_until |
date|null | Marcar la sucursal como muy ocupada hasta esta fecha |
auto_busy_quantity |
int|null | Órdenes activas que disparan el modo "muy ocupada" |
Claves visibles (solo lectura añadidas a lo anterior): min_checkout_price_e2,
holiday_since, holiday_until.
| Atributo | Tipo | Descripción |
|---|---|---|
id |
int |
|
name |
string |
Nombre de la sucursal |
enabled |
bool |
La company habilitó la sucursal; si es false, no opera |
in_service |
bool |
La sucursal está abierta ahora mismo; false = cerrada |
latitude_e6 |
int |
Latitud de la sucursal (× 1e6) |
longitude_e6 |
int |
Longitud de la sucursal (× 1e6) |
banner_url |
string |
URL del banner de la sucursal |
address |
string\|null |
Dirección de la sucursal en texto |
phone |
string\|null |
Teléfono de la sucursal |
time_zone_offset |
string |
Offset de zona horaria (ej. -04:00); base para horarios y programación |
options |
int |
Bitmask de opciones de operación (ver "Opciones de operación") |
has_custom_settings |
bool |
Si es false, la configuración se hereda de la company |
code |
int |
Número correlativo de la sucursal dentro de la company |
created_at |
datetime\|null |
|
updated_at |
datetime\|null |
|
deleted_at |
datetime\|null |
|
company_id |
int |
Company dueña de la sucursal (oculto) |
branch_group_id |
int |
Comercio (marca) al que pertenece la sucursal |
is_visible |
bool |
Si la sucursal se muestra en las apps de clientes |
eta |
string\|null |
Tiempo estimado de entrega en minutos |
internal_code |
string\|null |
Código interno del comercio (referencia propia) |
promo_id |
int\|null |
{@link Coupon} de la promoción activa, si aplica |
promo_info |
string\|null |
Etiqueta de la promoción (ver "Promoción" para el formato) |
rating_e2 |
int |
Rating de la sucursal (× 100) |
rating_sum |
int |
Suma de calificaciones recibidas |
rating_count |
int |
Cantidad de calificaciones recibidas |
domain |
string\|null |
Subdominio/identificador web de la sucursal (por defecto b<code>) |
extensions |
array |
Datos de extensiones / integraciones |
city_id |
int\|null |
{@link \App\Models\City} de la sucursal; define visibilidad y se autodetecta por la ubicación |
can_providers_pick_deliveries_from_pool |
bool |
BitMask (({@link self::options} & 0x1) !== 0) |
can_providers_confirm_deliveries_from_clients |
bool |
BitMask (({@link self::options} & 0x2) !== 0) |
can_clients_pick_providers_for_deliveries |
bool |
BitMask (({@link self::options} & 0x4) !== 0) |
can_clients_choose_deliveries_after_provider_confirmation |
bool |
BitMask (({@link self::options} & 0x8) !== 0) |
can_providers_confirm_deliveries_from_admins |
bool |
BitMask (({@link self::options} & 0x10) !== 0) |
can_admins_choose_deliveries_after_provider_confirmation |
bool |
BitMask (({@link self::options} & 0x20) !== 0) |
enable_delivery_orders_confirmation_by_admins_before_payment |
bool |
BitMask (({@link self::options} & 0x40) !== 0) |
can_providers_forfeit_from_assigned_deliveries |
bool |
BitMask (({@link self::options} & 0x80) !== 0) |
enable_pickups |
bool |
BitMask (({@link self::options} & 0x100) !== 0) |
disable_deliveries |
bool |
BitMask (({@link self::options} & 0x200) !== 0) |
disable_deliveries_scheduling |
bool |
BitMask (({@link self::options} & 0x400) !== 0) |
enable_bot_for_deliveries |
bool |
BitMask (({@link self::options} & 0x800) !== 0) |
can_providers_pick_services_from_pool |
bool |
BitMask (({@link self::options} & 0x1000) !== 0) |
can_providers_confirm_services_from_clients |
bool |
BitMask (({@link self::options} & 0x2000) !== 0) |
can_clients_pick_providers_for_services |
bool |
BitMask (({@link self::options} & 0x4000) !== 0) |
can_clients_choose_services_after_provider_confirmation |
bool |
BitMask (({@link self::options} & 0x8000) !== 0) |
can_providers_confirm_services_from_admins |
bool |
BitMask (({@link self::options} & 0x10000) !== 0) |
can_admins_choose_services_after_provider_confirmation |
bool |
BitMask (({@link self::options} & 0x20000) !== 0) |
enable_service_orders_confirmation_by_admins_before_payment |
bool |
BitMask (({@link self::options} & 0x40000) !== 0) |
can_providers_forfeit_from_assigned_services |
bool |
BitMask (({@link self::options} & 0x80000) !== 0) |
enable_services_on_branch_location |
bool |
BitMask (({@link self::options} & 0x100000) !== 0) |
disable_services_on_client_location |
bool |
BitMask (({@link self::options} & 0x200000) !== 0) |
disable_services_scheduling |
bool |
BitMask (({@link self::options} & 0x400000) !== 0) |
enable_bot_for_services |
bool |
BitMask (({@link self::options} & 0x800000) !== 0) |
enable_pod_code |
bool |
BitMask (({@link self::options} & 0x1000000) !== 0) |
enable_pod_pictures |
bool |
BitMask (({@link self::options} & 0x2000000) !== 0) |
enable_pod_forms |
bool |
BitMask (({@link self::options} & 0x4000000) !== 0) |
enable_pod_signature |
bool |
BitMask (({@link self::options} & 0x8000000) !== 0) |
enabled_pods |
int |
BitMask (({@link self::options} & 0xf000000) >> 24) |
enable_bot_for_shoppers |
bool |
BitMask (({@link self::options} & 0x40000000) !== 0) |
setting_uid |
string |
Identificador fiscal del comercio (clave editable uid) |
setting_slogan |
string |
Eslogan (clave editable slogan) |
setting_max_scheduling_days |
int |
Días máximos para programar una orden |
setting_scheduling_delay_minutes |
int |
Anticipación mínima (min) para programar una orden |
setting_pay_in_store |
bool\|null |
Permite pago en tienda (órdenes pickup) |
setting_enable_work_schedules |
bool |
Usa horarios de trabajo para restringir pedidos |
setting_auto_sync_work_schedules |
bool |
El sistema abre/cierra la sucursal según el horario |
setting_order_expiration_minutes |
int |
Expiración de una orden no pagada (min) |
setting_service_fee_name |
string\|null |
Nombre del cargo por servicio de la app |
setting_service_fee_flat_e2 |
int |
Cargo por servicio, monto fijo al cliente (× 100) |
setting_service_fee_prc |
float |
Cargo por servicio, porcentaje al cliente (fracción 0–1) |
setting_order_tax_flat_e2 |
int |
Cargo por servicio total (con lo del comercio), monto fijo (× 100) |
setting_order_tax_prc |
float |
Cargo por servicio total, porcentaje (fracción 0–1) |
setting_shopper_assign_distance |
int |
Radio (m) para asignar shopper |
setting_shopper_fee_e2 |
int |
Tarifa de shopper, monto fijo (× 100) |
setting_shopper_fee_prc |
float |
Tarifa de shopper, porcentaje (fracción 0–1) |
setting_min_checkout_price_e2 |
int |
Monto mínimo de compra (× 100) |
setting_service_app_modifiers |
Collection<int, \App\Models\ServiceAppSetting> |
Modificadores adicionales del cargo por servicio |
setting_payments_mode |
string |
Destino de los pagos: company | branch | both |
setting_pool_mode |
string |
Pool por defecto: company | branch |
setting_max_simultaneous_deliveries |
int |
Envíos simultáneos por repartidor |
setting_weight_rounding_mode |
string |
Modo de redondeo del peso |
setting_tax_rounding_mode |
string |
Modo de redondeo de impuestos |
setting_use_company_service_fees |
bool |
Usa los cargos por servicio de la company |
setting_force_branch_service_fees |
bool |
Fuerza los cargos por servicio de la sucursal |
setting_work_schedule |
array |
Horario de trabajo (bloques por día de la semana) |
setting_sync_schedule |
array |
Horario de apertura/cierre automático |
setting_flag_schedule |
array |
Horario de banderas/estados especiales |
setting_auto_eta_calc |
bool |
Calcula el ETA automáticamente |
setting_import_config |
array |
Configuración de importación de catálogo |
setting_first_opening_date |
int\|null |
Timestamp de la primera puesta en servicio |
setting_add_rating_sum |
int |
Ajuste manual de la suma de rating |
setting_add_rating_count |
int |
Ajuste manual de la cantidad de calificaciones |
setting_last_inventory_sync |
int\|null |
Timestamp de la última sincronización de inventario |
setting_inventory_reminder_delay |
int |
Horas para recordar sincronizar inventario |
setting_service_reminder_delay |
int |
Minutos para recordar servicios pendientes |
setting_order_min_number |
int |
Número inicial para la numeración de órdenes |
setting_last_order_dashboard |
string\|null |
Último dashboard de órdenes usado (interno) |
setting_terms_of_service |
string\|null |
Términos de servicio del comercio |
setting_checkout_disclaimer |
string\|null |
Aviso a mostrar en el checkout |
setting_allow_offline_orders |
bool |
Acepta órdenes con la sucursal cerrada |
setting_allow_timetable_skipping |
bool |
Permite operar fuera del horario configurado |
setting_system_expiration_hours |
int\|null |
Expiración de la orden por el sistema (horas) |
setting_orders_shopper_eta_config |
array |
Config de ETA de shopper (time_base_in_minutes, weight_base_in_kg, extra_minutes_per_10kg) |
setting_orders_driver_assigning_in_mins |
int |
Minutos para asignar repartidor tras el pago |
setting_is_pool_automatic |
bool |
Pool automático |
setting_is_special_contributor |
bool |
Contribuyente especial (fiscal) |
setting_islr_prc |
float |
Retención de ISLR (%) |
setting_iva_retention_prc |
float |
Retención de IVA (%) |
setting_is_payment_deduction_disabled |
bool |
No deducir el servicio del pago al comercio |
setting_is_digital_invoice_enabled |
bool |
Factura digital habilitada |
setting_is_global_tax_included |
bool |
El impuesto global ya está incluido en los precios |
setting_payout_accounts |
PayoutAccount[]\|null |
Cuentas para recibir pagos (payout) |
setting_taxes |
array |
Impuestos configurados para la sucursal |
setting_auto_assign_driver_upon_payment |
bool |
Asigna repartidor automáticamente al pagar |
setting_address_for_fiscal_docs |
string\|null |
Dirección para documentos fiscales |
setting_email_for_fiscal_docs |
string\|null |
Email para documentos fiscales |
setting_legal_name_for_fiscal_docs |
string\|null |
Razón social para documentos fiscales |
setting_emails_for_payments |
array\|null |
Emails para notificaciones de pago |
setting_mark_too_busy_until |
datetime\|null |
Marcar la sucursal como muy ocupada hasta esta fecha |
setting_auto_busy_quantity |
int\|null |
Órdenes activas que disparan el modo "muy ocupada" |
setting_holiday_since |
datetime\|null |
Inicio del período de feriado/pausa |
setting_holiday_until |
datetime\|null |
Fin del período de feriado/pausa |
activeBalanceModifiers |
BalanceModifier> |
|
allLogs |
ApiLog> |
|
allOrders |
Order> |
Órdenes de la sucursal, incluidas las archivadas |
allSettings |
BranchSetting> |
|
allowed_settings |
array |
Todas las filas de configuración en crudo (solo super-admin) |
available_balance_e2 |
int |
Saldo disponible de la sucursal (× 100) |
available_for_withdrawal_balance_e2 |
int |
Saldo disponible para retiro (× 100) |
balance_e2 |
int |
Saldo total de la sucursal (× 100) |
balanceModifiers |
BalanceModifier> |
|
balanceMovements |
BalanceMovement> |
|
branchGoods |
BranchGood> |
Catálogo (ofertas de productos) de la sucursal |
branchGroup |
BranchGroup |
Comercio (marca) al que pertenece |
categories |
Category> |
Categorías de producto de la sucursal |
categoriesWithCount |
Category> |
|
city |
City\|null |
|
company |
Company |
|
currencies |
Currency> |
Monedas configuradas para la sucursal |
deliveryFees |
DeliveryFee> |
|
description |
string\|null |
Descripción del comercio (heredada del branch_group) |
editable_settings |
array |
Configuración que el administrador puede modificar (ver "Configuración de la sucursal") |
eta_info |
array |
Tiempo probable de entrega estimado por IA según los artículos y la hora del pedido |
first_opening_date |
datetime\|null |
Primera vez que la sucursal entró en servicio |
firstOpeningDateSetting |
BranchSetting\|null |
|
firstOrder |
Order\|null |
Primera orden de la sucursal |
geofence_check |
array\|null |
Cobertura de la sucursal para la ubicación consultada (Company::check) |
geofences |
BranchGeofence> |
Geocercas de cobertura de la sucursal |
google_maps_url |
string\|null |
|
group_rating_count |
int\|null |
Cantidad de calificaciones a nivel del comercio (heredado) |
group_rating_e2 |
int\|null |
Rating a nivel del comercio, × 100 (heredado) |
group_rating_sum |
int\|null |
Suma de calificaciones a nivel del comercio (heredado) |
in_order |
int\|null |
Orden de aparición del comercio (heredado) |
in_service_until |
datetime\|null |
Hora de cierre cuando la sucursal está por cerrar |
international_currency |
Currency\|null |
Moneda internacional de la sucursal |
is_branch_closing_soon |
bool |
Mostrar aviso de que la sucursal está por cerrar |
is_featured |
bool\|null |
La sucursal está destacada (heredado) |
is_market |
bool\|null |
Tratar la sucursal como un mercado, con muchos SKU (heredado) |
is_new_branch |
bool |
La sucursal es nueva |
is_too_busy |
bool |
La sucursal está marcada como muy ocupada (posibles demoras) |
lastBalanceMovement |
BalanceMovement\|null |
|
local_currency |
Currency\|null |
Moneda local de la sucursal |
locked_for_withdrawal_balance_e2 |
int |
Saldo bloqueado para retiro (× 100) |
logo_alt_url |
string\|null |
Logo alternativo del comercio (heredado) |
logo_url |
string\|null |
Logo del comercio (heredado) |
logs |
ApiLog> |
|
options_info |
array |
Descripción legible de options |
orders |
Order> |
Órdenes activas de la sucursal |
pendingFeeConciliations |
PendingFeeConciliation> |
|
pivotBranchCategories |
PivotBranchCategory> |
|
promo |
Coupon\|null |
Cupón de la promoción activa |
providersWithAccess |
Provider> |
Repartidores con acceso a la sucursal |
public_rating_e2 |
int |
Rating mostrado públicamente (suavizado; × 100) |
resources |
UploadedResource> |
|
settings |
array |
Configuración y estadísticas de la sucursal (ver "Configuración de la sucursal") |
smart_address |
string |
Dirección resumida para mostrar |
workSchedules |
WorkSchedule> |
Horarios de trabajo de la sucursal |
Crear sucursal
Crea una Branch dentro de un branch_group (marca). Hereda las options de la
company y arranca deshabilitada, fuera de servicio y no visible. Si se envía
location_google_maps_link, se extraen de ahí la dirección y las coordenadas. Acepta
settings para la configuración inicial y sincroniza el catálogo desde el comercio.
| Método | URI | Cabeceras |
|---|---|---|
| POST | /companies/{companyId}/branch-groups/{branchGroupId}/branches |
Authorization |
{info} Soporta: Paginación Filters
Listar sucursales
Lista las Branch de la company (ordenadas por visibles y habilitadas primero).
| Método | URI | Cabeceras |
|---|---|---|
| GET | /companies/{companyId}/branches |
N/A |
Arma el home de la app para una ubicación (latitude_e6 / longitude_e6, distance_in_meters
opcional): Branch cercanas agrupadas por secciones y categorías, secciones de
productos destacados con stock disponible y banners promocionados. Se usa para la pantalla
principal del cliente.
| Método | URI | Cabeceras |
|---|---|---|
| GET | /companies/{companyId}/branches/by-sections |
N/A |
{
"latitude_e6": "required|integer|between:-90000000,90000000",
"longitude_e6": "required|integer|between:-180000000,180000000",
"distance_in_meters": "integer"
}
{info} Soporta: Paginación Filters Carga dinámica
Listar sucursales de un comercio
Lista las Branch del branch_group (marca) indicado.
| Método | URI | Cabeceras |
|---|---|---|
| GET | /companies/{companyId}/branch-groups/{branchGroupId}/branches |
N/A |
Devuelve las claves de Branch settings que el administrador puede modificar.
| Método | URI | Cabeceras |
|---|---|---|
| GET | /companies/{companyId}/branches/{branchId}/settings |
Authorization |
{info} Soporta: Paginación Filters
Listar sucursales de una categoría
Lista las Branch asociadas a la BranchCategory indicada. Si la categoría es de nivel superior, incluye las de todas sus subcategorías.
| Método | URI | Cabeceras |
|---|---|---|
| GET | /companies/{companyId}/branch-categories/{branchCategoryId}/branches |
N/A |
{info} Soporta: Carga dinámica
Mostrar sucursal
Devuelve la Branch (acepta sucursales archivadas). Si se envían coordenadas
(latitude_e6 / longitude_e6), geofence_check indica si esa ubicación entra en la
cobertura de la sucursal.
| Método | URI | Cabeceras |
|---|---|---|
| GET | /companies/{companyId}/branches/{branchId} |
N/A |
{
"latitude_e6": "integer|between:-90000000,90000000",
"longitude_e6": "integer|between:-180000000,180000000"
}
Actualizar sucursal
Actualiza datos de la Branch. Si se envía location_google_maps_link, se extraen de
ahí la dirección y las coordenadas. in_order se guarda en el branch_group (marca).
| Método | URI | Cabeceras |
|---|---|---|
| PATCH | /companies/{companyId}/branches/{branchId} |
Authorization |
{
"name": "max:112|string",
"location_google_maps_link": "max:255|url",
"latitude_e6": "integer|between:-90000000,90000000",
"longitude_e6": "integer|between:-180000000,180000000",
"address": "string|max:255",
"phone": "string",
"eta": "string",
"internal_code": "string|max:16",
"time_zone_offset": {
"string": true,
"regex": "/^[\+\-]([0-1][0-9]|2[0-3]):[0-5][0-9]$/"
},
"options": "integer",
"has_custom_settings": "boolean",
"domain": "max:32|domain",
"city_id": "nullable|integer|exists:cities,id"
}
Actualiza las claves editables de Branch settings (ver "Configuración de la
sucursal" en el modelo). Las claves no editables se ignoran; las claves protegidas requieren
acceso a nivel de company. Acepta valores en formato "humano" (human_*). Un cambio en las
tarifas de servicio dispara un email de aviso.
| Método | URI | Cabeceras |
|---|---|---|
| PATCH | /companies/{companyId}/branches/{branchId}/settings |
Authorization |
{
"uid": "string|max:64",
"slogan": "string|max:80",
"max_scheduling_days": "integer|min:0|max:365",
"scheduling_delay_minutes": "integer|min:0",
"enable_work_schedules": "boolean",
"auto_sync_work_schedules": "boolean",
"pay_in_store": "nullable|boolean",
"order_expiration_minutes": "integer|min:5",
"service_fee_name": "nullable|string|max:40",
"service_fee_flat_e2": "integer|min:0",
"human_service_fee_flat_e2": "numeric|min:0.0",
"service_fee_prc": "numeric|between:0.0000,1.0000",
"human_service_fee_prc": "numeric|between:0.00,100.00",
"order_tax_flat_e2": "integer|min:0",
"human_order_tax_flat_e2": "numeric|min:0.0",
"order_tax_prc": "numeric|between:0.0000,1.0000",
"human_order_tax_prc": "numeric|between:0.00,100.00",
"shopper_fee_e2": "integer|min:0",
"shopper_assign_distance": "integer|min:100",
"human_shopper_fee_e2": "numeric|min:0.0",
"shopper_fee_prc": "numeric|between:0.0000,1.0000",
"human_shopper_fee_prc": "numeric|between:0.00,100.00",
"add_rating_sum": "integer|min:0",
"add_rating_count": "integer|min:0",
"min_checkout_price_e2": "integer|min:0",
"human_min_checkout_price_e2": "numeric|min:0.0",
"import_config": "array",
"terms_of_service": "string",
"max_simultaneous_deliveries": "integer|min:0|max:20",
"auto_eta_calc": "boolean",
"checkout_disclaimer": "string",
"allow_offline_orders": "boolean",
"allow_timetable_skipping": "boolean",
"inventory_reminder_delay": "integer|min:0|max:720",
"service_reminder_delay": "integer|min:0|max:60",
"use_company_service_fees": "boolean",
"force_branch_service_fees": "boolean",
"system_expiration_hours": "nullable|integer|min:0",
"orders_driver_assigning_in_mins": "integer|min:0",
"is_pool_automatic": "boolean",
"is_special_contributor": "boolean",
"islr_prc": "numeric|between:0.00,100.00",
"human_islr_prc": "numeric|between:0.00,100.00",
"iva_retention_prc": "numeric|between:0.00,100.00",
"human_iva_retention_prc": "numeric|between:0.00,100.00",
"is_payment_deduction_disabled": "boolean",
"is_digital_invoice_enabled": "boolean",
"is_global_tax_included": "boolean",
"payout_accounts": [
{
"type": "required_with:payout_accounts.*|string|in:national_bank_account,mobile_payment",
"document": "required_if:type,national_bank_account|required_if:type,mobile_payment|string|regex:/^[VEJGP].{7,15}$/",
"name": "required_if:type,national_bank_account|string",
"account": "required_if:type,national_bank_account|string|min:20",
"bank_name": "required_if:type,national_bank_account|string|min:3|max:64",
"bank_code": "required_if:type,mobile_payment|string|size:4",
"phone": "required_if:type,mobile_payment|string|max:32",
"email": "nullable|email:rfc,filter",
"alias": "nullable|string|max:40"
}
],
"auto_assign_driver_upon_payment": "boolean",
"address_for_fiscal_docs": "nullable|string|max:160",
"email_for_fiscal_docs": "nullable|string|email:rfc,filter",
"legal_name_for_fiscal_docs": "nullable|string|max:255",
"emails_for_payments": [
{
"email": "rfc,filter"
}
],
"mark_too_busy_until": "nullable|date",
"auto_busy_quantity": "nullable|integer",
"payments_mode": "string|in:company,branch,both",
"pool_mode": "string|in:company,branch",
"weight_rounding_mode": "string|in:ceil,floor,half_up,half_down,truncate",
"tax_rounding_mode": "string|in:ceil,floor,half_up,half_down,truncate",
"orders_shopper_eta_config": {
"time_base_in_minutes": {
"required_with": "orders_shopper_eta_config",
"integer": true,
"min": " 1"
},
"weight_base_in_kg": {
"required_with": "orders_shopper_eta_config",
"integer": true,
"min": " 1"
},
"extra_minutes_per_10kg": {
"required_with": "orders_shopper_eta_config",
"integer": true,
"min": " 1"
}
},
"service_app_modifiers": [
{
"is_enabled": "boolean",
"name": "required|string|max:32",
"label": "string|max:32",
"description": "string",
"layer": "integer|min:0|max:255",
"price_min_e2": "integer|min:0",
"human_price_min_e2": "numeric|min:0.0",
"price_max_e2": "integer",
"human_price_max_e2": "numeric",
"hour_beg": {
"string": true,
"regex": "/^([0-1][0-9]|2[0-3]):[0-5][0-9]$/"
},
"hour_end": {
"string": true,
"regex": "/^([0-1][0-9]|2[0-3]):[0-5][0-9]$/"
},
"conditions": "array",
"payment_methods": [
"required|string"
],
"payment_currencies": [
"required|string"
]
}
],
"taxes": [
{
"is_enabled": "boolean",
"name": "required|string|max:32",
"label": "string|max:32",
"description": "string",
"layer": "integer|min:0|max:255",
"price_min_e2": "integer|min:0",
"human_price_min_e2": "numeric|min:0.0",
"price_max_e2": "integer",
"human_price_max_e2": "numeric",
"hour_beg": {
"string": true,
"regex": "/^([0-1][0-9]|2[0-3]):[0-5][0-9]$/"
},
"hour_end": {
"string": true,
"regex": "/^([0-1][0-9]|2[0-3]):[0-5][0-9]$/"
},
"conditions": "array",
"payment_methods": [
"required|string"
],
"payment_currencies": [
"required|string"
]
}
]
}
Eliminar sucursal
Elimina la Branch. Debe estar deshabilitada y fuera de servicio. Si tiene órdenes, se archiva (soft delete); si no, se borra físicamente.
| Método | URI | Cabeceras |
|---|---|---|
| DELETE | /companies/{companyId}/branches/{branchId} |
Authorization |
| Código | HTTP | Cuándo ocurre |
|---|---|---|
EA171 |
400 | La sucursal está habilitada; hay que deshabilitarla primero. |
EA173 |
400 | La sucursal está en servicio; hay que sacarla de servicio primero. |
Restaurar sucursal
Restaura una Branch archivada (soft delete). Acepta los campos de update para
aplicarlos al restaurar.
| Método | URI | Cabeceras |
|---|---|---|
| POST | /companies/{companyId}/branches/{branchId}/restore |
Authorization |
{
"name": "string|max:112"
}
{info} Soporta: Paginación Filters
Devuelve las Branch visibles con su ubicación, logo, estado de servicio y un
heatmap_intensity (órdenes activas de envío sin recolectar). Respuesta cacheada ~15 s.
| Método | URI | Cabeceras |
|---|---|---|
| GET | /companies/{companyId}/branches/all |
N/A |
Ejecuta una acción sobre varias Branch a la vez (campo ids). El parámetro de ruta
action acepta: set-in-service-enabled, set-in-service-disabled, set-enabled,
set-disabled, set-featured-enabled, set-featured-disabled, set-visible,
set-hidden, update, delete. Cada sucursal se procesa como si se llamara al endpoint
individual; la respuesta detalla el resultado por sucursal. Los errores de negocio son los
del endpoint de la acción elegida.
| Método | URI | Cabeceras |
|---|---|---|
| POST | /companies/{companyId}/branches/batch-action/{action} |
Authorization |
{
"ids": [
"integer|min:1"
],
"payload": ""
}
Reemplaza el logo (campo image). El logo se guarda en el branch_group (marca), así que
afecta a todas las sucursales del comercio.
| Método | URI | Cabeceras |
|---|---|---|
| POST | /companies/{companyId}/branches/{branchId}/upload-logo |
Authorization |
{
"image": "required|image|mimes:jpeg,png,bmp|max:8192|dimensions:min_width=600,ratio=1/1"
}
Reemplaza banner_url con la imagen subida (campo image). El banner es propio de la
sucursal (no del comercio).
| Método | URI | Cabeceras |
|---|---|---|
| POST | /companies/{companyId}/branches/{branchId}/upload-banner |
Authorization |
{
"image": "required|image|mimes:jpeg,png,bmp|max:8192|dimensions:min_width=868,min_height=868"
}
Marca la Branch como habilitada (enabled = true). No la pone en servicio ni visible.
| Método | URI | Cabeceras |
|---|---|---|
| POST | /companies/{companyId}/branches/{branchId}/set-enabled |
Authorization |
| Código | HTTP | Cuándo ocurre |
|---|---|---|
EA171 |
400 | La sucursal ya está habilitada. |
Marca la Branch como deshabilitada y además la oculta (is_visible = false) y la
saca de servicio (in_service = false).
| Método | URI | Cabeceras |
|---|---|---|
| POST | /companies/{companyId}/branches/{branchId}/set-disabled |
Authorization |
| Código | HTTP | Cuándo ocurre |
|---|---|---|
EA170 |
400 | La sucursal no está habilitada. |
Abre la Branch (in_service = true, y la hace visible). Exige que la sucursal sea
válida para operar y que el horario de trabajo lo permita (salvo
settings.allow_timetable_skipping o acceso de administrador de la company).
| Método | URI | Cabeceras |
|---|---|---|
| POST | /companies/{companyId}/branches/{branchId}/set-in-service-enabled |
Authorization |
| Código | HTTP | Cuándo ocurre |
|---|---|---|
EA170 |
400 | La sucursal no está habilitada. |
EA173 |
400 | La sucursal ya está en servicio. |
EA179 |
400 | La sucursal no tiene una dirección con coordenadas válidas. |
EA174 |
400 | La sucursal no tiene stock de productos. |
EA181 |
400 | La ciudad de la sucursal no está visible. |
EF607 |
400 | La sucursal no tiene cuentas de payout configuradas. |
EA180 |
400 | La sucursal no tiene administradores activos. |
EC223 |
400 | La sucursal está fuera de horario según sus horarios de trabajo. |
Cierra la Branch (in_service = false). No cambia enabled ni is_visible.
| Método | URI | Cabeceras |
|---|---|---|
| POST | /companies/{companyId}/branches/{branchId}/set-in-service-disabled |
Authorization |
| Código | HTTP | Cuándo ocurre |
|---|---|---|
EA172 |
400 | La sucursal no está en servicio. |
{warning} Endpoint deprecado. Marca el
branch_groupde la Branch como destacado.
| Método | URI | Cabeceras |
|---|---|---|
| POST | /companies/{companyId}/branches/{branchId}/set-featured-enabled |
Authorization |
| Código | HTTP | Cuándo ocurre |
|---|---|---|
EA176 |
400 | El comercio ya está destacado. |
{warning} Endpoint deprecado. Quita el destacado del
branch_groupde la Branch.
| Método | URI | Cabeceras |
|---|---|---|
| POST | /companies/{companyId}/branches/{branchId}/set-featured-disabled |
Authorization |
| Código | HTTP | Cuándo ocurre |
|---|---|---|
EA175 |
400 | El comercio no está destacado. |
Marca la Branch como visible (is_visible = true). Requiere que esté habilitada,
con dirección válida y con stock de productos.
| Método | URI | Cabeceras |
|---|---|---|
| POST | /companies/{companyId}/branches/{branchId}/set-visible |
Authorization |
| Código | HTTP | Cuándo ocurre |
|---|---|---|
EA170 |
400 | La sucursal no está habilitada. |
EA178 |
400 | La sucursal ya está visible. |
EA179 |
400 | La sucursal no tiene una dirección con coordenadas válidas. |
EA174 |
400 | La sucursal no tiene stock de productos. |
Marca la Branch como no visible (is_visible = false). No cambia enabled ni
in_service.
| Método | URI | Cabeceras |
|---|---|---|
| POST | /companies/{companyId}/branches/{branchId}/set-hidden |
Authorization |
| Código | HTTP | Cuándo ocurre |
|---|---|---|
EA177 |
400 | La sucursal no está visible. |
Devuelve todas las filas BranchSetting en crudo. Restringido a super-admin.
| Método | URI | Cabeceras |
|---|---|---|
| GET | /companies/{companyId}/branches/{branchId}/allowed-settings |
Authorization |
activeBalanceModifiers HasMany BalanceModifierallLogs HasMany ApiLogallOrders HasMany OrderbalanceModifiers HasMany BalanceModifierbalanceMovements HasMany BalanceMovementbranchGoods HasMany BranchGoodbranchGroup BelongsTo BranchGroupcategories HasMany CategorycategoriesWithCount HasMany Categorycity BelongsTo Citycompany BelongsTo Companycurrencies HasMany CurrencydeliveryFees HasMany DeliveryFeefirstOpeningDateSetting HasOne BranchSettingfirstOrder HasOne Ordergeofences HasMany BranchGeofencelastBalanceMovement HasOne BalanceMovementlogs HasMany ApiLogorders HasMany OrderpendingFeeConciliations HasMany PendingFeeConciliationpivotBranchCategories HasMany PivotBranchCategorypromo BelongsTo CouponprovidersWithAccess HasMany ProviderworkSchedules HasMany WorkSchedule