ArticlesList articles

GET /v1/articles

List articles across your projects, with search, status, and project filters.

curl -G https://serpon.ai/v1/articles \
  -H "Authorization: Bearer $SERPON_TOKEN" \
  -H "Accept: application/json" \
  -d status=completed \
  -d project_id=1 \
  -d per_page=20
{
  "success": true,
  "data": [
    {
      "id": 123,
      "external_id": "550e8400-e29b-41d4-a716-446655440000",
      "title": "10 Best SEO Strategies for 2026",
      "description": "Practical SEO tactics that still move rankings in 2026.",
      "status": "completed",
      "article_type": "listicle",
      "target_keyword": "SEO strategies 2026",
      "keywords": ["search engine optimization", "organic traffic"],
      "target_word_count": 1500,
      "actual_word_count": 1523,
      "ai_model_used": "openai:gpt-5.4",
      "cost": "0.9138",
      "project": { "id": 1, "name": "My SEO Blog" },
      "created_at": "2026-08-02T10:30:00.000000Z",
      "updated_at": "2026-08-02T10:41:12.000000Z"
    }
  ],
  "meta": {
    "current_page": 1,
    "last_page": 5,
    "per_page": 20,
    "total": 87
  }
}

List articles across every project you can access.

GET https://serpon.ai/v1/articles

Results are newest first and paginated. Each entry is a full article object, so a listing of completed articles already carries their content — no follow-up request needed.

Authentication

Bearer token in the Authorization header. See Authentication.

Query parameters

query
statusstring

Exact match on status: queued, batching, writing, polishing, completed, published, or failed. One value only.

query
project_idinteger

Restrict to a single project. Without it, every project on every account you belong to is included.

query
per_pageinteger

Results per page. Default 20.

query
pageinteger

Page number, starting at 1.

Example

Response fields

successboolean
Required

Always true on 200.

dataarray
Required

Article objects, newest first. Each has the same shape as Get article — including the full content for completed articles.

metaobject
Required

Pagination: current_page, last_page, per_page, total.

Errors

StatusWhen
401Missing, invalid, or expired token
402Account has no active subscription
429Rate limit exceeded

An empty result is a 200 with data: [], not a 404.

See Errors for the full reference.

Tips

Article bodies are large. Requesting per_page=100 over a project of finished articles returns a very heavy payload — keep pages small unless you actually want every body.

This endpoint is not a completion notifier. Polling it in a loop burns the articles rate limit across all your work at once; watch a single article with GET /v1/articles/{id}, or use a webhook.