Skip to content

Instantly share code, notes, and snippets.

@acunniffe
Last active December 1, 2021 17:03
Show Gist options
  • Save acunniffe/9a024cacf2227d61dea1a122d4fff321 to your computer and use it in GitHub Desktop.
Save acunniffe/9a024cacf2227d61dea1a122d4fff321 to your computer and use it in GitHub Desktop.
Using "@useoptic/openapi-utilities" to produce changelogs

At Optic we work with a lot of different kinds of diffs. We call a diff between traffic and a spec, a "diff" and a diff between two versions of an OpenAPI document a "changelog"

Optic CI rules take advantage of this pipeline, which, also can support producing changelogs between any two OpenAPI files

  1. reads your disk / git repo to get the full spec, with all refs resolved
  2. compute facts about the API specification that are true, independent of formatting, ordering, etc. Notice how if you change the order of Operations in optic-ci there's no changelog, even though there's a git diff. This is essential to making a real changelog, that works across a variety of use cases
  3. facts are then compared to produce changes
  4. Optic CI Rules look for changes they care about and execute to give you results

If you stop at step 3, you have a changelog between the two files.

Using the Open Source Code to do this:

import {
  factsToChangelog,
  IChange,
  OpenApiFact,
  OpenAPITraverser,
  OpenAPIV3,
} from "@useoptic/openapi-utilities";

export async function changeLogBetween(
  from: OpenAPIV3.Document,
  to: OpenAPIV3.Document,
): Promise<IChange<OpenApiFact>[]> {
  const currentTraverser = new OpenAPITraverser();
  const nextTraverser = new OpenAPITraverser();

  await currentTraverser.traverse(from);
  const currentFacts = currentTraverser.accumulator.allFacts();
  await nextTraverser.traverse(to);
  const nextFacts = nextTraverser.accumulator.allFacts();

  return factsToChangelog(currentFacts, nextFacts);
}

In the snippet below, I've run the changelog on one of our end-end examples, the one where the operation is added, obviously this is raw output, so its quite verbose.

[
{
"location": {
"jsonPath": "/paths/~1thing/get/responses/200/content/application~1vnd.api+json/schema/properties/data/items/properties/attributes/properties/strangeness",
"conceptualPath": [
"operations",
"/thing",
"get",
"responses",
"200",
"application/vnd.api+json",
"data",
"items",
"attributes",
"strangeness"
],
"kind": "field",
"conceptualLocation": {
"method": "get",
"path": "/thing",
"inResponse": {
"statusCode": "200",
"body": {
"contentType": "application/vnd.api+json"
}
},
"jsonSchemaTrail": [
"data",
"items",
"attributes",
"strangeness"
]
}
},
"added": {
"key": "strangeness",
"flatSchema": {
"type": "number",
"description": "The amount of strangeness this thing adds or removes from the situation.",
"example": 42
},
"required": false
}
},
{
"location": {
"jsonPath": "/paths/~1thing/post/responses/201/content/application~1vnd.api+json/schema/properties/data/properties/attributes/properties/strangeness",
"conceptualPath": [
"operations",
"/thing",
"post",
"responses",
"201",
"application/vnd.api+json",
"data",
"attributes",
"strangeness"
],
"kind": "field",
"conceptualLocation": {
"method": "post",
"path": "/thing",
"inResponse": {
"statusCode": "201",
"body": {
"contentType": "application/vnd.api+json"
}
},
"jsonSchemaTrail": [
"data",
"attributes",
"strangeness"
]
}
},
"added": {
"key": "strangeness",
"flatSchema": {
"type": "number",
"description": "The amount of strangeness this thing adds or removes from the situation.",
"example": 42
},
"required": false
}
},
{
"location": {
"jsonPath": "/paths/~1thing/delete",
"conceptualPath": [
"operations",
"/thing",
"delete"
],
"kind": "operation",
"conceptualLocation": {
"method": "delete",
"path": "/thing"
}
},
"added": {
"summary": "Bulk delete a collection of matching things",
"description": "Bulk delete a collection of matching things",
"operationId": "deleteMatchingThings",
"tags": [
"Thing"
],
"method": "delete",
"pathPattern": "/thing"
}
},
{
"location": {
"jsonPath": "/paths/~1thing/delete/parameters/0",
"conceptualPath": [
"operations",
"/thing",
"delete",
"parameters",
"query",
"version"
],
"kind": "query-parameter",
"conceptualLocation": {
"method": "delete",
"path": "/thing",
"inRequest": {
"query": "version"
}
}
},
"added": {
"name": "version",
"in": "query",
"required": true,
"description": "The requested version of the endpoint to process the request",
"schema": {
"type": "string"
}
}
},
{
"location": {
"jsonPath": "/paths/~1thing/delete/parameters/1",
"conceptualPath": [
"operations",
"/thing",
"delete",
"parameters",
"query",
"thing_ids"
],
"kind": "query-parameter",
"conceptualLocation": {
"method": "delete",
"path": "/thing",
"inRequest": {
"query": "thing_ids"
}
}
},
"added": {
"in": "query",
"schema": {
"type": "array",
"items": {
"type": "string"
}
},
"name": "thing_ids",
"required": true
}
},
{
"location": {
"jsonPath": "/paths/~1thing/delete/responses/204/headers/snyk-version-requested",
"conceptualPath": [
"operations",
"/thing",
"delete",
"responses",
"204",
"headers",
"snyk-version-requested"
],
"kind": "response-header",
"conceptualLocation": {
"method": "delete",
"path": "/thing",
"inResponse": {
"statusCode": "204",
"header": "snyk-version-requested"
}
}
},
"added": {
"name": "snyk-version-requested",
"description": "A header containing the version of the endpoint requested by the caller.",
"schema": {
"type": "string",
"pattern": "^(wip|work-in-progress|experimental|beta|(([0-9]{4})-([0-1][0-9]))-((3[01])|(0[1-9])|([12][0-9])))$"
}
}
},
{
"location": {
"jsonPath": "/paths/~1thing/delete/responses/204/headers/snyk-version-served",
"conceptualPath": [
"operations",
"/thing",
"delete",
"responses",
"204",
"headers",
"snyk-version-served"
],
"kind": "response-header",
"conceptualLocation": {
"method": "delete",
"path": "/thing",
"inResponse": {
"statusCode": "204",
"header": "snyk-version-served"
}
}
},
"added": {
"name": "snyk-version-served",
"description": "A header containing the version of the endpoint that was served by the API.",
"schema": {
"type": "string",
"pattern": "^(wip|work-in-progress|experimental|beta|(([0-9]{4})-([0-1][0-9]))-((3[01])|(0[1-9])|([12][0-9])))$"
}
}
},
{
"location": {
"jsonPath": "/paths/~1thing/delete/responses/204/headers/snyk-request-id",
"conceptualPath": [
"operations",
"/thing",
"delete",
"responses",
"204",
"headers",
"snyk-request-id"
],
"kind": "response-header",
"conceptualLocation": {
"method": "delete",
"path": "/thing",
"inResponse": {
"statusCode": "204",
"header": "snyk-request-id"
}
}
},
"added": {
"name": "snyk-request-id",
"description": "A header containing a unique id used for tracking this request. If you are reporting an issue to Snyk it's very helpful to provide this ID.\n",
"schema": {
"type": "string",
"format": "uuid"
}
}
},
{
"location": {
"jsonPath": "/paths/~1thing/delete/responses/204/headers/snyk-version-lifecycle-stage",
"conceptualPath": [
"operations",
"/thing",
"delete",
"responses",
"204",
"headers",
"snyk-version-lifecycle-stage"
],
"kind": "response-header",
"conceptualLocation": {
"method": "delete",
"path": "/thing",
"inResponse": {
"statusCode": "204",
"header": "snyk-version-lifecycle-stage"
}
}
},
"added": {
"name": "snyk-version-lifecycle-stage",
"description": "A header containing the version stage of the endpoint. This stage describes the guarantees snyk provides surrounding stability of the endpoint.\n",
"schema": {
"type": "string",
"enum": [
"wip",
"experimental",
"beta",
"ga",
"deprecated",
"sunset"
]
}
}
},
{
"location": {
"jsonPath": "/paths/~1thing/delete/responses/204/headers/deprecation",
"conceptualPath": [
"operations",
"/thing",
"delete",
"responses",
"204",
"headers",
"deprecation"
],
"kind": "response-header",
"conceptualLocation": {
"method": "delete",
"path": "/thing",
"inResponse": {
"statusCode": "204",
"header": "deprecation"
}
}
},
"added": {
"name": "deprecation",
"description": "A header containing the deprecation date of the underlying endpoint. For more information, please refer to the deprecation header RFC:\nhttps://tools.ietf.org/id/draft-dalal-deprecation-header-01.html\n",
"schema": {
"type": "string",
"format": "date-time"
}
}
},
{
"location": {
"jsonPath": "/paths/~1thing/delete/responses/204/headers/sunset",
"conceptualPath": [
"operations",
"/thing",
"delete",
"responses",
"204",
"headers",
"sunset"
],
"kind": "response-header",
"conceptualLocation": {
"method": "delete",
"path": "/thing",
"inResponse": {
"statusCode": "204",
"header": "sunset"
}
}
},
"added": {
"name": "sunset",
"description": "A header containing the date of when the underlying endpoint will be removed. This header is only present if the endpoint has been deprecated. Please refer to the RFC for more information:\nhttps://datatracker.ietf.org/doc/html/rfc8594\n",
"schema": {
"type": "string",
"format": "date-time"
}
}
},
{
"location": {
"jsonPath": "/paths/~1thing/delete/responses/204",
"conceptualPath": [
"operations",
"/thing",
"delete",
"responses",
"204"
],
"kind": "response",
"conceptualLocation": {
"method": "delete",
"path": "/thing",
"inResponse": {
"statusCode": "204"
}
}
},
"added": {
"description": "The operation completed successfully with no content",
"statusCode": 204
}
},
{
"location": {
"jsonPath": "/paths/~1thing/delete/responses/400/headers/snyk-version-requested",
"conceptualPath": [
"operations",
"/thing",
"delete",
"responses",
"400",
"headers",
"snyk-version-requested"
],
"kind": "response-header",
"conceptualLocation": {
"method": "delete",
"path": "/thing",
"inResponse": {
"statusCode": "400",
"header": "snyk-version-requested"
}
}
},
"added": {
"name": "snyk-version-requested",
"description": "A header containing the version of the endpoint requested by the caller.",
"schema": {
"type": "string",
"pattern": "^(wip|work-in-progress|experimental|beta|(([0-9]{4})-([0-1][0-9]))-((3[01])|(0[1-9])|([12][0-9])))$"
}
}
},
{
"location": {
"jsonPath": "/paths/~1thing/delete/responses/400/headers/snyk-version-served",
"conceptualPath": [
"operations",
"/thing",
"delete",
"responses",
"400",
"headers",
"snyk-version-served"
],
"kind": "response-header",
"conceptualLocation": {
"method": "delete",
"path": "/thing",
"inResponse": {
"statusCode": "400",
"header": "snyk-version-served"
}
}
},
"added": {
"name": "snyk-version-served",
"description": "A header containing the version of the endpoint that was served by the API.",
"schema": {
"type": "string",
"pattern": "^(wip|work-in-progress|experimental|beta|(([0-9]{4})-([0-1][0-9]))-((3[01])|(0[1-9])|([12][0-9])))$"
}
}
},
{
"location": {
"jsonPath": "/paths/~1thing/delete/responses/400/headers/snyk-request-id",
"conceptualPath": [
"operations",
"/thing",
"delete",
"responses",
"400",
"headers",
"snyk-request-id"
],
"kind": "response-header",
"conceptualLocation": {
"method": "delete",
"path": "/thing",
"inResponse": {
"statusCode": "400",
"header": "snyk-request-id"
}
}
},
"added": {
"name": "snyk-request-id",
"description": "A header containing a unique id used for tracking this request. If you are reporting an issue to Snyk it's very helpful to provide this ID.\n",
"schema": {
"type": "string",
"format": "uuid"
}
}
},
{
"location": {
"jsonPath": "/paths/~1thing/delete/responses/400/headers/snyk-version-lifecycle-stage",
"conceptualPath": [
"operations",
"/thing",
"delete",
"responses",
"400",
"headers",
"snyk-version-lifecycle-stage"
],
"kind": "response-header",
"conceptualLocation": {
"method": "delete",
"path": "/thing",
"inResponse": {
"statusCode": "400",
"header": "snyk-version-lifecycle-stage"
}
}
},
"added": {
"name": "snyk-version-lifecycle-stage",
"description": "A header containing the version stage of the endpoint. This stage describes the guarantees snyk provides surrounding stability of the endpoint.\n",
"schema": {
"type": "string",
"enum": [
"wip",
"experimental",
"beta",
"ga",
"deprecated",
"sunset"
]
}
}
},
{
"location": {
"jsonPath": "/paths/~1thing/delete/responses/400/headers/deprecation",
"conceptualPath": [
"operations",
"/thing",
"delete",
"responses",
"400",
"headers",
"deprecation"
],
"kind": "response-header",
"conceptualLocation": {
"method": "delete",
"path": "/thing",
"inResponse": {
"statusCode": "400",
"header": "deprecation"
}
}
},
"added": {
"name": "deprecation",
"description": "A header containing the deprecation date of the underlying endpoint. For more information, please refer to the deprecation header RFC:\nhttps://tools.ietf.org/id/draft-dalal-deprecation-header-01.html\n",
"schema": {
"type": "string",
"format": "date-time"
}
}
},
{
"location": {
"jsonPath": "/paths/~1thing/delete/responses/400/headers/sunset",
"conceptualPath": [
"operations",
"/thing",
"delete",
"responses",
"400",
"headers",
"sunset"
],
"kind": "response-header",
"conceptualLocation": {
"method": "delete",
"path": "/thing",
"inResponse": {
"statusCode": "400",
"header": "sunset"
}
}
},
"added": {
"name": "sunset",
"description": "A header containing the date of when the underlying endpoint will be removed. This header is only present if the endpoint has been deprecated. Please refer to the RFC for more information:\nhttps://datatracker.ietf.org/doc/html/rfc8594\n",
"schema": {
"type": "string",
"format": "date-time"
}
}
},
{
"location": {
"jsonPath": "/paths/~1thing/delete/responses/400/content/application~1vnd.api+json",
"conceptualPath": [
"operations",
"/thing",
"delete",
"responses",
"400",
"application/vnd.api+json"
],
"kind": "body",
"conceptualLocation": {
"method": "delete",
"path": "/thing",
"inResponse": {
"statusCode": "400",
"body": {
"contentType": "application/vnd.api+json"
}
}
}
},
"added": {
"contentType": "application/vnd.api+json",
"flatSchema": {
"type": "object",
"additionalProperties": false,
"example": {
"jsonapi": {
"version": "1.0"
},
"errors": [
{
"status": "403",
"detail": "Permission denied for this resource"
}
]
}
}
}
},
{
"location": {
"jsonPath": "/paths/~1thing/delete/responses/400/content/application~1vnd.api+json/schema/properties/jsonapi",
"conceptualPath": [
"operations",
"/thing",
"delete",
"responses",
"400",
"application/vnd.api+json",
"jsonapi"
],
"kind": "field",
"conceptualLocation": {
"method": "delete",
"path": "/thing",
"inResponse": {
"statusCode": "400",
"body": {
"contentType": "application/vnd.api+json"
}
},
"jsonSchemaTrail": [
"jsonapi"
]
}
},
"added": {
"key": "jsonapi",
"flatSchema": {
"type": "object",
"additionalProperties": false,
"example": {
"version": "1.0"
}
},
"required": true
}
},
{
"location": {
"jsonPath": "/paths/~1thing/delete/responses/400/content/application~1vnd.api+json/schema/properties/jsonapi/properties/version",
"conceptualPath": [
"operations",
"/thing",
"delete",
"responses",
"400",
"application/vnd.api+json",
"jsonapi",
"version"
],
"kind": "field",
"conceptualLocation": {
"method": "delete",
"path": "/thing",
"inResponse": {
"statusCode": "400",
"body": {
"contentType": "application/vnd.api+json"
}
},
"jsonSchemaTrail": [
"jsonapi",
"version"
]
}
},
"added": {
"key": "version",
"flatSchema": {
"type": "string",
"format": "semver",
"description": "Version of the JSON API specification this server supports.",
"example": "1.0"
},
"required": true
}
},
{
"location": {
"jsonPath": "/paths/~1thing/delete/responses/400/content/application~1vnd.api+json/schema/properties/errors",
"conceptualPath": [
"operations",
"/thing",
"delete",
"responses",
"400",
"application/vnd.api+json",
"errors"
],
"kind": "field",
"conceptualLocation": {
"method": "delete",
"path": "/thing",
"inResponse": {
"statusCode": "400",
"body": {
"contentType": "application/vnd.api+json"
}
},
"jsonSchemaTrail": [
"errors"
]
}
},
"added": {
"key": "errors",
"flatSchema": {
"type": "array",
"minItems": 1,
"example": [
{
"status": "403",
"detail": "Permission denied for this resource"
}
]
},
"required": true
}
},
{
"location": {
"jsonPath": "/paths/~1thing/delete/responses/400/content/application~1vnd.api+json/schema/properties/errors/items/properties/id",
"conceptualPath": [
"operations",
"/thing",
"delete",
"responses",
"400",
"application/vnd.api+json",
"errors",
"items",
"id"
],
"kind": "field",
"conceptualLocation": {
"method": "delete",
"path": "/thing",
"inResponse": {
"statusCode": "400",
"body": {
"contentType": "application/vnd.api+json"
}
},
"jsonSchemaTrail": [
"errors",
"items",
"id"
]
}
},
"added": {
"key": "id",
"flatSchema": {
"type": "string",
"format": "uuid",
"description": "A unique identifier for this particular occurrence of the problem.",
"example": "f16c31b5-6129-4571-add8-d589da9be524"
},
"required": false
}
},
{
"location": {
"jsonPath": "/paths/~1thing/delete/responses/400/content/application~1vnd.api+json/schema/properties/errors/items/properties/status",
"conceptualPath": [
"operations",
"/thing",
"delete",
"responses",
"400",
"application/vnd.api+json",
"errors",
"items",
"status"
],
"kind": "field",
"conceptualLocation": {
"method": "delete",
"path": "/thing",
"inResponse": {
"statusCode": "400",
"body": {
"contentType": "application/vnd.api+json"
}
},
"jsonSchemaTrail": [
"errors",
"items",
"status"
]
}
},
"added": {
"key": "status",
"flatSchema": {
"type": "string",
"pattern": "^[45]\\d\\d$",
"description": "The HTTP status code applicable to this problem, expressed as a string value.",
"example": "400"
},
"required": true
}
},
{
"location": {
"jsonPath": "/paths/~1thing/delete/responses/400/content/application~1vnd.api+json/schema/properties/errors/items/properties/detail",
"conceptualPath": [
"operations",
"/thing",
"delete",
"responses",
"400",
"application/vnd.api+json",
"errors",
"items",
"detail"
],
"kind": "field",
"conceptualLocation": {
"method": "delete",
"path": "/thing",
"inResponse": {
"statusCode": "400",
"body": {
"contentType": "application/vnd.api+json"
}
},
"jsonSchemaTrail": [
"errors",
"items",
"detail"
]
}
},
"added": {
"key": "detail",
"flatSchema": {
"type": "string",
"format": "user-text",
"description": "A human-readable explanation specific to this occurrence of the problem.",
"example": "The request was missing these required fields: ..."
},
"required": true
}
},
{
"location": {
"jsonPath": "/paths/~1thing/delete/responses/400/content/application~1vnd.api+json/schema/properties/errors/items/properties/source",
"conceptualPath": [
"operations",
"/thing",
"delete",
"responses",
"400",
"application/vnd.api+json",
"errors",
"items",
"source"
],
"kind": "field",
"conceptualLocation": {
"method": "delete",
"path": "/thing",
"inResponse": {
"statusCode": "400",
"body": {
"contentType": "application/vnd.api+json"
}
},
"jsonSchemaTrail": [
"errors",
"items",
"source"
]
}
},
"added": {
"key": "source",
"flatSchema": {
"type": "object",
"additionalProperties": false,
"example": {
"pointer": "/data/attributes"
}
},
"required": false
}
},
{
"location": {
"jsonPath": "/paths/~1thing/delete/responses/400/content/application~1vnd.api+json/schema/properties/errors/items/properties/source/properties/pointer",
"conceptualPath": [
"operations",
"/thing",
"delete",
"responses",
"400",
"application/vnd.api+json",
"errors",
"items",
"source",
"pointer"
],
"kind": "field",
"conceptualLocation": {
"method": "delete",
"path": "/thing",
"inResponse": {
"statusCode": "400",
"body": {
"contentType": "application/vnd.api+json"
}
},
"jsonSchemaTrail": [
"errors",
"items",
"source",
"pointer"
]
}
},
"added": {
"key": "pointer",
"flatSchema": {
"type": "string",
"format": "path",
"description": "A JSON Pointer [RFC6901] to the associated entity in the request document.",
"example": "/data/attributes"
},
"required": false
}
},
{
"location": {
"jsonPath": "/paths/~1thing/delete/responses/400/content/application~1vnd.api+json/schema/properties/errors/items/properties/source/properties/parameter",
"conceptualPath": [
"operations",
"/thing",
"delete",
"responses",
"400",
"application/vnd.api+json",
"errors",
"items",
"source",
"parameter"
],
"kind": "field",
"conceptualLocation": {
"method": "delete",
"path": "/thing",
"inResponse": {
"statusCode": "400",
"body": {
"contentType": "application/vnd.api+json"
}
},
"jsonSchemaTrail": [
"errors",
"items",
"source",
"parameter"
]
}
},
"added": {
"key": "parameter",
"flatSchema": {
"type": "string",
"format": "parameter",
"description": "A string indicating which URI query parameter caused the error.",
"example": "param1"
},
"required": false
}
},
{
"location": {
"jsonPath": "/paths/~1thing/delete/responses/400/content/application~1vnd.api+json/schema/properties/errors/items/properties/meta",
"conceptualPath": [
"operations",
"/thing",
"delete",
"responses",
"400",
"application/vnd.api+json",
"errors",
"items",
"meta"
],
"kind": "field",
"conceptualLocation": {
"method": "delete",
"path": "/thing",
"inResponse": {
"statusCode": "400",
"body": {
"contentType": "application/vnd.api+json"
}
},
"jsonSchemaTrail": [
"errors",
"items",
"meta"
]
}
},
"added": {
"key": "meta",
"flatSchema": {
"type": "object",
"additionalProperties": true,
"example": {
"key": "value"
}
},
"required": false
}
},
{
"location": {
"jsonPath": "/paths/~1thing/delete/responses/400",
"conceptualPath": [
"operations",
"/thing",
"delete",
"responses",
"400"
],
"kind": "response",
"conceptualLocation": {
"method": "delete",
"path": "/thing",
"inResponse": {
"statusCode": "400"
}
}
},
"added": {
"description": "Bad Request: A parameter provided as a part of the request was invalid.",
"statusCode": 400
}
},
{
"location": {
"jsonPath": "/paths/~1thing/delete/responses/401/headers/snyk-version-requested",
"conceptualPath": [
"operations",
"/thing",
"delete",
"responses",
"401",
"headers",
"snyk-version-requested"
],
"kind": "response-header",
"conceptualLocation": {
"method": "delete",
"path": "/thing",
"inResponse": {
"statusCode": "401",
"header": "snyk-version-requested"
}
}
},
"added": {
"name": "snyk-version-requested",
"description": "A header containing the version of the endpoint requested by the caller.",
"schema": {
"type": "string",
"pattern": "^(wip|work-in-progress|experimental|beta|(([0-9]{4})-([0-1][0-9]))-((3[01])|(0[1-9])|([12][0-9])))$"
}
}
},
{
"location": {
"jsonPath": "/paths/~1thing/delete/responses/401/headers/snyk-version-served",
"conceptualPath": [
"operations",
"/thing",
"delete",
"responses",
"401",
"headers",
"snyk-version-served"
],
"kind": "response-header",
"conceptualLocation": {
"method": "delete",
"path": "/thing",
"inResponse": {
"statusCode": "401",
"header": "snyk-version-served"
}
}
},
"added": {
"name": "snyk-version-served",
"description": "A header containing the version of the endpoint that was served by the API.",
"schema": {
"type": "string",
"pattern": "^(wip|work-in-progress|experimental|beta|(([0-9]{4})-([0-1][0-9]))-((3[01])|(0[1-9])|([12][0-9])))$"
}
}
},
{
"location": {
"jsonPath": "/paths/~1thing/delete/responses/401/headers/snyk-request-id",
"conceptualPath": [
"operations",
"/thing",
"delete",
"responses",
"401",
"headers",
"snyk-request-id"
],
"kind": "response-header",
"conceptualLocation": {
"method": "delete",
"path": "/thing",
"inResponse": {
"statusCode": "401",
"header": "snyk-request-id"
}
}
},
"added": {
"name": "snyk-request-id",
"description": "A header containing a unique id used for tracking this request. If you are reporting an issue to Snyk it's very helpful to provide this ID.\n",
"schema": {
"type": "string",
"format": "uuid"
}
}
},
{
"location": {
"jsonPath": "/paths/~1thing/delete/responses/401/headers/snyk-version-lifecycle-stage",
"conceptualPath": [
"operations",
"/thing",
"delete",
"responses",
"401",
"headers",
"snyk-version-lifecycle-stage"
],
"kind": "response-header",
"conceptualLocation": {
"method": "delete",
"path": "/thing",
"inResponse": {
"statusCode": "401",
"header": "snyk-version-lifecycle-stage"
}
}
},
"added": {
"name": "snyk-version-lifecycle-stage",
"description": "A header containing the version stage of the endpoint. This stage describes the guarantees snyk provides surrounding stability of the endpoint.\n",
"schema": {
"type": "string",
"enum": [
"wip",
"experimental",
"beta",
"ga",
"deprecated",
"sunset"
]
}
}
},
{
"location": {
"jsonPath": "/paths/~1thing/delete/responses/401/headers/deprecation",
"conceptualPath": [
"operations",
"/thing",
"delete",
"responses",
"401",
"headers",
"deprecation"
],
"kind": "response-header",
"conceptualLocation": {
"method": "delete",
"path": "/thing",
"inResponse": {
"statusCode": "401",
"header": "deprecation"
}
}
},
"added": {
"name": "deprecation",
"description": "A header containing the deprecation date of the underlying endpoint. For more information, please refer to the deprecation header RFC:\nhttps://tools.ietf.org/id/draft-dalal-deprecation-header-01.html\n",
"schema": {
"type": "string",
"format": "date-time"
}
}
},
{
"location": {
"jsonPath": "/paths/~1thing/delete/responses/401/headers/sunset",
"conceptualPath": [
"operations",
"/thing",
"delete",
"responses",
"401",
"headers",
"sunset"
],
"kind": "response-header",
"conceptualLocation": {
"method": "delete",
"path": "/thing",
"inResponse": {
"statusCode": "401",
"header": "sunset"
}
}
},
"added": {
"name": "sunset",
"description": "A header containing the date of when the underlying endpoint will be removed. This header is only present if the endpoint has been deprecated. Please refer to the RFC for more information:\nhttps://datatracker.ietf.org/doc/html/rfc8594\n",
"schema": {
"type": "string",
"format": "date-time"
}
}
},
{
"location": {
"jsonPath": "/paths/~1thing/delete/responses/401/content/application~1vnd.api+json",
"conceptualPath": [
"operations",
"/thing",
"delete",
"responses",
"401",
"application/vnd.api+json"
],
"kind": "body",
"conceptualLocation": {
"method": "delete",
"path": "/thing",
"inResponse": {
"statusCode": "401",
"body": {
"contentType": "application/vnd.api+json"
}
}
}
},
"added": {
"contentType": "application/vnd.api+json",
"flatSchema": {
"type": "object",
"additionalProperties": false,
"example": {
"jsonapi": {
"version": "1.0"
},
"errors": [
{
"status": "403",
"detail": "Permission denied for this resource"
}
]
}
}
}
},
{
"location": {
"jsonPath": "/paths/~1thing/delete/responses/401/content/application~1vnd.api+json/schema/properties/jsonapi",
"conceptualPath": [
"operations",
"/thing",
"delete",
"responses",
"401",
"application/vnd.api+json",
"jsonapi"
],
"kind": "field",
"conceptualLocation": {
"method": "delete",
"path": "/thing",
"inResponse": {
"statusCode": "401",
"body": {
"contentType": "application/vnd.api+json"
}
},
"jsonSchemaTrail": [
"jsonapi"
]
}
},
"added": {
"key": "jsonapi",
"flatSchema": {
"type": "object",
"additionalProperties": false,
"example": {
"version": "1.0"
}
},
"required": true
}
},
{
"location": {
"jsonPath": "/paths/~1thing/delete/responses/401/content/application~1vnd.api+json/schema/properties/jsonapi/properties/version",
"conceptualPath": [
"operations",
"/thing",
"delete",
"responses",
"401",
"application/vnd.api+json",
"jsonapi",
"version"
],
"kind": "field",
"conceptualLocation": {
"method": "delete",
"path": "/thing",
"inResponse": {
"statusCode": "401",
"body": {
"contentType": "application/vnd.api+json"
}
},
"jsonSchemaTrail": [
"jsonapi",
"version"
]
}
},
"added": {
"key": "version",
"flatSchema": {
"type": "string",
"format": "semver",
"description": "Version of the JSON API specification this server supports.",
"example": "1.0"
},
"required": true
}
},
{
"location": {
"jsonPath": "/paths/~1thing/delete/responses/401/content/application~1vnd.api+json/schema/properties/errors",
"conceptualPath": [
"operations",
"/thing",
"delete",
"responses",
"401",
"application/vnd.api+json",
"errors"
],
"kind": "field",
"conceptualLocation": {
"method": "delete",
"path": "/thing",
"inResponse": {
"statusCode": "401",
"body": {
"contentType": "application/vnd.api+json"
}
},
"jsonSchemaTrail": [
"errors"
]
}
},
"added": {
"key": "errors",
"flatSchema": {
"type": "array",
"minItems": 1,
"example": [
{
"status": "403",
"detail": "Permission denied for this resource"
}
]
},
"required": true
}
},
{
"location": {
"jsonPath": "/paths/~1thing/delete/responses/401/content/application~1vnd.api+json/schema/properties/errors/items/properties/id",
"conceptualPath": [
"operations",
"/thing",
"delete",
"responses",
"401",
"application/vnd.api+json",
"errors",
"items",
"id"
],
"kind": "field",
"conceptualLocation": {
"method": "delete",
"path": "/thing",
"inResponse": {
"statusCode": "401",
"body": {
"contentType": "application/vnd.api+json"
}
},
"jsonSchemaTrail": [
"errors",
"items",
"id"
]
}
},
"added": {
"key": "id",
"flatSchema": {
"type": "string",
"format": "uuid",
"description": "A unique identifier for this particular occurrence of the problem.",
"example": "f16c31b5-6129-4571-add8-d589da9be524"
},
"required": false
}
},
{
"location": {
"jsonPath": "/paths/~1thing/delete/responses/401/content/application~1vnd.api+json/schema/properties/errors/items/properties/status",
"conceptualPath": [
"operations",
"/thing",
"delete",
"responses",
"401",
"application/vnd.api+json",
"errors",
"items",
"status"
],
"kind": "field",
"conceptualLocation": {
"method": "delete",
"path": "/thing",
"inResponse": {
"statusCode": "401",
"body": {
"contentType": "application/vnd.api+json"
}
},
"jsonSchemaTrail": [
"errors",
"items",
"status"
]
}
},
"added": {
"key": "status",
"flatSchema": {
"type": "string",
"pattern": "^[45]\\d\\d$",
"description": "The HTTP status code applicable to this problem, expressed as a string value.",
"example": "400"
},
"required": true
}
},
{
"location": {
"jsonPath": "/paths/~1thing/delete/responses/401/content/application~1vnd.api+json/schema/properties/errors/items/properties/detail",
"conceptualPath": [
"operations",
"/thing",
"delete",
"responses",
"401",
"application/vnd.api+json",
"errors",
"items",
"detail"
],
"kind": "field",
"conceptualLocation": {
"method": "delete",
"path": "/thing",
"inResponse": {
"statusCode": "401",
"body": {
"contentType": "application/vnd.api+json"
}
},
"jsonSchemaTrail": [
"errors",
"items",
"detail"
]
}
},
"added": {
"key": "detail",
"flatSchema": {
"type": "string",
"format": "user-text",
"description": "A human-readable explanation specific to this occurrence of the problem.",
"example": "The request was missing these required fields: ..."
},
"required": true
}
},
{
"location": {
"jsonPath": "/paths/~1thing/delete/responses/401/content/application~1vnd.api+json/schema/properties/errors/items/properties/source",
"conceptualPath": [
"operations",
"/thing",
"delete",
"responses",
"401",
"application/vnd.api+json",
"errors",
"items",
"source"
],
"kind": "field",
"conceptualLocation": {
"method": "delete",
"path": "/thing",
"inResponse": {
"statusCode": "401",
"body": {
"contentType": "application/vnd.api+json"
}
},
"jsonSchemaTrail": [
"errors",
"items",
"source"
]
}
},
"added": {
"key": "source",
"flatSchema": {
"type": "object",
"additionalProperties": false,
"example": {
"pointer": "/data/attributes"
}
},
"required": false
}
},
{
"location": {
"jsonPath": "/paths/~1thing/delete/responses/401/content/application~1vnd.api+json/schema/properties/errors/items/properties/source/properties/pointer",
"conceptualPath": [
"operations",
"/thing",
"delete",
"responses",
"401",
"application/vnd.api+json",
"errors",
"items",
"source",
"pointer"
],
"kind": "field",
"conceptualLocation": {
"method": "delete",
"path": "/thing",
"inResponse": {
"statusCode": "401",
"body": {
"contentType": "application/vnd.api+json"
}
},
"jsonSchemaTrail": [
"errors",
"items",
"source",
"pointer"
]
}
},
"added": {
"key": "pointer",
"flatSchema": {
"type": "string",
"format": "path",
"description": "A JSON Pointer [RFC6901] to the associated entity in the request document.",
"example": "/data/attributes"
},
"required": false
}
},
{
"location": {
"jsonPath": "/paths/~1thing/delete/responses/401/content/application~1vnd.api+json/schema/properties/errors/items/properties/source/properties/parameter",
"conceptualPath": [
"operations",
"/thing",
"delete",
"responses",
"401",
"application/vnd.api+json",
"errors",
"items",
"source",
"parameter"
],
"kind": "field",
"conceptualLocation": {
"method": "delete",
"path": "/thing",
"inResponse": {
"statusCode": "401",
"body": {
"contentType": "application/vnd.api+json"
}
},
"jsonSchemaTrail": [
"errors",
"items",
"source",
"parameter"
]
}
},
"added": {
"key": "parameter",
"flatSchema": {
"type": "string",
"format": "parameter",
"description": "A string indicating which URI query parameter caused the error.",
"example": "param1"
},
"required": false
}
},
{
"location": {
"jsonPath": "/paths/~1thing/delete/responses/401/content/application~1vnd.api+json/schema/properties/errors/items/properties/meta",
"conceptualPath": [
"operations",
"/thing",
"delete",
"responses",
"401",
"application/vnd.api+json",
"errors",
"items",
"meta"
],
"kind": "field",
"conceptualLocation": {
"method": "delete",
"path": "/thing",
"inResponse": {
"statusCode": "401",
"body": {
"contentType": "application/vnd.api+json"
}
},
"jsonSchemaTrail": [
"errors",
"items",
"meta"
]
}
},
"added": {
"key": "meta",
"flatSchema": {
"type": "object",
"additionalProperties": true,
"example": {
"key": "value"
}
},
"required": false
}
},
{
"location": {
"jsonPath": "/paths/~1thing/delete/responses/401",
"conceptualPath": [
"operations",
"/thing",
"delete",
"responses",
"401"
],
"kind": "response",
"conceptualLocation": {
"method": "delete",
"path": "/thing",
"inResponse": {
"statusCode": "401"
}
}
},
"added": {
"description": "Unauthorized: the request requires an authentication token or a token with more permissions.",
"statusCode": 401
}
},
{
"location": {
"jsonPath": "/paths/~1thing/delete/responses/403/headers/snyk-version-requested",
"conceptualPath": [
"operations",
"/thing",
"delete",
"responses",
"403",
"headers",
"snyk-version-requested"
],
"kind": "response-header",
"conceptualLocation": {
"method": "delete",
"path": "/thing",
"inResponse": {
"statusCode": "403",
"header": "snyk-version-requested"
}
}
},
"added": {
"name": "snyk-version-requested",
"description": "A header containing the version of the endpoint requested by the caller.",
"schema": {
"type": "string",
"pattern": "^(wip|work-in-progress|experimental|beta|(([0-9]{4})-([0-1][0-9]))-((3[01])|(0[1-9])|([12][0-9])))$"
}
}
},
{
"location": {
"jsonPath": "/paths/~1thing/delete/responses/403/headers/snyk-version-served",
"conceptualPath": [
"operations",
"/thing",
"delete",
"responses",
"403",
"headers",
"snyk-version-served"
],
"kind": "response-header",
"conceptualLocation": {
"method": "delete",
"path": "/thing",
"inResponse": {
"statusCode": "403",
"header": "snyk-version-served"
}
}
},
"added": {
"name": "snyk-version-served",
"description": "A header containing the version of the endpoint that was served by the API.",
"schema": {
"type": "string",
"pattern": "^(wip|work-in-progress|experimental|beta|(([0-9]{4})-([0-1][0-9]))-((3[01])|(0[1-9])|([12][0-9])))$"
}
}
},
{
"location": {
"jsonPath": "/paths/~1thing/delete/responses/403/headers/snyk-request-id",
"conceptualPath": [
"operations",
"/thing",
"delete",
"responses",
"403",
"headers",
"snyk-request-id"
],
"kind": "response-header",
"conceptualLocation": {
"method": "delete",
"path": "/thing",
"inResponse": {
"statusCode": "403",
"header": "snyk-request-id"
}
}
},
"added": {
"name": "snyk-request-id",
"description": "A header containing a unique id used for tracking this request. If you are reporting an issue to Snyk it's very helpful to provide this ID.\n",
"schema": {
"type": "string",
"format": "uuid"
}
}
},
{
"location": {
"jsonPath": "/paths/~1thing/delete/responses/403/headers/snyk-version-lifecycle-stage",
"conceptualPath": [
"operations",
"/thing",
"delete",
"responses",
"403",
"headers",
"snyk-version-lifecycle-stage"
],
"kind": "response-header",
"conceptualLocation": {
"method": "delete",
"path": "/thing",
"inResponse": {
"statusCode": "403",
"header": "snyk-version-lifecycle-stage"
}
}
},
"added": {
"name": "snyk-version-lifecycle-stage",
"description": "A header containing the version stage of the endpoint. This stage describes the guarantees snyk provides surrounding stability of the endpoint.\n",
"schema": {
"type": "string",
"enum": [
"wip",
"experimental",
"beta",
"ga",
"deprecated",
"sunset"
]
}
}
},
{
"location": {
"jsonPath": "/paths/~1thing/delete/responses/403/headers/deprecation",
"conceptualPath": [
"operations",
"/thing",
"delete",
"responses",
"403",
"headers",
"deprecation"
],
"kind": "response-header",
"conceptualLocation": {
"method": "delete",
"path": "/thing",
"inResponse": {
"statusCode": "403",
"header": "deprecation"
}
}
},
"added": {
"name": "deprecation",
"description": "A header containing the deprecation date of the underlying endpoint. For more information, please refer to the deprecation header RFC:\nhttps://tools.ietf.org/id/draft-dalal-deprecation-header-01.html\n",
"schema": {
"type": "string",
"format": "date-time"
}
}
},
{
"location": {
"jsonPath": "/paths/~1thing/delete/responses/403/headers/sunset",
"conceptualPath": [
"operations",
"/thing",
"delete",
"responses",
"403",
"headers",
"sunset"
],
"kind": "response-header",
"conceptualLocation": {
"method": "delete",
"path": "/thing",
"inResponse": {
"statusCode": "403",
"header": "sunset"
}
}
},
"added": {
"name": "sunset",
"description": "A header containing the date of when the underlying endpoint will be removed. This header is only present if the endpoint has been deprecated. Please refer to the RFC for more information:\nhttps://datatracker.ietf.org/doc/html/rfc8594\n",
"schema": {
"type": "string",
"format": "date-time"
}
}
},
{
"location": {
"jsonPath": "/paths/~1thing/delete/responses/403/content/application~1vnd.api+json",
"conceptualPath": [
"operations",
"/thing",
"delete",
"responses",
"403",
"application/vnd.api+json"
],
"kind": "body",
"conceptualLocation": {
"method": "delete",
"path": "/thing",
"inResponse": {
"statusCode": "403",
"body": {
"contentType": "application/vnd.api+json"
}
}
}
},
"added": {
"contentType": "application/vnd.api+json",
"flatSchema": {
"type": "object",
"additionalProperties": false,
"example": {
"jsonapi": {
"version": "1.0"
},
"errors": [
{
"status": "403",
"detail": "Permission denied for this resource"
}
]
}
}
}
},
{
"location": {
"jsonPath": "/paths/~1thing/delete/responses/403/content/application~1vnd.api+json/schema/properties/jsonapi",
"conceptualPath": [
"operations",
"/thing",
"delete",
"responses",
"403",
"application/vnd.api+json",
"jsonapi"
],
"kind": "field",
"conceptualLocation": {
"method": "delete",
"path": "/thing",
"inResponse": {
"statusCode": "403",
"body": {
"contentType": "application/vnd.api+json"
}
},
"jsonSchemaTrail": [
"jsonapi"
]
}
},
"added": {
"key": "jsonapi",
"flatSchema": {
"type": "object",
"additionalProperties": false,
"example": {
"version": "1.0"
}
},
"required": true
}
},
{
"location": {
"jsonPath": "/paths/~1thing/delete/responses/403/content/application~1vnd.api+json/schema/properties/jsonapi/properties/version",
"conceptualPath": [
"operations",
"/thing",
"delete",
"responses",
"403",
"application/vnd.api+json",
"jsonapi",
"version"
],
"kind": "field",
"conceptualLocation": {
"method": "delete",
"path": "/thing",
"inResponse": {
"statusCode": "403",
"body": {
"contentType": "application/vnd.api+json"
}
},
"jsonSchemaTrail": [
"jsonapi",
"version"
]
}
},
"added": {
"key": "version",
"flatSchema": {
"type": "string",
"format": "semver",
"description": "Version of the JSON API specification this server supports.",
"example": "1.0"
},
"required": true
}
},
{
"location": {
"jsonPath": "/paths/~1thing/delete/responses/403/content/application~1vnd.api+json/schema/properties/errors",
"conceptualPath": [
"operations",
"/thing",
"delete",
"responses",
"403",
"application/vnd.api+json",
"errors"
],
"kind": "field",
"conceptualLocation": {
"method": "delete",
"path": "/thing",
"inResponse": {
"statusCode": "403",
"body": {
"contentType": "application/vnd.api+json"
}
},
"jsonSchemaTrail": [
"errors"
]
}
},
"added": {
"key": "errors",
"flatSchema": {
"type": "array",
"minItems": 1,
"example": [
{
"status": "403",
"detail": "Permission denied for this resource"
}
]
},
"required": true
}
},
{
"location": {
"jsonPath": "/paths/~1thing/delete/responses/403/content/application~1vnd.api+json/schema/properties/errors/items/properties/id",
"conceptualPath": [
"operations",
"/thing",
"delete",
"responses",
"403",
"application/vnd.api+json",
"errors",
"items",
"id"
],
"kind": "field",
"conceptualLocation": {
"method": "delete",
"path": "/thing",
"inResponse": {
"statusCode": "403",
"body": {
"contentType": "application/vnd.api+json"
}
},
"jsonSchemaTrail": [
"errors",
"items",
"id"
]
}
},
"added": {
"key": "id",
"flatSchema": {
"type": "string",
"format": "uuid",
"description": "A unique identifier for this particular occurrence of the problem.",
"example": "f16c31b5-6129-4571-add8-d589da9be524"
},
"required": false
}
},
{
"location": {
"jsonPath": "/paths/~1thing/delete/responses/403/content/application~1vnd.api+json/schema/properties/errors/items/properties/status",
"conceptualPath": [
"operations",
"/thing",
"delete",
"responses",
"403",
"application/vnd.api+json",
"errors",
"items",
"status"
],
"kind": "field",
"conceptualLocation": {
"method": "delete",
"path": "/thing",
"inResponse": {
"statusCode": "403",
"body": {
"contentType": "application/vnd.api+json"
}
},
"jsonSchemaTrail": [
"errors",
"items",
"status"
]
}
},
"added": {
"key": "status",
"flatSchema": {
"type": "string",
"pattern": "^[45]\\d\\d$",
"description": "The HTTP status code applicable to this problem, expressed as a string value.",
"example": "400"
},
"required": true
}
},
{
"location": {
"jsonPath": "/paths/~1thing/delete/responses/403/content/application~1vnd.api+json/schema/properties/errors/items/properties/detail",
"conceptualPath": [
"operations",
"/thing",
"delete",
"responses",
"403",
"application/vnd.api+json",
"errors",
"items",
"detail"
],
"kind": "field",
"conceptualLocation": {
"method": "delete",
"path": "/thing",
"inResponse": {
"statusCode": "403",
"body": {
"contentType": "application/vnd.api+json"
}
},
"jsonSchemaTrail": [
"errors",
"items",
"detail"
]
}
},
"added": {
"key": "detail",
"flatSchema": {
"type": "string",
"format": "user-text",
"description": "A human-readable explanation specific to this occurrence of the problem.",
"example": "The request was missing these required fields: ..."
},
"required": true
}
},
{
"location": {
"jsonPath": "/paths/~1thing/delete/responses/403/content/application~1vnd.api+json/schema/properties/errors/items/properties/source",
"conceptualPath": [
"operations",
"/thing",
"delete",
"responses",
"403",
"application/vnd.api+json",
"errors",
"items",
"source"
],
"kind": "field",
"conceptualLocation": {
"method": "delete",
"path": "/thing",
"inResponse": {
"statusCode": "403",
"body": {
"contentType": "application/vnd.api+json"
}
},
"jsonSchemaTrail": [
"errors",
"items",
"source"
]
}
},
"added": {
"key": "source",
"flatSchema": {
"type": "object",
"additionalProperties": false,
"example": {
"pointer": "/data/attributes"
}
},
"required": false
}
},
{
"location": {
"jsonPath": "/paths/~1thing/delete/responses/403/content/application~1vnd.api+json/schema/properties/errors/items/properties/source/properties/pointer",
"conceptualPath": [
"operations",
"/thing",
"delete",
"responses",
"403",
"application/vnd.api+json",
"errors",
"items",
"source",
"pointer"
],
"kind": "field",
"conceptualLocation": {
"method": "delete",
"path": "/thing",
"inResponse": {
"statusCode": "403",
"body": {
"contentType": "application/vnd.api+json"
}
},
"jsonSchemaTrail": [
"errors",
"items",
"source",
"pointer"
]
}
},
"added": {
"key": "pointer",
"flatSchema": {
"type": "string",
"format": "path",
"description": "A JSON Pointer [RFC6901] to the associated entity in the request document.",
"example": "/data/attributes"
},
"required": false
}
},
{
"location": {
"jsonPath": "/paths/~1thing/delete/responses/403/content/application~1vnd.api+json/schema/properties/errors/items/properties/source/properties/parameter",
"conceptualPath": [
"operations",
"/thing",
"delete",
"responses",
"403",
"application/vnd.api+json",
"errors",
"items",
"source",
"parameter"
],
"kind": "field",
"conceptualLocation": {
"method": "delete",
"path": "/thing",
"inResponse": {
"statusCode": "403",
"body": {
"contentType": "application/vnd.api+json"
}
},
"jsonSchemaTrail": [
"errors",
"items",
"source",
"parameter"
]
}
},
"added": {
"key": "parameter",
"flatSchema": {
"type": "string",
"format": "parameter",
"description": "A string indicating which URI query parameter caused the error.",
"example": "param1"
},
"required": false
}
},
{
"location": {
"jsonPath": "/paths/~1thing/delete/responses/403/content/application~1vnd.api+json/schema/properties/errors/items/properties/meta",
"conceptualPath": [
"operations",
"/thing",
"delete",
"responses",
"403",
"application/vnd.api+json",
"errors",
"items",
"meta"
],
"kind": "field",
"conceptualLocation": {
"method": "delete",
"path": "/thing",
"inResponse": {
"statusCode": "403",
"body": {
"contentType": "application/vnd.api+json"
}
},
"jsonSchemaTrail": [
"errors",
"items",
"meta"
]
}
},
"added": {
"key": "meta",
"flatSchema": {
"type": "object",
"additionalProperties": true,
"example": {
"key": "value"
}
},
"required": false
}
},
{
"location": {
"jsonPath": "/paths/~1thing/delete/responses/403",
"conceptualPath": [
"operations",
"/thing",
"delete",
"responses",
"403"
],
"kind": "response",
"conceptualLocation": {
"method": "delete",
"path": "/thing",
"inResponse": {
"statusCode": "403"
}
}
},
"added": {
"description": "Unauthorized: the request requires an authentication token or a token with more permissions.",
"statusCode": 403
}
},
{
"location": {
"jsonPath": "/paths/~1thing/delete/responses/404/headers/snyk-version-requested",
"conceptualPath": [
"operations",
"/thing",
"delete",
"responses",
"404",
"headers",
"snyk-version-requested"
],
"kind": "response-header",
"conceptualLocation": {
"method": "delete",
"path": "/thing",
"inResponse": {
"statusCode": "404",
"header": "snyk-version-requested"
}
}
},
"added": {
"name": "snyk-version-requested",
"description": "A header containing the version of the endpoint requested by the caller.",
"schema": {
"type": "string",
"pattern": "^(wip|work-in-progress|experimental|beta|(([0-9]{4})-([0-1][0-9]))-((3[01])|(0[1-9])|([12][0-9])))$"
}
}
},
{
"location": {
"jsonPath": "/paths/~1thing/delete/responses/404/headers/snyk-version-served",
"conceptualPath": [
"operations",
"/thing",
"delete",
"responses",
"404",
"headers",
"snyk-version-served"
],
"kind": "response-header",
"conceptualLocation": {
"method": "delete",
"path": "/thing",
"inResponse": {
"statusCode": "404",
"header": "snyk-version-served"
}
}
},
"added": {
"name": "snyk-version-served",
"description": "A header containing the version of the endpoint that was served by the API.",
"schema": {
"type": "string",
"pattern": "^(wip|work-in-progress|experimental|beta|(([0-9]{4})-([0-1][0-9]))-((3[01])|(0[1-9])|([12][0-9])))$"
}
}
},
{
"location": {
"jsonPath": "/paths/~1thing/delete/responses/404/headers/snyk-request-id",
"conceptualPath": [
"operations",
"/thing",
"delete",
"responses",
"404",
"headers",
"snyk-request-id"
],
"kind": "response-header",
"conceptualLocation": {
"method": "delete",
"path": "/thing",
"inResponse": {
"statusCode": "404",
"header": "snyk-request-id"
}
}
},
"added": {
"name": "snyk-request-id",
"description": "A header containing a unique id used for tracking this request. If you are reporting an issue to Snyk it's very helpful to provide this ID.\n",
"schema": {
"type": "string",
"format": "uuid"
}
}
},
{
"location": {
"jsonPath": "/paths/~1thing/delete/responses/404/headers/snyk-version-lifecycle-stage",
"conceptualPath": [
"operations",
"/thing",
"delete",
"responses",
"404",
"headers",
"snyk-version-lifecycle-stage"
],
"kind": "response-header",
"conceptualLocation": {
"method": "delete",
"path": "/thing",
"inResponse": {
"statusCode": "404",
"header": "snyk-version-lifecycle-stage"
}
}
},
"added": {
"name": "snyk-version-lifecycle-stage",
"description": "A header containing the version stage of the endpoint. This stage describes the guarantees snyk provides surrounding stability of the endpoint.\n",
"schema": {
"type": "string",
"enum": [
"wip",
"experimental",
"beta",
"ga",
"deprecated",
"sunset"
]
}
}
},
{
"location": {
"jsonPath": "/paths/~1thing/delete/responses/404/headers/deprecation",
"conceptualPath": [
"operations",
"/thing",
"delete",
"responses",
"404",
"headers",
"deprecation"
],
"kind": "response-header",
"conceptualLocation": {
"method": "delete",
"path": "/thing",
"inResponse": {
"statusCode": "404",
"header": "deprecation"
}
}
},
"added": {
"name": "deprecation",
"description": "A header containing the deprecation date of the underlying endpoint. For more information, please refer to the deprecation header RFC:\nhttps://tools.ietf.org/id/draft-dalal-deprecation-header-01.html\n",
"schema": {
"type": "string",
"format": "date-time"
}
}
},
{
"location": {
"jsonPath": "/paths/~1thing/delete/responses/404/headers/sunset",
"conceptualPath": [
"operations",
"/thing",
"delete",
"responses",
"404",
"headers",
"sunset"
],
"kind": "response-header",
"conceptualLocation": {
"method": "delete",
"path": "/thing",
"inResponse": {
"statusCode": "404",
"header": "sunset"
}
}
},
"added": {
"name": "sunset",
"description": "A header containing the date of when the underlying endpoint will be removed. This header is only present if the endpoint has been deprecated. Please refer to the RFC for more information:\nhttps://datatracker.ietf.org/doc/html/rfc8594\n",
"schema": {
"type": "string",
"format": "date-time"
}
}
},
{
"location": {
"jsonPath": "/paths/~1thing/delete/responses/404/content/application~1vnd.api+json",
"conceptualPath": [
"operations",
"/thing",
"delete",
"responses",
"404",
"application/vnd.api+json"
],
"kind": "body",
"conceptualLocation": {
"method": "delete",
"path": "/thing",
"inResponse": {
"statusCode": "404",
"body": {
"contentType": "application/vnd.api+json"
}
}
}
},
"added": {
"contentType": "application/vnd.api+json",
"flatSchema": {
"type": "object",
"additionalProperties": false,
"example": {
"jsonapi": {
"version": "1.0"
},
"errors": [
{
"status": "403",
"detail": "Permission denied for this resource"
}
]
}
}
}
},
{
"location": {
"jsonPath": "/paths/~1thing/delete/responses/404/content/application~1vnd.api+json/schema/properties/jsonapi",
"conceptualPath": [
"operations",
"/thing",
"delete",
"responses",
"404",
"application/vnd.api+json",
"jsonapi"
],
"kind": "field",
"conceptualLocation": {
"method": "delete",
"path": "/thing",
"inResponse": {
"statusCode": "404",
"body": {
"contentType": "application/vnd.api+json"
}
},
"jsonSchemaTrail": [
"jsonapi"
]
}
},
"added": {
"key": "jsonapi",
"flatSchema": {
"type": "object",
"additionalProperties": false,
"example": {
"version": "1.0"
}
},
"required": true
}
},
{
"location": {
"jsonPath": "/paths/~1thing/delete/responses/404/content/application~1vnd.api+json/schema/properties/jsonapi/properties/version",
"conceptualPath": [
"operations",
"/thing",
"delete",
"responses",
"404",
"application/vnd.api+json",
"jsonapi",
"version"
],
"kind": "field",
"conceptualLocation": {
"method": "delete",
"path": "/thing",
"inResponse": {
"statusCode": "404",
"body": {
"contentType": "application/vnd.api+json"
}
},
"jsonSchemaTrail": [
"jsonapi",
"version"
]
}
},
"added": {
"key": "version",
"flatSchema": {
"type": "string",
"format": "semver",
"description": "Version of the JSON API specification this server supports.",
"example": "1.0"
},
"required": true
}
},
{
"location": {
"jsonPath": "/paths/~1thing/delete/responses/404/content/application~1vnd.api+json/schema/properties/errors",
"conceptualPath": [
"operations",
"/thing",
"delete",
"responses",
"404",
"application/vnd.api+json",
"errors"
],
"kind": "field",
"conceptualLocation": {
"method": "delete",
"path": "/thing",
"inResponse": {
"statusCode": "404",
"body": {
"contentType": "application/vnd.api+json"
}
},
"jsonSchemaTrail": [
"errors"
]
}
},
"added": {
"key": "errors",
"flatSchema": {
"type": "array",
"minItems": 1,
"example": [
{
"status": "403",
"detail": "Permission denied for this resource"
}
]
},
"required": true
}
},
{
"location": {
"jsonPath": "/paths/~1thing/delete/responses/404/content/application~1vnd.api+json/schema/properties/errors/items/properties/id",
"conceptualPath": [
"operations",
"/thing",
"delete",
"responses",
"404",
"application/vnd.api+json",
"errors",
"items",
"id"
],
"kind": "field",
"conceptualLocation": {
"method": "delete",
"path": "/thing",
"inResponse": {
"statusCode": "404",
"body": {
"contentType": "application/vnd.api+json"
}
},
"jsonSchemaTrail": [
"errors",
"items",
"id"
]
}
},
"added": {
"key": "id",
"flatSchema": {
"type": "string",
"format": "uuid",
"description": "A unique identifier for this particular occurrence of the problem.",
"example": "f16c31b5-6129-4571-add8-d589da9be524"
},
"required": false
}
},
{
"location": {
"jsonPath": "/paths/~1thing/delete/responses/404/content/application~1vnd.api+json/schema/properties/errors/items/properties/status",
"conceptualPath": [
"operations",
"/thing",
"delete",
"responses",
"404",
"application/vnd.api+json",
"errors",
"items",
"status"
],
"kind": "field",
"conceptualLocation": {
"method": "delete",
"path": "/thing",
"inResponse": {
"statusCode": "404",
"body": {
"contentType": "application/vnd.api+json"
}
},
"jsonSchemaTrail": [
"errors",
"items",
"status"
]
}
},
"added": {
"key": "status",
"flatSchema": {
"type": "string",
"pattern": "^[45]\\d\\d$",
"description": "The HTTP status code applicable to this problem, expressed as a string value.",
"example": "400"
},
"required": true
}
},
{
"location": {
"jsonPath": "/paths/~1thing/delete/responses/404/content/application~1vnd.api+json/schema/properties/errors/items/properties/detail",
"conceptualPath": [
"operations",
"/thing",
"delete",
"responses",
"404",
"application/vnd.api+json",
"errors",
"items",
"detail"
],
"kind": "field",
"conceptualLocation": {
"method": "delete",
"path": "/thing",
"inResponse": {
"statusCode": "404",
"body": {
"contentType": "application/vnd.api+json"
}
},
"jsonSchemaTrail": [
"errors",
"items",
"detail"
]
}
},
"added": {
"key": "detail",
"flatSchema": {
"type": "string",
"format": "user-text",
"description": "A human-readable explanation specific to this occurrence of the problem.",
"example": "The request was missing these required fields: ..."
},
"required": true
}
},
{
"location": {
"jsonPath": "/paths/~1thing/delete/responses/404/content/application~1vnd.api+json/schema/properties/errors/items/properties/source",
"conceptualPath": [
"operations",
"/thing",
"delete",
"responses",
"404",
"application/vnd.api+json",
"errors",
"items",
"source"
],
"kind": "field",
"conceptualLocation": {
"method": "delete",
"path": "/thing",
"inResponse": {
"statusCode": "404",
"body": {
"contentType": "application/vnd.api+json"
}
},
"jsonSchemaTrail": [
"errors",
"items",
"source"
]
}
},
"added": {
"key": "source",
"flatSchema": {
"type": "object",
"additionalProperties": false,
"example": {
"pointer": "/data/attributes"
}
},
"required": false
}
},
{
"location": {
"jsonPath": "/paths/~1thing/delete/responses/404/content/application~1vnd.api+json/schema/properties/errors/items/properties/source/properties/pointer",
"conceptualPath": [
"operations",
"/thing",
"delete",
"responses",
"404",
"application/vnd.api+json",
"errors",
"items",
"source",
"pointer"
],
"kind": "field",
"conceptualLocation": {
"method": "delete",
"path": "/thing",
"inResponse": {
"statusCode": "404",
"body": {
"contentType": "application/vnd.api+json"
}
},
"jsonSchemaTrail": [
"errors",
"items",
"source",
"pointer"
]
}
},
"added": {
"key": "pointer",
"flatSchema": {
"type": "string",
"format": "path",
"description": "A JSON Pointer [RFC6901] to the associated entity in the request document.",
"example": "/data/attributes"
},
"required": false
}
},
{
"location": {
"jsonPath": "/paths/~1thing/delete/responses/404/content/application~1vnd.api+json/schema/properties/errors/items/properties/source/properties/parameter",
"conceptualPath": [
"operations",
"/thing",
"delete",
"responses",
"404",
"application/vnd.api+json",
"errors",
"items",
"source",
"parameter"
],
"kind": "field",
"conceptualLocation": {
"method": "delete",
"path": "/thing",
"inResponse": {
"statusCode": "404",
"body": {
"contentType": "application/vnd.api+json"
}
},
"jsonSchemaTrail": [
"errors",
"items",
"source",
"parameter"
]
}
},
"added": {
"key": "parameter",
"flatSchema": {
"type": "string",
"format": "parameter",
"description": "A string indicating which URI query parameter caused the error.",
"example": "param1"
},
"required": false
}
},
{
"location": {
"jsonPath": "/paths/~1thing/delete/responses/404/content/application~1vnd.api+json/schema/properties/errors/items/properties/meta",
"conceptualPath": [
"operations",
"/thing",
"delete",
"responses",
"404",
"application/vnd.api+json",
"errors",
"items",
"meta"
],
"kind": "field",
"conceptualLocation": {
"method": "delete",
"path": "/thing",
"inResponse": {
"statusCode": "404",
"body": {
"contentType": "application/vnd.api+json"
}
},
"jsonSchemaTrail": [
"errors",
"items",
"meta"
]
}
},
"added": {
"key": "meta",
"flatSchema": {
"type": "object",
"additionalProperties": true,
"example": {
"key": "value"
}
},
"required": false
}
},
{
"location": {
"jsonPath": "/paths/~1thing/delete/responses/404",
"conceptualPath": [
"operations",
"/thing",
"delete",
"responses",
"404"
],
"kind": "response",
"conceptualLocation": {
"method": "delete",
"path": "/thing",
"inResponse": {
"statusCode": "404"
}
}
},
"added": {
"description": "Not Found: The resource being operated on could not be found.",
"statusCode": 404
}
},
{
"location": {
"jsonPath": "/paths/~1thing/delete/responses/409/headers/snyk-version-requested",
"conceptualPath": [
"operations",
"/thing",
"delete",
"responses",
"409",
"headers",
"snyk-version-requested"
],
"kind": "response-header",
"conceptualLocation": {
"method": "delete",
"path": "/thing",
"inResponse": {
"statusCode": "409",
"header": "snyk-version-requested"
}
}
},
"added": {
"name": "snyk-version-requested",
"description": "A header containing the version of the endpoint requested by the caller.",
"schema": {
"type": "string",
"pattern": "^(wip|work-in-progress|experimental|beta|(([0-9]{4})-([0-1][0-9]))-((3[01])|(0[1-9])|([12][0-9])))$"
}
}
},
{
"location": {
"jsonPath": "/paths/~1thing/delete/responses/409/headers/snyk-version-served",
"conceptualPath": [
"operations",
"/thing",
"delete",
"responses",
"409",
"headers",
"snyk-version-served"
],
"kind": "response-header",
"conceptualLocation": {
"method": "delete",
"path": "/thing",
"inResponse": {
"statusCode": "409",
"header": "snyk-version-served"
}
}
},
"added": {
"name": "snyk-version-served",
"description": "A header containing the version of the endpoint that was served by the API.",
"schema": {
"type": "string",
"pattern": "^(wip|work-in-progress|experimental|beta|(([0-9]{4})-([0-1][0-9]))-((3[01])|(0[1-9])|([12][0-9])))$"
}
}
},
{
"location": {
"jsonPath": "/paths/~1thing/delete/responses/409/headers/snyk-request-id",
"conceptualPath": [
"operations",
"/thing",
"delete",
"responses",
"409",
"headers",
"snyk-request-id"
],
"kind": "response-header",
"conceptualLocation": {
"method": "delete",
"path": "/thing",
"inResponse": {
"statusCode": "409",
"header": "snyk-request-id"
}
}
},
"added": {
"name": "snyk-request-id",
"description": "A header containing a unique id used for tracking this request. If you are reporting an issue to Snyk it's very helpful to provide this ID.\n",
"schema": {
"type": "string",
"format": "uuid"
}
}
},
{
"location": {
"jsonPath": "/paths/~1thing/delete/responses/409/headers/snyk-version-lifecycle-stage",
"conceptualPath": [
"operations",
"/thing",
"delete",
"responses",
"409",
"headers",
"snyk-version-lifecycle-stage"
],
"kind": "response-header",
"conceptualLocation": {
"method": "delete",
"path": "/thing",
"inResponse": {
"statusCode": "409",
"header": "snyk-version-lifecycle-stage"
}
}
},
"added": {
"name": "snyk-version-lifecycle-stage",
"description": "A header containing the version stage of the endpoint. This stage describes the guarantees snyk provides surrounding stability of the endpoint.\n",
"schema": {
"type": "string",
"enum": [
"wip",
"experimental",
"beta",
"ga",
"deprecated",
"sunset"
]
}
}
},
{
"location": {
"jsonPath": "/paths/~1thing/delete/responses/409/headers/deprecation",
"conceptualPath": [
"operations",
"/thing",
"delete",
"responses",
"409",
"headers",
"deprecation"
],
"kind": "response-header",
"conceptualLocation": {
"method": "delete",
"path": "/thing",
"inResponse": {
"statusCode": "409",
"header": "deprecation"
}
}
},
"added": {
"name": "deprecation",
"description": "A header containing the deprecation date of the underlying endpoint. For more information, please refer to the deprecation header RFC:\nhttps://tools.ietf.org/id/draft-dalal-deprecation-header-01.html\n",
"schema": {
"type": "string",
"format": "date-time"
}
}
},
{
"location": {
"jsonPath": "/paths/~1thing/delete/responses/409/headers/sunset",
"conceptualPath": [
"operations",
"/thing",
"delete",
"responses",
"409",
"headers",
"sunset"
],
"kind": "response-header",
"conceptualLocation": {
"method": "delete",
"path": "/thing",
"inResponse": {
"statusCode": "409",
"header": "sunset"
}
}
},
"added": {
"name": "sunset",
"description": "A header containing the date of when the underlying endpoint will be removed. This header is only present if the endpoint has been deprecated. Please refer to the RFC for more information:\nhttps://datatracker.ietf.org/doc/html/rfc8594\n",
"schema": {
"type": "string",
"format": "date-time"
}
}
},
{
"location": {
"jsonPath": "/paths/~1thing/delete/responses/409/content/application~1vnd.api+json",
"conceptualPath": [
"operations",
"/thing",
"delete",
"responses",
"409",
"application/vnd.api+json"
],
"kind": "body",
"conceptualLocation": {
"method": "delete",
"path": "/thing",
"inResponse": {
"statusCode": "409",
"body": {
"contentType": "application/vnd.api+json"
}
}
}
},
"added": {
"contentType": "application/vnd.api+json",
"flatSchema": {
"type": "object",
"additionalProperties": false,
"example": {
"jsonapi": {
"version": "1.0"
},
"errors": [
{
"status": "403",
"detail": "Permission denied for this resource"
}
]
}
}
}
},
{
"location": {
"jsonPath": "/paths/~1thing/delete/responses/409/content/application~1vnd.api+json/schema/properties/jsonapi",
"conceptualPath": [
"operations",
"/thing",
"delete",
"responses",
"409",
"application/vnd.api+json",
"jsonapi"
],
"kind": "field",
"conceptualLocation": {
"method": "delete",
"path": "/thing",
"inResponse": {
"statusCode": "409",
"body": {
"contentType": "application/vnd.api+json"
}
},
"jsonSchemaTrail": [
"jsonapi"
]
}
},
"added": {
"key": "jsonapi",
"flatSchema": {
"type": "object",
"additionalProperties": false,
"example": {
"version": "1.0"
}
},
"required": true
}
},
{
"location": {
"jsonPath": "/paths/~1thing/delete/responses/409/content/application~1vnd.api+json/schema/properties/jsonapi/properties/version",
"conceptualPath": [
"operations",
"/thing",
"delete",
"responses",
"409",
"application/vnd.api+json",
"jsonapi",
"version"
],
"kind": "field",
"conceptualLocation": {
"method": "delete",
"path": "/thing",
"inResponse": {
"statusCode": "409",
"body": {
"contentType": "application/vnd.api+json"
}
},
"jsonSchemaTrail": [
"jsonapi",
"version"
]
}
},
"added": {
"key": "version",
"flatSchema": {
"type": "string",
"format": "semver",
"description": "Version of the JSON API specification this server supports.",
"example": "1.0"
},
"required": true
}
},
{
"location": {
"jsonPath": "/paths/~1thing/delete/responses/409/content/application~1vnd.api+json/schema/properties/errors",
"conceptualPath": [
"operations",
"/thing",
"delete",
"responses",
"409",
"application/vnd.api+json",
"errors"
],
"kind": "field",
"conceptualLocation": {
"method": "delete",
"path": "/thing",
"inResponse": {
"statusCode": "409",
"body": {
"contentType": "application/vnd.api+json"
}
},
"jsonSchemaTrail": [
"errors"
]
}
},
"added": {
"key": "errors",
"flatSchema": {
"type": "array",
"minItems": 1,
"example": [
{
"status": "403",
"detail": "Permission denied for this resource"
}
]
},
"required": true
}
},
{
"location": {
"jsonPath": "/paths/~1thing/delete/responses/409/content/application~1vnd.api+json/schema/properties/errors/items/properties/id",
"conceptualPath": [
"operations",
"/thing",
"delete",
"responses",
"409",
"application/vnd.api+json",
"errors",
"items",
"id"
],
"kind": "field",
"conceptualLocation": {
"method": "delete",
"path": "/thing",
"inResponse": {
"statusCode": "409",
"body": {
"contentType": "application/vnd.api+json"
}
},
"jsonSchemaTrail": [
"errors",
"items",
"id"
]
}
},
"added": {
"key": "id",
"flatSchema": {
"type": "string",
"format": "uuid",
"description": "A unique identifier for this particular occurrence of the problem.",
"example": "f16c31b5-6129-4571-add8-d589da9be524"
},
"required": false
}
},
{
"location": {
"jsonPath": "/paths/~1thing/delete/responses/409/content/application~1vnd.api+json/schema/properties/errors/items/properties/status",
"conceptualPath": [
"operations",
"/thing",
"delete",
"responses",
"409",
"application/vnd.api+json",
"errors",
"items",
"status"
],
"kind": "field",
"conceptualLocation": {
"method": "delete",
"path": "/thing",
"inResponse": {
"statusCode": "409",
"body": {
"contentType": "application/vnd.api+json"
}
},
"jsonSchemaTrail": [
"errors",
"items",
"status"
]
}
},
"added": {
"key": "status",
"flatSchema": {
"type": "string",
"pattern": "^[45]\\d\\d$",
"description": "The HTTP status code applicable to this problem, expressed as a string value.",
"example": "400"
},
"required": true
}
},
{
"location": {
"jsonPath": "/paths/~1thing/delete/responses/409/content/application~1vnd.api+json/schema/properties/errors/items/properties/detail",
"conceptualPath": [
"operations",
"/thing",
"delete",
"responses",
"409",
"application/vnd.api+json",
"errors",
"items",
"detail"
],
"kind": "field",
"conceptualLocation": {
"method": "delete",
"path": "/thing",
"inResponse": {
"statusCode": "409",
"body": {
"contentType": "application/vnd.api+json"
}
},
"jsonSchemaTrail": [
"errors",
"items",
"detail"
]
}
},
"added": {
"key": "detail",
"flatSchema": {
"type": "string",
"format": "user-text",
"description": "A human-readable explanation specific to this occurrence of the problem.",
"example": "The request was missing these required fields: ..."
},
"required": true
}
},
{
"location": {
"jsonPath": "/paths/~1thing/delete/responses/409/content/application~1vnd.api+json/schema/properties/errors/items/properties/source",
"conceptualPath": [
"operations",
"/thing",
"delete",
"responses",
"409",
"application/vnd.api+json",
"errors",
"items",
"source"
],
"kind": "field",
"conceptualLocation": {
"method": "delete",
"path": "/thing",
"inResponse": {
"statusCode": "409",
"body": {
"contentType": "application/vnd.api+json"
}
},
"jsonSchemaTrail": [
"errors",
"items",
"source"
]
}
},
"added": {
"key": "source",
"flatSchema": {
"type": "object",
"additionalProperties": false,
"example": {
"pointer": "/data/attributes"
}
},
"required": false
}
},
{
"location": {
"jsonPath": "/paths/~1thing/delete/responses/409/content/application~1vnd.api+json/schema/properties/errors/items/properties/source/properties/pointer",
"conceptualPath": [
"operations",
"/thing",
"delete",
"responses",
"409",
"application/vnd.api+json",
"errors",
"items",
"source",
"pointer"
],
"kind": "field",
"conceptualLocation": {
"method": "delete",
"path": "/thing",
"inResponse": {
"statusCode": "409",
"body": {
"contentType": "application/vnd.api+json"
}
},
"jsonSchemaTrail": [
"errors",
"items",
"source",
"pointer"
]
}
},
"added": {
"key": "pointer",
"flatSchema": {
"type": "string",
"format": "path",
"description": "A JSON Pointer [RFC6901] to the associated entity in the request document.",
"example": "/data/attributes"
},
"required": false
}
},
{
"location": {
"jsonPath": "/paths/~1thing/delete/responses/409/content/application~1vnd.api+json/schema/properties/errors/items/properties/source/properties/parameter",
"conceptualPath": [
"operations",
"/thing",
"delete",
"responses",
"409",
"application/vnd.api+json",
"errors",
"items",
"source",
"parameter"
],
"kind": "field",
"conceptualLocation": {
"method": "delete",
"path": "/thing",
"inResponse": {
"statusCode": "409",
"body": {
"contentType": "application/vnd.api+json"
}
},
"jsonSchemaTrail": [
"errors",
"items",
"source",
"parameter"
]
}
},
"added": {
"key": "parameter",
"flatSchema": {
"type": "string",
"format": "parameter",
"description": "A string indicating which URI query parameter caused the error.",
"example": "param1"
},
"required": false
}
},
{
"location": {
"jsonPath": "/paths/~1thing/delete/responses/409/content/application~1vnd.api+json/schema/properties/errors/items/properties/meta",
"conceptualPath": [
"operations",
"/thing",
"delete",
"responses",
"409",
"application/vnd.api+json",
"errors",
"items",
"meta"
],
"kind": "field",
"conceptualLocation": {
"method": "delete",
"path": "/thing",
"inResponse": {
"statusCode": "409",
"body": {
"contentType": "application/vnd.api+json"
}
},
"jsonSchemaTrail": [
"errors",
"items",
"meta"
]
}
},
"added": {
"key": "meta",
"flatSchema": {
"type": "object",
"additionalProperties": true,
"example": {
"key": "value"
}
},
"required": false
}
},
{
"location": {
"jsonPath": "/paths/~1thing/delete/responses/409",
"conceptualPath": [
"operations",
"/thing",
"delete",
"responses",
"409"
],
"kind": "response",
"conceptualLocation": {
"method": "delete",
"path": "/thing",
"inResponse": {
"statusCode": "409"
}
}
},
"added": {
"description": "Conflict: The requested operation conflicts with the current state of the resource in some way.",
"statusCode": 409
}
},
{
"location": {
"jsonPath": "/paths/~1thing/delete/responses/500/headers/snyk-version-requested",
"conceptualPath": [
"operations",
"/thing",
"delete",
"responses",
"500",
"headers",
"snyk-version-requested"
],
"kind": "response-header",
"conceptualLocation": {
"method": "delete",
"path": "/thing",
"inResponse": {
"statusCode": "500",
"header": "snyk-version-requested"
}
}
},
"added": {
"name": "snyk-version-requested",
"description": "A header containing the version of the endpoint requested by the caller.",
"schema": {
"type": "string",
"pattern": "^(wip|work-in-progress|experimental|beta|(([0-9]{4})-([0-1][0-9]))-((3[01])|(0[1-9])|([12][0-9])))$"
}
}
},
{
"location": {
"jsonPath": "/paths/~1thing/delete/responses/500/headers/snyk-version-served",
"conceptualPath": [
"operations",
"/thing",
"delete",
"responses",
"500",
"headers",
"snyk-version-served"
],
"kind": "response-header",
"conceptualLocation": {
"method": "delete",
"path": "/thing",
"inResponse": {
"statusCode": "500",
"header": "snyk-version-served"
}
}
},
"added": {
"name": "snyk-version-served",
"description": "A header containing the version of the endpoint that was served by the API.",
"schema": {
"type": "string",
"pattern": "^(wip|work-in-progress|experimental|beta|(([0-9]{4})-([0-1][0-9]))-((3[01])|(0[1-9])|([12][0-9])))$"
}
}
},
{
"location": {
"jsonPath": "/paths/~1thing/delete/responses/500/headers/snyk-request-id",
"conceptualPath": [
"operations",
"/thing",
"delete",
"responses",
"500",
"headers",
"snyk-request-id"
],
"kind": "response-header",
"conceptualLocation": {
"method": "delete",
"path": "/thing",
"inResponse": {
"statusCode": "500",
"header": "snyk-request-id"
}
}
},
"added": {
"name": "snyk-request-id",
"description": "A header containing a unique id used for tracking this request. If you are reporting an issue to Snyk it's very helpful to provide this ID.\n",
"schema": {
"type": "string",
"format": "uuid"
}
}
},
{
"location": {
"jsonPath": "/paths/~1thing/delete/responses/500/headers/snyk-version-lifecycle-stage",
"conceptualPath": [
"operations",
"/thing",
"delete",
"responses",
"500",
"headers",
"snyk-version-lifecycle-stage"
],
"kind": "response-header",
"conceptualLocation": {
"method": "delete",
"path": "/thing",
"inResponse": {
"statusCode": "500",
"header": "snyk-version-lifecycle-stage"
}
}
},
"added": {
"name": "snyk-version-lifecycle-stage",
"description": "A header containing the version stage of the endpoint. This stage describes the guarantees snyk provides surrounding stability of the endpoint.\n",
"schema": {
"type": "string",
"enum": [
"wip",
"experimental",
"beta",
"ga",
"deprecated",
"sunset"
]
}
}
},
{
"location": {
"jsonPath": "/paths/~1thing/delete/responses/500/headers/deprecation",
"conceptualPath": [
"operations",
"/thing",
"delete",
"responses",
"500",
"headers",
"deprecation"
],
"kind": "response-header",
"conceptualLocation": {
"method": "delete",
"path": "/thing",
"inResponse": {
"statusCode": "500",
"header": "deprecation"
}
}
},
"added": {
"name": "deprecation",
"description": "A header containing the deprecation date of the underlying endpoint. For more information, please refer to the deprecation header RFC:\nhttps://tools.ietf.org/id/draft-dalal-deprecation-header-01.html\n",
"schema": {
"type": "string",
"format": "date-time"
}
}
},
{
"location": {
"jsonPath": "/paths/~1thing/delete/responses/500/headers/sunset",
"conceptualPath": [
"operations",
"/thing",
"delete",
"responses",
"500",
"headers",
"sunset"
],
"kind": "response-header",
"conceptualLocation": {
"method": "delete",
"path": "/thing",
"inResponse": {
"statusCode": "500",
"header": "sunset"
}
}
},
"added": {
"name": "sunset",
"description": "A header containing the date of when the underlying endpoint will be removed. This header is only present if the endpoint has been deprecated. Please refer to the RFC for more information:\nhttps://datatracker.ietf.org/doc/html/rfc8594\n",
"schema": {
"type": "string",
"format": "date-time"
}
}
},
{
"location": {
"jsonPath": "/paths/~1thing/delete/responses/500/content/application~1vnd.api+json",
"conceptualPath": [
"operations",
"/thing",
"delete",
"responses",
"500",
"application/vnd.api+json"
],
"kind": "body",
"conceptualLocation": {
"method": "delete",
"path": "/thing",
"inResponse": {
"statusCode": "500",
"body": {
"contentType": "application/vnd.api+json"
}
}
}
},
"added": {
"contentType": "application/vnd.api+json",
"flatSchema": {
"type": "object",
"additionalProperties": false,
"example": {
"jsonapi": {
"version": "1.0"
},
"errors": [
{
"status": "403",
"detail": "Permission denied for this resource"
}
]
}
}
}
},
{
"location": {
"jsonPath": "/paths/~1thing/delete/responses/500/content/application~1vnd.api+json/schema/properties/jsonapi",
"conceptualPath": [
"operations",
"/thing",
"delete",
"responses",
"500",
"application/vnd.api+json",
"jsonapi"
],
"kind": "field",
"conceptualLocation": {
"method": "delete",
"path": "/thing",
"inResponse": {
"statusCode": "500",
"body": {
"contentType": "application/vnd.api+json"
}
},
"jsonSchemaTrail": [
"jsonapi"
]
}
},
"added": {
"key": "jsonapi",
"flatSchema": {
"type": "object",
"additionalProperties": false,
"example": {
"version": "1.0"
}
},
"required": true
}
},
{
"location": {
"jsonPath": "/paths/~1thing/delete/responses/500/content/application~1vnd.api+json/schema/properties/jsonapi/properties/version",
"conceptualPath": [
"operations",
"/thing",
"delete",
"responses",
"500",
"application/vnd.api+json",
"jsonapi",
"version"
],
"kind": "field",
"conceptualLocation": {
"method": "delete",
"path": "/thing",
"inResponse": {
"statusCode": "500",
"body": {
"contentType": "application/vnd.api+json"
}
},
"jsonSchemaTrail": [
"jsonapi",
"version"
]
}
},
"added": {
"key": "version",
"flatSchema": {
"type": "string",
"format": "semver",
"description": "Version of the JSON API specification this server supports.",
"example": "1.0"
},
"required": true
}
},
{
"location": {
"jsonPath": "/paths/~1thing/delete/responses/500/content/application~1vnd.api+json/schema/properties/errors",
"conceptualPath": [
"operations",
"/thing",
"delete",
"responses",
"500",
"application/vnd.api+json",
"errors"
],
"kind": "field",
"conceptualLocation": {
"method": "delete",
"path": "/thing",
"inResponse": {
"statusCode": "500",
"body": {
"contentType": "application/vnd.api+json"
}
},
"jsonSchemaTrail": [
"errors"
]
}
},
"added": {
"key": "errors",
"flatSchema": {
"type": "array",
"minItems": 1,
"example": [
{
"status": "403",
"detail": "Permission denied for this resource"
}
]
},
"required": true
}
},
{
"location": {
"jsonPath": "/paths/~1thing/delete/responses/500/content/application~1vnd.api+json/schema/properties/errors/items/properties/id",
"conceptualPath": [
"operations",
"/thing",
"delete",
"responses",
"500",
"application/vnd.api+json",
"errors",
"items",
"id"
],
"kind": "field",
"conceptualLocation": {
"method": "delete",
"path": "/thing",
"inResponse": {
"statusCode": "500",
"body": {
"contentType": "application/vnd.api+json"
}
},
"jsonSchemaTrail": [
"errors",
"items",
"id"
]
}
},
"added": {
"key": "id",
"flatSchema": {
"type": "string",
"format": "uuid",
"description": "A unique identifier for this particular occurrence of the problem.",
"example": "f16c31b5-6129-4571-add8-d589da9be524"
},
"required": false
}
},
{
"location": {
"jsonPath": "/paths/~1thing/delete/responses/500/content/application~1vnd.api+json/schema/properties/errors/items/properties/status",
"conceptualPath": [
"operations",
"/thing",
"delete",
"responses",
"500",
"application/vnd.api+json",
"errors",
"items",
"status"
],
"kind": "field",
"conceptualLocation": {
"method": "delete",
"path": "/thing",
"inResponse": {
"statusCode": "500",
"body": {
"contentType": "application/vnd.api+json"
}
},
"jsonSchemaTrail": [
"errors",
"items",
"status"
]
}
},
"added": {
"key": "status",
"flatSchema": {
"type": "string",
"pattern": "^[45]\\d\\d$",
"description": "The HTTP status code applicable to this problem, expressed as a string value.",
"example": "400"
},
"required": true
}
},
{
"location": {
"jsonPath": "/paths/~1thing/delete/responses/500/content/application~1vnd.api+json/schema/properties/errors/items/properties/detail",
"conceptualPath": [
"operations",
"/thing",
"delete",
"responses",
"500",
"application/vnd.api+json",
"errors",
"items",
"detail"
],
"kind": "field",
"conceptualLocation": {
"method": "delete",
"path": "/thing",
"inResponse": {
"statusCode": "500",
"body": {
"contentType": "application/vnd.api+json"
}
},
"jsonSchemaTrail": [
"errors",
"items",
"detail"
]
}
},
"added": {
"key": "detail",
"flatSchema": {
"type": "string",
"format": "user-text",
"description": "A human-readable explanation specific to this occurrence of the problem.",
"example": "The request was missing these required fields: ..."
},
"required": true
}
},
{
"location": {
"jsonPath": "/paths/~1thing/delete/responses/500/content/application~1vnd.api+json/schema/properties/errors/items/properties/source",
"conceptualPath": [
"operations",
"/thing",
"delete",
"responses",
"500",
"application/vnd.api+json",
"errors",
"items",
"source"
],
"kind": "field",
"conceptualLocation": {
"method": "delete",
"path": "/thing",
"inResponse": {
"statusCode": "500",
"body": {
"contentType": "application/vnd.api+json"
}
},
"jsonSchemaTrail": [
"errors",
"items",
"source"
]
}
},
"added": {
"key": "source",
"flatSchema": {
"type": "object",
"additionalProperties": false,
"example": {
"pointer": "/data/attributes"
}
},
"required": false
}
},
{
"location": {
"jsonPath": "/paths/~1thing/delete/responses/500/content/application~1vnd.api+json/schema/properties/errors/items/properties/source/properties/pointer",
"conceptualPath": [
"operations",
"/thing",
"delete",
"responses",
"500",
"application/vnd.api+json",
"errors",
"items",
"source",
"pointer"
],
"kind": "field",
"conceptualLocation": {
"method": "delete",
"path": "/thing",
"inResponse": {
"statusCode": "500",
"body": {
"contentType": "application/vnd.api+json"
}
},
"jsonSchemaTrail": [
"errors",
"items",
"source",
"pointer"
]
}
},
"added": {
"key": "pointer",
"flatSchema": {
"type": "string",
"format": "path",
"description": "A JSON Pointer [RFC6901] to the associated entity in the request document.",
"example": "/data/attributes"
},
"required": false
}
},
{
"location": {
"jsonPath": "/paths/~1thing/delete/responses/500/content/application~1vnd.api+json/schema/properties/errors/items/properties/source/properties/parameter",
"conceptualPath": [
"operations",
"/thing",
"delete",
"responses",
"500",
"application/vnd.api+json",
"errors",
"items",
"source",
"parameter"
],
"kind": "field",
"conceptualLocation": {
"method": "delete",
"path": "/thing",
"inResponse": {
"statusCode": "500",
"body": {
"contentType": "application/vnd.api+json"
}
},
"jsonSchemaTrail": [
"errors",
"items",
"source",
"parameter"
]
}
},
"added": {
"key": "parameter",
"flatSchema": {
"type": "string",
"format": "parameter",
"description": "A string indicating which URI query parameter caused the error.",
"example": "param1"
},
"required": false
}
},
{
"location": {
"jsonPath": "/paths/~1thing/delete/responses/500/content/application~1vnd.api+json/schema/properties/errors/items/properties/meta",
"conceptualPath": [
"operations",
"/thing",
"delete",
"responses",
"500",
"application/vnd.api+json",
"errors",
"items",
"meta"
],
"kind": "field",
"conceptualLocation": {
"method": "delete",
"path": "/thing",
"inResponse": {
"statusCode": "500",
"body": {
"contentType": "application/vnd.api+json"
}
},
"jsonSchemaTrail": [
"errors",
"items",
"meta"
]
}
},
"added": {
"key": "meta",
"flatSchema": {
"type": "object",
"additionalProperties": true,
"example": {
"key": "value"
}
},
"required": false
}
},
{
"location": {
"jsonPath": "/paths/~1thing/delete/responses/500",
"conceptualPath": [
"operations",
"/thing",
"delete",
"responses",
"500"
],
"kind": "response",
"conceptualLocation": {
"method": "delete",
"path": "/thing",
"inResponse": {
"statusCode": "500"
}
}
},
"added": {
"description": "Internal Server Error: An error was encountered while attempting to process the request.",
"statusCode": 500
}
},
{
"location": {
"jsonPath": "/paths/~1thing~1{thing_id}/get/responses/200/content/application~1vnd.api+json/schema/properties/data/properties/attributes/properties/strangeness",
"conceptualPath": [
"operations",
"/thing/{}",
"get",
"responses",
"200",
"application/vnd.api+json",
"data",
"attributes",
"strangeness"
],
"kind": "field",
"conceptualLocation": {
"method": "get",
"path": "/thing/{thing_id}",
"inResponse": {
"statusCode": "200",
"body": {
"contentType": "application/vnd.api+json"
}
},
"jsonSchemaTrail": [
"data",
"attributes",
"strangeness"
]
}
},
"added": {
"key": "strangeness",
"flatSchema": {
"type": "number",
"description": "The amount of strangeness this thing adds or removes from the situation.",
"example": 42
},
"required": false
}
},
{
"location": {
"jsonPath": "/paths/~1thing~1{thing_id}/patch/responses/200/content/application~1vnd.api+json/schema/properties/data/properties/attributes/properties/strangeness",
"conceptualPath": [
"operations",
"/thing/{}",
"patch",
"responses",
"200",
"application/vnd.api+json",
"data",
"attributes",
"strangeness"
],
"kind": "field",
"conceptualLocation": {
"method": "patch",
"path": "/thing/{thing_id}",
"inResponse": {
"statusCode": "200",
"body": {
"contentType": "application/vnd.api+json"
}
},
"jsonSchemaTrail": [
"data",
"attributes",
"strangeness"
]
}
},
"added": {
"key": "strangeness",
"flatSchema": {
"type": "number",
"description": "The amount of strangeness this thing adds or removes from the situation.",
"example": 42
},
"required": false
}
}
]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment