@usearazzo/validator checks an Arazzo document and reports every problem it finds. Problems come back as Language Server Protocol diagnostics: a location, a severity, a code, and a message. An editor can underline them, a CI step can count them, and a terminal can print them.

The checks come from the SpecLynx ApiDOM Language Service. Documents are read with @usearazzo/parser.

Installation

npm install @usearazzo/validator

The package ships ESM and CommonJS builds with TypeScript declarations, and requires Node.js 20.10 or newer. It is pre-1.0: the version documented here is an alpha, and the API may still change before the stable release.

Exports

Export Kind What it is
validateURI function Validate a document from a path or URL.
validate function Validate a document already in memory, as a TextDocument.
createTextDocument function Wrap a URI and content in a TextDocument ready for validate.
TextDocument class Re-exported from vscode-languageserver-textdocument.
ARAZZO_LANGUAGE_ID, DEFAULT_DOCUMENT_VERSION constant The language ID ('apidom') and version (1) createTextDocument uses.
defaultLanguageServiceContext constant The validation settings your options are merged over.
defaultArazzoResolveOptions constant The file and HTTP resolvers validateURI fetches the document with.
ValidateError class Thrown when validateURI cannot fetch the document.
Diagnostic, DiagnosticSeverity type, constant Re-exported from vscode-languageserver-types.
LanguageServiceContext type The shape of the options.

validateURI

validateURI(
  uri: string,
  context?: PartialDeep<LanguageServiceContext>,
  resolveOptions?: PartialDeep<ApiDOMReferenceResolveOptions>,
): Promise<Diagnostic[]>

Fetches the document at uri, validates it, and returns every diagnostic:

import { validateURI, DiagnosticSeverity } from '@usearazzo/validator';

const diagnostics = await validateURI('/path/to/adopt-a-pet.arazzo.yaml');
const errors = diagnostics.filter((d) => d.severity === DiagnosticSeverity.Error);
const isValid = errors.length === 0;

An empty array means nothing was found. A document with problems is not an error: it resolves to its diagnostics like any other.

Inputs

uri is a location, as a string:

  • A file system path. A relative path is read from the current working directory.
  • A file:// URL.
  • An HTTP or HTTPS URL.
await validateURI('./adopt-a-pet.arazzo.yaml');
await validateURI('file:///path/to/adopt-a-pet.arazzo.yaml');
await validateURI('https://example.com/adopt-a-pet.arazzo.yaml');

All three forms land on the same absolute location. Relative URLs inside the document, such as sourceDescriptions[].url: ./petstore.openapi.json, resolve against it, whichever form you passed.

The second argument is the options, shared with validate.

Fetching the document

validateURI reads the document with the parser’s file and HTTP resolvers, exported as defaultArazzoResolveOptions:

  • Files. Only .json, .yaml, and .yml files are read, dotfiles included.
  • HTTP. A 15 second timeout, at most 5 redirects, and no credentials.

The third argument is merged over them. It is an ApiDOM reference resolve options object. resolverOpts entries are set on each resolver, so the keys worth setting are the resolver’s own: timeout, redirects, withCredentials, and cache for HTTP.

const diagnostics = await validateURI('https://example.com/adopt-a-pet.arazzo.yaml', {}, {
  resolverOpts: { timeout: 10000 },
});

These resolvers fetch the entry document only. What source descriptions may read is a separate setting, parseContext.fileAllowList.

Errors

validateURI throws a ValidateError only when it cannot fetch the document: a missing file, an HTTP error, a file the resolvers do not allow. The message names the location you passed. The underlying error is on cause:

import { validateURI, ValidateError } from '@usearazzo/validator';

try {
  await validateURI('./missing.arazzo.yaml');
} catch (error) {
  if (error instanceof ValidateError) {
    error.message; // 'Failed to read Arazzo Document at "./missing.arazzo.yaml"'
    error.cause.message; // 'Error while reading file "/home/you/project/missing.arazzo.yaml"'
  }
  throw error;
}

The cause comes from ApiDOM. Its name is often ResolveError, ApiDOM’s own class of that name. Use instanceof on the outer error only.

Everything wrong with a document that was fetched is a diagnostic, never an exception. That includes a document that is not Arazzo at all: see Documents that are not Arazzo.

validate

validate(
  textDocument: TextDocument,
  context?: PartialDeep<LanguageServiceContext>,
): Promise<Diagnostic[]>

Validates content you already hold. It fetches nothing for the document itself, and never throws for a bad document.

import { validate, createTextDocument } from '@usearazzo/validator';

const textDocument = createTextDocument('file:///path/to/adopt-a-pet.arazzo.yaml', yamlText);
const diagnostics = await validate(textDocument);

validateURI is this function with a fetch in front of it. It reads the document, wraps it in a TextDocument named after the absolute location, and calls validate.

TextDocument

validate takes a TextDocument, the document model of the Language Server Protocol. An editor extension already has one. Anything else can build one:

import { createTextDocument, TextDocument } from '@usearazzo/validator';

const a = createTextDocument('file:///path/to/adopt-a-pet.arazzo.yaml', yamlText);
const b = TextDocument.create('file:///path/to/adopt-a-pet.arazzo.yaml', 'apidom', 1, yamlText);

Both are the same document. createTextDocument fills in ARAZZO_LANGUAGE_ID and DEFAULT_DOCUMENT_VERSION for you. JSON and YAML are both accepted; the format is detected from the content.

Relative URLs

A relative sourceDescriptions[].url resolves against the TextDocument’s URI. Give the TextDocument the document’s real, absolute location, such as file:///path/to/adopt-a-pet.arazzo.yaml or https://example.com/adopt-a-pet.arazzo.yaml. A made-up URI works for everything else, but its source descriptions then resolve against the made-up location.

Documents that are not Arazzo

Content that is not recognized as Arazzo returns exactly one diagnostic, spanning the whole document, and nothing else runs:

{
  "range": { "start": { "line": 0, "character": 0 }, "end": { "line": 3, "character": 0 } },
  "severity": 1,
  "code": 9000001,
  "source": "apilint",
  "message": "Document content is not recognized as an Arazzo Specification"
}

That covers an OpenAPI document, a JSON or YAML array, an empty file, and a document that matches both Arazzo and another specification.

It also covers YAML that does not parse, anywhere in the document: a YAML syntax error is reported this way, not as a syntax error at its location. JSON is different. A JSON syntax error comes back as a diagnostic at the error, with source syntax and code 0, alongside the rules that still apply to what did parse.

Diagnostics

Both functions return an array of Diagnostic objects, the type VS Code and every Language Server Protocol client render.

Shape

A workflow whose two steps share a stepId reports each step:

{
  "range": { "start": { "line": 12, "character": 8 }, "end": { "line": 15, "character": 41 } },
  "severity": 1,
  "code": 9040403,
  "source": "apilint",
  "message": "Every step must have a unique 'stepId' within a workflow."
}

Every diagnostic has these five fields:

Field What it holds
range Where the problem is. Lines and characters count from 0.
severity 1 error, 2 warning, 4 hint. Compare against DiagnosticSeverity.
code Which rule fired. See Codes and sources.
source Which part of the validator reported it.
message A human-readable description.

Warnings and hints are advice, not violations. A missing description on a workflow is a warning; a missing summary is a hint. To decide whether a document is valid, count errors only.

Codes and sources

Source Code Reported by
apilint A number, such as 9040403 A rule. The number is stable: match on it.
apilint 9000001 The document is not Arazzo.
apilint A generated string A $ref whose target does not exist (message local reference not found).
syntax 0 A JSON syntax error.
Arazzo 1.0 Schema 'json-schema' JSON Schema validation, when enabled.

The code of an unresolvable $ref is different on every run, so it cannot be matched on. Match on the message instead.

The numeric codes have names in ApilintCodes, exported by @speclynx/api-languageservice. ApilintCodes.ARAZZO_NOT_DETECTED is 9000001, for example.

Options

The second argument of both functions is a deep-partial LanguageServiceContext. It is merged over defaultLanguageServiceContext.

What runs

Five options under validationContext decide which checks run and how their messages read:

Option Default Effect when on
semanticValidation true Every rule runs.
semanticLinting true Only rules marked as lint rules run. No Arazzo rule is, so on its own it adds nothing.
referenceValidation true Every local $ref inside a JSON Schema, such as #/components/inputs/adopter, must point at something that exists. External $refs to other files are not checked.
jsonSchemaValidation false Arazzo 1.0.x documents are also checked against the Arazzo 1.0 JSON Schema. Arazzo 1.1.0 documents get no JSON Schema check.
betterAjvErrors true Friendlier messages for JSON Schema validation.

Turning semanticValidation off therefore turns every rule off, whatever semanticLinting says.

JSON Schema validation is off by default because the rules already report most of what it finds, so turning it on mostly doubles the output. What it adds is structural, such as telling the variants of a Reusable Object apart:

{
  "range": { "start": { "line": 1, "character": 0 }, "end": { "line": 1, "character": 4 } },
  "severity": 1,
  "code": "json-schema",
  "source": "Arazzo 1.0 Schema",
  "message": "\"info\" property must have required property \"version\""
}
const diagnostics = await validateURI('/path/to/adopt-a-pet.arazzo.yaml', {
  validationContext: { jsonSchemaValidation: true },
});

Source descriptions

The documents listed under sourceDescriptions are fetched and parsed while the entry document is validated. Two options under parseContext control that:

Option Default Effect
arazzo.sourceDescriptionsResolution true Fetch and parse each source description.
fileAllowList [/\.json$/i, /\.ya?ml$/i] Which local files a source description may read. An empty array turns resolution off entirely.

The default allow list matches the parser’s: local .json, .yaml, and .yml files, dotfiles included, and nothing else. Its entries are regular expressions, tested against the file’s absolute path. Glob strings are accepted too, but a glob such as '*' never matches a dotfile such as .petstore.yaml. HTTP and HTTPS source descriptions are not affected by this list.

No rule reads the parsed source descriptions yet. A source description that is missing, cannot be fetched, or does not parse produces no diagnostic, and an operationId is not checked against the OpenAPI document it names. The rules check the shape of $sourceDescriptions expressions, and resolve workflows and steps within the document itself.

Defaults and merging

import { defaultLanguageServiceContext } from '@usearazzo/validator';

console.dir(defaultLanguageServiceContext, { depth: null });

Your options are merged over the defaults key by key. Objects merge; arrays and every other value replace. Setting fileAllowList therefore replaces the default list, it does not add to it:

// read .json, .yaml, .yml, and .openapi files
const diagnostics = await validateURI('/path/to/adopt-a-pet.arazzo.yaml', {
  parseContext: { fileAllowList: [/\.json$/i, /\.ya?ml$/i, /\.openapi$/i] },
});

The defaults also set defaultContentLanguage to Arazzo 1.0.1. That is not the version checked: each document is checked against the version in its own arazzo field.

Untrusted documents

An Arazzo document decides what its source descriptions point at. By default the validator reads every .json, .yaml, and .yml file a source description names, wherever it is, and fetches every HTTP and HTTPS one. For a document you wrote, that is what you want. For a document you did not, restrict it.

No access beyond the document

Turn source description resolution off. The validator then reads the entry document and nothing else:

const diagnostics = await validateURI('/path/to/untrusted.arazzo.yaml', {
  parseContext: {
    fileAllowList: [],
    arazzo: { sourceDescriptionsResolution: false },
  },
});

Since no rule reads source descriptions yet, this changes no diagnostic today.

One directory only

To let source descriptions resolve, but only inside one directory, anchor the allow list to that directory:

const escapeRegExp = (s) => s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
// percent-encoded the way the validator encodes paths, with the trailing slash
const root = encodeURI('/home/you/specs/').replace(/#/g, '%23').replace(/\?/g, '%3F');

const diagnostics = await validateURI('/home/you/specs/adopt-a-pet.arazzo.yaml', {
  parseContext: {
    fileAllowList: [new RegExp(`^${escapeRegExp(root)}.*\\.(json|ya?ml)$`, 'i')],
  },
});

The pattern is tested against the final, absolute location, so a URL cannot climb out of the directory:

  • ../ segments are resolved first. ./sub/../other/../petstore.json is tested as /home/you/specs/petstore.json.
  • Percent-encoded dots are decoded first. ./%2e%2e/%2e%2e/secrets.json is tested as the real path outside the directory, and rejected.
  • The path is percent-encoded when tested: a space is %20, # is %23, and ? is %3F. That is why root is encoded the same way. encodeURI alone leaves # and ? as they are.

Three limits:

  • Keep the trailing slash. Without it, /home/you/specs also matches /home/you/specs-private/.
  • Symlinks are not resolved. The check compares paths, not files on disk. A symlink inside the directory that points outside it passes.
  • HTTP is not covered. The allow list is for local files only. To stop network access as well, turn resolution off as above.

Rules

Every rule the validator runs on an Arazzo document, grouped by the object it checks. All of them run when semanticValidation is on, which is the default.

  • Rule is the diagnostic’s code, the number to match on, with the rule’s name in ApilintCodes under it. The name never appears in a diagnostic, but it says what the rule checks.
  • Only in marks a rule that applies to Arazzo 1.0.x or 1.1.0 documents only. Empty means both.

The messages are quoted exactly as the validator reports them.

Any object

Applies to every object in the document.

Rule Severity Message
14999
DUPLICATE_KEYS
Error an object cannot contain duplicate keys

Arazzo Specification Object

The document root.

Rule Severity Message Only in
15000
NOT_ALLOWED_FIELDS
Error Object includes not allowed fields  
9020100
ARAZZO_SPEC_FIELD_ARAZZO_REQUIRED
Error should always have an 'arazzo' version field  
9020101
ARAZZO_SPEC_FIELD_ARAZZO_TYPE
Error arazzo version must be a string  
9020102
ARAZZO_SPEC_FIELD_ARAZZO_PATTERN
Error arazzo version must match the pattern 1.0.x or 1.1.x  
9020200
ARAZZO_SPEC_FIELD_INFO_REQUIRED
Error should always have an 'info' object  
9020201
ARAZZO_SPEC_FIELD_INFO_TYPE
Error info must be an object  
9020300
ARAZZO_SPEC_FIELD_SOURCE_DESCRIPTIONS_REQUIRED
Error should always have a 'sourceDescriptions' list  
9020301
ARAZZO_SPEC_FIELD_SOURCE_DESCRIPTIONS_TYPE
Error sourceDescriptions must be an array of Source Description Objects  
9020302
ARAZZO_SPEC_FIELD_SOURCE_DESCRIPTIONS_NON_EMPTY
Error sourceDescriptions must have at least one entry  
9020400
ARAZZO_SPEC_FIELD_WORKFLOWS_REQUIRED
Error should always have a 'workflows' list  
9020401
ARAZZO_SPEC_FIELD_WORKFLOWS_TYPE
Error workflows must be an array of Workflow Objects  
9020402
ARAZZO_SPEC_FIELD_WORKFLOWS_NON_EMPTY
Error workflows must have at least one entry  
9020500
ARAZZO_SPEC_FIELD_COMPONENTS_TYPE
Error components must be an object  
9020700
ARAZZO_SPEC_FIELD_$SELF_TYPE
Error $self must be a string 1.1.0
9020701
ARAZZO_SPEC_FIELD_$SELF_FORMAT_URI
Error $self must be in the format of a URI-reference. 1.1.0
9020702
ARAZZO_SPEC_FIELD_$SELF_NO_FRAGMENT
Error $self MUST NOT contain a fragment identifier 1.1.0

Info Object

Rule Severity Message
15000
NOT_ALLOWED_FIELDS
Error Object includes not allowed fields
9010100
ARAZZO_INFO_FIELD_DESCRIPTION_TYPE
Error description must be a string
9010101
ARAZZO_INFO_FIELD_DESCRIPTION_RECOMMENDED
Warning Info 'description' should be present and non-empty string.
9010200
ARAZZO_INFO_FIELD_TITLE_REQUIRED
Error should always have a 'title'
9010201
ARAZZO_INFO_FIELD_TITLE_TYPE
Error title must be a string
9010300
ARAZZO_INFO_FIELD_VERSION_REQUIRED
Error should always have a 'version'
9010301
ARAZZO_INFO_FIELD_VERSION_TYPE
Error version must be a string
9010400
ARAZZO_INFO_FIELD_SUMMARY_TYPE
Error summary must be a string
9010401
ARAZZO_INFO_FIELD_SUMMARY_RECOMMENDED
Hint Info 'summary' is recommended to be present and a non-empty string.
9020600
ARAZZO_SPEC_NO_SCRIPT_TAGS
Error Markdown title must not contain "<script>" tags.
9020600
ARAZZO_SPEC_NO_SCRIPT_TAGS
Error Markdown description must not contain "<script>" tags.
9020600
ARAZZO_SPEC_NO_SCRIPT_TAGS
Error Markdown summary must not contain "<script>" tags.

Source Description Object

Rule Severity Message Only in
15000
NOT_ALLOWED_FIELDS
Error Object includes not allowed fields  
9030100
ARAZZO_SOURCE_DESCRIPTION_FIELD_NAME_REQUIRED
Error should always have a 'name'  
9030101
ARAZZO_SOURCE_DESCRIPTION_FIELD_NAME_TYPE
Error name must be a string  
9030102
ARAZZO_SOURCE_DESCRIPTION_FIELD_NAME_PATTERN
Warning name SHOULD match the pattern [A-Za-z0-9_\-]+  
9030200
ARAZZO_SOURCE_DESCRIPTION_FIELD_URL_REQUIRED
Error should always have a 'url'  
9030201
ARAZZO_SOURCE_DESCRIPTION_FIELD_URL_TYPE
Error url must be a string  
9030300
ARAZZO_SOURCE_DESCRIPTION_FIELD_TYPE_TYPE
Error type must be a string  
9030301
ARAZZO_SOURCE_DESCRIPTION_FIELD_TYPE_EQUALS
Error type must be one of: 'openapi', 'arazzo' 1.0.x
9030301
ARAZZO_SOURCE_DESCRIPTION_FIELD_TYPE_EQUALS
Error type must be one of: 'openapi', 'arazzo', 'asyncapi' 1.1.0

Workflow Object

Rule Severity Message Only in
15000
NOT_ALLOWED_FIELDS
Error Object includes not allowed fields  
9020600
ARAZZO_SPEC_NO_SCRIPT_TAGS
Error Markdown summary must not contain "<script>" tags.  
9020600
ARAZZO_SPEC_NO_SCRIPT_TAGS
Error Markdown description must not contain "<script>" tags.  
9040100
ARAZZO_WORKFLOW_FIELD_WORKFLOW_ID_REQUIRED
Error should always have a 'workflowId'  
9040101
ARAZZO_WORKFLOW_FIELD_WORKFLOW_ID_TYPE
Error workflowId must be a string  
9040102
ARAZZO_WORKFLOW_FIELD_WORKFLOW_ID_PATTERN
Warning workflowId SHOULD match the pattern [A-Za-z0-9_\-]+  
9040103
ARAZZO_WORKFLOW_FIELD_WORKFLOW_ID_UNIQUE
Error Every workflow must have a unique 'workflowId'.  
9040200
ARAZZO_WORKFLOW_FIELD_SUMMARY_TYPE
Error summary must be a string  
9040201
ARAZZO_WORKFLOW_FIELD_DESCRIPTION_TYPE
Error description must be a string  
9040202
ARAZZO_WORKFLOW_FIELD_DESCRIPTION_RECOMMENDED
Warning Workflow 'description' should be present and non-empty string.  
9040203
ARAZZO_WORKFLOW_FIELD_SUMMARY_RECOMMENDED
Hint Workflow 'summary' is recommended to be present and a non-empty string.  
9040300
ARAZZO_WORKFLOW_FIELD_INPUTS_TYPE
Error inputs must be a JSON Schema object  
9040400
ARAZZO_WORKFLOW_FIELD_STEPS_REQUIRED
Error should always have a 'steps' list  
9040401
ARAZZO_WORKFLOW_FIELD_STEPS_TYPE
Error steps must be an array of Step Objects  
9040402
ARAZZO_WORKFLOW_FIELD_STEPS_NON_EMPTY
Error steps must have at least one entry  
9040500
ARAZZO_WORKFLOW_FIELD_DEPENDS_ON_TYPE
Error dependsOn must be an array of strings  
9040501
ARAZZO_WORKFLOW_FIELD_DEPENDS_ON_UNIQUE
Error 'dependsOn' entries must be unique.  
9040502
ARAZZO_WORKFLOW_FIELD_DEPENDS_ON_RESOLVED
Error "dependsOn" entries must reference existing workflow IDs.  
9040503
ARAZZO_WORKFLOW_FIELD_DEPENDS_ON_SOURCE_TYPE
Error dependsOn entry references a sourceDescription that is not of type 'arazzo'  
9040600
ARAZZO_WORKFLOW_FIELD_SUCCESS_ACTIONS_TYPE
Error successActions must be an array of Success Action or Reusable Objects  
9040700
ARAZZO_WORKFLOW_FIELD_FAILURE_ACTIONS_TYPE
Error failureActions must be an array of Failure Action or Reusable Objects  
9040800
ARAZZO_WORKFLOW_FIELD_OUTPUTS_TYPE
Error outputs must be an object  
9040801
ARAZZO_WORKFLOW_FIELD_OUTPUTS_KEYS_PATTERN
Error output keys must match the pattern [a-zA-Z0-9.\-_]+  
9040802
ARAZZO_WORKFLOW_FIELD_OUTPUTS_VALUES_TYPE
Error output values must be strings (Runtime Expressions) 1.0.x
9040802
ARAZZO_WORKFLOW_FIELD_OUTPUTS_VALUES_TYPE
Error output values must be strings (Runtime Expressions) or Selector Objects 1.1.0
9040803
ARAZZO_WORKFLOW_FIELD_OUTPUTS_NAMES_UNIQUE
Error Workflow output names must be unique.  
9040804
ARAZZO_WORKFLOW_FIELD_OUTPUTS_VALUES_RUNTIME_EXPRESSION
Error Workflow output values must be valid Arazzo Runtime Expressions.  
9040900
ARAZZO_WORKFLOW_FIELD_PARAMETERS_TYPE
Error parameters must be an array of Parameter or Reusable Objects  

Step Object

Rule Severity Message Only in
15000
NOT_ALLOWED_FIELDS
Error Object includes not allowed fields  
9020600
ARAZZO_SPEC_NO_SCRIPT_TAGS
Error Markdown description must not contain "<script>" tags.  
9040403
ARAZZO_WORKFLOW_FIELD_STEP_ID_UNIQUE
Error Every step must have a unique 'stepId' within a workflow.  
9050100
ARAZZO_STEP_FIELD_STEP_ID_REQUIRED
Error should always have a 'stepId'  
9050101
ARAZZO_STEP_FIELD_STEP_ID_TYPE
Error stepId must be a string  
9050102
ARAZZO_STEP_FIELD_STEP_ID_PATTERN
Warning stepId SHOULD match the pattern [A-Za-z0-9_\-]+  
9050200
ARAZZO_STEP_FIELD_DESCRIPTION_TYPE
Error description must be a string  
9050201
ARAZZO_STEP_FIELD_DESCRIPTION_RECOMMENDED
Warning Step 'description' should be present and non-empty string.  
9050300
ARAZZO_STEP_FIELD_OPERATION_ID_TYPE
Error operationId must be a string  
9050301
ARAZZO_STEP_FIELD_OPERATION_PATH_TYPE
Error operationPath must be a string  
9050302
ARAZZO_STEP_FIELD_WORKFLOW_ID_TYPE
Error workflowId must be a string  
9050303
ARAZZO_STEP_FIELD_OPERATION_PATH_PREFER_OPERATION_ID
Hint It is recommended to use 'operationId' rather than 'operationPath'.  
9050304
ARAZZO_STEP_FIELD_WORKFLOW_ID_RESOLVED
Error Step "workflowId" must reference an existing workflow.  
9050305
ARAZZO_STEP_FIELD_WORKFLOW_ID_PATTERN
Warning workflowId SHOULD match the pattern [A-Za-z0-9_\-]+  
9050306
ARAZZO_STEP_FIELD_OPERATION_ID_SOURCE_TYPE
Error operationId references a sourceDescription that is not of type 'openapi' 1.0.x
9050306
ARAZZO_STEP_FIELD_OPERATION_ID_SOURCE_TYPE
Error operationId references a sourceDescription that is not of type 'openapi' or 'asyncapi' 1.1.0
9050307
ARAZZO_STEP_FIELD_WORKFLOW_ID_SOURCE_TYPE
Error workflowId references a sourceDescription that is not of type 'arazzo'  
9050400
ARAZZO_STEP_FIELD_REQUEST_BODY_TYPE
Error requestBody must be a Request Body Object  
9050500
ARAZZO_STEP_FIELD_SUCCESS_CRITERIA_TYPE
Error successCriteria must be an array of Criterion Objects  
9050600
ARAZZO_STEP_FIELD_ON_SUCCESS_TYPE
Error onSuccess must be an array of Success Action or Reusable Objects  
9050700
ARAZZO_STEP_FIELD_ON_FAILURE_TYPE
Error onFailure must be an array of Failure Action or Reusable Objects  
9050800
ARAZZO_STEP_FIELD_OUTPUTS_TYPE
Error outputs must be an object  
9050801
ARAZZO_STEP_FIELD_OUTPUTS_KEYS_PATTERN
Error output keys must match the pattern [a-zA-Z0-9.\-_]+  
9050802
ARAZZO_STEP_FIELD_OUTPUTS_VALUES_TYPE
Error output values must be strings (Runtime Expressions) 1.0.x
9050802
ARAZZO_STEP_FIELD_OUTPUTS_VALUES_TYPE
Error output values must be strings (Runtime Expressions) or Selector Objects 1.1.0
9050803
ARAZZO_STEP_FIELD_OUTPUTS_NAMES_UNIQUE
Error Step output names must be unique.  
9050804
ARAZZO_STEP_FIELD_OUTPUTS_VALUES_RUNTIME_EXPRESSION
Error Step output values must be valid Arazzo Runtime Expressions.  
9050900
ARAZZO_STEP_FIELD_PARAMETERS_TYPE
Error parameters must be an array of Parameter or Reusable Objects  
9051000
ARAZZO_STEP_FIELD_OPERATION_ID_MUTUALLY_EXCLUSIVE
Error operationId is mutually exclusive with operationPath, channelPath and workflowId  
9051001
ARAZZO_STEP_FIELD_OPERATION_PATH_MUTUALLY_EXCLUSIVE
Error operationPath is mutually exclusive with operationId, channelPath and workflowId  
9051002
ARAZZO_STEP_FIELD_WORKFLOW_ID_MUTUALLY_EXCLUSIVE
Error workflowId is mutually exclusive with operationId, operationPath and channelPath  
9051100
ARAZZO_STEP_FIELD_CHANNEL_PATH_TYPE
Error channelPath must be a string 1.1.0
9051101
ARAZZO_STEP_FIELD_CHANNEL_PATH_MUTUALLY_EXCLUSIVE
Error channelPath is mutually exclusive with operationId, operationPath and workflowId 1.1.0
9051200
ARAZZO_STEP_FIELD_TIMEOUT_TYPE
Error timeout must be an integer 1.1.0
9051300
ARAZZO_STEP_FIELD_CORRELATION_ID_ONLY_ACTION_RECEIVE
Error correlationId only applies when action is 'receive' 1.1.0
9051301
ARAZZO_STEP_FIELD_CORRELATION_ID_REQUIRES_ACTION
Error correlationId requires action to be present and set to 'receive' 1.1.0
9051400
ARAZZO_STEP_FIELD_ACTION_TYPE
Error action must be a string 1.1.0
9051401
ARAZZO_STEP_FIELD_ACTION_EQUALS
Error action must be one of: 'send', 'receive' 1.1.0
9051500
ARAZZO_STEP_FIELD_DEPENDS_ON_TYPE
Error dependsOn must be an array of strings 1.1.0
9051501
ARAZZO_STEP_FIELD_DEPENDS_ON_UNIQUE
Error 'dependsOn' entries must be unique. 1.1.0
9051502
ARAZZO_STEP_FIELD_DEPENDS_ON_RESOLVED
Error "dependsOn" entries must reference an existing stepId or a valid runtime expression. 1.1.0
9051503
ARAZZO_STEP_FIELD_DEPENDS_ON_SOURCE_TYPE
Error dependsOn entry references a sourceDescription that is not of type 'arazzo' 1.1.0

Parameter Object

Rule Severity Message
15000
NOT_ALLOWED_FIELDS
Error Object includes not allowed fields
9050901
ARAZZO_STEP_FIELD_PARAMETERS_UNIQUE
Error Parameters must be unique by 'name' and 'in' combination.
9060100
ARAZZO_PARAMETER_FIELD_NAME_REQUIRED
Error should always have a 'name'
9060101
ARAZZO_PARAMETER_FIELD_NAME_TYPE
Error name must be a string
9060200
ARAZZO_PARAMETER_FIELD_IN_TYPE
Error in must be a string
9060201
ARAZZO_PARAMETER_FIELD_IN_EQUALS
Error in must be one of: 'path', 'query', 'header', 'cookie'
9060300
ARAZZO_PARAMETER_FIELD_VALUE_REQUIRED
Error should always have a 'value'
9060301
ARAZZO_PARAMETER_FIELD_VALUE_RUNTIME_EXPRESSION
Error Parameter value starting with "$" must be a valid Arazzo Runtime Expression.

Success Action Object

Rule Severity Message Only in
15000
NOT_ALLOWED_FIELDS
Error Object includes not allowed fields  
9050601
ARAZZO_STEP_FIELD_SUCCESS_ACTIONS_NAMES_UNIQUE
Error Every success action must have a unique 'name'.  
9070100
ARAZZO_SUCCESS_ACTION_FIELD_NAME_REQUIRED
Error should always have a 'name'  
9070101
ARAZZO_SUCCESS_ACTION_FIELD_NAME_TYPE
Error name must be a string  
9070200
ARAZZO_SUCCESS_ACTION_FIELD_TYPE_REQUIRED
Error should always have a 'type'  
9070201
ARAZZO_SUCCESS_ACTION_FIELD_TYPE_TYPE
Error type must be a string  
9070202
ARAZZO_SUCCESS_ACTION_FIELD_TYPE_EQUALS
Error type must be one of: 'end', 'goto'  
9070300
ARAZZO_SUCCESS_ACTION_FIELD_WORKFLOW_ID_TYPE
Error workflowId must be a string  
9070301
ARAZZO_SUCCESS_ACTION_FIELD_WORKFLOW_ID_RESOLVED
Error Success action "workflowId" must reference an existing workflow.  
9070302
ARAZZO_SUCCESS_ACTION_FIELD_WORKFLOW_ID_PATTERN
Warning workflowId SHOULD match the pattern [A-Za-z0-9_\-]+  
9070303
ARAZZO_SUCCESS_ACTION_FIELD_WORKFLOW_ID_SOURCE_TYPE
Error workflowId references a sourceDescription that is not of type 'arazzo'  
9070400
ARAZZO_SUCCESS_ACTION_FIELD_STEP_ID_TYPE
Error stepId must be a string  
9070401
ARAZZO_SUCCESS_ACTION_FIELD_STEP_ID_RESOLVED
Error Success action "stepId" must reference an existing step in the same workflow.  
9070402
ARAZZO_SUCCESS_ACTION_FIELD_STEP_ID_PATTERN
Warning stepId SHOULD match the pattern [A-Za-z0-9_\-]+  
9070500
ARAZZO_SUCCESS_ACTION_FIELD_CRITERIA_TYPE
Error criteria must be an array of Criterion Objects  
9070600
ARAZZO_SUCCESS_ACTION_FIELD_WORKFLOW_ID_MUTUALLY_EXCLUSIVE
Error workflowId is mutually exclusive with stepId  
9070601
ARAZZO_SUCCESS_ACTION_FIELD_STEP_ID_MUTUALLY_EXCLUSIVE
Error stepId is mutually exclusive with workflowId  
9070700
ARAZZO_SUCCESS_ACTION_FIELD_PARAMETERS_TYPE
Error parameters must be an array of Parameter or Reusable Objects 1.1.0
9070701
ARAZZO_SUCCESS_ACTION_FIELD_PARAMETERS_ONLY_WORKFLOW_ID
Warning parameters only applies when workflowId is set 1.1.0

Failure Action Object

Rule Severity Message Only in
15000
NOT_ALLOWED_FIELDS
Error Object includes not allowed fields  
9050701
ARAZZO_STEP_FIELD_FAILURE_ACTIONS_NAMES_UNIQUE
Error Every failure action must have a unique 'name'.  
9080100
ARAZZO_FAILURE_ACTION_FIELD_NAME_REQUIRED
Error should always have a 'name'  
9080101
ARAZZO_FAILURE_ACTION_FIELD_NAME_TYPE
Error name must be a string  
9080200
ARAZZO_FAILURE_ACTION_FIELD_TYPE_REQUIRED
Error should always have a 'type'  
9080201
ARAZZO_FAILURE_ACTION_FIELD_TYPE_TYPE
Error type must be a string  
9080202
ARAZZO_FAILURE_ACTION_FIELD_TYPE_EQUALS
Error type must be one of: 'end', 'goto', 'retry'  
9080300
ARAZZO_FAILURE_ACTION_FIELD_WORKFLOW_ID_TYPE
Error workflowId must be a string  
9080301
ARAZZO_FAILURE_ACTION_FIELD_WORKFLOW_ID_RESOLVED
Error Failure action "workflowId" must reference an existing workflow.  
9080302
ARAZZO_FAILURE_ACTION_FIELD_WORKFLOW_ID_PATTERN
Warning workflowId SHOULD match the pattern [A-Za-z0-9_\-]+  
9080303
ARAZZO_FAILURE_ACTION_FIELD_WORKFLOW_ID_SOURCE_TYPE
Error workflowId references a sourceDescription that is not of type 'arazzo'  
9080400
ARAZZO_FAILURE_ACTION_FIELD_STEP_ID_TYPE
Error stepId must be a string  
9080401
ARAZZO_FAILURE_ACTION_FIELD_STEP_ID_RESOLVED
Error Failure action "stepId" must reference an existing step in the same workflow.  
9080402
ARAZZO_FAILURE_ACTION_FIELD_STEP_ID_PATTERN
Warning stepId SHOULD match the pattern [A-Za-z0-9_\-]+  
9080500
ARAZZO_FAILURE_ACTION_FIELD_RETRY_AFTER_TYPE
Error retryAfter must be a number  
9080501
ARAZZO_FAILURE_ACTION_FIELD_RETRY_AFTER_NON_NEGATIVE
Error retryAfter must be a non-negative number  
9080600
ARAZZO_FAILURE_ACTION_FIELD_RETRY_LIMIT_TYPE
Error retryLimit must be a number  
9080601
ARAZZO_FAILURE_ACTION_FIELD_RETRY_LIMIT_NON_NEGATIVE
Error retryLimit must be a non-negative integer  
9080700
ARAZZO_FAILURE_ACTION_FIELD_CRITERIA_TYPE
Error criteria must be an array of Criterion Objects  
9080800
ARAZZO_FAILURE_ACTION_FIELD_WORKFLOW_ID_MUTUALLY_EXCLUSIVE
Error workflowId is mutually exclusive with stepId  
9080801
ARAZZO_FAILURE_ACTION_FIELD_STEP_ID_MUTUALLY_EXCLUSIVE
Error stepId is mutually exclusive with workflowId  
9080900
ARAZZO_FAILURE_ACTION_FIELD_RETRY_AFTER_ONLY_RETRY
Warning retryAfter only applies when type is "retry"  
9080901
ARAZZO_FAILURE_ACTION_FIELD_RETRY_LIMIT_ONLY_RETRY
Warning retryLimit only applies when type is "retry"  
9081000
ARAZZO_FAILURE_ACTION_FIELD_PARAMETERS_TYPE
Error parameters must be an array of Parameter or Reusable Objects 1.1.0
9081001
ARAZZO_FAILURE_ACTION_FIELD_PARAMETERS_ONLY_WORKFLOW_ID
Warning parameters only applies when workflowId is set 1.1.0

Components Object

Rule Severity Message
15000
NOT_ALLOWED_FIELDS
Error Object includes not allowed fields
9090100
ARAZZO_COMPONENTS_FIELD_INPUTS_TYPE
Error inputs must be an object
9090101
ARAZZO_COMPONENTS_FIELD_INPUTS_VALUES_TYPE
Error inputs values must be JSON Schema Objects
9090102
ARAZZO_COMPONENTS_FIELD_INPUTS_KEYS_PATTERN
Error component keys must match the pattern [a-zA-Z0-9.\-_]+
9090200
ARAZZO_COMPONENTS_FIELD_PARAMETERS_TYPE
Error parameters must be an object
9090201
ARAZZO_COMPONENTS_FIELD_PARAMETERS_VALUES_TYPE
Error parameters values must be Parameter Objects
9090202
ARAZZO_COMPONENTS_FIELD_PARAMETERS_KEYS_PATTERN
Error component keys must match the pattern [a-zA-Z0-9.\-_]+
9090300
ARAZZO_COMPONENTS_FIELD_SUCCESS_ACTIONS_TYPE
Error successActions must be an object
9090301
ARAZZO_COMPONENTS_FIELD_SUCCESS_ACTIONS_VALUES_TYPE
Error successActions values must be Success Action Objects
9090302
ARAZZO_COMPONENTS_FIELD_SUCCESS_ACTIONS_KEYS_PATTERN
Error component keys must match the pattern [a-zA-Z0-9.\-_]+
9090400
ARAZZO_COMPONENTS_FIELD_FAILURE_ACTIONS_TYPE
Error failureActions must be an object
9090401
ARAZZO_COMPONENTS_FIELD_FAILURE_ACTIONS_VALUES_TYPE
Error failureActions values must be Failure Action Objects
9090402
ARAZZO_COMPONENTS_FIELD_FAILURE_ACTIONS_KEYS_PATTERN
Error component keys must match the pattern [a-zA-Z0-9.\-_]+

Reusable Object

Rule Severity Message
15000
NOT_ALLOWED_FIELDS
Error Object includes not allowed fields
9140100
ARAZZO_REUSABLE_FIELD_REFERENCE_REQUIRED
Error should always have a 'reference'
9140101
ARAZZO_REUSABLE_FIELD_REFERENCE_TYPE
Error reference must be a string (Runtime Expression)
9140200
ARAZZO_REUSABLE_FIELD_VALUE_TYPE
Error value must be a string

Criterion Object

Rule Severity Message
15000
NOT_ALLOWED_FIELDS
Error Object includes not allowed fields
9100100
ARAZZO_CRITERION_FIELD_CONDITION_REQUIRED
Error should always have a 'condition'
9100101
ARAZZO_CRITERION_FIELD_CONDITION_TYPE
Error condition must be a string
9100102
ARAZZO_CRITERION_FIELD_CONDITION_REGEX_VALID
Error Criterion "condition" must be a valid regular expression when type is "regex".
9100200
ARAZZO_CRITERION_FIELD_CONTEXT_TYPE
Error context must be a string (Runtime Expression)
9100201
ARAZZO_CRITERION_FIELD_CONTEXT_RUNTIME_EXPRESSION
Error Criterion "context" must be a valid Arazzo Runtime Expression.
9100301
ARAZZO_CRITERION_FIELD_TYPE_EQUALS
Warning type must be one of: 'simple', 'regex', 'jsonpath', 'xpath', or an Expression Type Object
9100400
ARAZZO_CRITERION_FIELD_CONTEXT_REQUIRED_WHEN_TYPE
Error context MUST be provided when type is specified

Criterion Expression Type Object

Rule Severity Message Only in
15000
NOT_ALLOWED_FIELDS
Error Object includes not allowed fields  
9110100
ARAZZO_EXPRESSION_TYPE_FIELD_TYPE_REQUIRED
Error should always have a 'type'  
9110101
ARAZZO_EXPRESSION_TYPE_FIELD_TYPE_TYPE
Error type must be a string  
9110102
ARAZZO_EXPRESSION_TYPE_FIELD_TYPE_EQUALS
Error type must be one of: 'jsonpath', 'xpath' 1.0.x
9110102
ARAZZO_EXPRESSION_TYPE_FIELD_TYPE_EQUALS
Error type must be one of: 'jsonpath', 'xpath', 'jsonpointer' 1.1.0
9110200
ARAZZO_EXPRESSION_TYPE_FIELD_VERSION_REQUIRED
Error should always have a 'version' 1.0.x
9110201
ARAZZO_EXPRESSION_TYPE_FIELD_VERSION_TYPE
Error version must be a string  
9110300
ARAZZO_EXPRESSION_TYPE_FIELD_VERSION_EQUALS_JSONPATH
Error when type is 'jsonpath', version must be one of: 'rfc9535', 'draft-goessner-dispatch-jsonpath-00'  
9110301
ARAZZO_EXPRESSION_TYPE_FIELD_VERSION_EQUALS_XPATH
Error when type is 'xpath', version must be one of: 'xpath-10', 'xpath-20', 'xpath-30', 'xpath-31'  
9110302
ARAZZO_EXPRESSION_TYPE_FIELD_VERSION_EQUALS_JSONPOINTER
Error when type is 'jsonpointer', version must be 'rfc6901'  

Request Body Object

Rule Severity Message
15000
NOT_ALLOWED_FIELDS
Error Object includes not allowed fields
9120100
ARAZZO_REQUEST_BODY_FIELD_CONTENT_TYPE_TYPE
Error contentType must be a string
9120101
ARAZZO_REQUEST_BODY_FIELD_CONTENT_TYPE_FORMAT
Warning Request body "contentType" should be a valid MIME type (e.g. "application/json").
9120200
ARAZZO_REQUEST_BODY_FIELD_REPLACEMENTS_TYPE
Error replacements must be an array of Payload Replacement Objects

Payload Replacement Object

Rule Severity Message Only in
15000
NOT_ALLOWED_FIELDS
Error Object includes not allowed fields  
9130100
ARAZZO_PAYLOAD_REPLACEMENT_FIELD_TARGET_REQUIRED
Error should always have a 'target'  
9130101
ARAZZO_PAYLOAD_REPLACEMENT_FIELD_TARGET_TYPE
Error target must be a string (JSON Pointer or XPath Expression)  
9130200
ARAZZO_PAYLOAD_REPLACEMENT_FIELD_VALUE_REQUIRED
Error should always have a 'value'  
9130300
ARAZZO_PAYLOAD_REPLACEMENT_FIELD_TARGET_SELECTOR_TYPE_TYPE
Error targetSelectorType must be a string or an Expression Type Object 1.1.0
9130301
ARAZZO_PAYLOAD_REPLACEMENT_FIELD_TARGET_SELECTOR_TYPE_EQUALS
Error targetSelectorType must be one of: 'jsonpointer', 'jsonpath', 'xpath', or an Expression Type Object 1.1.0

Selector Object

Arazzo 1.1.0 only.

Rule Severity Message Only in
15000
NOT_ALLOWED_FIELDS
Error Object includes not allowed fields 1.1.0
9150101
ARAZZO_SELECTOR_FIELD_CONTEXT_TYPE
Error context must be a string (Runtime Expression) 1.1.0
9150201
ARAZZO_SELECTOR_FIELD_SELECTOR_TYPE
Error selector must be a string 1.1.0
9150301
ARAZZO_SELECTOR_FIELD_TYPE_TYPE
Error type must be a string or an Expression Type Object 1.1.0
9150302
ARAZZO_SELECTOR_FIELD_TYPE_EQUALS
Error type must be one of: 'jsonpointer', 'jsonpath', 'xpath', or an Expression Type Object 1.1.0

Schema Object

JSON Schemas under workflow.inputs and components.inputs.

Rule Severity Message
10001
SCHEMA_TYPE
Error type must be one of allowed values
10002
SCHEMA_MAXLENGTH
Error maxLength must be a non-negative integer
10003
SCHEMA_MAXLENGTH_NONSTRING
Warning maxLength has no effect on non strings
10004
SCHEMA_MINLENGTH
Error minLength must be a non-negative integer
10005
SCHEMA_MINLENGTH_NONSTRING
Warning minLength has no effect on non strings
10009
SCHEMA_ENUM
Error enum' value must be an array with unique values
10010
SCHEMA_MULTIPLEOF
Error multipleOf' value must be a number > 0
10011
SCHEMA_PATTERN
Error pattern' value must be a string
10014
SCHEMA_MAXIMUM
Error 'maximum' value must be a number
10015
SCHEMA_MINUMUM
Error 'minimum' value must be a number
10016
SCHEMA_EXCLUSIVEMAXIMUM
Error 'exclusiveMaximum' value must be a number
10017
SCHEMA_EXCLUSIVEMINUMUM
Error 'exclusiveMinimum' value must be a number
10018
SCHEMA_ITEMS
Error items must be a schema or array of schemas
10019
SCHEMA_ITEMS_NONARRAY
Warning items has no effect on non arrays
10020
SCHEMA_ADDITIONALITEMS
Error additionalItems must be a schema object or a boolean JSON schema
10021
SCHEMA_ADDITIONALITEMS_NONARRAY
Warning additionalItems has no effect on non arrays
10022
SCHEMA_MAXITEMS
Error maxItems must be a non-negative integer
10023
SCHEMA_MAXITEMS_NONARRAY
Warning maxItems has no effect on non arrays
10024
SCHEMA_MINITEMS
Error minItems must be a non-negative integer
10025
SCHEMA_MINITEMS_NONARRAY
Warning minItems has no effect on non arrays
10026
SCHEMA_UNIQUEITEMS
Error uniqueItems must be a boolean
10027
SCHEMA_UNIQUEITEMS_NONARRAY
Warning uniqueItems has no effect on non arrays
10028
SCHEMA_CONTAINS
Error contains must be a schema object or a boolean JSON schema
10029
SCHEMA_CONTAINS_NONARRAY
Warning contains has no effect on non arrays
10030
SCHEMA_MAXPROPERTIES
Error maxProperties must be a non-negative integer
10031
SCHEMA_MAXPROPERTIES_NONOBJECT
Warning maxProperties has no effect on non objects
10032
SCHEMA_MINPROPERTIES
Error minProperties must be a non-negative integer
10033
SCHEMA_MINPROPERTIES_NONOBJECT
Warning minProperties has no effect on non objects
10034
SCHEMA_REQUIRED
Error required must be an array of strings
10035
SCHEMA_REQUIRED_NONOBJECT
Warning required has no effect on non objects
10036
SCHEMA_REQUIRED_WITHOUT_PROPERTIES
Warning required properties should be defined in `properties` when `additionalProperties` is false
10037
SCHEMA_PROPERTIES
Error properties members must be schemas
10038
SCHEMA_PROPERTIES_NONOBJECT
Warning properties has no effect on non objects
10039
SCHEMA_PROPERTIES_OBJECT
Error properties must be an object
10040
SCHEMA_PATTERNPROPERTIES
Error patternProperties members must be schema objects or boolean JSON schemas
10041
SCHEMA_PATTERNPROPERTIES_KEY
Error patternProperties keys must be valid regex
10042
SCHEMA_PATTERNPROPERTIES_NONOBJECT
Warning patternProperties has no effect on non objects
10043
SCHEMA_PATTERNPROPERTIES_OBJECT
Error patternProperties must be an object
10044
SCHEMA_ADDITIONALPROPERTIES
Error additionalProperties must be a Schema or a Boolean
10045
SCHEMA_ADDITIONALPROPERTIES_NONOBJECT
Warning additionalProperties has no effect on non objects
10046
SCHEMA_PROPERTYNAMES
Error propertyNames must be a schema object or a boolean JSON schema
10047
SCHEMA_PROPERTYNAMES_NONOBJECT
Warning propertyNames has no effect on non objects
10048
SCHEMA_IF
Error "if" must be a schema object or a boolean JSON schema
10049
SCHEMA_IF_NONTHEN
Warning "if" has no effect without a "then"
10050
SCHEMA_ELSE
Error "else" must be a schema object or a boolean JSON schema
10051
SCHEMA_ELSE_NONIF
Warning "else" has no effect without a "if"
10052
SCHEMA_THEN
Error "then" must be a schema object or a boolean JSON schema
10053
SCHEMA_THEN_NONIF
Warning "then" has no effect without a "if"
10054
SCHEMA_ALLOF
Error allOf must be a non-empty array of schema objects or boolean JSON schemas
10055
SCHEMA_ONEOF
Error oneOf must be a non-empty array of schema objects or boolean JSON schemas
10056
SCHEMA_ANYOF
Error anyOf must be a non-empty array of schema objects or boolean JSON schemas
10057
SCHEMA_NOT
Error "not" must be a schema object or a boolean JSON schema
10058
SCHEMA_FORMAT
Error 'format' value must be a string
10063
SCHEMA_TITLE
Error title' value must be a string
10064
SCHEMA_DESCRIPTION
Error description' value must be a string
10065
SCHEMA_READONLY
Error readOnly must be a boolean
10066
SCHEMA_WRITEONLY
Error writeOnly must be a boolean
10067
SCHEMA_EXAMPLES
Error examples must be an array
10072
SCHEMA_MISSING_CORE_FIELDS
Hint Schema does not include any Schema Object keywords
10075
SCHEMA_TYPE_ARRAY_NON_ITEMS
Error Schemas with "type: array" require a sibling "items" field
10076
SCHEMA_DEPRECATED
Error deprecated must be a boolean
8030100
JSON_SCHEMA_2020_12_KEYWORD_$ID_FORMAT_URI
Error $id value must be a valid URI-reference
8030200
JSON_SCHEMA_2020_12_KEYWORD_$SCHEMA_FORMAT_URI
Error The value of $schema keyword MUST be a URI [RFC3986] containing a scheme
8030300
JSON_SCHEMA_2020_12_KEYWORD_$REF_FORMAT_URI
Error The value of the "$ref" keyword MUST be a string which is a URI-Reference.
8030400
JSON_SCHEMA_2020_12_KEYWORD_$COMMENT_TYPE
Error $comment value must be a string
9020600
ARAZZO_SPEC_NO_SCRIPT_TAGS
Error Markdown title must not contain "<script>" tags.
9020600
ARAZZO_SPEC_NO_SCRIPT_TAGS
Error Markdown description must not contain "<script>" tags.

Supported versions

Both JSON and YAML are accepted for every version. The format is detected from the content, not the file extension.