Docs API Reference v2.1
API Status — Operational

Aevum News
API Documentation

Build powerful integrations with Aevum's editorial data. Access articles, stories, authors, analytics, and more through our RESTful API.

GET /v2/articles
POST /v2/articles
GET /v2/stories
GET /v2/analytics

📖 Introduction

Welcome to the Aevum News API. Our RESTful API provides programmatic access to all of Aevum's editorial content, analytics, and management tools.

ℹ️
Base URL All API requests should be made to: https://api.aevumnews.com/v2
Response Format All responses return JSON data. All timestamps are in ISO 8601 format.

HTTP Methods

GET Retrieve resources
POST Create new resources
PUT Replace a resource
PATCH Partial update
DEL Delete a resource
HEAD Resource metadata

🔐 Authentication

The Aevum API uses API keys for authentication. Every request must include your API key in the Authorization header.

⚠️
Keep your keys secret! Never expose your API key in client-side code, public repositories, or shared logs. Use environment variables for secure key management.
🔑
Key Types Live keys — Full access to all production data.
Sandbox keys — Limited to test data and simulated responses.
HTTP
GET /v2/articles HTTP/2
Host: api.aevumnews.com
Authorization: Bearer sk_aev_xK9mP2nQ7wR4vL8jT6yF3bH5cD1eA0g
Content-Type: application/json
HTTP
GET /v2/articles HTTP/2
Host: api.aevumnews.com
X-Aevum-Key: sk_aev_xK9mP2nQ7wR4vL8jT6yF3bH5cD1eA0g
Content-Type: application/json
HTTP
GET /v2/articles?api_key=sk_aev_xK9mP2nQ7wR4vL8jT6yF3bH5cD1eA0g HTTP/2
Host: api.aevumnews.com
Content-Type: application/json
⚠️
Caution Query parameter authentication is discouraged for production use. Always prefer the Bearer token method.

Generating API Keys

cURL
curl -X POST https://api.aevumnews.com/v2/api-keys \\
  -H "Authorization: Bearer YOUR_MASTER_KEY" \\
  -H "Content-Type: application/json" \\
  -d '{
    "name": "Production API Key",
    "scope": "read:articles,write:articles",
    "environment": "live"
  }'
Response
{
  "key": "sk_aev_xK9mP2nQ7wR4vL8jT6yF3bH5cD1eA0g",
  "name": "Production API Key",
  "scope": "read:articles,write:articles",
  "created_at": "2025-01-15T08:30:00Z",
  "last_used": null,
  "environment": "live"
}

⏱️ Rate Limits

API requests are rate-limited to ensure fair usage. Rate limits are enforced per API key.

1,000
Requests / Hour
10,000
Requests / Day
50
Concurrent / Second
100
Concurrent (Pro)
📊
Response Headers Every API response includes rate-limit information:
Response Headers
X-RateLimit-Limit: 1000
X-RateLimit-Remaining: 847
X-RateLimit-Reset: 1705312800
X-RateLimit-Window: hourly
429 Too Many Requests
{
  "error": {
    "code": "rate_limit_exceeded",
    "message": "API rate limit exceeded. Please retry after 45 seconds.",
    "retry_after": 45,
    "documentation_url": "https://docs.aevumnews.com/rate-limits"
  }
}

⚠️ Error Handling

The Aevum API uses conventional HTTP status codes to indicate success or failure of requests.

✔️ Successful Codes

200 OK — Success
201 Created — Resource created
204 No Content — Deleted successfully

✖️ Client Error Codes

400 Bad Request — Invalid parameters
401 Unauthorized — Invalid or missing API key
403 Forbidden — Insufficient permissions
404 Not Found — Resource doesn't exist
422 Unprocessable — Validation failed
429 Too Many Requests — Rate limited

☠️ Server Error Codes

500 Internal Server Error
502 Bad Gateway
503 Service Unavailable
Error Response Format
{
  "error": {
    "code": "not_found",
    "message": "The requested article does not exist.",
    "request_id": "req_a7f3k9m2p4q8",
    "documentation_url": "https://docs.aevumnews.com/errors/not_found"
  }
}

📦 SDKs & Libraries

Official SDKs available in popular languages to simplify API integration.

Installation
npm install @aevum/api-client
Usage — List Articles
import { AevumClient } from "@aevum/api-client";

const aevum = new AevumClient({
  apiKey: process.env.AENVUM_API_KEY,
  version: "v2"
});

const articles = await aevum.articles.list({
  limit: 10,
  category: "technology",
  sortBy: "published_at",
  order: "desc"
});

console.log(`Found ${articles.total} articles`);
Installation
pip install aevum-api
Usage
from aevum import AevumClient

client = AevumClient(api_key="sk_aev_xK9mP2nQ7wR4vL8jT6yF3bH5cD1eA0g")

articles = client.articles.list(
    limit=10,
    category="technology",
    sort_by="published_at",
    order="desc"
)

print(f"Found {len(articles.data)} articles")
Installation
gem install aevum-api
Usage
require 'aevum'

client = Aevum::Client.new(
  api_key: "sk_aev_xK9mP2nQ7wR4vL8jT6yF3bH5cD1eA0g"
)

articles = client.articles.list(
  limit: 10,
  category: "technology"
)

puts "Found #{articles.total} articles"
Installation
go get github.com/aevum/aevum-go/v2
Usage
package main

import (
    "fmt"
    "github.com/aevum/aevum-go/v2"
)

func main() {
    client := aevum.NewClient(aevum.Config{
        APIKey: "sk_aev_xK9mP2nQ7wR4vL8jT6yF3bH5cD1eA0g",
    })

    articles, _ := client.Articles.List(context.Background(), &aevum.ListParams{
        Limit:   10,
        Category: "technology",
    })

    fmt.Printf("Found %d articles\n", articles.Total)
}

📰 Articles — List

Retrieve a paginated list of articles with filtering and sorting options.

GET /v2/articles

Query Parameters

Parameter Type Required Description
limit integer Optional Number of results per page. Max 100. Default: 20
offset integer Optional Number of results to skip. Default: 0
category string Optional Filter by category slug (e.g., technology, politics)
author string Optional Filter by author ID or slug
status string Optional Filter by status: published, draft, archived
sort_by string Optional Sort field: published_at, created_at, title, views
order string Optional Sort order: asc or desc. Default: desc
search string Optional Full-text search across title and body

Example Request

cURL
curl -X GET \\
  "https://api.aevumnews.com/v2/articles?limit=5&category=technology&sort_by=published_at&order=desc" \\
  -H "Authorization: Bearer sk_aev_xK9mP2nQ7wR4vL8jT6yF3bH5cD1eA0g"

Example Response

200 OK
{
  "data": [
    {
      "id": "art_8xK3mP9qL2nR7vW4
200 OK — continued
      "id": "art_8xK3mP9qL2nR7vW4",
      "title": "AI Revolution: New Language Models Redefine Interaction",
      "slug": "ai-revolution-new-language-models",
      "summary": "Researchers unveil breakthrough AI systems that understand context with unprecedented accuracy.",
      "status": "published",
      "category": "technology",
      "author": {
        "id": "au_3mK8pL1nQ6",
        "name": "Marcus Chen",
        "slug": "marcus-chen"
      },
      "views": 14852,
      "published_at": "2025-01-15T14:30:00Z",
      "created_at": "2025-01-15T10:00:00Z",
      "updated_at": "2025-01-15T14:30:00Z"
    }
  ],
  "pagination": {
    "total": 1247,
    "count": 5,
    "per_page": 5,
    "current_page": 1,
    "total_pages": 250,
    "next_offset": 5,
    "prev_offset": null,
    "has_more": true
  }
}

📄 Articles — Retrieve

Get full details of a single article by its ID or slug.

GET /v2/articles/:id

Path Parameters

Parameter Type Required Description
id string Required The article ID or slug
Response — Full Article
{
  "data": {
    "id": "art_8xK3mP9qL2nR7vW4",
    "title": "AI Revolution: New Language Models Redefine Interaction",
    "slug": "ai-revolution-new-language-models",
    "summary": "Researchers unveil breakthrough AI systems...",
    "body": "[Full HTML article content...]",
    "body_plain": "[Plain text version...]",
    "status": "published",
    "category": "technology",
    "tags": ["AI", "machine-learning", "NLP"],
    "author": {
      "id": "au_3mK8pL1nQ6",
      "name": "Marcus Chen",
      "slug": "marcus-chen",
      "bio": "Senior technology correspondent...",
      "avatar_url": "https://cdn.aevumnews.com/avatars/mc.jpg"
    },
    "featured_image": {
      "url": "https://cdn.aevumnews.com/imgs/ai-model-2025.jpg",
      "alt": "Abstract visualization of neural network connections",
      "width": 1200,
      "height": 630
    },
    "views": 14852,
    "comments_count": 342,
    "read_time_min": 5,
    "published_at": "2025-01-15T14:30:00Z",
    "created_at": "2025-01-15T10:00:00Z",
    "updated_at": "2025-01-15T14:30:00Z"
  }
}

➕ Articles — Create

Create a new article draft. Requires write:articles scope.

POST /v2/articles

Request Body

Field Type Required Description
title string Required Article title (max 200 characters)
summary string Required Short description / meta summary (max 300 chars)
body string Required Full article body (HTML or Markdown)
category string Required Category slug
tags string[] Optional Array of tag strings
featured_image_url string Optional URL of featured image
status string Optional draft (default), published, archived
author_id string Optional Override author. Defaults to API key owner.
Request — JSON Body
{
  "title": "Global Markets React to Central Bank Policy Shifts",
  "summary": "Markets worldwide adjust as major central banks signal rate adjustments amid shifting economic landscapes.",
  "body": "<p>In a coordinated move...</p>",
  "category": "business",
  "tags": ["economy", "central-banks", "interest-rates"],
  "status": "draft"
}
201 Created
{
  "data": {
    "id": "art_9yL4nQ0rM3oS8wX5",
    "title": "Global Markets React to Central Bank Policy Shifts",
    "slug": "global-markets-react-central-bank",
    "status": "draft",
    "created_at": "2025-01-16T09:15:00Z",
    "message": "Article created successfully as draft."
  }
}

✏️ Articles — Update

Update an existing article. Supports both full PUT and partial PATCH operations.

PUT /v2/articles/:id
Request
{
  "title": "Global Markets React to Central Bank Policy Shifts (Updated)",
  "tags": ["economy", "central-banks", "interest-rates", "inflation"],
  "status": "published"
}

🗑️ Articles — Delete

Permanently delete an article. This action cannot be undone.

DELETE /v2/articles/:id
⚠️
Irreversible Action Deleted articles cannot be restored. Use archived status instead if you need to hide an article temporarily.
204 No Content
// Empty response body on success // Response Headers:
X-Deletion-Id: del_2xP7kM4qN9

📖 Stories — List

Retrieve editorial stories — collections of related articles covering a single topic or event.

GET /v2/stories
ParameterTypeRequiredDescription
topicstringOptionalFilter by topic slug
featuredbooleanOptionalOnly return featured stories
limitintegerOptionalResults per page. Max 50

➕ Stories — Create

POST /v2/stories
Request Body
{
  "title": "Climate Crisis: A Comprehensive Overview",
  "slug": "climate-crisis-overview",
  "topic": "climate-environment",
  "article_ids": ["art_8xK3mP", "art_9yL4nQ", "art_1zA5bR"],
  "editor_note": "This story aggregates our best coverage on the climate crisis.",
  "status": "published"
}

📡 Stories — Published Feed

Access the curated feed of all published stories. Ideal for content aggregators and news readers.

GET /v2/stories/published
200 OK
{
  "data": [
    {
      "id": "str_4mL9pN2qR7",
      "title": "Climate Crisis: A Comprehensive Overview",
      "slug": "climate-crisis-overview",
      "topic": "climate-environment",
      "article_count": 3,
      "published_at": "2025-01-14T12:00:00Z",
      "featured": true
    }
  ],
  "pagination": {
    "total": 47,
    "count": 1,
    "has_more": true
  }
}

🏷️ Categories — List

GET /v2/categories
200 OK
{
  "data": [
    { "id": "cat_1", "name": "Technology", "slug": "technology", "article_count": 1824 },
    { "id": "cat_2", "name": "Politics", "slug": "politics", "article_count": 2103 },
    { "id": "cat_3", "name": "World Affairs", "slug": "world", "article_count": 2410 },
    { "id": "cat_4", "name": "Business & Finance", "slug": "business", "article_count": 1567 },
    { "id": "cat_5", "name": "Science", "slug": "science", "article_count": 1198 },
    { "id": "cat_6", "name": "Culture & Arts", "slug": "culture", "article_count": 980 },
    { "id": "cat_7", "name": "Health", "slug": "health", "article_count": 860 },
    { "id": "cat_8", "name": "Climate & Environment", "slug": "climate", "article_count": 1120 }
  ]
}

➕ Categories — Create

POST /v2/categories
Request Body
{
  "name": "Sports",
  "slug": "sports",
  "description": "Coverage of local and international sports events"
}

👤 Authors — List

GET /v2/authors
ParameterTypeRequiredDescription
limitintegerOptionalResults per page. Max 50
rolestringOptionalFilter by role: editor, correspondent, analyst

👤 Authors — Retrieve

GET /v2/authors/:id
200 OK
{
  "data": {
    "id": "au_3mK8pL1nQ6",
    "name": "Marcus Chen",
    "slug": "marcus-chen",
    "role": "senior-correspondent",
    "bio": "Senior technology correspondent covering AI, quantum computing, and semiconductor innovation.",
    "avatar_url": "https://cdn.aevumnews.com/avatars/mc.jpg",
    "social": {
      "twitter": "@marcuschen_tech",
      "linkedin": "linkedin.com/in/marcuschen"
    },
    "article_count": 187,
    "total_views": 2400000,
    "joined_at": "2021-03-10T00:00:00Z"
  }
}

📊 Analytics — Overview

Access real-time and historical analytics for your content and account.

GET /v2/analytics/overview
200 OK
{
  "data": {
    "period": "last_30_days",
    "total_views": 12847563,
    "views_change": 12.4,
    "total_articles": 847,
    "avg_read_time_sec": 245,
    "top_performing": {
      "article_id": "art_8xK3mP9qL2nR7vW4",
      "title": "AI Revolution: New Language Models...",
      "views": 148520
    },
    "traffic_sources": {
      "direct": 34.2,
      "social": 28.7,
      "search": 22.1,
      "referral": 10.5,
      "email": 4.5
    }
  }
}

📈 Analytics — Engagement

GET /v2/analytics/engagement
ParameterTypeRequiredDescription
fromdateRequiredStart date (ISO 8601)
todateRequiredEnd date (ISO 8601)
granularitystringOptionalhourly, daily, weekly

🪝 Webhooks

Configure webhooks to receive real-time event notifications from Aevum News.

🔗
Webhook Endpoint Configure your webhook URL in the Aevum Dashboard → Integrations → Webhooks
POST /v2/webhooks
Request — Create Webhook
{
  "url": "https://your-app.com/webhooks/aevum",
  "events": [
    "article.published",
    "article.updated",
    "article.deleted",
    "story.published"
  ],
  "secret": "whsec_a8K3mP9qL2nR7vW4xY6z"
}

📬 Webhook Events

Available event types that trigger webhook payloads.

article.published Triggered when a new article is published
{
  "event": "article.published",
  "timestamp": "2025-01-15T14:30:00Z",
  "data": {
    "article_id": "art_8xK3mP9qL2nR7vW4",
    "title": "AI Revolution: New Language Models...",
    "author": "Marcus Chen",
    "category": "technology",
    "url": "https://aevumnews.com/ai-revolution-new-language-models"
  }
}
article.updated Triggered on any article update
{
  "event": "article.updated",
  "timestamp": "2025-01-15T16:00:00Z",
  "data": {
    "article_id": "art_8xK3mP9qL2nR7vW4",
    "changes": [
      { "field": "title", "old": "Old Title", "new": "New Title" },
      { "field": "tags", "action": "added", "value": "quantum-computing" }
    ]
  }
}
article.deleted Triggered on article deletion
{
  "event": "article.deleted",
  "timestamp": "2025-01-15T18:00:00Z",
  "data": {
    "article_id": "art_8xK3mP9qL2nR7vW4",
    "deleted_by": "admin",
    "reason": "Editorial review"
  }
}
🔐
Webhook Verification Verify webhook signatures using your secret key. Aevum sends an X-Aevum-Signature header with each payload. Compare the HMAC-SHA256 hash of the raw body against the header value.

📋 Response Headers

All API responses include these standard headers.

HeaderTypeDescription
X-RateLimit-LimitintegerMaximum requests per window
X-RateLimit-RemainingintegerRequests remaining in current window
X-RateLimit-ResetintegerUnix timestamp when the window resets
X-Request-IdstringUnique request ID for debugging
X-Aevum-Environmentstringlive or sandbox
X-Api-VersionstringAPI version used (e.g., v2.1)