Circle Pharma Content API

The anonymously readable WordPress REST API behind circlepharma.com. It exposes Circle Pharma press releases, publications and in-the-news items (posts), site pages, the media library, the leadership and board roster (team + member_type taxonomy), the events calendar (all_events + event_type taxonomy) and cross-content search. This is not a developer product Circle Pharma markets; it is the site's own discovery surface, published at /wp-json/ and verified to return data without credentials. The OpenAPI in this repo is derived from that published route index.

OpenAPI Specification

circle-pharma-content-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Circle Pharma Content API (WordPress REST API)
  version: wp/v2
  description: Anonymously readable content API for circlepharma.com, derived from the WordPress REST
    API route index the site publishes at https://circlepharma.com/wp-json/. It exposes Circle Pharma
    press releases, publications, in-the-news items and pages (posts/pages), the media library, the leadership/board
    roster (team + member_type), the events calendar (all_events + event_type), and site search. Circle
    Pharma does not publish a developer program or a hand-authored specification; this document is a faithful
    derivation of the routes, parameters and defaults the site itself advertises, restricted to the read
    operations verified to return HTTP 200 without credentials. Write operations exist on the same routes
    but are authenticated administrative endpoints, not a public API offering, and are deliberately not
    modelled here.
  contact:
    name: Circle Pharma
    email: info@circlepharma.com
    url: https://circlepharma.com/contact-us
  x-derived-from: https://circlepharma.com/wp-json/
  x-derived-on: '2026-08-01'
  x-api-evangelist-note: Derived by the API Evangelist enrichment pipeline from the provider-published
    WordPress REST route index; not authored or endorsed by Circle Pharma.
servers:
- url: https://circlepharma.com/wp-json
  description: Production
tags:
- name: Posts
  description: Press releases, publications and in-the-news items
- name: Pages
  description: Static site pages (pipeline, science, clinical trials)
- name: Media
  description: Media library items
- name: Categories
  description: Post categories
- name: Tags
  description: Post tags
- name: Team
  description: Leadership, board and team member records
- name: Events
  description: Upcoming and past events
- name: Comments
  description: Comments on posts
- name: Search
  description: Cross-content search
- name: Discovery
  description: Route index, content types, taxonomies and statuses
paths:
  /:
    get:
      operationId: getRouteIndex
      tags:
      - Discovery
      summary: Get the REST API route index
      description: Returns the site name, description, namespaces, authentication schemes and every registered
        route.
      security:
      - {}
      responses:
        '200':
          description: Route index
          content:
            application/json:
              schema:
                type: object
  /wp/v2:
    get:
      operationId: getCoreNamespaceIndex
      tags:
      - Discovery
      summary: Get the wp/v2 namespace index
      security:
      - {}
      responses:
        '200':
          description: Namespace index
          content:
            application/json:
              schema:
                type: object
  /wp/v2/posts:
    get:
      operationId: listPosts
      tags:
      - Posts
      summary: List Post records
      description: Collection is paginated with `page` and `per_page`; the response carries `X-WP-Total`
        and `X-WP-TotalPages` headers and RFC 8288 `Link` rel="next"/"prev".
      parameters:
      - name: after
        in: query
        required: false
        schema:
          type: string
          format: date-time
        description: Limit response to posts published after a given ISO8601 compliant date.
      - name: author
        in: query
        required: false
        schema:
          type: array
          default: []
          items:
            type: integer
        description: Limit result set to posts assigned to specific authors.
      - name: author_exclude
        in: query
        required: false
        schema:
          type: array
          default: []
          items:
            type: integer
        description: Ensure result set excludes posts assigned to specific authors.
      - name: before
        in: query
        required: false
        schema:
          type: string
          format: date-time
        description: Limit response to posts published before a given ISO8601 compliant date.
      - name: categories
        in: query
        required: false
        schema:
          type:
          - object
          - array
        description: Limit result set to items with specific terms assigned in the categories taxonomy.
      - name: categories_exclude
        in: query
        required: false
        schema:
          type:
          - object
          - array
        description: Limit result set to items except those with specific terms assigned in the categories
          taxonomy.
      - name: context
        in: query
        required: false
        schema:
          type: string
          enum:
          - view
          - embed
          - edit
          default: view
        description: Scope under which the request is made; determines fields present in response.
      - name: exclude
        in: query
        required: false
        schema:
          type: array
          default: []
          items:
            type: integer
        description: Ensure result set excludes specific IDs.
      - name: format
        in: query
        required: false
        schema:
          type: array
          items:
            type: string
            enum:
            - standard
            - aside
            - chat
            - gallery
            - link
            - image
            - quote
            - status
            - video
            - audio
        description: Limit result set to items assigned one or more given formats.
      - name: ignore_sticky
        in: query
        required: false
        schema:
          type: boolean
          default: true
        description: Whether to ignore sticky posts or not.
      - name: include
        in: query
        required: false
        schema:
          type: array
          default: []
          items:
            type: integer
        description: Limit result set to specific IDs.
      - name: modified_after
        in: query
        required: false
        schema:
          type: string
          format: date-time
        description: Limit response to posts modified after a given ISO8601 compliant date.
      - name: modified_before
        in: query
        required: false
        schema:
          type: string
          format: date-time
        description: Limit response to posts modified before a given ISO8601 compliant date.
      - name: offset
        in: query
        required: false
        schema:
          type: integer
        description: Offset the result set by a specific number of items.
      - name: order
        in: query
        required: false
        schema:
          type: string
          enum:
          - asc
          - desc
          default: desc
        description: Order sort attribute ascending or descending.
      - name: orderby
        in: query
        required: false
        schema:
          type: string
          enum:
          - author
          - date
          - id
          - include
          - modified
          - parent
          - relevance
          - slug
          - include_slugs
          - title
          default: date
        description: Sort collection by post attribute.
      - name: page
        in: query
        required: false
        schema:
          type: integer
          default: 1
          minimum: 1
        description: Current page of the collection.
      - name: per_page
        in: query
        required: false
        schema:
          type: integer
          default: 10
          minimum: 1
          maximum: 100
        description: Maximum number of items to be returned in result set.
      - name: search
        in: query
        required: false
        schema:
          type: string
        description: Limit results to those matching a string.
      - name: search_columns
        in: query
        required: false
        schema:
          type: array
          default: []
          items:
            type: string
            enum:
            - post_title
            - post_content
            - post_excerpt
        description: Array of column names to be searched.
      - name: search_semantics
        in: query
        required: false
        schema:
          type: string
          enum:
          - exact
        description: How to interpret the search input.
      - name: slug
        in: query
        required: false
        schema:
          type: array
          items:
            type: string
        description: Limit result set to posts with one or more specific slugs.
      - name: status
        in: query
        required: false
        schema:
          type: array
          default: publish
          items:
            type: string
            enum:
            - publish
            - future
            - draft
            - pending
            - private
            - trash
            - auto-draft
            - inherit
            - request-pending
            - request-confirmed
            - request-failed
            - request-completed
            - acf-disabled
            - any
        description: Limit result set to posts assigned one or more statuses.
      - name: sticky
        in: query
        required: false
        schema:
          type: boolean
        description: Limit result set to items that are sticky.
      - name: tags
        in: query
        required: false
        schema:
          type:
          - object
          - array
        description: Limit result set to items with specific terms assigned in the tags taxonomy.
      - name: tags_exclude
        in: query
        required: false
        schema:
          type:
          - object
          - array
        description: Limit result set to items except those with specific terms assigned in the tags taxonomy.
      - name: tax_relation
        in: query
        required: false
        schema:
          type: string
          enum:
          - AND
          - OR
        description: Limit result set based on relationship between multiple taxonomies.
      security:
      - {}
      responses:
        '200':
          description: A page of Post records
          headers:
            X-WP-Total:
              description: Total number of records
              schema:
                type: integer
            X-WP-TotalPages:
              description: Total number of pages
              schema:
                type: integer
            Link:
              description: RFC 8288 pagination links (rel="next", rel="prev")
              schema:
                type: string
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Post'
        '400':
          $ref: '#/components/responses/Error'
        '404':
          $ref: '#/components/responses/Error'
  /wp/v2/posts/{id}:
    get:
      operationId: getPost
      tags:
      - Posts
      summary: Get a single Post record
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: integer
        description: Unique identifier for the post.
      - name: context
        in: query
        required: false
        schema:
          type: string
          enum:
          - view
          - embed
          - edit
          default: view
        description: Scope under which the request is made; determines fields present in response.
      - name: excerpt_length
        in: query
        required: false
        schema:
          type: integer
        description: Override the default excerpt length.
      - name: password
        in: query
        required: false
        schema:
          type: string
        description: The password for the post if it is password protected.
      security:
      - {}
      responses:
        '200':
          description: The Post record
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Post'
        '404':
          $ref: '#/components/responses/Error'
  /wp/v2/pages:
    get:
      operationId: listPages
      tags:
      - Pages
      summary: List Page records
      description: Collection is paginated with `page` and `per_page`; the response carries `X-WP-Total`
        and `X-WP-TotalPages` headers and RFC 8288 `Link` rel="next"/"prev".
      parameters:
      - name: after
        in: query
        required: false
        schema:
          type: string
          format: date-time
        description: Limit response to posts published after a given ISO8601 compliant date.
      - name: author
        in: query
        required: false
        schema:
          type: array
          default: []
          items:
            type: integer
        description: Limit result set to posts assigned to specific authors.
      - name: author_exclude
        in: query
        required: false
        schema:
          type: array
          default: []
          items:
            type: integer
        description: Ensure result set excludes posts assigned to specific authors.
      - name: before
        in: query
        required: false
        schema:
          type: string
          format: date-time
        description: Limit response to posts published before a given ISO8601 compliant date.
      - name: context
        in: query
        required: false
        schema:
          type: string
          enum:
          - view
          - embed
          - edit
          default: view
        description: Scope under which the request is made; determines fields present in response.
      - name: exclude
        in: query
        required: false
        schema:
          type: array
          default: []
          items:
            type: integer
        description: Ensure result set excludes specific IDs.
      - name: include
        in: query
        required: false
        schema:
          type: array
          default: []
          items:
            type: integer
        description: Limit result set to specific IDs.
      - name: menu_order
        in: query
        required: false
        schema:
          type: integer
        description: Limit result set to posts with a specific menu_order value.
      - name: modified_after
        in: query
        required: false
        schema:
          type: string
          format: date-time
        description: Limit response to posts modified after a given ISO8601 compliant date.
      - name: modified_before
        in: query
        required: false
        schema:
          type: string
          format: date-time
        description: Limit response to posts modified before a given ISO8601 compliant date.
      - name: offset
        in: query
        required: false
        schema:
          type: integer
        description: Offset the result set by a specific number of items.
      - name: order
        in: query
        required: false
        schema:
          type: string
          enum:
          - asc
          - desc
          default: desc
        description: Order sort attribute ascending or descending.
      - name: orderby
        in: query
        required: false
        schema:
          type: string
          enum:
          - author
          - date
          - id
          - include
          - modified
          - parent
          - relevance
          - slug
          - include_slugs
          - title
          - menu_order
          default: date
        description: Sort collection by post attribute.
      - name: page
        in: query
        required: false
        schema:
          type: integer
          default: 1
          minimum: 1
        description: Current page of the collection.
      - name: parent
        in: query
        required: false
        schema:
          type: array
          default: []
          items:
            type: integer
        description: Limit result set to items with particular parent IDs.
      - name: parent_exclude
        in: query
        required: false
        schema:
          type: array
          default: []
          items:
            type: integer
        description: Limit result set to all items except those of a particular parent ID.
      - name: per_page
        in: query
        required: false
        schema:
          type: integer
          default: 10
          minimum: 1
          maximum: 100
        description: Maximum number of items to be returned in result set.
      - name: search
        in: query
        required: false
        schema:
          type: string
        description: Limit results to those matching a string.
      - name: search_columns
        in: query
        required: false
        schema:
          type: array
          default: []
          items:
            type: string
            enum:
            - post_title
            - post_content
            - post_excerpt
        description: Array of column names to be searched.
      - name: search_semantics
        in: query
        required: false
        schema:
          type: string
          enum:
          - exact
        description: How to interpret the search input.
      - name: slug
        in: query
        required: false
        schema:
          type: array
          items:
            type: string
        description: Limit result set to posts with one or more specific slugs.
      - name: status
        in: query
        required: false
        schema:
          type: array
          default: publish
          items:
            type: string
            enum:
            - publish
            - future
            - draft
            - pending
            - private
            - trash
            - auto-draft
            - inherit
            - request-pending
            - request-confirmed
            - request-failed
            - request-completed
            - acf-disabled
            - any
        description: Limit result set to posts assigned one or more statuses.
      security:
      - {}
      responses:
        '200':
          description: A page of Page records
          headers:
            X-WP-Total:
              description: Total number of records
              schema:
                type: integer
            X-WP-TotalPages:
              description: Total number of pages
              schema:
                type: integer
            Link:
              description: RFC 8288 pagination links (rel="next", rel="prev")
              schema:
                type: string
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Page'
        '400':
          $ref: '#/components/responses/Error'
        '404':
          $ref: '#/components/responses/Error'
  /wp/v2/pages/{id}:
    get:
      operationId: getPage
      tags:
      - Pages
      summary: Get a single Page record
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: integer
        description: Unique identifier for the page.
      - name: context
        in: query
        required: false
        schema:
          type: string
          enum:
          - view
          - embed
          - edit
          default: view
        description: Scope under which the request is made; determines fields present in response.
      - name: excerpt_length
        in: query
        required: false
        schema:
          type: integer
        description: Override the default excerpt length.
      - name: password
        in: query
        required: false
        schema:
          type: string
        description: The password for the post if it is password protected.
      security:
      - {}
      responses:
        '200':
          description: The Page record
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Page'
        '404':
          $ref: '#/components/responses/Error'
  /wp/v2/media:
    get:
      operationId: listMedia
      tags:
      - Media
      summary: List MediaItem records
      description: Collection is paginated with `page` and `per_page`; the response carries `X-WP-Total`
        and `X-WP-TotalPages` headers and RFC 8288 `Link` rel="next"/"prev".
      parameters:
      - name: after
        in: query
        required: false
        schema:
          type: string
          format: date-time
        description: Limit response to posts published after a given ISO8601 compliant date.
      - name: author
        in: query
        required: false
        schema:
          type: array
          default: []
          items:
            type: integer
        description: Limit result set to posts assigned to specific authors.
      - name: author_exclude
        in: query
        required: false
        schema:
          type: array
          default: []
          items:
            type: integer
        description: Ensure result set excludes posts assigned to specific authors.
      - name: before
        in: query
        required: false
        schema:
          type: string
          format: date-time
        description: Limit response to posts published before a given ISO8601 compliant date.
      - name: context
        in: query
        required: false
        schema:
          type: string
          enum:
          - view
          - embed
          - edit
          default: view
        description: Scope under which the request is made; determines fields present in response.
      - name: exclude
        in: query
        required: false
        schema:
          type: array
          default: []
          items:
            type: integer
        description: Ensure result set excludes specific IDs.
      - name: include
        in: query
        required: false
        schema:
          type: array
          default: []
          items:
            type: integer
        description: Limit result set to specific IDs.
      - name: media_type
        in: query
        required: false
        schema:
          type: array
          default: null
          items:
            type: string
            enum:
            - image
            - video
            - text
            - application
            - audio
        description: Limit result set to attachments of a particular media type or media types.
      - name: mime_type
        in: query
        required: false
        schema:
          type: array
          default: null
          items:
            type: string
        description: Limit result set to attachments of a particular MIME type or MIME types.
      - name: modified_after
        in: query
        required: false
        schema:
          type: string
          format: date-time
        description: Limit response to posts modified after a given ISO8601 compliant date.
      - name: modified_before
        in: query
        required: false
        schema:
          type: string
          format: date-time
        description: Limit response to posts modified before a given ISO8601 compliant date.
      - name: offset
        in: query
        required: false
        schema:
          type: integer
        description: Offset the result set by a specific number of items.
      - name: order
        in: query
        required: false
        schema:
          type: string
          enum:
          - asc
          - desc
          default: desc
        description: Order sort attribute ascending or descending.
      - name: orderby
        in: query
        required: false
        schema:
          type: string
          enum:
          - author
          - date
          - id
          - include
          - modified
          - parent
          - relevance
          - slug
          - include_slugs
          - title
          default: date
        description: Sort collection by post attribute.
      - name: page
        in: query
        required: false
        schema:
          type: integer
          default: 1
          minimum: 1
        description: Current page of the collection.
      - name: parent
        in: query
        required: false
        schema:
          type: array
          default: []
          items:
            type: integer
        description: Limit result set to items with particular parent IDs.
      - name: parent_exclude
        in: query
        required: false
        schema:
          type: array
          default: []
          items:
            type: integer
        description: Limit result set to all items except those of a particular parent ID.
      - name: per_page
        in: query
        required: false
        schema:
          type: integer
          default: 10
          minimum: 1
          maximum: 100
        description: Maximum number of items to be returned in result set.
      - name: search
        in: query
        required: false
        schema:
          type: string
        description: Limit results to those matching a string.
      - name: search_columns
        in: query
        required: false
        schema:
          type: array
          default: []
          items:
            type: string
            enum:
            - post_title
            - post_content
            - post_excerpt
        description: Array of column names to be searched.
      - name: search_semantics
        in: query
        required: false
        schema:
          type: string
          enum:
          - exact
        description: How to interpret the search input.
      - name: slug
        in: query
        required: false
        schema:
          type: array
          items:
            type: string
        description: Limit result set to posts with one or more specific slugs.
      - name: status
        in: query
        required: false
        schema:
          type: array
          default: inherit
          items:
            type: string
            enum:
            - inherit
            - private
            - trash
        description: Limit result set to posts assigned one or more statuses.
      security:
      - {}
      responses:
        '200':
          description: A page of MediaItem records
          headers:
            X-WP-Total:
              description: Total number of records
              schema:
                type: integer
            X-WP-TotalPages:
              description: Total number of pages
              schema:
                type: integer
            Link:
              description: RFC 8288 pagination links (rel="next", rel="prev")
              schema:
                type: string
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/MediaItem'
        '400':
          $ref: '#/components/responses/Error'
        '404':
          $ref: '#/components/responses/Error'
  /wp/v2/media/{id}:
    get:
      operationId: getMediaItem
      tags:
      - Media
      summary: Get a single MediaItem record
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: integer
        description: Unique identifier for the mediaitem.
      - name: context
        in: query
        required: false
        schema:
          type: string
          enum:
          - view
          - embed
          - edit
          default: view
        description: Scope under which the request is made; determines fields present in response.
      security:
      - {}
      responses:
        '200':
          description: The MediaItem record
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MediaItem'
        '404':
          $ref: '#/components/responses/Error'
  /wp/v2/categories:
    get:
      operationId: listCategories
      tags:
      - Categories
      summary: List Category records
      description: Collection is paginated with `page` and `per_page`; the response carries `X-WP-Total`
        and `X-WP-TotalPages` headers and RFC 8288 `Link` rel="next"/"prev".
      parameters:
      - name: context
        in: query
        required: false
        schema:
          type: string
          enum:
          - view
          - embed
          - edit
          default: view
        description: Scope under which the request is made; determines fields present in response.
      - name: exclude
        in: query
        required: false
        schema:
          type: array
          default: []
          items:
            type: integer
        description: Ensure result set excludes specific IDs.
      - name: hide_empty
        in: query
        required: false
        schema:
          type: boolean
          default: false
        description: Whether to hide terms not assigned to any posts.
      - name: include
        in: query
        required: false
        schema:
          type: array
          default: []
          items:
            type: integer
        description: Limit result set to specific IDs.
      - name: order
        in: query
        required: false
        schema:
          type: string
          enum:
          - asc
          - desc
          default: asc
        description: Order sort attribute ascending or descending.
      - name: orderby
        in: query
        required: false
        schema:
          type: string
          enum:
          - id
          - include
          - name
          - slug
          - include_slugs
          - term_group
          - description
          - count
          default: name
        description: Sort collection by term attribute.
      - name: page
        in: query
        required: false
        schema:
          type: integer
          default: 1
          minimum: 1
        description: Current page of the collection.
      - name: parent
        in: query
        required: false
        schema:
          type: integer
        description: Limit result set to terms assigned to a specific parent.
      - name: per_page
        in: query
        required: false
        schema:
          type: integer
          default: 10
          minimum: 1
          maximum: 100
        description: Maximum number of items to be returned in result set.
      - name: post
        in: query
        required: false
        schema:
          type: integer
          default: null
        description: Limit result set to terms assigned to a specific post.
      - name: search
        in: query
        required: false
        schema:
          type: string
        description: Limit results to those matching a string.
      - name: slug
        in: query
        required: false
        schema:
          type: array
          items:
            type: string
        description: Limit result set to terms with one or more specific slugs.
      security:
      - {}
      responses:
        '200':
          description: A page of Category records
          headers:
            X-WP-Total:
              description: Total number of records
              schema:
                type: integer
            X-WP-TotalPages:
              description: Total number of pages
              schema:
                type: integer
            Link:
              description: RFC 8288 pagination links (rel="next", rel="prev")
              schema:
                type: string
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Category'
        '400':
          $ref: '#/components/responses/Error'
        '404':
          $ref: '#/components/responses/Error'
  /wp/v2/categories/{id}:
    get:
      operationId: getCategory
      tags:
      - Categories
      summary: Get a single Category record
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: integer
        description: Unique identifier for the category.
      - name: context
        in: query
        required: false
        schema:
          type: string
          enum:
          - view
          - embed
          - edit
          default: view
        description: Scope under which the request is made; determines fields present in response.
      security:
      - {}
      responses:
        '200':
          description: The Category record
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Category'
        '404':

# --- truncated at 32 KB (83 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/circle-pharma/refs/heads/main/openapi/circle-pharma-content-openapi.yml