After checkout is completed and an order is placed, you must push status updates to Google using the order webhook.
- Endpoint: https://shoppingdataintegration.googleapis.com/v1/webhooks/partners/[PARTNER_ID]/events/order?key=[PROD_API_KEY]
- Google will share your PARTNER_ID and PROD_API_KEY with you.
- Payload: You must send the full order entity, for all updates.
1. Auth and request signing
- Compute SHA-256 digest of the raw request body and set
Content-Digestheader. - Select a signing key from
signing_keysin your UCP profile. - Build signature base per RFC
9421.
- See the spec for signed components
- Set
UCP-Agent,Signature-Input, andSignatureheaders.UCP-Agentis a link to your UCP profile in the formatprofile="https://merchant.example.com/.well-known/ucp".Signature-Inputis a dictionary structured field describing the components contained within the signature, as well as thekeyidused to sign, which must match thekidof your selected signing key fromsigning_keysin your UCP profile.Signatureheader contains your signature base which is signed using your private key and then base64 encoded.
See the signing instructions on ucp.dev for more information.
2. Mandatory order update events
The following order event updates are required for the integration.
2.1. Order created event
- Trigger: Immediately after the order is confirmed (
status: processing).
{
"ucp": {
"version": "2026-01-23",
"capabilities": {
"dev.ucp.shopping.order": [{"version": "2026-01-23"}]
}
},
"id": "order_01",
"checkout_id": "checkout_01",
"created_time": "2026-03-23T19:00:00Z",
// Full line items must be included
"line_items": [
{
"id": "line_1",
"item":
{
"id": "product_123",
"title": "Running Shoes",
"price": 10000
},
"quantity": { "total": 1, "fulfilled": 0 },
"totals": [
{"type": "subtotal", "amount": 10000},
{"type": "total", "amount": 10000}
],
"status": "processing"
}
],
"totals": [
{"type": "subtotal", "amount": 10000},
{"type": "total", "amount": 10000}
],
"fulfillment": {
"expectations": [
{
"id": "exp_1",
"line_items": [{ "id": "line_1", "quantity": 1 }],
"method_type": "shipping",
"destination": {
"street_address": "123 Main St",
"address_locality": "Austin",
"address_region": "TX",
"address_country": "US",
"postal_code": "78701"
},
"description": "Arrives in 2-3 business days",
"fulfillable_on": "now"
}
]
},
"permalink_url": "https://merchant.example.com/orders/789"
}
2.2. Fulfillment events
These events are sent as part of the fulfillment.events array.
shipped: When items in the order have been shipped. Include tracking information if available.delivered: When items in the order have been delivered.
Example (shipped and delivered): This example shows an order update
after the item has been shipped and then delivered.
{
"id": "order_01",
"checkout_id": "checkout_01",
"created_time": "2026-03-23T19:00:00Z",
"line_items": [
{
"id": "line_1",
"item":
{
"id": "product_123",
"title": "Running Shoes",
"price": 10000
},
"quantity": { "total": 1, "fulfilled": 1 },
"totals": [
{"type": "subtotal", "amount": 10000},
{"type": "total", "amount": 10000}
],
"status": "fulfilled"
}
],
"totals": [
{"type": "subtotal", "amount": 10000},
{"type": "total", "amount": 10000}
],
// Updated fulfillment details
"fulfillment": {
"events": [
{
"id": "fulfill_evt_1",
"occurred_at": "2026-02-08T10:30:00Z",
"type": "shipped",
"line_items": [{ "id": "line_1", "quantity": 1 }],
"tracking_number": "123456789",
"tracking_url": "https://fedex.com/track/123456789",
"description": "Shipping departed from warehouse"
},
{
"id": "fulfill_evt_2",
"occurred_at": "2026-02-10T14:00:00Z",
"type": "delivered",
"line_items": [{ "id": "line_1", "quantity": 1 }],
"tracking_number": "123456789",
"tracking_url": "https://fedex.com/track/123456789",
"description": "Package delivered"
}
],
"expectations": {"..."}
},
"permalink_url": "https://merchant.example.com/orders/123"
}
2.3. Adjustment events
Any events involving money movement should be sent as part of the adjustments
array.
cancellation: When an entire order or specific items within an order are cancelled.return: When items in the order are returned by the customer.refund: When a refund is issued for an order or specific items.
Example (cancellation & refund): This example shows an order where the
item was cancelled and refunded shortly after the order was placed.
{
"id": "order_02",
"checkout_id": "checkout_02",
"created_time": "2026-03-23T19:00:00Z",
"line_items": [
{
"id": "line_2",
"item": {
"id": "product_456",
"title": "Smart Watch",
"price": 29900
},
"quantity": { "total": 1, "fulfilled": 0 },
"totals": [
{"type": "subtotal", "amount": 29900},
{"type": "tax", "amount": 2400},
{"type": "total", "amount": 32300}
],
"status": "processing"
}
],
"totals": [
{"type": "subtotal", "amount": 29900},
{"type": "tax", "amount": 2400},
{"type": "total", "amount": 32300}
],
"adjustments": [
{
"id": "adj_cancel_1",
"type": "cancellation",
"description": "Customer changed mind",
"line_items": [{ "id": "line_2", "quantity": 1 }],
"occurred_at": "2026-02-09T11:00:00Z",
"status": "completed"
},
{
"id": "adj_refund_1",
"type": "refund",
"reason": "Refund for cancelled item",
"line_items": [{ "id": "line_2", "quantity": 1 }],
"amounts": [
{"type": "subtotal", "amount": 29900},
{"type": "tax", "amount": 2400},
{"type": "total", "amount": 32300}
],
"occurred_at": "2026-02-09T11:05:00Z",
"status": "completed"
}
],
"permalink_url": "https://merchant.example.com/orders/12345"
}
Example (return & refund): This example shows an order where the item
was shipped, delivered, and then returned and refunded.
{
"id": "order_03",
"checkout_id": "checkout_03",
"created_time": "2026-03-23T19:00:00Z",
"line_items": [
{
"id": "line_3",
"item": {
"id": "product_789",
"title": "Wireless Earbuds",
"price": 14900
},
"quantity": { "total": 1, "fulfilled": 1 },
"totals": [
{"type": "subtotal", "amount": 14900},
{"type": "tax", "amount": 1200},
{"type": "total", "amount": 16100}
],
"status": "fulfilled"
}
],
"totals": [
{"type": "subtotal", "amount": 14900},
{"type": "tax", "amount": 1200},
{"type": "total", "amount": 16100}
],
"fulfillment": {
"events": [
{
"id": "fulfill_evt_1",
"occurred_at": "2026-02-05T09:00:00Z",
"type": "shipped",
"line_items": [{ "id": "line_3", "quantity": 1 }],
"tracking_number": "987654321",
"tracking_url": "https://fedex.com/track/987654321",
"description": "Item shipped"
},
{
"id": "fulfill_evt_2",
"occurred_at": "2026-02-07T16:00:00Z",
"type": "delivered",
"line_items": [{ "id": "line_3", "quantity": 1 }],
"tracking_number": "987654321",
"tracking_url": "https://fedex.com/track/987654321",
"description": "Item delivered"
}
],
"expectations": {"..."}
},
"adjustments": [
{
"id": "adj_return_1",
"type": "return",
"reason": "Item not compatible",
"line_items": [{ "id": "line_3", "quantity": 1 }],
"occurred_at": "2026-02-09T09:00:00Z",
"status": "completed",
"return_id": "ret_abc_123",
"tracking_number": "RMAXYZ123",
"tracking_url": "https://carrier.example.com/track/RMAXYZ123"
},
{
"id": "adj_refund_2",
"type": "refund",
"reason": "Refund for returned item",
"line_items": [{ "id": "line_3", "quantity": 1 }],
"amounts": [
{"type": "subtotal", "amount": 14900},
{"type": "tax", "amount": 1200},
{"type": "total", "amount": 16100}
],
"occurred_at": "2026-02-10T10:00:00Z",
"status": "completed",
}
],
"permalink_url": "https://merchant.example.com/orders/67890"
}
3. Recommended order update events
To provide the best user experience, we also recommend sending updates for the following events:
Adjustment Events:
dispute: When a customer disputes a charge.
Fulfillment Events:
canceled: When a fulfillment is canceled (sent within thefulfillment.eventsarray).