Client Contact Details
PUT /api/clientes/contact-info
Completes the client profile with their contact details, location and communication preferences. It is the second step of the sign-up, after VLT Client Registration.
The operation replaces the whole block rather than patching it: that is why every field is required and none may be null.
Request
Headers
| Header | Value | Required |
|---|---|---|
Content-Type | application/json | Yes |
Accept | application/json | Yes |
Public Endpoint
Publicly accessible. It does not require X-Client-Secret or any token. Protected by rate limiting (60 requests per minute per IP).
Body Parameters
All required and non-null.
| Parameter | Type | Description |
|---|---|---|
id | integer | Client identifier in our system, the one registration returned |
playerId | integer | Player identifier in the counterparty system |
email | string | Email address |
phoneNumber | string | Contact phone number (max 20 chars) |
address | string | Residential address |
ubigeoCode | string | Geographic location code (max 20 chars) |
sendWhatsapp | boolean | Consent to receive WhatsApp communications |
sendEmail | boolean | Consent to receive email communications |
sendSms | boolean | Consent to receive SMS communications |
Request Example
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
}'Responses
Successful Update — 200 OK
{
"id": 1024,
"playerId": 1
}Idempotent Update — 200 OK
If the payload holds exactly the information already persisted, the response is the same and no write takes place. Retrying after a network timeout is safe.
{
"id": 1024,
"playerId": 1
}Error Responses
Branch on code, not on message
code is the stable part of the contract: it does not change. message is informative and may be reworded without notice — in fact ERR_MISSING_REQUIRED_FIELDS shares a single text across the three endpoints. When the response carries errors, the per-field detail is there.
| HTTP | code | When |
|---|---|---|
400 | ERR_MISSING_REQUIRED_FIELDS | A field is missing, null or malformed |
404 | ERR_PLAYER_NOT_FOUND | The identifiers match no player |
409 | ERR_IDENTITY_COLLISION | The id belongs to one profile and the playerId to another |
429 | — | Rate limit exceeded |
503 | — | The target operator is not configured |
500 | — | Internal error |
404 Not Found Example
{
"code": "ERR_PLAYER_NOT_FOUND",
"message": "Jugador no encontrado"
}400 Bad Request Example
{
"code": "ERR_MISSING_REQUIRED_FIELDS",
"message": "Faltan campos obligatorios para actualizar el perfil",
"errors": {
"ubigeoCode": ["The ubigeo code field is required."]
}
}Try It
Request Body
Request URL
https://api.syssoft1.com/api/clientes/contact-infoNotes for the Integrator
- Sending the request without
ubigeoCode, without one of the boolean preferences, or with any of them asnull, is rejected with400. The per-field detail is inerrors. - Both identifiers are validated together: they must point to the same profile. If each one points to a different client, the request is aborted without writing anything.
- It may be called as often as needed; it is the way to update the contact details of an already registered client.