---
title: "Get an article"
method: GET
path: "/v1/articles/{slug}"
tags: ["Articles"]
---

# Get an article

`GET /v1/articles/{slug}`

## Request

- Base URL: `https://api.ufcalendar.com`
- URL: `https://api.ufcalendar.com/v1/articles/{slug}`
- Auth: HTTP bearer

One published UFCalendar article by slug: `title`, `description`, `author_name`, `author_slug`, `tags`, `published_at`, `url` and the full `body_md` (Markdown; the site's client-only widgets — fighter cards, embeds and offer blocks — are removed). No cover image is served: its license credit has no place in this payload. `locale` is the language requested and `served_locale` the one delivered: the translation when one exists, English otherwise. An unknown slug (or a draft) 404s; betting-advice editorial (picks, parlays) is not served, so such a slug 404s too; an unknown `locale` 400s `invalid_locale`. Link back when quoting.

## Path parameters

- `slug` string, required

## Query parameters

- `locale` 'en' | 'es' | 'pt' | 'de' | 'fr' | 'tr' | 'ru' | 'ka' | 'ja' | 'ko' | 'pl' | 'sr' | 'zh'

## Response `200`

Article

- ArticleResponse
  - `data` Article, required
    - `slug` string, required
    - `url` string, required
    - `title` string, required
    - `description` string, required
    - `author_name` string, required
    - `author_slug` string, nullable, required
    - `tags` string[], required
    - `published_at` string, date-time, nullable, required
    - `body_md` string, required: Markdown; client-only widgets and licensed embeds removed.
    - `locale` 'en' | 'es' | 'pt' | 'de' | 'fr' | 'tr' | 'ru' | 'ka' | 'ja' | 'ko' | 'pl' | 'sr' | 'zh', required: The 13 site languages.
    - `served_locale` 'en' | 'es' | 'pt' | 'de' | 'fr' | 'tr' | 'ru' | 'ka' | 'ja' | 'ko' | 'pl' | 'sr' | 'zh', required: The 13 site languages.
  - `meta` object, required
    - `note` string, required
    - `ignored_params` string[]: Present only when the request carried query parameters this endpoint does not take — they were ignored. Same list as the `X-UFCalendar-Ignored-Params` header. Sorted, unique.

## Other responses

- `304`: Not Modified — `If-None-Match` matched the current weak `ETag`. Empty body.
- `400`: Invalid input (`invalid_locale`).
- `401`: Missing/invalid API key (`unauthorized`).
- `403`: No active plan on the key's account (`subscription_required`) — choose a plan or start the free 1-day trial at https://www.ufcalendar.com/account/api.
- `404`: Not found (`not_found`; staged-org data 404s until the org is promoted).
- `429`: Rate limited (`rate_limited`) or monthly quota reached (`quota_exceeded`). Honor `Retry-After`.
- `500`: Something broke on our side (`internal_error`). It has been logged under the `request_id`.

---

[API](https://skmtc.dev/ufcalendar/apis/ufcalendar-fight-api.md) · [All operations](https://skmtc.dev/ufcalendar/apis/ufcalendar-fight-api/llms.txt) · [OpenAPI document](https://skmtc.dev/ufcalendar/apis/ufcalendar-fight-api/revisions/9623cc8fb70b?raw)
