Write Post API
Schedule Post
Schedule a post by setting scheduled_at on create.
POST
/api/v1/write-post/posts/
Live
There is no separate /schedule route. Scheduling uses Create Post with a future scheduled_at (ISO 8601). Timezone follows the account’s active workspace.
Notes
- Past scheduled_at values are rejected.
- A dedicated POST /posts/{id}/schedule route is not implemented.
- Post status will typically be scheduled until delivery runs.
Body fields
| Name | Type | Required | Description |
|---|---|---|---|
headline |
string | Yes | Post headline (or title). |
content |
string | Yes | Post body. |
connection_ids |
array[integer] | Yes | Target connections. |
scheduled_at |
string (ISO 8601) | Yes | Must be a future datetime. Example: 2026-12-01T15:30:00Z |
Headers
HTTP
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json
Request body
JSON
{
"headline": "Scheduled update",
"content": "<p>Later today</p>",
"connection_ids": [1],
"scheduled_at": "2026-12-01T15:30:00Z"
}
Examples
cURL
curl -X POST "https://YOUR-DOMAIN/api/v1/write-post/posts/" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"headline":"Scheduled","content":"<p>Later</p>","connection_ids":[1],"scheduled_at":"2026-12-01T15:30:00Z"}'
JavaScript
const response = await fetch("https://engagegrove.com/api/v1/write-post/posts/", {
method: "POST",
headers: {
Authorization: "Bearer YOUR_API_KEY",
Accept: "application/json",
"Content-Type": "application/json"
},
body: JSON.stringify({
"headline": "Scheduled update",
"content": "<p>Later today</p>",
"connection_ids": [1],
"scheduled_at": "2026-12-01T15:30:00Z"
})
});
const data = await response.json();
Python
import requests
import json
url = "https://engagegrove.com/api/v1/write-post/posts/"
headers = {
"Authorization": "Bearer YOUR_API_KEY",
"Accept": "application/json",
}
payload = json.loads("""{
"headline": "Scheduled update",
"content": "<p>Later today</p>",
"connection_ids": [1],
"scheduled_at": "2026-12-01T15:30:00Z"
}""")
response = requests.request("POST", url, headers=headers, json=payload)
print(response.json())
PHP
$ch = curl_init("https://engagegrove.com/api/v1/write-post/posts/");
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer YOUR_API_KEY",
"Accept: application/json",
"Content-Type: application/json"
],
CURLOPT_POSTFIELDS => <<<'JSON'
{
"headline": "Scheduled update",
"content": "<p>Later today</p>",
"connection_ids": [1],
"scheduled_at": "2026-12-01T15:30:00Z"
}
JSON
]);
$response = curl_exec($ch);
curl_close($ch);
Response example
JSON
{
"success": true,
"request_id": "req_...",
"data": { "post": { "id": 2, "status": "scheduled" } }
}
Status codes
| Status | Meaning |
|---|---|
201 | Post scheduled |
400 | Validation error (e.g. past scheduled_at) |
401 | Invalid API key |
403 | Missing write_post permission |
429 | Rate limit exceeded |
Try it
Paste your API key locally. It is sent only to this site’s API and is never saved.
Status: · Time: ms · Request ID:
Response
Errors
INVALID_API_KEY— missing/invalid Bearer tokenSERVICE_ACCESS_DENIED— key lackswrite_postVALIDATION_ERROR— invalid payload or domain validationRESOURCE_NOT_FOUND— unknown resourceRATE_LIMIT_EXCEEDED— too many requests