---
title: "Poll an article generation"
method: GET
path: "/v1/articles/{articleId}"
tags: ["Articles"]
---

# Poll an article generation

`GET /v1/articles/{articleId}`

## Request

- Base URL: `https://serp-agent.com`
- URL: `https://serp-agent.com/v1/articles/{articleId}`
- Auth: HTTP bearer

Status of an article. `status` walks generating → qa → ready (or failed); `published` appears when the operator publishes it later. Content fields (`title`, `meta_description`, `content_markdown`, `word_count`, `qa_score`, `language`) appear only once the article is ready or published — while generating you get status only. Sandbox articles carry a `watermark` object and are never published automatically.

## Path parameters

- `articleId` string, required

## Response `200`

Current article state.

- Article
  - `article_id` string, required
  - `project_id` string, required
  - `status` 'generating' | 'qa' | 'ready' | 'published' | 'failed', required: generating → qa → ready. "published" if/when the operator publishes it. Content fields appear at ready/published.
  - `title` string, nullable
  - `meta_description` string, nullable
  - `content_markdown` string, nullable: Full article body as markdown.
  - `word_count` integer, nullable
  - `qa_score` integer, nullable: Internal QA score 0–100.
  - `language` string
  - `error` string: Present only when failed.
  - `watermark` object: Present on sandbox projects — the article is a draft-only trial output.
    - `sandbox` true
    - `note` string

## Other responses

- `401`: Missing, malformed, unknown, revoked, or expired API key. Codes: `unauthorized`, `key_revoked`, `key_expired`.
- `404`: No such article on this account. Code: `not_found`.
- `429`: Rate limit exceeded (600 requests/minute per API key). Honor `Retry-After`.

---

[API](https://skmtc.dev/serp-agent/apis/serp-agent-api.md) · [All operations](https://skmtc.dev/serp-agent/apis/serp-agent-api/llms.txt) · [OpenAPI document](https://skmtc.dev/serp-agent/apis/serp-agent-api/revisions/438a943019ac?raw)
