Acquia Content API

JSON:API resource endpoints for reading and writing entries.

Operations 8

Each operation below carries the questions people ask an LLM about it and the instructions they give an agent to run it. Generated by API Evangelist overlay

GET /api Discover the content types a site exposes · List available resource endpoints #
Ask an LLM
“Which content resource types can I query on my Drupal site's JSON:API?”
“What endpoints does the content API index list for this site?”
Tell an agent
Show me the index of content resource endpoints on this site.
List every resource type the content API makes available.
GET /api/{entityType}/{bundle} List content entries of one bundle · List entries of a bundle #
Ask an LLM
“How do I fetch all the articles on my site through the content API?”
“Can I filter, sort and page through entries of a content type?”
Tell an agent
List {entity_type} entries of bundle {bundle}.
Get {bundle} {entity_type} entries matching {filter}, sorted by {sort}.
POST /api/{entityType}/{bundle} Create a content entry · Create an entry #
Ask an LLM
“Can I publish a new article to my site through the content API?”
“What scope and site setting are needed before I can create content?”
Tell an agent
Create a new {bundle} {entity_type} entry with data {data}.
Add a {bundle} entry to {entity_type}.
GET /api/{entityType}/{bundle}/{uuid} Get one content entry by UUID · Get one entry #
Ask an LLM
“How can I read a single piece of content by its UUID?”
“Can I limit which fields come back when fetching one entry?”
Tell an agent
Get {bundle} {entity_type} entry {uuid}.
Fetch entry {uuid} from {entity_type}/{bundle} returning only fields {fields}.
PATCH /api/{entityType}/{bundle}/{uuid} Update an existing content entry · Update an entry #
Ask an LLM
“How do I edit the title or body of an article that's already published?”
“Can I change just some fields on an existing entry?”
Tell an agent
Update {bundle} {entity_type} entry {uuid} with data {data}.
Patch existing entry {uuid} in {entity_type}/{bundle}.
DELETE /api/{entityType}/{bundle}/{uuid} Delete a content entry · Delete an entry #
Ask an LLM
“Can I remove a piece of content from my site through the API?”
“What permissions does deleting an entry require?”
Tell an agent destructive · confirm first
Delete {bundle} {entity_type} entry {uuid}.
Remove entry {uuid} from {entity_type}/{bundle}.
GET /api/{entityType}/{bundle}/{uuid}/{field} Fetch the entries a relationship field points to · Get related entries #
Ask an LLM
“How do I get the full tags or author records an article references?”
“Can I pull the referenced entries with all their attributes in one call?”
Tell an agent
Get the full entries that field {field} of {entity_type}/{bundle} entry {uuid} references.
Load the related {field} records for {bundle} entry {uuid} in {entity_type}.
GET /api/{entityType}/{bundle}/{uuid}/relationships/{field} Read a relationship's linkage identifiers · Get a relationship's linkage #
Ask an LLM
“Can I see just the type and ID an entry points to, without the target's attributes?”
“What's the lightweight way to check which entries a relationship field links to?”
Tell an agent
Show only the linkage IDs for relationship {field} on {entity_type}/{bundle} entry {uuid}.
Get the type and id identifiers in the {field} relationship of entry {uuid} ({entity_type} {bundle}).

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/acquia:acquia-content-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

acquia-content-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Acquia Content API
  version: '1.1'
  description: The stable JSON:API surface shared by every Source CMS site, plus the OAuth 2.0 authentication endpoints that issue the tokens it accepts.
servers:
- url: '{siteUrl}'
  description: 'Your site''s base URL, the canonical ACQUIA_SITE_URL environment variable, with no trailing slash. Source CMS serves JSON:API under /api; headless Cloud Platform sites serve it under /jsonapi.

    '
  variables:
    siteUrl:
      default: https://your-site.example.com
      description: The ACQUIA_SITE_URL environment variable (no trailing slash).
tags:
- name: Content
  description: JSON:API resource endpoints for reading and writing entries.
paths:
  /api:
    get:
      tags:
      - Content
      operationId: apiRoot
      summary: List available resource endpoints
      description: Returns the index of resource endpoints available on the site, keyed by resource type (for example `node--article`). No version segment appears in the path; every response reports `jsonapi.version` `1.1`.
      security:
      - bearerAuth: []
      responses:
        '200':
          description: The API root document.
          content:
            application/vnd.api+json:
              schema:
                type: object
        '401':
          $ref: '#/components/responses/Unauthorized'
  /api/{entityType}/{bundle}:
    parameters:
    - $ref: '#/components/parameters/entityType'
    - $ref: '#/components/parameters/bundle'
    get:
      tags:
      - Content
      operationId: listEntries
      summary: List entries of a bundle
      description: A collection of entries of one bundle, for example `/api/node/article`. `data` is an array. `meta.count` is the collection total including entries the request cannot see, so `data` can be shorter than `meta.count`, or empty; check `meta.omitted` and follow `links.next`.
      security:
      - bearerAuth: []
      - {}
      parameters:
      - $ref: '#/components/parameters/filter'
      - $ref: '#/components/parameters/fields'
      - $ref: '#/components/parameters/include'
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/sort'
      responses:
        '200':
          description: A JSON:API collection document.
          content:
            application/vnd.api+json:
              schema:
                $ref: '#/components/schemas/CollectionDocument'
        '401':
          $ref: '#/components/responses/Unauthorized'
    post:
      tags:
      - Content
      operationId: createEntry
      summary: Create an entry
      description: Requires the site's allowed-operations setting (`API > JSON:API`) set to "Read and write" and a token whose client has the `content:administer` scope.
      security:
      - bearerAuth: []
      requestBody:
        required: true
        content:
          application/vnd.api+json:
            schema:
              $ref: '#/components/schemas/EntityDocument'
      responses:
        '201':
          description: The created entry.
          content:
            application/vnd.api+json:
              schema:
                $ref: '#/components/schemas/EntityDocument'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
  /api/{entityType}/{bundle}/{uuid}:
    parameters:
    - $ref: '#/components/parameters/entityType'
    - $ref: '#/components/parameters/bundle'
    - $ref: '#/components/parameters/uuid'
    get:
      tags:
      - Content
      operationId: getEntry
      summary: Get one entry
      description: One entry addressed by its UUID (the `id` in every response). `data` is a single object.
      security:
      - bearerAuth: []
      - {}
      parameters:
      - $ref: '#/components/parameters/fields'
      - $ref: '#/components/parameters/include'
      responses:
        '200':
          description: A JSON:API entity document.
          content:
            application/vnd.api+json:
              schema:
                $ref: '#/components/schemas/EntityDocument'
        '401':
          $ref: '#/components/responses/Unauthorized'
    patch:
      tags:
      - Content
      operationId: updateEntry
      summary: Update an entry
      description: Requires writes enabled and the `content:administer` scope (same as POST).
      security:
      - bearerAuth: []
      requestBody:
        required: true
        content:
          application/vnd.api+json:
            schema:
              $ref: '#/components/schemas/EntityDocument'
      responses:
        '200':
          description: The updated entry.
          content:
            application/vnd.api+json:
              schema:
                $ref: '#/components/schemas/EntityDocument'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
    delete:
      tags:
      - Content
      operationId: deleteEntry
      summary: Delete an entry
      description: Requires writes enabled and the `content:administer` scope (same as POST).
      security:
      - bearerAuth: []
      responses:
        '204':
          description: The entry was deleted.
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
  /api/{entityType}/{bundle}/{uuid}/{field}:
    parameters:
    - $ref: '#/components/parameters/entityType'
    - $ref: '#/components/parameters/bundle'
    - $ref: '#/components/parameters/uuid'
    - name: field
      in: path
      required: true
      schema:
        type: string
      description: A relationship field machine name.
    get:
      tags:
      - Content
      operationId: getRelated
      summary: Get related entries
      description: The referenced entries themselves, with full attributes, that a relationship field points at.
      security:
      - bearerAuth: []
      - {}
      responses:
        '200':
          description: A JSON:API document of the related entries.
          content:
            application/vnd.api+json:
              schema:
                type: object
        '401':
          $ref: '#/components/responses/Unauthorized'
  /api/{entityType}/{bundle}/{uuid}/relationships/{field}:
    parameters:
    - $ref: '#/components/parameters/entityType'
    - $ref: '#/components/parameters/bundle'
    - $ref: '#/components/parameters/uuid'
    - name: field
      in: path
      required: true
      schema:
        type: string
      description: A relationship field machine name.
    get:
      tags:
      - Content
      operationId: getRelationship
      summary: Get a relationship's linkage
      description: The linkage only (type + id identifiers, no attributes). Use it to read or rewrite what an entry points at without fetching the targets.
      security:
      - bearerAuth: []
      - {}
      responses:
        '200':
          description: A JSON:API relationship document.
          content:
            application/vnd.api+json:
              schema:
                type: object
        '401':
          $ref: '#/components/responses/Unauthorized'
components:
  parameters:
    page:
      name: page
      in: query
      required: false
      style: deepObject
      explode: true
      schema:
        type: object
      description: 'Pagination: `page[limit]` and `page[offset]`.'
    sort:
      name: sort
      in: query
      required: false
      schema:
        type: string
      description: Comma-separated field machine names; prefix with `-` for descending, for example `-created`.
    fields:
      name: fields
      in: query
      required: false
      style: deepObject
      explode: true
      schema:
        type: object
      description: 'Sparse fieldsets: `fields[node--article]=title,created` limits returned fields per type.'
    uuid:
      name: uuid
      in: path
      required: true
      schema:
        type: string
        format: uuid
      description: The entry's UUID, the `id` member of every response.
    include:
      name: include
      in: query
      required: false
      schema:
        type: string
      description: Comma-separated relationship paths to embed in `included`, for example `image,tags`.
    filter:
      name: filter
      in: query
      required: false
      style: deepObject
      explode: true
      schema:
        type: object
      description: 'Match entries by field value. Short form `filter[field]=value` (equality) or canonical form with `[condition][path]`, `[condition][operator]`, `[condition][value]`. Operators: =, <>, >, >=, <, <=, STARTS_WITH, CONTAINS, ENDS_WITH, IN, NOT IN, BETWEEN, NOT BETWEEN, IS NULL, IS NOT NULL. Date fields compare as UNIX timestamps. Field paths use machine names. Every operator is shown with a worked example in the [query parameter reference](/source-cms/reference/query-parameters/#operators).

        '
    entityType:
      name: entityType
      in: path
      required: true
      schema:
        type: string
        example: node
      description: An entity type machine name (for example `node`, `media`, `taxonomy_term`).
    bundle:
      name: bundle
      in: path
      required: true
      schema:
        type: string
        example: article
      description: A bundle machine name (for example `article`). The [content model reference](/source-cms/reference/content-model/#entity-types-and-bundles) maps each entity type to its bundle term and endpoint pattern.
  responses:
    Unauthorized:
      description: 'Missing, malformed, or expired token. Access tokens live 300 seconds. The diagnostic is in the `WWW-Authenticate` response header; the body may be HTML, not JSON.

        '
      content:
        application/vnd.api+json:
          schema:
            $ref: '#/components/schemas/ErrorDocument'
    Forbidden:
      description: 'The token is valid but lacks the required scope (for example writing without `content:administer`). The JSON:API error `detail` names the missing permission.

        '
      content:
        application/vnd.api+json:
          schema:
            $ref: '#/components/schemas/ErrorDocument'
          example:
            errors:
            - status: '403'
              detail: The 'administer nodes' permission is required.
  schemas:
    EntityDocument:
      type: object
      properties:
        jsonapi:
          type: object
          properties:
            version:
              type: string
              const: '1.1'
        data:
          $ref: '#/components/schemas/ResourceObject'
        links:
          type: object
        included:
          type: array
          items:
            $ref: '#/components/schemas/ResourceObject'
    CollectionDocument:
      type: object
      properties:
        jsonapi:
          type: object
          properties:
            version:
              type: string
              const: '1.1'
        data:
          type: array
          items:
            $ref: '#/components/schemas/ResourceObject'
        meta:
          type: object
          properties:
            count:
              type: integer
        links:
          type: object
        included:
          type: array
          items:
            $ref: '#/components/schemas/ResourceObject'
    ErrorDocument:
      type: object
      properties:
        errors:
          type: array
          items:
            type: object
            properties:
              status:
                type: string
              title:
                type: string
              detail:
                type: string
    ResourceObject:
      type: object
      properties:
        type:
          type: string
          example: node--article
        id:
          type: string
          format: uuid
        attributes:
          type: object
        relationships:
          type: object
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: '`Authorization: Bearer <token>` with one space after Bearer. Tokens come from POST /oauth/token. Not required for published-content GETs when the site''s `Public access` (`API > JSON:API`) is Yes.

        '
    oauth2:
      type: oauth2
      flows:
        clientCredentials:
          tokenUrl: https://your-site.example.com/oauth/token
          scopes:
            content:administer: Create, update, and delete entries over JSON:API.
        authorizationCode:
          authorizationUrl: https://your-site.example.com/oauth/authorize
          tokenUrl: https://your-site.example.com/oauth/token
          scopes:
            content:administer: Create, update, and delete entries over JSON:API.