post.scheduled
Fired when a post is scheduled for publishing
All webhook payloads follow a consistent top-level structure with event-specific data nested within the data object.
typestring
The event type (e.g. post.scheduled).
stringdataobject
Event-specific payload for this webhook.
objectdata.postobject
The scheduled post.
objectdata.post.idstring
Post ID.
stringdata.post.titlestring
Post title.
stringdata.post.channelsarray
Channels the post is scheduled for.
arraydata.post.campaign?object | null
Campaign if assigned. Contains id, name, startDate, and endDate.
object | nulldata.post.urlstring
Ordinal post URL.
stringdata.post.labelsarray
Labels attached to the post. Each contains id, name, color, and backgroundColor.
arraydata.post.publishAtstring
ISO 8601 timestamp when the post will publish.
stringdata.post.postedImmediatelyboolean
Whether the post was published immediately.
booleandata.post.workspaceobject
Workspace the post belongs to. Contains id, slug, and name.
objectdata.post.scheduledByobject
User who scheduled the post. Contains id, firstName, lastName, and email.
objectdata.post.scheduledAtstring
ISO 8601 timestamp when the post was scheduled.
stringdata.post.linkedIn?object | null
LinkedIn content when the post includes LinkedIn. Contains profile (id, name, detail), copy, and assets (id, name, url, mimetype, size, width, height, duration).
object | nulldata.post.x?object | null
X/Twitter content when the post includes Twitter. Contains profile (id, name, detail) and tweets (array of { copy, assets }).
object | nullcreatedAtstring
ISO 8601 timestamp when the webhook event was created.
string{
"type": "post.scheduled",
"data": {
"post": {
"id": "550e8400-e29b-41d4-a716-446655440001",
"title": "Q4 Product Launch Announcement",
"channels": ["LinkedIn", "Twitter"],
"campaign": {
"id": "550e8400-e29b-41d4-a716-446655440003",
"name": "Launch 2025",
"startDate": "2025-01-01",
"endDate": "2025-12-31"
},
"url": "https://app.tryordinal.com/acme/posts/550e8400-e29b-41d4-a716-446655440001",
"labels": [
{
"id": "550e8400-e29b-41d4-a716-446655440400",
"name": "Marketing",
"color": "#9333ea",
"backgroundColor": "#f3e8ff"
}
],
"publishAt": "2025-03-01T14:00:00.000Z",
"postedImmediately": false,
"workspace": {
"id": "550e8400-e29b-41d4-a716-446655440000",
"slug": "acme",
"name": "Acme Inc"
},
"scheduledBy": {
"id": "550e8400-e29b-41d4-a716-446655440010",
"firstName": "Jane",
"lastName": "Doe",
"email": "jane@example.com"
},
"scheduledAt": "2025-02-26T12:00:00.000Z",
"linkedIn": {
"profile": {
"id": "550e8400-e29b-41d4-a716-446655440002",
"name": "Acme Inc",
"detail": "acme-inc"
},
"copy": "Excited to announce our new product launch!",
"assets": [
{
"id": "550e8400-e29b-41d4-a716-446655440010",
"name": "product-photo.jpg",
"url": "https://cdn.tryordinal.com/assets/product-photo.jpg",
"mimetype": "image/jpeg",
"size": 245678,
"width": 1920,
"height": 1080,
"duration": null
}
]
},
"x": {
"profile": {
"id": "550e8400-e29b-41d4-a716-446655440004",
"name": "Acme Inc",
"detail": "@acme_inc"
},
"tweets": [
{
"copy": "Excited to announce our new product launch!",
"assets": [
{
"id": "550e8400-e29b-41d4-a716-446655440011",
"name": "product-photo.jpg",
"url": "https://cdn.tryordinal.com/assets/product-photo.jpg",
"mimetype": "image/jpeg",
"size": 245678,
"width": 1920,
"height": 1080,
"duration": null
}
]
}
]
}
}
},
"createdAt": "2025-02-26T12:00:00.000Z"
}