API & MCP 4 min read

JSON:API Overview

Getting started with Catalio's JSON:API - authentication, endpoints, and interactive documentation.

Updated
On this page

Catalio exposes a JSON:API-compatible REST surface (jsonapi.org). We describe the JSON:API resource/relationship/error shape without pinning a 1.0 vs 1.1 version label — use the interactive docs below as the source of truth for complete endpoint details, schemas, and live testing.

Interactive Documentation

Start here: The Swagger UI is the best way to explore the API.

Resource Description
Swagger UI Interactive API explorer with live testing
OpenAPI Spec Download for client generation or import tools
Bruno Collection Pre-built API collection for Bruno REST client

Using Swagger UI:

  1. Navigate to /api/swaggerui
  2. Click Authorize and enter: Bearer YOUR_TOKEN_HERE
  3. Browse resources, expand operations, and click Try it out

Authentication

All endpoints require Bearer token authentication. See the Authentication Guide for token management.

Bash
curl /api/v1/requirements \
  -H "Authorization: Bearer ${TOKEN}" \
  -H "Accept: application/vnd.api+json"
Header Value Required For
Authorization Bearer {token} All requests
Content-Type application/vnd.api+json POST/PATCH
Accept application/vnd.api+json All requests

Available Resources

Resource Endpoint Description
Requirement /api/v1/requirements Business requirements with AI-powered analysis
Persona /api/v1/personas User personas and stakeholder roles
UseCase /api/v1/use-cases Acceptance criteria and behavioral specifications
TestCase /api/v1/test-cases Test scenarios with steps and expected results
TestResult /api/v1/test-results Test execution records and results
Component /api/v1/components System components and architectural modules
Process /api/v1/processes Business processes and workflows
Policy /api/v1/policies Governance policies and compliance requirements
Capability /api/v1/capabilities Business capabilities for capability-based planning
Team /api/v1/teams Organizational units responsible for requirements

These resources are also available, with the same CRUD routes:

Resource Endpoint Description
Initiative /api/v1/initiatives Initiatives and their stage-gated lifecycle
Journey /api/v1/journeys User journeys through an application
JourneyStep /api/v1/journey-steps Individual steps within a journey
Jtbd /api/v1/jtbds Jobs to be done
JourneyComparison /api/v1/journey-comparisons Legacy vs. target journey comparisons for a JTBD
IssueLink /api/v1/issue-links Links from catalog items to external issues

All resources above support standard CRUD: GET (list/show), POST (create), PATCH (update), DELETE.

Initiative-scoped resources — /api/v1/initiative-questions, /api/v1/initiative-decisions, /api/v1/capability-assessments, /api/v1/initiative-scope, and /api/v1/change-proposals — list records for one initiative at a time, so their list routes require an initiative ID. Change proposals can also be listed per application; see the API Endpoint Reference for those routes. Check the Swagger UI for each route’s parameters and supported operations.

Quick Reference

Filtering, Sorting & Pagination

Bash
# Filter by field
GET /api/v1/requirements?filter[status]=active

# Sort (prefix - for descending)
GET /api/v1/requirements?sort=-updated_at

# Include relationships
GET /api/v1/requirements?include=personas,use_cases

# Combine filter, sort, and include
GET /api/v1/requirements?filter[status]=active&sort=-priority&include=personas

Pagination

The /requirements, /personas, /use-cases, and /initiatives list routes are paginated. Most other list routes (TestCase, TestResult, Component, Process, Policy, Capability, Team) are not, and return the full result set.

On a paginated route, leaving out page[*] returns the first 25 records, not the whole collection:

  • page[limit] sets the page size (default 25). /requirements caps a page at 50.
  • page[offset] pages by offset.
  • page[after] / page[before] page by cursor, using the cursors returned in links.
Bash
GET /api/v1/requirements?page[limit]=20&page[offset]=40

To read every record, follow the links.next URL until it is empty. Cursor paging stays stable when records are added while you page; offset paging can skip or repeat rows.

Treat cursors as opaque: use the value the API returned, and don’t build or parse your own. A cursor belongs to the sort order it was issued under, so changing sort invalidates it. An invalid cursor returns 400 with an error code of invalid_keyset. page[size] and page[number] are not supported and are ignored.

Create Example

Bash
curl -X POST /api/v1/requirements \
  -H "Authorization: Bearer ${TOKEN}" \
  -H "Content-Type: application/vnd.api+json" \
  -d '{
    "data": {
      "type": "Requirement",
      "attributes": {
        "title": "OAuth2 Authentication",
        "user_want": "authenticate using OAuth2",
        "user_benefit": "secure passwordless access",
        "personas": [{"id": "<persona-uuid>"}]
      }
    }
  }'

Common Status Codes

Status Meaning
200 Success (GET/PATCH)
201 Created (POST)
204 Deleted
400 Bad request
401 Unauthorized
404 Not found
422 Validation failed

Multi-Tenant Security

All requests are automatically scoped to your organization based on your authentication token. Cross-tenant access returns 404 (not 403) for security.

Next Steps