Loom
Loom Content API
Pull published articles from a Loom site as JSON: list, search, and fetch by slug, with the SEO fields your pages should use verbatim.
Loom is the Qweaver content studio. Every Loom site exposes its PUBLISHED articles through one JSON endpoint, so any website, app, or agent can render the blog without touching the studio. This is the same API the qweaver.com blog itself consumes.
Endpoint and auth
POST https://loom.qweaver.com/api/content
Authorization: Bearer <site API key>
Content-Type: application/json- The key is per-site, found in Loom under the site’s Developer API section. Store it as a server-side env var (for example CONTENT_API_KEY); never ship it in client-side code.
- CORS is open (Access-Control-Allow-Origin: *), methods POST and OPTIONS.
- Only published articles are returned.
List articles
curl -s https://loom.qweaver.com/api/content \
-H "Authorization: Bearer $CONTENT_API_KEY" \
-H "Content-Type: application/json" \
-d '{"action":"list_articles","limit":20,"offset":0}'| Field | Type | Notes |
|---|---|---|
| action | string | list_articles |
| limit | number | 1-50, default 20 |
| offset | number | default 0; page with pagination.has_more |
| sort | string | published_at_asc for oldest-first; default newest-first |
| search | string | optional text filter |
| category_slug / author_slug | string | optional archive filters |
The response carries articles[], pagination {limit, offset, total, has_more}, site {id, name, domain}, and generated_at.
Fetch one article
curl -s https://loom.qweaver.com/api/content \
-H "Authorization: Bearer $CONTENT_API_KEY" \
-H "Content-Type: application/json" \
-d '{"slug":"your-article-slug"}'Passing a slug with no action returns the single article including its full content HTML. Article fields: id, title, slug, excerpt, featured_image, seo_title, meta_description, published_at, updated_at, category, author_name, category_slug, author_slug, canonical_url.
Errors
| Status | Meaning |
|---|---|
| 401 | Missing or invalid API key |
| 404 | Article not found (bad slug, or not published) |
| 400 | Missing required payload (no action and no slug) |
Rendering rules that make the SEO work
- Server-render the pages. AI crawlers (GPTBot, ClaudeBot, PerplexityBot) do not run JavaScript; a client-side-only blog is invisible to them.
- Use seo_title and meta_description verbatim as the page title and description.
- Emit canonical_url as the canonical link.
- Use featured_image as og:image.
- The content HTML can carry FAQ blocks; render them with FAQPage JSON-LD so answer engines can lift them.