',\n```\n\n### openapi-tags-alphabetical\n\nOpenAPI object should have alphabetical `tags`. This will be sorted by the `name` property.\n\n**Recommended:** No\n\n**Bad Example**\n\n```yaml\ntags:\n - name: 'Badger'\n - name: 'Aardvark'\n```\n\n**Good Example**\n\n```yaml\ntags:\n - name: 'Aardvark'\n - name: 'Badger'\n```\n\n### openapi-tags\n\nOpenAPI object should have non-empty `tags` array.\n\nWhy? Well, you _can_ reference tags arbitrarily in operations, and definition is optional...\n\n```yaml\n/invoices/{id}/items:\n get:\n tags:\n - Invoice Items\n```\n\nDefining tags allows you to add more information like a `description`. For more information see [tag-description](#tag-description).\n\n**Recommended:** Yes\n\n### operation-default-response\n\n**Recommended:** No\n\n### operation-description\n\n**Recommended:** Yes\n\n### operation-operationId\n\nThis operation ID is essentially a reference for the operation, which can be used to visually suggest a connection to other operations. This is like some theoretical static HATEOAS-style referencing, but it's also used for the URL in some documentation systems.\n\nMake the value `lower-hyphen-case`, and try and think of a name for the action which does not relate to the HTTP message. Base it off the actual action being performed. `create-polygon`? `search-by-polygon`? `filter-companies`?\n\n**Recommended:** Yes\n\n### operation-operationId-valid-in-url\n\nSeeing as operationId is often used for unique URLs in documentation systems, it's a good idea to avoid non-URL safe characters.\n\n**Recommended:** Yes\n\n**Bad Example**\n\n```yaml\npaths:\n /pets:\n get:\n operationId: get cats\n```\n\n### operation-singular-tag\n\nUse just one tag for an operation, which is helpful for some documentation systems which use tags to avoid duplicate content.\n\n**Recommended:** No\n\n### operation-summary-formatted\n\n\n> ### Removed in v5.0\n>\n> This rule was removed in Spectral v5.0, so if you are relying on it you can find the [old definition here](https://github.com/stoplightio/spectral/blob/v4.2.0/src/rulesets/oas/index.json#L312) and paste it into your [custom ruleset](../getting-started/rulesets.md).\n\nOperation `summary` should start with upper case and end with a dot.\n\n**Recommended:** No\n\n### operation-tags\n\nOperation should have non-empty `tags` array.\n\n**Recommended:** Yes\n\n### operation-tag-defined\n\nOperation tags should be defined in global tags.\n\n**Recommended:** Yes\n\n### path-declarations-must-exist\n\nPath parameter declarations cannot be empty, ex.`/given/{}` is invalid.\n\n**Recommended:** Yes\n\n### path-keys-no-trailing-slash\n\nKeep trailing slashes off of paths, as it can cause some confusion. Some web tooling (like mock servers, real servers, code generators, application frameworks, etc.) will treat `example.com/foo` and `example.com/foo/` as the same thing, but other tooling will not. Avoid any confusion by just documenting them without the slash, and maybe some tooling will let people shove a / on there when they're using it or maybe not, but at least the docs are suggesting how it should be done properly.\n\n**Recommended:** Yes\n\n### path-not-include-query\n\nDon't put query string items in the path, they belong in parameters with `in: query`.\n\n**Recommended:** Yes\n\n### tag-description\n\nTags alone are not very descriptive. Give folks a bit more information to work with.\n\n```yaml\ntags:\n - name: 'Aardvark'\n description: Funny nosed pig-head racoon.\n - name: 'Badger'\n description: Angry short-legged omnivores.\n```\n\nIf your tags are business objects then you can use the term to explain them a bit. An 'Account' could be a user account, company information, bank account, potential sales lead, anything. What is clear to the folks writing the document is probably not as clear to others.\n\n```yaml\ntags:\n - name: Invoice Items\n description: |+\n Giant long explanation about what this business concept is, because other people _might_ not have a clue!\n```\n\n**Recommended:** No\n\n### typed-enum\n\nEnum values should respect the `type` specifier.\n\n**Recommended:** Yes\n\n**Good Example**\n\n```yaml\nTheGoodModel:\n type: object\n properties:\n number_of_connectors:\n type: integer\n description: The number of extension points.\n enum:\n - 1\n - 2\n - 4\n - 8\n```\n\n**Bad Example**\n\n```yaml\nTheBadModel:\n type: object\n properties:\n number_of_connectors:\n type: integer\n description: The number of extension points.\n enum:\n - 1\n - 2\n - 'a string!'\n - 8\n```\n\n## OpenAPI v2.0-only\n\nThese rules will only apply to OpenAPI v2.0 documents.\n\n### oas2-operation-formData-consume-check\n\nOperations with an `in: formData` parameter must include `application/x-www-form-urlencoded` or `multipart/form-data` in their `consumes` property.\n\n**Recommended:** Yes\n\n### oas2-api-host\n\nOpenAPI `host` must be present and non-empty string.\n\n**Recommended:** Yes\n\n### oas2-api-schemes\n\nOpenAPI host `schemes` must be present and non-empty array.\n\n**Recommended:** Yes\n\n### oas2-host-not-example\n\nServer URL should not point at example.com.\n\n**Recommended:** No\n\n### oas2-host-trailing-slash\n\nServer URL should not have a trailing slash.\n\n**Recommended:** Yes\n\n### oas2-operation-security-defined\n\nOperation `security` values must match a scheme defined in the `securityDefinitions` object.\nIgnores empty `security` values for cases where authentication is explicitly not required or optional.\n\n**Recommended:** Yes\n\n### oas2-unused-definition\n\nPotential unused reusable `definition` entry has been detected.\n\n_Warning:_ This rule may identify false positives when linting a specification\nthat acts as a library (a container storing reusable objects, leveraged by other\nspecifications that reference those objects).\n\n**Recommended:** Yes\n\n### oas2-valid-example\n\nExamples must be valid against their defined schema.\n\n**Recommended:** Yes\n\n### oas2-anyOf\n\nOpenAPI v3 keyword `anyOf` detected in OpenAPI v2 document.\n\n**Recommended:** Yes\n\n### oas2-oneOf\n\nOpenAPI v3 keyword `oneOf` detected in OpenAPI v2 document.\n\n**Recommended:** Yes\n\n### oas2-schema\n\nValidate structure of OpenAPI v2 specification.\n\n**Recommended:** Yes\n\n### oas2-parameter-description\n\nParameter objects should have a `description`.\n\n**Recommended:** No\n\n## OpenAPI v3-only\n\nThese rules will only be applied to OpenAPI v3.0 documents.\n\n### oas3-api-servers\n\nOpenAPI `servers` must be present and non-empty array.\n\n**Recommended:** Yes\n\nShare links to any and all servers that people might care about. If this is going to be given to internal people then usually that is localhost (so they know the right port number), staging, and production.\n\n``` yaml\nservers:\n - url: https://example.com/api\n description: Production server\n - url: https://staging.example.com/api\n description: Staging server\n - url: http://localhost:3001\n description: Development server\n```\n\nIf this is going out to the world, maybe have production and a general sandbox people can play with.\n\n### oas3-examples-value-or-externalValue\n\nExamples for `requestBody` or response examples can have an `externalValue` or a `value`, but they cannot have both.\n\n**Recommended:** Yes\n\n**Bad Example**\n\n```yaml\npaths:\n /pet:\n put:\n operationId: \"replace-pet\"\n requestBody:\n content:\n 'application/json':\n examples:\n foo:\n summary: A foo example\n value: {\"foo\": \"bar\"}\n externalValue: 'http://example.org/foo.json'\n # marp! no, can only have one or the other\n```\n\n### oas3-operation-security-defined\n\nOperation `security` values must match a scheme defined in the `components.securitySchemes` object.\n\n**Recommended:** Yes\n\n### oas3-server-not-example.com\n\nServer URL should not point at example.com.\n\n**Recommended:** No\n\n**Bad Example**\n\n``` yaml\nservers:\n - url: https://example.com/api\n description: Production server\n - url: https://staging.example.com/api\n description: Staging server\n - url: http://localhost:3001\n description: Development server\n```\n\nWe have example.com for documentation purposes here, but you should put in actual domains.\n\n### oas3-server-trailing-slash\n\nServer URL should not have a trailing slash.\n\nSome tooling forgets to strip trailing slashes off when it's joining the `servers.url` with `paths`, and you can get awkward URLs like `https://example.com/api//pets`. Best to just strip them off yourself.\n\n**Recommended:** Yes\n\n**Good Example**\n\n``` yaml\nservers:\n - url: https://example.com\n - url: https://example.com/api\n```\n\n**Bad Example**\n\n``` yaml\nservers:\n - url: https://example.com/\n - url: https://example.com/api/\n```\n\n### oas3-unused-components-schema\n\nPotential unused reusable `schema` entry has been detected.\n\n_Warning:_ This rule may identify false positives when linting a specification\nthat acts as a library (a container storing reusable objects, leveraged by other\nspecifications that reference those objects).\n\n**Recommended:** Yes\n\n### oas3-valid-example\n\nExamples must be valid against their defined schema.\n\n**Recommended:** Yes\n\n### oas3-schema\n\nValidate structure of OpenAPI v3 specification.\n\n**Recommended:** Yes\n\n### oas3-parameter-description\n\nParameter objects should have a `description`.\n\n**Recommended:** No\n","type":"article","name":"OpenAPI Rules","uri":"/docs/reference/openapi-rules.md","summary":"Spectral has a built-in \"oas\" ruleset, with OAS being shorthand for the OpenAPI Specification.","externalOrgSlug":"stoplightio","externalSlug":"spectral","baseUri":"/docs/reference/openapi-rules.md","branch":"master","workspaceIntegrationKind":"github","workspaceIntegrationApiUrl":"https://api.github.com","workspaceIntegrationHostUrl":"https://github.com","__typename":"BundledBranchNode"},"__typename":"Query"}},"249475590":{"data":{"sl_search_nodes":[{"id":104,"highlighted_name":"Changelog","highlighted_summary":"All notable changes to this project will be documented in this file.","highlighted_data":"","project_id":4,"project_name":"Spectral","project_description":"API style guides","project_slug":"spectral","project_visibility":"public","project_icon_name":"clipboard-list-check","branch_id":7,"branch_slug":"master","branch_node_id":104,"branch_node_base_uri":"/CHANGELOG.md","branch_node_is_file":true,"branch_node_is_latest_version":true,"branch_node_name":"Changelog","snapshot_id":77305,"snapshot_type":"article","snapshot_spec":"md","snapshot_summary":"All notable changes to this project will be documented in this file.","snapshot_tag_names":[],"snapshot_updated_at":"2020-05-27T11:32:59.164585+00:00","__typename":"search_node_results"},{"id":108,"highlighted_name":"OpenAPI Support","highlighted_summary":"Spectral is a generic linter, but a lot of effort has been put in to making sure OpenAPI is well supported.","highlighted_data":"","project_id":4,"project_name":"Spectral","project_description":"API style guides","project_slug":"spectral","project_visibility":"public","project_icon_name":"clipboard-list-check","branch_id":7,"branch_slug":"master","branch_node_id":108,"branch_node_base_uri":"/docs/getting-started/openapi.md","branch_node_is_file":true,"branch_node_is_latest_version":true,"branch_node_name":"OpenAPI Support","snapshot_id":21442,"snapshot_type":"article","snapshot_spec":"md","snapshot_summary":"Spectral is a generic linter, but a lot of effort has been put in to making sure OpenAPI is well supported.","snapshot_tag_names":[],"snapshot_updated_at":"2020-04-17T07:43:33.947057+00:00","__typename":"search_node_results"},{"id":77337,"highlighted_name":"Spectral in JavaScript","highlighted_summary":"The Spectral CLI is a thin wrapper around a JavaScript (TypeScript) API, which can be used independently to do all the same things outside of the CLI.","highlighted_data":"","project_id":4,"project_name":"Spectral","project_description":"API style guides","project_slug":"spectral","project_visibility":"public","project_icon_name":"clipboard-list-check","branch_id":7,"branch_slug":"master","branch_node_id":77337,"branch_node_base_uri":"/docs/guides/3-javascript.md","branch_node_is_file":true,"branch_node_is_latest_version":true,"branch_node_name":"Spectral in JavaScript","snapshot_id":609,"snapshot_type":"article","snapshot_spec":"md","snapshot_summary":"The Spectral CLI is a thin wrapper around a JavaScript (TypeScript) API, which can be used independently to do all the same things outside of the CLI.","snapshot_tag_names":[],"snapshot_updated_at":"2020-04-10T15:29:12.584021+00:00","__typename":"search_node_results"},{"id":77339,"highlighted_name":"Custom Functions","highlighted_summary":"If the built-in functions are not enough for your custom ruleset, Spectral allows you to write and use your own custom functions.","highlighted_data":"","project_id":4,"project_name":"Spectral","project_description":"API style guides","project_slug":"spectral","project_visibility":"public","project_icon_name":"clipboard-list-check","branch_id":7,"branch_slug":"master","branch_node_id":77339,"branch_node_base_uri":"/docs/guides/5-custom-functions.md","branch_node_is_file":true,"branch_node_is_latest_version":true,"branch_node_name":"Custom Functions","snapshot_id":74045,"snapshot_type":"article","snapshot_spec":"md","snapshot_summary":"If the built-in functions are not enough for your custom ruleset, Spectral allows you to write and use your own custom functions.","snapshot_tag_names":[],"snapshot_updated_at":"2020-05-25T20:53:38.51869+00:00","__typename":"search_node_results"},{"id":77334,"highlighted_name":"AsyncAPI Support","highlighted_summary":"Spectral is a generic linter, but a lot of effort has been put in to making sure AsyncAPI v2 is well supported.","highlighted_data":"","project_id":4,"project_name":"Spectral","project_description":"API style guides","project_slug":"spectral","project_visibility":"public","project_icon_name":"clipboard-list-check","branch_id":7,"branch_slug":"master","branch_node_id":77334,"branch_node_base_uri":"/docs/getting-started/asyncapi.md","branch_node_is_file":true,"branch_node_is_latest_version":true,"branch_node_name":"AsyncAPI Support","snapshot_id":21441,"snapshot_type":"article","snapshot_spec":"md","snapshot_summary":"Spectral is a generic linter, but a lot of effort has been put in to making sure AsyncAPI v2 is well supported.","snapshot_tag_names":[],"snapshot_updated_at":"2020-04-17T07:43:33.947057+00:00","__typename":"search_node_results"},{"id":105,"highlighted_name":"Spectral Features","highlighted_summary":"Spectral logo","highlighted_data":"","project_id":4,"project_name":"Spectral","project_description":"API style guides","project_slug":"spectral","project_visibility":"public","project_icon_name":"clipboard-list-check","branch_id":7,"branch_slug":"master","branch_node_id":105,"branch_node_base_uri":"/README.md","branch_node_is_file":true,"branch_node_is_latest_version":true,"branch_node_name":"Spectral Features","snapshot_id":48435,"snapshot_type":"article","snapshot_spec":"md","snapshot_summary":"Spectral logo","snapshot_tag_names":[],"snapshot_updated_at":"2020-05-07T16:35:54.154878+00:00","__typename":"search_node_results"},{"id":77342,"highlighted_name":"AsyncAPI Rules","highlighted_summary":"Spectral has a built-in \"asyncapi\" ruleset for the AsyncAPI Specification.","highlighted_data":"","project_id":4,"project_name":"Spectral","project_description":"API style guides","project_slug":"spectral","project_visibility":"public","project_icon_name":"clipboard-list-check","branch_id":7,"branch_slug":"master","branch_node_id":77342,"branch_node_base_uri":"/docs/reference/asyncapi-rules.md","branch_node_is_file":true,"branch_node_is_latest_version":true,"branch_node_name":"AsyncAPI Rules","snapshot_id":28377,"snapshot_type":"article","snapshot_spec":"md","snapshot_summary":"Spectral has a built-in \"asyncapi\" ruleset for the AsyncAPI Specification.","snapshot_tag_names":[],"snapshot_updated_at":"2020-04-18T07:21:34.863883+00:00","__typename":"search_node_results"},{"id":77341,"highlighted_name":"Sharing & Distributing Rulesets","highlighted_summary":"A ruleset becomes infinitely more useful when other developers are using it. By itself, it's just a way of enforcing some rules on a single project, but when distributed a ruleset can become a \"style guide\" for enforcing consistency across a whole...","highlighted_data":"","project_id":4,"project_name":"Spectral","project_description":"API style guides","project_slug":"spectral","project_visibility":"public","project_icon_name":"clipboard-list-check","branch_id":7,"branch_slug":"master","branch_node_id":77341,"branch_node_base_uri":"/docs/guides/7-sharing-rulesets.md","branch_node_is_file":true,"branch_node_is_latest_version":true,"branch_node_name":"Sharing & Distributing Rulesets","snapshot_id":26990,"snapshot_type":"article","snapshot_spec":"md","snapshot_summary":"A ruleset becomes infinitely more useful when other developers are using it. By itself, it's just a way of enforcing some rules on a single project, but when distributed a ruleset can become a \"style guide\" for enforcing consistency across a whole...","snapshot_tag_names":[],"snapshot_updated_at":"2020-04-17T22:08:24.581515+00:00","__typename":"search_node_results"},{"id":114,"highlighted_name":"Spectral v2/v3 to v4 Migration Guide","highlighted_summary":"If you haven't written a custom ruleset or never used a config file, then it is unlikely the v4 breaking changes affect you, and you can upgrade your Spectral version right away.","highlighted_data":"","project_id":4,"project_name":"Spectral","project_description":"API style guides","project_slug":"spectral","project_visibility":"public","project_icon_name":"clipboard-list-check","branch_id":7,"branch_slug":"master","branch_node_id":114,"branch_node_base_uri":"/docs/migration-guides/4.0.md","branch_node_is_file":true,"branch_node_is_latest_version":true,"branch_node_name":"Spectral v2/v3 to v4 Migration Guide","snapshot_id":611,"snapshot_type":"article","snapshot_spec":"md","snapshot_summary":"If you haven't written a custom ruleset or never used a config file, then it is unlikely the v4 breaking changes affect you, and you can upgrade your Spectral version right away.","snapshot_tag_names":[],"snapshot_updated_at":"2020-04-10T15:29:12.584021+00:00","__typename":"search_node_results"},{"id":109,"highlighted_name":"Rulesets","highlighted_summary":"Rulesets are collections of rules written in JSON or YAML, which can be used to power powerful linting of other JSON or YAML files. Meta, we know! 😎","highlighted_data":"","project_id":4,"project_name":"Spectral","project_description":"API style guides","project_slug":"spectral","project_visibility":"public","project_icon_name":"clipboard-list-check","branch_id":7,"branch_slug":"master","branch_node_id":109,"branch_node_base_uri":"/docs/getting-started/rulesets.md","branch_node_is_file":true,"branch_node_is_latest_version":true,"branch_node_name":"Rulesets","snapshot_id":30239,"snapshot_type":"article","snapshot_spec":"md","snapshot_summary":"Rulesets are collections of rules written in JSON or YAML, which can be used to power powerful linting of other JSON or YAML files. Meta, we know! 😎","snapshot_tag_names":[],"snapshot_updated_at":"2020-04-20T12:07:19.550045+00:00","__typename":"search_node_results"},{"id":77335,"highlighted_name":"Workflows","highlighted_summary":"When and where should you use Spectral? It depends a lot how you are creating and managing your API description documents, but probably wherever they are being made.","highlighted_data":"","project_id":4,"project_name":"Spectral","project_description":"API style guides","project_slug":"spectral","project_visibility":"public","project_icon_name":"clipboard-list-check","branch_id":7,"branch_slug":"master","branch_node_id":77335,"branch_node_base_uri":"/docs/guides/1-workflows.md","branch_node_is_file":true,"branch_node_is_latest_version":true,"branch_node_name":"Workflows","snapshot_id":26988,"snapshot_type":"article","snapshot_spec":"md","snapshot_summary":"When and where should you use Spectral? It depends a lot how you are creating and managing your API description documents, but probably wherever they are being made.","snapshot_tag_names":[],"snapshot_updated_at":"2020-04-17T22:08:24.581515+00:00","__typename":"search_node_results"},{"id":106,"highlighted_name":"Concepts","highlighted_summary":"The power of integrating linting into the design-first workflow, or any workflow which involves API descriptions, is often overlooked.","highlighted_data":"","project_id":4,"project_name":"Spectral","project_description":"API style guides","project_slug":"spectral","project_visibility":"public","project_icon_name":"clipboard-list-check","branch_id":7,"branch_slug":"master","branch_node_id":106,"branch_node_base_uri":"/docs/getting-started/concepts.md","branch_node_is_file":true,"branch_node_is_latest_version":true,"branch_node_name":"Concepts","snapshot_id":30237,"snapshot_type":"article","snapshot_spec":"md","snapshot_summary":"The power of integrating linting into the design-first workflow, or any workflow which involves API descriptions, is often overlooked.","snapshot_tag_names":[],"snapshot_updated_at":"2020-04-20T12:07:19.550045+00:00","__typename":"search_node_results"},{"id":77340,"highlighted_name":"Exceptions","highlighted_summary":"From time to time, you want to ignore some specific results without turning off\nthe rule entirely. This may happen, for instance, when working with legacy APIs which are no where near the standards of your modern APIs, but you cannot fix everythin...","highlighted_data":"","project_id":4,"project_name":"Spectral","project_description":"API style guides","project_slug":"spectral","project_visibility":"public","project_icon_name":"clipboard-list-check","branch_id":7,"branch_slug":"master","branch_node_id":77340,"branch_node_base_uri":"/docs/guides/6-exceptions.md","branch_node_is_file":true,"branch_node_is_latest_version":true,"branch_node_name":"Exceptions","snapshot_id":57462,"snapshot_type":"article","snapshot_spec":"md","snapshot_summary":"From time to time, you want to ignore some specific results without turning off\nthe rule entirely. This may happen, for instance, when working with legacy APIs which are no where near the standards of your modern APIs, but you cannot fix everythin...","snapshot_tag_names":[],"snapshot_updated_at":"2020-05-17T14:17:51.954062+00:00","__typename":"search_node_results"},{"id":77338,"highlighted_name":"Custom Rulesets","highlighted_summary":"Want to go beyond tweaking a ruleset, and learn how to make your own?","highlighted_data":"","project_id":4,"project_name":"Spectral","project_description":"API style guides","project_slug":"spectral","project_visibility":"public","project_icon_name":"clipboard-list-check","branch_id":7,"branch_slug":"master","branch_node_id":77338,"branch_node_base_uri":"/docs/guides/4-custom-rulesets.md","branch_node_is_file":true,"branch_node_is_latest_version":true,"branch_node_name":"Custom Rulesets","snapshot_id":30584,"snapshot_type":"article","snapshot_spec":"md","snapshot_summary":"Want to go beyond tweaking a ruleset, and learn how to make your own?","snapshot_tag_names":[],"snapshot_updated_at":"2020-04-20T15:32:09.76735+00:00","__typename":"search_node_results"},{"id":116,"highlighted_name":"Core Functions","highlighted_summary":"Rules use \"functions\" and those can be custom defined. To save everyone the effort of writing functions for common tasks, Spectral comes with a few bundled out of the box.","highlighted_data":"","project_id":4,"project_name":"Spectral","project_description":"API style guides","project_slug":"spectral","project_visibility":"public","project_icon_name":"clipboard-list-check","branch_id":7,"branch_slug":"master","branch_node_id":116,"branch_node_base_uri":"/docs/reference/functions.md","branch_node_is_file":true,"branch_node_is_latest_version":true,"branch_node_name":"Core Functions","snapshot_id":49591,"snapshot_type":"article","snapshot_spec":"md","snapshot_summary":"Rules use \"functions\" and those can be custom defined. To save everyone the effort of writing functions for common tasks, Spectral comes with a few bundled out of the box.","snapshot_tag_names":[],"snapshot_updated_at":"2020-05-07T21:22:37.648602+00:00","__typename":"search_node_results"},{"id":115,"highlighted_name":"Spectral v4 to v5 Migration Guide","highlighted_summary":"Our docs have been updated, so you can always refer to them. To make the transition less painful,\nthis migration guide covers the most notable changes.","highlighted_data":"","project_id":4,"project_name":"Spectral","project_description":"API style guides","project_slug":"spectral","project_visibility":"public","project_icon_name":"clipboard-list-check","branch_id":7,"branch_slug":"master","branch_node_id":115,"branch_node_base_uri":"/docs/migration-guides/5.0.md","branch_node_is_file":true,"branch_node_is_latest_version":true,"branch_node_name":"Spectral v4 to v5 Migration Guide","snapshot_id":612,"snapshot_type":"article","snapshot_spec":"md","snapshot_summary":"Our docs have been updated, so you can always refer to them. To make the transition less painful,\nthis migration guide covers the most notable changes.","snapshot_tag_names":[],"snapshot_updated_at":"2020-04-10T15:29:12.584021+00:00","__typename":"search_node_results"},{"id":77336,"highlighted_name":"Spectral CLI","highlighted_summary":"Once installed, Spectral can be run via the command-line:","highlighted_data":"","project_id":4,"project_name":"Spectral","project_description":"API style guides","project_slug":"spectral","project_visibility":"public","project_icon_name":"clipboard-list-check","branch_id":7,"branch_slug":"master","branch_node_id":77336,"branch_node_base_uri":"/docs/guides/2-cli.md","branch_node_is_file":true,"branch_node_is_latest_version":true,"branch_node_name":"Spectral CLI","snapshot_id":30240,"snapshot_type":"article","snapshot_spec":"md","snapshot_summary":"Once installed, Spectral can be run via the command-line:","snapshot_tag_names":[],"snapshot_updated_at":"2020-04-20T12:07:19.550045+00:00","__typename":"search_node_results"},{"id":107,"highlighted_name":"Installation","highlighted_summary":"For many, the easiest way to install Spectral is as a node module.","highlighted_data":"","project_id":4,"project_name":"Spectral","project_description":"API style guides","project_slug":"spectral","project_visibility":"public","project_icon_name":"clipboard-list-check","branch_id":7,"branch_slug":"master","branch_node_id":107,"branch_node_base_uri":"/docs/getting-started/installation.md","branch_node_is_file":true,"branch_node_is_latest_version":true,"branch_node_name":"Installation","snapshot_id":604,"snapshot_type":"article","snapshot_spec":"md","snapshot_summary":"For many, the easiest way to install Spectral is as a node module.","snapshot_tag_names":[],"snapshot_updated_at":"2020-04-10T15:29:12.584021+00:00","__typename":"search_node_results"},{"id":117,"highlighted_name":"OpenAPI Rules","highlighted_summary":"Spectral has a built-in \"oas\" ruleset, with OAS being shorthand for the OpenAPI Specification.","highlighted_data":"","project_id":4,"project_name":"Spectral","project_description":"API style guides","project_slug":"spectral","project_visibility":"public","project_icon_name":"clipboard-list-check","branch_id":7,"branch_slug":"master","branch_node_id":117,"branch_node_base_uri":"/docs/reference/openapi-rules.md","branch_node_is_file":true,"branch_node_is_latest_version":true,"branch_node_name":"OpenAPI Rules","snapshot_id":33158,"snapshot_type":"article","snapshot_spec":"md","snapshot_summary":"Spectral has a built-in \"oas\" ruleset, with OAS being shorthand for the OpenAPI Specification.","snapshot_tag_names":[],"snapshot_updated_at":"2020-04-23T18:27:54.628974+00:00","__typename":"search_node_results"}],"__typename":"Query"}},"1449571043":{"data":{"workspaces":[{"id":4,"name":"Stoplight","description":null,"slug":"meta","updatedAt":"2020-06-05T14:23:20.602535+00:00","snapshotCount":4486,"logoUrl":"","domain":null,"homeContent":"# 👋 Documentation\n\nStoplight is a collaborative platform equipping your team with tooling across the API lifecycle that helps them build quality APIs efficiently. With stoplight your team can:\n\n- `Govern`: Promote reuse, consistency, and quality across your company.\n\n- `Design`: Help architects design beautiful APIs quickly.\n\n- `Develop`: Develop APIs efficiently by helping teams build and test in parallel using mocking.\n\n- `Document`: Provide an amazing developer experience for internal and external developers.\n\n- `Collaborate`: Collaborate via the Git workflows teams already know and love.\n\n- `Integrate`: Get onboarded quickly with leading standards like *OpenAPI*, *JSON Schema*, and *Markdown*. \n\nHere's a [quick overview](docs/platform-quickstart). \n\n\n![get-started-icon](https://img.icons8.com/cotton/128/000000/launch-rocket.png)\n### Get Started\n\n[Create a Workspace](docs/platform-docs/docs/1.-workspaces/a.creating-a-workspace.md)\n\nStart discovering the Stoplight magic by bringing your teams together in a workspace.\n \n[Add Projects](docs/platform-docs/docs/1.-workspaces/b.adding-projects.md)\n \nAdd projects containing OpenAPI descriptions, JSON schemas and documentation into your workspace. \n \n[Invite Team Members](docs/platform-docs/docs/1.-workspaces/d.inviting-your-team.md)\n\nBring stakeholders and partners on board with flexibile permissions to start collaborating on your projects.\n \n[Learn more about our Tools](/#explore-our-tools)\n \nLearn about our tools like Studio, Prism and Spectral.\n \n### Discover Use Cases\n\n![governance-icon](https://img.icons8.com/cotton/64/000000/courthouse.png)\n\n#### Governance\nPromote reuse, consistency, and quality across your company.\n\n[Learn more](docs/platform-docs/docs/2.-governance/a.overview.md)\n\n\n![design-icon](https://img.icons8.com/cotton/64/000000/color-palette.png)\n\n#### Design \nHelp architects design beautiful APIs quickly.\n\n[Learn more](docs/platform-docs/docs/3.-design/a.overview.md)\n\n\n![documentation-icon](https://img.icons8.com/cotton/64/000000/spaceship-launch-documentation.png)\n\n#### Developer Experience\nProvide an amazing developer experience for internal and external developers.\n\n[Learn more](docs/platform-docs/docs/4.-developer-experience/a.overview.md)\n\n---\n\n![tools-icon](https://img.icons8.com/cotton/128/000000/search.png)\n### Explore our Tools\n\n#### Platform\n \nCollaborative platform equipping your team with tooling across the API lifecycle that helps them build quality APIs efficiently.\n\n[Go to docs](docs/platform-docs/docs/a.getting-started.md)\n\n#### Prism\n \nPrism is an open-source HTTP mock server that can mimic your API’s behavior as if you already built it. Mock HTTP servers are generated from your OpenAPI v2/v3 (formerly known as Swagger) documents.\n\n[Go to docs](docs/prism)\n\n\n#### Studio\n\nA Powerful OpenAPI and JSON Schema Visual Editor to design and collaborate on your API designs. \n\n[Go to docs](docs/studio)\n\n#### Spectral\n\nSpectral is an Open Source JSON/YAML Linterto improve the quality of your API descriptions, Kubernetes config, GitHub Actions, or any other JSON/YAML data.\n\n[Learn more](docs/spectral)\n\n---\n\n![support-icon](https://img.icons8.com/cotton/128/000000/technical-support.png) \n\n#### We're here to Help\n\nGet in touch and let us know how we can help.\n\n[Go to Community](https://community.stoplight.io)\n\nContact Sales at sales@stoplight.io\n\n> If you're a member of this workspace, please login [here](../auth).\n\nBuilt with ❤️ by [Stoplight](https://www.stoplight.io). Public icons by [Icons S8](https://icons8.com)","hidePoweredBy":false,"integrations":[{"id":12,"name":null,"enabled":true,"config":{},"allowUserLogin":true,"allowUserRegister":true,"integration":{"id":1,"kind":"builtin","shortcode":"sl","name":"Email","config":{},"__typename":"integrations"},"__typename":"workspace_integrations"},{"id":14,"name":null,"enabled":true,"config":{},"allowUserLogin":true,"allowUserRegister":true,"integration":{"id":2,"kind":"github","shortcode":"gh","name":"GitHub","config":{"apiUrl":"https://api.github.com","hostUrl":"https://github.com","clientId":"14b4eb468fc1419a5290","redirectUrl":"https://stoplight.io:443/oauth/callback"},"__typename":"integrations"},"__typename":"workspace_integrations"}],"myPermissions":[],"billingAccount":{"id":131,"status":"active","stripeCustomerId":null,"includedMembers":null,"billingProduct":{"id":4,"name":"enterprise","description":"Enterprise","priority":30,"flatFeePlanId":null,"userFeePlanId":null,"__typename":"billing_products"},"__typename":"billing_accounts"},"features":[{"id":3045,"maxQuantity":null,"feature":{"id":1,"name":"changelogs","type":"limit","__typename":"features"},"__typename":"workspace_features"},{"id":3046,"maxQuantity":null,"feature":{"id":2,"name":"custom_domain","type":"toggle","__typename":"features"},"__typename":"workspace_features"},{"id":3054,"maxQuantity":null,"feature":{"id":3,"name":"members","type":"limit","__typename":"features"},"__typename":"workspace_features"},{"id":3052,"maxQuantity":null,"feature":{"id":4,"name":"hosted_mocking","type":"limit","__typename":"features"},"__typename":"workspace_features"},{"id":3056,"maxQuantity":null,"feature":{"id":5,"name":"projects","type":"limit","__typename":"features"},"__typename":"workspace_features"},{"id":3048,"maxQuantity":null,"feature":{"id":6,"name":"custom_theme","type":"toggle","__typename":"features"},"__typename":"workspace_features"},{"id":3055,"maxQuantity":null,"feature":{"id":8,"name":"multi_branch","type":"toggle","__typename":"features"},"__typename":"workspace_features"},{"id":3059,"maxQuantity":null,"feature":{"id":9,"name":"whitelisted_domains","type":"toggle","__typename":"features"},"__typename":"workspace_features"},{"id":3047,"maxQuantity":null,"feature":{"id":10,"name":"custom_git_integration","type":"toggle","__typename":"features"},"__typename":"workspace_features"},{"id":3049,"maxQuantity":null,"feature":{"id":11,"name":"dependency_graph","type":"toggle","__typename":"features"},"__typename":"workspace_features"},{"id":3050,"maxQuantity":null,"feature":{"id":12,"name":"design_library","type":"toggle","__typename":"features"},"__typename":"workspace_features"},{"id":3053,"maxQuantity":null,"feature":{"id":13,"name":"guests","type":"limit","__typename":"features"},"__typename":"workspace_features"},{"id":3057,"maxQuantity":null,"feature":{"id":14,"name":"saml_ldap_integration","type":"toggle","__typename":"features"},"__typename":"workspace_features"},{"id":3058,"maxQuantity":null,"feature":{"id":15,"name":"whitelabel","type":"toggle","__typename":"features"},"__typename":"workspace_features"},{"id":3051,"maxQuantity":null,"feature":{"id":16,"name":"design_library_masking","type":"toggle","__typename":"features"},"__typename":"workspace_features"}],"usage":{"projectCount":53,"memberCount":34,"guestCount":0,"userCount":34,"billingIncludedMemberCount":34,"billingAdditionalMemberCount":0,"__typename":"workspace_usage"},"theme":null,"__typename":"workspaces"}],"__typename":"Query"}},"1740024734":{"data":{"projects":[{"id":4,"branches":[{"id":294,"slug":"feat/async-fns","lastAnalyzedAt":"2020-04-16T09:29:45.236721+00:00","isDefault":false,"nodeCount":14,"articleCount":14,"httpOperationCount":0,"httpServiceCount":0,"modelCount":0,"__typename":"branches"},{"id":293,"slug":"ntk/asyncapi","lastAnalyzedAt":"2020-04-18T15:11:04.423965+00:00","isDefault":false,"nodeCount":16,"articleCount":16,"httpOperationCount":0,"httpServiceCount":0,"modelCount":0,"__typename":"branches"},{"id":771,"slug":"chore/enrich-schema-fn","lastAnalyzedAt":"2020-04-17T21:33:53.409256+00:00","isDefault":false,"nodeCount":14,"articleCount":14,"httpOperationCount":0,"httpServiceCount":0,"modelCount":0,"__typename":"branches"},{"id":7,"slug":"master","lastAnalyzedAt":"2020-06-26T12:40:55.657811+00:00","isDefault":true,"nodeCount":19,"articleCount":19,"httpOperationCount":0,"httpServiceCount":0,"modelCount":0,"__typename":"branches"},{"id":874,"slug":"fix/lock-json-and-yaml","lastAnalyzedAt":"2020-04-20T10:38:45.771633+00:00","isDefault":false,"nodeCount":16,"articleCount":16,"httpOperationCount":0,"httpServiceCount":0,"modelCount":0,"__typename":"branches"},{"id":1016,"slug":"refactor/introduce-rule","lastAnalyzedAt":"2020-05-01T22:02:24.755872+00:00","isDefault":false,"nodeCount":19,"articleCount":19,"httpOperationCount":0,"httpServiceCount":0,"modelCount":0,"__typename":"branches"},{"id":737,"slug":"docs/split-rulesets","lastAnalyzedAt":"2020-04-20T19:13:29.779791+00:00","isDefault":false,"nodeCount":19,"articleCount":19,"httpOperationCount":0,"httpServiceCount":0,"modelCount":0,"__typename":"branches"},{"id":893,"slug":"fix/locked-deps","lastAnalyzedAt":"2020-04-20T20:48:35.137614+00:00","isDefault":false,"nodeCount":19,"articleCount":19,"httpOperationCount":0,"httpServiceCount":0,"modelCount":0,"__typename":"branches"},{"id":1060,"slug":"chore/drop-rule-function","lastAnalyzedAt":"2020-04-21T12:16:36.983454+00:00","isDefault":false,"nodeCount":19,"articleCount":19,"httpOperationCount":0,"httpServiceCount":0,"modelCount":0,"__typename":"branches"},{"id":1560,"slug":"nulltoken-patch-1","lastAnalyzedAt":"2020-04-25T15:00:56.022964+00:00","isDefault":false,"nodeCount":19,"articleCount":19,"httpOperationCount":0,"httpServiceCount":0,"modelCount":0,"__typename":"branches"},{"id":1923,"slug":"docs/no-ref-siblings","lastAnalyzedAt":"2020-04-29T11:20:21.680496+00:00","isDefault":false,"nodeCount":19,"articleCount":19,"httpOperationCount":0,"httpServiceCount":0,"modelCount":0,"__typename":"branches"},{"id":2195,"slug":"fix/path-param","lastAnalyzedAt":"2020-05-05T15:34:58.218894+00:00","isDefault":false,"nodeCount":19,"articleCount":19,"httpOperationCount":0,"httpServiceCount":0,"modelCount":0,"__typename":"branches"},{"id":2519,"slug":"fix/ruleset-function-validation","lastAnalyzedAt":"2020-05-07T21:22:50.939594+00:00","isDefault":false,"nodeCount":19,"articleCount":19,"httpOperationCount":0,"httpServiceCount":0,"modelCount":0,"__typename":"branches"},{"id":2866,"slug":"docs/typo","lastAnalyzedAt":"2020-05-07T16:36:58.149236+00:00","isDefault":false,"nodeCount":19,"articleCount":19,"httpOperationCount":0,"httpServiceCount":0,"modelCount":0,"__typename":"branches"},{"id":2986,"slug":"perf/core-functions","lastAnalyzedAt":"2020-05-27T11:40:21.079191+00:00","isDefault":false,"nodeCount":19,"articleCount":19,"httpOperationCount":0,"httpServiceCount":0,"modelCount":0,"__typename":"branches"},{"id":3445,"slug":"chore/prettier","lastAnalyzedAt":"2020-05-19T07:47:13.784883+00:00","isDefault":false,"nodeCount":19,"articleCount":19,"httpOperationCount":0,"httpServiceCount":0,"modelCount":0,"__typename":"branches"},{"id":3453,"slug":"chore/eslint-setup","lastAnalyzedAt":"2020-05-26T12:45:02.294642+00:00","isDefault":false,"nodeCount":19,"articleCount":19,"httpOperationCount":0,"httpServiceCount":0,"modelCount":0,"__typename":"branches"},{"id":4078,"slug":"chore/known-formats","lastAnalyzedAt":"2020-05-15T02:37:29.596461+00:00","isDefault":false,"nodeCount":19,"articleCount":19,"httpOperationCount":0,"httpServiceCount":0,"modelCount":0,"__typename":"branches"},{"id":4556,"slug":"chore/ci","lastAnalyzedAt":"2020-05-19T12:46:22.514641+00:00","isDefault":false,"nodeCount":19,"articleCount":19,"httpOperationCount":0,"httpServiceCount":0,"modelCount":0,"__typename":"branches"},{"id":2989,"slug":"fix/ignore-ref-errors-schema","lastAnalyzedAt":"2020-05-19T12:55:38.026078+00:00","isDefault":false,"nodeCount":19,"articleCount":19,"httpOperationCount":0,"httpServiceCount":0,"modelCount":0,"__typename":"branches"},{"id":4375,"slug":"feat/lifecycle","lastAnalyzedAt":"2020-05-26T02:23:40.85504+00:00","isDefault":false,"nodeCount":19,"articleCount":19,"httpOperationCount":0,"httpServiceCount":0,"modelCount":0,"__typename":"branches"},{"id":4845,"slug":"fix/handle-fn-exceptions","lastAnalyzedAt":"2020-05-20T12:22:34.200634+00:00","isDefault":false,"nodeCount":19,"articleCount":19,"httpOperationCount":0,"httpServiceCount":0,"modelCount":0,"__typename":"branches"},{"id":4852,"slug":"docs/changelog","lastAnalyzedAt":"2020-05-27T11:33:07.559939+00:00","isDefault":false,"nodeCount":19,"articleCount":19,"httpOperationCount":0,"httpServiceCount":0,"modelCount":0,"__typename":"branches"},{"id":4823,"slug":"build/windows-circleci","lastAnalyzedAt":"2020-05-28T21:56:17.766204+00:00","isDefault":false,"nodeCount":19,"articleCount":19,"httpOperationCount":0,"httpServiceCount":0,"modelCount":0,"__typename":"branches"},{"id":5692,"slug":"chore/test-harness-command","lastAnalyzedAt":"2020-05-27T11:25:44.718242+00:00","isDefault":false,"nodeCount":19,"articleCount":19,"httpOperationCount":0,"httpServiceCount":0,"modelCount":0,"__typename":"branches"},{"id":769,"slug":"perf/json-paths-on-rails","lastAnalyzedAt":"2020-05-29T00:41:27.173741+00:00","isDefault":false,"nodeCount":19,"articleCount":19,"httpOperationCount":0,"httpServiceCount":0,"modelCount":0,"__typename":"branches"},{"id":6292,"slug":"fix/pass-document-uri","lastAnalyzedAt":"2020-05-28T14:02:28.546921+00:00","isDefault":false,"nodeCount":19,"articleCount":19,"httpOperationCount":0,"httpServiceCount":0,"modelCount":0,"__typename":"branches"},{"id":6444,"slug":"fix/alternative-way","lastAnalyzedAt":"2020-05-28T13:34:15.869187+00:00","isDefault":false,"nodeCount":19,"articleCount":19,"httpOperationCount":0,"httpServiceCount":0,"modelCount":0,"__typename":"branches"},{"id":6582,"slug":"perf/ruleset-validation","lastAnalyzedAt":"2020-05-29T14:11:29.52526+00:00","isDefault":false,"nodeCount":19,"articleCount":19,"httpOperationCount":0,"httpServiceCount":0,"modelCount":0,"__typename":"branches"},{"id":6938,"slug":"chore/assets-generation","lastAnalyzedAt":"2020-05-31T20:12:25.652484+00:00","isDefault":false,"nodeCount":19,"articleCount":19,"httpOperationCount":0,"httpServiceCount":0,"modelCount":0,"__typename":"branches"},{"id":7001,"slug":"ntk/inline-version","lastAnalyzedAt":"2020-06-01T07:46:04.746427+00:00","isDefault":false,"nodeCount":19,"articleCount":19,"httpOperationCount":0,"httpServiceCount":0,"modelCount":0,"__typename":"branches"},{"id":7157,"slug":"chore/eslint-manual-fixes","lastAnalyzedAt":"2020-06-17T22:12:00.109199+00:00","isDefault":false,"nodeCount":19,"articleCount":19,"httpOperationCount":0,"httpServiceCount":0,"modelCount":0,"__typename":"branches"},{"id":7076,"slug":"chore/dependabot-schedule","lastAnalyzedAt":"2020-06-01T11:56:31.588305+00:00","isDefault":false,"nodeCount":19,"articleCount":19,"httpOperationCount":0,"httpServiceCount":0,"modelCount":0,"__typename":"branches"},{"id":7080,"slug":"chore/lint-more-files","lastAnalyzedAt":"2020-06-01T12:04:47.81838+00:00","isDefault":false,"nodeCount":19,"articleCount":19,"httpOperationCount":0,"httpServiceCount":0,"modelCount":0,"__typename":"branches"},{"id":7393,"slug":"fix/deps-bump-ref-resolver","lastAnalyzedAt":"2020-06-03T08:29:31.813461+00:00","isDefault":false,"nodeCount":19,"articleCount":19,"httpOperationCount":0,"httpServiceCount":0,"modelCount":0,"__typename":"branches"},{"id":8669,"slug":"fix/primitive-value-resolving","lastAnalyzedAt":"2020-06-08T14:09:26.552919+00:00","isDefault":false,"nodeCount":19,"articleCount":19,"httpOperationCount":0,"httpServiceCount":0,"modelCount":0,"__typename":"branches"},{"id":19157,"slug":"dependabot/npm_and_yarn/types/lodash-4.14.157","lastAnalyzedAt":"2020-07-01T06:22:53.431352+00:00","isDefault":false,"nodeCount":19,"articleCount":19,"httpOperationCount":0,"httpServiceCount":0,"modelCount":0,"__typename":"branches"},{"id":13739,"slug":"feat/improve-oas-rulesets","lastAnalyzedAt":"2020-06-21T19:11:29.743494+00:00","isDefault":false,"nodeCount":113,"articleCount":12,"httpOperationCount":40,"httpServiceCount":23,"modelCount":38,"__typename":"branches"},{"id":35,"slug":"develop","lastAnalyzedAt":"2020-07-09T20:01:58.140517+00:00","isDefault":false,"nodeCount":19,"articleCount":19,"httpOperationCount":0,"httpServiceCount":0,"modelCount":0,"__typename":"branches"},{"id":14414,"slug":"chore/dependabot","lastAnalyzedAt":"2020-06-23T15:11:01.920165+00:00","isDefault":false,"nodeCount":19,"articleCount":19,"httpOperationCount":0,"httpServiceCount":0,"modelCount":0,"__typename":"branches"},{"id":29402,"slug":"dependabot/npm_and_yarn/types/jest-26.0.4","lastAnalyzedAt":"2020-07-09T20:06:19.361243+00:00","isDefault":false,"nodeCount":19,"articleCount":19,"httpOperationCount":0,"httpServiceCount":0,"modelCount":0,"__typename":"branches"},{"id":29400,"slug":"dependabot/npm_and_yarn/nock-13.0.2","lastAnalyzedAt":"2020-07-09T20:06:13.403367+00:00","isDefault":false,"nodeCount":19,"articleCount":19,"httpOperationCount":0,"httpServiceCount":0,"modelCount":0,"__typename":"branches"},{"id":29419,"slug":"chore/bump-stoplight-deps","lastAnalyzedAt":"2020-07-10T06:50:08.815161+00:00","isDefault":false,"nodeCount":19,"articleCount":19,"httpOperationCount":0,"httpServiceCount":0,"modelCount":0,"__typename":"branches"},{"id":28706,"slug":"perf/ruleset-loading","lastAnalyzedAt":"2020-07-09T14:17:17.641714+00:00","isDefault":false,"nodeCount":19,"articleCount":19,"httpOperationCount":0,"httpServiceCount":0,"modelCount":0,"__typename":"branches"},{"id":14012,"slug":"feat/documentation-url-ruleset","lastAnalyzedAt":"2020-07-09T13:59:57.345749+00:00","isDefault":false,"nodeCount":19,"articleCount":19,"httpOperationCount":0,"httpServiceCount":0,"modelCount":0,"__typename":"branches"}],"userPermissions":[],"resolvedWorkspaceIntegration":{"id":14,"kind":"github","name":"GitHub","__typename":"resolved_workspace_integrations"},"name":"Spectral","description":"API style guides","visibility":"public","createdAt":"2020-04-08T15:49:12.567227+00:00","remoteUrlHttp":"https://github.com/stoplightio/spectral.git","remoteUrlSsh":"git@github.com:stoplightio/spectral.git","slug":"spectral","iconName":"clipboard-list-check","iconColor":"#ff7200","isDesignLibrary":false,"externalId":"144890632","externalOrgSlug":"stoplightio","externalSlug":"spectral","workspaceIntegrationId":14,"__typename":"projects"}],"__typename":"Query"}}};