Datos Complementarios del Cliente
PUT /api/clientes/contact-info
Completa el perfil del cliente con su contacto, ubicación y preferencias de comunicación. Es el segundo paso del alta, después de Registro de Cliente VLT.
La operación sustituye el bloque completo, no lo parchea: por eso todos los campos son obligatorios y no admiten nulos.
Solicitud
Headers
| Header | Valor | Requerido |
|---|---|---|
Content-Type | application/json | Sí |
Accept | application/json | Sí |
Endpoint Público
Acceso público. No requiere X-Client-Secret ni token. Protegido por rate limit (60 solicitudes por minuto por IP).
Parámetros del Body
Todos requeridos y no nulos.
| Parámetro | Tipo | Descripción |
|---|---|---|
id | integer | Identificador del cliente en nuestro sistema, el que devolvió el registro |
playerId | integer | Identificador del jugador en el sistema de la contraparte |
email | string | Correo electrónico |
phoneNumber | string | Teléfono de contacto (máx. 20 caracteres) |
address | string | Dirección de residencia |
ubigeoCode | string | Código de ubicación geográfica (máx. 20 caracteres) |
sendWhatsapp | boolean | Consentimiento para comunicaciones por WhatsApp |
sendEmail | boolean | Consentimiento para comunicaciones por correo |
sendSms | boolean | Consentimiento para comunicaciones por SMS |
Ejemplo de Solicitud
curl -X PUT 'https://api.syssoft1.com/api/clientes/contact-info' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-d '{
"id": 1024,
"playerId": 1,
"email": "test-mail@test.com",
"phoneNumber": "999999999",
"address": "Lima",
"ubigeoCode": "23006",
"sendWhatsapp": true,
"sendEmail": true,
"sendSms": true
}'Respuestas
Actualización Exitosa — 200 OK
{
"id": 1024,
"playerId": 1
}Actualización Idempotente — 200 OK
Si el payload contiene exactamente la misma información ya persistida, se responde igual y no se realiza ninguna escritura. Reintentar tras un timeout de red es seguro.
{
"id": 1024,
"playerId": 1
}Respuestas de Error
Ramifique por code, no por message
code es la parte estable del contrato: no cambia. message es informativo y puede reformularse sin previo aviso — de hecho ERR_MISSING_REQUIRED_FIELDS comparte un único texto en los tres endpoints. Cuando la respuesta trae errors, ahí está el detalle por campo.
| HTTP | code | Cuándo |
|---|---|---|
400 | ERR_MISSING_REQUIRED_FIELDS | Falta un campo, viene nulo o no cumple el formato |
404 | ERR_PLAYER_NOT_FOUND | Los identificadores no corresponden a ningún jugador |
409 | ERR_IDENTITY_COLLISION | El id pertenece a un perfil y el playerId a otro |
429 | — | Rate limit excedido |
503 | — | El sistema no tiene configurado el operador destino |
500 | — | Error interno |
Ejemplo 404 Not Found
{
"code": "ERR_PLAYER_NOT_FOUND",
"message": "Jugador no encontrado"
}Ejemplo 400 Bad Request
{
"code": "ERR_MISSING_REQUIRED_FIELDS",
"message": "Faltan campos obligatorios para actualizar el perfil",
"errors": {
"ubigeoCode": ["The ubigeo code field is required."]
}
}Pruébelo
Cuerpo de la petición
URL de Petición
https://api.syssoft1.com/api/clientes/contact-infoNotas para el Integrador
- Enviar el request sin
ubigeoCode, sin alguna preferencia booleana, o con cualquiera de ellos ennull, se rechaza con400. El detalle por campo viene enerrors. - Los dos identificadores se validan juntos: deben corresponder al mismo perfil. Si cada uno apunta a un cliente distinto, la petición se aborta sin escribir nada.
- Puede llamarse tantas veces como haga falta; es la vía para actualizar el contacto de un cliente ya registrado.