---
title: "Save an article by URL"
method: POST
path: "/articles"
tags: ["Articles"]
---

# Save an article by URL

`POST /articles`

## Request

- Base URL: `https://api.screvi.com/api/v1`
- URL: `https://api.screvi.com/api/v1/articles`
- Auth: API key in header `X-API-Key`

Saves a web page to the reading inbox. The row is created immediately with `parse_state: queued` and the page is fetched and parsed in the background; read it with `GET /articles/{id}` a few seconds later. Saving a URL that is already in the library returns 200 with the existing article's id and `duplicate: true`. Short links are resolved first. A link to a single social post (a tweet, an Instagram, Threads or Bluesky post, a Substack note) is saved the way the app saves it, as a highlight: the response then has `kind: highlight`, `id` is the highlight id and `source_id` its source. Links to PDFs are stored as PDF articles. Requires the `write` scope.

## Request body

- object
  - `url` string, uri, required
  - `tags` string[]: Tag names or ids

## Response `200`

Already saved; returns the existing article's id

## Other responses

- `201`: Saved and queued for parsing
- `422`: Validation failed

---

[API](https://skmtc.dev/screvi/apis/screvi-public-api.md) · [All operations](https://skmtc.dev/screvi/apis/screvi-public-api/llms.txt) · [OpenAPI document](https://skmtc.dev/screvi/apis/screvi-public-api/revisions/b14be9630c5d?raw)
