Machine-readable resources and the read-only Content API for terrieragency.com. Terrier Agency is an SEO, GEO (generative engine optimisation) and influencer-marketing agency; the API exposes site content only — there are no write operations.
| Spec | openapi.json (OpenAPI 3.0.3) |
|---|---|
| Base URL | https://www.terrieragency.com/wp-json/wp/v2 |
| Authentication | None required for reads. Write operations and /users are not public. |
| Errors | Structured JSON: {"code":"rest_post_invalid_id","message":"Invalid post ID.","data":{"status":404}} |
| Rate limits | 120 requests / 60 s per client IP, signalled in RateLimit headers; 429 + Retry-After when exceeded. Details. |
| Versioning | URL path (/wp/v2/); six months' notice via Deprecation and Sunset headers. Policy. |
| JSON index | Request this page with Accept: application/json for a machine-readable index. |
Anonymous requests are limited to 120 requests per 60-second window per client IP. Every response carries the IETF RateLimit and RateLimit-Policy header fields plus RateLimit-Limit, RateLimit-Remaining and RateLimit-Reset. When the quota is exhausted the API returns HTTP 429 with a Retry-After header (seconds) and an Error body whose code is terrier_rate_limited; wait Retry-After seconds, then resume. Read the headers to self-throttle rather than counting requests locally.
RateLimit: "default";r=119;t=42 RateLimit-Policy: "default";q=120;w=60 RateLimit-Limit: 120 RateLimit-Remaining: 119 RateLimit-Reset: 42
Over quota:
HTTP/1.1 429 Too Many Requests
Retry-After: 37
{"code":"terrier_rate_limited","message":"Rate limit exceeded: 120 requests per 60 seconds per client. Retry after 37 seconds.","data":{"status":429,"retry_after":37,"limit":120,"window":60}}
The API is versioned in the URL path (currently /wp/v2/). A version is never changed incompatibly in place: additive changes (new fields, new optional parameters, new endpoints) may land at any time without notice, and clients must ignore fields they do not recognise. Breaking changes ship as a new path version. When a version, endpoint or field is scheduled for removal it is announced at least six months in advance: responses from the affected surface carry a Deprecation header (RFC 9745) from the day the notice is given and a Sunset header (RFC 8594) giving the removal date, together with Link relations rel="deprecation" and rel="sunset" pointing at the migration notes. The removal date is also listed on the Developer Resources page. After the Sunset date the surface returns 410 Gone with an Error body. Nothing is currently deprecated.
| Current version | v2 (https://www.terrieragency.com/wp-json/wp/v2) |
|---|---|
| Deprecated | Nothing |
| Notice period | Six months minimum |
| Signals | Deprecation (RFC 9745), Sunset (RFC 8594), Link rel="deprecation", Link rel="sunset" |
Every non-2xx response is JSON with three fields: code (machine-readable), message (human-readable) and data.status (HTTP status). Codes in use: rest_invalid_param (400, with data.params), rest_post_invalid_id (404), rest_no_route (404), terrier_rate_limited (429, with data.retry_after). The schema is components.schemas.Error in the OpenAPI document; every operation references it for 400, 404, 429, 500 and default.
# Latest case studies curl "https://www.terrieragency.com/wp-json/wp/v2/case_study?per_page=5" # Search everything for GEO curl "https://www.terrieragency.com/wp-json/wp/v2/search?search=geo&per_page=5" # One blog post by slug curl "https://www.terrieragency.com/wp-json/wp/v2/posts?slug=semantic-seo-guide"
Email [email protected] or use the contact form.