API i dokumentacija
===================

  ASPEKT publishes a free, read-only JSON API for agents and developers. It exposes our company profile, services, industry-specific products, blog posts, portfolio projects and client reviews. There is no registration, no API key and no rate limit on the public endpoints.

Base URL and authentication
---------------------------

 All endpoints live under . Authentication is not required: send a plain `GET` request and you receive JSON. The same data is available through our [MCP server](https://aspekt.co/.well-known/mcp/server-card.json), which is handy for LLM tool calling.

 Responses are UTF-8 JSON. Blog posts and reviews are paginated with the `page` and `per_page` query parameters, where `per_page` accepts 1 to 50.

Rate limits
-----------

 The public API allows **120 requests per 60 seconds per client IP**. Every response carries the IETF structured fields so an agent can self-throttle before it is blocked:

 ```
RateLimit-Policy: "aspekt-api";q=120;w=60
RateLimit: "aspekt-api";r=118;t=42
```

 A `429` response keeps the same JSON error shape and adds `Retry-After` in seconds.

Versioning and deprecation
--------------------------

 The major version lives in the URL path (`/api/v1`). Additive changes happen inside `/v1`; breaking changes ship under a new major path, so an integration against `/v1` keeps working.

 When an endpoint is scheduled for removal it announces itself with [RFC 9745](https://www.rfc-editor.org/rfc/rfc9745) headers:

 ```
Deprecation: @1735689600
Sunset: Wed, 01 Jul 2026 00:00:00 GMT
```

 Removal never happens before the `Sunset` date, and the replacement endpoint is named in the response documentation. No endpoint is deprecated today.

Quick start
-----------

### Read the company profile

Use the agency endpoint as a zero-cost sandbox call. It needs no credentials and returns a stable schema.

 ```
curl -sS https://aspekt.co/api/v1/agency
```

### List blog posts

Every collection endpoint accepts pagination parameters and returns page metadata.

 ```
curl -sS "https://aspekt.co/api/v1/posts?per_page=5&page=1"
```

### Handle errors

 Errors are JSON, never HTML, and always carry a machine-readable code plus a hint about what to do next. Unknown API paths return a 404 in this shape:

 ```
{
    "error": {
        "status": 404,
        "code": "not_found",
        "message": "The requested resource does not exist.",
        "hint": "Browse the API index at https://aspekt.co/api/v1, read the documentation at https://aspekt.co/docs or download the OpenAPI description at https://aspekt.co/openapi.json.",
        "path": "/api/v1/unknown",
        "docs": "https://aspekt.co/docs",
        "openapi": "https://aspekt.co/openapi.json"
    }
}
```

Endpoints
---------

    Method Path Description     GET [/api/v1](https://aspekt.co/api/v1) API index: version, documentation, MCP server and every resource URL.   GET [/api/v1/agency](https://aspekt.co/api/v1/agency) Company profile, contact details, rating, services, products and agent guidance.   GET [/api/v1/services](https://aspekt.co/api/v1/services) Core services with identifiers, summaries and landing page URLs.   GET [/api/v1/products](https://aspekt.co/api/v1/products) Industry-specific CMS products for tourism, transfers, real estate and more.   GET [/api/v1/posts](https://aspekt.co/api/v1/posts) Published blog posts, newest first. Paginated.   GET /api/v1/posts/{slug} A single blog post with its canonical URL.   GET [/api/v1/portfolio](https://aspekt.co/api/v1/portfolio) Portfolio projects with links to the live websites.   GET [/api/v1/reviews](https://aspekt.co/api/v1/reviews) Client reviews with rating, author and plain-text comment. Paginated.    

OpenAPI specification
---------------------

 The complete machine-readable contract is published at  (OpenAPI 3.1.0). Every operation has a unique `operationId`, a description, typed parameters and response schemas, so the spec can be used directly for function calling, SDK generation and automated testing.

MCP server
----------

 Agents that speak the Model Context Protocol can connect to  over Streamable HTTP. The server exposes the `get_agency_info` tool and Markdown/JSON resources with the same information as the REST API. The server card is published at [/.well-known/mcp/server-card.json](https://aspekt.co/.well-known/mcp/server-card.json).

 Protocol versions: `2026-07-28` using the discovery handshake (`server/discover`, no `initialize` required), plus `2025-11-25` and `2025-06-18` via the classic `initialize` handshake.

 ```
curl -X POST https://aspekt.co/mcp \
  -H "Content-Type: application/json" \
  -H "MCP-Protocol-Version: 2026-07-28" \
  -H "Mcp-Method: server/discover" \
  -d '{"jsonrpc":"2.0","id":1,"method":"server/discover","params":{"_meta":{"io.modelcontextprotocol/protocolVersion":"2026-07-28"}}}'
```

Agent discovery files
---------------------

- [/llms.txt](https://aspekt.co/llms.txt) - concise index of the site for language models.
- [/llm-info.json](https://aspekt.co/llm-info.json) - structured agency profile.
- [/auth.md](https://aspekt.co/auth.md) - agent access policy.
- [/.well-known/agent-skills/index.json](https://aspekt.co/.well-known/agent-skills/index.json) - published agent skills.
- [/.well-known/api-catalog](https://aspekt.co/.well-known/api-catalog) - API catalog per RFC 9727.
- [/sitemap.xml](https://aspekt.co/sitemap.xml) - every public URL on the website.

Support
-------

 Need a custom integration, a higher volume endpoint or a sandbox with write access? Email  or use the [contact form](https://aspekt.co/kontakt). We answer within one business day.
