Webhook Documentation
Learn how to receive real-time notifications from Logo Express via webhooks.
Introduction
Security
Events
Overview
Webhooks allow you to build or configure integrations which subscribe to certain events on Logo Express. When one of those events is triggered, we'll send a HTTP POST payload to the webhook's configured URL.
Webhooks can be used to update an external database, trigger notifications, or start a downstream workflow after a project is completed or an asset is uploaded.
Delivery & Retries
Logo Express delivers webhook notifications using a POST request with a application/json content type.
Response Codes
Your endpoint should return a 2xx HTTP status code to acknowledge receipt of the event. Any other status code (e.g., 4xx or 5xx) will be treated as a failure.
Retry Policy
If your server is down or returns an error, we will retry the delivery up to 5 times with exponential backoff:
- 1st retry: 10 minutes after initial failure
- 2nd retry: 1 hour after initial failure
- 3rd retry: 4 hours after initial failure
- 4th retry: 12 hours after initial failure
- 5th retry: 24 hours after initial failure
Verifying Signatures
Logo Express signs every webhook event it sends to your endpoints by including a signature in each request's X-LogoExpress-Signature header. This allows you to verify that the events were sent by Logo Express and not a third party.
Steps to verify
- Retrieve the signature from the
X-LogoExpress-Signatureheader. - Determine the expected signature by computing an HMAC with the SHA256 hash function. Use your webhook's signing secret as the key and the raw HTTP request body as the message.
- Compare the signature in the header to your expected signature.
const crypto = require('crypto');
const secret = 'whsec_...'; // Your webhook secret
const signature = request.headers['x-logoexpress-signature'];
const body = JSON.stringify(request.body);
const hmac = crypto.createHmac('sha256', secret);
const digest = hmac.update(body).digest('hex');
if (signature === digest) {
console.log('Verified!');
}
Event Types
The following events are currently supported:
| Event | Description |
|---|---|
project.created |
Occurs whenever a new project is created. |
project.updated |
Occurs whenever a project's details or status changes. |
project.completed |
Occurs when a project status is set to completed. |
asset.uploaded |
Occurs whenever a new file is uploaded to a project. |
order.placed |
Occurs when a new order is successfully submitted. |
Payload Schema
Every webhook payload follows a consistent structure:
{
"id": "evt_123456789",
"object": "event",
"type": "project.created",
"created": 1713618540,
"data": {
"object": {
"id": "proj_987654321",
"name": "Summer Collection 2026",
"status": "active",
"category": "Apparel"
}
}
}