Events and Payloads
Events
Currently, we support the following Events:
| Entity | Events |
|---|---|
| Client | client.created, client.updated, client.deleted |
| File import | file_import.finished |
Payloads
Every event payload has a base structure as follows:
{
"event_name": "name_of.event",
"object": {
"field1": "object specific field",
"field2": "object specific field"
}
}
event_name: Name of the event that triggered the webhook event.
object: Object filled with data specific to each entity.
Client payload
| Field | Description |
|---|---|
| id | BSPK’s unique identifier of the client |
| external_id | Client’s Unique identifier (linked by your backend or ERP system) |
| first_name | First name of the client |
| last_name | Last name of the client |
| alternate_first_name | Alternate first name of the client |
| alternate_last_name | Alternate last name of the client |
| title | Title of the client |
| Email of the client | |
| mobile_phone | Mobile phone of the client |
| other_phone | Other phone of the client |
| birthday | Birthday of the client |
| gender | Gender of the client (accepted values: NULL, “F” (Female), “M” (Male), “NB” (“Non-binary”)) |
| nationality | Nationality of the client |
| passport_number | Passport Number of the client |
| language | Language of the client |
| addresses | List of client’s addresses |
| current_store | Attributes related to the client’s current assigned store |
| current_sales_associate | Attributes related to the client’s current assigned sales associate |
| preferred_contact_channel | The preferred channel of the client |
| communication_preferences | Whether or not the client has enabled being contacted by a given channel |
| consent | Whether or not the client has given consent |
| notify_of_new_collection | Whether or not the client wants to be notified of new collections |
| preferences | The preferences assigned to the client |
| preferred_journey | The Journey which the client is assigned to |
| interests | Interests of that client, i.e. Surf, Golfing |
| segment | The Segmentention which the client is assigned to |
| referred_by_client_id | Unique identifier of the client that referred this client |
| referred_at | The date when the client referral was recorded in BSPK |
| last_contacted_at | The last date the client was contacted by a Sales Associate |
| created_at | Timestamp of when the client was created |
| updated_at | Timestamp of when the client was updated |
Sample Client payload:
{
"event_name": "client.updated",
"object": {
"id": 123,
"external_id": "C-720",
"first_name": "Mark",
"last_name": "Desmound",
"alternate_first_name": "标记",
"alternate_last_name": "德斯蒙德",
"title": "Mr.",
"current_store": {
"external_id": "STR-001"
},
"current_sales_associate": {
"external_id": "SA-123"
},
"email": "mark.d@email.com",
"mobile_phone": "+1 555 98765998",
"other_phone": "+1 555 4431009",
"birthday": "1980-01-23",
"gender": "M",
"nationality": "French",
"passport_number": "WT0010002098",
"language": "FR",
"addresses": [
{
"address": "661 N Park Ave",
"address_2": "Apartment #106",
"address_3": "",
"address_4": "",
"city": "Shawnee",
"state": "Oklahoma(OK)",
"zip": "74801",
"country_code": "USA"
}
],
"preferred_contact_channel": "email",
"communication_preferences": {
"chat_opt_in": true,
"email_opt_in": true,
"phone_opt_in": true,
"whatsapp_opt_in": false,
"wechat_opt_in": false,
"line_opt_in": false,
"opt_out": false
},
"consent": true,
"notify_of_new_collection": true,
"preferences": [
{ "name": "styles", "value": ["Business (Mon-Fri)"] },
{ "name": "profession", "value": ["Real Estate"] }
],
"interests": [ "Surf", "Golfing" ],
"preferred_journey": "special_order",
"segment": "VIP",
"referred_by_client_id": "CL-123",
"referred_at": "2021-07-20T09:00:00Z",
"last_contacted_at": "2021-07-23T09:00:00Z",
"created_at": "2021-01-10T15:00:00Z",
"updated_at": "2021-07-23T09:00:00Z"
}
}
File import payload
| Field | Description |
|---|---|
| id | BSPK’s unique identifier of file import |
| status | Import’s status: set to “error” when any errors are present or “completed” when there are no errors |
| started_at | Timestamp of when the import started |
| finished_at | Timestamp of when the import finished |
| file_name | Name of imported file |
| s3_bucket_name | Name of S3 bucket where imported file was dropped |
| processed_rows_count | Number of successfully processed rows |
| error_rows_count | Number of rows that failed to process successfully |
| errors | An array of errors where each error is defined by its line number in import file and the error message |
| warnings | An array of warnings where each warning is defined by its line number in import file and the warning message |
Sample File import payload:
{
"event_name": "file_import.finished",
"object": {
"id": 123,
"status": "error",
"started_at": "2022-03-02T13:55:29.000Z",
"finished_at": "2022-03-07T15:12:30.390Z",
"file_name": "PRODUCT_V2-20220101.csv",
"s3_bucket_name": "bspk-company-integration-prod",
"processed_rows_count": 200,
"error_rows_count": 2,
"errors": [
{
"line": 5,
"err_msg": ["Store not found for store_id: S_5"]
},
{
"line": 8,
"err_msg": ["Product Variant not found for product_ref: ID_1 and sku: SKU_4"]
}
],
"warnings": []
}
}