Eridu Discovery API

Anonymous, unauthenticated discovery metadata for eridu.ai — the self-describing route index (167 routes across 7 namespaces at capture), the registered content types and taxonomies, the publication statuses, and the public author records. This is the surface that makes the rest of the API machine-readable in the absence of any published developer documentation.

OpenAPI Specification

eridu-discovery-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Eridu Discovery API
  version: 1.0.0
  summary: Anonymous discovery metadata for eridu.ai
  description: 'Anonymous discovery metadata for eridu.ai — the self-describing route index, the registered
    content types and taxonomies, publication statuses, and the public author records. This is the surface
    that makes the rest of the API machine-readable in the absence of any published developer documentation.


    Eridu publishes no developer program, no developer portal and no product API. This document is an
    API Evangelist derivation of the only machine-readable interface the company serves — the WordPress
    core REST API behind eridu.ai — captured from the provider''s own live self-describing route index
    on 2026-08-12. It is read-only and anonymously readable; write methods exist on the same routes but
    require a WordPress user with an application password.'
  contact:
    name: Eridu
    url: https://eridu.ai/contact/
  termsOfService: https://eridu.ai/terms-of-use/
  x-apievangelist-derived-from: https://eridu.ai/wp-json/
  x-apievangelist-derived-on: '2026-08-12'
servers:
- url: https://eridu.ai/wp-json
  description: Eridu WordPress REST API
tags:
- name: Discovery
  description: Anonymous discovery metadata for eridu.ai — the self-describing route index, the registered
    content types and taxonomies, publication statuses, and the public author records. This is the surface
    that makes the rest of the API machine-readable in the absence of any published developer documentation.
security: []
paths:
  /:
    get:
      operationId: getApiIndex
      summary: Get the API index
      description: 'Retrieve the self-describing API index: site name, namespaces, authentication methods
        and every registered route.'
      tags:
      - Discovery
      security: []
      responses:
        '200':
          description: Successful response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DiscoveryItem'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
      parameters:
      - name: context
        in: query
        required: false
        description: The context query parameter, as registered by the endpoint.
        schema:
          type: string
          default: view
  /wp/v2/types:
    get:
      operationId: listTypes
      summary: List content types
      description: List the registered content types and their REST bases.
      tags:
      - Discovery
      security: []
      responses:
        '200':
          description: Successful response.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/DiscoveryItem'
          headers:
            X-WP-Total:
              description: Total number of matching records across all pages.
              schema:
                type: integer
            X-WP-TotalPages:
              description: Total number of pages available at the current per_page size.
              schema:
                type: integer
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
      parameters:
      - name: context
        in: query
        required: false
        description: Scope under which the request is made; determines fields present in response.
        schema:
          type: string
          enum:
          - view
          - embed
          - edit
          default: view
  /wp/v2/types/{type}:
    get:
      operationId: getType
      summary: Get a content type
      description: Retrieve a single registered content type.
      tags:
      - Discovery
      security: []
      responses:
        '200':
          description: Successful response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DiscoveryItem'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
      parameters:
      - name: type
        in: path
        required: true
        description: An alphanumeric identifier for the post type.
        schema:
          type: string
      - name: context
        in: query
        required: false
        description: Scope under which the request is made; determines fields present in response.
        schema:
          type: string
          enum:
          - view
          - embed
          - edit
          default: view
  /wp/v2/taxonomies:
    get:
      operationId: listTaxonomies
      summary: List taxonomies
      description: List the registered taxonomies and the types they apply to.
      tags:
      - Discovery
      security: []
      responses:
        '200':
          description: Successful response.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/DiscoveryItem'
          headers:
            X-WP-Total:
              description: Total number of matching records across all pages.
              schema:
                type: integer
            X-WP-TotalPages:
              description: Total number of pages available at the current per_page size.
              schema:
                type: integer
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
      parameters:
      - name: context
        in: query
        required: false
        description: Scope under which the request is made; determines fields present in response.
        schema:
          type: string
          enum:
          - view
          - embed
          - edit
          default: view
      - name: type
        in: query
        required: false
        description: Limit results to taxonomies associated with a specific post type.
        schema:
          type: string
  /wp/v2/taxonomies/{taxonomy}:
    get:
      operationId: getTaxonomy
      summary: Get a taxonomy
      description: Retrieve a single registered taxonomy.
      tags:
      - Discovery
      security: []
      responses:
        '200':
          description: Successful response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DiscoveryItem'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
      parameters:
      - name: taxonomy
        in: path
        required: true
        description: An alphanumeric identifier for the taxonomy.
        schema:
          type: string
      - name: context
        in: query
        required: false
        description: Scope under which the request is made; determines fields present in response.
        schema:
          type: string
          enum:
          - view
          - embed
          - edit
          default: view
  /wp/v2/statuses:
    get:
      operationId: listStatuses
      summary: List publication statuses
      description: List the publication statuses registered on the site.
      tags:
      - Discovery
      security: []
      responses:
        '200':
          description: Successful response.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/DiscoveryItem'
          headers:
            X-WP-Total:
              description: Total number of matching records across all pages.
              schema:
                type: integer
            X-WP-TotalPages:
              description: Total number of pages available at the current per_page size.
              schema:
                type: integer
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
      parameters:
      - name: context
        in: query
        required: false
        description: Scope under which the request is made; determines fields present in response.
        schema:
          type: string
          enum:
          - view
          - embed
          - edit
          default: view
  /wp/v2/users:
    get:
      operationId: listUsers
      summary: List authors
      description: List the public author records for eridu.ai.
      tags:
      - Discovery
      security: []
      responses:
        '200':
          description: Successful response.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/DiscoveryItem'
          headers:
            X-WP-Total:
              description: Total number of matching records across all pages.
              schema:
                type: integer
            X-WP-TotalPages:
              description: Total number of pages available at the current per_page size.
              schema:
                type: integer
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
      parameters:
      - name: capabilities
        in: query
        required: false
        description: Limit result set to users matching at least one specific capability provided. Accepts
          csv list or single capability.
        schema:
          type: array
          items:
            type: string
      - name: context
        in: query
        required: false
        description: Scope under which the request is made; determines fields present in response.
        schema:
          type: string
          enum:
          - view
          - embed
          - edit
          default: view
      - name: exclude
        in: query
        required: false
        description: Ensure result set excludes specific IDs.
        schema:
          type: array
          items:
            type: integer
          default: []
      - name: has_published_posts
        in: query
        required: false
        description: Limit result set to users who have published posts.
        schema:
          type: boolean
      - name: include
        in: query
        required: false
        description: Limit result set to specific IDs.
        schema:
          type: array
          items:
            type: integer
          default: []
      - name: offset
        in: query
        required: false
        description: Offset the result set by a specific number of items.
        schema:
          type: integer
      - name: order
        in: query
        required: false
        description: Order sort attribute ascending or descending.
        schema:
          type: string
          enum:
          - asc
          - desc
          default: asc
      - name: orderby
        in: query
        required: false
        description: Sort collection by user attribute.
        schema:
          type: string
          enum:
          - id
          - include
          - name
          - registered_date
          - slug
          - include_slugs
          - email
          - url
          default: name
      - name: page
        in: query
        required: false
        description: Current page of the collection.
        schema:
          type: integer
          default: 1
          minimum: 1
      - name: per_page
        in: query
        required: false
        description: Maximum number of items to be returned in result set.
        schema:
          type: integer
          default: 10
          minimum: 1
          maximum: 100
      - name: roles
        in: query
        required: false
        description: Limit result set to users matching at least one specific role provided. Accepts csv
          list or single role.
        schema:
          type: array
          items:
            type: string
      - name: search
        in: query
        required: false
        description: Limit results to those matching a string.
        schema:
          type: string
      - name: search_columns
        in: query
        required: false
        description: Array of column names to be searched.
        schema:
          type: array
          items:
            type: string
            enum:
            - email
            - name
            - id
            - username
            - slug
          default: []
      - name: slug
        in: query
        required: false
        description: Limit result set to users with one or more specific slugs.
        schema:
          type: array
          items:
            type: string
      - name: who
        in: query
        required: false
        description: Limit result set to users who are considered authors.
        schema:
          type: string
          enum:
          - authors
  /wp/v2/users/{id}:
    get:
      operationId: getUser
      summary: Get an author
      description: Retrieve a single public author record by id.
      tags:
      - Discovery
      security: []
      responses:
        '200':
          description: Successful response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DiscoveryItem'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
      parameters:
      - name: id
        in: path
        required: true
        description: Unique identifier for the user.
        schema:
          type: integer
      - name: context
        in: query
        required: false
        description: Scope under which the request is made; determines fields present in response.
        schema:
          type: string
          enum:
          - view
          - embed
          - edit
          default: view
components:
  securitySchemes:
    applicationPassword:
      type: http
      scheme: basic
      description: 'WordPress application passwords (HTTP Basic: username + application password). Advertised
        by the site''s own API index at https://eridu.ai/wp-json/ under `authentication.application-passwords`.
        Required only for write methods and non-public contexts; every operation in this document is anonymously
        readable.'
  schemas:
    DiscoveryItem:
      type: object
      description: A discovery record as returned by the WordPress core REST API. Field-level schemas
        are published by the endpoint itself via the OPTIONS method and the `context=edit` schema; they
        are not restated here so this document never diverges from the live contract.
      additionalProperties: true
    Error:
      type: object
      description: The WordPress REST API error envelope.
      properties:
        code:
          type: string
          description: Machine-readable error code, e.g. rest_post_invalid_id.
        message:
          type: string
          description: Human-readable error message.
        data:
          type: object
          description: Error data, carrying the HTTP status and, for validation failures, per-parameter
            details.
          properties:
            status:
              type: integer
              description: The HTTP status code.
          additionalProperties: true
      required:
      - code
      - message
  responses:
    BadRequest:
      description: Invalid parameter.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    Unauthorized:
      description: Authentication is required for the requested context.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    NotFound:
      description: No record matches the supplied identifier.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'