Perfect Day modals API
The `modal` custom post type used for site interstitials on perfectday.com.
The `modal` custom post type used for site interstitials on perfectday.com.
openapi: 3.1.0
info:
title: Perfect Day Content API (modal)
version: wp/v2
description: Public content API for perfectday.com, served by the WordPress REST API `wp/v2` namespace. Perfect Day is a
precision-fermentation food-ingredient company and publishes no product/developer API; this is the one machine-readable
surface it operates. Read operations on this resource were verified to respond anonymously (HTTP 200) on 2026-08-02; write
operations require authentication (WordPress application passwords). This document was DERIVED by the API Evangelist enrichment
pipeline from the route metadata the server itself publishes at https://perfectday.com/wp-json/wp/v2 — no operations,
parameters, enums or defaults were invented.
contact:
name: Perfect Day
url: https://perfectday.com/contact-us/
x-apievangelist-method: derived
x-apievangelist-source: https://perfectday.com/wp-json/wp/v2
x-apievangelist-generated: '2026-08-02'
servers:
- url: https://perfectday.com/wp-json
description: Perfect Day WordPress REST API
tags:
- name: modal
description: WordPress REST `modal` resource on perfectday.com.
security: []
paths:
/wp/v2/modal:
get:
operationId: getModal
summary: GET /wp/v2/modal
description: GET https://perfectday.com/wp-json/wp/v2/modal — derived from the route metadata WordPress publishes for
this site at https://perfectday.com/wp-json/wp/v2.
tags:
- modal
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: 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: search
in: query
required: false
description: Limit results to those matching a string.
schema:
type: string
- name: after
in: query
required: false
description: Limit response to posts published after a given ISO8601 compliant date.
schema:
type: string
format: date-time
- name: modified_after
in: query
required: false
description: Limit response to posts modified after a given ISO8601 compliant date.
schema:
type: string
format: date-time
- name: before
in: query
required: false
description: Limit response to posts published before a given ISO8601 compliant date.
schema:
type: string
format: date-time
- name: modified_before
in: query
required: false
description: Limit response to posts modified before a given ISO8601 compliant date.
schema:
type: string
format: date-time
- name: exclude
in: query
required: false
description: Ensure result set excludes specific IDs.
schema:
type: array
default: []
items:
type: integer
- name: include
in: query
required: false
description: Limit result set to specific IDs.
schema:
type: array
default: []
items:
type: integer
- name: search_semantics
in: query
required: false
description: How to interpret the search input.
schema:
type: string
enum:
- exact
- 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: desc
- name: orderby
in: query
required: false
description: Sort collection by post attribute.
schema:
type: string
enum:
- author
- date
- id
- include
- modified
- parent
- relevance
- slug
- include_slugs
- title
default: date
- name: search_columns
in: query
required: false
description: Array of column names to be searched.
schema:
type: array
default: []
items:
type: string
enum:
- post_title
- post_content
- post_excerpt
- name: slug
in: query
required: false
description: Limit result set to posts with one or more specific slugs.
schema:
type: array
items:
type: string
- name: status
in: query
required: false
description: Limit result set to posts assigned one or more statuses.
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
- dp-rewrite-republish
- any
responses:
'200':
description: Successful response.
content:
application/json:
schema:
type: array
items:
type: object
'400':
description: Invalid request — a parameter failed validation (rest_invalid_param).
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'401':
description: Authentication required or insufficient capability (rest_forbidden).
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'403':
description: Forbidden — the authenticated user lacks the required capability.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'404':
description: Not found — no route matched, or the item does not exist (rest_no_route / rest_post_invalid_id).
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
post:
operationId: createModal
summary: POST /wp/v2/modal
description: POST https://perfectday.com/wp-json/wp/v2/modal — derived from the route metadata WordPress publishes for
this site at https://perfectday.com/wp-json/wp/v2.
tags:
- modal
parameters: []
responses:
'200':
description: Successful response.
content:
application/json:
schema:
type: array
items:
type: object
'400':
description: Invalid request — a parameter failed validation (rest_invalid_param).
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'401':
description: Authentication required or insufficient capability (rest_forbidden).
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'403':
description: Forbidden — the authenticated user lacks the required capability.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'404':
description: Not found — no route matched, or the item does not exist (rest_no_route / rest_post_invalid_id).
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
date:
type: string
format: date-time
description: The date the post was published, in the site's timezone.
date_gmt:
type: string
format: date-time
description: The date the post was published, as GMT.
slug:
type: string
description: An alphanumeric identifier for the post unique to its type.
status:
type: string
enum:
- publish
- future
- draft
- pending
- private
- acf-disabled
description: A named status for the post.
password:
type: string
description: A password to protect access to the content and excerpt.
title:
type: object
description: The title for the post.
content:
type: object
description: The content for the post.
template:
type: string
description: The theme file to use to display the post.
security:
- applicationPassword: []
x-requires-authentication: true
/wp/v2/modal/{id}:
get:
operationId: getModalId
summary: GET /wp/v2/modal/{id}
description: GET https://perfectday.com/wp-json/wp/v2/modal/{id} — derived from the route metadata WordPress publishes
for this site at https://perfectday.com/wp-json/wp/v2.
tags:
- modal
parameters:
- name: id
in: path
required: true
description: Unique identifier for the post.
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
- name: password
in: query
required: false
description: The password for the post if it is password protected.
schema:
type: string
responses:
'200':
description: Successful response.
content:
application/json:
schema:
type: object
'400':
description: Invalid request — a parameter failed validation (rest_invalid_param).
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'401':
description: Authentication required or insufficient capability (rest_forbidden).
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'403':
description: Forbidden — the authenticated user lacks the required capability.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'404':
description: Not found — no route matched, or the item does not exist (rest_no_route / rest_post_invalid_id).
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
post:
operationId: createModalId
summary: POST /wp/v2/modal/{id}
description: POST https://perfectday.com/wp-json/wp/v2/modal/{id} — derived from the route metadata WordPress publishes
for this site at https://perfectday.com/wp-json/wp/v2.
tags:
- modal
parameters:
- name: id
in: path
required: true
description: Unique identifier for the post.
schema:
type: integer
responses:
'200':
description: Successful response.
content:
application/json:
schema:
type: object
'400':
description: Invalid request — a parameter failed validation (rest_invalid_param).
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'401':
description: Authentication required or insufficient capability (rest_forbidden).
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'403':
description: Forbidden — the authenticated user lacks the required capability.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'404':
description: Not found — no route matched, or the item does not exist (rest_no_route / rest_post_invalid_id).
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
date:
type: string
format: date-time
description: The date the post was published, in the site's timezone.
date_gmt:
type: string
format: date-time
description: The date the post was published, as GMT.
slug:
type: string
description: An alphanumeric identifier for the post unique to its type.
status:
type: string
enum: &id001
- publish
- future
- draft
- pending
- private
- acf-disabled
description: A named status for the post.
password:
type: string
description: A password to protect access to the content and excerpt.
title:
type: object
description: The title for the post.
content:
type: object
description: The content for the post.
template:
type: string
description: The theme file to use to display the post.
security:
- applicationPassword: []
x-requires-authentication: true
patch:
operationId: patchModalId
summary: PATCH /wp/v2/modal/{id}
description: PATCH https://perfectday.com/wp-json/wp/v2/modal/{id} — derived from the route metadata WordPress publishes
for this site at https://perfectday.com/wp-json/wp/v2.
tags:
- modal
parameters:
- name: id
in: path
required: true
description: Unique identifier for the post.
schema:
type: integer
responses:
'200':
description: Successful response.
content:
application/json:
schema:
type: object
'400':
description: Invalid request — a parameter failed validation (rest_invalid_param).
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'401':
description: Authentication required or insufficient capability (rest_forbidden).
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'403':
description: Forbidden — the authenticated user lacks the required capability.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'404':
description: Not found — no route matched, or the item does not exist (rest_no_route / rest_post_invalid_id).
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
date:
type: string
format: date-time
description: The date the post was published, in the site's timezone.
date_gmt:
type: string
format: date-time
description: The date the post was published, as GMT.
slug:
type: string
description: An alphanumeric identifier for the post unique to its type.
status:
type: string
enum: *id001
description: A named status for the post.
password:
type: string
description: A password to protect access to the content and excerpt.
title:
type: object
description: The title for the post.
content:
type: object
description: The content for the post.
template:
type: string
description: The theme file to use to display the post.
security:
- applicationPassword: []
x-requires-authentication: true
delete:
operationId: deleteModalId
summary: DELETE /wp/v2/modal/{id}
description: DELETE https://perfectday.com/wp-json/wp/v2/modal/{id} — derived from the route metadata WordPress publishes
for this site at https://perfectday.com/wp-json/wp/v2.
tags:
- modal
parameters:
- name: id
in: path
required: true
description: Unique identifier for the post.
schema:
type: integer
- name: force
in: query
required: false
description: Whether to bypass Trash and force deletion.
schema:
type: boolean
default: false
responses:
'200':
description: Successful response.
content:
application/json:
schema:
type: object
'400':
description: Invalid request — a parameter failed validation (rest_invalid_param).
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'401':
description: Authentication required or insufficient capability (rest_forbidden).
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'403':
description: Forbidden — the authenticated user lacks the required capability.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'404':
description: Not found — no route matched, or the item does not exist (rest_no_route / rest_post_invalid_id).
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
security:
- applicationPassword: []
x-requires-authentication: true
/wp/v2/modal/{id}/autosaves:
get:
operationId: getModalIdAutosaves
summary: GET /wp/v2/modal/{id}/autosaves
description: GET https://perfectday.com/wp-json/wp/v2/modal/{id}/autosaves — derived from the route metadata WordPress
publishes for this site at https://perfectday.com/wp-json/wp/v2.
tags:
- modal
parameters:
- name: parent
in: query
required: false
description: The ID for the parent of the autosave.
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
- name: id
in: path
required: true
description: id path parameter.
schema:
type: string
responses:
'200':
description: Successful response.
content:
application/json:
schema:
type: object
'400':
description: Invalid request — a parameter failed validation (rest_invalid_param).
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'401':
description: Authentication required or insufficient capability (rest_forbidden).
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'403':
description: Forbidden — the authenticated user lacks the required capability.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'404':
description: Not found — no route matched, or the item does not exist (rest_no_route / rest_post_invalid_id).
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
post:
operationId: createModalIdAutosaves
summary: POST /wp/v2/modal/{id}/autosaves
description: POST https://perfectday.com/wp-json/wp/v2/modal/{id}/autosaves — derived from the route metadata WordPress
publishes for this site at https://perfectday.com/wp-json/wp/v2.
tags:
- modal
parameters:
- name: id
in: path
required: true
description: id path parameter.
schema:
type: string
responses:
'200':
description: Successful response.
content:
application/json:
schema:
type: object
'400':
description: Invalid request — a parameter failed validation (rest_invalid_param).
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'401':
description: Authentication required or insufficient capability (rest_forbidden).
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'403':
description: Forbidden — the authenticated user lacks the required capability.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'404':
description: Not found — no route matched, or the item does not exist (rest_no_route / rest_post_invalid_id).
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
parent:
type: integer
description: The ID for the parent of the autosave.
date:
type: string
format: date-time
description: The date the post was published, in the site's timezone.
date_gmt:
type: string
format: date-time
description: The date the post was published, as GMT.
slug:
type: string
description: An alphanumeric identifier for the post unique to its type.
status:
type: string
enum:
- publish
- future
- draft
- pending
- private
- acf-disabled
description: A named status for the post.
password:
type: string
description: A password to protect access to the content and excerpt.
title:
type: object
description: The title for the post.
content:
type: object
description: The content for the post.
template:
type: string
description: The theme file to use to display the post.
security:
- applicationPassword: []
x-requires-authentication: true
/wp/v2/modal/{parent}/autosaves/{id}:
get:
operationId: getModalParentAutosavesId
summary: GET /wp/v2/modal/{parent}/autosaves/{id}
description: GET https://perfectday.com/wp-json/wp/v2/modal/{parent}/autosaves/{id} — derived from the route metadata
WordPress publishes for this site at https://perfectday.com/wp-json/wp/v2.
tags:
- modal
parameters:
- name: parent
in: path
required: true
description: The ID for the parent of the autosave.
schema:
type: integer
- name: id
in: path
required: true
description: The ID for the autosave.
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
responses:
'200':
description: Successful response.
content:
application/json:
schema:
type: object
'400':
description: Invalid request — a parameter failed validation (rest_invalid_param).
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'401':
description: Authentication required or insufficient capability (rest_forbidden).
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'403':
description: Forbidden — the authenticated user lacks the required capability.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'404':
description: Not found — no route matched, or the item does not exist (rest_no_route / rest_post_invalid_id).
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
/wp/v2/modal/{parent}/revisions:
get:
operationId: getModalParentRevisions
summary: GET /wp/v2/modal/{parent}/revisions
description: GET https://perfectday.com/wp-json/wp/v2/modal/{parent}/revisions — derived from the route metadata WordPress
publishes for this site at https://perfectday.com/wp-json/wp/v2.
tags:
- modal
parameters:
- name: parent
in: path
required: true
description: The ID for the parent of the revision.
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
- 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
minimum: 1
maximum: 100
- name: search
in: query
required: false
description: Limit results to those matching a string.
schema:
type: string
- name: exclude
in: query
required: false
description: Ensure result set excludes specific IDs.
schema:
type: array
default: []
items:
type: integer
- name: include
in: query
required: false
description: Limit result set to specific IDs.
schema:
type: array
default: []
items:
type: integer
- 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: desc
- name: orderby
in: query
required: false
description: Sort collection by object attribute.
schema:
type: string
enum:
- date
- id
- include
- relevance
- slug
- include_slugs
- title
default: date
responses:
'200':
description: Successful response.
content:
application/json:
schema:
type: object
'400':
description: Invalid request — a parameter failed validation (rest_invalid_param).
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'401':
description: Authentication required or insufficient capability (rest_forbidden).
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'403':
description: Forbidden — the authenticated user lacks the required capability.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'404':
description: Not found — no route matched, or the item does not exist (rest_no_route / rest_post_invalid_id).
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
/wp/v2/modal/{parent}/revisions/{id}:
get:
operationId: getModalParentRevisionsId
summary: GET /wp/v2/modal/{parent}/revisions/{id}
description: GET https://perfectday.com/wp-json/wp/v2/modal/{parent}/revisions/{id} — derived from the route metadata
WordPress publishes for this site at https://perfectday.com/wp-json/wp/v2.
tags:
- modal
parameters:
- name: parent
in: path
required: true
description: The ID for the parent of the revision.
schema:
type: integer
- name: id
in: path
required: true
description: Unique identifier for the revision.
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
responses:
'200':
description: Successful response.
content:
application/json:
schema:
type: object
'400':
description: Invalid request — a parameter failed validation (rest_invalid_param).
content:
# --- truncated at 32 KB (35 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/perfect-day/refs/heads/main/openapi/perfect-day-modals-openapi.yml