Guardar un miembro
Crea o actualiza registros de miembros. La API determina si debe crear o actualizar según el member_id.
Parámetros
-
members
arrayobligatorioMatriz de objetos de miembro que se van a guardar. Máximo recomendado: 1000 elementos por solicitud para un rendimiento óptimo. La API agrupa automáticamente los elementos en lotes para procesarlos. Cada elemento debe incluir
facility_id(obligatorio si no se usalinking_identifier) olinking_identifier(obligatorio si no se usafacility_id).Cuando un miembro incluye
access_time_windows, también debe incluiraccess_time_windows_revision. La matriz es una instantánea completa de la fuente, no un parche. Omítela para conservar la instantánea existente o envía[]con una revisión más reciente para revocar todas las ventanas que pertenecen a la fuente. Lee la guía de Access Time Windows antes de habilitar este campo.
Valor devuelto
Devuelve un mensaje sencillo que confirma la operación de sincronización.
Los campos del perfil del miembro siguen siendo inserciones o actualizaciones normales incluso cuando una instantánea de ventanas se notifica como repetición idempotente u omisión por obsoleta. Una instantánea en conflicto (misma revisión con una carga útil diferente) no se puede reintentar sin cambios; concilia el estado de la fuente y envía una revisión más reciente.
Solicitud
curl -X POST https://partner-api.performancehub.co/partner/v1/members \
-u sk_live_YOUR_PARTNER_SECRET_KEY: \
-H "Content-Type: application/json" \
-d '{
"members": [
{
"member_id": "member_11111",
"facility_id": "550e8400-e29b-41d4-a716-446655440000",
// "linking_identifier": "branch_downtown", // If using linking identifier
"first_name": "John",
"last_name": "Smith",
"email": "john.smith@example.com",
"mobile_phone": "+61 412 345 678",
"date_of_birth": "1985-06-15",
"gender": "male",
"type": "member",
"tags": ["vip", "personal-training"],
"profile_picture": "/9j/4AAQSkZJRgABAQAAAQ...",
"membership_status": "current",
"created": "2024-01-15T10:30:00Z",
"updated": "2024-01-20T14:45:00Z",
"access_time_windows_revision": 1842,
"access_time_windows": [
{
"external_id": "access-4b1782",
"kind": "absolute",
"from": 1792053000,
"to": 1792058400,
"timezone": "Australia/Perth",
"scope_key": "after_hours_entry",
"label": "Temporary site access"
}
],
"address": {
"address_line_1": "456 Bourke Street",
"address_line_2": "Apt 12",
"city": "Melbourne",
"state": "VIC",
"postal_code": "3000",
"country": "AU",
"country_name": "Australia"
},
"membership_plans": [
{
"membership_plan_id": "plan_99999",
"name": "Unlimited Monthly",
"start_date": "2024-01-01T00:00:00Z",
"status": "current",
"is_current": true,
"end_date": null
}
]
}
]
}'
Respuesta
Devuelve un mensaje de éxito con metadatos sobre la operación de sincronización.
{
"message": "Member sync successful.",
"metadata": {
"success": 245,
"skipped": 5,
"skipped_items": [
{
"member_id": "member_123",
"facility_id": null,
"reason": "Facility integration is disabled in facility-partner-config"
}
]
}
}
Campos de metadatos:
- success: número de miembros procesados correctamente
- skipped: número de miembros omitidos (si los hay)
- skipped_items: matriz de miembros omitidos con los motivos (si los hay)
- dry-run: indicador booleano si se usa el tipo de clave dryrun (si corresponde)