LateLate API
Core

Webhooks


List all webhooks

Retrieve all configured webhooks for the authenticated user. Supports up to 10 webhooks per user.

GET
/v1/webhooks/settings
AuthorizationBearer <token>

API key authentication - use your Late API key as a Bearer token

In: header

Response Body

application/json

application/json

curl -X GET "https://getlate.dev/api/v1/webhooks/settings"
{
  "webhooks": [
    {
      "_id": "507f1f77bcf86cd799439011",
      "name": "My Production Webhook",
      "url": "https://example.com/webhook",
      "events": [
        "post.published",
        "post.failed"
      ],
      "isActive": true,
      "lastFiredAt": "2024-01-15T10:30:00Z",
      "failureCount": 0
    },
    {
      "_id": "507f1f77bcf86cd799439012",
      "name": "Slack Notifications",
      "url": "https://hooks.slack.com/services/xxx",
      "events": [
        "post.failed",
        "account.disconnected"
      ],
      "isActive": true,
      "failureCount": 0
    }
  ]
}
{
  "error": "Unauthorized"
}

Create a new webhook

Create a new webhook configuration. Maximum 10 webhooks per user.

Note: Webhooks are automatically disabled after 10 consecutive delivery failures.

POST
/v1/webhooks/settings
AuthorizationBearer <token>

API key authentication - use your Late API key as a Bearer token

In: header

name?string

Webhook name (max 50 characters)

Lengthlength <= 50
url?string

Webhook endpoint URL (must be HTTPS in production)

Formaturi
secret?string

Secret key for HMAC-SHA256 signature verification

events?array<string>

Events to subscribe to

isActive?boolean

Enable or disable webhook delivery

customHeaders?

Custom headers to include in webhook requests

Response Body

application/json

application/json

curl -X POST "https://getlate.dev/api/v1/webhooks/settings" \  -H "Content-Type: application/json" \  -d '{    "name": "My Production Webhook",    "url": "https://example.com/webhook",    "secret": "your-secret-key",    "events": [      "post.scheduled",      "post.published",      "post.failed",      "post.partial",      "account.connected",      "account.disconnected",      "message.received"    ],    "isActive": true  }'
{
  "success": true,
  "webhook": {
    "_id": "string",
    "name": "string",
    "url": "http://example.com",
    "secret": "string",
    "events": [
      "post.scheduled"
    ],
    "isActive": true,
    "lastFiredAt": "2019-08-24T14:15:22Z",
    "failureCount": 0,
    "customHeaders": {
      "property1": "string",
      "property2": "string"
    }
  }
}
Empty
{
  "error": "Unauthorized"
}

Delete a webhook

Permanently delete a webhook configuration.

DELETE
/v1/webhooks/settings
AuthorizationBearer <token>

API key authentication - use your Late API key as a Bearer token

In: header

Query Parameters

idstring

Webhook ID to delete

Response Body

application/json

application/json

curl -X DELETE "https://getlate.dev/api/v1/webhooks/settings?id=string"
{
  "success": true
}
Empty
{
  "error": "Unauthorized"
}

Update a webhook

Update an existing webhook configuration. All fields except _id are optional - only provided fields will be updated.

Note: Webhooks are automatically disabled after 10 consecutive delivery failures.

PUT
/v1/webhooks/settings
AuthorizationBearer <token>

API key authentication - use your Late API key as a Bearer token

In: header

_idstring

Webhook ID to update (required)

name?string

Webhook name (max 50 characters)

Lengthlength <= 50
url?string

Webhook endpoint URL (must be HTTPS in production)

Formaturi
secret?string

Secret key for HMAC-SHA256 signature verification

events?array<string>

Events to subscribe to

isActive?boolean

Enable or disable webhook delivery

customHeaders?

Custom headers to include in webhook requests

Response Body

application/json

application/json

curl -X PUT "https://getlate.dev/api/v1/webhooks/settings" \  -H "Content-Type: application/json" \  -d '{    "_id": "507f1f77bcf86cd799439011",    "url": "https://new-example.com/webhook",    "events": [      "post.published",      "post.failed"    ]  }'
{
  "success": true,
  "webhook": {
    "_id": "string",
    "name": "string",
    "url": "http://example.com",
    "secret": "string",
    "events": [
      "post.scheduled"
    ],
    "isActive": true,
    "lastFiredAt": "2019-08-24T14:15:22Z",
    "failureCount": 0,
    "customHeaders": {
      "property1": "string",
      "property2": "string"
    }
  }
}
Empty
{
  "error": "Unauthorized"
}
Empty

Send test webhook

Send a test webhook to verify your endpoint is configured correctly. The test payload includes event: "webhook.test" to distinguish it from real events.

POST
/v1/webhooks/test
AuthorizationBearer <token>

API key authentication - use your Late API key as a Bearer token

In: header

webhookIdstring

ID of the webhook to test

Response Body

application/json

application/json

application/json

curl -X POST "https://getlate.dev/api/v1/webhooks/test" \  -H "Content-Type: application/json" \  -d '{    "webhookId": "507f1f77bcf86cd799439011"  }'
{
  "success": true,
  "message": "Test webhook sent successfully"
}
Empty
{
  "error": "Unauthorized"
}
{
  "success": false,
  "message": "Test webhook failed"
}

Get webhook delivery logs

Retrieve webhook delivery history. Logs are automatically deleted after 7 days.

GET
/v1/webhooks/logs
AuthorizationBearer <token>

API key authentication - use your Late API key as a Bearer token

In: header

Query Parameters

limit?integer

Maximum number of logs to return (max 100)

Default50
Range1 <= value <= 100
status?string

Filter by delivery status

Value in"success" | "failed"
event?string

Filter by event type

Value in"post.scheduled" | "post.published" | "post.failed" | "post.partial" | "account.connected" | "account.disconnected" | "message.received" | "webhook.test"
webhookId?string

Filter by webhook ID

Response Body

application/json

application/json

curl -X GET "https://getlate.dev/api/v1/webhooks/logs"
{
  "logs": [
    {
      "_id": "string",
      "webhookId": "string",
      "webhookName": "string",
      "event": "post.scheduled",
      "url": "http://example.com",
      "status": "success",
      "statusCode": 0,
      "requestPayload": {},
      "responseBody": "string",
      "errorMessage": "string",
      "attemptNumber": 0,
      "responseTime": 0,
      "createdAt": "2019-08-24T14:15:22Z"
    }
  ]
}
{
  "error": "Unauthorized"
}