Daring Foods Discovery API

The self-describing metadata layer - route index (222 routes across 10 namespaces), registered post types, taxonomies, statuses and authors - that makes the whole daring.com surface machine-readable without prior knowledge.

OpenAPI Specification

daring-foods-discovery-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Daring Foods Discovery 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: Discovery
  description: Route index and site identity.
paths:
  /:
    get:
      tags:
      - Discovery
      operationId: getRouteIndex
      summary: Retrieve the API route index
      description: Returns site identity, registered namespaces, the advertised authentication mechanism and the complete route index. This is the entry point for discovering the whole surface.
      parameters:
      - $ref: '#/components/parameters/fields'
      - name: namespace
        in: query
        description: Limit the index to a single namespace, e.g. `wp/v2`.
        schema:
          type: string
      responses:
        '200':
          description: The route index.
          headers:
            Cache-Control:
              $ref: '#/components/headers/CacheControl'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RouteIndex'
              example:
                name: Daring Foods Plant Chicken | Chicken Better. Chicken On.
                description: ''
                url: https://daring.com
                home: https://daring.com
                namespaces:
                - oembed/1.0
                - wpe/cache-plugin/v1
                - wpe_sign_on_plugin/v1
                - redirection/v1
                - yoast/v1
                - genesisblocks/v1
                authentication:
                  application-passwords:
                    endpoints:
                      authorization: https://daring.com/wp-admin/authorize-application.php
  /wp/v2:
    get:
      tags:
      - Discovery
      operationId: getWpV2Namespace
      summary: Retrieve the wp/v2 namespace index
      description: Returns the route index scoped to the `wp/v2` namespace, including the full argument schema for every route - the closest thing this host publishes to a machine-readable parameter contract.
      parameters:
      - $ref: '#/components/parameters/context'
      responses:
        '200':
          description: The wp/v2 namespace index.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RouteIndex'
components:
  schemas:
    RouteIndex:
      type: object
      description: The WordPress REST route index for the site.
      properties:
        name:
          type: string
          description: Site title.
        description:
          type: string
        url:
          type: string
          format: uri
        home:
          type: string
          format: uri
        gmt_offset:
          type:
          - string
          - number
        site_icon_url:
          type: string
          format: uri
        namespaces:
          type: array
          items:
            type: string
          description: Registered REST namespaces.
        authentication:
          type: object
          description: 'Advertised authentication mechanisms. On this host: application-passwords, with the authorization endpoint at /wp-admin/authorize-application.php.'
        routes:
          type: object
          description: Map of route pattern to its supported methods, endpoints and args.
        _links:
          type: object
  parameters:
    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
    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
  headers:
    CacheControl:
      description: 'Observed as `max-age=600, must-revalidate` on this host (WP Engine edge cache, x-cacheable: SHORT).'
      schema:
        type: string