Workday Studio · API Governance Rules
Workday Studio API Rules
Spectral linting rules defining API design standards and conventions for Workday Studio.
64 Rules
error 25
warn 30
info 9
Rule Categories
deprecation
examples
external
info
no
openapi
operation
parameter
paths
put
request
response
schema
security
servers
tags
Rules
error
info-title-required
The info object must include a title.
$.info
warn
info-title-workday-studio-prefix
API title should start with "Workday Studio".
$.info.title
error
info-description-required
The info object must include a description.
$.info
warn
info-description-min-length
info.description should provide meaningful context (>= 100 chars).
$.info.description
error
info-version-required
The info object must include a version.
$.info
warn
info-contact-required
A contact object should be defined for support.
$.info
info
info-contact-email-workday
Contact email should be the Workday API support address.
$.info.contact.email
warn
info-license-required
A license object should be defined.
$.info
info
info-terms-of-service-recommended
termsOfService should be set on info.
$.info
error
openapi-version-3-1
Specs in this repo must declare OpenAPI 3.1.0.
$.openapi
error
servers-defined
At least one server must be defined.
$
error
servers-https-only
All server URLs must use HTTPS.
$.servers[*].url
warn
servers-description-required
Every server must include a description.
$.servers[*]
warn
servers-tenant-templated
Server URLs should template both baseUrl and tenant variables.
$.servers[*].url
error
paths-allowed-character-set
Paths may use camelCase (e.g. /integrationSystems) or Workday SOAP-style PascalCase_With_Underscores (e.g. /Human_Resources/Get_Workers). No spaces, hyphens, or other special characters.
$.paths
error
paths-no-trailing-slash
Paths must not end with a trailing slash (except the root).
$.paths
error
paths-no-query-strings
Path templates must not include query strings.
$.paths
warn
paths-no-file-extensions
Paths should not include file extensions.
$.paths
error
operation-summary-required
Every operation must have a summary.
$.paths[*][get,post,put,patch,delete,head,options]
warn
operation-summary-workday-studio-prefix
Operation summaries should begin with "Workday Studio ".
$.paths[*][get,post,put,patch,delete,head,options].summary
warn
operation-description-required
Every operation must have a description.
$.paths[*][get,post,put,patch,delete,head,options]
error
operation-operationId-required
Every operation must have an operationId.
$.paths[*][get,post,put,patch,delete,head,options]
error
operation-operationId-camelcase
operationId must be camelCase.
$.paths[*][get,post,put,patch,delete,head,options].operationId
warn
operation-operationId-verb-prefix
operationId should begin with an approved verb prefix (get, list, create, update, delete, launch, search).
$.paths[*][get,post,put,patch,delete,head,options].operationId
error
operation-tags-required
Every operation must declare at least one tag.
$.paths[*][get,post,put,patch,delete,head,options]
error
operation-tag-count
Operation tags array must not be empty.
$.paths[*][get,post,put,patch,delete,head,options].tags
error
tags-defined-globally
A top-level tags array must be defined.
$
error
tags-name-required
Every tag must have a name.
$.tags[*]
warn
tags-description-required
Every tag must have a description.
$.tags[*]
warn
tags-title-case
Tag names should use Title Case (e.g. "Integration Assemblies", "Human Resources", "Benefits Administration").
$.tags[*].name
warn
operation-tags-must-be-defined-globally
Every tag referenced on an operation must be defined in the global tags array.
$.paths[*][get,post,put,patch,delete,head,options].tags[*]
warn
parameter-description-required
Every parameter must have a description.
$..parameters[*]
warn
parameter-name-camelcase
Parameter names should use camelCase. The path identifier "ID" is permitted as the canonical Workday resource identifier.
$..parameters[*].name
error
parameter-no-apikey-in-query
API keys must not be passed as query parameters.
$..parameters[?(@.in == 'query')].name
warn
parameter-pagination-uses-limit-offset
Standardize pagination on limit/offset. The web services spec uses pageSize/page; new operations should adopt limit/offset.
$..parameters[?(@.in == 'query')].name
error
request-body-json-content
Request bodies must support application/json.
$.paths[*][post,put,patch].requestBody.content
info
request-body-description-recommended
Request bodies should include a description.
$.paths[*][post,put,patch].requestBody
error
response-success-required
Every operation must define at least one 2xx response.
$.paths[*][get,post,put,patch,delete,head,options].responses
warn
response-401-required
Operations should declare a 401 response since the API requires authentication.
$.paths[*][get,post,put,patch,delete,head,options].responses
warn
response-403-recommended
Operations should declare a 403 response for permission errors.
$.paths[*][get,post,put,patch,delete,head,options].responses
warn
response-404-on-id-paths
Operations on /{ID} paths should declare a 404 response.
$.paths[?(@property.match(/\{[A-Za-z]+\}/))][get,post,put,patch,delete].responses
error
response-description-required
Every response must have a description.
$.paths[*][get,post,put,patch,delete,head,options].responses[*]
warn
response-2xx-json-content
2xx responses must return application/json.
$.paths[*][get,post,put,patch,delete,head,options].responses[?(@property.match(/^2[0-9][0-9]$/))].content
warn
response-error-schema-has-message
The shared ErrorResponse schema should expose a message-bearing field.
$.components.schemas.ErrorResponse.properties
warn
response-list-uses-total-data-wrapper
Collection responses should use the standard {total, data[]} wrapper shape used throughout the Workday Studio specs.
$.components.schemas[?(@property.match(/Response$/))].properties
warn
schema-property-name-camelcase
Schema property names should use camelCase. The canonical "ID" path identifier is permitted at any depth.
$.components.schemas..properties
warn
schema-id-property-name
Resource identifier properties should be named "id" (lowercase), matching the convention used across the Workday Studio specs.
$.components.schemas..properties
info
schema-timestamp-property-suffix
Date-time properties should be named with a "DateTime" suffix (e.g. startDateTime, endDateTime, lastRunDateTime).
$.components.schemas..properties[?(@.format == 'date-time')]~
info
schema-date-property-suffix
Date-only properties should be named with a "Date" suffix (e.g. hireDate, startDate, effectiveDate).
$.components.schemas..properties[?(@.format == 'date')]~
info
schema-top-level-description
Top-level schemas in components should include a description.
$.components.schemas[*]
warn
schema-type-required
Every schema definition should declare a type.
$.components.schemas[*]
error
security-global-defined
A global security requirement must be defined.
$
error
security-schemes-defined
components.securitySchemes must be defined.
$.components
error
security-oauth2-required
Specs must define an OAuth2 security scheme named "OAuth2".
$.components.securitySchemes
warn
security-oauth2-flow-authorization-code
The OAuth2 scheme must declare an authorizationCode flow.
$.components.securitySchemes.OAuth2.flows
info
security-oauth2-token-url-tenant
OAuth2 tokenUrl should template the tenant in the path.
$.components.securitySchemes.OAuth2.flows.authorizationCode.tokenUrl
warn
security-scope-naming
OAuth2 scope names should use the Workday Studio convention of ":" (e.g. r:integrations, w:integrations, r:wws, w:wws).
$.components.securitySchemes.OAuth2.flows.authorizationCode.scopes
error
no-request-body-on-get
GET operations must not declare a request body.
$.paths[*].get
warn
no-request-body-on-delete
DELETE operations should not declare a request body.
$.paths[*].delete
warn
put-patch-request-body-required
PUT and PATCH operations must declare a request body.
$.paths[*][put,patch]
error
no-empty-descriptions
Description fields, when present, must not be empty strings.
$..description
info
external-docs-encouraged
A top-level externalDocs object is encouraged for discoverability.
$
info
examples-encouraged
Adding examples to schemas helps consumers understand payloads.
$.components.schemas[*]
warn
deprecation-must-be-documented
Deprecated operations must explain the deprecation in their description.
$.paths[*][get,post,put,patch,delete,head,options][?(@.deprecated == true)].description