📖 Scenario: You are building a simple webhook system for an online store. When a new order is placed, the system sends a notification with order details to a partner service. You need to design the webhook payload that contains the order information.
🎯 Goal: Create a webhook payload as a JSON object that includes order details such as order ID, customer name, list of items with quantity and price, and total amount.
📋 What You'll Learn
Create a dictionary called order with exact keys and values for order details
Add a variable called currency with the value "USD"
Use a dictionary comprehension to create a new dictionary items_summary with item names as keys and total price (quantity * price) as values
Print the final webhook payload as a JSON string
💡 Why This Matters
🌍 Real World
Webhook payloads are used to send real-time notifications between web services, such as notifying a shipping partner when a new order is placed.
💼 Career
Understanding how to design and format webhook payloads is important for backend developers and API engineers working with integrations and event-driven systems.
Progress0 / 4 steps
1
Create the order data structure
Create a dictionary called order with these exact entries: "order_id": 12345, "customer": "John Doe", and "items" which is a list of dictionaries with these exact items: {"name": "T-shirt", "quantity": 2, "price": 15.0} and {"name": "Jeans", "quantity": 1, "price": 40.0}.
Rest API
Hint
Use a dictionary with keys order_id, customer, and items. The items key holds a list of dictionaries for each product.
2
Add currency configuration
Create a variable called currency and set it to the string "USD".
Rest API
Hint
Just create a simple variable named currency and assign the string "USD" to it.
3
Create items summary with dictionary comprehension
Use a dictionary comprehension to create a new dictionary called items_summary where each key is the item name from order["items"] and the value is the total price calculated as quantity * price.
Rest API
Hint
Use a dictionary comprehension with for item in order["items"]. The key is item["name"] and the value is item["quantity"] * item["price"].
4
Print the final webhook payload
Print the final webhook payload as a JSON string. Create a dictionary called webhook_payload with keys: order_id, customer, currency, and items_summary. Then print it using print() and json.dumps() with indentation of 2 spaces.
Rest API
Hint
Import the json module. Create webhook_payload dictionary with the required keys and values. Use print(json.dumps(webhook_payload, indent=2)) to display the JSON string nicely.
Practice
(1/5)
1. What is the main purpose of a webhook payload in a REST API?
easy
A. To store user login credentials securely
B. To create a user interface for the API
C. To send event details from one app to another automatically
D. To encrypt data between client and server
Solution
Step 1: Understand webhook payload role
A webhook payload is a message sent automatically when an event happens, sharing event details.
Step 2: Compare options with webhook purpose
Only To send event details from one app to another automatically describes sending event details automatically, which matches webhook payload use.
Final Answer:
To send event details from one app to another automatically -> Option C
Quick Check:
Webhook payload = event details sent automatically [OK]
Hint: Webhook payloads always send event info automatically [OK]
Common Mistakes:
Confusing payload with user authentication
Thinking payload creates UI
Assuming payload encrypts data
2. Which of the following is the correct JSON structure for a webhook payload that includes event name and timestamp?
easy
A. [ "event": "user_signup", "timestamp": "2024-06-01T12:00:00Z" ]
B. { "event": "user_signup", "timestamp": "2024-06-01T12:00:00Z" }
C. { event = "user_signup", timestamp = "2024-06-01T12:00:00Z" }
D. "event": "user_signup", "timestamp": "2024-06-01T12:00:00Z"
Solution
Step 1: Identify valid JSON syntax
JSON objects use curly braces {}, keys and values separated by colon :, keys in double quotes, and comma between pairs.
The payload ends without a closing brace '}' for the outermost JSON object, making it invalid JSON.
Step 2: Verify other parts
Timestamp format is ISO 8601 and correct. Event name is correctly outside data. Payment ID can be number or string depending on design.
Final Answer:
Missing closing brace for the JSON object -> Option D
Quick Check:
JSON must have matching braces [OK]
Hint: Always check for matching braces in JSON payloads [OK]
Common Mistakes:
Ignoring missing braces
Assuming timestamp format is wrong
Thinking event must be inside data
5. You want to design a webhook payload for a "user_deleted" event that includes the user ID and deletion reason. Which JSON payload design is best for clarity and easy parsing?
hard
A. { "event": "user_deleted", "timestamp": "2024-06-01T17:00:00Z", "data": { "user_id": 456, "reason": "requested by user" } }
B. { "user_deleted": true, "user": 456, "reason": "requested by user" }
C. { "event": "user_deleted", "user_id": 456, "reason": "requested by user" }
D. { "event": "user_deleted", "timestamp": "2024-06-01T17:00:00Z", "user": { "id": 456, "reason": "requested by user" } }
Solution
Step 1: Check for standard webhook fields
{ "event": "user_deleted", "timestamp": "2024-06-01T17:00:00Z", "data": { "user_id": 456, "reason": "requested by user" } } includes event name, timestamp, and a nested data object holding user_id and reason, which is clear and standard.
Step 2: Compare other options for clarity and parsing
{ "user_deleted": true, "user": 456, "reason": "requested by user" } lacks event and timestamp keys properly named. { "event": "user_deleted", "user_id": 456, "reason": "requested by user" } mixes data fields at root level, less organized. { "event": "user_deleted", "timestamp": "2024-06-01T17:00:00Z", "user": { "id": 456, "reason": "requested by user" } } nests reason inside user object, which is less intuitive.
Final Answer:
{ "event": "user_deleted", "timestamp": "2024-06-01T17:00:00Z", "data": { "user_id": 456, "reason": "requested by user" } } -> Option A
Quick Check:
Standard event + timestamp + data object = { "event": "user_deleted", "timestamp": "2024-06-01T17:00:00Z", "data": { "user_id": 456, "reason": "requested by user" } } [OK]
Hint: Use event, timestamp, and data object for clear payloads [OK]
Common Mistakes:
Omitting timestamp
Mixing data fields at root level
Nesting unrelated fields inside user
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.