From hootsuite-pack
Generates minimal Hootsuite API examples to list social profiles, schedule posts, and query scheduled messages using TypeScript or curl.
npx claudepluginhub jeremylongshore/claude-code-plugins-plus-skills --plugin hootsuite-packThis skill is limited to using the following tools:
List your social media profiles and schedule a post using the Hootsuite REST API. The API base URL is `https://platform.hootsuite.com/v1/`.
Applies typed clients, scheduling helpers, and patterns for Hootsuite REST API in TypeScript and Python. Use for integrations, refactoring, or standards.
Provides Late API reference for scheduling posts across 13 social media platforms like Twitter, Instagram, LinkedIn. Covers authentication, endpoints, webhooks, media, analytics.
Guides Next.js Cache Components and Partial Prerendering (PPR): 'use cache' directives, cacheLife(), cacheTag(), revalidateTag() for caching, invalidation, static/dynamic optimization. Auto-activates on cacheComponents: true.
Share bugs, ideas, or general feedback.
List your social media profiles and schedule a post using the Hootsuite REST API. The API base URL is https://platform.hootsuite.com/v1/.
hootsuite-install-auth setup// hello-hootsuite.ts
import 'dotenv/config';
const TOKEN = process.env.HOOTSUITE_ACCESS_TOKEN!;
const BASE = 'https://platform.hootsuite.com/v1';
async function listProfiles() {
const response = await fetch(`${BASE}/socialProfiles`, {
headers: { 'Authorization': `Bearer ${TOKEN}` },
});
const { data } = await response.json();
for (const profile of data) {
console.log(`${profile.type}: @${profile.socialNetworkUsername} (ID: ${profile.id})`);
}
return data;
}
listProfiles().catch(console.error);
async function schedulePost(socialProfileId: string, text: string, scheduledAt: Date) {
const response = await fetch(`${BASE}/messages`, {
method: 'POST',
headers: {
'Authorization': `Bearer ${TOKEN}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
text,
socialProfileIds: [socialProfileId],
scheduledSendTime: scheduledAt.toISOString(),
emailNotification: false,
}),
});
const result = await response.json();
console.log('Scheduled message ID:', result.data[0]?.id);
console.log('State:', result.data[0]?.state);
console.log('Scheduled for:', result.data[0]?.scheduledSendTime);
return result;
}
// Schedule a post 1 hour from now
const profiles = await listProfiles();
if (profiles.length > 0) {
const oneHourLater = new Date(Date.now() + 3600000);
await schedulePost(profiles[0].id, 'Hello from the Hootsuite API!', oneHourLater);
}
async function listMessages() {
const response = await fetch(`${BASE}/messages?state=SCHEDULED&limit=10`, {
headers: { 'Authorization': `Bearer ${TOKEN}` },
});
const { data } = await response.json();
for (const msg of data) {
console.log(`[${msg.state}] ${msg.text?.substring(0, 60)}... → ${msg.scheduledSendTime}`);
}
}
# List profiles
curl -s -H "Authorization: Bearer $HOOTSUITE_ACCESS_TOKEN" \
https://platform.hootsuite.com/v1/socialProfiles | python3 -m json.tool
# Get current user
curl -s -H "Authorization: Bearer $HOOTSUITE_ACCESS_TOKEN" \
https://platform.hootsuite.com/v1/me | python3 -m json.tool
| Error | Cause | Solution |
|---|---|---|
401 Unauthorized | Expired token | Refresh token via OAuth flow |
403 Forbidden | Insufficient permissions | Check app scopes |
422 Unprocessable | Invalid profile ID or past date | Verify profile ID and future date |
| No profiles returned | No social accounts connected | Connect accounts in Hootsuite dashboard |
Proceed to hootsuite-local-dev-loop for development workflow.