curl -X GET "https://api.hooked.so/v1/schedule/list?status=pending&platform=youtube&limit=20" \
-H "x-api-key: your_api_key_here"
const params = new URLSearchParams({ status: 'pending', limit: '20' });
const response = await fetch(`https://api.hooked.so/v1/schedule/list?${params}`, {
headers: { 'x-api-key': process.env.HOOKED_API_KEY }
});
const { data } = await response.json();
console.log(`${data.total} pending posts`);
import requests
response = requests.get(
'https://api.hooked.so/v1/schedule/list',
params={'status': 'failed', 'limit': 50, 'offset': 0},
headers={'x-api-key': 'your_api_key_here'}
)
for post in response.json()['data']['scheduledPosts']:
print(post['id'], post['platform'], post['scheduledDateTime'])
{
"success": true,
"message": "Scheduled posts fetched successfully",
"data": {
"scheduledPosts": [
{
"id": "cm6f7g8h9i0j1k2l3m4n5o6p7",
"status": "pending",
"scheduledDateTime": "2026-10-05T15:00:00.000Z",
"platform": "youtube",
"integration": {
"id": "cm3c4d5e6f7g8h9i0j1k2l3m4",
"type": "youtube",
"account": {
"id": "UC1234567890",
"name": "My YouTube Channel",
"username": "mychannel",
"avatarUrl": "https://yt3.ggpht.com/..."
}
},
"video": {
"id": "cm5e6f7g8h9i0j1k2l3m4n5o6",
"name": "5 tips for better sleep",
"url": "https://.../video.mp4",
"thumbnail": "https://.../thumbnail.jpg",
"durationInSeconds": 42
},
"platformData": {
"title": "5 tips for better sleep",
"privacyStatus": "public"
},
"createdAt": "2026-10-01T10:30:00.000Z",
"updatedAt": "2026-10-01T10:30:00.000Z"
}
],
"total": 1,
"limit": 20,
"offset": 0
}
}
{
"code": "bad_request",
"message": "platform: Must be one of tiktok, youtube, instagram, facebook",
"errorCode": "INVALID_INPUT",
"details": {}
}
Publish
List Scheduled Posts
List your team’s scheduled posts, newest first
GET
/
v1
/
schedule
/
list
curl -X GET "https://api.hooked.so/v1/schedule/list?status=pending&platform=youtube&limit=20" \
-H "x-api-key: your_api_key_here"
const params = new URLSearchParams({ status: 'pending', limit: '20' });
const response = await fetch(`https://api.hooked.so/v1/schedule/list?${params}`, {
headers: { 'x-api-key': process.env.HOOKED_API_KEY }
});
const { data } = await response.json();
console.log(`${data.total} pending posts`);
import requests
response = requests.get(
'https://api.hooked.so/v1/schedule/list',
params={'status': 'failed', 'limit': 50, 'offset': 0},
headers={'x-api-key': 'your_api_key_here'}
)
for post in response.json()['data']['scheduledPosts']:
print(post['id'], post['platform'], post['scheduledDateTime'])
{
"success": true,
"message": "Scheduled posts fetched successfully",
"data": {
"scheduledPosts": [
{
"id": "cm6f7g8h9i0j1k2l3m4n5o6p7",
"status": "pending",
"scheduledDateTime": "2026-10-05T15:00:00.000Z",
"platform": "youtube",
"integration": {
"id": "cm3c4d5e6f7g8h9i0j1k2l3m4",
"type": "youtube",
"account": {
"id": "UC1234567890",
"name": "My YouTube Channel",
"username": "mychannel",
"avatarUrl": "https://yt3.ggpht.com/..."
}
},
"video": {
"id": "cm5e6f7g8h9i0j1k2l3m4n5o6",
"name": "5 tips for better sleep",
"url": "https://.../video.mp4",
"thumbnail": "https://.../thumbnail.jpg",
"durationInSeconds": 42
},
"platformData": {
"title": "5 tips for better sleep",
"privacyStatus": "public"
},
"createdAt": "2026-10-01T10:30:00.000Z",
"updatedAt": "2026-10-01T10:30:00.000Z"
}
],
"total": 1,
"limit": 20,
"offset": 0
}
}
{
"code": "bad_request",
"message": "platform: Must be one of tiktok, youtube, instagram, facebook",
"errorCode": "INVALID_INPUT",
"details": {}
}
Overview
Lists the posts your team has scheduled, most recently created first, with the video and account each one publishes to. Posts published directly from the dashboard (not scheduled) are not included.curl -X GET "https://api.hooked.so/v1/schedule/list?status=pending&platform=youtube&limit=20" \
-H "x-api-key: your_api_key_here"
const params = new URLSearchParams({ status: 'pending', limit: '20' });
const response = await fetch(`https://api.hooked.so/v1/schedule/list?${params}`, {
headers: { 'x-api-key': process.env.HOOKED_API_KEY }
});
const { data } = await response.json();
console.log(`${data.total} pending posts`);
import requests
response = requests.get(
'https://api.hooked.so/v1/schedule/list',
params={'status': 'failed', 'limit': 50, 'offset': 0},
headers={'x-api-key': 'your_api_key_here'}
)
for post in response.json()['data']['scheduledPosts']:
print(post['id'], post['platform'], post['scheduledDateTime'])
{
"success": true,
"message": "Scheduled posts fetched successfully",
"data": {
"scheduledPosts": [
{
"id": "cm6f7g8h9i0j1k2l3m4n5o6p7",
"status": "pending",
"scheduledDateTime": "2026-10-05T15:00:00.000Z",
"platform": "youtube",
"integration": {
"id": "cm3c4d5e6f7g8h9i0j1k2l3m4",
"type": "youtube",
"account": {
"id": "UC1234567890",
"name": "My YouTube Channel",
"username": "mychannel",
"avatarUrl": "https://yt3.ggpht.com/..."
}
},
"video": {
"id": "cm5e6f7g8h9i0j1k2l3m4n5o6",
"name": "5 tips for better sleep",
"url": "https://.../video.mp4",
"thumbnail": "https://.../thumbnail.jpg",
"durationInSeconds": 42
},
"platformData": {
"title": "5 tips for better sleep",
"privacyStatus": "public"
},
"createdAt": "2026-10-01T10:30:00.000Z",
"updatedAt": "2026-10-01T10:30:00.000Z"
}
],
"total": 1,
"limit": 20,
"offset": 0
}
}
{
"code": "bad_request",
"message": "platform: Must be one of tiktok, youtube, instagram, facebook",
"errorCode": "INVALID_INPUT",
"details": {}
}
Errors
| Status | When |
|---|---|
| 400 | platform is not one of the four values |
| 401 | Missing or invalid API key (code: "not_authenticated") |
| 403 | The team does not have the Hooked app product (code: "entitlement_required") |
| 500 | { "success": false, "message": "Failed to fetch scheduled posts", "error": "..." } |
Next Steps
Get Scheduled Post
One post in detail
Schedule Video
Schedule another video
Authorizations
Query Parameters
Keep only posts with this status. Matched exactly; any other value returns an empty list.
Available options:
pending, published, failed Keep only posts to this platform. Any other value answers 400.
Available options:
tiktok, youtube, instagram, facebook Page size (1-100). Invalid values fall back to the default.
Required range:
1 <= x <= 100Rows to skip. Invalid values fall back to 0.
Required range:
x >= 0