Login Register

API

Open API documentation

For bringing public Goxost blog data into your own site or application. Sign up, grab a key in your cabinet, and start.

Getting started

The API is read-only: every request is a GET and data comes back as JSON. Base address:

https://goxost.net/api/public/v1
You can try it without a key too — up to 50 requests a day.

Key and permissions

The key can be sent two ways; both work the same:

Authorization: Bearer gx_a1B2c3D4e5F6g7H8i9J0k1L2m3N4o5P6

X-Api-Key: gx_a1B2c3D4e5F6g7H8i9J0k1L2m3N4o5P6
Do not put the key in the URL (?api_key=) — it ends up in browser history and server logs.

Each key carries permissions. Without the right one the response is 403:

Permission What it opens
blog:read Articles — List of published articles and their full text
taxonomy:read Categories and tags — Category and tag lists with article counts
authors:read Authors — Public author details: name, username and avatar

Limits

Two limits apply at once:

Who Per day
No key (per IP) 50
With a key 100
With a key (administrator) 1000
Per minute 30 requests per minute
The daily limit belongs to the account, not the key — extra keys do not raise it.

Every response reports the limit state in headers:

X-Quota-Limit: 100
X-Quota-Used: 37
X-Quota-Remaining: 63
X-Quota-Reset: 1786579199

Response format

All responses share one shape. On success:

{
  "success": true,
  "data": { }
}

On error:

{
  "success": false,
  "message": "Article not found."
}

List endpoints put paging details in meta:

{
  "success": true,
  "data": {
    "items": [ ],
    "meta": { "page": 1, "per_page": 15, "last_page": 4, "total": 52 }
  }
}

Endpoints

GET /api/public/v1

A short overview of the API: available endpoints, permissions and limits.

Parameters

No parameters

Sample response

{
    "success": true,
    "data": {
        "name": "Goxost ochiq API",
        "version": "v1",
        "endpoints": [
            "GET /posts",
            "GET /categories",
            "…"
        ]
    }
}
GET /api/public/v1/me

The state of your key: which permissions it has and how much quota you used today.

Parameters

No parameters

Sample response

{
    "success": true,
    "data": {
        "key": {
            "name": "Saytim uchun",
            "prefix": "gx_a1B2c3D4",
            "scopes": [
                "blog:read"
            ]
        },
        "quota": {
            "limit": 100,
            "used": 37,
            "remaining": 63
        }
    }
}
GET /api/public/v1/posts blog:read

Published articles. Filter by category, tag or author, and search by text.

Parameters

Parameter Type Description
category string Category slug, taken from /categories.
tag string A tag. A hyphen is accepted in place of a space.
author string The author's username.
q string Search term. Matches title, description and tags.
sort string Order: new (default), old, popular.
per_page integer Records per page. From 1 to 50, 15 by default.
page integer Page number, starting at 1.

Sample response

{
    "success": true,
    "data": {
        "items": [
            {
                "slug": "hosting-tanlash",
                "title": "Hosting tanlashda nimaga qarash kerak",
                "description": "Qisqacha tavsif…",
                "cover": "https://goxost.net/posters/1.webp",
                "views": 1240,
                "tags": [
                    "hosting",
                    "maslahat"
                ],
                "category": {
                    "name": "Hosting",
                    "slug": "hosting"
                },
                "author": {
                    "name": "Xurshidbek",
                    "username": "xurshid"
                },
                "url": "https://goxost.net/uz/post/hosting-tanlash",
                "published_at": "2026-08-01T10:00:00+05:00"
            }
        ],
        "meta": {
            "page": 1,
            "per_page": 15,
            "last_page": 4,
            "total": 52
        }
    }
}
GET /api/public/v1/posts/{slug} blog:read

The full text of one article. HTML is sanitised before it is returned.

Parameters

Parameter Type Description
slug string The article slug — the slug field from the list.

Sample response

{
    "success": true,
    "data": {
        "slug": "hosting-tanlash",
        "title": "Hosting tanlashda nimaga qarash kerak",
        "content": "<p>Maqola matni…</p>",
        "tags": [
            "hosting"
        ],
        "seo": {
            "meta_title": "…",
            "meta_description": "…"
        },
        "published_at": "2026-08-01T10:00:00+05:00"
    }
}
GET /api/public/v1/categories taxonomy:read

All categories with the number of published articles in each.

Parameters

No parameters

Sample response

{
    "success": true,
    "data": [
        {
            "name": "Hosting",
            "slug": "hosting",
            "posts_count": 24,
            "url": "https://goxost.net/uz/category/hosting"
        }
    ]
}
GET /api/public/v1/tags taxonomy:read

Tags, ordered by how many articles carry them.

Parameters

No parameters

Sample response

{
    "success": true,
    "data": [
        {
            "name": "hosting",
            "slug": "hosting",
            "posts_count": 31,
            "url": "https://goxost.net/uz/tags/hosting"
        }
    ]
}
GET /api/public/v1/authors authors:read

Authors with published articles. Public details only: name, username, avatar.

Parameters

Parameter Type Description
per_page integer Records per page. From 1 to 50, 15 by default.
page integer Page number, starting at 1.

Sample response

{
    "success": true,
    "data": {
        "items": [
            {
                "name": "Xurshidbek",
                "username": "xurshid",
                "avatar": "https://goxost.net/avatars/x.webp",
                "posts_count": 12
            }
        ],
        "meta": {
            "page": 1,
            "per_page": 15,
            "last_page": 1,
            "total": 3
        }
    }
}
GET /api/public/v1/authors/{username} authors:read

Public details of a single author.

Parameters

Parameter Type Description
username string The author's username.

Sample response

{
    "success": true,
    "data": {
        "name": "Xurshidbek",
        "username": "xurshid",
        "avatar": "https://goxost.net/avatars/x.webp",
        "posts_count": 12
    }
}

Errors

Code When
400 A request parameter is wrong (for example per_page is too large).
401 The key is invalid or revoked.
403 The key lacks the required permission.
404 The requested article or author does not exist.
422 Validation failed — the reason is in errors.
429 Limit reached: daily quota or per-minute limit.
500 Unexpected server error. If it repeats, write to us.

Examples

In the examples below, replace gx_… with your own key.

curl -H "Authorization: Bearer gx_a1B2c3D4e5F6g7H8i9J0k1L2m3N4o5P6" \
     -H "Accept: application/json" \
     "https://goxost.net/api/public/v1/posts?per_page=5&sort=popular"
Questions or ideas — write to us through the support section in your cabinet.