openapi: 3.1.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. - name: Metadata description: Post types, taxonomies, statuses and authors. 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' /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 search: name: search in: query description: Limit results to those matching a free-text string. schema: type: string order: name: order in: query description: Sort direction. schema: type: string enum: - asc - desc default: desc 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 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 embed: name: _embed in: query description: Inline embeddable linked resources (featured media, terms, author) into an `_embedded` object. schema: type: boolean slugFilter: name: slug in: query description: Limit results to items with one of the given slugs. schema: type: array items: type: string include: name: include in: query description: Limit result set to specific IDs. schema: type: array items: type: integer exclude: name: exclude in: query description: Ensure result set excludes specific IDs. schema: type: array items: type: integer offset: name: offset in: query description: Offset the result set by a specific number of items. schema: type: integer minimum: 0 idPath: name: id in: path required: true description: Unique numeric identifier for the object. schema: type: integer headers: XWPTotal: description: Total number of items in the unpaginated collection. schema: type: integer XWPTotalPages: description: Total number of pages available at the requested per_page size. schema: type: integer LinkPagination: description: RFC 8288 Link header carrying `prev` and `next` relations for the collection. schema: type: string CacheControl: description: 'Observed as `max-age=600, must-revalidate` on this host (WP Engine edge cache, x-cacheable: SHORT).' schema: type: string 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.' 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 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 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 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