Workday Tracking System · API Governance Rules
Workday Tracking System API Rules
Spectral linting rules defining API design standards and conventions for Workday Tracking System.
68 Rules
error 18
warn 39
info 11
Rule Categories
delete
deprecation
external
get
info
no
openapi
operation
parameter
patch
paths
post
put
request
response
schema
security
servers
tags
Rules
warn
info-title-format
API title should follow the "Workday ..." 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
API version should follow the "v{N}" pattern (e.g. v1)
$.info.version
warn
info-contact-required
API info should include contact information
$.info
warn
info-contact-name
Contact should include a name
$.info.contact
warn
info-contact-url
Contact should include a developer URL
$.info.contact
error
openapi-version
APIs must use OpenAPI 3.0.x
$.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-tenant-pattern
Server URLs should follow the Workday tenant pattern (e.g. https://{tenant}.workday.com/api/{domain}/v{N})
$.servers[*].url
warn
servers-description-required
Servers should have descriptions
$.servers[*]
warn
paths-camel-case
Path segments should use camelCase (Workday convention)
$.paths[*]~
error
paths-no-trailing-slash
Paths must not have trailing slashes
$.paths[*]~
error
paths-no-query-string
Paths must not contain query strings
$.paths[*]~
warn
paths-no-version-prefix
API version belongs in the server URL, not in the path
$.paths[*]~
info
paths-worker-scoped-when-applicable
Worker-specific resources should be scoped under /workers/{workerId}
$.paths[*]~
error
operation-summary-required
All operations must have a summary
$.paths[*][get,post,put,patch,delete]
warn
operation-summary-title-case
Operation summaries should use Title Case (e.g., "List Time Blocks")
$.paths[*][get,post,put,patch,delete].summary
warn
operation-description-required
All operations should 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 should use camelCase
$.paths[*][get,post,put,patch,delete].operationId
warn
operation-id-verb-prefix
operationId should start with a recognized verb (list, get, create, update, delete, request, submit, assign, import, override)
$.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]
info
operation-single-tag
Operations should have exactly one tag for clean grouping
$.paths[*][get,post,put,patch,delete].tags
warn
tags-defined-globally
Global tags array should be defined at the root
$
warn
tags-title-case
Tags should use Title Case (e.g. "Time Blocks", "Leave of Absence")
$.tags[*].name
warn
tags-description-required
All global tags should have descriptions
$.tags[*]
error
parameter-description-required
All parameters must have descriptions
$.paths[*][get,post,put,patch,delete].parameters[*]
warn
parameter-camel-case
Parameter names should use camelCase (Workday convention)
$.paths[*][get,post,put,patch,delete].parameters[*].name
error
parameter-schema-required
All parameters must define a schema
$.paths[*][get,post,put,patch,delete].parameters[*]
warn
parameter-pagination-offset
Use "offset" (not "skip", "from", or "page") for pagination offset
$.paths[*][get,post,put,patch,delete].parameters[?(@.in == 'query')].name
warn
parameter-pagination-limit
Use "limit" (not "size", "count", or "perPage") for pagination size
$.paths[*][get,post,put,patch,delete].parameters[?(@.in == 'query')].name
info
parameter-date-range-naming
Date range filters should use startDate/endDate (Workday convention)
$.paths[*][get,post,put,patch,delete].parameters[?(@.in == 'query')].name
warn
parameter-worker-id-naming
Worker identifier path parameter should be named "workerId"
$.paths[*][get,post,put,patch,delete].parameters[?(@.in == 'path' && @.name =~ /worker/i)].name
warn
request-body-description
Request bodies should have descriptions
$.paths[*][post,put,patch].requestBody
error
request-body-json-content
Request bodies must support application/json
$.paths[*][post,put,patch].requestBody.content
warn
request-body-schema-ref
Request body schemas should reference a named component (not be inlined)
$.paths[*][post,put,patch].requestBody.content.application/json.schema
error
response-success-required
All operations must define at least one response
$.paths[*][get,post,put,patch,delete].responses
error
response-description-required
All responses must have a description
$.paths[*][get,post,put,patch,delete].responses[*]
warn
response-401-required
All operations should define a 401 Unauthorized response
$.paths[*][get,post,put,patch,delete].responses
warn
response-404-required-for-resource-paths
GET/PUT/DELETE on resource paths should define a 404 Not Found response
$.paths[?(@property.match(/\\{[a-zA-Z]+\\}$/))][get,put,delete].responses
warn
response-400-for-mutations
POST/PUT/PATCH operations should define a 400 Bad Request response
$.paths[*][post,put,patch].responses
warn
response-success-json-content
2xx responses with content should use application/json
$.paths[*][get,post,put,patch,delete].responses[?(@property.match(/^2[0-9]{2}$/))].content
info
response-error-schema
Error responses should reference an error schema with message and error fields
$.components.schemas.ErrorResponse.properties
info
response-delete-204
DELETE operations should return 204 No Content
$.paths[*].delete.responses
warn
schema-property-camel-case
Schema property names should 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 have a description
$.components.schemas[*]
info
schema-id-property-naming
Identifier properties should be named "id" or end with "Id" (e.g., workerId, timeBlockId)
$.components.schemas[*].properties[?(@property.match(/^[a-zA-Z]*[Ii]dentifier$/))]~
info
schema-timestamp-naming
Timestamp properties should follow the createdAt/modifiedAt convention
$.components.schemas[*].properties[?(@property.match(/^(created|modified|updated)[_-]?(date|time|on)$/i))]~
info
schema-required-array
Required fields should be declared in a "required" array, not on individual properties
$.components.schemas[*].properties[*]
warn
security-global-defined
Global security requirements should be defined
$
error
security-schemes-defined
Security schemes must be defined under components
$
warn
security-bearer-scheme
Workday APIs should expose a BearerAuth scheme using Bearer/JWT
$.components.securitySchemes.BearerAuth
warn
security-bearer-format
Bearer security schemes should declare bearerFormat (e.g. JWT)
$.components.securitySchemes[?(@.scheme == 'bearer')]
warn
security-scheme-description
Security schemes should have 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
warn
put-has-request-body
PUT operations should have a request body
$.paths[*].put
warn
patch-has-request-body
PATCH operations should have a request body
$.paths[*].patch
error
no-empty-descriptions
Descriptions must not be empty strings
$..description
info
schema-properties-have-descriptions
Schema properties should have descriptions
$.components.schemas[*].properties[*]
info
schema-properties-have-examples
Schema properties should include examples
$.components.schemas[*].properties[?(@.type && @.type != 'object' && @.type != 'array')]
warn
deprecation-documented
Deprecated operations should explain the deprecation in the description
$.paths[*][get,post,put,patch,delete][?(@.deprecated == true)]
info
external-docs-encouraged
APIs should link to external documentation
$