Comments from all networks
GET /v1/comments scope read
Comments from all networks together, from EVERY active account on each network (each comment carries channel; channel filters one account; an account that fails goes into errors and the others still respond).
Headers
Authorization: Bearer praeko_… and X-Praeko-Contract: en. Always send both.Legacy Portuguese alias (still answered, marked as deprecated): /v1/comentarios.
Parameters
| Name | In | Description |
|---|---|---|
network |
query | Limit to one network (all combines every network). Values: all, youtube, instagram. |
channel |
query | Account id when the network has several (from GET /v1/channels). Without it, the default channel. |
Example
curl "https://praeko.app/v1/comments" \
-H "Authorization: Bearer $PRAEKO_KEY" \
-H "X-Praeko-Contract: en"const res = await fetch("https://praeko.app/v1/comments", {
method: "GET",
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.community.comments();
console.log(resultado);import os
import requests
resp = requests.get(
"https://praeko.app/v1/comments",
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/comments');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'GET',
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("GET", "https://praeko.app/v1/comments", 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/comments")
request = Net::HTTP::Get.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.Get, "https://praeko.app/v1/comments");
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/comments"))
.header("Authorization", "Bearer " + System.getenv("PRAEKO_KEY"))
.header("X-Praeko-Contract", "en")
.method("GET", HttpRequest.BodyPublishers.noBody())
.build();
HttpResponse<String> response = HttpClient.newHttpClient().send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.statusCode() + " " + response.body());
}
}http GET "https://praeko.app/v1/comments" \
"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. |
{
"comments": [
{
"id": "17900123456789012",
"network": "instagram",
"mediaId": "17858893269123456",
"author": "tristao.dev",
"text": "This is awesome, which database do you use?",
"publishedAt": "2026-11-04T16:46:50+0000",
"likes": 1,
"fromOwner": false,
"hidden": false,
"replyCount": 1,
"answered": true,
"replies": [
{
"id": "17900123456789999",
"network": "instagram",
"mediaId": "17858893269123456",
"author": "dev.ocioso",
"text": "Thanks! It's Cloudflare D1.",
"publishedAt": "2026-11-04T19:00:00+0000",
"likes": 0,
"fromOwner": true,
"hidden": false
}
],
"media": {
"id": "17858893269123456",
"title": "Monday Reel: the failing test",
"thumbnail": "https://cdn.example.com/reel.jpg",
"type": "reel",
"permalink": "https://www.instagram.com/reel/DAbCdEfGhIj/",
"publishedAt": "2026-11-04T10:57:00+0000"
},
"resolved": false
},
{
"id": "UgzK3n8vYb2Qx4mH7dB4AaABAg",
"videoId": "dQw4w9WgXcQ",
"author": "Ana",
"authorChannel": "UCxk3n8vYb2Qx4mH7dB4Aana",
"text": "The test that only failed on Mondays reminded me of my last deploy.",
"publishedAt": "2026-11-06T09:12:40Z",
"likes": 3,
"fromOwner": false,
"replyCount": 0,
"answered": false,
"replies": [],
"resolved": false,
"network": "youtube",
"channel": "01KA3V0R5D8M2WQ7X4HT9NZ1BF"
}
],
"mediaItems": [
{
"id": "17858893269123456",
"network": "instagram",
"title": "Monday Reel: the failing test",
"caption": "Monday Reel: the failing test",
"type": "reel",
"thumbnail": "https://cdn.example.com/reel.jpg",
"permalink": "https://www.instagram.com/reel/DAbCdEfGhIj/",
"publishedAt": "2026-11-04T10:57:00+0000",
"likes": 34,
"comments": 2,
"pending": 0,
"channel": "01KA3V1G4C7N9PXS2WQ6HM8TDZ"
}
],
"pending": 1,
"pendingByNetwork": {
"youtube": 1,
"instagram": 0
},
"pendingByChannel": {
"01KA3V0R5D8M2WQ7X4HT9NZ1BF": 1,
"01KA3V1G4C7N9PXS2WQ6HM8TDZ": 0
},
"errors": {}
}Gathers the comments of every account on each network. errors tells, per network, which account did not respond (the others come back normally).
Errors
No errors specific to this route besides the common ones.
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