oxu APIoxu.az ↗
Access oxu.az news: latest headlines, category feeds, full-text search, tag listings, and full article detail in Azerbaijani or Russian via a clean REST API.
What is the oxu API?
The oxu.az API provides 4 endpoints to read content from one of Azerbaijan's most-visited news portals. Use list_news to pull the site-wide or per-category headline feed, search_news to query articles by keyword, list_tag_news to browse articles by topic tag, and get_article to retrieve a full article including body text, author byline, inline images, and topic tags — all in either the Azerbaijani or Russian language edition.
curl -X GET 'https://api.parse.bot/scraper/1e575592-a909-4551-b714-0237b695a9e6/list_news?category=kriminal' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace oxu-az-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: oxu.az news SDK — bounded, re-runnable; every call capped."""
from parse_apis.oxu_az_api import OxuAz, Lang, InputNotFound
client = OxuAz()
# Browse the latest headlines across all categories.
for item in client.article_summaries.list(limit=5):
print(item.title, item.published_at, item.category)
# Drill into the first headline to read the full article.
headline = client.article_summaries.list(limit=1).first()
if headline is not None:
article = headline.details()
print(article.title, article.views)
print(article.body_text[:200])
# Walk the article's tags, then list other articles under the first tag.
if article.tags:
tag = article.tags[0]
print("Tag:", tag.name, tag.slug)
for related in client.article_summaries.list_by_tag(tag=tag.slug, limit=3):
print(" ", related.title, related.published_at)
# Search for articles by keyword in the Russian edition.
result = client.article_summaries.search(query="metro", lang=Lang.RU, limit=1).first()
if result is not None:
full = result.details()
print(full.title, full.description)
# Point lookup by a known URL (derived from a listing hit).
if headline is not None:
try:
direct = client.articles.get(url=headline.url)
print(direct.title, direct.author.name if direct.author else "no byline")
except InputNotFound:
print("Article removed or URL stale")
print("exercised: list / search / list_by_tag / get / details")
Lists news headlines from oxu.az, newest first: the site-wide latest feed when no category is given, or one category's feed. Each row is one article summary (title, canonical url, publish timestamp in Baku local time as YYYY-MM-DD HH:MM:SS, view count, thumbnail, category, media badges such as Foto/Video). One call returns one page of up to 12 items, exactly like one scroll step on the site. Pagination is by cursor: when has_more is true, pass the returned next_before value back as the before parameter to fetch the next older page (2 round trips for a continuation page, 1 for the first page). An unknown category slug returns a stale_input (input_not_found) result because the site answers 404 for it. Categories are slugs from the site's own section menu; Azerbaijani sections confirmed this build: siyaset, cemiyyet, iqtisadiyyat, dunya, idman, kriminal, medeniyyet, maraqli, digar, hadise; Russian (lang=ru) sections use different slugs, confirmed: politika, obshestvo, ekonomika, v-mire. category_slug values in the output are accepted unchanged as this parameter.
| Param | Type | Description |
|---|---|---|
| lang | string | Site language edition. Russian-edition category slugs differ from Azerbaijani ones. |
| before | string | Pagination cursor: the next_before value from the previous page (form YYYY-MM-DD HH:MM:SS). Omitted = first (newest) page. |
| category | string | Section slug as it appears in category_slug of returned items (one shape: kriminal). Omitted = site-wide latest news across all sections. |
{
"type": "object",
"fields": {
"count": "number of items on this page (max 12)",
"items": "array of article summaries, newest first",
"has_more": "true when another older page can be requested with next_before",
"items[].url": "canonical article URL; pass unchanged to get_article",
"next_before": "cursor for the next page, or null when has_more is false",
"items[].path": "URL path of the article (includes /ru prefix for the Russian edition)",
"items[].image": "thumbnail image URL",
"items[].views": "view counter shown on the card, integer or null when the card has no counter",
"items[].category": "section display name in the edition's language",
"items[].media_tags": "badge labels shown on the card (e.g. Foto, Video, Yenilənib); empty array when none",
"items[].published_at": "publish timestamp, Baku local time, YYYY-MM-DD HH:MM:SS; also the pagination cursor value",
"items[].category_slug": "section slug usable as the category parameter",
"items[].published_label": "the site's own display label for the date (localized, e.g. 'Bu gün / 12:28')"
},
"sample": {
"data": {
"count": 12,
"items": [
{
"url": "https://oxu.az/kriminal/irandan-azerbaycana-paraplanla-65-kq-narkotik-kecirmek-istediler",
"path": "/kriminal/irandan-azerbaycana-paraplanla-65-kq-narkotik-kecirmek-istediler",
"image": "https://images.oxu.az/2026/09/14/v8xnP3H7mZtxgLbtKnctD00CyJ0Yq6w4oOoKWdxR:600.png",
"title": "İrandan Azərbaycana paraplanla 65 kq narkotik keçirmək istədilər",
"views": 246,
"category": "Kriminal",
"media_tags": [],
"published_at": "2026-09-14 12:28:00",
"category_slug": "kriminal",
"published_label": "Bu gün / 12:28"
},
{
"url": "https://oxu.az/kriminal/xacmazda-emeliyyat-yeddi-nefer-hebs-edildi-foto-video",
"path": "/kriminal/xacmazda-emeliyyat-yeddi-nefer-hebs-edildi-foto-video",
"image": "https://images.oxu.az/2026/09/11/fI3xmj8b4TPooBf29U2IlJMc5LbkhOJa9TdiV1G3:600.webp",
"title": "Xaçmazda əməliyyat: Yeddi nəfər həbs edildi - FOTO - VİDEO",
"views": 1430,
"category": "Kriminal",
"media_tags": [
"Foto",
"Video"
],
"published_at": "2026-09-11 13:16:00",
"category_slug": "kriminal",
"published_label": "11 sen, 2026 / 13:16"
}
],
"has_more": true,
"next_before": "2026-09-11 13:16:00"
},
"status": "success"
}
}About the oxu API
Headline Feeds and Navigation
list_news returns up to 12 article summaries per page, ordered newest first. Each item includes the article title, url, image thumbnail, views count, category display name, and media_tags badges (such as Foto, Video, or Yenilənib). Passing a category parameter scopes the feed to one section — use the category_slug value from any returned item as the slug. The lang parameter switches between the Azerbaijani and Russian editions; note that category slugs differ between editions. Pagination uses a timestamp cursor: when has_more is true, pass the returned next_before value as before on the next call.
Search and Tag Browsing
search_news accepts a free-text query and returns matching articles in the same summary shape as list_news, with the same cursor pagination. One difference: views is always null on search result items because the site does not show view counters on those cards. list_tag_news requires a tag slug — sourced from the tags[].slug array in any get_article response — and returns a paginated feed of articles carrying that tag. Supplying an unrecognised tag slug returns a stale_input error rather than an empty result.
Full Article Detail
get_article takes a canonical url from any listing endpoint's items[].url and returns the complete article: title, category, ISO-8601 published_at and modified_at timestamps (with the +04:00 Baku offset), full body text, author object (name, url, job_title — or null when no byline exists), cover image, images array of inline body images, views integer, language tag (az-AZ or ru-RU), and a tags array of objects each carrying name, slug, and url for use with list_tag_news.
Language Editions
All four endpoints accept a lang parameter to target the Russian-language edition (/ru path prefix) or the default Azerbaijani edition. Category slugs are not shared across editions, so slugs obtained from Azerbaijani-edition responses should not be passed to Russian-edition calls and vice versa.
The oxu API is a managed, monitored endpoint for oxu.az — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when oxu.az changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official oxu.az API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Monitor breaking news from Azerbaijan by polling
list_newswithout a category for the site-wide latest feed. - Build a category-specific news digest by filtering
list_newswith acategoryslug such askriminal. - Search historical coverage of a topic or person using
search_newswith a keyword query. - Follow all articles on a specific subject by extracting
tags[].slugfromget_articleand passing it tolist_tag_news. - Track article engagement over time by recording the
viewsinteger returned byget_articleat intervals. - Ingest bilingual Azerbaijani/Russian news content for NLP or translation pipelines using the
languagefield to route articles. - Identify multimedia-rich articles for media monitoring by filtering on
media_tagsvalues likeVideoorFotoin listing results.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 200 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
| Team | $300/mo | 20,000 | 300 req/min |
| Company | $1,000/mo | 100,000 | 500 req/min |
Each endpoint has a fixed posted price per successful call — most fall between 1 and 10 credits — shown on this API's page before you run it. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does oxu.az offer an official developer API?+
What does `get_article` return that the listing endpoints do not?+
get_article returns the full article body text, inline images array, author object with name, url, and job_title, ISO-8601 timestamps with the +04:00 Baku UTC offset, and the tags array with slugs for further tag browsing. Listing endpoints return only article summaries with title, thumbnail, view count, and media badges.How does pagination work across all endpoints?+
has_more (boolean) and next_before (a YYYY-MM-DD HH:MM:SS string or null). Pass next_before as the before parameter on the next call to retrieve the next older page of up to 12 items.Are comments or reader reactions available through this API?+
Why is `views` always null in `search_news` results but not in other feeds?+
views field is populated normally in list_news, list_tag_news, and get_article responses where the site does show the counter.