EditorHQ Cloud API

v1 · base https://editorhq.innof.com/api · JSON in/out

Authentication

Authorization: Bearer ehq_live_xxxxxxxx_yyyyyyyyyyyy...
Keys are shown once at issuance and stored hashed (SHA-256). Lost key? Reissue — revocation is instant.

Endpoints Summary

MethodPathDescription
GET/v1/healthPublic service health & tenant liveness
GET/v1/{pub}/briefs/latestToday's curated edition (cached, <5ms)
GET/v1/{pub}/briefs/{date}Specific historical edition snapshot
GET/v1/{pub}/clusters?window=48h&q=Deduplicated story clusters from feeds
GET/v1/{pub}/alerts/livePassage and breaking alerts
GET/v1/{pub}/articlesAI-generated articles + confidence scores
GET/v1/{pub}/reviewArticles queued for human editorial review
GET/v1/{pub}/publish/status/{date}Poll async website deployment status
GET/v1/{pub}/usageMetered usage and quota metrics (30 days)
POST/v1/{pub}/curateTrigger feed ingestion & clustering {hours:8}
POST/v1/{pub}/autopilotFull automated curation + draft generation
POST/v1/{pub}/publishPublish edition to site (202 Accepted + async build)
POST/v1/{pub}/articles/{id}/approveEditor gate: approve & release article
POST/v1/{pub}/blocklistAdd keyword / source blocklist rule
POST/v1/{pub}/webhooksRegister webhook endpoint {url, secret, events}

Desk → Site 1-Click Publish Chain

To publish a curated daily edition directly to the tenant's Astro / SSR production site with automatic OG generation:

POST /v1/bangla24/publish
Content-Type: application/json
Authorization: Bearer $EHQ_KEY

{
  "site": "bangla24",
  "date": "2026-09-03",
  "intro": "দিনের শীর্ষ সংবাদ সারসংক্ষেপ...",
  "og_image_base64": "data:image/png;base64,iVBORw0KGgo...",
  "homepage_leads": [
    { "headline": "...", "category": "জাতীয়", "lead": "...", "sources": [...] }
  ],
  "full_briefs": [
    { "id": "b1", "headline": "...", "summary": "...", "sources": [...] }
  ]
}

Async Deploy Response (202 Accepted)

{
  "status": "deploying",
  "publication_id": "bangla24",
  "edition_date": "2026-09-03",
  "briefs_count": 26,
  "poll": "/v1/bangla24/publish/status/2026-09-03",
  "request_id": "a1b2c3d4-5678"
}

Poll GET /v1/{pub}/publish/status/{date} until state: "live".

Rate Limits, Headers & Watermarking

Every response carries X-Request-Id and X-Tenant-Fingerprint for security auditability and leak tracing. Token-bucket rate limiting (120 req/min default). On quota breach: 429 Too Many Requests with Retry-After header.

Webhooks

Events: brief.ready, article.ready, article.needs_review, quota.low. Signed with HMAC-SHA256:

X-EditorHQ-Signature: sha256=HMAC_SHA256(secret, body)

Quickstart — curl

# 1. Fetch latest daily brief
curl -H "Authorization: Bearer $EHQ_KEY"   https://editorhq.innof.com/api/v1/bangla24/briefs/latest

# 2. Check publish status
curl -H "Authorization: Bearer $EHQ_KEY"   https://editorhq.innof.com/api/v1/bangla24/publish/status/2026-09-03

Quickstart — JavaScript (Browser / Node)

const res = await fetch('https://editorhq.innof.com/api/v1/bangla24/briefs/latest', {
  headers: { 'Authorization': 'Bearer ' + apiKey }
});
const edition = await res.json();
console.log('Today Briefs:', edition.briefs);

Quickstart — PHP (WordPress / Custom)

<?php
$ch = curl_init('https://editorhq.innof.com/api/v1/bangla24/briefs/latest');
curl_setopt_array($ch, [
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('EHQ_KEY')]
]);
$data = json_decode(curl_exec($ch), true);
$briefs = $data['briefs'] ?? [];
?>

Sandbox Mode

Sandbox keys (ehq_test_) run identical pipeline logic with deterministic mock generation — completely free of LLM token costs.

© 2026 EditorHQ · INNOF · v1 stability: breaking changes go to /v2/