Salvar um membro
Cria ou atualiza registros de membros. A API determina se deve criar ou atualizar com base no member_id.
Parâmetros
-
members
arrayobrigatórioMatriz de objetos Member a serem salvos. Máximo recomendado: 1000 itens por solicitação para um desempenho ideal. A API agrupa automaticamente os itens em lotes para processamento. Cada item deve incluir
facility_id(obrigatório selinking_identifiernão for usado) oulinking_identifier(obrigatório sefacility_idnão for usado).Quando um membro inclui
access_time_windows, ele também deve incluiraccess_time_windows_revision. A matriz é um snapshot completo da origem, não um patch. Omita-a para preservar o snapshot existente ou envie[]com uma revisão mais nova para revogar todas as janelas pertencentes à origem. Leia o guia de Access Time Windows antes de ativar este campo.
Retorno
Retorna uma mensagem simples confirmando a operação de sincronização.
Os campos do perfil do membro continuam sendo upserts normais, mesmo quando um snapshot de janelas é relatado como repetição idempotente ou como desatualizado e ignorado. Um snapshot conflitante, com a mesma revisão e payload diferente, não pode ser repetido sem alterações; reconcilie o estado da origem e envie uma revisão mais nova.
Solicitação
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
}
]
}
]
}'
Resposta
Retorna uma mensagem de sucesso com metadados sobre a operação de sincronização.
{
"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 metadados:
- success - Número de membros processados com sucesso
- skipped - Número de membros ignorados (se houver)
- skipped_items - Matriz dos membros ignorados, com os motivos (se houver)
- dry-run - Sinalizador booleano ao usar o tipo de chave dryrun (se aplicável)