Workday Recruiting · API Governance Rules
Workday Recruiting API Rules
Spectral linting rules defining API design standards and conventions for Workday Recruiting.
67 Rules
error 25
warn 36
info 6
Rule Categories
collection
delete
deprecation
examples
external
get
global
info
no
openapi
operation
parameter
patch
paths
post
put
reference
request
resource
response
schema
security
servers
tags
Rules
warn
info-title-format
API title must follow the Workday Recruiting naming pattern
$.info.title
error
info-description-required
API info must have a description
$.info
warn
info-description-min-length
API description should be at least 50 characters
$.info.description
error
info-version-required
API info must specify a version
$.info
warn
info-version-format
Version should follow the v{n} or v{n}.{n} pattern (e.g. v1, v41.2)
$.info.version
warn
info-contact-required
API info must include contact information
$.info
info
info-terms-of-service
API info should reference Workday terms of service
$.info
info
external-docs-required
APIs should provide external documentation links
$
error
openapi-version
APIs must use OpenAPI 3.1.x
$.openapi
error
servers-defined
At least one server must be defined
$
error
servers-https
All server URLs must use HTTPS
$.servers[*].url
warn
servers-description-required
All servers should include a description
$.servers[*]
warn
servers-versioned-path
Server URLs should include a version segment (e.g. /v41.2)
$.servers[*].url
info
servers-recruiting-path
Server URLs should include the /recruiting/ API segment
$.servers[*].url
warn
paths-camel-case
Path segments must use camelCase resource names (Workday convention)
$.paths[*]~
error
paths-no-trailing-slash
Paths must not have trailing slashes
$.paths[*]~
error
paths-no-query-strings
Paths must not contain query strings
$.paths[*]~
info
paths-plural-resources
Top-level collection paths should use plural resource nouns
$.paths[*]~
error
operation-summary-required
All operations must have a summary
$.paths[*][get,post,put,patch,delete]
warn
operation-summary-prefix
Operation summaries should start with "Workday Recruiting"
$.paths[*][get,post,put,patch,delete].summary
warn
operation-description-required
All operations must have a description
$.paths[*][get,post,put,patch,delete]
error
operation-id-required
All operations must have an operationId
$.paths[*][get,post,put,patch,delete]
warn
operation-id-camel-case
operationId must use camelCase
$.paths[*][get,post,put,patch,delete].operationId
warn
operation-id-verb-prefix
operationId should start with a recognized recruiting verb
$.paths[*][get,post,put,patch,delete].operationId
error
operation-tags-required
All operations must have at least one tag
$.paths[*][get,post,put,patch,delete]
warn
global-tags-defined
Top-level tags array should be defined for documentation grouping
$
warn
tags-title-case
Global tag names should use Title Case (multi-word allowed)
$.tags[*].name
warn
tags-description-required
All global tags must have descriptions
$.tags[*]
error
parameter-description-required
All parameters must have descriptions
#Parameter
warn
parameter-camel-case
Parameter names should use camelCase (Workday convention)
#Parameter
error
parameter-schema-required
All parameters must define a schema
#Parameter
warn
parameter-pagination-limit
Pagination should use a "limit" parameter, not page-size or perPage
$.paths[*][get,post,put,patch,delete].parameters[?(@.in == 'query')].name
warn
parameter-pagination-offset
Pagination should use an "offset" parameter, not page or pageNumber
$.paths[*][get,post,put,patch,delete].parameters[?(@.in == 'query')].name
error
parameter-no-api-key-in-query
API keys must not be passed as query parameters
$.paths[*][get,post,put,patch,delete].parameters[?(@.in == 'query')].name
info
resource-id-path-param-naming
Resource identifier path parameters should be named "id" (Workday WID convention)
$.paths[*][get,post,put,patch,delete].parameters[?(@.in == 'path' && @.name =~ /id$/i)].name
error
request-body-json-content
Request bodies must support application/json content type
$.paths[*][post,put,patch].requestBody.content
warn
request-body-schema-required
Request body content must reference a schema
$.paths[*][post,put,patch].requestBody.content[*]
error
response-success-required
All operations must define at least one 2xx response
$.paths[*][get,post,put,patch,delete].responses
warn
response-401-required
Operations should define a 401 Unauthorized response
$.paths[*][get,post,put,patch,delete].responses
warn
response-404-on-resource-get
GET operations on a single resource should define a 404 Not Found response
$.paths[?(@property.match(/\\{[a-zA-Z]+\\}$/))].get.responses
warn
response-400-on-mutations
POST/PUT/PATCH operations should define a 400 Bad Request response
$.paths[*][post,put,patch].responses
error
response-description-required
All responses must have a description
$.paths[*][get,post,put,patch,delete].responses[*]
warn
response-json-content
Success responses must use application/json content type
$.paths[*][get,post,put,patch,delete].responses['200','201','202'].content
warn
response-error-schema-fields
Reusable error responses should reference a schema with message/error fields
$.components.responses[*].content.application/json
warn
schema-property-camel-case
Schema property names must use camelCase (Workday convention)
$.components.schemas[*].properties[*]~
warn
schema-type-defined
Top-level schemas must define a type
$.components.schemas[*]
warn
schema-description-required
Top-level schemas should include a description
$.components.schemas[*]
warn
schema-id-property-string
Resource id properties must be strings (Workday WID convention)
$.components.schemas[*].properties.id
warn
schema-timestamps-date-time
createdOn, updatedOn, submittedOn, postedOn, scheduledOn, completedOn properties should use date-time format
$.components.schemas[*].properties[?(@property.match(/^(createdOn|updatedOn|submittedOn|postedOn|scheduledOn|completedOn|approvedOn|processedOn|startedAt|completedAt)$/))]
warn
schema-recruiting-date-format
targetHireDate, targetEndDate, postingStartDate, postingEndDate, interviewDate, fromDate, toDate properties should use date format
$.components.schemas[*].properties[?(@property.match(/^(targetHireDate|targetEndDate|postingStartDate|postingEndDate|interviewDate|fromDate|toDate|startDate|endDate|effectiveDate)$/))]
warn
collection-response-data-array
Collection (list) responses must include a data array property
$.paths[*].get.responses['200'].content.application/json.schema.properties
warn
collection-response-total
Collection (list) responses should include a total property indicating full result count
$.paths[*].get.responses['200'].content.application/json.schema.properties
warn
reference-schema-shape
Reference schema must have id and descriptor properties (Workday Reference convention)
$.components.schemas.Reference.properties
error
global-security-defined
Global security must be declared
$
error
security-schemes-defined
Security schemes must be defined under components
$
error
security-oauth2-required
An oauth2 security scheme is required for Workday Recruiting APIs
$.components.securitySchemes
error
security-oauth2-type
The oauth2 security scheme must declare type oauth2
$.components.securitySchemes.oauth2
error
security-oauth2-flows
The oauth2 security scheme must define flows
$.components.securitySchemes.oauth2
warn
security-scheme-description
Security schemes must include a description
$.components.securitySchemes[*]
error
get-no-request-body
GET operations must not have a request body
$.paths[*].get
warn
delete-no-request-body
DELETE operations should not have a request body
$.paths[*].delete
warn
post-has-request-body
POST operations should have a request body
$.paths[*].post
error
patch-has-request-body
PATCH operations must have a request body
$.paths[*].patch
error
put-has-request-body
PUT operations must have a request body
$.paths[*].put
error
no-empty-descriptions
Descriptions must not be empty strings
$..description
info
examples-encouraged
Response and request examples improve developer experience
$.paths[*][get,post,put,patch,delete].responses['200','201'].content.application/json
warn
deprecation-documented
Deprecated operations should explain the migration path in their description
$.paths[*][?(@.deprecated == true)]