Rank
70
AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents
Traction
No public download signal
Freshness
Updated 2d ago
Xpersona Agent
Official Late API reference for scheduling posts across 13 social media platforms. Covers authentication, endpoints, webhooks, and platform-specific features. Use when building with the Late Social Media Scheduling API.
clawhub skill install kn76zqp7wtxen0ast34y6jhmv97zz1b9:late-apiOverall rank
#62
Adoption
2K downloads
Trust
Unknown
Freshness
Feb 28, 2026
Freshness
Last checked Feb 28, 2026
Best For
Late API is best for general automation workflows where OpenClaw compatibility matters.
Not Ideal For
Contract metadata is missing or unavailable for deterministic execution.
Evidence Sources Checked
CLAWHUB, CLAWHUB, runtime-metrics, public facts pack
Key links, install path, reliability highlights, and the shortest practical read before diving into the crawl record.
Overview
Official Late API reference for scheduling posts across 13 social media platforms. Covers authentication, endpoints, webhooks, and platform-specific features. Use when building with the Late Social Media Scheduling API. Capability contract not published. No trust telemetry is available yet. 2K downloads reported by the source. Last updated 4/15/2026.
Trust score
Unknown
Compatibility
OpenClaw
Freshness
Feb 28, 2026
Vendor
Clawhub
Artifacts
0
Benchmarks
0
Last release
0.1.0
Install & run
clawhub skill install kn76zqp7wtxen0ast34y6jhmv97zz1b9:late-apiInstall using `clawhub skill install kn76zqp7wtxen0ast34y6jhmv97zz1b9:late-api` in an isolated environment before connecting it to live workloads.
No published capability contract is available yet, so validate auth and request/response behavior manually.
Review the upstream CLAWHUB listing at https://clawhub.ai/mikipalet/late-api before using production credentials.
Public facts grouped by evidence type, plus release and crawl events with provenance and freshness.
Public facts
Vendor
Clawhub
Protocol compatibility
OpenClaw
Latest release
0.1.0
Adoption signal
2K downloads
Handshake status
UNKNOWN
Parameters, dependencies, examples, extracted files, editorial overview, and the complete README when available.
Captured outputs
Extracted files
5
Examples
6
Snippets
0
Languages
Unknown
bash
curl -X POST https://getlate.dev/api/v1/profiles \
-H "Authorization: Bearer YOUR_API_KEY" \
-d '{"name": "My Brand"}'bash
curl "https://getlate.dev/api/v1/connect/twitter?profileId=PROFILE_ID" \ -H "Authorization: Bearer YOUR_API_KEY"
bash
curl -X POST https://getlate.dev/api/v1/posts \
-H "Authorization: Bearer YOUR_API_KEY" \
-d '{"content": "Hello!", "platforms": [{"platform": "twitter", "accountId": "ACC_ID"}], "publishNow": true}'bash
# 1. Create profile
curl -X POST https://getlate.dev/api/v1/profiles \
-H "Authorization: Bearer YOUR_API_KEY" \
-d '{"name": "My Brand"}'
# 2. Connect account (opens OAuth)
curl "https://getlate.dev/api/v1/connect/twitter?profileId=PROFILE_ID" \
-H "Authorization: Bearer YOUR_API_KEY"
# 3. Create post
curl -X POST https://getlate.dev/api/v1/posts \
-H "Authorization: Bearer YOUR_API_KEY" \
-d '{"content": "Hello!", "platforms": [{"platform": "twitter", "accountId": "ACC_ID"}], "publishNow": true}'bash
npx skills add mikipalet/skills/late-api
text
/late-api
SKILL.md
---
name: late-api
description: Official Late API reference for scheduling posts across 13 social media platforms. Covers authentication, endpoints, webhooks, and platform-specific features. Use when building with the Late Social Media Scheduling API.
---
# Late API Reference
Schedule posts across 13 social media platforms with a single API.
**Base URL:** `https://getlate.dev/api/v1`
**Docs:** [getlate.dev/docs](https://getlate.dev/docs)
## Quick Start
```bash
# 1. Create profile
curl -X POST https://getlate.dev/api/v1/profiles \
-H "Authorization: Bearer YOUR_API_KEY" \
-d '{"name": "My Brand"}'
# 2. Connect account (opens OAuth)
curl "https://getlate.dev/api/v1/connect/twitter?profileId=PROFILE_ID" \
-H "Authorization: Bearer YOUR_API_KEY"
# 3. Create post
curl -X POST https://getlate.dev/api/v1/posts \
-H "Authorization: Bearer YOUR_API_KEY" \
-d '{"content": "Hello!", "platforms": [{"platform": "twitter", "accountId": "ACC_ID"}], "publishNow": true}'
```
## Rule Files
Read individual rule files for detailed documentation:
- [rules/authentication.md](rules/authentication.md) - API key format, usage examples, core concepts
- [rules/posts.md](rules/posts.md) - Create, schedule, retry posts, bulk upload
- [rules/accounts.md](rules/accounts.md) - List accounts, health checks, follower stats
- [rules/connect.md](rules/connect.md) - OAuth flows, Bluesky app password, Telegram bot token
- [rules/platforms.md](rules/platforms.md) - Platform-specific data for all 13 platforms
- [rules/webhooks.md](rules/webhooks.md) - Configure webhooks, verify signatures, events
- [rules/media.md](rules/media.md) - Presigned uploads, supported formats, platform limits
- [rules/queue.md](rules/queue.md) - Queue management, slots configuration
- [rules/analytics.md](rules/analytics.md) - YouTube daily views, LinkedIn analytics
- [rules/tools.md](rules/tools.md) - Media download, hashtag checker, transcripts
- [rules/errors.md](rules/errors.md) - Error codes, rate limits, publishing logs
- [rules/sdks.md](rules/sdks.md) - Direct API usage examples
## Supported Platforms
Twitter/X, Instagram, Facebook, LinkedIn, TikTok, YouTube, Pinterest, Reddit, Bluesky, Threads, Google Business, Telegram, Snapchat
---
*[Late](https://getlate.dev) - Social Media Scheduling API for Developers*README.md
# Late API Skill
[](https://skills.sh)
[](https://opensource.org/licenses/MIT)
Official Claude Code skill for the [Late](https://getlate.dev) Social Media Scheduling API.
## Installation
```bash
npx skills add mikipalet/skills/late-api
```
## What's Included
- **Authentication** - API key setup and usage
- **Quick Start** - Get posting in 4 steps
- **All Endpoints** - Posts, accounts, profiles, webhooks, media
- **Platform-Specific** - Features for all 13 platforms
- **Webhooks** - Setup and signature verification
- **Error Handling** - Common errors and solutions
- **Code Examples** - curl, TypeScript, Python
## 13 Platforms Supported
Twitter/X, Instagram, Facebook, LinkedIn, TikTok, YouTube, Pinterest, Reddit, Bluesky, Threads, Google Business, Telegram, Snapchat
## Usage
Once installed, Claude Code will help you with Late API integration:
```
/late-api
```
## Example Prompts
- "How do I create a post with the Late API?"
- "Show me how to set up webhooks"
- "What's the endpoint for connecting a Twitter account?"
- "How do I upload media to Late?"
## Quick Example
```typescript
const response = await fetch('https://getlate.dev/api/v1/posts', {
method: 'POST',
headers: {
'Authorization': `Bearer ${process.env.LATE_API_KEY}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
content: 'Hello from Late API!',
platforms: [{ platform: 'twitter', accountId: 'acc_123' }],
publishNow: true
})
});
```
## Resources
- **Docs:** [getlate.dev/docs](https://getlate.dev/docs)
- **Dashboard:** [getlate.dev/dashboard](https://getlate.dev/dashboard)
- **API Keys:** [getlate.dev/dashboard/api-keys](https://getlate.dev/dashboard/api-keys)
## License
MIT
---
*[Late](https://getlate.dev) - Social Media Scheduling API for Developers*_meta.json
{
"ownerId": "kn76zqp7wtxen0ast34y6jhmv97zz1b9",
"slug": "late-api",
"version": "0.1.0",
"publishedAt": 1769413329192
}rules/accounts.md
# Accounts API
## Endpoints
| Method | Endpoint | Description |
|--------|----------|-------------|
| `GET` | `/v1/accounts` | List accounts |
| `PUT` | `/v1/accounts/{accountId}` | Update account |
| `DELETE` | `/v1/accounts/{accountId}` | Disconnect account |
| `GET` | `/v1/accounts/health` | Check all accounts health |
| `GET` | `/v1/accounts/{accountId}/health` | Check specific account health |
| `GET` | `/v1/accounts/follower-stats` | Get follower statistics |
## Platform-Specific Account Endpoints
| Method | Endpoint | Description |
|--------|----------|-------------|
| `PUT` | `/v1/accounts/{accountId}/facebook-page` | Update selected Facebook page |
| `GET` | `/v1/accounts/{accountId}/gmb-reviews` | Get Google Business reviews |
| `GET` | `/v1/accounts/{accountId}/linkedin-organizations` | List LinkedIn organizations |
| `PUT` | `/v1/accounts/{accountId}/linkedin-organization` | Switch personal/organization mode |
| `GET` | `/v1/accounts/{accountId}/linkedin-mentions` | Get LinkedIn mentions |
| `GET` | `/v1/accounts/{accountId}/linkedin-aggregate-analytics` | Get LinkedIn analytics |
| `GET` | `/v1/accounts/{accountId}/linkedin-post-analytics` | Get LinkedIn post analytics |
| `GET` | `/v1/accounts/{accountId}/pinterest-boards` | List Pinterest boards |
| `PUT` | `/v1/accounts/{accountId}/pinterest-boards` | Set default Pinterest board |
| `GET` | `/v1/accounts/{accountId}/reddit-subreddits` | List user's subreddits |
| `PUT` | `/v1/accounts/{accountId}/reddit-subreddits` | Set default subreddit |
## List Accounts
```bash
curl "https://getlate.dev/api/v1/accounts?profileId=PROFILE_ID" \
-H "Authorization: Bearer YOUR_API_KEY"
```
## Account Health Check
```bash
curl "https://getlate.dev/api/v1/accounts/health" \
-H "Authorization: Bearer YOUR_API_KEY"
```
Response indicates if tokens are valid or need reconnection.
## Account Groups
| Method | Endpoint | Description |
|--------|----------|-------------|
| `GET` | `/v1/account-groups` | List account groups |
| `POST` | `/v1/account-groups` | Create account group |
| `PUT` | `/v1/account-groups/{groupId}` | Update account group |
| `DELETE` | `/v1/account-groups/{groupId}` | Delete account group |
Account groups let you organize accounts for bulk posting operations.rules/analytics.md
# Analytics API
## Endpoints
| Method | Endpoint | Description |
|--------|----------|-------------|
| `GET` | `/v1/analytics` | Get general analytics |
| `GET` | `/v1/analytics/youtube/daily-views` | Get YouTube video daily views |
| `GET` | `/v1/accounts/{accountId}/linkedin-aggregate-analytics` | LinkedIn account analytics |
| `GET` | `/v1/accounts/{accountId}/linkedin-post-analytics` | LinkedIn post analytics |
| `GET` | `/v1/accounts/follower-stats` | Follower count history |
## YouTube Daily Views
```bash
curl "https://getlate.dev/api/v1/analytics/youtube/daily-views?accountId=ACCOUNT_ID&videoId=VIDEO_ID&startDate=2024-01-01&endDate=2024-01-31" \
-H "Authorization: Bearer YOUR_API_KEY"
```
Response:
```json
{
"success": true,
"videoId": "dQw4w9WgXcQ",
"dateRange": {
"startDate": "2024-01-01",
"endDate": "2024-01-31"
},
"totalViews": 15420,
"dailyViews": [
{
"date": "2024-01-01",
"views": 523,
"estimatedMinutesWatched": 1045,
"averageViewDuration": 120,
"subscribersGained": 12,
"subscribersLost": 2,
"likes": 45,
"comments": 8,
"shares": 15
}
]
}
```
**Note:** Requires `yt-analytics.readonly` scope. If missing, response includes `reauthorizeUrl`.
## LinkedIn Analytics
```bash
# Aggregate analytics for account
curl "https://getlate.dev/api/v1/accounts/ACCOUNT_ID/linkedin-aggregate-analytics" \
-H "Authorization: Bearer YOUR_API_KEY"
# Analytics for specific post
curl "https://getlate.dev/api/v1/accounts/ACCOUNT_ID/linkedin-post-analytics?postUrn=URN" \
-H "Authorization: Bearer YOUR_API_KEY"
```
## Follower Stats
```bash
curl "https://getlate.dev/api/v1/accounts/follower-stats?profileId=PROFILE_ID" \
-H "Authorization: Bearer YOUR_API_KEY"
```
Returns historical follower counts across all connected accounts.Editorial read
Docs source
CLAWHUB
Editorial quality
thin
Skill: Late API Owner: mikipalet Summary: Official Late API reference for scheduling posts across 13 social media platforms. Covers authentication, endpoints, webhooks, and platform-specific features. Use when building with the Late Social Media Scheduling API. Tags: latest:0.1.0 Version history: v0.1.0 | 2026-01-26T07:42:09.192Z | auto Initial release of late-api skill - Publishes the official Late API reference for
Skill: Late API
Owner: mikipalet
Summary: Official Late API reference for scheduling posts across 13 social media platforms. Covers authentication, endpoints, webhooks, and platform-specific features. Use when building with the Late Social Media Scheduling API.
Tags: latest:0.1.0
Version history:
v0.1.0 | 2026-01-26T07:42:09.192Z | auto
Initial release of late-api skill
Archive index:
Archive v0.1.0: 15 files, 15198 bytes
Files: README.md (1938b), rules/accounts.md (2279b), rules/analytics.md (1846b), rules/authentication.md (1077b), rules/connect.md (3660b), rules/errors.md (1673b), rules/media.md (1824b), rules/platforms.md (5707b), rules/posts.md (2986b), rules/queue.md (1718b), rules/sdks.md (834b), rules/tools.md (2033b), rules/webhooks.md (2729b), SKILL.md (2318b), _meta.json (127b)
File v0.1.0:SKILL.md
Schedule posts across 13 social media platforms with a single API.
Base URL: https://getlate.dev/api/v1
Docs: getlate.dev/docs
# 1. Create profile
curl -X POST https://getlate.dev/api/v1/profiles \
-H "Authorization: Bearer YOUR_API_KEY" \
-d '{"name": "My Brand"}'
# 2. Connect account (opens OAuth)
curl "https://getlate.dev/api/v1/connect/twitter?profileId=PROFILE_ID" \
-H "Authorization: Bearer YOUR_API_KEY"
# 3. Create post
curl -X POST https://getlate.dev/api/v1/posts \
-H "Authorization: Bearer YOUR_API_KEY" \
-d '{"content": "Hello!", "platforms": [{"platform": "twitter", "accountId": "ACC_ID"}], "publishNow": true}'
Read individual rule files for detailed documentation:
Twitter/X, Instagram, Facebook, LinkedIn, TikTok, YouTube, Pinterest, Reddit, Bluesky, Threads, Google Business, Telegram, Snapchat
Late - Social Media Scheduling API for Developers
File v0.1.0:README.md
Official Claude Code skill for the Late Social Media Scheduling API.
npx skills add mikipalet/skills/late-api
Twitter/X, Instagram, Facebook, LinkedIn, TikTok, YouTube, Pinterest, Reddit, Bluesky, Threads, Google Business, Telegram, Snapchat
Once installed, Claude Code will help you with Late API integration:
/late-api
const response = await fetch('https://getlate.dev/api/v1/posts', {
method: 'POST',
headers: {
'Authorization': `Bearer ${process.env.LATE_API_KEY}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
content: 'Hello from Late API!',
platforms: [{ platform: 'twitter', accountId: 'acc_123' }],
publishNow: true
})
});
MIT
Late - Social Media Scheduling API for Developers
File v0.1.0:_meta.json
{ "ownerId": "kn76zqp7wtxen0ast34y6jhmv97zz1b9", "slug": "late-api", "version": "0.1.0", "publishedAt": 1769413329192 }
File v0.1.0:rules/accounts.md
| Method | Endpoint | Description |
|--------|----------|-------------|
| GET | /v1/accounts | List accounts |
| PUT | /v1/accounts/{accountId} | Update account |
| DELETE | /v1/accounts/{accountId} | Disconnect account |
| GET | /v1/accounts/health | Check all accounts health |
| GET | /v1/accounts/{accountId}/health | Check specific account health |
| GET | /v1/accounts/follower-stats | Get follower statistics |
| Method | Endpoint | Description |
|--------|----------|-------------|
| PUT | /v1/accounts/{accountId}/facebook-page | Update selected Facebook page |
| GET | /v1/accounts/{accountId}/gmb-reviews | Get Google Business reviews |
| GET | /v1/accounts/{accountId}/linkedin-organizations | List LinkedIn organizations |
| PUT | /v1/accounts/{accountId}/linkedin-organization | Switch personal/organization mode |
| GET | /v1/accounts/{accountId}/linkedin-mentions | Get LinkedIn mentions |
| GET | /v1/accounts/{accountId}/linkedin-aggregate-analytics | Get LinkedIn analytics |
| GET | /v1/accounts/{accountId}/linkedin-post-analytics | Get LinkedIn post analytics |
| GET | /v1/accounts/{accountId}/pinterest-boards | List Pinterest boards |
| PUT | /v1/accounts/{accountId}/pinterest-boards | Set default Pinterest board |
| GET | /v1/accounts/{accountId}/reddit-subreddits | List user's subreddits |
| PUT | /v1/accounts/{accountId}/reddit-subreddits | Set default subreddit |
curl "https://getlate.dev/api/v1/accounts?profileId=PROFILE_ID" \
-H "Authorization: Bearer YOUR_API_KEY"
curl "https://getlate.dev/api/v1/accounts/health" \
-H "Authorization: Bearer YOUR_API_KEY"
Response indicates if tokens are valid or need reconnection.
| Method | Endpoint | Description |
|--------|----------|-------------|
| GET | /v1/account-groups | List account groups |
| POST | /v1/account-groups | Create account group |
| PUT | /v1/account-groups/{groupId} | Update account group |
| DELETE | /v1/account-groups/{groupId} | Delete account group |
Account groups let you organize accounts for bulk posting operations.
File v0.1.0:rules/analytics.md
| Method | Endpoint | Description |
|--------|----------|-------------|
| GET | /v1/analytics | Get general analytics |
| GET | /v1/analytics/youtube/daily-views | Get YouTube video daily views |
| GET | /v1/accounts/{accountId}/linkedin-aggregate-analytics | LinkedIn account analytics |
| GET | /v1/accounts/{accountId}/linkedin-post-analytics | LinkedIn post analytics |
| GET | /v1/accounts/follower-stats | Follower count history |
curl "https://getlate.dev/api/v1/analytics/youtube/daily-views?accountId=ACCOUNT_ID&videoId=VIDEO_ID&startDate=2024-01-01&endDate=2024-01-31" \
-H "Authorization: Bearer YOUR_API_KEY"
Response:
{
"success": true,
"videoId": "dQw4w9WgXcQ",
"dateRange": {
"startDate": "2024-01-01",
"endDate": "2024-01-31"
},
"totalViews": 15420,
"dailyViews": [
{
"date": "2024-01-01",
"views": 523,
"estimatedMinutesWatched": 1045,
"averageViewDuration": 120,
"subscribersGained": 12,
"subscribersLost": 2,
"likes": 45,
"comments": 8,
"shares": 15
}
]
}
Note: Requires yt-analytics.readonly scope. If missing, response includes reauthorizeUrl.
# Aggregate analytics for account
curl "https://getlate.dev/api/v1/accounts/ACCOUNT_ID/linkedin-aggregate-analytics" \
-H "Authorization: Bearer YOUR_API_KEY"
# Analytics for specific post
curl "https://getlate.dev/api/v1/accounts/ACCOUNT_ID/linkedin-post-analytics?postUrn=URN" \
-H "Authorization: Bearer YOUR_API_KEY"
curl "https://getlate.dev/api/v1/accounts/follower-stats?profileId=PROFILE_ID" \
-H "Authorization: Bearer YOUR_API_KEY"
Returns historical follower counts across all connected accounts.
File v0.1.0:rules/authentication.md
sk_a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0u1v2w3x4y5z6
sk_curl https://getlate.dev/api/v1/profiles \
-H "Authorization: Bearer YOUR_API_KEY"
const response = await fetch('https://getlate.dev/api/v1/profiles', {
headers: {
'Authorization': `Bearer ${process.env.LATE_API_KEY}`
}
});
import requests
response = requests.get(
'https://getlate.dev/api/v1/profiles',
headers={'Authorization': f'Bearer {api_key}'}
)
Profile (brand/project)
└── Account (connected social account)
└── Post (content to publish)
File v0.1.0:rules/connect.md
| Method | Endpoint | Description |
|--------|----------|-------------|
| GET | /v1/connect/{platform} | Start OAuth flow |
| POST | /v1/connect/bluesky/credentials | Connect Bluesky (app password) |
| GET | /v1/connect/telegram | Generate Telegram access code |
| POST | /v1/connect/telegram | Direct connect via chat ID |
| PATCH | /v1/connect/telegram | Poll connection status |
Some platforms require selecting a page/location after OAuth:
| Method | Endpoint | Description |
|--------|----------|-------------|
| GET | /v1/connect/facebook/select-page | List Facebook pages |
| POST | /v1/connect/facebook/select-page | Select Facebook page |
| GET | /v1/connect/linkedin/organizations | List available LinkedIn orgs |
| POST | /v1/connect/linkedin/select-organization | Select LinkedIn org |
| GET | /v1/connect/googlebusiness/locations | List GMB locations |
| POST | /v1/connect/googlebusiness/select-location | Select GMB location |
| GET | /v1/connect/pinterest/select-board | List Pinterest boards |
| POST | /v1/connect/pinterest/select-board | Select Pinterest board |
| GET | /v1/connect/snapchat/select-profile | List Snapchat profiles |
| POST | /v1/connect/snapchat/select-profile | Select Snapchat profile |
# Get OAuth URL
curl "https://getlate.dev/api/v1/connect/twitter?profileId=PROFILE_ID&callbackUrl=https://yourapp.com/callback" \
-H "Authorization: Bearer YOUR_API_KEY"
Returns { "url": "https://twitter.com/oauth/..." } - redirect user there.
curl -X POST https://getlate.dev/api/v1/connect/bluesky/credentials \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"profileId": "PROFILE_ID",
"identifier": "user.bsky.social",
"appPassword": "xxxx-xxxx-xxxx-xxxx"
}'
Option 1: Access Code Flow (recommended)
# 1. Generate access code
curl "https://getlate.dev/api/v1/connect/telegram?profileId=PROFILE_ID" \
-H "Authorization: Bearer YOUR_API_KEY"
# Returns: { "code": "LATE-ABC123", "botUsername": "LateScheduleBot", ... }
# 2. User adds bot to channel and sends code to bot
# 3. Poll for connection status
curl -X PATCH "https://getlate.dev/api/v1/connect/telegram?code=LATE-ABC123" \
-H "Authorization: Bearer YOUR_API_KEY"
# Returns: { "status": "pending" } or { "status": "connected", "account": {...} }
Option 2: Direct Chat ID (power users)
curl -X POST https://getlate.dev/api/v1/connect/telegram \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"profileId": "PROFILE_ID",
"chatId": "-1001234567890"
}'
The Late bot must already be added as admin in your channel/group.
| Platform | Auth Method | Notes | |----------|-------------|-------| | Twitter/X | OAuth 2.0 PKCE | Requires code verifier | | Instagram | OAuth 2.0 | 2-step token exchange | | Facebook | OAuth 2.0 | Requires page selection | | LinkedIn | OAuth 2.0 | Optional org selection | | TikTok | OAuth 2.0 | UX compliance required | | YouTube | Google OAuth | access_type=offline | | Pinterest | OAuth 2.0 | Requires board selection | | Reddit | OAuth 2.0 | Strict user-agent | | Bluesky | App password | No OAuth, uses AT Protocol | | Threads | OAuth 2.0 | Similar to Instagram | | Google Business | Google OAuth | Requires location selection | | Telegram | Chat ID | Uses Late's bot | | Snapchat | OAuth 2.0 | Allowlist-only |
File v0.1.0:rules/errors.md
{
"error": "Invalid API key",
"code": "UNAUTHORIZED",
"details": {}
}
| Status | Code | Meaning |
|--------|------|---------|
| 400 | BAD_REQUEST | Invalid parameters |
| 401 | UNAUTHORIZED | Invalid/missing API key |
| 403 | FORBIDDEN | Insufficient permissions |
| 404 | NOT_FOUND | Resource not found |
| 422 | VALIDATION_ERROR | Validation failed |
| 429 | RATE_LIMITED | Too many requests |
| 500 | INTERNAL_ERROR | Server error |
| Plan | Requests/Minute | |------|-----------------| | Free | 60 | | Build | 120 | | Accelerate | 600 | | Unlimited | 1,200 |
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 45
X-RateLimit-Reset: 1709294400
async function fetchWithRetry(url: string, options: RequestInit) {
const response = await fetch(url, options);
if (response.status === 429) {
const resetTime = response.headers.get('X-RateLimit-Reset');
const waitMs = (Number(resetTime) * 1000) - Date.now();
await sleep(Math.max(waitMs, 1000));
return fetchWithRetry(url, options);
}
return response;
}
Check post logs for platform-specific errors:
curl "https://getlate.dev/api/v1/posts/POST_ID/logs" \
-H "Authorization: Bearer YOUR_API_KEY"
| Method | Endpoint | Description |
|--------|----------|-------------|
| GET | /v1/logs | List all publishing logs |
| GET | /v1/logs/{logId} | Get specific log entry |
| GET | /v1/posts/{postId}/logs | Get logs for a post |
Logs are retained for 7 days.
File v0.1.0:rules/media.md
| Method | Endpoint | Description |
|--------|----------|-------------|
| POST | /v1/media/presign | Get presigned upload URL |
curl -X POST https://getlate.dev/api/v1/media/presign \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"filename": "image.jpg", "contentType": "image/jpeg"}'
// 1. Get presigned URL
const { uploadUrl, fileUrl } = await getPresignedUrl('image.jpg', 'image/jpeg');
// 2. Upload to presigned URL
await fetch(uploadUrl, {
method: 'PUT',
body: fileBuffer,
headers: { 'Content-Type': 'image/jpeg' }
});
// 3. Use fileUrl in post
await createPost({
content: 'Check this out!',
mediaItems: [{ type: 'image', url: fileUrl }],
platforms: [{ platform: 'twitter', accountId: 'acc_123' }]
});
| Type | Formats | Max Size | |------|---------|----------| | Images | JPG, PNG, WebP, GIF | 5MB | | Videos | MP4, MOV, WebM | 5GB | | Documents | PDF (LinkedIn only) | 100MB |
| Platform | Max Images | Max Video | Special | |----------|-----------|-----------|---------| | Instagram | 8MB | 100MB stories, 300MB reels | 4:5 to 1.91:1 aspect | | TikTok | 20MB | 4GB, 10min max | 9:16 strict | | Twitter | 5MB | 512MB, 2min 20s | 1-4 images | | LinkedIn | 8MB | 5GB | 20 image carousel | | YouTube | 2MB thumbnail | 256GB | Resumable upload | | Facebook | 10MB | 4GB | 10 multi-image | | Threads | 8MB | 1GB, 5min | 10 carousel | | Pinterest | 32MB | 2GB | Requires cover image | | Bluesky | 1MB | 50MB, 3min | 4 images max | | Snapchat | 20MB | 500MB | AES encryption required | | Google Business | 5MB | N/A | Images only | | Reddit | 20MB | N/A | Via URL | | Telegram | 10MB | 50MB | 4096 char limit |
File v0.1.0:rules/platforms.md
| Platform | OAuth | Features | |----------|-------|----------| | Twitter/X | Yes | Posts, threads, images, videos | | Instagram | Yes | Feed, Stories, Reels, Carousels | | Facebook | Yes | Pages, Reels, Stories | | LinkedIn | Yes | Posts, images, videos, documents | | TikTok | Yes | Videos with privacy controls | | YouTube | Yes | Videos, Shorts | | Pinterest | Yes | Pins with images/videos | | Reddit | Yes | Posts with subreddit targeting | | Bluesky | App password | Posts, images, videos | | Threads | Yes | Posts, images, videos | | Google Business | Yes | Updates, photos, offers | | Telegram | Bot token | Messages, images, videos | | Snapchat | Yes | Stories, Spotlight |
Platform-specific data goes inside each platform entry in the platforms array:
{
"platforms": [
{
"platform": "instagram",
"accountId": "acc_123",
"platformSpecificData": { ... }
}
]
}
{
"platformSpecificData": {
"threadItems": [
{ "content": "Second tweet" },
{ "content": "Third tweet", "mediaItems": [{ "type": "image", "url": "..." }] }
]
}
}
{
"platformSpecificData": {
"contentType": "story",
"firstComment": "First comment!",
"collaborators": ["username"],
"shareToFeed": true,
"userTags": [{ "username": "user", "x": 0.5, "y": 0.5 }],
"trialParams": { "graduationStrategy": "SS_PERFORMANCE" },
"audioName": "My Custom Audio",
"thumbOffset": 5000
}
}
contentType: "story" publishes as a Story. Default posts become Reels or feed based on media.trialParams for Trial Reels (non-followers first): MANUAL or SS_PERFORMANCE (auto-graduate)audioName sets custom label for original audio in ReelsthumbOffset selects thumbnail frame (milliseconds from start){
"platformSpecificData": {
"privacyLevel": "PUBLIC_TO_EVERYONE",
"allowComment": true,
"allowDuet": true,
"allowStitch": true,
"contentPreviewConfirmed": true,
"expressConsentGiven": true,
"draft": false,
"commercialContentType": "none",
"videoMadeWithAi": false,
"videoCoverTimestampMs": 1000,
"photoCoverIndex": 0,
"autoAddMusic": false,
"description": "Extended description for photo posts (max 4000 chars)"
}
}
Required fields:
contentPreviewConfirmed and expressConsentGiven must be trueallowDuet, allowStitch required for videos; allowComment for allOptional fields:
draft: true sends to Creator Inbox instead of publishingcommercialContentType: none, brand_organic, brand_contentbrandPartnerPromote: Whether the post promotes a brand partnerisBrandOrganicPost: Whether the post is a brand organic postmediaType: video or photo (auto-detected from media)description for photo posts when content exceeds 90 chars{
"platformSpecificData": {
"title": "Video Title",
"visibility": "public",
"firstComment": "Check out my other videos!",
"containsSyntheticMedia": false
}
}
visibility: public, private, unlistedfirstComment: Optional comment posted after upload (max 10,000 chars)containsSyntheticMedia: Set true for AI-generated content disclosuretags array for video tags (≤500 chars total){
"platformSpecificData": {
"title": "Pin Title",
"boardId": "board_123",
"link": "https://example.com",
"coverImageUrl": "https://example.com/cover.jpg",
"coverImageKeyFrameTime": 5
}
}
title: Pin title (max 100 chars, defaults to first line of content)boardId: Target board (uses first available if omitted)coverImageUrl: Optional cover image for video pinscoverImageKeyFrameTime: Key frame time in seconds for video cover{
"platformSpecificData": {
"callToAction": {
"type": "LEARN_MORE",
"url": "https://example.com"
}
}
}
Action types: BOOK, ORDER, SHOP, LEARN_MORE, SIGN_UP, CALL
{
"platformSpecificData": {
"firstComment": "First comment on the post",
"disableLinkPreview": false
}
}
Supports up to 20 images, single PDF documents (max 100MB), and link previews for URLs.
{
"platformSpecificData": {
"contentType": "story",
"firstComment": "First comment!",
"pageId": "123456789"
}
}
Set contentType: "story" to publish as a Facebook Page Story (24-hour ephemeral). Supports up to 10 images for feed posts.
{
"platformSpecificData": {
"threadItems": [
{ "content": "Second post in thread" },
{ "content": "Third post", "mediaItems": [{ "type": "image", "url": "..." }] }
]
}
}
Creates reply chains (Threads equivalent of Twitter threads). Supports up to 10 images per carousel.
{
"platformSpecificData": {
"parseMode": "HTML",
"disableWebPagePreview": false,
"disableNotification": false,
"protectContent": false
}
}
Parse modes: HTML, Markdown, MarkdownV2. Supports up to 10 images or videos in albums. Max 4096 chars for text-only, 1024 for media captions.
{
"platformSpecificData": {
"contentType": "story"
}
}
Content types:
story - Ephemeral (24 hours), no text captionsaved_story - Permanent on Public Profile, title max 45 charsspotlight - Video for entertainment feed, description max 160 charsFile v0.1.0:rules/posts.md
| Method | Endpoint | Description |
|--------|----------|-------------|
| POST | /v1/posts | Create post |
| GET | /v1/posts | List posts |
| GET | /v1/posts/{postId} | Get post |
| PUT | /v1/posts/{postId} | Update post |
| DELETE | /v1/posts/{postId} | Delete post |
| POST | /v1/posts/{postId}/retry | Retry failed post |
| GET | /v1/posts/{postId}/logs | Get publishing logs |
| POST | /v1/posts/bulk-upload | Bulk create posts |
const post = await fetch('https://getlate.dev/api/v1/posts', {
method: 'POST',
headers: {
'Authorization': `Bearer ${apiKey}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
// Required
content: 'Your post content here',
platforms: [
{
platform: 'twitter',
accountId: 'acc_123',
// Platform-specific data goes inside each platform entry
platformSpecificData: {
threadItems: [
{ content: 'Tweet 2' },
{ content: 'Tweet 3', mediaItems: [{ type: 'image', url: 'https://...' }] }
]
}
},
{
platform: 'instagram',
accountId: 'acc_456',
platformSpecificData: {
contentType: 'story', // only 'story' is explicit; feed/reel auto-determined by media
firstComment: 'First comment text'
}
}
],
// Scheduling (pick one)
publishNow: true, // Publish immediately
// OR
scheduledFor: '2024-03-01T10:00:00Z', // Schedule for later
// OR
queuedFromProfile: 'prof_123', // Add to queue
// Optional media (array of objects)
mediaItems: [
{ type: 'image', url: 'https://...' },
{ type: 'video', url: 'https://...' }
]
})
});
await fetch('https://getlate.dev/api/v1/posts', {
method: 'POST',
headers: {
'Authorization': `Bearer ${apiKey}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
content: 'Announcing our new feature!',
platforms: [
{ platform: 'twitter', accountId: 'tw_123' },
{ platform: 'linkedin', accountId: 'li_456' },
{ platform: 'facebook', accountId: 'fb_789' }
],
publishNow: true
})
});
await fetch('https://getlate.dev/api/v1/posts', {
method: 'POST',
headers: {
'Authorization': `Bearer ${apiKey}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
content: 'Scheduled post',
platforms: [{ platform: 'twitter', accountId: 'acc_123' }],
scheduledFor: '2024-03-15T09:00:00Z'
})
});
# List failed posts
curl "https://getlate.dev/api/v1/posts?status=failed" \
-H "Authorization: Bearer YOUR_API_KEY"
# Retry a specific post
curl -X POST "https://getlate.dev/api/v1/posts/POST_ID/retry" \
-H "Authorization: Bearer YOUR_API_KEY"
File v0.1.0:rules/queue.md
| Method | Endpoint | Description |
|--------|----------|-------------|
| GET | /v1/queue/preview | Preview queue for profile |
| GET | /v1/queue/next-slot | Get next available slot |
| GET | /v1/queue/slots | Get queue slot configuration |
| POST | /v1/queue/slots | Create a new queue |
| PUT | /v1/queue/slots | Update queue slots |
| DELETE | /v1/queue/slots | Delete a queue schedule |
curl -X POST https://getlate.dev/api/v1/posts \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"content": "Queued post",
"platforms": [{ "platform": "twitter", "accountId": "acc_123" }],
"queuedFromProfile": "PROFILE_ID"
}'
curl "https://getlate.dev/api/v1/queue/preview?profileId=PROFILE_ID" \
-H "Authorization: Bearer YOUR_API_KEY"
Returns upcoming scheduled posts in queue order.
curl "https://getlate.dev/api/v1/queue/next-slot?profileId=PROFILE_ID" \
-H "Authorization: Bearer YOUR_API_KEY"
Returns the next available time slot for posting.
curl -X PUT https://getlate.dev/api/v1/queue/slots \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"profileId": "PROFILE_ID",
"queueId": "QUEUE_ID",
"slots": [
{ "dayOfWeek": 1, "time": "09:00" },
{ "dayOfWeek": 1, "time": "12:00" },
{ "dayOfWeek": 1, "time": "18:00" }
],
"timezone": "America/New_York"
}'
Queue slots define when posts are automatically published.
dayOfWeek: 0-6 (0=Sunday, 6=Saturday)time: 24-hour format "HH:mm"Machine endpoints, contract coverage, trust signals, runtime metrics, benchmarks, and guardrails for agent-to-agent use.
Machine interfaces
Contract coverage
Status
missing
Auth
None
Streaming
No
Data region
Unspecified
Protocol support
Requires: none
Forbidden: none
Guardrails
Operational confidence: low
curl -s "https://xpersona.co/api/v1/agents/clawhub-mikipalet-late-api/snapshot"
curl -s "https://xpersona.co/api/v1/agents/clawhub-mikipalet-late-api/contract"
curl -s "https://xpersona.co/api/v1/agents/clawhub-mikipalet-late-api/trust"
Operational fit
Trust signals
Handshake
UNKNOWN
Confidence
unknown
Attempts 30d
unknown
Fallback rate
unknown
Runtime metrics
Observed P50
unknown
Observed P95
unknown
Rate limit
unknown
Estimated cost
unknown
Do not use if
Raw contract, invocation, trust, capability, facts, and change-event payloads for machine-side inspection.
Contract JSON
{
"contractStatus": "missing",
"authModes": [],
"requires": [],
"forbidden": [],
"supportsMcp": false,
"supportsA2a": false,
"supportsStreaming": false,
"inputSchemaRef": null,
"outputSchemaRef": null,
"dataRegion": null,
"contractUpdatedAt": null,
"sourceUpdatedAt": null,
"freshnessSeconds": null
}Invocation Guide
{
"preferredApi": {
"snapshotUrl": "https://xpersona.co/api/v1/agents/clawhub-mikipalet-late-api/snapshot",
"contractUrl": "https://xpersona.co/api/v1/agents/clawhub-mikipalet-late-api/contract",
"trustUrl": "https://xpersona.co/api/v1/agents/clawhub-mikipalet-late-api/trust"
},
"curlExamples": [
"curl -s \"https://xpersona.co/api/v1/agents/clawhub-mikipalet-late-api/snapshot\"",
"curl -s \"https://xpersona.co/api/v1/agents/clawhub-mikipalet-late-api/contract\"",
"curl -s \"https://xpersona.co/api/v1/agents/clawhub-mikipalet-late-api/trust\""
],
"jsonRequestTemplate": {
"query": "summarize this repo",
"constraints": {
"maxLatencyMs": 2000,
"protocolPreference": [
"OPENCLEW"
]
}
},
"jsonResponseTemplate": {
"ok": true,
"result": {
"summary": "...",
"confidence": 0.9
},
"meta": {
"source": "CLAWHUB",
"generatedAt": "2026-04-17T05:54:08.241Z"
}
},
"retryPolicy": {
"maxAttempts": 3,
"backoffMs": [
500,
1500,
3500
],
"retryableConditions": [
"HTTP_429",
"HTTP_503",
"NETWORK_TIMEOUT"
]
}
}Trust JSON
{
"status": "unavailable",
"handshakeStatus": "UNKNOWN",
"verificationFreshnessHours": null,
"reputationScore": null,
"p95LatencyMs": null,
"successRate30d": null,
"fallbackRate": null,
"attempts30d": null,
"trustUpdatedAt": null,
"trustConfidence": "unknown",
"sourceUpdatedAt": null,
"freshnessSeconds": null
}Capability Matrix
{
"rows": [
{
"key": "OPENCLEW",
"type": "protocol",
"support": "unknown",
"confidenceSource": "profile",
"notes": "Listed on profile"
}
],
"flattenedTokens": "protocol:OPENCLEW|unknown|profile"
}Facts JSON
[
{
"factKey": "vendor",
"category": "vendor",
"label": "Vendor",
"value": "Clawhub",
"href": "https://clawhub.ai/mikipalet/late-api",
"sourceUrl": "https://clawhub.ai/mikipalet/late-api",
"sourceType": "profile",
"confidence": "medium",
"observedAt": "2026-04-15T00:45:39.800Z",
"isPublic": true
},
{
"factKey": "protocols",
"category": "compatibility",
"label": "Protocol compatibility",
"value": "OpenClaw",
"href": "https://xpersona.co/api/v1/agents/clawhub-mikipalet-late-api/contract",
"sourceUrl": "https://xpersona.co/api/v1/agents/clawhub-mikipalet-late-api/contract",
"sourceType": "contract",
"confidence": "medium",
"observedAt": "2026-04-15T00:45:39.800Z",
"isPublic": true
},
{
"factKey": "traction",
"category": "adoption",
"label": "Adoption signal",
"value": "2K downloads",
"href": "https://clawhub.ai/mikipalet/late-api",
"sourceUrl": "https://clawhub.ai/mikipalet/late-api",
"sourceType": "profile",
"confidence": "medium",
"observedAt": "2026-04-15T00:45:39.800Z",
"isPublic": true
},
{
"factKey": "latest_release",
"category": "release",
"label": "Latest release",
"value": "0.1.0",
"href": "https://clawhub.ai/mikipalet/late-api",
"sourceUrl": "https://clawhub.ai/mikipalet/late-api",
"sourceType": "release",
"confidence": "medium",
"observedAt": "2026-01-26T07:42:09.192Z",
"isPublic": true
},
{
"factKey": "handshake_status",
"category": "security",
"label": "Handshake status",
"value": "UNKNOWN",
"href": "https://xpersona.co/api/v1/agents/clawhub-mikipalet-late-api/trust",
"sourceUrl": "https://xpersona.co/api/v1/agents/clawhub-mikipalet-late-api/trust",
"sourceType": "trust",
"confidence": "medium",
"observedAt": null,
"isPublic": true
}
]Change Events JSON
[
{
"eventType": "release",
"title": "Release 0.1.0",
"description": "Initial release of late-api skill - Publishes the official Late API reference for scheduling posts across 13 social media platforms. - Includes quick start guide with API endpoints for profiles, accounts, and post creation. - Documents authentication, endpoints, OAuth, webhooks, media uploads, analytics, errors, and platform specifics. - Provides links to detailed rule files for each API area. - Lists all supported social platforms.",
"href": "https://clawhub.ai/mikipalet/late-api",
"sourceUrl": "https://clawhub.ai/mikipalet/late-api",
"sourceType": "release",
"confidence": "medium",
"observedAt": "2026-01-26T07:42:09.192Z",
"isPublic": true
}
]Sponsored
Ads related to Late API and adjacent AI workflows.