DayPilot Discovery API
Anonymous, read-only Builder capability discovery.
Anonymous, read-only Builder capability discovery.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/daypilot-org:daypilot-org-discovery-api"
curl "https://apis.io/api/v1/apis?limit=25"
Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: DayPilot UI Builder Public Discovery API
summary: Discovery, validation, and stateless project generation for the subset exposed by DayPilot UI Builder.
description: This API describes the components, targets, settings, and canonical option IDs that UI Builder can configure and generate. Agents can validate a strict project specification and receive its deterministic ZIP without saving a server-side resource. It is not a complete DayPilot product capability taxonomy. A capability absent from this API must not be interpreted as unsupported by DayPilot.
version: 1.1.0
servers:
- url: https://builder.daypilot.org
description: Canonical DayPilot UI Builder service
security: []
tags:
- name: Discovery
description: Anonymous, read-only Builder capability discovery.
paths:
/api/v1:
get:
tags:
- Discovery
summary: Read the Builder API service index
description: Returns the API boundary, current catalog revision, and canonical discovery links.
operationId: getBuilderServiceIndex
parameters:
- $ref: '#/components/parameters/IfNoneMatch'
responses:
'200':
$ref: '#/components/responses/ServiceIndexSuccess'
'304':
$ref: '#/components/responses/NotModified'
'429':
$ref: '#/components/responses/TooManyRequests'
'500':
$ref: '#/components/responses/InternalError'
head:
tags:
- Discovery
summary: Read service-index metadata without a body
operationId: headBuilderServiceIndex
parameters:
- $ref: '#/components/parameters/IfNoneMatch'
responses:
'200':
$ref: '#/components/responses/HeadSuccess'
'304':
$ref: '#/components/responses/NotModified'
'429':
$ref: '#/components/responses/TooManyRequests'
'500':
$ref: '#/components/responses/InternalError'
options:
tags:
- Discovery
summary: Inspect cross-origin methods for the service index
operationId: optionsBuilderServiceIndex
responses:
'204':
$ref: '#/components/responses/PublicOptions'
'429':
$ref: '#/components/responses/TooManyRequests'
/api/v1/components:
get:
tags:
- Discovery
summary: List Builder components
description: Returns the seven canonical components exposed by UI Builder, their offered editions, public setting and option counts, and component-specific links.
operationId: listBuilderComponents
parameters:
- $ref: '#/components/parameters/IfNoneMatch'
responses:
'200':
$ref: '#/components/responses/ComponentsSuccess'
'304':
$ref: '#/components/responses/NotModified'
'429':
$ref: '#/components/responses/TooManyRequests'
'500':
$ref: '#/components/responses/InternalError'
head:
tags:
- Discovery
summary: Read component-list metadata without a body
operationId: headBuilderComponents
parameters:
- $ref: '#/components/parameters/IfNoneMatch'
responses:
'200':
$ref: '#/components/responses/HeadSuccess'
'304':
$ref: '#/components/responses/NotModified'
'429':
$ref: '#/components/responses/TooManyRequests'
'500':
$ref: '#/components/responses/InternalError'
options:
tags:
- Discovery
summary: Inspect cross-origin methods for the component list
operationId: optionsBuilderComponents
responses:
'204':
$ref: '#/components/responses/PublicOptions'
'429':
$ref: '#/components/responses/TooManyRequests'
/api/v1/components/{component}/targets:
parameters:
- $ref: '#/components/parameters/Component'
get:
tags:
- Discovery
summary: List generation targets
description: Returns concrete Builder generation targets for a component. The optional edition filter limits the returned target inventory to that offered edition.
operationId: listBuilderComponentTargets
parameters:
- $ref: '#/components/parameters/Edition'
- $ref: '#/components/parameters/IfNoneMatch'
responses:
'200':
$ref: '#/components/responses/TargetsSuccess'
'304':
$ref: '#/components/responses/NotModified'
'400':
$ref: '#/components/responses/InvalidQuery'
'404':
$ref: '#/components/responses/NotFound'
'429':
$ref: '#/components/responses/TooManyRequests'
'500':
$ref: '#/components/responses/InternalError'
head:
tags:
- Discovery
summary: Read target-list metadata without a body
operationId: headBuilderComponentTargets
parameters:
- $ref: '#/components/parameters/Edition'
- $ref: '#/components/parameters/IfNoneMatch'
responses:
'200':
$ref: '#/components/responses/HeadSuccess'
'304':
$ref: '#/components/responses/NotModified'
'400':
$ref: '#/components/responses/InvalidQuery'
'404':
$ref: '#/components/responses/NotFound'
'429':
$ref: '#/components/responses/TooManyRequests'
'500':
$ref: '#/components/responses/InternalError'
options:
tags:
- Discovery
summary: Inspect cross-origin methods for target discovery
operationId: optionsBuilderComponentTargets
responses:
'204':
$ref: '#/components/responses/PublicOptions'
'429':
$ref: '#/components/responses/TooManyRequests'
/api/v1/components/{component}/settings:
parameters:
- $ref: '#/components/parameters/Component'
get:
tags:
- Discovery
summary: List canonical Builder settings
description: Returns all public settings and options for a component. When edition or target filters are supplied, options are retained and receive an explicit supported result. The target filter requires edition and accepts a concrete target ID or a current alias.
operationId: listBuilderComponentSettings
parameters:
- $ref: '#/components/parameters/Edition'
- $ref: '#/components/parameters/Target'
- $ref: '#/components/parameters/IfNoneMatch'
responses:
'200':
$ref: '#/components/responses/SettingsSuccess'
'304':
$ref: '#/components/responses/NotModified'
'400':
$ref: '#/components/responses/InvalidQuery'
'404':
$ref: '#/components/responses/NotFound'
'429':
$ref: '#/components/responses/TooManyRequests'
'500':
$ref: '#/components/responses/InternalError'
head:
tags:
- Discovery
summary: Read settings-list metadata without a body
operationId: headBuilderComponentSettings
parameters:
- $ref: '#/components/parameters/Edition'
- $ref: '#/components/parameters/Target'
- $ref: '#/components/parameters/IfNoneMatch'
responses:
'200':
$ref: '#/components/responses/HeadSuccess'
'304':
$ref: '#/components/responses/NotModified'
'400':
$ref: '#/components/responses/InvalidQuery'
'404':
$ref: '#/components/responses/NotFound'
'429':
$ref: '#/components/responses/TooManyRequests'
'500':
$ref: '#/components/responses/InternalError'
options:
tags:
- Discovery
summary: Inspect cross-origin methods for settings discovery
operationId: optionsBuilderComponentSettings
responses:
'204':
$ref: '#/components/responses/PublicOptions'
'429':
$ref: '#/components/responses/TooManyRequests'
components:
responses:
ServiceIndexSuccess:
description: Builder API service index.
headers:
ETag:
$ref: '#/components/headers/ETag'
Cache-Control:
$ref: '#/components/headers/CacheControl'
Access-Control-Allow-Origin:
$ref: '#/components/headers/AllowOrigin'
Access-Control-Expose-Headers:
$ref: '#/components/headers/ExposeHeaders'
content:
application/json:
schema:
$ref: '#/components/schemas/ServiceIndex'
InternalError:
description: The public catalog could not be served.
$ref: '#/components/responses/Problem'
SettingsSuccess:
description: Canonical public Builder settings for one component.
headers:
ETag:
$ref: '#/components/headers/ETag'
Cache-Control:
$ref: '#/components/headers/CacheControl'
Access-Control-Allow-Origin:
$ref: '#/components/headers/AllowOrigin'
Access-Control-Expose-Headers:
$ref: '#/components/headers/ExposeHeaders'
content:
application/json:
schema:
$ref: '#/components/schemas/SettingsResponse'
ComponentsSuccess:
description: Builder component inventory.
headers:
ETag:
$ref: '#/components/headers/ETag'
Cache-Control:
$ref: '#/components/headers/CacheControl'
Access-Control-Allow-Origin:
$ref: '#/components/headers/AllowOrigin'
Access-Control-Expose-Headers:
$ref: '#/components/headers/ExposeHeaders'
content:
application/json:
schema:
$ref: '#/components/schemas/ComponentsResponse'
PublicOptions:
description: Cross-origin preflight metadata. The response has no body.
headers:
Allow:
description: Supported resource methods.
schema:
type: string
const: GET, HEAD, OPTIONS
Access-Control-Allow-Origin:
$ref: '#/components/headers/AllowOrigin'
Access-Control-Allow-Methods:
description: Methods allowed for anonymous cross-origin access.
schema:
type: string
const: GET, HEAD, OPTIONS
Access-Control-Allow-Headers:
description: Request headers allowed by preflight.
schema:
type: string
const: Accept, If-None-Match
Access-Control-Expose-Headers:
$ref: '#/components/headers/ExposeHeaders'
Access-Control-Max-Age:
description: Maximum time in seconds that a browser may cache the preflight result.
schema:
type: integer
minimum: 0
TooManyRequests:
description: The public request limit was exceeded.
$ref: '#/components/responses/Problem'
TargetsSuccess:
description: Builder target inventory for one component.
headers:
ETag:
$ref: '#/components/headers/ETag'
Cache-Control:
$ref: '#/components/headers/CacheControl'
Access-Control-Allow-Origin:
$ref: '#/components/headers/AllowOrigin'
Access-Control-Expose-Headers:
$ref: '#/components/headers/ExposeHeaders'
content:
application/json:
schema:
$ref: '#/components/schemas/TargetsResponse'
Problem:
description: A stable public API problem.
headers:
Access-Control-Allow-Origin:
$ref: '#/components/headers/AllowOrigin'
Access-Control-Expose-Headers:
$ref: '#/components/headers/ExposeHeaders'
content:
application/problem+json:
schema:
$ref: '#/components/schemas/Problem'
InvalidQuery:
description: A query parameter or parameter combination is invalid.
$ref: '#/components/responses/Problem'
HeadSuccess:
description: Representation metadata. A HEAD response has no body.
headers:
ETag:
$ref: '#/components/headers/ETag'
Cache-Control:
$ref: '#/components/headers/CacheControl'
Access-Control-Allow-Origin:
$ref: '#/components/headers/AllowOrigin'
Access-Control-Expose-Headers:
$ref: '#/components/headers/ExposeHeaders'
NotFound:
description: The component is not exposed by Builder.
$ref: '#/components/responses/Problem'
NotModified:
description: The supplied If-None-Match validator matches the current representation.
headers:
ETag:
$ref: '#/components/headers/ETag'
Cache-Control:
$ref: '#/components/headers/CacheControl'
Access-Control-Allow-Origin:
$ref: '#/components/headers/AllowOrigin'
Access-Control-Expose-Headers:
$ref: '#/components/headers/ExposeHeaders'
schemas:
Problem:
type: object
additionalProperties: false
required:
- type
- title
- status
- detail
- code
properties:
type:
type: string
format: uri-reference
title:
type: string
minLength: 1
status:
type: integer
minimum: 400
maximum: 599
detail:
type: string
minLength: 1
code:
type: string
pattern: ^[a-z0-9]+(?:_[a-z0-9]+)*$
enum:
- query_invalid
- component_not_found
- edition_invalid
- edition_required
- target_not_found
- invalid_request
- method_not_allowed
- resource_not_found
- rate_limit_exceeded
- discovery_document_unavailable
- public_response_invalid
- public_catalog_invalid
- internal_error
- request_invalid
- representation_not_acceptable
- media_type_unsupported
- content_encoding_unsupported
- request_too_large
- configuration_invalid
- catalog_revision_mismatch
- project_digest_mismatch
- precondition_required
- rate_limit_capacity_exceeded
- public_generation_disabled
- generation_disabled
- generation_busy
- generation_deadline_exceeded
- generation_preflight_failed
- archive_generation_failed
issues:
type: array
minItems: 1
maxItems: 64
items:
$ref: https://builder.daypilot.org/schema/builder-project-v1.json#/$defs/issue
ComponentID:
type: string
enum:
- scheduler
- calendar
- gantt
- month
- timesheet
- kanban
- resource
Target:
type: object
additionalProperties: false
required:
- id
- label
- framework
- status
- legacy
- deprecated
- editions
properties:
id:
type: string
minLength: 1
alias:
type: string
minLength: 1
label:
type: string
minLength: 1
framework:
type: string
minLength: 1
status:
type: string
enum:
- current
- supported
- legacy
- deprecated
legacy:
type: boolean
deprecated:
type: boolean
editions:
type: array
minItems: 1
uniqueItems: true
items:
$ref: '#/components/schemas/Edition'
SettingsFormat:
type: string
const: option-id-v1
CatalogRevision:
type: string
description: A deterministic revision over the rule, admission, and target catalog inputs.
pattern: ^sha256:[a-f0-9]{64}$
SettingOption:
type: object
additionalProperties: false
required:
- id
- label
- default
- offeredEditions
- emitsGeneratedConfig
- affectedConfigKeys
properties:
id:
type: string
minLength: 1
label:
type: string
minLength: 1
default:
type: boolean
offeredEditions:
type: array
uniqueItems: true
items:
$ref: '#/components/schemas/Edition'
emitsGeneratedConfig:
type: boolean
affectedConfigKeys:
type: array
uniqueItems: true
items:
type: string
minLength: 1
supported:
type: boolean
description: Present only when edition or target support was requested. Unsupported options remain in the response with false.
APIVersion:
type: string
const: v1
PublicOperationState:
type: object
additionalProperties: false
required:
- enabled
properties:
enabled:
type: boolean
ServiceLinks:
type: object
additionalProperties: false
required:
- components
- openapi
- settingsSchema
- arazzo
- apiCatalog
- health
- validateConfiguration
- projectArchives
- projectSchema
properties:
components:
type: string
format: uri-reference
openapi:
type: string
format: uri-reference
settingsSchema:
type: string
format: uri-reference
arazzo:
type: string
format: uri-reference
apiCatalog:
type: string
format: uri-reference
health:
type: string
format: uri-reference
validateConfiguration:
type: string
const: /api/v1/configurations/validate
projectArchives:
type: string
const: /api/v1/project-archives
projectSchema:
type: string
const: /schema/builder-project-v1.json
PublicEnvelope:
type: object
required:
- apiVersion
- scope
- catalogRevision
properties:
apiVersion:
$ref: '#/components/schemas/APIVersion'
scope:
$ref: '#/components/schemas/Scope'
catalogRevision:
$ref: '#/components/schemas/CatalogRevision'
Scope:
type: string
const: builder
PublicOperations:
type: object
additionalProperties: false
required:
- configurationValidation
- projectArchives
properties:
configurationValidation:
$ref: '#/components/schemas/PublicOperationState'
projectArchives:
$ref: '#/components/schemas/PublicOperationState'
ComponentLinks:
type: object
additionalProperties: false
required:
- targets
- settings
properties:
targets:
type: string
format: uri-reference
settings:
type: string
format: uri-reference
ServiceIndex:
type: object
additionalProperties: false
required:
- apiVersion
- scope
- catalogRevision
- description
- links
- operations
properties:
apiVersion:
$ref: '#/components/schemas/APIVersion'
scope:
$ref: '#/components/schemas/Scope'
catalogRevision:
$ref: '#/components/schemas/CatalogRevision'
description:
type: string
minLength: 1
links:
$ref: '#/components/schemas/ServiceLinks'
operations:
$ref: '#/components/schemas/PublicOperations'
ComponentSummary:
type: object
additionalProperties: false
required:
- id
- editions
- settingCount
- optionCount
- links
properties:
id:
$ref: '#/components/schemas/ComponentID'
editions:
type: array
minItems: 1
uniqueItems: true
items:
$ref: '#/components/schemas/Edition'
settingCount:
type: integer
minimum: 0
optionCount:
type: integer
minimum: 0
links:
$ref: '#/components/schemas/ComponentLinks'
TargetsResponse:
allOf:
- $ref: '#/components/schemas/PublicEnvelope'
- type: object
required:
- component
- targets
properties:
component:
$ref: '#/components/schemas/ComponentID'
edition:
$ref: '#/components/schemas/Edition'
targets:
type: array
items:
$ref: '#/components/schemas/Target'
ComponentsResponse:
allOf:
- $ref: '#/components/schemas/PublicEnvelope'
- type: object
required:
- components
properties:
components:
type: array
minItems: 7
maxItems: 7
items:
$ref: '#/components/schemas/ComponentSummary'
Edition:
type: string
enum:
- lite
- pro
Setting:
type: object
additionalProperties: false
required:
- id
- description
- docsUrl
- defaultOptionId
- options
properties:
id:
type: string
minLength: 1
description:
type: string
minLength: 1
docsUrl:
type: string
format: uri
pattern: ^https://
defaultOptionId:
type: string
minLength: 1
options:
type: array
minItems: 1
items:
$ref: '#/components/schemas/SettingOption'
SettingsResponse:
allOf:
- $ref: '#/components/schemas/PublicEnvelope'
- type: object
required:
- component
- settingsFormat
- settings
properties:
component:
$ref: '#/components/schemas/ComponentID'
edition:
$ref: '#/components/schemas/Edition'
target:
$ref: '#/components/schemas/TargetResolution'
settingsFormat:
$ref: '#/components/schemas/SettingsFormat'
settings:
type: array
items:
$ref: '#/components/schemas/Setting'
TargetResolution:
type: object
additionalProperties: false
required:
- requested
- resolved
properties:
requested:
type: string
minLength: 1
resolved:
type: string
minLength: 1
parameters:
Target:
name: target
in: query
required: false
description: Optional concrete target ID or current alias. This parameter requires edition. The response identifies both the requested value and concrete resolved target.
x-requires: edition
schema:
type: string
minLength: 1
example: react@latest
Edition:
name: edition
in: query
required: false
description: Optional offered-edition filter.
schema:
$ref: '#/components/schemas/Edition'
example: pro
Component:
name: component
in: path
required: true
description: Canonical Builder component ID.
schema:
$ref: '#/components/schemas/ComponentID'
example: scheduler
IfNoneMatch:
name: If-None-Match
in: header
required: false
description: Return 304 when this validator matches the selected representation.
schema:
type: string
example: '"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"'
headers:
ETag:
description: Strong validator for the exact representation.
schema:
type: string
pattern: ^"[^"]+"$
AllowOrigin:
description: The anonymous read-only resources are readable from any origin without credentials.
schema:
type: string
const: '*'
CacheControl:
description: Bounded public revalidation policy.
schema:
type: string
example: public, max-age=300, must-revalidate
ExposeHeaders:
description: Response headers exposed to browser clients.
schema:
type: string
example: ETag, Link
externalDocs:
description: Strict public Builder project contract
url: https://builder.daypilot.org/schema/builder-project-v1.json