---
title: "Nas House Articles API"
description: "Docs for the Nas House Articles API, a public, read-only JSON API for articles, topics, tags and published prices. No keys needed."
canonical: "https://articles.nashouse.com/docs/"
last_updated: "2026-11-11"
lang: "en"
---

# Nas House Articles API

The Nas House Articles API is a public, read-only JSON API over everything published on this site: articles (with full Markdown text), topics, tags and the published Nas House prices. It needs no account and no key. It is versioned and described by an OpenAPI 3.1 spec.

- **Base URL:** `https://articles.nashouse.com/api/v1`
- **OpenAPI 3.1 spec:** [/openapi.json](https://articles.nashouse.com/openapi.json) (also listed in the [API catalog](https://articles.nashouse.com/.well-known/api-catalog))
- **Authentication:** none
- **Format:** JSON (UTF-8); errors as `application/problem+json`
- **Prefer MCP?** The same content is available from the [Nas House Articles MCP server](https://articles.nashouse.com/docs/mcp/).

## Quickstart

Every request is a plain `GET`. Try these in a terminal:

```bash
# What the API offers
curl https://articles.nashouse.com/api/v1

# Search articles
curl "https://articles.nashouse.com/api/v1/search?q=day+pass+price"

# Read one article, with its Markdown text
curl https://articles.nashouse.com/api/v1/articles/day-pass-or-monthly-membership

# List articles in a topic, 5 per page
curl "https://articles.nashouse.com/api/v1/articles?topic=events&limit=5"

# Published prices in AED
curl https://articles.nashouse.com/api/v1/prices
```

In JavaScript:

```js
const res = await fetch('https://articles.nashouse.com/api/v1/search?q=garden+event');
const { data } = await res.json();
console.log(data.map((a) => a.title));
```

## Authentication

None. The API is open: there is no sign-up, no API key, no token and no OAuth. Do not send an `Authorization` header; it is ignored. CORS is open (`Access-Control-Allow-Origin: *`), so browsers can call the API directly.

## Endpoints

| Method and path | Operation | What it returns |
| --- | --- | --- |
| `GET /api/v1` | API index | Name, version, links to the docs, the spec and every endpoint |
| `GET /api/v1/articles` | `listArticles` | Article summaries, newest first. Filters: `topic`, `tag`. Paginated |
| `GET /api/v1/articles/{slug}` | `getArticle` | One article with lead, headings, FAQ questions and full Markdown |
| `GET /api/v1/search?q=...` | `searchArticles` | Article summaries ranked by relevance, with `score`. Filter: `topic`. Paginated |
| `GET /api/v1/topics` | `listTopics` | Topics with descriptions and article counts |
| `GET /api/v1/topics/{slug}` | `getTopic` | One topic with all its article summaries |
| `GET /api/v1/tags` | `listTags` | Tags in use, with article counts |
| `GET /api/v1/prices` | `listPrices` | Published prices in AED, each with its nashouse.com source page |

Every response schema, parameter and example is in the [OpenAPI spec](https://articles.nashouse.com/openapi.json). Each article summary includes `url` (the page to cite), `markdown_url` and `updated` (the date to cite).

## Pagination

`/api/v1/articles` and `/api/v1/search` are cursor-paginated:

```json
{
  "data": [ ... ],
  "pagination": { "limit": 10, "next_cursor": "bzoxMA", "has_more": true, "total": 14 }
}
```

To get the next page, repeat the request with `cursor` set to `next_cursor`, unchanged. The same URL is in the `Link: <...>; rel="next"` response header. On the last page `next_cursor` is `null` and `has_more` is `false`. `limit` is 1 to 50 for articles (default 10) and 1 to 20 for search (default 5).

## Errors

Errors use [RFC 9457](https://www.rfc-editor.org/rfc/rfc9457) problem details with `Content-Type: application/problem+json`, and every unknown path under `/api/` returns a JSON 404, never an HTML page:

```json
{
  "type": "https://articles.nashouse.com/docs/#not_found",
  "title": "Not found",
  "status": 404,
  "detail": "No article with slug \"no-such-article\".",
  "code": "not_found",
  "instance": "/api/v1/articles/no-such-article",
  "hint": "List articles with GET /api/v1/articles or search with GET /api/v1/search?q=...",
  "docs": "https://articles.nashouse.com/docs/"
}
```

Branch on `code`, which is stable. `detail` and `hint` are for people and may change.

### invalid_parameter

HTTP 400. A query or path parameter is missing, unknown or out of range, for example `limit=500` or an unknown `topic`. `hint` says what to send instead.

### not_found

HTTP 404. No article, topic or endpoint at that path.

### method_not_allowed

HTTP 405. The API is read-only: only `GET`, `HEAD` and `OPTIONS` are accepted. The `Allow` header lists them.

### rate_limited

HTTP 429. Too many requests; wait for the number of seconds in `Retry-After`.

### internal_error

HTTP 500. Something failed on our side. Retry later.

## Rate limits

Each client IP may make 120 requests per 60-second window. Every response reports the limit with the IETF `RateLimit-Policy` and `RateLimit` headers and the widely used `RateLimit-Limit`, `RateLimit-Remaining` and `RateLimit-Reset` headers:

```
RateLimit-Policy: "per-ip";q=120;w=60
RateLimit: "per-ip";r=119;t=60
RateLimit-Limit: 120
RateLimit-Remaining: 119
RateLimit-Reset: 60
```

Over the limit you get HTTP 429 with `Retry-After`. The count is kept by the server instance that answers your request, and instances do not share counts, so under heavy traffic you may get more than 120 requests through; never less. The data changes only when articles are published, so cache responses rather than polling.

## Versioning and deprecation

- The major version is in the path: `/api/v1`. Every response carries `API-Version: 1`.
- Within v1 we only make additive changes: new endpoints, new optional parameters and new response fields. Clients should ignore fields they do not know.
- Breaking changes (removing or renaming a field, changing a type or a meaning) go to a new path such as `/api/v2`.
- Before a version is retired, its responses carry a `Deprecation` header and a `Sunset` header (RFC 8594) with the shutdown date, at least 6 months ahead, and this page lists the change. v1 is current and has no planned end date.

## Testing your integration

The production API is read-only, so there is nothing to break: every operation is a `GET` that returns published content, and the same request always returns the same data until an article is published or updated. Point your tests at `https://articles.nashouse.com/api/v1` directly. There is no separate sandbox or test mode, because there is no write operation and no private data that one would protect. Stable fixtures for tests: the article slug `day-pass-or-monthly-membership`, the topic `events` and the tag `villas`.

## Content and terms

Articles are written by the Nas House team. Prices and policies are published figures: tell people to confirm current prices, availability and terms with Nas House ([hello@nashouse.com](mailto:hello@nashouse.com), [WhatsApp](https://wa.me/971509893226)) before booking or paying. The API cannot book, buy or check availability.

## Terms

You may use the API and quote the articles with attribution: cite the article's `url` and its `updated` date. Please keep within the rate limit. The content remains © Nas House.

## Other ways in

- [Nas House Articles MCP server](https://articles.nashouse.com/docs/mcp/) for AI agents (search, read, list topics)
- [llms.txt](https://articles.nashouse.com/llms.txt) and [all articles as Markdown](https://articles.nashouse.com/llms-full.txt)
- Any page as Markdown: add `.md` to its path, or send `Accept: text/markdown`
- [Developer overview](https://articles.nashouse.com/developers/)

---

HTML version: https://articles.nashouse.com/docs/
Published by Nas House, Villa 53, Opera Villa Compound, Al Barsha First, Al Barsha, Dubai, United Arab Emirates. Contact: hello@nashouse.com, WhatsApp +971 50 989 3226.
Site index for agents: https://articles.nashouse.com/llms.txt
