Representa a un cliente o comprador de una Company. Sus credenciales viven en Account
(account_id); este modelo guarda el perfil de compra, ubicación, rating y configuración.
{warning} Los atributos
name,last_name,phoneson datos personales protegidos. Solo los ven los administradores; los repartidores únicamente cuando acceden al cliente a través de una Order o un OrderProvider. Otros clientes nunca los ven.
name / last_name — nombre y apellido reales (protegidos).full_name — nombre completo.names — array con las partes sueltas: [nombre1, nombre2, apellido1, apellido2].display_name — nombre de usuario para preservar la confidencialidad del nombre real.
Autogenerado; hoy no se usa en la interfaz.uuid — id público de 7 caracteres (derivado de account_id). Se usa para referidos
(settings.referral_id) e identificación del cliente. Se puede filtrar por él (?uuid= / ?uuid in).dni — documento, normalizado a partir de settings.dni.latitude_e6 / longitude_e6 — reservados (siempre 0); previstos para la vertical de Taxi.current_city — ciudad del cliente, derivada de la última Order que hizo.level — ClientLevel calculado por volumen y monto de compras. El cliente
sube de nivel y obtiene medallas; los beneficios asociados aún no existen (roadmap).titles — medallas / insignias obtenidas.rating_e2 — promedio real de calificación (rating_sum / rating_count, × 100).public_rating_e2 — valor mostrado públicamente (suavizado / con mínimo garantizado).settings)settings es un objeto con la configuración y las estadísticas del cliente. editable_settings
devuelve solo las claves que el propio cliente puede modificar (endpoint PATCH settings);
allowed_settings (solo super-admin) devuelve todas las filas ClientSetting en crudo.
Claves editables por el cliente:
| Clave | Tipo | Descripción |
|---|---|---|
dni |
string | Documento de identidad |
born_at |
date | Fecha de nacimiento |
gender |
string | male | female | other |
lang |
string | Idioma: en | es |
selected_address_id |
int | ClientAddress activa para los próximos pedidos |
payout_accounts |
array | Cuentas para recibir pagos (payout) |
referral_id |
string | uuid (7–10 chars) del cliente que lo refirió. Solo se puede fijar una vez |
Claves visibles (solo lectura, estadísticas):
| Clave | Tipo | Descripción |
|---|---|---|
current_balance_e2 |
int | Saldo actual del cliente (× 100) |
addresses_count |
int | Cantidad de direcciones guardadas |
transactions_count |
int | Cantidad de transacciones |
pending_invoices_count |
int | Facturas pendientes |
pending_total_e2 |
int | Monto pendiente total (× 100) |
orders_per_month |
int | Órdenes por mes (promedio) |
orders_per_month_trend |
string|null | Tendencia de orders_per_month |
weekly_average |
int | Gasto semanal promedio (× 100) |
average_time |
int | Tiempo promedio entre pedidos |
average_cost_e2 |
int | Ticket promedio (× 100) |
Los setting_* del modelo son el acceso tipado a estas mismas claves; el resto de setting_*
(register_source, ridery_id, stripe_id, selected_stripe_card_id) son de uso interno.
| Atributo | Tipo | Descripción |
|---|---|---|
id |
int |
|
name |
string |
Nombre real (protegido: solo admins / repartidor vía orden) |
display_name |
string |
Nombre de usuario autogenerado para preservar la confidencialidad; hoy sin uso en UI |
email |
string |
Email (protegido) |
phone |
string |
Teléfono con prefijo internacional, ej. +58412... (protegido) |
avatar_url |
string\|null |
URL del avatar; se asigna uno por defecto al crear |
rating_e2 |
int |
Promedio real de calificación del cliente (× 100) |
rating_sum |
int |
Suma de calificaciones recibidas |
rating_count |
int |
Cantidad de calificaciones recibidas |
latitude_e6 |
int |
Reservado (siempre 0); previsto para Taxi |
longitude_e6 |
int |
Reservado (siempre 0); previsto para Taxi |
created_at |
datetime\|null |
|
updated_at |
datetime\|null |
|
deleted_at |
datetime\|null |
|
account_id |
int |
{@link Account} con las credenciales de este cliente |
company_id |
int |
Company a la que pertenece el cliente (oculto) |
last_name |
string\|null |
Apellido real (protegido) |
setting_last_cart_id |
int |
|
setting_last_payment_id |
int |
|
setting_rating_updated_at |
datetime\|null |
|
setting_facebook_user |
array\|null |
|
setting_dni |
string\|null |
Documento del cliente (clave editable dni) |
setting_gender |
string\|null |
Género: male | female | other (clave editable gender) |
setting_born_at |
datetime\|null |
Fecha de nacimiento (clave editable born_at) |
setting_lang |
string |
Idioma: en | es (clave editable lang) |
setting_register_source |
string\|null |
Origen del registro (interno) |
setting_referral_id |
string\|null |
uuid de quien lo refirió (clave editable referral_id, se fija una sola vez) |
setting_ridery_id |
string\|null |
Id del cliente en Ridery (interno) |
setting_stripe_id |
string\|null |
Customer id en Stripe (interno) |
setting_selected_address_id |
int\|null |
{@link ClientAddress} activa del cliente (clave editable selected_address_id) |
setting_selected_stripe_card_id |
string\|null |
Tarjeta de Stripe seleccionada (interno) |
setting_payout_accounts |
PayoutAccount[]\|null |
Cuentas de payout (clave editable payout_accounts) |
setting_current_balance_e2 |
int |
Saldo actual del cliente (× 100) |
setting_addresses_count |
int |
Cantidad de direcciones guardadas |
setting_transactions_count |
int |
Cantidad de transacciones |
setting_pending_invoices_count |
int |
Facturas pendientes |
setting_pending_total_e2 |
int |
Monto pendiente total (× 100) |
setting_orders_per_month |
int |
Órdenes por mes (promedio) |
setting_orders_per_month_trend |
string\|null |
Tendencia de orders_per_month |
setting_weekly_average |
int |
Gasto semanal promedio (× 100) |
setting_average_time |
int |
Tiempo promedio entre pedidos |
setting_average_cost_e2 |
int |
Ticket promedio (× 100) |
account |
Account |
|
addresses |
ClientAddress> |
Direcciones guardadas del cliente |
adminClients |
AdminClient> |
|
admin_url |
string |
|
allLogs |
ApiLog> |
|
allOrders |
Order> |
Órdenes del cliente, incluidas las archivadas |
allSettings |
ClientSetting> |
|
allowed_settings |
array |
Todas las filas de configuración en crudo (solo super-admin) |
associatedAdmins |
Admin> |
|
bids |
Bid> |
|
company |
Company |
|
current_city |
City\|null |
Ciudad del cliente, derivada de su última orden |
dni |
string\|null |
Documento normalizado (a partir de settings.dni) |
editable_settings |
array |
Configuración que el cliente puede modificar (ver "Configuración del cliente") |
favorites |
Good> |
Productos marcados como favoritos |
full_name |
string |
Nombre completo |
givenRatings |
ProviderRating> |
Calificaciones que el cliente dio a repartidores |
goodRatings |
GoodRating> |
Calificaciones que el cliente dio a productos |
google_maps_url |
string\|null |
|
is_email_valid |
bool |
|
is_phone_user |
bool |
Cuenta creada solo con teléfono (sin email real) |
level |
ClientLevel\|null |
Nivel de fidelización, calculado por volumen y monto de compras |
logs |
ApiLog> |
|
mainAssociatedAdmin |
Admin> |
|
names |
array |
Partes del nombre: [nombre1, nombre2, apellido1, apellido2] |
notifications |
Notification> |
|
orderedGoods |
OrderedGood> |
|
orders |
Order> |
Órdenes activas del cliente |
payments |
Payment> |
|
phone_prefix |
string\|null |
Prefijo internacional del teléfono |
phone_suffix |
string\|null |
Teléfono sin el prefijo internacional |
profileRatings |
ClientRating> |
Calificaciones recibidas por el cliente |
public_rating_e2 |
int |
Calificación mostrada públicamente (suavizada; × 100) |
related_coupons |
Collection |
Cupones relacionados al cliente (solo admins) |
resources |
UploadedResource> |
|
ridery_id |
string\|null |
|
settings |
array |
Configuración y estadísticas del cliente (ver "Configuración del cliente") |
titles |
Title> |
Medallas / insignias obtenidas |
uuid |
string |
Id público de 7 caracteres (referidos e identificación) |
{
"id": 39,
"name": "Jose Manuel Salazar",
"display_name": "user_183",
"email": "joses@manzanares.com.ve",
"phone": "+584121179751",
"avatar_url": "http://127.0.0.1:8000/storage/static/default/avatar_client.png",
"rating_e2": 450,
"rating_sum": 27,
"rating_count": 6,
"created_at": "2020-04-23 18:28:29",
"updated_at": "2024-10-27 10:11:12",
"deleted_at": null,
"account_id": 183,
"last_name": null,
"phone_prefix": "+58",
"phone_suffix": "4121179751",
"dni": null,
"uuid": "CQUQM6Z",
"settings": {
"current_balance_e2": 27680,
"addresses_count": 4,
"transactions_count": 12,
"pending_invoices_count": 12,
"pending_total_e2": 24557,
"orders_per_month": 0,
"orders_per_month_trend": null,
"weekly_average": 0,
"average_time": 962161,
"average_cost_e2": 2046,
"human_current_balance_e2": 276.8,
"human_pending_total_e2": 245.57,
"human_average_cost_e2": 20.46
}
}
Registrar cliente
Auto-registro de un comprador (endpoint público, sin autenticación). Crea la Account
y el Client. Con receive_code_via (phone | email) se envía un código de
confirmación y la respuesta incluye validation_token; sin él, la respuesta incluye un
access_token listo para usar. Si ya existe un registro sin confirmar creado por un
administrador con el mismo email/teléfono, se reutiliza y el cliente completa su registro
conservando el historial de pedidos hecho por el admin.
| Método | URI | Cabeceras |
|---|---|---|
| POST | /companies/{companyId}/clients |
N/A |
{
"name": "required|max:64|person_name",
"last_name": "string|max:64|person_name",
"phone": "string|min:9",
"password": "string",
"email": {
"required": true,
"email": "rfc,filter",
"email_check": true
},
"receive_code_via": "string|in:email,phone"
}
| Código | HTTP | Cuándo ocurre |
|---|---|---|
EB120 |
409 | Ya existe una cuenta confirmada con ese email. |
EB121 |
409 | Ya existe una cuenta confirmada con ese teléfono. |
| Método | URI | Cabeceras |
|---|---|---|
| PUT | /companies/{companyId}/price-lists/{priceListId}/clients/{clientId} |
Authorization |
{info} Soporta: Paginación Filters Carga dinámica
Listar clientes
Lista los Client de la company. Además de los filtros genéricos, acepta dni para
filtrar por documento (settings.dni).
| Método | URI | Cabeceras |
|---|---|---|
| GET | /companies/{companyId}/clients |
Authorization |
Clientes asociados a un administrador (feature no finalizada)
{warning} Corresponde a una feature abandonada: administradores de tipo "seller" que reclutaban compradores y cobraban comisión por sus compras. El desarrollo no continuó y estos endpoints no se usan.
| Método | URI | Cabeceras |
|---|---|---|
| GET | /companies/{companyId}/admins/{adminId}/clients |
Authorization |
{info} Soporta: Paginación Filters Carga dinámica
| Método | URI | Cabeceras |
|---|---|---|
| GET | /companies/{companyId}/price-lists/{priceListId}/clients |
Authorization |
Devuelve las claves de Client settings que el cliente puede modificar, más
gender_options con los valores válidos de gender.
| Método | URI | Cabeceras |
|---|---|---|
| GET | /companies/{companyId}/clients/{clientId}/settings |
Authorization |
{info} Soporta: Carga dinámica
Mostrar cliente
Devuelve el Client. Para repartidores se ocultan los datos personales; para
administradores se agrega related_coupons.
| Método | URI | Cabeceras |
|---|---|---|
| GET | /companies/{companyId}/clients/{clientId} |
Authorization |
{info} Soporta: Carga dinámica
Actualizar cliente
Actualiza datos del Client. Solo los administradores pueden cambiar phone; si un
cliente cambia (o reconfirma) su teléfono, se le envía un código por SMS y la respuesta
incluye data_verification. push_token registra el token de notificaciones de la cuenta
autenticada.
| Método | URI | Cabeceras |
|---|---|---|
| PATCH | /companies/{companyId}/clients/{clientId} |
Authorization |
{
"name": "max:64|person_name",
"last_name": "max:64|person_name",
"phone": "",
"latitude_e6": "integer|between:-90000000,90000000",
"longitude_e6": "integer|between:-180000000,180000000"
}
| Código | HTTP | Cuándo ocurre |
|---|---|---|
EB121 |
409 | Otro cliente ya tiene ese teléfono verificado. |
Actualiza las claves editables de Client settings (dni, born_at, gender,
lang, selected_address_id, payout_accounts, referral_id). Las claves no editables se
ignoran. Devuelve la configuración editable resultante.
| Método | URI | Cabeceras |
|---|---|---|
| PATCH | /companies/{companyId}/clients/{clientId}/settings |
Authorization |
{
"dni": "string",
"born_at": "date",
"selected_address_id": "integer|exists:client_addresses,id",
"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"
}
],
"gender": "string|in:male,female,other",
"lang": "string|in:en,es",
"referral_id": {
"string": true,
"min": "7",
"max": "10"
}
}
Asociar un cliente a un administrador (feature no finalizada)
{warning} Corresponde a una feature abandonada: administradores de tipo "seller" que reclutaban compradores y cobraban comisión por sus compras. El desarrollo no continuó y estos endpoints no se usan.
| Método | URI | Cabeceras |
|---|---|---|
| PUT | /companies/{companyId}/admins/{adminId}/clients/{clientId} |
Authorization |
Desasociar un cliente de un administrador (feature no finalizada)
{warning} Corresponde a una feature abandonada: administradores de tipo "seller" que reclutaban compradores y cobraban comisión por sus compras. El desarrollo no continuó y estos endpoints no se usan.
| Método | URI | Cabeceras |
|---|---|---|
| DELETE | /companies/{companyId}/admins/{adminId}/clients/{clientId} |
Authorization |
Sincronizar clientes de un administrador (feature no finalizada)
{warning} Corresponde a una feature abandonada: administradores de tipo "seller" que reclutaban compradores y cobraban comisión por sus compras. El desarrollo no continuó y estos endpoints no se usan.
| Método | URI | Cabeceras |
|---|---|---|
| PUT | /companies/{companyId}/admins/{adminId}/clients |
Authorization |
[
"integer"
]
| Método | URI | Cabeceras |
|---|---|---|
| DELETE | /companies/{companyId}/price-lists/{priceListId}/clients/{clientId} |
Authorization |
{info} Soporta: Carga dinámica
Devuelve el Client asociado a la cuenta autenticada. Solo para cuentas de tipo cliente.
| Método | URI | Cabeceras |
|---|---|---|
| GET | /companies/{companyId}/clients/me |
Authorization |
Reemplaza avatar_url con la imagen subida (campo avatar).
| Método | URI | Cabeceras |
|---|---|---|
| POST | /companies/{companyId}/clients/{clientId}/upload-avatar |
Authorization |
{
"avatar": "required|image|mimes:jpeg,png,bmp|max:2048|dimensions:ratio=1/1"
}
Un administrador da de alta un Client sin flujo de confirmación: la cuenta queda no verificada y con contraseña aleatoria. Si el cliente luego se auto-registra con el mismo contacto, se reutiliza este registro. Si ya existe una cuenta con ese contacto cuya confirmación aún no venció, la operación falla.
| Método | URI | Cabeceras |
|---|---|---|
| POST | /companies/{companyId}/admins/{adminId}/clients |
Authorization |
{
"name": "required|max:64",
"phone": "string",
"email": "email:rfc,filter",
"dni": "nullable|string"
}
| Código | HTTP | Cuándo ocurre |
|---|---|---|
ER007 |
409 | Ya existe una cuenta con ese teléfono para la company. |
Devuelve todas las filas ClientSetting en crudo. Restringido a super-admin.
| Método | URI | Cabeceras |
|---|---|---|
| GET | /companies/{companyId}/clients/{clientId}/allowed-settings |
Authorization |
{info} Soporta: Paginación Filters Carga dinámica
Lista los Client que tienen al menos una orden en la sucursal indicada.
| Método | URI | Cabeceras |
|---|---|---|
| GET | /companies/{companyId}/branches/{branchId}/clients |
Authorization |
account BelongsTo Accountaddresses HasMany ClientAddressadminClients HasMany AdminClientallLogs HasMany ApiLogallOrders HasMany OrderassociatedAdmins HasMany Adminbids HasMany Bidcompany BelongsTo Companyfavorites HasMany GoodgivenRatings HasMany ProviderRatinggoodRatings HasMany GoodRatinglevel HasOne ClientLevellogs HasMany ApiLogmainAssociatedAdmin HasMany AdminorderedGoods HasMany OrderedGoodorders HasMany Orderpayments HasMany PaymentprofileRatings HasMany ClientRatingtitles HasMany Title