---
title: Developer Portal
description: "Contrive Solutions doesn't sell a public API product. This page documents the read-only, no-auth-required content endpoints the site already exposes, so AI agents, LLM crawlers, and integrators have one place..."
canonical_url: "/developers/"
date_published: "2026-09-11"
date_modified: "2026-09-11"
type: page
author: Contrive Solutions
---

# Developer Portal

Contrive Solutions doesn’t sell a public API product. This page documents the read-only, no-auth-required content endpoints the site already exposes, so AI agents, LLM crawlers, and integrators have one place to find them.


## Quickstart


Every published page is available as clean Markdown two ways:


```
# 1. Fetch the .md sibling of any page URL
curl /about-us.md

# 2. Or content-negotiate on the canonical URL itself
curl -H "Accept: text/markdown" /about-us/
```


Both return the same document: YAML front matter followed by the page’s Markdown body. Responses are cached and set `Vary: Accept, Accept-Encoding` so caches and CDNs never mix up the HTML and Markdown variants.


## REST API


Base: `/wp-json/contrive/v1/`. No authentication required: all three routes are public reads. Full machine-readable description: [/openapi.json](/openapi.json) (OpenAPI 3.0).


| Route | Method | Returns |
| --- | --- | --- |
| `/pages` | GET | JSON array of every published page: id, title, URL, Markdown URL, last-modified date. Use this as a machine-readable site map. |
| `/markdown/{slug}` | GET | Markdown document for a single page by its slug/path. |
| `/llms` | GET | The curated llms.txt content as JSON. |


## Machine-readable resource index


- [/llms.txt](/llms.txt): curated company info in the [llmstxt.org](https://llmstxt.org) format
- [/llms-full.txt](/llms-full.txt): comprehensive version of the above
- [/ai.txt](/ai.txt): per-AI-model citation guidance (ChatGPT, Claude, Perplexity, Gemini, Copilot)
- [/openapi.json](/openapi.json): OpenAPI 3.0 spec for this page’s REST API table above


## Crawling & rate limits


Known AI crawler user agents (GPTBot, ClaudeBot, PerplexityBot, Google-Extended, and others) are explicitly allowed in [/robots.txt](/robots.txt) and are rate-limited at 100 requests/minute per IP. Non-existent URLs always return a real HTTP 404 with a short Markdown body linking back to the resources on this page, never a 200 with the app shell.


## Access


Everything above is public and unauthenticated. If you need authenticated write access to WordPress’s own REST API for another purpose, use [WordPress Application Passwords](/wp-admin/authorize-application.php) (built into core, already installed) rather than asking us for a separate key, there isn’t one.