VineSpring supports webhooks for the following objects:

Create a new webhook

Navigate to Settings -> Connections -> Webhooks to view existing webhooks and to create new ones. To create a new one, click Create New.

Name: Enter something descriptive so you know what this new webhook will do.
URL: This is the endpoint that will receive the webhook and is typically generated in the outside application (IE: Zapier, Automate, etc). Must be set as an accessible, absolute URL. VineSpring will send event data to this endpoint via an HTTP POST request.
Failure Email: Used for notifying an administrator by email when the event happened but no endpoint listened, or there was no successful response from the endpoint.
Subscribe To: Check the box next to the events you want to enable.

Responding to a Webhook

  • All requests are in JSON format

  • Request method will always be POST

  • You must respond with a successful (200) status code

  • VineSpring will retry every 25 seconds 10 times until a successful status code is received

The request body will contain event data, in the following format:

{
  type: "customer.created", // event type <string>
  data: { ... } // event data <object>
}

Events

We currently support the following events:

Customers

Orders

Clubs

Groups

Customer Webhook

Customer created

{
"data": {
"email": "alt_email@vinespring.com",
"fullName": "Mary Tester",
"phone": "303-555-1212",
"company": "VineSpring",
"title": "Employee",
"source": "Friend",
"dob": "1977-01-30T12:00:00.000Z",
"altEmail": "alt_email2@vinespring.com",
"crmId": "crmid_xxx",
"crmLink": "https://salesforce.com/customers/",
"accountId": "acct_5ffcd81398a4520008a99be0",
"updatedBy": "chris@vinespring.com",
"id": "cust_601ab8db5bfb1500074600af",
"authToken": "xxxcf154e2270x2d33f5d02d7fxxx",
"updatedOn": "2021-02-03T14:53:15.466Z",
"createdOn": "2021-02-03T14:53:15.466Z",
"customerSince": "2021-02-03T12:00:00.000Z",
"name": {
"first": "Mary",
"last": "Tester"
}
},
"type": "customer.created"
}

Customer deleted

{
"data": {
"id": "cust_601abda12cb19700086002e3"
},
"type": "customer.deleted"
}

Customer updated

{
"data": {
"crmLink": "https://salesforce.com/customers/",
"updatedOn": "2021-02-03T14:53:15.633Z",
"accountId": "acct_5ffcd81398a4520008axxx",
"crmId": "crmid_xxx",
"updatedBy": "admin@vinespring.com",
"source": "Friend",
"fullName": "Mary Tester",
"email": "alt_email@vinespring.com",
"name": {
"first": "Mary",
"last": "Tester"
},
"authToken": "f154e2xxf5d02d7fb70a575c8e76afb002e39fxxx",
"customerSince": "2021-02-03T12:00:00.000Z",
"defaultAddress": {
"country": "United States",
"updatedBy": "admin@vinespring.com",
"city": "San Francisco",
"postalCode": "94105",
"label": "Home",
"updatedOn": "2021-02-03T14:53:15.504Z",
"createdOn": "2021-02-03T14:53:15.302Z",
"phone": "303-555-1212",
"isInternational": false,
"organization": "VineSpring",
"name": "Mary Tester",
"customerId": "cust_601ab8db5bfb1500074xxxx",
"state": "CA",
"id": "addr_601ab8db5bfb15000746xxxx",
"line2": "Apartment 2",
"line1": "123 Main St"
},
"company": "VineSpring",
"createdOn": "2021-02-03T14:53:15.466Z",
"dob": "1977-01-30T12:00:00.000Z",
"altEmail": "alt_email2@vinespring.com",
"id": "cust_601ab8db5bfb150007xxxx",
"phone": "303-555-1212",
"title": "Employee",
"lifetimeValue": 205
},
"type": "customer.updated"
}

Order Webhook

Order created

{
"data": {
"accountId": "acct_5ffcd81398a4520008axxxx",
"calculatedShipping": 0,
"createdOn": "2021-02-03T15:10:25.839Z",
"customerId": "cust_601ab8db5bfb15000746xxxx",
"customer": {
"billingAddress": {
"country": "United States",
"updatedBy": "admin@vinespring.com",
"city": "San Francisco",
"postalCode": "94105",
"label": "Home",
"updatedOn": "2021-02-03T14:53:15.504Z",
"createdOn": "2021-02-03T14:53:15.302Z",
"phone": "303-555-1212",
"isInternational": false,
"organization": "VineSpring",
"name": "Mary Tester",
"customerId": "cust_601ab8db5bfb150007xxx",
"state": "CA",
"id": "addr_601ab8db5bfb15000xxxx",
"line2": "Apartment 2",
"line1": "123 Main St"
},
"dob": "1977-01-30T12:00:00.000Z",
"email": "alt_email@vinespring.com",
"name": {
"last": "Tester",
"first": "Mary"
},
"phone": "303-555-1212"
},
"discounts": [],
"freightTax": 0,
"fullName": "Mary Tester",
"items": [
{
"discount": 0,
"freightTax": 0,
"isTaxExempt": false,
"name": "2019 Pinot Noir",
"price": 60,
"productId": "prod_601abacf453e970007bxxxx",
"quantity": 4,
"shipping": 0,
"sku": "2019VSPN",
"subtotal": 240,
"tax": 0,
"total": 240
}
],
"shippingAddress": {
"country": "US",
"state": "CA",
"city": "Somewhere",
"line1": "123 Main Street",
"postalCode": "90001"
},
"shippingMethod": {
"id": "smtd_5ffcd81b98a4520008xxxx",
"alternateAddress": {
"country": "US",
"state": "CA",
"city": "Somewhere",
"line1": "123 Main Street",
"postalCode": "90001"
},
"carrierCode": "PIC",
"name": "Pickup at Winery",
"requireShippingAddress": false
},
"shipping": 0,
"shipDate": "2021-02-03T12:00:00.000Z",
"status": "Awaiting Fulfillment",
"subtotal": 240,
"tax": 0,
"total": 240,
"tipPercent": null,
"tipAmount": null,
"type": "Admin",
"id": "ordr_601abce1bd1c4500078bxxx",
"orderNumber": "1002"
},
"type": "order.created"
}

Order updated

{
"data": {
"status": "Awaiting Fulfillment",
"tax": 0,
"shipping": 25,
"giftMessage": "Happy Birthday, Julie!",
"shippingMethod": {
"id": "smtd_5ffcd81b98a4520008xxxx",
"carrierCode": "UPS",
"name": "UPS Ground",
"requireShippingAddress": true
},
"notes": [
{
"message": "Really nice customer.",
"createdOn": "2021-02-03T15:03:03.115Z",
"email": "admin@vinespring.com"
}
],
"shippingInstructions": "Deliver to doorstep.",
"id": "ordr_601abb2ec2a7e9000xxxx",
"shipDate": "2021-02-03T12:00:00.000Z",
"accountId": "acct_5ffcd81398a45200zxxxx",
"billingAddress": {
"country": "United States",
"updatedBy": "admin@vinespring.com",
"city": "San Francisco",
"postalCode": "94105",
"updatedOn": "2021-02-03T14:53:15.504Z",
"label": "Home",
"createdOn": "2021-02-03T14:53:15.302Z",
"isInternational": false,
"phone": "303-555-1212",
"organization": "VineSpring",
"name": "Mary Tester",
"customerId": "cust_601ab8db5bfb150xxxx",
"state": "CA",
"id": "addr_601ab8db5bfb150007xxxx",
"line2": "Apartment 2",
"line1": "123 Main St"
},
"total": 385,
"tipPercent": null,
"fullName": "Mary Tester",
"items": [
{
"discount": 0,
"freightTax": 0,
"isTaxExempt": false,
"name": "2019 Pinot Noir",
"price": 60,
"productId": "prod_601abacf453e9700xxxx",
"quantity": 6,
"shipping": 25,
"sku": "2019VSPN",
"subtotal": 360,
"tax": 0,
"total": 360
}
],
"freightTax": 0,
"tipAmount": null,
"orderNumber": "1001",
"subtotal": 360,
"shippingAddress": {
"country": "United States",
"updatedBy": "admin@vinespring.com",
"city": "San Francisco",
"postalCode": "94105",
"updatedOn": "2021-02-03T14:53:15.504Z",
"label": "Home",
"createdOn": "2021-02-03T14:53:15.302Z",
"isInternational": false,
"phone": "303-555-1212",
"organization": "VineSpring",
"name": "Mary Tester",
"customerId": "cust_601ab8db5bfb150xxxxx",
"state": "CA",
"id": "addr_601ab8db5bfb1500xxxxx",
"line2": "Apartment 2",
"line1": "123 Main St"
},
"createdOn": "2021-02-03T15:03:10.588Z",
"calculatedShipping": 25,
"customer": {
"billingAddress": {
"country": "United States",
"updatedBy": "admin@vinespring.com",
"city": "San Francisco",
"postalCode": "94105",
"updatedOn": "2021-02-03T14:53:15.504Z",
"label": "Home",
"createdOn": "2021-02-03T14:53:15.302Z",
"isInternational": false,
"phone": "303-555-1212",
"organization": "VineSpring",
"name": "Mary Tester",
"customerId": "cust_601ab8db5bfb150xxxx",
"state": "CA",
"id": "addr_601ab8db5bfb1500xxxxx",
"line2": "Apartment 2",
"line1": "123 Main St"
},
"dob": "1977-01-30T12:00:00.000Z",
"email": "alt_email@vinespring.com",
"name": {
"last": "Tester",
"first": "Mary"
},
"phone": "303-555-1212"
},
"discounts": [],
"type": "Admin",
"customerId": "cust_601ab8db5bfb15000xxxx"
},
"type": "order.updated"
}

Clubs Webhook

Club membership created

{
type: "membership.created",
data: {
id: "cmbr_xxx",
accountId: "acct_xxx",
cardId: "ch_xxx",
clubId: "club_xxx",
isGift: false,
memberSince: "2020-01-31T09:01:18.897Z",
purchaserCustomerId: "cust_xxx",
recipientCustomerId: "cust_xxx",
status: "active",
source: "storefront",
createdOn: "2020-01-31T09:01:18.897Z",
updatedOn: "2020-01-31T09:01:18.897Z"
}
}

Club membership customer note updated

{
type: "membership.customerNote.updated",
data: {
id: "cmbr_xxx",
accountId: "acct_xxx",
cardId: "ch_xxx",
clubId: "club_xxx",
customerNote: {
message: "a note",
updatedBy: "email@email.com",
updatedOn: "2020-02-31T09:01:18.897Z"
},
isGift: false,
memberSince: "2020-01-31T09:01:18.897Z",
purchaserCustomerId: "cust_xxx",
recipientCustomerId: "cust_xxx",
status: "active",
source: "storefront",
createdOn: "2020-01-31T09:01:18.897Z",
updatedOn: "2020-02-31T09:01:18.897Z",
updatedBy: "email@email.com"
}
}

Club membership on hold

{
type: "membership.on_hold",
data: {
id: "cmbr_xxx",
accountId: "acct_xxx",
cardId: "ch_xxx",
clubId: "club_xxx",
customerNote: {
message: "a note",
updatedBy: "email@email.com",
updatedOn: "2020-02-31T09:01:18.897Z"
},
holdUntil: "2020-11-31T09:01:18.897Z",
holdOn: "2020-03-31T09:01:18.897Z",
isGift: false,
memberSince: "2020-01-31T09:01:18.897Z",
purchaserCustomerId: "cust_xxx",
recipientCustomerId: "cust_xxx",
status: "hold",
source: "storefront",
createdOn: "2020-01-31T09:01:18.897Z",
updatedOn: "2020-03-31T09:01:18.897Z",
updatedBy: "email@email.com"
}
}

Club membership payment method updated

{
type: "membership.paymentMethod.updated",
data: {
id: "cmbr_xxx",
accountId: "acct_xxx",
cardId: "ch_xxx",
clubId: "club_xxx",
custom1: "custom field 1",
custom2: "custom field 2",
custom3: "custom field 3",
custom4: "custom field 4",
custom5: "custom field 5",
customerNote: {
message: "a note",
updatedBy: "email@email.com",
updatedOn: "2020-02-31T09:01:18.897Z"
},
isGift: false,
memberSince: "2020-01-31T09:01:18.897Z",
purchaserCustomerId: "cust_xxx",
recipientCustomerId: "cust_xxx",
salesrep: "Jack",
shipmentsCreated: 2,
shippingAddressId: "addr_123",
shippingMethodId: "smtd_123",
status: "active",
source: "storefront",
createdOn: "2020-01-31T09:01:18.897Z",
updatedOn: "2020-04-31T09:01:18.897Z",
updatedBy: "email@email.com"
}
}

Club membership reactivated

{
type: "membership.reactivated",
data: {
id: "cmbr_xxx",
accountId: "acct_xxx",
cardId: "ch_xxx",
clubId: "club_xxx",
custom1: "custom field 1",
custom2: "custom field 2",
custom3: "custom field 3",
custom4: "custom field 4",
custom5: "custom field 5",
customerNote: {
message: "a note",
updatedBy: "email@email.com",
updatedOn: "2020-02-31T09:01:18.897Z"
},
isGift: false,
memberSince: "2020-01-31T09:01:18.897Z",
purchaserCustomerId: "cust_xxx",
recipientCustomerId: "cust_xxx",
salesrep: "Jack",
shipmentsCreated: 2,
shippingAddressId: "addr_123",
shippingMethodId: "smtd_123",
status: "active",
source: "storefront",
createdOn: "2020-01-31T09:01:18.897Z",
updatedOn: "2020-04-31T09:01:18.897Z",
updatedBy: "email@email.com"
}
}

Club membership shipping address updated

{
type: "membership.shippingAddress.updated",
data: {
id: "cmbr_xxx",
accountId: "acct_xxx",
cardId: "ch_xxx",
clubId: "club_xxx",
custom1: "custom field 1",
custom2: "custom field 2",
custom3: "custom field 3",
custom4: "custom field 4",
custom5: "custom field 5",
giftMessage: "Enjoy!",
note: {
message: "admin note",
updatedBy: "admin@email.com",
updatedOn: "2020-02-31T09:01:18.897Z"
},
customerNote: {
message: "a note",
updatedBy: "email@email.com",
updatedOn: "2020-02-31T09:01:18.897Z"
},
isGift: true,
memberSince: "2020-01-31T09:01:18.897Z",
purchaserCustomerId: "cust_xxx",
recipientCustomerId: "cust_xxx",
salesrep: "Jack",
shipmentsCreated: 2,
shipmentsGifted: 2,
shippingAddressId: "addr_123",
shippingMethodId: "smtd_123",
status: "active",
trustee: {
fullName: "Name",
email: "test@test.com",
phone: "1231231234"
},
source: "admin",
createdOn: "2020-01-31T09:01:18.897Z",
updatedOn: "2020-04-31T09:01:18.897Z",
updatedBy: "email@email.com"
}
}

Club membership shipping method updated

{
type: "membership.shippingMethod.updated",
data: {
id: "cmbr_xxx",
accountId: "acct_xxx",
cardId: "ch_xxx",
clubId: "club_xxx",
custom1: "custom field 1",
custom2: "custom field 2",
custom3: "custom field 3",
custom4: "custom field 4",
custom5: "custom field 5",
giftMessage: "Enjoy!",
note: {
message: "admin note",
updatedBy: "admin@email.com",
updatedOn: "2020-02-31T09:01:18.897Z"
},
customerNote: {
message: "a note",
updatedBy: "email@email.com",
updatedOn: "2020-02-31T09:01:18.897Z"
},
isGift: true,
memberSince: "2020-01-31T09:01:18.897Z",
purchaserCustomerId: "cust_xxx",
recipientCustomerId: "cust_xxx",
salesrep: "Jack",
shipmentsCreated: 2,
shipmentsGifted: 2,
shippingAddressId: "addr_123",
shippingMethodId: "smtd_123",
status: "active",
trustee: {
fullName: "Name",
email: "test@test.com",
phone: "1231231234"
},
source: "admin",
createdOn: "2020-01-31T09:01:18.897Z",
updatedOn: "2020-04-31T09:01:18.897Z",
updatedBy: "email@email.com"
}
}

Club membership cancelled

{
"data": {
"shippingMethodId": "smtd_xxxx",
"updatedOn": "2021-11-11T15:22:42.529Z",
"accountId": "acct_xxx",
"maxSkipsPeriod": "year",
"purchaserCustomerId": "cust_xxx",
"status": "canceled",
"updatedBy": "chris@vinespring.com",
"source": "admin",
"skipPeriodEndTime": "2022-01-01T07:59:59.999Z",
"shipmentsCreated": 2,
"clubId": "club_xxxx",
"skipsThisPeriod": 0,
"cardId": "card_xxxx",
"isGift": false,
"note": {
"message": "This is a message",
"updatedBy": "chris@vinespring.com",
"updatedOn": "2021-07-16T16:54:45.627Z"
},
"recipientCustomerId": "cust_xxx",
"createdOn": "2021-03-19T20:28:11.974Z",
"allowCustomerSkip": true,
"maxSkips": 1,
"id": "cmbr_xxx",
"memberSince": "2021-03-19T20:28:11.974Z",
"shippingAddressId": "addr_xxxx",
"cancelationOn": "2021-11-11T15:22:42.456Z",
"cancelationReason": "too much wine"
},
"type": "membership.cancelled"
}

Groups Webhook

Group created

{
"data": {
"name": "Best Purchasers",
"accountId": "acct_5ffcd81398a4520008a9xxx",
"id": "cgrp_601abe0c2cb19700086xxx",
"autoRefresh": false,
"isDefault": false,
"isTaxExempt": false
},
"type": "group.created"
}

Group customer(s) added

{
"data": {
"customerIds": [
"cust_601ab8db5bfb1500074xxx"
],
"groupId": "cgrp_601abe0c2cb1970008xxx"
},
"type": "group.customers.added"
}

Group customer(s) removed

{
"data": {
"customerIds": [
"cust_601ab8db5bfb150007xxx"
],
"groupId": "cgrp_601abe0c2cb1970008xxx"
},
"type": "group.customers.removed"
}

Group deleted

{
"data": {
"id": "cgrp_601abe0c2cb1970008xxx"
},
"type": "group.deleted"
}

Group updated

{
"data": {
"isDefault": true,
"isTaxExempt": false,
"autoRefresh": false,
"accountId": "acct_5ffcd81398a452xxx",
"id": "cgrp_601ac39f57axxx",
"name": "Test Group",
"memberCount": 0
},
"type": "group.updated"
}

Did this answer your question?