Сохранение участника

Создает или обновляет записи участников. API определяет, создавать или обновлять запись, на основе member_id.

Параметры

  • members array обязательный

    Массив объектов Member для сохранения. Рекомендуемый максимум для оптимальной производительности — 1000 элементов на запрос. API автоматически разбивает элементы на пакеты для обработки. Каждый элемент должен содержать либо facility_id (обязателен, если не используется linking_identifier), либо linking_identifier (обязателен, если не используется facility_id).

    Если участник содержит access_time_windows, он также должен содержать access_time_windows_revision. Массив представляет собой полный снимок источника, а не исправление. Не указывайте его, чтобы сохранить существующий снимок, или отправьте [] с более новой ревизией, чтобы отозвать все окна, принадлежащие источнику. Перед включением этого поля прочитайте руководство по Access Time Windows.

Возвращаемое значение

Возвращает простое сообщение, подтверждающее операцию синхронизации.

Поля профиля участника обрабатываются как обычные операции upsert, даже если снимок окон зарегистрирован как идемпотентный повтор или пропуск устаревших данных. Конфликтующий снимок (та же ревизия, другая полезная нагрузка) нельзя повторно отправить без изменений; выполните сверку состояния источника и отправьте более новую ревизию.

Запрос

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
          }
        ]
      }
    ]
  }'

Ответ

Возвращает сообщение об успешном выполнении с метаданными операции синхронизации.

{
  "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"
      }
    ]
  }
}

Поля метаданных:

  • success — количество успешно обработанных участников
  • skipped — количество пропущенных участников (если есть)
  • skipped_items — массив пропущенных участников с указанием причин (если есть)
  • dry-run — логический флаг при использовании ключа типа dryrun (если применимо)