Publish now
POST /v1/posts/:id/publish-now scope write
Takes the pending items out of the queue and publishes them now (?network= limits it to one network).
Headers
Authorization: Bearer praeko_… and X-Praeko-Contract: en. Always send both.Legacy Portuguese alias (still answered, marked as deprecated): /v1/posts/:id/publicar-agora.
Parameters
| Name | In | Description |
|---|---|---|
id |
path | Post id. |
network |
query | Publish only the items of this network. Values: youtube, instagram, tiktok. |
Idempotency-Key |
header | Idempotency key (1 to 255 visible characters, for example a UUID). Repeating the SAME request with the same key within 24 h returns the stored response (with Idempotent-Replayed: true) without running it again; a different request with the same key returns 422 idempotency_key_reuse; a request still in progress returns 409 idempotency_in_progress. 5xx errors are not stored. The key is scoped per workspace and per route. See Retry a request safely. |
Example
curl -X POST "https://praeko.app/v1/posts/01KA3W2Y6H1RC5ZQ8M0T4VXE7N/publish-now" \
-H "Authorization: Bearer $PRAEKO_KEY" \
-H "X-Praeko-Contract: en"const res = await fetch("https://praeko.app/v1/posts/01KA3W2Y6H1RC5ZQ8M0T4VXE7N/publish-now", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.PRAEKO_KEY}`,
"X-Praeko-Contract": "en",
},
});
console.log(res.status, await res.json());import { Praeko } from "@praeko/sdk";
const praeko = new Praeko({ url: "https://praeko.app", key: process.env.PRAEKO_KEY });
const resultado = await praeko.posts.publishNow("01KA3W2Y6H1RC5ZQ8M0T4VXE7N");
console.log(resultado);import os
import requests
resp = requests.post(
"https://praeko.app/v1/posts/01KA3W2Y6H1RC5ZQ8M0T4VXE7N/publish-now",
headers={
"Authorization": f"Bearer {os.environ['PRAEKO_KEY']}",
"X-Praeko-Contract": "en",
},
)
print(resp.status_code, resp.json())<?php
$ch = curl_init('https://praeko.app/v1/posts/01KA3W2Y6H1RC5ZQ8M0T4VXE7N/publish-now');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
"Authorization: Bearer " . getenv("PRAEKO_KEY"),
'X-Praeko-Contract: en',
],
]);
$resposta = curl_exec($ch);
echo curl_getinfo($ch, CURLINFO_HTTP_CODE), " ", $resposta, PHP_EOL;
curl_close($ch);package main
import (
"fmt"
"io"
"net/http"
"os"
)
func main() {
req, err := http.NewRequest("POST", "https://praeko.app/v1/posts/01KA3W2Y6H1RC5ZQ8M0T4VXE7N/publish-now", nil)
if err != nil {
panic(err)
}
req.Header.Set("Authorization", "Bearer "+os.Getenv("PRAEKO_KEY"))
req.Header.Set("X-Praeko-Contract", "en")
resp, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
out, _ := io.ReadAll(resp.Body)
fmt.Println(resp.Status, string(out))
}require "net/http"
require "uri"
uri = URI("https://praeko.app/v1/posts/01KA3W2Y6H1RC5ZQ8M0T4VXE7N/publish-now")
request = Net::HTTP::Post.new(uri)
request["Authorization"] = "Bearer #{ENV['PRAEKO_KEY']}"
request["X-Praeko-Contract"] = "en"
response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) { |http| http.request(request) }
puts response.code, response.bodyusing System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using var client = new HttpClient();
using var request = new HttpRequestMessage(HttpMethod.Post, "https://praeko.app/v1/posts/01KA3W2Y6H1RC5ZQ8M0T4VXE7N/publish-now");
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", Environment.GetEnvironmentVariable("PRAEKO_KEY"));
request.Headers.Add("X-Praeko-Contract", "en");
using var response = await client.SendAsync(request);
Console.WriteLine($"{(int)response.StatusCode} {await response.Content.ReadAsStringAsync()}");import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Main {
public static void main(String[] args) throws Exception {
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://praeko.app/v1/posts/01KA3W2Y6H1RC5ZQ8M0T4VXE7N/publish-now"))
.header("Authorization", "Bearer " + System.getenv("PRAEKO_KEY"))
.header("X-Praeko-Contract", "en")
.method("POST", HttpRequest.BodyPublishers.noBody())
.build();
HttpResponse<String> response = HttpClient.newHttpClient().send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.statusCode() + " " + response.body());
}
}http POST "https://praeko.app/v1/posts/01KA3W2Y6H1RC5ZQ8M0T4VXE7N/publish-now" \
"Authorization: Bearer $PRAEKO_KEY" \
"X-Praeko-Contract: en"Official SDK for NodeInstall it with
npm install @praeko/sdk (see SDK and CLI).No official SDKExample with the language's standard library (or HTTP client). Only the JavaScript SDK exists.
No official SDKExample with the language's standard library (or HTTP client). Only the JavaScript SDK exists.
No official SDKExample with the language's standard library (or HTTP client). Only the JavaScript SDK exists.
No official SDKExample with the language's standard library (or HTTP client). Only the JavaScript SDK exists.
No official SDKExample with the language's standard library (or HTTP client). Only the JavaScript SDK exists.
No official SDKExample with the language's standard library (or HTTP client). Only the JavaScript SDK exists.
Response
| Success status | When |
|---|---|
200 |
Success. |
{
"id": "01KA3W2Y6H1RC5ZQ8M0T4VXE7N",
"title": "The test that only failed on Mondays (final cut)",
"state": "queued",
"type": "short",
"kind": "video",
"origin": "api",
"media": {
"video": "01KA3VQ7M2T9XE4HB8N5RZ6C0D",
"cover": null
},
"texts": {
"youtube": {
"title": "The test that only failed on Mondays",
"text": "A test that passed from Tuesday to Sunday. What it was hiding.\n\n#programming #testing"
}
},
"tags": [
"behind-the-scenes",
"testing"
],
"thumb": null,
"items": [
{
"id": "01KA3W2Y6J9D3BNF7G2K5PQS8A",
"network": "youtube",
"channel": "01KA3V0R5D8M2WQ7X4HT9NZ1BF",
"state": "scheduled",
"scheduledFor": null,
"custom": false,
"mode": "public",
"runAt": "2026-11-07T14:02:11.482Z",
"thumb": null
}
],
"createdAt": "2026-11-07T14:02:11.482Z",
"updatedAt": "2026-11-07T15:40:03.120Z",
"actions": []
}Returns the post with the item already out of the queue (runAt is now); publishing happens right after. Use ?network= to release just one item.
Errors
| Status | code | When |
|---|---|---|
| 422 | idempotency_key_reuse |
The Idempotency-Key was already used with a different request (different method, path, query or body). |
| 409 | idempotency_in_progress |
A request with the same Idempotency-Key is still in progress (retry in a moment). |
| 409 | idempotency_response_too_large |
The original response was larger than 256 KB and was not stored; fetch the resource with GET instead. |
Errors on any route
| Status | code | When |
|---|---|---|
| 401 | unauthorized |
The Authorization: Bearer … header is missing. |
| 401 | invalid_api_key |
The key does not exist. |
| 401 | revoked_api_key |
The key has been revoked. |
| 401 | expired_api_key |
The key has expired. |
| 403 | forbidden |
The key's scope is not enough for this route (see the scope badge). |
| 429 | rate_limited |
The per-minute request limit was exceeded. |
The body of every error is { "error": { "code", "message", "details"? } }. See all error codes.
Try it
Try it
Sign in to try itThe live test uses your key and your account. It stays off when you are not signed in.
Question or mistake on this page? contato@praeko.appView .md