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¶
- Open
https://backoffice.bsport.io/settings/webhook. - Locate the existing member registration.
- 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¶
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:
idfirst_namelast_nameemailphonenumberbirthdaygenderis_coachis_consumerphotoaddresssports
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
POSTover 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
consumerobject 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.