This guide provides instructions for managing webhook subscriptions to item-related events in Wallapop.
- The webhook endpoint must accept POST requests.
- It must return a
2xxHTTP status code to confirm successful receipt of notifications.
To ensure the integrity and authenticity of the notifications, each request includes two headers:
X-Wallapop-Signature: HMAC-SHA256 signature of the payload.X-Wallapop-Timestamp: Timestamp in epoch milliseconds.
You must verify the signature using the shared secret that is provided when the webhook is created.
Signature Calculation:
- Concatenate the JSON payload and the timestamp with a colon (
:). - Hash the resulting string using HMAC-SHA256 with the shared secret.
- Compare the generated signature with the
X-Wallapop-Signatureheader to validate authenticity.
The timestamp is updated with every request to prevent replay attacks.
Each notification contains a JSON payload with the following structure:
{
"id": "$unique_notification_id",
"type": "$event_name",
"occurred_on": "$event_timestamp",
"data": { ... } // Event-specific information
}id: A unique identifier for the notification, which remains the same across retries.occurred_on: The timestamp (in epoch milliseconds) of when the event occurred.data: Event-specific information (the structure varies based on the event type).
The following examples show the payload structure your endpoint will receive for each type of event. Select an example below to see how the payload structure changes for each event type.
- https://developers.wallapop.com/integrator/your-webhook-implementation
- Sale has been completed
- Item has been Banned
- Item is out of stock
- Item has been inactivated
- Item has been listed
- Item has been returned
- Delivery request has started
- Delivery request has been cancelled
- Delivery request has failed
- Delivery request has expired
- Transaction has been created
- Dispute has been created
- Quality check period started for the disputed item
- Quality check period expired for the disputed item
- Dispute has been approved by seller
- Dispute issue has been reported by seller
- Dispute cancelled by wallapop
- Chat lead has been created (only available for some users, contact us if you are interested)
curl -i -X POST \
https://developers.wallapop.com/integrator/your-webhook-implementation \
-H 'Content-Type: application/json' \
-d '{
"id": "318a05ce-7653-4eeb-9a69-5b425e2edb24",
"type": "SALE_COMPLETED",
"occurred_on": 1752820579294,
"data": {
"item_id": "9nz0m00eejok"
}
}'To create a new webhook, send a POST request to /webhooks:
- Productionhttps://connect.wallapop.com/webhooks
curl -i -X POST \
https://connect.wallapop.com/webhooks \
-H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
-H 'Content-Type: application/json' \
-d '{
"url": "string",
"events": [
"SALE_COMPLETED"
]
}'A successful request returns a 201 Created status with the webhook token.
Easily update your webhook by changing the endpoint url and the list of events to which the webhook is subscribed:
- Productionhttps://connect.wallapop.com/webhooks/{webhookId}
curl -i -X PUT \
https://connect.wallapop.com/webhooks/5d5ae7a4-2d0d-4be1-a5da-b49e3291e5cd \
-H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
-H 'Content-Type: application/json' \
-d '{
"url": "string",
"events": [
"SALE_COMPLETED"
]
}'A successful request returns a 204 No Content status.
To view your webhooks, send a GET request to /webhooks.
- Productionhttps://connect.wallapop.com/webhooks
curl -i -X GET \
https://connect.wallapop.com/webhooks \
-H 'Authorization: Bearer <YOUR_TOKEN_HERE>'If successful, you'll get a 200 OK status with a list of your webhooks.
Need to refresh your webhook token? Send a PATCH request to /webhooks/{webhookId}/token, including the webhookId in the path:
- Productionhttps://connect.wallapop.com/webhooks/{webhookId}/token
curl -i -X PATCH \
https://connect.wallapop.com/webhooks/5d5ae7a4-2d0d-4be1-a5da-b49e3291e5cd/token \
-H 'Authorization: Bearer <YOUR_TOKEN_HERE>'You’ll receive a 200 OK status with your new webhook token.
To delete a webhook, send a DELETE request to /webhooks/{webhookId}, including the webhookId in the path:
- Productionhttps://connect.wallapop.com/webhooks/{webhookId}
curl -i -X DELETE \
https://connect.wallapop.com/webhooks/5d5ae7a4-2d0d-4be1-a5da-b49e3291e5cd \
-H 'Authorization: Bearer <YOUR_TOKEN_HERE>'A successful request will return a 204 No Content status.