Skip to content

Member webhook (Back Office legacy)

Back Office webhook (legacy)

This article applies only to the legacy registration configured in Settings > Webhook. New Public API registrations use /api/v2/management/webhook-registrations/ and follow the V2 payload reference. Existing V1 registrations keep their historical contract.

Overview

The Member webhook sends an event when a member profile is created or updated. It is often used to keep CRM profiles, lifecycle automations, and support views aligned with bsport data.

Who It Is For

  • Teams syncing member profiles to CRM or marketing systems.
  • Operators managing onboarding and lifecycle workflows.
  • Support teams validating member data updates.

Supported Events

  • member-create: sent when a member is created.
  • member-update: sent when a member profile is updated.

Inspect an existing registration

  1. Open https://backoffice.bsport.io/settings/webhook.
  2. Locate the existing member registration.
  3. Verify its event and destination before planning the migration.

Do not create a new Back Office registration. Use the Public API member events for every new integration.

Payload Envelope

{
  "event_type": "member-update",
  "date": 1721639978,
  "data": {
    "member": {}
  }
}

Data Fields

Field Type Description Example
event_type string Member webhook event name. "member-update"
date number Unix timestamp when event was emitted. 1721639978
data.member.id number Member unique id. 28840055
data.member.name string Full display name. "Chico Chica"
data.member.firstname string First name. "Chico"
data.member.lastname string Last name. "Chica"
data.member.email string Email used for communication. "chicochica@chic.com"
data.member.phone_number string or null Main phone number. null
data.member.tags array Current assigned tag ids. [2]
data.member.archived boolean Whether member is archived. false
data.member.credit_account_balance number Member credit balance. 0
data.member.total_unpaid_amount string Unpaid amount for this member account. "0.00"
data.member.unsubscribe_link string Member-specific unsubscribe link. "https://backoffice..."
data.member.official_document_id string Official document id when provided. ""
data.member.default_billing_establishment number or null Default billing establishment id. null
data.member.consumer object Nested user profile linked to this member. {...}

Common nested fields under data.member.consumer include:

  • id
  • first_name
  • last_name
  • email
  • phonenumber
  • birthday
  • gender
  • is_coach
  • is_consumer
  • photo
  • address
  • sports

Example Payload

{
  "event_type": "member-update",
  "date": 1721639978,
  "data": {
    "member": {
      "id": 28840055,
      "name": "Chico Chica",
      "consumer": {
        "id": 2129085,
        "first_name": "Chico",
        "last_name": "Chica",
        "email": "chicochica@chic.com",
        "phonenumber": null,
        "birthday": "2008-01-09",
        "gender": "X",
        "is_coach": false,
        "is_consumer": true,
        "photo": "https://assets.dev.bsport.io/default_profile_picture.svg",
        "address": {
          "address_line_1": "",
          "address_line_2": "",
          "city": "",
          "state": "",
          "country": "",
          "zipcode": ""
        },
        "sports": [],
        "consumer": 1476765
      },
      "firstname": "Chico",
      "lastname": "Chica",
      "gender": "X",
      "barcode": "384856395693",
      "date_joined": "2003-05-21T00:00:00+02:00",
      "membership_ID": "867946460043",
      "accept_email": true,
      "email": "chicochica@chic.com",
      "address": {
        "address_line_1": "",
        "address_line_2": "",
        "city": "",
        "state": "",
        "country": "",
        "zipcode": ""
      },
      "accept_sms": true,
      "internal_account": "0.00",
      "credit_account_balance": 0,
      "total_unpaid_amount": "0.00",
      "notes": [],
      "tags": [2],
      "photo": "https://assets.dev.bsport.io/default_profile_picture.svg",
      "emergency_contact": null,
      "birthday": "2008-01-09",
      "files": [],
      "general_terms_and_conditions_date_accepted": null,
      "general_terms_and_conditions_accepted": null,
      "general_terms_of_use_date_accepted": null,
      "general_terms_of_use_accepted": null,
      "waiver_accepted": null,
      "archived": false,
      "default_billing_establishment": null,
      "default_establishment_billing_group": null,
      "unsubscribe_link": "https://backoffice.bsport.io/c/2/unsubscribe/649f5568-4783-495a-b7d6-02e4bf66dbe2",
      "spivi_privacy_settings_accepted": null,
      "referral_uuid": "ffd00219-27c2-48a7-a320-b52b729a4a9b",
      "is_pos": false,
      "official_document_id": ""
    }
  }
}

Delivery, Reliability, And Security

  • Your endpoint must accept POST over HTTPS.
  • A documented retry policy is not currently specified in this guide.
  • Event ordering guarantees are not currently documented.
  • Signature verification headers are not currently documented.

Implementation approach:

  • Make updates idempotent by member id.
  • Use tolerant parsing because payloads can include many optional fields.
  • Keep raw payload logs for support investigations.

Troubleshooting

  • No member event received: verify the correct member event type is selected in Back Office.
  • Duplicate updates: process by idempotent keys and detect already-processed changes.
  • Incomplete data downstream: ensure nested consumer object mapping is implemented in your parser.

FAQ

Are both member and consumer details included?

Yes. The payload includes a member object and a nested linked consumer object.

Should I trust all fields to always be present?

No. Some fields can be null, empty strings, or absent in specific contexts. Build resilient field mapping.