Webhooks: Complete Field Reference (Practical Guide)

This article walks you through every outbound webhook Neuro can fire, what each payload looks like, and how to consume them safely in your own systems. It’s designed to be information‑dense but approachable, with step‑based guidance and ready‑to‑paste payload examples.

Last updated About 5 hours ago

Welcome to Webhooks in Neuro

Webhooks are Neuro’s way of tapping you on the shoulder the moment something important happens.

Instead of repeatedly polling our API to find out whether an order has arrived, a fulfilment has been created, or stock has changed, webhooks let Neuro push that information straight into your systems in real time. You give us a URL; we send you rich JSON payloads whenever key events occur across orders, fulfilments, products, and invoices.

This makes life easier in a few very practical ways:

  • You keep external systems perfectly in sync without writing brittle polling jobs or cron tasks.

  • You can trigger downstream workflows instantly – update your WMS, notify a 3PL, create accounting entries, or send internal alerts the moment data changes.

  • You get a consistent, well‑structured payload shape for each entity type, so parsing and mapping data is predictable and repeatable.

This page is your complete field reference for those payloads. For every webhook we fire, you’ll find the event name, when it triggers, the JSON body you can expect, and a description of each field so you can confidently validate, transform, and use the data in your own applications and integrations.

1. Webhook Events at a Glance

Neuro emits outbound webhooks whenever key entities change. Each event always sends a full snapshot of the entity at that moment, not a diff.

#

Event

Name

TriggerPayload

TypeStatus

1

orders.received

New order imported into Neuro

Order

Live

2

orders.updated

Existing order is updated (status change, fulfilment, etc.)

Order

Live

3

orders.on_hold

Order placed on hold

Order

Live

4

orders.excluded

Order excluded from processing

Order

Live

5

orders.route_to_webhook

Order routed to a specific webhook via rules

Order

Live

6

confirmation.orders.received

Order receipt confirmed

Order

Live

7

fulfillments.created

New fulfilment created for an order

Fulfilment

Live

8

fulfillments.updated

Fulfilment record updated (tracking, status)

Fulfilment

Live

9

products.created

New main product created

Product

Coming Soon

10

products.updated

Main product record updated (stock, title, etc.)

Product

Live

11

channels.products.created

New channel product created (imported from channel)

Channel Product

Coming Soon

12

channels.products.updated

Channel product updated (stock sync, price, etc.)

Channel Product

Live

13

plugins.products.created

New plugin product created

Plugin Product

Coming Soon

14

plugins.products.updated

Plugin product updated

Plugin Product

Live

15

invoices.received

New invoice received

Invoice

Live

16

invoices.updated

Invoice updated

Invoice

Live

Item limits:

Order events include up to 150 items per payload, product events up to 250. Larger orders/products are split into multiple webhook calls.

2. Orders Received (orders.received)

Fired when a new order is imported from a channel into Neuro. Order webhooks all share the same Order payload shape. Only the triggering context differs.

2.1 Example: ‎`orders.received` Payload

Triggered when a new order is imported into Neuro.

Payload: Order

{
  "webhook_id": "a1b2c3d4-0000-0000-0000-000000000001",
  "order_id": "f7e6d5c4-1111-2222-3333-444444444444",
  "channel_id": "c1d2e3f4-aaaa-bbbb-cccc-dddddddddddd",
  "channel_alt_id": "ALT-12345",
  "channel_name": "My Shopify Store",
  "channel_type": "shopify",
  "store_id": "s1t2o3r4-eeee-ffff-0000-111111111111",
  "remote_id": "5678901234",
  "remote_status": "Unshipped",
  "status": "Unshipped",
  "customer": {
    "id": 12345,
    "customer_uuid": "cust-uuid-0001",
    "company_id": 1,
    "name": "Jane Smith",
    "email": "jane.smith@example.com",
    "created_at": "2025-06-10T08:00:00.000000Z",
    "updated_at": "2026-01-15T14:32:00.000000Z"
  },
  "shipping_method": "Standard Shipping",
  "shipping_address": {
    "id": "addr-uuid-ship-001",
    "name": "Jane Smith",
    "company_name": "Acme Ltd",
    "address_line_one": "123 High Street",
    "address_line_two": "Floor 2",
    "address_line_three": "",
    "long_address": "123 High Street, Floor 2",
    "county": "Greater London",
    "city": "London",
    "country_iso_code": "GB",
    "zip": "EC1A 1BB",
    "phone": "+441234567890"
  },
  "invoice_address": {
    "id": "addr-uuid-inv-001",
    "name": "Jane Smith",
    "company_name": "Acme Ltd",
    "address_line_one": "123 High Street",
    "address_line_two": "",
    "address_line_three": "",
    "long_address": "123 High Street",
    "county": "Greater London",
    "city": "London",
    "country_iso_code": "GB",
    "zip": "EC1A 1BB",
    "phone": "+441234567890"
  },
  "fulfillment": null,
  "return": null,
  "payment_method": "shopify_payments",
  "send_via_webhook": true,
  "payment_status": "paid",
  "payment_details": {
    "vat_id": "",
    "vat_type": null,
    "tax_rate": "20",
    "tax_total": "8.33",
    "shipping_total": "4.99",
    "discount_total": "0",
    "discount_total_exc_tax": "0",
    "order_subtotal": "41.65",
    "order_subtotal_exc_tax": "33.32",
    "order_total": "46.64",
    "payment_method": "shopify_payments",
    "payment_ref": "ch_3ABC123",
    "payment_currency": "GBP",
    "coupon_code": "",
    "coupon_total": "0",
    "coupon_total_exc_tax": "0"
  },
  "system_notes": "",
  "delivery_notes": "Please leave at the door",
  "customer_comments": "",
  "gift_note": "",
  "channel_specific": {
    "shipping_code": "shopify-Standard Shipping-4.99",
    "tags": ["VIP", "wholesale"],
    "note_attributes": [
      { "name": "gift_message", "value": "Happy Birthday!" }
    ]
  },
  "order_access_url": "https://myshop.myshopify.com/admin/orders/5678901234",
  "order_date": "2026-01-15T14:32:00.000000Z",
  "order_import_date": "2026-01-15T14:33:12.000000Z",
  "total_order_item_quantity": 2,
  "total_order_item_quantity_inc_kits": 4,
  "primary_reference_id": null,
  "order_lines": [
    {
      "id": "item-uuid-0001",
      "remote_id": "li_123456",
      "sku": "WIDGET-BLU-M",
      "channel_product_id": "cp-uuid-0001",
      "master_product_id": "mp-uuid-0001",
      "matched_sku": "WIDGET-BLU-M",
      "quantity": 1,
      "refunded_quantity": 0,
      "name": "Blue Widget (Medium)",
      "unit_price": "20.83",
      "unit_price_exc_tax": "16.66",
      "unit_discount": "0.00",
      "total_discount": "0.00",
      "unit_tax_rate": "20.02",
      "unit_tax_value": "4.17",
      "total_tax_value": "4.17",
      "total_price": "20.83",
      "is_tax_included": true,
      "options": null,
      "image_url": "https://cdn.example.com/widget-blue.jpg",
      "file_url": null,
      "notes": null
    },
    {
      "id": "item-uuid-0002",
      "remote_id": "li_123457",
      "sku": "KIT-STARTER",
      "channel_product_id": "cp-uuid-0002",
      "master_product_id": "mp-uuid-0002",
      "matched_sku": "KIT-STARTER",
      "quantity": 1,
      "refunded_quantity": 0,
      "name": "Starter Kit",
      "unit_price": "20.82",
      "unit_price_exc_tax": "16.66",
      "unit_discount": "0.00",
      "total_discount": "0.00",
      "unit_tax_rate": "19.93",
      "unit_tax_value": "4.16",
      "total_tax_value": "4.16",
      "total_price": "20.82",
      "is_tax_included": true,
      "options": null,
      "image_url": "https://cdn.example.com/kit-starter.jpg",
      "file_url": null,
      "notes": null,
      "kit": [
        { "quantity": 1, "sku": "WIDGET-RED-S", "name": "Red Widget (Small)" },
        { "quantity": 2, "sku": "WIDGET-GRN-S", "name": "Green Widget (Small)" }
      ]
    }
  ],
  "md5_hash": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6"
}

Order Field Reference

Field

Type

Description

webhook_id

string (UUID)

Unique ID for this webhook delivery

order_id

string (UUID)

Neuro order UUID

channel_id

string (UUID)

Neuro channel UUID

channel_alt_id

string / null

Alternative channel identifier

channel_name

string

Display name of the channel

channel_type

string

Channel provider type (shopify, amazonsp, woocommerce, magento, ebay, etsy, bigcommerce, opencart, prestashop, btobwave, visualsoft , etc.)

store_id

string (UUID)

Neuro store UUID

remote_id

string

Order ID on the channel platform. Prefixed with order_prefix if configured.

remote_status

string

Order status as reported by the channel

status

string

Neuro-normalised order status

customer

object

See Customer Object

shipping_method

string

Human-readable shipping service name (channel-dependent — see Section 18)

shipping_address

object

See Address Object

invoice_address

object

See Address Object

fulfillment

object / null

See Fulfilment Object. Null if unfulfilled.

return

object / null

See Return Object. Null if no return.

payment_method

string

Payment method name

send_via_webhook

boolean

Whether this order is flagged to send via webhook

payment_status

string

Payment status

payment_details

object

See Payment Details Object

system_notes

string

Internal system notes

delivery_notes

string

Customer delivery instructions

customer_comments

string

Customer comments on the order

gift_note

string

Gift message if applicable

channel_specific

object / null

Raw channel meta data. Structure varies by channel (see Section 15).

order_access_url

string

Direct link to the order on the channel admin panel (most channels)

ioss_number

string / null

IOSS number for EU shipments (Amazon SP, eBay, Shopify, VisualSoft)

order_date

datetime

When the order was placed on the channel

order_import_date

datetime

When Neuro imported the order

total_order_item_quantity

integer

Sum of all line item quantities

total_order_item_quantity_inc_kits

integer

Sum including expanded kit item quantities

primary_reference_id

string / null

Primary reference ID if set

order_lines

array

Array of Order Line Item Objects

md5_hash

string

Hash for change detection / deduplication

2.2 Other Order Events (Same Payload, Different Moment)

These events reuse the exact Order structure:

  • ‎`orders.updated` – order state changed (status, addresses, items, etc.)

    • Payload: Identical structure to orders.received. (The payload always sends the full current state of the order, not a diff. The webhook_id will be different from the original received webhook.)

  • ‎`orders.on_hold` – order placed on hold

    • Payload: Identical structure to orders.received.

  • ‎`orders.excluded` – order excluded (e.g. fraud, internal rules)

    • Payload: Identical structure to orders.received.

    Note: For orders.received, orders.route_to_webhook, and orders.excluded, fully refunded line items are excluded from order_lines.

  • ‎`orders.route_to_webhook` – order directed to a routing-specific endpoint

    • Payload: Identical structure to orders.received.

  • ‎`confirmation.orders.received` – confirmation that Neuro has processed the order, used for acknowledgement workflows.

    • Payload: Identical structure to orders.received.

For ‎`orders.received`, ‎`orders.route_to_webhook`, and ‎`orders.excluded`, fully refunded line items are omitted from ‎`order_lines`.

3. Fulfilments Created (fulfillments.created)

Fired when a new fulfilment is created for an order. Fulfilment events encapsulate shipment details plus a nested snapshot of the parent order.

3.1 Example: ‎`fulfillments.created` Payload

Triggered when a new fulfilment is created.

Payload: Fulfilment

{
  "id": "ff-uuid-0001",
  "order_id": "f7e6d5c4-1111-2222-3333-444444444444",
  "order_primary_reference_id": null,
  "order_remote_id": "5678901234",
  "order_remote_alt_id": "ALT-12345",
  "courier": {
    "id": "cc-uuid-0001",
    "name": "Royal Mail",
    "custom_name": "RM Tracked 24"
  },
  "shipping_method": "Royal Mail Tracked 24",
  "shipping_tracking_code": "JD012345678GB",
  "tracking_url": "https://www.royalmail.com/track-your-item#/tracking-results/JD012345678GB",
  "fulfillment_date": "2026-02-18 00:05:16",
  "sync_status": 2,
  "items": [
    { "sku": "WIDGET-BLU-M", "quantity": 1, "sales_channel_item_id": "5468632165489" }
  ],
  "order_items": [
    {
      "remote_id": "li_123456",
      "sku": "WIDGET-BLU-M",
      "quantity": 1
    }
  ],
  "order": {
    "order_id": "f7e6d5c4-1111-2222-3333-444444444444",
    "channel_id": "c1d2e3f4-aaaa-bbbb-cccc-dddddddddddd",
    "channel_alt_id": "ALT-12345",
    "channel_name": "My Shopify Store",
    "channel_type": "shopify",
    "store_id": "s1t2o3r4-eeee-ffff-0000-111111111111",
    "remote_id": "5678901234",
    "remote_status": "fulfilled",
    "status": "fulfilled",
    "customer": {
      "id": 12345,
      "customer_uuid": "cust-uuid-0001",
      "company_id": 1,
      "name": "Jane Smith",
      "email": "jane.smith@example.com",
      "created_at": "2025-06-10T08:00:00.000000Z",
      "updated_at": "2026-01-15T14:32:00.000000Z"
    },
    "shipping_method": "Standard Shipping",
    "shipping_address": {
      "id": "addr-uuid-ship-001",
      "name": "Jane Smith",
      "company_name": "Acme Ltd",
      "address_line_one": "123 High Street",
      "address_line_two": "Floor 2",
      "address_line_three": "",
      "long_address": "123 High Street, Floor 2",
      "county": "Greater London",
      "city": "London",
      "country_iso_code": "GB",
      "zip": "EC1A 1BB",
      "phone": "+441234567890"
    },
    "invoice_address": {
      "id": "addr-uuid-inv-001",
      "name": "Jane Smith",
      "company_name": "Acme Ltd",
      "address_line_one": "123 High Street",
      "address_line_two": "",
      "address_line_three": "",
      "long_address": "123 High Street",
      "county": "Greater London",
      "city": "London",
      "country_iso_code": "GB",
      "zip": "EC1A 1BB",
      "phone": "+441234567890"
    },
    "return": null,
    "payment_method": "shopify_payments",
    "send_via_webhook": true,
    "payment_status": "paid",
    "payment_details": {
      "vat_id": "",
      "vat_type": "",
      "tax_total": "8.33",
      "shipping_total": "4.99",
      "discount_total": "0.00",
      "discount_total_exc_tax": "0.00",
      "order_subtotal": "41.65",
      "order_subtotal_exc_tax": "33.32",
      "order_total": "46.64",
      "payment_method": "shopify_payments",
      "payment_ref": "ch_3ABC123",
      "payment_currency": "GBP",
      "coupon_code": "",
      "coupon_total": "0.00",
      "coupon_total_exc_tax": "0.00"
    },
    "system_notes": "",
    "delivery_notes": "Please leave at the door",
    "customer_comments": "",
    "gift_note": "",
    "channel_specific": {
      "shipping_code": "shopify-Standard Shipping-4.99",
      "tags": ["VIP"],
      "is_pos_order": false,
      "order_number": 458754,
      "total_weight": 421,
      "shipping_code": "Free Express Tracked: 1-2 Days"
    },
    "order_access_url": "https://myshop.myshopify.com/admin/orders/5678901234",
    "order_date": "2026-01-15T14:32:00.000000Z",
    "order_import_date": "2026-01-15T14:33:12.000000Z",
    "total_order_item_quantity": 1,
    "total_order_item_quantity_inc_kits": 1,
    "primary_reference_id": null,
    "order_lines": [
      {
        "id": "item-uuid-0001",
        "remote_id": "li_123456",
        "sku": "WIDGET-BLU-M",
        "channel_product_id": "cp-uuid-0001",
        "master_product_id": "mp-uuid-0001",
        "matched_sku": "WIDGET-BLU-M",
        "quantity": 1,
        "refunded_quantity": 0,
        "name": "Blue Widget (Medium)",
        "unit_price": "20.83",
        "unit_price_exc_tax": "16.66",
        "unit_discount": "0.00",
        "total_discount": "0.00",
        "unit_tax_rate": "20.02",
        "unit_tax_value": "4.17",
        "total_tax_value": "4.17",
        "total_price": "20.83",
        "is_tax_included": true,
        "options": [
                {
                  "option_name": "__kaching_bundles",
                  "option_value": {
                    "deal": "7tD45m",
                    "main": true,
                    "market": 5455,
                    "id": "ANtp"
                  }
                }
              ],
        "image_url": "https://cdn.example.com/widget-blue.jpg",
        "file_url": null,
        "notes": null
      }
    ],
    "md5_hash": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6"
  },
  "plugin": {
    "id": "plg-uuid-0001",
    "name": "Whistl 3PL"
  },
  "channel": {
    "id": "c1d2e3f4-aaaa-bbbb-cccc-dddddddddddd",
    "name": "My Shopify Store"
  },
  "fulfillment_plugin": {
    "id": "plg-uuid-0001",
    "name": "Whistl 3PL"
  }
}

Fulfilment Field Reference

Field

Type

Description

id

string (UUID)

Neuro fulfilment UUID

order_id

string (UUID)

Neuro order UUID

order_primary_reference_id

string / null

Order's primary reference ID

order_remote_id

string

Order ID on the channel

order_remote_alt_id

string / null

Alternative order ID on the channel

courier

object / null

See Courier Object

shipping_method

string

Shipping method used for fulfilment

shipping_tracking_code

string

Tracking number

tracking_url

string

Tracking URL

fulfillment_date

datetime

When the fulfilment was created

sync_status

integer

Sync status code

items

array

Array of { sku, quantity } objects

order_items

array

Array of Order Fulfilment Item Objects

order

object

Full Order Object (the parent order)

plugin

object / null

{ id, name } — the order's current plugin

channel

object

{ id, name } — the order's channel

fulfillment_plugin

object / null

{ id, name } — the plugin that created this fulfilment (null if not plugin-created)

‎Fulfilments Updated

Fired when an existing fulfilment is updated (tracking code changed, status updated, etc.). `fulfillments.updated` uses the same structure; only values change (e.g. tracking code).

Payload: Identical structure to fulfillments.created.

4. Product & Stock Webhooks

Two layers of product data are exposed: master products, channel products, and plugin products.

4.1 Master Products – ‎`products.updated`

Triggered when a main product changes (stock, title, etc.).

4.2 Products Created (products.created)

Coming Soon — This event will be available in an upcoming release.

Fired when a new main (master) product is created in Neuro.

Payload: Identical structure to products.updated.

4.3 Products Updated (products.updated)

Fired when a main (master) product is updated (stock quantity change, title change, etc.).

Payload: Product

{
  "id": "mp-uuid-1001",
  "sku": "TSHIRT-BLK-L",
  "title": "Classic T-Shirt Black (Large)",
  "product_nominal_code": "4000",
  "tax_type": "standard",
  "quantity": 150,
  "price": "24.99",
  "plugin_quantity": 150,
  "plugin_quantity_synced_at": "2026-01-15T08:00:00.000000Z",
  "plugin_sync_status": 2,
  "plugin_synced_at": "2026-01-15T08:00:00.000000Z",
  "api_quantity": 0,
  "type": "product",
  "auto_sync_stock": true,
  "product_kit_items": [],
  "channels": [
    {
      "id": "cp-uuid-1001",
      "type": "product",
      "store_id": "store-uuid-001",
      "store_name": "My Store",
      "channel_id": "ch-uuid-shopify",
      "channel_name": "My Shopify Store",
      "remote_id": "7654321098765",
      "remote_sku": "TSHIRT-BLK-L",
      "sku": "TSHIRT-BLK-L",
      "matched_sku": "TSHIRT-BLK-L",
      "title": "Classic T-Shirt Black (Large)",
      "description": "A classic black t-shirt in size large.",
      "image_url": "https://cdn.shopify.com/s/files/tshirt-black.jpg",
      "pending_quantity": 148,
      "synced_quantity": 148,
      "quantity": 150,
      "price": "24.99",
      "currency": "GBP",
      "product_nominal_code": "4000",
      "dimensions": {
        "weight": 0.35,
        "weight_unit": "kg",
        "length": 30.0,
        "length_unit": "cm",
        "width": 25.0,
        "width_unit": "cm",
        "height": 2.0,
        "height_unit": "cm"
      },
      "export": {
        "hs_code": "6109.10.00",
        "country_of_origin": "GB",
        "customs_description": "Cotton T-Shirt"
      },
      "barcodes": [
        {
          "id": 1,
          "barcode": "5060000000001"
        }
      ],
      "use_low_stock_buffer": false,
      "low_stock_buffer": 0,
      "channel_product_url": "https://myshop.myshopify.com/admin/products/7654321098765"
    }
  ],
  "plugin_products": [
    {
      "id": "pp-uuid-0001",
      "store_id": "store-uuid-001",
      "store_name": "My Store",
      "remote_id": "IP-98765",
      "sku": "TSHIRT-BLK-L",
      "product_id": 101,
      "quantity": 150,
      "plugin_sync_status": 2,
      "plugin_synced_at": "2026-01-15T08:00:00.000000Z",
      "title": "Classic T-Shirt Black (Large)",
      "image_url": "",
      "created_at": "2025-06-01T10:00:00.000000Z",
      "updated_at": "2026-01-15T08:00:00.000000Z",
      "plugin": {
        "id": "a0c745fd-d344-48ab-b520-54985314654",
        "name": "my amazon plugin",
        "provider_type": "amazon_mcf",
        "push_orders": true,
        "use_max_order_limit": false,
        "max_order_limit": 0,
        "max_order_sent_days": 0,
        "max_order_status": 0,
        "is_active": true,
        "is_connected": true,
        "allow_order_split": false,
        "is_default": false,
        "push_order_cancellation_data": false,
        "last_push_order_cancellation_data_at": null,
        "refetch_fulfillment": false,
        "channels": [
          {
            "id": "f38f9610-8d5b-1232-a19f-6f610289af4c",
            "name": "My Shopify Store"
          }
        ]
      }
    }
  ]
}

Product Field Reference

Field

Type

Description

id

string (UUID)

Neuro product UUID

sku

string

Product SKU

title

string

Product title

product_nominal_code

string

Nominal / accounting code for customers using our Billing tool

tax_type

string

Tax type (e.g. standard, reduced, zero)

quantity

integer

Current stock quantity

price

string (decimal)

Product price

plugin_quantity

integer

Quantity as reported by plugin

plugin_quantity_synced_at

datetime / null

When plugin quantity was last synced

plugin_sync_status

integer

Plugin sync status code

plugin_synced_at

datetime / null

When the product was last synced with plugin

api_quantity

integer

Quantity set via API

type

string

product or kit

auto_sync_stock

boolean

Whether stock auto-syncs to channels

product_kit_items

array

Array of Kit Item Objects. Empty if type is product.

channels

array

Array of Channel Product Objects. All channel products linked to this product.

plugin_products

array

Array of Plugin Product Objects. All plugin products linked to this product.

Product with Kit Items Example

When type is kit:

{
  "id": "mp-uuid-2001",
  "sku": "KIT-STARTER",
  "title": "Starter Kit",
  "product_nominal_code": "",
  "tax_type": "standard",
  "quantity": 50,
  "price": "39.99",
  "plugin_quantity": 0,
  "plugin_quantity_synced_at": null,
  "plugin_sync_status": 0,
  "plugin_synced_at": null,
  "api_quantity": 0,
  "type": "kit",
  "auto_sync_stock": true,
  "product_kit_items": [
    {
      "id": "mp-uuid-3001",
      "sku": "WIDGET-RED-S",
      "quantity": 1,
      "name": "Red Widget (Small)"
    },
    {
      "id": "mp-uuid-3002",
      "sku": "WIDGET-GRN-S",
      "quantity": 2,
      "name": "Green Widget (Small)"
    }
  ],
  "channels": [],
  "plugin_products": []
}

When ‎`type` is ‎`kit`, the ‎`product_kit_items` array describes the component SKUs and quantities instead of direct stock.

5. Channels Products Created (channels.products.created)

Coming Soon — This event will be available in an upcoming release.

Activated when a new channel product is created (e.g. imported from a sales channel into Neuro).

Payload: Identical structure to channels.products.updated.

5.1 Channels Products Updated (channels.products.updated)

Represents how a product appears on a specific sales channel. Activated when a channel product is updated (stock sync, quantity change, price update, etc.).

Payload: Channel Product

{
  "id": "cp-uuid-1001",
  "type": "product",
  "store_id": "store-uuid-001",
  "store_name": "My Store",
  "channel_id": "ch-uuid-shopify",
  "channel_name": "My Shopify Store",
  "remote_id": "7654321098765",
  "remote_sku": "TSHIRT-BLK-L",
  "sku": "TSHIRT-BLK-L",
  "matched_sku": "TSHIRT-BLK-L",
  "title": "Classic T-Shirt Black (Large)",
  "description": "A classic black t-shirt in size large.",
  "image_url": "https://cdn.shopify.com/s/files/tshirt-black.jpg",
  "pending_quantity": 148,
  "synced_quantity": 148,
  "quantity": 150,
  "price": "24.99",
  "currency": "GBP",
  "product_nominal_code": "4000",
  "dimensions": {
    "weight": 0.35,
    "weight_unit": "kg",
    "length": 30.0,
    "length_unit": "cm",
    "width": 25.0,
    "width_unit": "cm",
    "height": 2.0,
    "height_unit": "cm"
  },
  "export": {
    "hs_code": "6109.10.00",
    "country_of_origin": "GB",
    "customs_description": "Cotton T-Shirt"
  },
  "barcodes": [
    { "id": 1, "barcode": "5060000000001" }
  ],
  "meta_fields": null,
  "use_low_stock_buffer": false,
  "low_stock_buffer": 0,
  "channel_product_url": "https://myshop.myshopify.com/admin/products/7654321098765"
}

Channel Product Field Reference

Field

Type

Description

id

string (UUID)

Neuro channel product UUID

type

string

product or variant

store_id

string (UUID)

Neuro store UUID

store_name

string

Store display name

channel_id

string (UUID)

Neuro channel UUID (null if channel deleted)

channel_name

string

Channel display name (null if channel deleted)

remote_id

string

Product ID on the channel platform

remote_sku

string

SKU as stored on the channel

sku

string

SKU in Neuro

matched_sku

string

Matched SKU linking to main product

title

string

Product title

description

string

Product description

image_url

string

Product image URL

pending_quantity

integer

Quantity pending sync to channel

synced_quantity

integer

Last quantity successfully synced to channel

quantity

integer

Current stock quantity

price

string (decimal)

Product price

currency

string

Three-letter currency code

product_nominal_code

string

Nominal / accounting code

dimensions

object

See Dimensions Object

export

object

See Export (Customs) Object

barcodes

array

Array of { id, barcode } objects

meta_fields

object / null

Channel-specific product metadata

use_low_stock_buffer

boolean

Whether low stock buffer is active

low_stock_buffer

integer

Low stock buffer threshold

channel_product_url

string

Direct link to the product on the channel admin

6. Plugin Products

Represents product state on a plugin (e.g. Inventory Planner, 3PL, etc.).

6.1 Plugins Products Created (plugins.products.created)

Coming Soon — This event will be available in an upcoming release.

Fired when a new plugin product is created in Neuro.

Payload: Identical structure to plugins.products.updated.

6.2 Plugins Products Updated (plugins.products.updated)

Fired when a plugin product is updated.

Payload: Plugin Product

{
  "id": "pp-uuid-0001",
  "store_id": "store-uuid-001",
  "store_name": "My Store",
  "remote_id": "IP-98765",
  "sku": "TSHIRT-BLK-L",
  "product_id": 101,
  "quantity": 150,
  "plugin_sync_status": 2,
  "plugin_synced_at": "2026-01-15T08:00:00.000000Z",
  "title": "Classic T-Shirt Black (Large)",
  "image_url": "",
  "created_at": "2025-06-01T10:00:00.000000Z",
  "updated_at": "2026-01-15T08:00:00.000000Z",
  "product": {
    "id": "mp-uuid-1001",
    "sku": "TSHIRT-BLK-L",
    "title": "Classic T-Shirt Black (Large)",
    "product_nominal_code": "4000",
    "tax_type": "standard",
    "quantity": 150,
    "price": "24.99",
    "plugin_quantity": 150,
    "plugin_quantity_synced_at": "2026-01-15T08:00:00.000000Z",
    "plugin_sync_status": 2,
    "plugin_synced_at": "2026-01-15T08:00:00.000000Z",
    "api_quantity": 0,
    "type": "product",
    "auto_sync_stock": true,
    "product_kit_items": [],
    "channels": [],
    "plugin_products": []
  },
  "plugin": {
    "id": "plg-uuid-0001",
    "name": "Inventory Planner",
    "provider_type": "inventory_planner",
    "push_orders": true,
    "use_max_order_limit": false,
    "max_order_limit": 0,
    "max_order_sent_days": 30,
    "max_order_status": 0,
    "is_active": true,
    "is_connected": true,
    "push_order_cancellation_data": false,
    "last_push_order_cancellation_data_at": null
  }
}

Plugin Product Field Reference

Field

Type

Description

id

string (UUID)

Neuro plugin product UUID

store_id

string (UUID)

Neuro store UUID

store_name

string

Store display name

remote_id

string

Product ID on the plugin platform

sku

string

Product SKU

product_id

integer

Internal product ID (FK to main product)

quantity

integer

Stock quantity on the plugin

plugin_sync_status

integer

Sync status code

plugin_synced_at

datetime / null

When last synced with plugin

title

string

Product title

image_url

string

Product image URL

created_at

datetime

Record creation timestamp

updated_at

datetime

Record last updated timestamp

product

object

The linked main Product Object (when loaded)

plugin

object

The Plugin Object this product belongs to (when loaded)

7. Invoices Received (invoices.received)

Invoices are emitted when financial records are created or updated. Activated when a new invoice is received / created.

7.1 Example: ‎`invoices.received`

Payload: Invoice

{
  "id": "inv-uuid-0001",
  "invoice_number": "INV-2026-0042",
  "order_id": 500,
  "currency": "GBP",
  "store_id": "store-uuid-001",
  "channel_id": "ch-uuid-shopify",
  "shipping_total": "4.99",
  "shipping_tax_type": "standard",
  "shipping_account_code": "4200",
  "notes": "Monthly recurring order",
  "total": "46.64",
  "invoice_date": "2026-01-15T00:00:00.000000Z",
  "due_date": "2026-02-14T00:00:00.000000Z",
  "notify_contact": true,
  "meta": null,
  "sync_status": 0,
  "status": "pending",
  "lines": [
    {
      "id": "invl-uuid-0001",
      "product_nominal_code": "4000",
      "product": {
        "id": "mp-uuid-1001",
        "sku": "WIDGET-BLU-M",
        "title": "Blue Widget (Medium)",
        "product_nominal_code": "4000",
        "tax_type": "standard",
        "quantity": 150,
        "price": "20.83",
        "plugin_quantity": 150,
        "plugin_quantity_synced_at": "2026-01-15T08:00:00.000000Z",
        "plugin_sync_status": 2,
        "plugin_synced_at": "2026-01-15T08:00:00.000000Z",
        "api_quantity": 0,
        "type": "product",
        "auto_sync_stock": true,
        "product_kit_items": [],
        "channels": [],
        "plugin_products": []
      },
      "sku": "WIDGET-BLU-M",
      "description": "Blue Widget (Medium) x1",
      "tax_type": "standard",
      "quantity": 1,
      "unit_price": "16.66",
      "price": "20.83",
      "discount_total": "0.00",
      "tax_total": "4.17"
    }
  ],
  "customer": {
    "id": 12345,
    "customer_uuid": "cust-uuid-0001",
    "company_id": 1,
    "name": "Jane Smith",
    "email": "jane.smith@example.com",
    "created_at": "2025-06-10T08:00:00.000000Z",
    "updated_at": "2026-01-15T14:32:00.000000Z"
  },
  "invoice_address": {
    "id": "addr-uuid-inv-001",
    "name": "Jane Smith",
    "company_name": "Acme Ltd",
    "address_line_one": "123 High Street",
    "address_line_two": "",
    "address_line_three": "",
    "long_address": "123 High Street",
    "county": "Greater London",
    "city": "London",
    "country_iso_code": "GB",
    "zip": "EC1A 1BB",
    "phone": "+441234567890"
  }
}

Invoice Field Reference

Field

Type

Description

id

string (UUID)

Neuro invoice UUID

invoice_number

string

Invoice number

order_id

integer

Internal order ID

currency

string

Three-letter currency code

store_id

string (UUID)

Neuro store UUID

channel_id

string (UUID)

Neuro channel UUID

shipping_total

string (decimal)

Shipping total

shipping_tax_type

string

Tax type for shipping

shipping_account_code

string

Account code for shipping

notes

string

Invoice notes

total

string (decimal)

Invoice total

invoice_date

datetime

Invoice date

due_date

datetime

Payment due date

notify_contact

boolean

Whether to notify the contact

meta

object / null

Additional metadata

sync_status

integer

Sync status code

status

string

Invoice status

lines

array

Array of Invoice Line Item Objects

customer

object

See Customer Object

invoice_address

object

See Address Object

7.2 Invoices Updated (invoices.updated)

Fired when an existing invoice is updated.

Payload: Identical structure to invoices.received.

Whats Next

In the next article, we’ll unpack the exact data structures that sit inside your webhook deliveries, from channel-specific metadata to the shared customer, address, payment, and line-item objects that make up each order. To continue, open Order Payload Reference: Channel-Specific Fields and Shared Object Schemas and follow along from the start of the page.

All data in this document is fictitious. No real customer, order, address, or product data is used.