Bird
Raised Fist0
Rest APIprogramming~30 mins

Webhook payload design in Rest API - Mini Project: Build & Apply

Choose your learning style10 modes available
Webhook Payload Design
📖 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

  1. Step 1: Understand webhook payload role

    A webhook payload is a message sent automatically when an event happens, sharing event details.
  2. 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.
  3. Final Answer:

    To send event details from one app to another automatically -> Option C
  4. 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

  1. 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.
  2. Step 2: Check each option's syntax

    { "event": "user_signup", "timestamp": "2024-06-01T12:00:00Z" } uses correct JSON object syntax. [ "event": "user_signup", "timestamp": "2024-06-01T12:00:00Z" ] uses square brackets which denote arrays, not key-value pairs. { event = "user_signup", timestamp = "2024-06-01T12:00:00Z" } uses equals sign instead of colon. "event": "user_signup", "timestamp": "2024-06-01T12:00:00Z" is missing braces.
  3. Final Answer:

    { "event": "user_signup", "timestamp": "2024-06-01T12:00:00Z" } -> Option B
  4. Quick Check:

    Valid JSON object = { "event": "user_signup", "timestamp": "2024-06-01T12:00:00Z" } [OK]
Hint: JSON objects use braces and colons, not brackets or equals [OK]
Common Mistakes:
  • Using square brackets instead of braces for objects
  • Using equals sign instead of colon
  • Omitting braces around JSON
3. Given this webhook payload JSON:
{"event": "order_created", "timestamp": "2024-06-01T15:30:00Z", "data": {"order_id": 123, "amount": 49.99}}

What value will the receiving app find for data.amount?
medium
A. 49.99
B. order_created
C. "amount"
D. 123

Solution

  1. Step 1: Locate the data.amount field in JSON

    Inside the "data" object, the key "amount" has the value 49.99 (a number).
  2. Step 2: Match the value to options

    49.99 matches the numeric value 49.99. Other options are either keys or unrelated values.
  3. Final Answer:

    49.99 -> Option A
  4. Quick Check:

    data.amount = 49.99 [OK]
Hint: Look inside nested 'data' object for 'amount' key [OK]
Common Mistakes:
  • Confusing order_id with amount
  • Selecting string key instead of value
  • Choosing event name instead of data field
4. You receive this webhook payload:
{"event": "payment_failed", "timestamp": "2024-06-01T16:00:00Z", "data": {"payment_id": 789}}

What is wrong with this payload?
medium
A. Payment ID should be a string, not a number
B. Timestamp format is incorrect
C. Event name should be inside data object
D. Missing closing brace for the JSON object

Solution

  1. Step 1: Check JSON completeness

    The payload ends without a closing brace '}' for the outermost JSON object, making it invalid JSON.
  2. 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.
  3. Final Answer:

    Missing closing brace for the JSON object -> Option D
  4. 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

  1. 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.
  2. 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.
  3. Final Answer:

    { "event": "user_deleted", "timestamp": "2024-06-01T17:00:00Z", "data": { "user_id": 456, "reason": "requested by user" } } -> Option A
  4. 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 unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard