Daring Foods Metadata API

Post types, taxonomies, statuses and authors.

OpenAPI Specification

daring-foods-metadata-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Daring Foods Discovery Metadata API
  version: wp/v2
  summary: The self-describing route index, post-type, taxonomy, status and author metadata.
  description: The metadata layer that makes the whole daring.com surface machine-readable without prior knowledge. `GET /` returns the site identity, the list of registered namespaces (10 on this host) and the full route index (222 routes), along with the `authentication` block advertising WordPress Application Passwords as the credential mechanism for the write side. `/wp/v2/types` enumerates every registered post type - which is how the site's three custom collections (`products`, `foodservice-products`, `recipes`) are discovered - and `/wp/v2/taxonomies` maps each taxonomy to the types it applies to. `/wp/v2/statuses` and `/wp/v2/users` complete the picture. Note that `/wp/v2/settings` requires authentication and returns HTTP 401 anonymously, so it is deliberately not documented here.
  contact:
    name: Daring Foods
    url: https://daring.com/faq/
  license:
    name: Site content - all rights reserved; see Terms & Conditions
    url: https://daring.com/terms-and-conditions/
  x-apis-io-provenance:
    method: derived
    source: https://daring.com/wp-json/
    derived_on: '2026-08-04'
    note: Routes enumerated from the live WordPress route index at https://daring.com/wp-json/ (222 routes across 10 namespaces) on 2026-08-04, then probed anonymously one at a time; only routes verified to return HTTP 200 without credentials are documented here. Schemas reflect fields observed in the live responses. Write methods exist on the same routes but require WordPress authentication (cookie + X-WP-Nonce, or Application Passwords) and return HTTP 401 anonymously, so they are not documented. No fabricated operations, parameters or fields.
servers:
- url: https://daring.com/wp-json
  description: Production
tags:
- name: Metadata
  description: Post types, taxonomies, statuses and authors.
paths:
  /wp/v2/types:
    get:
      tags:
      - Metadata
      operationId: listPostTypes
      summary: List registered post types
      description: 'Returns every registered post type keyed by slug. Verified live at 14 types, including the site''s three custom content collections: products, foodservice-products and recipes.'
      parameters:
      - $ref: '#/components/parameters/context'
      responses:
        '200':
          description: Map of post-type slug to definition.
          content:
            application/json:
              schema:
                type: object
                additionalProperties:
                  $ref: '#/components/schemas/PostType'
  /wp/v2/types/{type}:
    get:
      tags:
      - Metadata
      operationId: getPostType
      summary: Retrieve a post type
      description: Returns a single registered post type by slug.
      parameters:
      - name: type
        in: path
        required: true
        description: Post type slug, e.g. recipes.
        schema:
          type: string
      - $ref: '#/components/parameters/context'
      responses:
        '200':
          description: The requested post type.
          headers:
            Cache-Control:
              $ref: '#/components/headers/CacheControl'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PostType'
              example:
                description: Recipes
                hierarchical: false
                has_archive: true
                name: Recipes
                slug: recipes
                icon: null
                taxonomies:
                - category
                rest_base: recipes
                rest_namespace: wp/v2
                template: []
                template_lock: false
        '404':
          description: Object not found, or no route matches the request.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                code: rest_post_invalid_id
                message: Invalid post ID.
                data:
                  status: 404
  /wp/v2/taxonomies:
    get:
      tags:
      - Metadata
      operationId: listTaxonomies
      summary: List registered taxonomies
      description: 'Returns every registered taxonomy keyed by slug, with the post types each applies to. Verified live at 4: category, post_tag, nav_menu and wp_pattern_category.'
      parameters:
      - $ref: '#/components/parameters/context'
      - name: type
        in: query
        description: Limit results to taxonomies associated with a specific post type.
        schema:
          type: string
      responses:
        '200':
          description: Map of taxonomy slug to definition.
          content:
            application/json:
              schema:
                type: object
                additionalProperties:
                  $ref: '#/components/schemas/Taxonomy'
  /wp/v2/taxonomies/{taxonomy}:
    get:
      tags:
      - Metadata
      operationId: getTaxonomy
      summary: Retrieve a taxonomy
      description: Returns a single registered taxonomy by slug.
      parameters:
      - name: taxonomy
        in: path
        required: true
        description: Taxonomy slug, e.g. category.
        schema:
          type: string
      - $ref: '#/components/parameters/context'
      responses:
        '200':
          description: The requested taxonomy.
          headers:
            Cache-Control:
              $ref: '#/components/headers/CacheControl'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Taxonomy'
              example:
                name: Categories
                slug: category
                description: ''
                types:
                - post
                - recipes
                hierarchical: true
                rest_base: categories
                rest_namespace: wp/v2
        '404':
          description: Object not found, or no route matches the request.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                code: rest_post_invalid_id
                message: Invalid post ID.
                data:
                  status: 404
  /wp/v2/statuses:
    get:
      tags:
      - Metadata
      operationId: listStatuses
      summary: List post statuses
      description: Returns the post statuses visible to the caller. Anonymously this is `publish` only.
      parameters:
      - $ref: '#/components/parameters/context'
      responses:
        '200':
          description: Map of status slug to definition.
          content:
            application/json:
              schema:
                type: object
                additionalProperties:
                  $ref: '#/components/schemas/Status'
  /wp/v2/statuses/{status}:
    get:
      tags:
      - Metadata
      operationId: getStatus
      summary: Retrieve a post status
      description: Returns a single post status by slug.
      parameters:
      - name: status
        in: path
        required: true
        description: Status slug, e.g. publish.
        schema:
          type: string
      - $ref: '#/components/parameters/context'
      responses:
        '200':
          description: The requested status.
          headers:
            Cache-Control:
              $ref: '#/components/headers/CacheControl'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Status'
              example:
                name: Published
                public: true
                queryable: true
                slug: publish
                date_floating: false
        '404':
          description: Object not found, or no route matches the request.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                code: rest_post_invalid_id
                message: Invalid post ID.
                data:
                  status: 404
  /wp/v2/users:
    get:
      tags:
      - Metadata
      operationId: listUsers
      summary: List authors
      description: Returns the site users that have authored published content. Verified live at 3.
      parameters:
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/perPage'
      - $ref: '#/components/parameters/search'
      - $ref: '#/components/parameters/order'
      - $ref: '#/components/parameters/orderby'
      - $ref: '#/components/parameters/context'
      - $ref: '#/components/parameters/include'
      - $ref: '#/components/parameters/exclude'
      - $ref: '#/components/parameters/offset'
      - $ref: '#/components/parameters/fields'
      responses:
        '200':
          description: A page of authors.
          headers:
            X-WP-Total:
              $ref: '#/components/headers/XWPTotal'
            X-WP-TotalPages:
              $ref: '#/components/headers/XWPTotalPages'
            Link:
              $ref: '#/components/headers/LinkPagination'
            Cache-Control:
              $ref: '#/components/headers/CacheControl'
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/User'
              example:
              - id: 1
                name: daringfoodsdev
                url: https://daring.com
                description: ''
                link: https://daring.com/author/daringfoodsdev/
                slug: daringfoodsdev
        '400':
          description: Invalid request parameter (rest_invalid_param).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                code: rest_invalid_param
                message: 'Invalid parameter(s): per_page'
                data:
                  status: 400
                  params:
                    per_page: per_page must be between 1 (inclusive) and 100 (inclusive)
  /wp/v2/users/{id}:
    get:
      tags:
      - Metadata
      operationId: getUser
      summary: Retrieve an author
      description: Returns a single author by numeric ID.
      parameters:
      - $ref: '#/components/parameters/idPath'
      - $ref: '#/components/parameters/context'
      - $ref: '#/components/parameters/fields'
      responses:
        '200':
          description: The requested author.
          headers:
            Cache-Control:
              $ref: '#/components/headers/CacheControl'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/User'
              example:
                id: 1
                name: daringfoodsdev
                url: https://daring.com
                description: ''
                link: https://daring.com/author/daringfoodsdev/
                slug: daringfoodsdev
        '404':
          description: Object not found, or no route matches the request.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                code: rest_post_invalid_id
                message: Invalid post ID.
                data:
                  status: 404
components:
  parameters:
    page:
      name: page
      in: query
      description: Current page of the collection (1-based).
      schema:
        type: integer
        minimum: 1
        default: 1
    perPage:
      name: per_page
      in: query
      description: Maximum number of items returned per page. Verified server cap is 100; a larger value returns HTTP 400 rest_invalid_param.
      schema:
        type: integer
        minimum: 1
        maximum: 100
        default: 10
    include:
      name: include
      in: query
      description: Limit result set to specific IDs.
      schema:
        type: array
        items:
          type: integer
    orderby:
      name: orderby
      in: query
      description: Field to sort the collection by.
      schema:
        type: string
        enum:
        - date
        - id
        - include
        - modified
        - relevance
        - slug
        - title
        default: date
    context:
      name: context
      in: query
      description: Scope under which the request is made; determines the fields present in the response. Anonymous callers may use `view` and `embed` only - `edit` returns HTTP 401.
      schema:
        type: string
        enum:
        - view
        - embed
        default: view
    exclude:
      name: exclude
      in: query
      description: Ensure result set excludes specific IDs.
      schema:
        type: array
        items:
          type: integer
    idPath:
      name: id
      in: path
      required: true
      description: Unique numeric identifier for the object.
      schema:
        type: integer
    search:
      name: search
      in: query
      description: Limit results to those matching a free-text string.
      schema:
        type: string
    fields:
      name: _fields
      in: query
      description: Comma-separated list of fields to limit the response to (e.g. `id,slug,title,link`). A WordPress core response-shaping convention, verified working on this host.
      schema:
        type: string
    offset:
      name: offset
      in: query
      description: Offset the result set by a specific number of items.
      schema:
        type: integer
        minimum: 0
    order:
      name: order
      in: query
      description: Sort direction.
      schema:
        type: string
        enum:
        - asc
        - desc
        default: desc
  schemas:
    Error:
      type: object
      description: 'The WordPress REST error envelope. NOTE: this is NOT RFC 9457 problem+json - the media type is application/json and the shape is {code, message, data}.'
      required:
      - code
      - message
      - data
      properties:
        code:
          type: string
          description: Machine-readable WordPress error code, e.g. rest_post_invalid_id, rest_invalid_param, rest_no_route.
          examples:
          - rest_post_invalid_id
        message:
          type: string
          description: Human-readable error message.
          examples:
          - Invalid post ID.
        data:
          type: object
          properties:
            status:
              type: integer
              description: HTTP status code, repeated in the body.
              examples:
              - 404
            params:
              type: object
              additionalProperties:
                type: string
              description: 'Present on rest_invalid_param: per-parameter validation messages.'
            details:
              type: object
              description: 'Present on rest_invalid_param: per-parameter structured detail.'
    User:
      type: object
      description: A site author. Anonymous context exposes public author fields only.
      properties:
        id:
          type: integer
        name:
          type: string
          description: Public display name.
        url:
          type: string
        description:
          type: string
        link:
          type: string
          format: uri
          description: Author archive URL.
        slug:
          type: string
        avatar_urls:
          type: object
        meta:
          type:
          - array
          - object
        yoast_head_json:
          type: object
        _links:
          type: object
    Status:
      type: object
      description: A registered post status.
      properties:
        name:
          type: string
          examples:
          - Published
        slug:
          type: string
          examples:
          - publish
        public:
          type: boolean
        queryable:
          type: boolean
        date_floating:
          type: boolean
        _links:
          type: object
    PostType:
      type: object
      description: A registered WordPress post type.
      properties:
        name:
          type: string
          examples:
          - Recipes
        slug:
          type: string
          examples:
          - recipes
        description:
          type: string
        hierarchical:
          type: boolean
        has_archive:
          type:
          - boolean
          - string
        taxonomies:
          type: array
          items:
            type: string
          description: Taxonomies attached to the type.
        rest_base:
          type: string
          description: Path segment under the namespace where the collection lives.
        rest_namespace:
          type: string
          examples:
          - wp/v2
        supports:
          type: object
        _links:
          type: object
    Taxonomy:
      type: object
      description: A registered WordPress taxonomy.
      properties:
        name:
          type: string
          examples:
          - Categories
        slug:
          type: string
          examples:
          - category
        description:
          type: string
        types:
          type: array
          items:
            type: string
          description: Post types the taxonomy applies to. On this host `category` applies to both `post` and `recipes`.
        hierarchical:
          type: boolean
        rest_base:
          type: string
        rest_namespace:
          type: string
        _links:
          type: object
  headers:
    XWPTotal:
      description: Total number of items in the unpaginated collection.
      schema:
        type: integer
    CacheControl:
      description: 'Observed as `max-age=600, must-revalidate` on this host (WP Engine edge cache, x-cacheable: SHORT).'
      schema:
        type: string
    LinkPagination:
      description: RFC 8288 Link header carrying `prev` and `next` relations for the collection.
      schema:
        type: string
    XWPTotalPages:
      description: Total number of pages available at the requested per_page size.
      schema:
        type: integer