DevelopersWebhooks

Event catalog

Every event SKUFlow sends to webhooks, grouped by area, with the fields of its data.

SKUFlow sends 79 kinds of event. Each delivery's body is the event envelope with the fields below in data. Event data carries ids, statuses, amounts and dates only: never names, addresses, notes, secrets or costs. Read the full record with the API when you need it (the record's id is data.recordId).

Subscribe to any of these by name when you create a webhook endpoint, or leave the list empty to receive every event. The same list is available from the API: List event types.

Common to every event:

Field in dataTypeDescription
recordIdstringThe record the event is about. Its type is the event's prefix: invoice.paid carries an invoice id.
identifierstring (optional)The record's number when it has one, such as INV-12 or ORD-4.

Customers

customer.created

A customer (or lead) was created.

Field in dataTypeDescription
typeenumOne of RESIDENTIAL, COMMERCIAL.
statusstring
leadSourceIdstring (optional)

customer.updated

A customer's details changed. fields names what changed (never the values).

Field in dataTypeDescription
fieldsarray of string

A customer portal link was created or replaced.

Field in dataTypeDescription
customerIdstring

portal.session_revoked

A customer's portal session ended early: they signed out, staff signed them out, or sign-in was turned off. recordId is the session.

Field in dataTypeDescription
customerIdstring
reasonenumOne of SIGNED_OUT, STAFF, SIGN_IN_DISABLED, REPLACED.

portal.signed_in

A customer signed in to their portal with a code or a one-tap email link. recordId is the customer session.

Field in dataTypeDescription
customerIdstring
methodenumOne of EMAIL_CODE, SMS_CODE, EMAIL_LINK.

portal.viewed

A customer opened their portal.

Field in dataTypeDescription
customerIdstring

Requests and quotes

quote.approved

A quote was approved (by the customer, or by staff for them).

Field in dataTypeDescription
byStaffboolean (optional)

quote.changes_requested

The customer asked for changes to a quote.

Field in dataTypeDescription

quote.converted

An approved quote became an invoice.

Field in dataTypeDescription
invoiceIdstring

quote.created

A quote was created.

Field in dataTypeDescription

quote.declined

The customer declined a quote.

Field in dataTypeDescription

quote.sent

A quote was sent to the customer.

Field in dataTypeDescription

request.archived

A request was archived.

Field in dataTypeDescription

request.converted

A request became a quote.

Field in dataTypeDescription
quoteIdstring

request.created

A request came in (by staff, the online request form or the portal).

Field in dataTypeDescription
sourceenumOne of MANUAL, ONLINE_BOOKING, PORTAL, DESIGN_STUDIO.

Invoices

invoice.created

An invoice was created (usually as a draft).

Field in dataTypeDescription
customerIdstring
statusstring
totalCentsintegerInteger cents.
dueDatestring (optional)YYYY-MM-DD in the business's calendar.

invoice.overdue

An unpaid invoice passed its due date (the scheduler's overdue sweep).

Field in dataTypeDescription
customerIdstring
dueDatestring (optional)YYYY-MM-DD in the business's calendar.
balanceDueCentsintegerInteger cents.

invoice.paid

An invoice was paid in full.

Field in dataTypeDescription
amountPaidCentsintegerInteger cents.
balanceDueCentsintegerInteger cents.

invoice.partially_paid

A payment left part of an invoice due.

Field in dataTypeDescription
amountPaidCentsintegerInteger cents.
balanceDueCentsintegerInteger cents.

invoice.sent

An invoice was issued to the customer (status SENT).

Field in dataTypeDescription
customerIdstring
totalCentsintegerInteger cents.
balanceDueCentsintegerInteger cents.
dueDatestring (optional)YYYY-MM-DD in the business's calendar.

Payments

payment.disputed

A customer's bank opened a dispute (chargeback) on an online payment.

Field in dataTypeDescription
invoiceIdstring (optional)
amountCentsintegerInteger cents.
statusstring
reasonstring (optional)

payment.failed

An online payment failed: declined, a bank debit bounced, or the checkout page expired unpaid.

Field in dataTypeDescription
customerIdstring (optional)
invoiceIdstring (optional)
quoteIdstring (optional)
amountCentsintegerInteger cents.
tipCentsinteger (optional)Integer cents.
reasonstringStripe's code (card_declined, authentication_required…) or checkout_expired / checkout_replaced / bank_debit_failed.
channelenum (optional)One of PORTAL, INVOICE_LINK, QUOTE_PAGE, STAFF, STORE.

payment.recorded

Money was received: against an invoice, or a quote deposit.

Field in dataTypeDescription
customerIdstring (optional)
invoiceIdstring (optional)
quoteIdstring (optional)
depositboolean (optional)
amountCentsintegerInteger cents.
tipCentsinteger (optional)Integer cents.
methodenumOne of CASH, CHECK, CARD, BANK_TRANSFER, OTHER.
notifyCustomerboolean (optional)
processorenum (optional)STRIPE for an online payment settled by Stripe; MANUAL (or absent) when staff recorded it. One of MANUAL, STRIPE.

payment.refunded

A payment was (partly) refunded.

Field in dataTypeDescription
refundIdstring
amountCentsintegerInteger cents.
invoiceIdstring (optional)
quoteIdstring (optional)

payments.account_updated

The business's Stripe account changed standing: connected, charges or payouts enabled or paused, details submitted, or disconnected.

Field in dataTypeDescription
stateenumOne of NOT_CONNECTED, ONBOARDING, RESTRICTED, ACTIVE.
chargesEnabledboolean
payoutsEnabledboolean
detailsSubmittedboolean

Team

chat.message_sent

Someone wrote in team chat (the team or a direct message).

Field in dataTypeDescription
conversationIdstring
kindenumOne of TEAM, DIRECT.

Inventory and purchasing

inventory.low_stock

An item reached its reorder point at a location.

Field in dataTypeDescription
locationIdstring
onHandnumber
reorderPointnumber (optional)

inventory.negative_stock

An item went below zero at a location.

Field in dataTypeDescription
locationIdstring
onHandnumber
reorderPointnumber (optional)

inventory.transferred

Stock moved between locations.

Field in dataTypeDescription
fromLocationIdstring
toLocationIdstring
linesinteger

pricebook.imported

A pricebook CSV was imported.

Field in dataTypeDescription
createdinteger
updatedinteger

purchase_order.cancelled

A purchase order was cancelled.

Field in dataTypeDescription

purchase_order.received

Items on a purchase order were received.

Field in dataTypeDescription
statusstring
linesinteger

purchase_order.sent

A purchase order was sent to its vendor.

Field in dataTypeDescription
vendorIdstring

Messages and automations

automation.disabled

An automation (engagement rule) was turned off.

Field in dataTypeDescription
presetKeystring (optional)
triggerTypeenumOne of EVENT, SCHEDULE, ABSENCE, RELATIVE.

automation.enabled

An automation (engagement rule) was turned on.

Field in dataTypeDescription
presetKeystring (optional)
triggerTypeenumOne of EVENT, SCHEDULE, ABSENCE, RELATIVE.

consent.changed

A contact method's messaging consent changed (STOP / START reply, the unsubscribe page, staff, a bounce).

Field in dataTypeDescription
customerIdstring
channelenumOne of EMAIL, SMS.
purposeenumOne of TRANSACTIONAL, MARKETING.
statusenumOne of OPTED_IN, OPTED_OUT.
sourcestringreply:STOP, reply:START, unsubscribe-page, staff, bounce, complaint.

message.bounced

An email bounced or was marked as spam; its address is suppressed.

Field in dataTypeDescription
customerIdstring (optional)
channelenumOne of EMAIL, SMS.
kindenumOne of BOUNCE, COMPLAINT.

message.delivered

The provider confirmed a message was delivered.

Field in dataTypeDescription
customerIdstring (optional)
channelenumOne of EMAIL, SMS.
ruleIdstring (optional)

message.failed

A message could not be sent (the provider refused it).

Field in dataTypeDescription
customerIdstring (optional)
channelenumOne of EMAIL, SMS.
ruleIdstring (optional)
reasonstringA short code: provider_error, provider_not_configured …

message.replied

A customer replied to a text (logged as an inbound message). Ends cadences that list it as an exit.

Field in dataTypeDescription
customerIdstring (optional)
channelenumOne of EMAIL, SMS.
inReplyToIdstring (optional)
keywordenum (optional)Set when the reply was an opt-out, opt-in or help keyword. One of STOP, START, HELP.

message.sent

A customer email or text was sent (or, in test mode, rendered and logged as SENT_TEST).

Field in dataTypeDescription
customerIdstring (optional)
channelenumOne of EMAIL, SMS.
purposeenumOne of TRANSACTIONAL, MARKETING.
sourceenumOne of AUTOMATION, MANUAL, TEST, INBOUND, CAMPAIGN, SYSTEM.
statusenumOne of SENT, SENT_TEST.
ruleIdstring (optional)
subjectTypestring (optional)
subjectIdstring (optional)
campaignIdstring (optional)

Marketing

campaign.cancelled

A campaign was cancelled before it finished.

Field in dataTypeDescription
channelsarray of enum
statusenumOne of DRAFT, SCHEDULED, SENDING, PAUSED, SENT, CANCELLED.

campaign.completed

Every recipient of a campaign was handled (queued, or skipped with the reason).

Field in dataTypeDescription
channelsarray of enum
statusenumOne of DRAFT, SCHEDULED, SENDING, PAUSED, SENT, CANCELLED.
queuedinteger
skippedinteger

campaign.paused

A sending or scheduled campaign was paused.

Field in dataTypeDescription
channelsarray of enum
statusenumOne of DRAFT, SCHEDULED, SENDING, PAUSED, SENT, CANCELLED.

campaign.resumed

A paused campaign was resumed.

Field in dataTypeDescription
channelsarray of enum
statusenumOne of DRAFT, SCHEDULED, SENDING, PAUSED, SENT, CANCELLED.

campaign.scheduled

A marketing campaign was scheduled for later (a time, or each recipient's local time).

Field in dataTypeDescription
channelsarray of enum
statusenumOne of DRAFT, SCHEDULED, SENDING, PAUSED, SENT, CANCELLED.
audienceCountinteger

campaign.started

A marketing campaign started sending.

Field in dataTypeDescription
channelsarray of enum
statusenumOne of DRAFT, SCHEDULED, SENDING, PAUSED, SENT, CANCELLED.
audienceCountinteger

referral.converted

A referred customer converted (first paid invoice by default); the referrer's reward was issued unless the cap withheld it.

Field in dataTypeDescription
referrerCustomerIdstring
referredCustomerIdstring
rewardWithheldboolean

referral.created

Someone came in through a customer's referral link, or staff recorded a referral.

Field in dataTypeDescription
referrerCustomerIdstring
referredCustomerIdstring (optional)
requestIdstring (optional)
sourceenumOne of LINK, STAFF.

referral.rejected

A referral was refused: self-referral, an existing customer, or by staff.

Field in dataTypeDescription
referrerCustomerIdstring
reasonenumOne of SELF_REFERRAL, EXISTING_CUSTOMER, DUPLICATE, STAFF.

referral.reward_applied

A referral reward was used: a credit line on an invoice, or the gift card was sent.

Field in dataTypeDescription
referralIdstring
customerIdstring
invoiceIdstring (optional)
amountCentsintegerInteger cents.

referral.reward_issued

A referral reward was earned.

Field in dataTypeDescription
referralIdstring
customerIdstring
partyenumOne of REFERRER, FRIEND.
kindenumOne of ACCOUNT_CREDIT, DISCOUNT, GIFT_CARD, NONE.
amountCentsintegerInteger cents.

Website

website.deleted

The business's website was deleted with its pages, addresses and stats (the image library stays).

Field in dataTypeDescription
subdomainstring
wasPublishedboolean

website.domain_activated

A custom domain passed its DNS checks and now serves the website.

Field in dataTypeDescription
hostnamestring

website.published

The business's website was published (or republished).

Field in dataTypeDescription
pageCountinteger

website.unpublished

The business's website was taken down.

Field in dataTypeDescription

Online stores

store.closed

An online store was closed: it takes no more orders and its production batch is final.

Field in dataTypeDescription
orderCountinteger
unitCountinteger

store.domain_activated

A custom domain passed its DNS checks and now serves the online store.

Field in dataTypeDescription
hostnamestring

store.published

An online store was opened for orders (or reopened).

Field in dataTypeDescription
kindenumOne of COMPANY, TEAM, FUNDRAISER, RETAIL.
customerIdstring (optional)

store_order.approved

A company-paid store order was approved.

Field in dataTypeDescription
storeIdstring

store_order.cancelled

A store order was cancelled (by staff, or its online payment never arrived).

Field in dataTypeDescription
storeIdstring
reasonstring

store_order.fulfilled

A store order was handed over or shipped.

Field in dataTypeDescription
storeIdstring

store_order.paid

A store order's online payment arrived; it is PLACED.

Field in dataTypeDescription
storeIdstring
invoiceIdstring (optional)
totalCentsintegerInteger cents.

store_order.placed

A store order was placed: PENDING_PAYMENT (paying online), AWAITING_APPROVAL (company-paid) or PLACED.

Field in dataTypeDescription
storeIdstring
customerIdstring (optional)
invoiceIdstring (optional)
statusstring
checkoutModeenumOne of PAY_ONLINE, INVOICE_ACCOUNT, FREE.
totalCentsintegerInteger cents.

store_order.rejected

A company-paid store order was not approved.

Field in dataTypeDescription
storeIdstring

Orders and production

order.created

An order (ORD-n) was made from a quote, an invoice, a store's batch or by hand.

Field in dataTypeDescription
customerIdstring (optional)
sourceenumOne of QUOTE, INVOICE, STORE, MANUAL.
dueDatestring (optional)YYYY-MM-DD in the business's calendar.

order.status_changed

An order moved: waiting on art, payment or goods, ready, in production, ready to ship, shipped, completed, on hold or cancelled.

Field in dataTypeDescription
customerIdstring (optional)
fromenumOne of AWAITING_ART, AWAITING_PAYMENT, AWAITING_GOODS, READY, IN_PRODUCTION, READY_TO_SHIP, SHIPPED, COMPLETED, ON_HOLD, CANCELLED.
toenumOne of AWAITING_ART, AWAITING_PAYMENT, AWAITING_GOODS, READY, IN_PRODUCTION, READY_TO_SHIP, SHIPPED, COMPLETED, ON_HOLD, CANCELLED.

shipment.delivered

The carrier delivered the package.

Field in dataTypeDescription
customerIdstring (optional)
orderIdstring (optional)The order it ships.
storeOrderIdstring (optional)Or the store order it ships.
carrierstring (optional)

shipment.exception

The package was returned to the sender or could not be delivered.

Field in dataTypeDescription
customerIdstring (optional)
orderIdstring (optional)
storeOrderIdstring (optional)
carrierstring (optional)
statusenumOne of RETURNED, FAILURE.

shipment.label_created

A shipping label was bought for an order or a store order.

Field in dataTypeDescription
customerIdstring (optional)
orderIdstring (optional)The order it ships.
storeOrderIdstring (optional)Or the store order it ships.
carrierstring (optional)

shipment.shipped

The carrier has the package: it is on its way.

Field in dataTypeDescription
customerIdstring (optional)
orderIdstring (optional)The order it ships.
storeOrderIdstring (optional)Or the store order it ships.
carrierstring (optional)

Reviews

feedback.submitted

A customer rated their order when paying (stars and a comment, kept in SKUFlow). Low ratings are worth a call.

Field in dataTypeDescription
ratinginteger1–5 stars.
customerIdstring
invoiceIdstring

review.received

A new Google review arrived (synced from the Business Profile). Low ratings are worth a quick reply.

Field in dataTypeDescription
ratinginteger1–5 stars.
locationIdstring
customerIdstring (optional)The customer it was matched to by name, if one.

review.replied

The business replied publicly to a Google review.

Field in dataTypeDescription
ratinginteger

Phone

call.completed

A call ended: answered (COMPLETED), MISSED, VOICEMAIL or, for an outbound call, FAILED.

Field in dataTypeDescription
directionenumOne of INBOUND, OUTBOUND.
statusenumOne of COMPLETED, MISSED, VOICEMAIL, FAILED.
sourceenum (optional)One of MAIN, WEBSITE, GOOGLE_BUSINESS, CAMPAIGN, QR_CODE, BUSINESS_UNIT, PRINT, OTHER.
phoneNumberIdstring (optional)
customerIdstring (optional)
durationSecondsinteger (optional)

call.received

An inbound call reached one of the business's numbers (before anyone answered).

Field in dataTypeDescription
directionenumOne of INBOUND, OUTBOUND.
sourceenum (optional)One of MAIN, WEBSITE, GOOGLE_BUSINESS, CAMPAIGN, QR_CODE, BUSINESS_UNIT, PRINT, OTHER.
phoneNumberIdstring (optional)
customerIdstring (optional)
afterHoursboolean

System

billing.addon_acknowledged

An owner accepted a paid add-on's usage terms (adding it, turning on SKUFlow-managed telephony, or after a price change). recordId is the acknowledgement.

Field in dataTypeDescription
addonKeystring
contextenumOne of ADD_ADDON, MANAGED_TELEPHONY, REVIEW.
priceVersionstring
userIdstring

import.completed

A migration import finished. The only event of an import: its records emit no events of their own. recordId is the import run.

Field in dataTypeDescription
sourceenumOne of DECONETWORK, SPREADSHEET.
createdinteger
updatedinteger

webhook.test

A test event sent from Settings → Developers → Webhooks to one endpoint only. Sent only by Send test event; you cannot subscribe to it.

Field in dataTypeDescription
messagestring

On this page

Customerscustomer.createdcustomer.updatedportal.link_createdportal.session_revokedportal.signed_inportal.viewedRequests and quotesquote.approvedquote.changes_requestedquote.convertedquote.createdquote.declinedquote.sentrequest.archivedrequest.convertedrequest.createdInvoicesinvoice.createdinvoice.overdueinvoice.paidinvoice.partially_paidinvoice.sentPaymentspayment.disputedpayment.failedpayment.recordedpayment.refundedpayments.account_updatedTeamchat.message_sentInventory and purchasinginventory.low_stockinventory.negative_stockinventory.transferredpricebook.importedpurchase_order.cancelledpurchase_order.receivedpurchase_order.sentMessages and automationsautomation.disabledautomation.enabledconsent.changedmessage.bouncedmessage.deliveredmessage.failedmessage.repliedmessage.sentMarketingcampaign.cancelledcampaign.completedcampaign.pausedcampaign.resumedcampaign.scheduledcampaign.startedreferral.convertedreferral.createdreferral.rejectedreferral.reward_appliedreferral.reward_issuedWebsitewebsite.deletedwebsite.domain_activatedwebsite.publishedwebsite.unpublishedOnline storesstore.closedstore.domain_activatedstore.publishedstore_order.approvedstore_order.cancelledstore_order.fulfilledstore_order.paidstore_order.placedstore_order.rejectedOrders and productionorder.createdorder.status_changedshipment.deliveredshipment.exceptionshipment.label_createdshipment.shippedReviewsfeedback.submittedreview.receivedreview.repliedPhonecall.completedcall.receivedSystembilling.addon_acknowledgedimport.completedwebhook.test