Company


El tenant raíz de la plataforma: una compañía o negocio con su catálogo, sus clientes, sus repartidores, sus comercios (Branch) y su configuración independiente. Casi todas las rutas del API van prefijadas por companies/{companyId}.

Estado y plan

  • enabled — si la company opera. Al deshabilitarla se corta el acceso.
  • expires_at / extension_days — vencimiento del plan; set-expiration lo ajusta.
  • plan — Plan contratado.

Marca blanca

  • domain — subdominio en la plataforma; custom_domain — dominio propio del cliente.
  • strings_json — textos personalizados de las apps; styles_json — tema visual (colores, logos); custom_json — configuración adicional (oculto; se expone por otro endpoint). styles_json se edita con POST companies/{id}/styles.
  • default_iso_lang — idioma por defecto; country_iso / time_zone_offset — país y zona horaria.

Opciones de operación (options)

options es el mismo bitmask que Branch (App\Models\Companies\CommerceBitMasks): los flags can_* / enable_* / disable_* definen el modo de asignación de repartidores y servicios, retiros en tienda, bots de asignación y la prueba de entrega (POD). Las sucursales heredan estas opciones al crearse. Ver la doc de Branch para el detalle de cada grupo.

Configuración (settings)

settings es un objeto con la configuración de la company. editable_settings devuelve solo las claves modificables (PATCH settings); allowed_settings (solo super-admin) devuelve las filas CompanySetting en crudo. Los setting_* del modelo son el acceso tipado. Incluye, entre otras: identidad fiscal (uid), features (enable_invoices, enable_coupons, enable_multi_providers, enable_phone_login, is_marketplace), distancias de operación (nearby_branches_distance, provider_collecting_distance, provider_arriving_distance), auto-asignación (auto_assign_*), SMS (sms_*), verificación de cuentas (is_verification_required, is_full_verification_required), facturación automática (auto_provider_invoice_config, auto_branch_invoice_config) e integraciones (Telegram, WhatsApp, Facebook/Apple login, Bancamiga/SyPago, Braze, Unidigital, Google, servicio de rutas).

Estructura de Datos

Atributo Tipo Descripción
id int
name string Nombre de la company
email string Email de contacto principal
domain string Subdominio de la company en la plataforma
custom_domain string\|null Dominio propio del cliente
expires_at datetime Vencimiento del plan
extension_days int Días de extensión otorgados sobre el vencimiento
options int Bitmask de opciones de operación (ver "Opciones de operación")
plan int {@link Plan} contratado
enabled bool Si la company opera
strings_json object Textos personalizados de las apps (marca blanca)
styles_json object Tema visual: colores, logos, tipografías (marca blanca)
custom_json array Configuración adicional de la company (oculto)
default_iso_lang string Idioma por defecto (ISO)
folder_name string Carpeta de almacenamiento de archivos de la company (oculto)
created_at datetime\|null
updated_at datetime\|null
deleted_at datetime\|null
country_iso string País de la company (ISO)
time_zone_offset string Offset de zona horaria (ej. -04:00)
direct_order_prefix int\|null Prefijo para el uid de órdenes de envío directo
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 de la company (clave editable uid)
setting_slogan string Eslogan (clave editable slogan)
setting_mail_footer string Pie de página de los correos (clave editable mail_footer)
setting_mail_from string\|null Remitente de los correos (clave editable mail_from)
setting_mail_customizations array Personalizaciones de plantillas de correo
setting_pay_in_store bool Permite pago en tienda por defecto (clave editable pay_in_store)
setting_enable_invoices bool Facturación habilitada (clave editable enable_invoices)
setting_enable_multi_providers bool Varios repartidores por orden (clave editable enable_multi_providers)
setting_enable_phone_login bool Login por teléfono habilitado (clave editable enable_phone_login)
setting_enable_coupons bool Cupones habilitados (clave editable enable_coupons)
setting_invoice_format array Formato de la factura impresa (head, body, item, paper, orientation…)
setting_contact_phone string\|null Teléfono de contacto (clave editable contact_phone)
setting_contact_phone_whatsapp string\|null WhatsApp de contacto (clave editable contact_phone_whatsapp)
setting_disable_balance bool Deshabilita el uso de saldo (clave editable disable_balance)
setting_telegram_token string\|null Token del bot de Telegram
setting_whatsapp_phone_id string\|null Id de teléfono de WhatsApp Business
setting_whatsapp_messaging_token string\|null Token de mensajería de WhatsApp
setting_is_marketplace bool La company es un marketplace (clave visible is_marketplace)
setting_work_schedule array Horario de trabajo por defecto
setting_sync_schedule array Horario de apertura/cierre automático por defecto
setting_facebook_app_id string App id de Facebook Login
setting_facebook_secret_token string Secret de Facebook Login
setting_apple_id string Apple id para Sign in with Apple
setting_apple_private_key string Clave privada de Sign in with Apple
setting_apple_secret string Secret de Sign in with Apple
setting_apple_team_id string Team id de Apple
setting_apple_client_id string Client id de Apple
setting_apple_redirect string URL de redirección de Sign in with Apple
setting_sockette_keys array Claves del servicio de sockets (tiempo real)
setting_tip_threshold int Monto a partir del cual se sugiere propina (clave editable tip_threshold)
setting_nearby_branches_distance int Radio (m) para considerar comercios cercanos
setting_provider_collecting_distance int Radio (m) permitido para marcar recolección
setting_provider_arriving_distance int Radio (m) permitido para marcar llegada
setting_min_nearby_branches_count int Mínimo de comercios para armar una sección de cercanos
setting_max_nearby_branches_count int Máximo de comercios a mostrar como cercanos
setting_nearby_providers_distance int Radio (m) para considerar repartidores cercanos (deprecado por Fleets)
setting_assignable_orders_mask int Máscara de estados de orden asignables (deprecado por Fleets)
setting_auto_assign_delay_minutes int Minutos de espera antes de auto-asignar
setting_auto_assign_prepared_mode bool Auto-asignar solo cuando la orden está preparada
setting_auto_assign_bid_count int Cantidad de repartidores a los que se ofrece cada orden
setting_auto_assign_bid_attempts int Rondas de oferta antes de escalar
setting_subcategories_count int Subcategorías a mostrar en el home
setting_branch_closing_soon_message_delay int\|null Minutos antes del cierre para avisar "cierra pronto"
setting_two_step_verification_endpoints array Endpoints que exigen verificación en dos pasos
setting_service_app_modifiers array Modificadores del cargo por servicio de la app
setting_branch_invoice_tax_name string\|null Nombre del impuesto en la factura al comercio
setting_branch_invoice_tax_prc float\|null Porcentaje del impuesto en la factura al comercio (fracción 0–1)
setting_payout_accounts array\|null Cuentas de payout de la company
setting_taxes array Impuestos configurados a nivel company
setting_delivery_discount_prc float Descuento porcentual por defecto sobre el envío (fracción 0–1)
setting_service_app_name string\|null Nombre del cargo por servicio de la app
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 de la company
setting_checkout_disclaimer string\|null Aviso a mostrar en el checkout
setting_qr_logo string\|null Logo (base64) para los códigos QR
setting_use_providers_balance_payouts bool\|null Pagar a repartidores usando su saldo en vez de payout
setting_auto_provider_invoice_config AutoInvoiceConfig Configuración de facturación automática a repartidores
setting_auto_branch_invoice_config AutoInvoiceConfig Configuración de facturación automática a comercios
setting_google_account_json array\|null Credenciales de la cuenta de servicio de Google
setting_bancamiga_settings array\|null Configuración de la integración Bancamiga
setting_bancamiga_tokens array\|null Tokens de la integración Bancamiga
setting_optimal_route_settings OptimalRouteSettings\|null Configuración de optimización de rutas
setting_linked_servers array\|null Servidores vinculados (integraciones entre instancias)
setting_hidden_status_mask int Máscara de estados de orden ocultos en los listados
setting_is_full_verification_required bool Exige verificación completa de la cuenta antes de operar
setting_is_verification_required bool Exige verificación de la cuenta antes de operar
setting_cancel_on_payment_failure bool Cancela la orden automáticamente si falla el pago
setting_default_promoted_banner string\|null Banner promocionado por defecto
setting_disable_reports bool Deshabilita los reportes
setting_sms_enabled bool Envío de SMS habilitado
setting_sms_default_provider string\|null Proveedor de SMS por defecto
setting_sms_login_provider string\|null Proveedor de SMS para el login
setting_sms_providers array Configuración de los proveedores de SMS
setting_sms_notifications_enabled bool Notificaciones por SMS habilitadas
setting_sms_expiration_in_minutes int Vigencia del código SMS (min)
setting_sms_cooldown_in_seconds int Espera entre envíos de SMS (s)
setting_sms_enabled_for_clients_tracking bool SMS de seguimiento al cliente habilitados
setting_first_purchase_bonus_e2 int Bono de saldo por la primera compra (× 100)
setting_system_expiration_hours int Horas tras las que el sistema expira una orden
setting_disable_payment_emails bool Deshabilita los correos de pago
setting_directions_api string\|null Proveedor del servicio de rutas
setting_directions_key string\|null API key del servicio de rutas
setting_directions_url string\|null URL del servicio de rutas
setting_email_templates_dir string\|null Directorio de plantillas de correo (interno)
setting_unidigital_settings UnidigitalSettings Configuración de la integración Unidigital
setting_unidigital_config UnidigitalConfig Config de la integración Unidigital
setting_braze_settings BrazeSettings Configuración de la integración Braze
setting_sypago_settings SyPagoSettings\|null Configuración de la integración SyPago
setting_delivery_actions DeliveryActions Acciones de entrega habilitadas / su orden
setting_syspago_token string\|null Token de SyPago
setting_hot_tag_days int\|null Ventana de días para calcular el tag $Hot (más vendidos)
setting_hot_tag_sales int\|null Ventas mínimas para el tag $Hot
setting_template string Plantilla de comportamiento de la company (clave visible/editable template)
setting_linked_company_id int\|null Company vinculada (para integraciones entre companies)
setting_legal_info array\|null Datos legales de la company
accounts Account> Cuentas de la company
activeBalanceModifiers BalanceModifier>
allCurrencies Currency>
allLogs ApiLog>
allSettings CompanySetting>
allowed_settings array Configuración en crudo (solo super-admin)
available_balance_e2 int Saldo disponible de la company (× 100)
available_for_withdrawal_balance_e2 int Saldo disponible para retiro (× 100)
balance_e2 int Saldo total de la company (× 100)
balanceModifiers BalanceModifier>
balanceMovements BalanceMovement>
branches Branch> Sucursales de la company
cancellationReasons CancellationReason>
categories Category>
countries Country>
currencies Currency> Monedas soportadas por la company
deliveryFees DeliveryFee>
editable_settings array Configuración que un administrador puede modificar
email_for_mails string Email desde el que se envían los correos de la company
forms Form> Formularios de pago manual de la company
geofences BranchGeofence> Geocercas de cobertura de la company
goods Good>
invoices Invoice>
lastBalanceMovement BalanceMovement\|null
locked_for_withdrawal_balance_e2 int Saldo bloqueado para retiro (× 100)
logs ApiLog>
orderedGoods OrderedGood>
orders Order>
paymentMethods PaymentMethod> Pasarelas de pago configuradas
payments Payment>
pendingActions PendingAction> Acciones pendientes de configuración
properties Property>
providersWithAccess Provider>
settings array Configuración y features de la company (ver "Configuración")
template CompanyTemplate Plantilla de comportamiento de la company (según settings.template)
tokens Collection<int, AccessToken>
workSchedules WorkSchedule>
{
    "id": 116,
    "name": "Zupper by Ridery",
    "email": "noreply@dondemand.io",
    "domain": "panel-dev",
    "custom_domain": "dondemand.io",
    "expires_at": "2056-05-02 12:37:54",
    "extension_days": 0,
    "options": 1265637777,
    "plan": 2147483647,
    "enabled": true,
    "strings_json": {
        "strings": [],
        "version": 1
    },
    "styles_json": {
        "styles": {
            "color_primary": "/docs/3/company#070000",
            "color_accent": "/docs/3/company#070000",
            "company_logo": "https://dondemand-dev.sfo3.cdn.digitaloceanspaces.com/companies/69/logo/logo_116_1759503332.png",
            "company_logo_inv": "https://dondemand-dev.sfo3.cdn.digitaloceanspaces.com/companies/69/logo/logo_inv_116_1759634617.png"
        },
        "version": 52
    },
    "default_iso_lang": "es",
    "created_at": "2020-04-20 15:24:38",
    "updated_at": "2026-05-04 16:00:40",
    "deleted_at": null,
    "country_iso": "ve",
    "time_zone_offset": "-04:00",
    "direct_order_prefix": null,
    "can_providers_pick_deliveries_from_pool": true,
    "can_providers_confirm_deliveries_from_clients": false,
    "can_clients_pick_providers_for_deliveries": false,
    "can_clients_choose_deliveries_after_provider_confirmation": false,
    "can_providers_confirm_deliveries_from_admins": true,
    "can_admins_choose_deliveries_after_provider_confirmation": false,
    "enable_delivery_orders_confirmation_by_admins_before_payment": false,
    "can_providers_forfeit_from_assigned_deliveries": true,
    "enable_pickups": true,
    "disable_deliveries": false,
    "disable_deliveries_scheduling": false,
    "enable_bot_for_deliveries": true,
    "can_providers_pick_services_from_pool": true,
    "can_providers_confirm_services_from_clients": false,
    "can_clients_pick_providers_for_services": false,
    "can_clients_choose_services_after_provider_confirmation": false,
    "can_providers_confirm_services_from_admins": false,
    "can_admins_choose_services_after_provider_confirmation": false,
    "enable_service_orders_confirmation_by_admins_before_payment": false,
    "can_providers_forfeit_from_assigned_services": false,
    "enable_services_on_branch_location": true,
    "disable_services_on_client_location": true,
    "disable_services_scheduling": true,
    "enable_bot_for_services": false,
    "enable_pod_code": true,
    "enable_pod_pictures": true,
    "enable_pod_forms": false,
    "enable_pod_signature": true,
    "enabled_pods": 11,
    "enable_bot_for_shoppers": true,
    "settings": {
        "uid": "J505728482",
        "slogan": "Powered by DonDemand",
        "pay_in_store": true,
        "enable_invoices": true,
        "enable_multi_providers": false,
        "enable_phone_login": true,
        "enable_coupons": true,
        "contact_phone": "+584148440652",
        "contact_phone_whatsapp": "+584141942279",
        "disable_balance": false,
        "is_marketplace": true,
        "template": "marketplace",
        "linked_company_id": null
    }
}

Endpoints

Insertar Company

Crear compañía

Da de alta un tenant nuevo: crea la Company (con su domain, opciones y settings iniciales), la cuenta Account y el Admin propietario, y dispara la creación del registro DNS. Devuelve la company con owner y un token de onboarding (TTL corto).

Si se envía company_id, la nueva company queda vinculada a esa company padre (plantilla hija, linked_company_id, vencimiento a 100 años); solo se permite si el usuario autenticado tiene acceso a esa company.

En entornos que no son de producción se agrega el sufijo -dev al domain.

{info} La autenticación es opcional: se puede llamar sin sesión para el auto-registro.

Método URI Cabeceras
POST /companies N/A

Ver Json

Errores de negocio

Código HTTP Cuándo ocurre
ER400 400 Se envió company_id de una company a la que el usuario no tiene acceso.

Listar Company

{info} Soporta: Filters Carga dinámica Paginación

Listar compañías

Devuelve el listado paginado de Company. Con el parámetro company_id filtra a las companies vinculadas a esa company padre (por el setting linked_company_id). Endpoint de administración; el llamador solo ve las companies a las que tiene acceso.

Método URI Cabeceras
GET /companies Authorization

Estadísticas del dashboard

Devuelve el resumen de métricas de la Company para el panel: totales de órdenes, ingresos, clientes y demás indicadores calculados por CompanyDashboardStats. Requiere que el usuario autenticado tenga acceso a la company.

Método URI Cabeceras
GET /companies/{companyId}/dashboard-stats Authorization

Listar configuración editable

Devuelve editable_settings de la Company: el objeto con las claves de CompanySetting que un administrador puede modificar (PATCH settings), ya tipadas y en formato legible.

Método URI Cabeceras
GET /companies/{companyId}/settings Authorization

Mostrar Company

Mostrar compañía

{info} Soporta: Carga dinámica

Devuelve la Company identificada por su id o por su domain, incluyendo sus monedas. Es el endpoint que las apps usan al arrancar para cargar la configuración pública del tenant.

Método URI Cabeceras
GET /companies/domain/{domain} N/A
{
    "updated_at": "date"
}

Mostrar compañía

{info} Soporta: Carga dinámica

Devuelve la Company identificada por su id o por su domain, incluyendo sus monedas. Es el endpoint que las apps usan al arrancar para cargar la configuración pública del tenant.

Método URI Cabeceras
GET /companies/domain/{domain} N/A
{
    "updated_at": "date"
}

Mostrar términos de servicio

Devuelve { terms_of_service } con el texto de los términos de servicio configurados para la Company (setting terms_of_service). Endpoint público.

Método URI Cabeceras
GET /companies/{companyId}/terms-of-service N/A

Hora local de la compañía

Devuelve la hora actual en la zona horaria de la Company (o de la Branch si se pasa branchId): company_time es el inicio del día local expresado en UTC, local_time la hora local y server_time la hora del servidor. Lo usan las apps para alinear horarios de apertura y programación.

Método URI Cabeceras
GET /companies/{companyId}/branches/{branchId}/day-time N/A
{
    "updated_at": "date"
}

Hora local de la compañía

Devuelve la hora actual en la zona horaria de la Company (o de la Branch si se pasa branchId): company_time es el inicio del día local expresado en UTC, local_time la hora local y server_time la hora del servidor. Lo usan las apps para alinear horarios de apertura y programación.

Método URI Cabeceras
GET /companies/{companyId}/branches/{branchId}/day-time N/A
{
    "updated_at": "date"
}

Actualizar Company

Ajustar vencimiento del plan

Fija expires_at de la Company y, opcionalmente, extension_days. Recalcula enabled: la company queda habilitada solo si expires_at + extension_days está en el futuro. Pensado para administración de planes y renovaciones.

Método URI Cabeceras
POST /companies/{companyId}/set-expiration Authorization
{
    "expires_at": "required|date",
    "extension_days": "nullable|integer|min:0"
}

Actualizar compañía

Modifica los datos de la Company: name, email, custom_domain, options, country_iso, default_iso_lang, strings_json, custom_json, time_zone_offset y el prefijo de órdenes directas. Las settings (setting_*) no se editan aquí, sino por PATCH settings; los estilos, por POST styles.

{info} Solo un super-admin puede tocar campos protegidos. folder_name nunca es editable.

Método URI Cabeceras
PATCH /companies/{companyId} Authorization

Ver Json

Actualizar configuración

Modifica las settings de la Company. Solo se aplican las claves incluidas en CompanySetting::editableKeys(); el resto se ignora. Acepta el cuerpo en formato legible (se normaliza internamente) y algunos campos como archivo (default_promoted_banner). service_app_modifiers y sms_providers se validan y ordenan como objetos. Devuelve editable_settings ya actualizado. Disponible por PATCH y por POST.

Método URI Cabeceras
PATCH /companies/{companyId}/settings Authorization

Ver Json

Actualizar configuración

Modifica las settings de la Company. Solo se aplican las claves incluidas en CompanySetting::editableKeys(); el resto se ignora. Acepta el cuerpo en formato legible (se normaliza internamente) y algunos campos como archivo (default_promoted_banner). service_app_modifiers y sms_providers se validan y ordenan como objetos. Devuelve editable_settings ya actualizado. Disponible por PATCH y por POST.

Método URI Cabeceras
POST /companies/{companyId}/settings Authorization

Ver Json

Eliminar Company

Eliminar compañía

Hace un soft delete de la Company (marca deleted_at). La company deja de operar, pero sus datos se conservan y puede restaurarse con el endpoint de restauración.

Método URI Cabeceras
DELETE /companies/{companyId} Authorization

Restaurar Company

Restaurar compañía

Revierte el soft delete de una Company (limpia deleted_at). Solo aplica a companies que están en la papelera.

Método URI Cabeceras
POST /companies/{companyId}/restore Authorization

Errores de negocio

Código HTTP Cuándo ocurre
ER015 400 No se pudo restaurar la company.

Acciones de Company

Resolver un host

{info} Soporta: Carga dinámica

Dado un host (dominio propio, subdominio de la plataforma o dominio legacy), determina a qué entidad corresponde y devuelve { type, object }, donde type es company, branch_group o branch. Resuelve también hosts de panel (panel., dashboard., admin.) y registros DNS personalizados. Lo usan las apps y el panel para saber en qué tenant están.

Método URI Cabeceras
GET /domains/{domainToResolve} N/A

Errores de negocio

Código HTTP Cuándo ocurre
EA110 400 Ningún tenant coincide con el host indicado.
EA111 400 El host resolvió una company pero no la sucursal esperada por el prefijo.
EA112 400 El prefijo (sucursal o grupo) no pertenece al dominio personalizado indicado.

Show Domain

{info} Soporta: Carga dinámica

Método URI Cabeceras
GET /branches/domain/{domainName} N/A

Show Domain

{info} Soporta: Carga dinámica

Método URI Cabeceras
GET /companies/{companyId}/branch-groups/domain/{domainName} N/A

Actualizar estilos de marca

Actualiza el tema visual de la Company dentro de styles_json: colores (color_primary, color_accent) y logos (company_logo, company_logo_inv, subidos como archivos). Los logos anteriores se borran del almacenamiento al reemplazarlos.

Método URI Cabeceras
POST /companies/{companyId}/styles Authorization
{
    "color_primary": {
        "string": true,
        "regex": "/^#(?:[0-9a-fA-F]{3}){1,2}$/"
    },
    "color_accent": {
        "string": true,
        "regex": "/^#(?:[0-9a-fA-F]{3}){1,2}$/"
    },
    "company_logo": "image|mimes:jpeg,png|max:1024",
    "company_logo_inv": "image|mimes:jpeg,png|max:1024"
}

Listar bancos disponibles

Devuelve los bancos activos para el país de la Company (country_iso), con su code, name e imágenes. filter acota por tipo de operación soportada (mobile_payment, transfer, ci); image_mode controla qué imágenes se devuelven. Se usa al configurar métodos de pago manuales / pago móvil.

{info} Si el país de la company no tiene configuración bancaria cargada, responde 404.

Método URI Cabeceras
GET /companies/{companyId}/banks N/A
{
    "image_mode": "string|in:list,square,all",
    "filter": "string|in:mobile_payment,transfer,ci"
}

Listar configuración en crudo

Devuelve allSettings: todas las filas CompanySetting de la Company tal como están en base de datos (clave y valor sin procesar), incluidas las internas.

{warning} Solo super-admin.

Método URI Cabeceras
GET /companies/{companyId}/allowed-settings Authorization

Calculate

Método URI Cabeceras
GET /companies/{companyId}/branches/{branchId}/calculate-fees Authorization
{
    "latitude_e6": "required|integer|between:-90000000,90000000",
    "longitude_e6": "required|integer|between:-180000000,180000000",
    "subtotal_e2": "integer|min:0",
    "subtotal_full_e2": "integer|min:0",
    "base_price_e2": "integer|min:0",
    "balance_e2": "integer",
    "selected_delivery_id": "nullable|integer",
    "payment_method_type": "string|in:gateway,form,post-payment,balance",
    "payment_method_id": "nullable",
    "payment_method_currency_iso": "string|min:3|max:8",
    "coupon_id": "nullable|integer",
    "is_gift": "nullable|boolean",
    "client_id": "integer",
    "items": [
        {
            "good_id": "required|integer|exists:goods,id",
            "quantity": "required|integer|min:1",
            "provider_id": "integer",
            "properties": [
                {
                    "property_id": "required|integer",
                    "value": "required|string"
                }
            ]
        }
    ],
    "goods": [
        "integer"
    ],
    "good_ids": {
        "string": true,
        "regex": "/^[0-9]+(,[0-9]+)*$/"
    },
    "time": {
        "string": true,
        "regex": "/^([0-1][0-9]|2[0-3]):[0-5][0-9]$/"
    },
    "datetime": "date|after:now",
    "use_local_tz": "boolean"
}

Calculate

Método URI Cabeceras
POST /companies/{companyId}/branches/{branchId}/calculate-fees Authorization
{
    "latitude_e6": "required|integer|between:-90000000,90000000",
    "longitude_e6": "required|integer|between:-180000000,180000000",
    "subtotal_e2": "integer|min:0",
    "subtotal_full_e2": "integer|min:0",
    "base_price_e2": "integer|min:0",
    "balance_e2": "integer",
    "selected_delivery_id": "nullable|integer",
    "payment_method_type": "string|in:gateway,form,post-payment,balance",
    "payment_method_id": "nullable",
    "payment_method_currency_iso": "string|min:3|max:8",
    "coupon_id": "nullable|integer",
    "is_gift": "nullable|boolean",
    "client_id": "integer",
    "items": [
        {
            "good_id": "required|integer|exists:goods,id",
            "quantity": "required|integer|min:1",
            "provider_id": "integer",
            "properties": [
                {
                    "property_id": "required|integer",
                    "value": "required|string"
                }
            ]
        }
    ],
    "goods": [
        "integer"
    ],
    "good_ids": {
        "string": true,
        "regex": "/^[0-9]+(,[0-9]+)*$/"
    },
    "time": {
        "string": true,
        "regex": "/^([0-1][0-9]|2[0-3]):[0-5][0-9]$/"
    },
    "datetime": "date|after:now",
    "use_local_tz": "boolean"
}

Calculate V2

Método URI Cabeceras
POST /companies/{companyId}/branches/{branch}/calculate-fees-for-all Authorization
{
    "latitude_e6": "required|integer|between:-90000000,90000000",
    "longitude_e6": "required|integer|between:-180000000,180000000",
    "subtotal_e2": "integer|min:0",
    "subtotal_full_e2": "integer|min:0",
    "base_price_e2": "integer|min:0",
    "balance_e2": "integer",
    "selected_delivery_id": "nullable|integer",
    "payment_method_type": "string|in:gateway,form,post-payment,balance",
    "payment_method_id": "nullable",
    "payment_method_currency_iso": "string|min:3|max:8",
    "coupon_id": "nullable|integer",
    "is_gift": "nullable|boolean",
    "client_id": "integer",
    "items": [
        {
            "good_id": "required|integer|exists:goods,id",
            "quantity": "required|integer|min:1",
            "provider_id": "integer",
            "properties": [
                {
                    "property_id": "required|integer",
                    "value": "required|string"
                }
            ]
        }
    ],
    "goods": [
        "integer"
    ],
    "good_ids": {
        "string": true,
        "regex": "/^[0-9]+(,[0-9]+)*$/"
    },
    "time": {
        "string": true,
        "regex": "/^([0-1][0-9]|2[0-3]):[0-5][0-9]$/"
    },
    "datetime": "date|after:now",
    "use_local_tz": "boolean"
}

Reporte de ganancias

{info} Soporta: Paginación Filters Carga dinámica

Recorre las Order completadas de la Company y devuelve, por orden y en totales, el desglose de ganancias: cargo por servicio de la app, impuestos al comercio, envío, comisión de repartidores, descuentos y la asunción de descuento por parte de la company. Todos los montos en centavos (*_e2). Admite los filtros estándar (completed_at, rangos, etc.).

Método URI Cabeceras
GET /companies/{companyId}/earnings-report N/A

Reporte de pagos

{info} Soporta: Paginación Filters Carga dinámica

Devuelve los Payment confirmados de la Company agregados por tipo de pago y por estado de la orden (completed / not_completed): cantidad de pagos, total cobrado y comisión (payment_tax_e2), con los montos también formateados en la moneda local.

Método URI Cabeceras
GET /companies/{companyId}/payments-report N/A

Conciliación Bancamiga

Recibe un archivo Excel con movimientos de Bancamiga, lo guarda y encola una ScheduledTask (TYPE_BANCAMIGA_REPORT) que concilia esos movimientos contra los pagos de la Company. Responde con la tarea creada (201); el resultado se consulta luego por el endpoint de tareas.

Método URI Cabeceras
POST /companies/{companyId}/bancamiga-report N/A
{
    "file": "required|file|mimes:xlsx,xlsm,xltx,xltm,xls,xlt,ods,ots,slk,xml,gnumeric,htm,html,csv,tsv,txt",
    "csv_settings": {
        "delimiter": "string",
        "enclosure": "string",
        "line_ending": "string",
        "use_bom": "boolean",
        "include_separator_line": "boolean",
        "excel_compatibility": "boolean",
        "escape_character": "string",
        "contiguous": "boolean",
        "input_encoding": "string",
        "output_encoding": "string"
    }
}

Conciliación de POS BNC

Recibe un archivo Excel con movimientos de punto de venta BNC, lo guarda y encola una ScheduledTask (TYPE_BNC_POS_REPORT) que los concilia contra los pagos de la Company. Responde con la tarea creada (201); el resultado se consulta luego por el endpoint de tareas.

Método URI Cabeceras
POST /companies/{companyId}/bnc-pos-report N/A
{
    "file": "required|file|mimes:xlsx,xlsm,xltx,xltm,xls,xlt,ods,ots,slk,xml,gnumeric,htm,html,csv,tsv,txt",
    "csv_settings": {
        "delimiter": "string",
        "enclosure": "string",
        "line_ending": "string",
        "use_bom": "boolean",
        "include_separator_line": "boolean",
        "excel_compatibility": "boolean",
        "escape_character": "string",
        "contiguous": "boolean",
        "input_encoding": "string",
        "output_encoding": "string"
    }
}

Relaciones