{"openapi":"3.1.0","info":{"title":"Open VSX Registry API","description":"This API provides metadata of VS Code extensions in the Open VSX Registry as well as means to publish extensions.","termsOfService":"https://www.eclipse.org/legal/termsofuse.php","license":{"name":"Eclipse Public License 2.0","url":"https://www.eclipse.org/legal/epl-2.0/"},"version":"0.1"},"servers":[{"url":"https://open-vsx.org","description":"Generated server url"}],"paths":{"/api/user/publish":{"post":{"tags":["registry-api"],"summary":"Publish an extension by uploading a vsix file","operationId":"publish","requestBody":{"description":"Uploaded vsix file to publish","content":{"application/octet-stream":{"schema":{"type":"string","format":"binary"}}},"required":true},"responses":{"201":{"description":"Successfully published the extension","headers":{"X-RateLimit-Remaining":{"description":"Remaining number of requests left in the current time window","schema":{"format":"int32"}},"X-RateLimit-Limit":{"description":"Number of requests that can be made in a given amount of time","schema":{"format":"int32"}},"Location":{"description":"The URL of the extension metadata","style":"simple","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Extension"}}}},"400":{"description":"The extension could not be published","headers":{"X-RateLimit-Limit":{"description":"Number of requests that can be made in a given amount of time","schema":{"format":"int32"}},"X-RateLimit-Remaining":{"description":"Remaining number of requests left in the current time window","schema":{"format":"int32"}}},"content":{"application/json":{"example":{"error":"Unknown publisher: foobar"}}}},"403":{"description":"User is not logged in","headers":{"X-RateLimit-Limit":{"description":"Number of requests that can be made in a given amount of time","schema":{"format":"int32"}},"X-RateLimit-Remaining":{"description":"Remaining number of requests left in the current time window","schema":{"format":"int32"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Extension"}}}},"429":{"description":"A client has sent too many requests in a given amount of time","headers":{"X-RateLimit-Limit":{"description":"Number of requests that can be made in a given amount of time","schema":{"format":"int32"}},"Retry-After":{"description":"Number of seconds to wait after receiving a 429 response","schema":{"format":"int32"}},"X-RateLimit-Reset":{"description":"Number of seconds until the rate limit tokens will be fully filled to its maximum","schema":{"format":"int32"}},"X-RateLimit-Remaining":{"description":"Remaining number of requests left in the current time window","schema":{"format":"int32"}}}}}}},"/api/user/namespace/create":{"post":{"tags":["registry-api"],"summary":"Create a namespace","operationId":"createNamespace","requestBody":{"description":"Describes the namespace to create","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Namespace"}}},"required":true},"responses":{"201":{"description":"Successfully created the namespace","headers":{"X-RateLimit-Remaining":{"description":"Remaining number of requests left in the current time window","schema":{"format":"int32"}},"X-RateLimit-Limit":{"description":"Number of requests that can be made in a given amount of time","schema":{"format":"int32"}},"Location":{"description":"The URL of the namespace metadata","style":"simple","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Result"},"example":{"success":"Created namespace foobar"}}}},"400":{"description":"The namespace could not be created","headers":{"X-RateLimit-Limit":{"description":"Number of requests that can be made in a given amount of time","schema":{"format":"int32"}},"X-RateLimit-Remaining":{"description":"Remaining number of requests left in the current time window","schema":{"format":"int32"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Result"},"example":{"error":"Invalid access token."}}}},"403":{"description":"User is not logged in","headers":{"X-RateLimit-Limit":{"description":"Number of requests that can be made in a given amount of time","schema":{"format":"int32"}},"X-RateLimit-Remaining":{"description":"Remaining number of requests left in the current time window","schema":{"format":"int32"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Result"}}}},"429":{"description":"A client has sent too many requests in a given amount of time","headers":{"X-RateLimit-Limit":{"description":"Number of requests that can be made in a given amount of time","schema":{"format":"int32"}},"Retry-After":{"description":"Number of seconds to wait after receiving a 429 response","schema":{"format":"int32"}},"X-RateLimit-Reset":{"description":"Number of seconds until the rate limit tokens will be fully filled to its maximum","schema":{"format":"int32"}},"X-RateLimit-Remaining":{"description":"Remaining number of requests left in the current time window","schema":{"format":"int32"}}}}}}},"/api/-/query":{"get":{"tags":["registry-api"],"summary":"Provides metadata of extensions matching the given parameters","operationId":"getQuery","parameters":[{"name":"namespaceName","in":"query","description":"Name of a namespace","required":false,"schema":{"type":"string"},"example":"foo"},{"name":"extensionName","in":"query","description":"Name of an extension","required":false,"schema":{"type":"string"},"example":"bar"},{"name":"extensionVersion","in":"query","description":"Version of an extension","required":false,"schema":{"type":"string"},"example":1},{"name":"extensionId","in":"query","description":"Identifier in the format {namespace}.{extension}","required":false,"schema":{"type":"string"},"example":"foo.bar"},{"name":"extensionUuid","in":"query","description":"Universally unique identifier of an extension","required":false,"schema":{"type":"string"},"example":5678},{"name":"namespaceUuid","in":"query","description":"Universally unique identifier of a namespace","required":false,"schema":{"type":"string"},"example":1234},{"name":"includeAllVersions","in":"query","description":"Whether to include all versions of an extension, ignored if extensionVersion is specified","required":false,"schema":{"type":"boolean","default":false}},{"name":"targetPlatform","in":"query","description":"Target platform","required":false,"schema":{"type":"string","enum":["win32-x64","win32-ia32","win32-arm64","linux-x64","linux-arm64","linux-armhf","alpine-x64","alpine-arm64","darwin-x64","darwin-arm64","web","universal"]},"example":"linux-x64"},{"name":"size","in":"query","description":"Maximal number of entries to return","required":false,"schema":{"type":"integer","default":100,"maximum":1000,"minimum":0}},{"name":"offset","in":"query","description":"Number of entries to skip (usually a multiple of the page size)","required":false,"schema":{"type":"integer","default":0,"minimum":0}}],"responses":{"200":{"description":"Returns the (possibly empty) query results","headers":{"X-RateLimit-Limit":{"description":"Number of requests that can be made in a given amount of time","schema":{"format":"int32"}},"X-RateLimit-Remaining":{"description":"Remaining number of requests left in the current time window","schema":{"format":"int32"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/QueryResult"}}}},"400":{"description":"The request contains an invalid parameter value","headers":{"X-RateLimit-Limit":{"description":"Number of requests that can be made in a given amount of time","schema":{"format":"int32"}},"X-RateLimit-Remaining":{"description":"Remaining number of requests left in the current time window","schema":{"format":"int32"}}},"content":{"application/json":{"example":{"error":"The 'extensionId' parameter must have the format 'namespace.extension'."}}}},"429":{"description":"A client has sent too many requests in a given amount of time","headers":{"X-RateLimit-Limit":{"description":"Number of requests that can be made in a given amount of time","schema":{"format":"int32"}},"Retry-After":{"description":"Number of seconds to wait after receiving a 429 response","schema":{"format":"int32"}},"X-RateLimit-Reset":{"description":"Number of seconds until the rate limit tokens will be fully filled to its maximum","schema":{"format":"int32"}},"X-RateLimit-Remaining":{"description":"Remaining number of requests left in the current time window","schema":{"format":"int32"}}}}}},"post":{"tags":["registry-api"],"summary":"Provides metadata of extensions matching the given parameters. Deprecated: use GET /api/-/query instead.","operationId":"postQuery","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/QueryParam"}}},"required":true},"responses":{"301":{"description":"Returns redirect to GET /api/-/query.","headers":{"X-RateLimit-Limit":{"description":"Number of requests that can be made in a given amount of time","schema":{"format":"int32"}},"X-RateLimit-Remaining":{"description":"Remaining number of requests left in the current time window","schema":{"format":"int32"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/QueryResult"}}}},"429":{"description":"A client has sent too many requests in a given amount of time","headers":{"X-RateLimit-Limit":{"description":"Number of requests that can be made in a given amount of time","schema":{"format":"int32"}},"Retry-After":{"description":"Number of seconds to wait after receiving a 429 response","schema":{"format":"int32"}},"X-RateLimit-Reset":{"description":"Number of seconds until the rate limit tokens will be fully filled to its maximum","schema":{"format":"int32"}},"X-RateLimit-Remaining":{"description":"Remaining number of requests left in the current time window","schema":{"format":"int32"}}}}},"deprecated":true}},"/api/-/publish":{"post":{"tags":["registry-api"],"summary":"Publish an extension by uploading a vsix file","operationId":"publish_1","parameters":[{"name":"token","in":"query","description":"A personal access token","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Uploaded vsix file to publish","content":{"application/octet-stream":{"schema":{"type":"string","format":"binary"}}},"required":true},"responses":{"201":{"description":"Successfully published the extension","headers":{"X-RateLimit-Remaining":{"description":"Remaining number of requests left in the current time window","schema":{"format":"int32"}},"X-RateLimit-Limit":{"description":"Number of requests that can be made in a given amount of time","schema":{"format":"int32"}},"Location":{"description":"The URL of the extension metadata","style":"simple","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Extension"}}}},"400":{"description":"The extension could not be published","headers":{"X-RateLimit-Limit":{"description":"Number of requests that can be made in a given amount of time","schema":{"format":"int32"}},"X-RateLimit-Remaining":{"description":"Remaining number of requests left in the current time window","schema":{"format":"int32"}}},"content":{"application/json":{"example":{"error":"Invalid access token."}}}},"429":{"description":"A client has sent too many requests in a given amount of time","headers":{"X-RateLimit-Limit":{"description":"Number of requests that can be made in a given amount of time","schema":{"format":"int32"}},"Retry-After":{"description":"Number of seconds to wait after receiving a 429 response","schema":{"format":"int32"}},"X-RateLimit-Reset":{"description":"Number of seconds until the rate limit tokens will be fully filled to its maximum","schema":{"format":"int32"}},"X-RateLimit-Remaining":{"description":"Remaining number of requests left in the current time window","schema":{"format":"int32"}}}}}}},"/api/-/namespace/create":{"post":{"tags":["registry-api"],"summary":"Create a namespace","operationId":"createNamespace_1","parameters":[{"name":"token","in":"query","description":"A personal access token","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Namespace"}}},"required":true},"responses":{"201":{"description":"Successfully created the namespace","headers":{"X-RateLimit-Remaining":{"description":"Remaining number of requests left in the current time window","schema":{"format":"int32"}},"X-RateLimit-Limit":{"description":"Number of requests that can be made in a given amount of time","schema":{"format":"int32"}},"Location":{"description":"The URL of the namespace metadata","style":"simple","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Result"},"example":{"success":"Created namespace foobar"}}}},"400":{"description":"The namespace could not be created","headers":{"X-RateLimit-Limit":{"description":"Number of requests that can be made in a given amount of time","schema":{"format":"int32"}},"X-RateLimit-Remaining":{"description":"Remaining number of requests left in the current time window","schema":{"format":"int32"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Result"},"example":{"error":"Invalid access token."}}}},"429":{"description":"A client has sent too many requests in a given amount of time","headers":{"X-RateLimit-Limit":{"description":"Number of requests that can be made in a given amount of time","schema":{"format":"int32"}},"Retry-After":{"description":"Number of seconds to wait after receiving a 429 response","schema":{"format":"int32"}},"X-RateLimit-Reset":{"description":"Number of seconds until the rate limit tokens will be fully filled to its maximum","schema":{"format":"int32"}},"X-RateLimit-Remaining":{"description":"Remaining number of requests left in the current time window","schema":{"format":"int32"}}}}}}},"/api/{namespace}":{"get":{"tags":["registry-api"],"summary":"Provides metadata of a namespace","operationId":"getNamespace","parameters":[{"name":"namespace","in":"path","description":"Namespace name","required":true,"schema":{"type":"string"},"example":"eamodio"}],"responses":{"200":{"description":"The namespace metadata are returned in JSON format","headers":{"X-RateLimit-Limit":{"description":"Number of requests that can be made in a given amount of time","schema":{"format":"int32"}},"X-RateLimit-Remaining":{"description":"Remaining number of requests left in the current time window","schema":{"format":"int32"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Namespace"}}}},"404":{"description":"The specified namespace could not be found","headers":{"X-RateLimit-Limit":{"description":"Number of requests that can be made in a given amount of time","schema":{"format":"int32"}},"X-RateLimit-Remaining":{"description":"Remaining number of requests left in the current time window","schema":{"format":"int32"}}}},"429":{"description":"A client has sent too many requests in a given amount of time","headers":{"X-RateLimit-Limit":{"description":"Number of requests that can be made in a given amount of time","schema":{"format":"int32"}},"Retry-After":{"description":"Number of seconds to wait after receiving a 429 response","schema":{"format":"int32"}},"X-RateLimit-Reset":{"description":"Number of seconds until the rate limit tokens will be fully filled to its maximum","schema":{"format":"int32"}},"X-RateLimit-Remaining":{"description":"Remaining number of requests left in the current time window","schema":{"format":"int32"}}}}}}},"/api/{namespace}/{extension}":{"get":{"tags":["registry-api"],"summary":"Provides metadata of the latest version of an extension","operationId":"getExtension","parameters":[{"name":"namespace","in":"path","description":"Extension namespace","required":true,"schema":{"type":"string"},"example":"rust-lang"},{"name":"extension","in":"path","description":"Extension name","required":true,"schema":{"type":"string"},"example":"rust-analyzer"}],"responses":{"200":{"description":"The extension metadata are returned in JSON format","headers":{"X-RateLimit-Limit":{"description":"Number of requests that can be made in a given amount of time","schema":{"format":"int32"}},"X-RateLimit-Remaining":{"description":"Remaining number of requests left in the current time window","schema":{"format":"int32"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Extension"}}}},"404":{"description":"The specified extension could not be found","headers":{"X-RateLimit-Limit":{"description":"Number of requests that can be made in a given amount of time","schema":{"format":"int32"}},"X-RateLimit-Remaining":{"description":"Remaining number of requests left in the current time window","schema":{"format":"int32"}}}},"429":{"description":"A client has sent too many requests in a given amount of time","headers":{"X-RateLimit-Limit":{"description":"Number of requests that can be made in a given amount of time","schema":{"format":"int32"}},"Retry-After":{"description":"Number of seconds to wait after receiving a 429 response","schema":{"format":"int32"}},"X-RateLimit-Reset":{"description":"Number of seconds until the rate limit tokens will be fully filled to its maximum","schema":{"format":"int32"}},"X-RateLimit-Remaining":{"description":"Remaining number of requests left in the current time window","schema":{"format":"int32"}}}}}}},"/api/{namespace}/{extension}/{version}":{"get":{"tags":["registry-api"],"summary":"Provides metadata of a specific version of an extension","operationId":"getExtension_1","parameters":[{"name":"namespace","in":"path","description":"Extension namespace","required":true,"schema":{"type":"string"},"example":"TabNine"},{"name":"extension","in":"path","description":"Extension name","required":true,"schema":{"type":"string"},"example":"tabnine-vscode"},{"name":"version","in":"path","description":"Extension version","required":true,"schema":{"type":"string"},"example":"3.172.0"}],"responses":{"200":{"description":"The extension metadata are returned in JSON format","headers":{"X-RateLimit-Limit":{"description":"Number of requests that can be made in a given amount of time","schema":{"format":"int32"}},"X-RateLimit-Remaining":{"description":"Remaining number of requests left in the current time window","schema":{"format":"int32"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Extension"}}}},"404":{"description":"The specified extension could not be found","headers":{"X-RateLimit-Limit":{"description":"Number of requests that can be made in a given amount of time","schema":{"format":"int32"}},"X-RateLimit-Remaining":{"description":"Remaining number of requests left in the current time window","schema":{"format":"int32"}}}},"429":{"description":"A client has sent too many requests in a given amount of time","headers":{"X-RateLimit-Limit":{"description":"Number of requests that can be made in a given amount of time","schema":{"format":"int32"}},"Retry-After":{"description":"Number of seconds to wait after receiving a 429 response","schema":{"format":"int32"}},"X-RateLimit-Reset":{"description":"Number of seconds until the rate limit tokens will be fully filled to its maximum","schema":{"format":"int32"}},"X-RateLimit-Remaining":{"description":"Remaining number of requests left in the current time window","schema":{"format":"int32"}}}}}}},"/api/{namespace}/{extension}/{version}/file/**":{"get":{"tags":["registry-api"],"summary":"Access a file packaged by an extension","operationId":"getFile","parameters":[{"name":"namespace","in":"path","description":"Extension namespace","required":true,"schema":{"type":"string"},"example":"astro-build"},{"name":"extension","in":"path","description":"Extension name","required":true,"schema":{"type":"string"},"example":"astro-vscode"},{"name":"version","in":"path","description":"Extension version","required":true,"schema":{"type":"string"},"example":"2.15.4"}],"responses":{"200":{"description":"The file content is returned","headers":{"X-RateLimit-Limit":{"description":"Number of requests that can be made in a given amount of time","schema":{"format":"int32"}},"X-RateLimit-Remaining":{"description":"Remaining number of requests left in the current time window","schema":{"format":"int32"}}},"content":{"*/*":{"schema":{"$ref":"#/components/schemas/StreamingResponseBody"}}}},"302":{"description":"The file is found at the specified location","headers":{"X-RateLimit-Remaining":{"description":"Remaining number of requests left in the current time window","schema":{"format":"int32"}},"X-RateLimit-Limit":{"description":"Number of requests that can be made in a given amount of time","schema":{"format":"int32"}},"Location":{"description":"The actual URL where the file can be accessed","style":"simple","schema":{"type":"string"}}}},"404":{"description":"The specified file could not be found","headers":{"X-RateLimit-Limit":{"description":"Number of requests that can be made in a given amount of time","schema":{"format":"int32"}},"X-RateLimit-Remaining":{"description":"Remaining number of requests left in the current time window","schema":{"format":"int32"}}}},"429":{"description":"A client has sent too many requests in a given amount of time","headers":{"X-RateLimit-Limit":{"description":"Number of requests that can be made in a given amount of time","schema":{"format":"int32"}},"Retry-After":{"description":"Number of seconds to wait after receiving a 429 response","schema":{"format":"int32"}},"X-RateLimit-Reset":{"description":"Number of seconds until the rate limit tokens will be fully filled to its maximum","schema":{"format":"int32"}},"X-RateLimit-Remaining":{"description":"Remaining number of requests left in the current time window","schema":{"format":"int32"}}}}}}},"/api/{namespace}/{extension}/{targetPlatform}":{"get":{"tags":["registry-api"],"summary":"Provides metadata of the latest version of an extension","operationId":"getExtension_2","parameters":[{"name":"namespace","in":"path","description":"Extension namespace","required":true,"schema":{"type":"string"},"example":"Dart-Code"},{"name":"extension","in":"path","description":"Extension name","required":true,"schema":{"type":"string"},"example":"flutter"},{"name":"targetPlatform","in":"path","description":"Target platform","required":true,"schema":{"type":"string","enum":["win32-x64","win32-ia32","win32-arm64","linux-x64","linux-arm64","linux-armhf","alpine-x64","alpine-arm64","darwin-x64","darwin-arm64","web","universal"]},"example":"linux-arm64"}],"responses":{"200":{"description":"The extension metadata are returned in JSON format","headers":{"X-RateLimit-Limit":{"description":"Number of requests that can be made in a given amount of time","schema":{"format":"int32"}},"X-RateLimit-Remaining":{"description":"Remaining number of requests left in the current time window","schema":{"format":"int32"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Extension"}}}},"404":{"description":"The specified extension could not be found","headers":{"X-RateLimit-Limit":{"description":"Number of requests that can be made in a given amount of time","schema":{"format":"int32"}},"X-RateLimit-Remaining":{"description":"Remaining number of requests left in the current time window","schema":{"format":"int32"}}}},"429":{"description":"A client has sent too many requests in a given amount of time","headers":{"X-RateLimit-Limit":{"description":"Number of requests that can be made in a given amount of time","schema":{"format":"int32"}},"Retry-After":{"description":"Number of seconds to wait after receiving a 429 response","schema":{"format":"int32"}},"X-RateLimit-Reset":{"description":"Number of seconds until the rate limit tokens will be fully filled to its maximum","schema":{"format":"int32"}},"X-RateLimit-Remaining":{"description":"Remaining number of requests left in the current time window","schema":{"format":"int32"}}}}}}},"/api/{namespace}/{extension}/{targetPlatform}/{version}":{"get":{"tags":["registry-api"],"summary":"Provides metadata of a specific version of an extension","operationId":"getExtension_3","parameters":[{"name":"namespace","in":"path","description":"Extension namespace","required":true,"schema":{"type":"string"},"example":"julialang"},{"name":"extension","in":"path","description":"Extension name","required":true,"schema":{"type":"string"},"example":"language-julia"},{"name":"targetPlatform","in":"path","description":"Target platform","required":true,"schema":{"type":"string","enum":["win32-x64","win32-ia32","win32-arm64","linux-x64","linux-arm64","linux-armhf","alpine-x64","alpine-arm64","darwin-x64","darwin-arm64","web","universal"]},"example":"linux-arm64"},{"name":"version","in":"path","description":"Extension version","required":true,"schema":{"type":"string"},"example":"1.124.2"}],"responses":{"200":{"description":"The extension metadata are returned in JSON format","headers":{"X-RateLimit-Limit":{"description":"Number of requests that can be made in a given amount of time","schema":{"format":"int32"}},"X-RateLimit-Remaining":{"description":"Remaining number of requests left in the current time window","schema":{"format":"int32"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Extension"}}}},"404":{"description":"The specified extension could not be found","headers":{"X-RateLimit-Limit":{"description":"Number of requests that can be made in a given amount of time","schema":{"format":"int32"}},"X-RateLimit-Remaining":{"description":"Remaining number of requests left in the current time window","schema":{"format":"int32"}}}},"429":{"description":"A client has sent too many requests in a given amount of time","headers":{"X-RateLimit-Limit":{"description":"Number of requests that can be made in a given amount of time","schema":{"format":"int32"}},"Retry-After":{"description":"Number of seconds to wait after receiving a 429 response","schema":{"format":"int32"}},"X-RateLimit-Reset":{"description":"Number of seconds until the rate limit tokens will be fully filled to its maximum","schema":{"format":"int32"}},"X-RateLimit-Remaining":{"description":"Remaining number of requests left in the current time window","schema":{"format":"int32"}}}}}}},"/api/{namespace}/{extension}/{targetPlatform}/{version}/file/**":{"get":{"tags":["registry-api"],"summary":"Access a file packaged by an extension","operationId":"getFile_1","parameters":[{"name":"namespace","in":"path","description":"Extension namespace","required":true,"schema":{"type":"string"},"example":"AdaCore"},{"name":"extension","in":"path","description":"Extension name","required":true,"schema":{"type":"string"},"example":"ada"},{"name":"targetPlatform","in":"path","description":"Target platform","required":true,"schema":{"type":"string","enum":["win32-x64","win32-ia32","win32-arm64","linux-x64","linux-arm64","linux-armhf","alpine-x64","alpine-arm64","darwin-x64","darwin-arm64","web","universal"]},"example":"linux-arm64"},{"name":"version","in":"path","description":"Extension version","required":true,"schema":{"type":"string"},"example":"24.0.6"}],"responses":{"200":{"description":"The file content is returned","headers":{"X-RateLimit-Limit":{"description":"Number of requests that can be made in a given amount of time","schema":{"format":"int32"}},"X-RateLimit-Remaining":{"description":"Remaining number of requests left in the current time window","schema":{"format":"int32"}}},"content":{"*/*":{"schema":{"$ref":"#/components/schemas/StreamingResponseBody"}}}},"302":{"description":"The file is found at the specified location","headers":{"X-RateLimit-Remaining":{"description":"Remaining number of requests left in the current time window","schema":{"format":"int32"}},"X-RateLimit-Limit":{"description":"Number of requests that can be made in a given amount of time","schema":{"format":"int32"}},"Location":{"description":"The actual URL where the file can be accessed","style":"simple","schema":{"type":"string"}}}},"404":{"description":"The specified file could not be found","headers":{"X-RateLimit-Limit":{"description":"Number of requests that can be made in a given amount of time","schema":{"format":"int32"}},"X-RateLimit-Remaining":{"description":"Remaining number of requests left in the current time window","schema":{"format":"int32"}}}},"429":{"description":"A client has sent too many requests in a given amount of time","headers":{"X-RateLimit-Limit":{"description":"Number of requests that can be made in a given amount of time","schema":{"format":"int32"}},"Retry-After":{"description":"Number of seconds to wait after receiving a 429 response","schema":{"format":"int32"}},"X-RateLimit-Reset":{"description":"Number of seconds until the rate limit tokens will be fully filled to its maximum","schema":{"format":"int32"}},"X-RateLimit-Remaining":{"description":"Remaining number of requests left in the current time window","schema":{"format":"int32"}}}}}}},"/api/{namespace}/{extension}/{targetPlatform}/versions":{"get":{"tags":["registry-api"],"summary":"Provides a map of versions matching an extension","operationId":"getVersions","parameters":[{"name":"namespace","in":"path","description":"Extension namespace","required":true,"schema":{"type":"string"},"example":"stateful"},{"name":"extension","in":"path","description":"Extension name","required":true,"schema":{"type":"string"},"example":"runme"},{"name":"targetPlatform","in":"path","description":"Target platform","required":true,"schema":{"type":"string","enum":["win32-x64","win32-ia32","win32-arm64","linux-x64","linux-arm64","linux-armhf","alpine-x64","alpine-arm64","darwin-x64","darwin-arm64","web","universal"]},"example":"linux-arm64"},{"name":"size","in":"query","description":"Maximal number of entries to return","required":false,"schema":{"type":"integer","default":18,"maximum":100,"minimum":0}},{"name":"offset","in":"query","description":"Number of entries to skip (usually a multiple of the page size)","required":false,"schema":{"type":"integer","default":0,"minimum":0}}],"responses":{"200":{"description":"The extension versions are returned in JSON format","headers":{"X-RateLimit-Limit":{"description":"Number of requests that can be made in a given amount of time","schema":{"format":"int32"}},"X-RateLimit-Remaining":{"description":"Remaining number of requests left in the current time window","schema":{"format":"int32"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Versions"}}}},"404":{"description":"The specified extension could not be found","headers":{"X-RateLimit-Limit":{"description":"Number of requests that can be made in a given amount of time","schema":{"format":"int32"}},"X-RateLimit-Remaining":{"description":"Remaining number of requests left in the current time window","schema":{"format":"int32"}}}},"429":{"description":"A client has sent too many requests in a given amount of time","headers":{"X-RateLimit-Limit":{"description":"Number of requests that can be made in a given amount of time","schema":{"format":"int32"}},"Retry-After":{"description":"Number of seconds to wait after receiving a 429 response","schema":{"format":"int32"}},"X-RateLimit-Reset":{"description":"Number of seconds until the rate limit tokens will be fully filled to its maximum","schema":{"format":"int32"}},"X-RateLimit-Remaining":{"description":"Remaining number of requests left in the current time window","schema":{"format":"int32"}}}}}}},"/api/{namespace}/{extension}/{targetPlatform}/version-references":{"get":{"tags":["registry-api"],"summary":"Provides a list of version references matching an extension","operationId":"getVersionReferences","parameters":[{"name":"namespace","in":"path","description":"Extension namespace","required":true,"schema":{"type":"string"},"example":"hashicorp"},{"name":"extension","in":"path","description":"Extension name","required":true,"schema":{"type":"string"},"example":"terraform"},{"name":"targetPlatform","in":"path","description":"Target platform","required":true,"schema":{"type":"string","enum":["win32-x64","win32-ia32","win32-arm64","linux-x64","linux-arm64","linux-armhf","alpine-x64","alpine-arm64","darwin-x64","darwin-arm64","web","universal"]},"example":"linux-arm64"},{"name":"size","in":"query","description":"Maximal number of entries to return","required":false,"schema":{"type":"integer","default":18,"maximum":100,"minimum":0}},{"name":"offset","in":"query","description":"Number of entries to skip (usually a multiple of the page size)","required":false,"schema":{"type":"integer","default":0,"minimum":0}}],"responses":{"200":{"description":"The extension version references are returned in JSON format","headers":{"X-RateLimit-Limit":{"description":"Number of requests that can be made in a given amount of time","schema":{"format":"int32"}},"X-RateLimit-Remaining":{"description":"Remaining number of requests left in the current time window","schema":{"format":"int32"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VersionReferences"}}}},"404":{"description":"The specified extension could not be found","headers":{"X-RateLimit-Limit":{"description":"Number of requests that can be made in a given amount of time","schema":{"format":"int32"}},"X-RateLimit-Remaining":{"description":"Remaining number of requests left in the current time window","schema":{"format":"int32"}}}},"429":{"description":"A client has sent too many requests in a given amount of time","headers":{"X-RateLimit-Limit":{"description":"Number of requests that can be made in a given amount of time","schema":{"format":"int32"}},"Retry-After":{"description":"Number of seconds to wait after receiving a 429 response","schema":{"format":"int32"}},"X-RateLimit-Reset":{"description":"Number of seconds until the rate limit tokens will be fully filled to its maximum","schema":{"format":"int32"}},"X-RateLimit-Remaining":{"description":"Remaining number of requests left in the current time window","schema":{"format":"int32"}}}}}}},"/api/{namespace}/{extension}/versions":{"get":{"tags":["registry-api"],"summary":"Provides a map of versions matching an extension","operationId":"getVersions_1","parameters":[{"name":"namespace","in":"path","description":"Extension namespace","required":true,"schema":{"type":"string"},"example":"vscodevim"},{"name":"extension","in":"path","description":"Extension name","required":true,"schema":{"type":"string"},"example":"vim"},{"name":"size","in":"query","description":"Maximal number of entries to return","required":false,"schema":{"type":"integer","default":18,"maximum":100,"minimum":0}},{"name":"offset","in":"query","description":"Number of entries to skip (usually a multiple of the page size)","required":false,"schema":{"type":"integer","default":0,"minimum":0}}],"responses":{"200":{"description":"The extension versions are returned in JSON format","headers":{"X-RateLimit-Limit":{"description":"Number of requests that can be made in a given amount of time","schema":{"format":"int32"}},"X-RateLimit-Remaining":{"description":"Remaining number of requests left in the current time window","schema":{"format":"int32"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Versions"}}}},"404":{"description":"The specified extension could not be found","headers":{"X-RateLimit-Limit":{"description":"Number of requests that can be made in a given amount of time","schema":{"format":"int32"}},"X-RateLimit-Remaining":{"description":"Remaining number of requests left in the current time window","schema":{"format":"int32"}}}},"429":{"description":"A client has sent too many requests in a given amount of time","headers":{"X-RateLimit-Limit":{"description":"Number of requests that can be made in a given amount of time","schema":{"format":"int32"}},"Retry-After":{"description":"Number of seconds to wait after receiving a 429 response","schema":{"format":"int32"}},"X-RateLimit-Reset":{"description":"Number of seconds until the rate limit tokens will be fully filled to its maximum","schema":{"format":"int32"}},"X-RateLimit-Remaining":{"description":"Remaining number of requests left in the current time window","schema":{"format":"int32"}}}}}}},"/api/{namespace}/{extension}/version-references":{"get":{"tags":["registry-api"],"summary":"Provides a list of version references matching an extension","operationId":"getVersionReferences_1","parameters":[{"name":"namespace","in":"path","description":"Extension namespace","required":true,"schema":{"type":"string"},"example":"svelte"},{"name":"extension","in":"path","description":"Extension name","required":true,"schema":{"type":"string"},"example":"svelte-vscode"},{"name":"size","in":"query","description":"Maximal number of entries to return","required":false,"schema":{"type":"integer","default":18,"maximum":100,"minimum":0}},{"name":"offset","in":"query","description":"Number of entries to skip (usually a multiple of the page size)","required":false,"schema":{"type":"integer","default":0,"minimum":0}}],"responses":{"200":{"description":"The extension version references are returned in JSON format","headers":{"X-RateLimit-Limit":{"description":"Number of requests that can be made in a given amount of time","schema":{"format":"int32"}},"X-RateLimit-Remaining":{"description":"Remaining number of requests left in the current time window","schema":{"format":"int32"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VersionReferences"}}}},"404":{"description":"The specified extension could not be found","headers":{"X-RateLimit-Limit":{"description":"Number of requests that can be made in a given amount of time","schema":{"format":"int32"}},"X-RateLimit-Remaining":{"description":"Remaining number of requests left in the current time window","schema":{"format":"int32"}}}},"429":{"description":"A client has sent too many requests in a given amount of time","headers":{"X-RateLimit-Limit":{"description":"Number of requests that can be made in a given amount of time","schema":{"format":"int32"}},"Retry-After":{"description":"Number of seconds to wait after receiving a 429 response","schema":{"format":"int32"}},"X-RateLimit-Reset":{"description":"Number of seconds until the rate limit tokens will be fully filled to its maximum","schema":{"format":"int32"}},"X-RateLimit-Remaining":{"description":"Remaining number of requests left in the current time window","schema":{"format":"int32"}}}}}}},"/api/{namespace}/{extension}/reviews":{"get":{"tags":["registry-api"],"summary":"Returns the list of reviews of an extension","operationId":"getReviews","parameters":[{"name":"namespace","in":"path","description":"Extension namespace","required":true,"schema":{"type":"string"},"example":"Prisma"},{"name":"extension","in":"path","description":"Extension name","required":true,"schema":{"type":"string"},"example":"prisma"}],"responses":{"200":{"description":"The reviews are returned in JSON format","headers":{"X-RateLimit-Limit":{"description":"Number of requests that can be made in a given amount of time","schema":{"format":"int32"}},"X-RateLimit-Remaining":{"description":"Remaining number of requests left in the current time window","schema":{"format":"int32"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReviewList"}}}},"404":{"description":"The specified extension could not be found","headers":{"X-RateLimit-Limit":{"description":"Number of requests that can be made in a given amount of time","schema":{"format":"int32"}},"X-RateLimit-Remaining":{"description":"Remaining number of requests left in the current time window","schema":{"format":"int32"}}}},"429":{"description":"A client has sent too many requests in a given amount of time","headers":{"X-RateLimit-Limit":{"description":"Number of requests that can be made in a given amount of time","schema":{"format":"int32"}},"Retry-After":{"description":"Number of seconds to wait after receiving a 429 response","schema":{"format":"int32"}},"X-RateLimit-Reset":{"description":"Number of seconds until the rate limit tokens will be fully filled to its maximum","schema":{"format":"int32"}},"X-RateLimit-Remaining":{"description":"Remaining number of requests left in the current time window","schema":{"format":"int32"}}}}}}},"/api/{namespace}/verify-pat":{"get":{"tags":["registry-api"],"summary":"Check if a personal access token is valid and is allowed to publish in a namespace","operationId":"verifyToken","parameters":[{"name":"namespace","in":"path","description":"Namespace","required":true,"schema":{"type":"string"},"example":"GitLab"},{"name":"token","in":"query","description":"A personal access token","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"The provided PAT is valid and is allowed to publish extensions in the namespace","headers":{"X-RateLimit-Limit":{"description":"Number of requests that can be made in a given amount of time","schema":{"format":"int32"}},"X-RateLimit-Remaining":{"description":"Remaining number of requests left in the current time window","schema":{"format":"int32"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Result"}}}},"400":{"description":"The token has no publishing permission in the namespace or is not valid","headers":{"X-RateLimit-Limit":{"description":"Number of requests that can be made in a given amount of time","schema":{"format":"int32"}},"X-RateLimit-Remaining":{"description":"Remaining number of requests left in the current time window","schema":{"format":"int32"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Result"}}}},"404":{"description":"The specified namespace could not be found","headers":{"X-RateLimit-Limit":{"description":"Number of requests that can be made in a given amount of time","schema":{"format":"int32"}},"X-RateLimit-Remaining":{"description":"Remaining number of requests left in the current time window","schema":{"format":"int32"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Result"}}}},"429":{"description":"A client has sent too many requests in a given amount of time","headers":{"X-RateLimit-Limit":{"description":"Number of requests that can be made in a given amount of time","schema":{"format":"int32"}},"Retry-After":{"description":"Number of seconds to wait after receiving a 429 response","schema":{"format":"int32"}},"X-RateLimit-Reset":{"description":"Number of seconds until the rate limit tokens will be fully filled to its maximum","schema":{"format":"int32"}},"X-RateLimit-Remaining":{"description":"Remaining number of requests left in the current time window","schema":{"format":"int32"}}}}}}},"/api/{namespace}/logo/{fileName}":{"get":{"tags":["registry-api"],"summary":"Provides logo of a namespace","operationId":"getNamespaceLogo","parameters":[{"name":"namespace","in":"path","description":"Namespace name","required":true,"schema":{"type":"string"},"example":"Codeium"},{"name":"fileName","in":"path","description":"Logo file name","required":true,"schema":{"type":"string"},"example":"logo-codeium.png"}],"responses":{"200":{"description":"The namespace details are returned in JSON format","headers":{"X-RateLimit-Limit":{"description":"Number of requests that can be made in a given amount of time","schema":{"format":"int32"}},"X-RateLimit-Remaining":{"description":"Remaining number of requests left in the current time window","schema":{"format":"int32"}}},"content":{"image/jpeg":{"schema":{"$ref":"#/components/schemas/StreamingResponseBody"}},"image/png":{"schema":{"$ref":"#/components/schemas/StreamingResponseBody"}}}},"404":{"description":"The specified namespace could not be found","headers":{"X-RateLimit-Limit":{"description":"Number of requests that can be made in a given amount of time","schema":{"format":"int32"}},"X-RateLimit-Remaining":{"description":"Remaining number of requests left in the current time window","schema":{"format":"int32"}}},"content":{"image/jpeg":{"schema":{"$ref":"#/components/schemas/StreamingResponseBody"}},"image/png":{"schema":{"$ref":"#/components/schemas/StreamingResponseBody"}}}},"429":{"description":"A client has sent too many requests in a given amount of time","headers":{"X-RateLimit-Limit":{"description":"Number of requests that can be made in a given amount of time","schema":{"format":"int32"}},"Retry-After":{"description":"Number of seconds to wait after receiving a 429 response","schema":{"format":"int32"}},"X-RateLimit-Reset":{"description":"Number of seconds until the rate limit tokens will be fully filled to its maximum","schema":{"format":"int32"}},"X-RateLimit-Remaining":{"description":"Remaining number of requests left in the current time window","schema":{"format":"int32"}}}}}}},"/api/{namespace}/details":{"get":{"tags":["registry-api"],"operationId":"getNamespaceDetails","parameters":[{"name":"namespace","in":"path","description":"Namespace name","required":true,"schema":{"type":"string"},"example":"devsense"}],"responses":{"200":{"description":"The namespace details are returned in JSON format","headers":{"X-RateLimit-Limit":{"description":"Number of requests that can be made in a given amount of time","schema":{"format":"int32"}},"X-RateLimit-Remaining":{"description":"Remaining number of requests left in the current time window","schema":{"format":"int32"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NamespaceDetails"}}}},"404":{"description":"The specified namespace could not be found","headers":{"X-RateLimit-Limit":{"description":"Number of requests that can be made in a given amount of time","schema":{"format":"int32"}},"X-RateLimit-Remaining":{"description":"Remaining number of requests left in the current time window","schema":{"format":"int32"}}}},"429":{"description":"A client has sent too many requests in a given amount of time","headers":{"X-RateLimit-Limit":{"description":"Number of requests that can be made in a given amount of time","schema":{"format":"int32"}},"Retry-After":{"description":"Number of seconds to wait after receiving a 429 response","schema":{"format":"int32"}},"X-RateLimit-Reset":{"description":"Number of seconds until the rate limit tokens will be fully filled to its maximum","schema":{"format":"int32"}},"X-RateLimit-Remaining":{"description":"Remaining number of requests left in the current time window","schema":{"format":"int32"}}}}}}},"/api/version":{"get":{"tags":["registry-api"],"summary":"Return the registry version","operationId":"getRegistryVersion","responses":{"200":{"description":"The registry version is returned in JSON format","headers":{"X-RateLimit-Limit":{"description":"Number of requests that can be made in a given amount of time","schema":{"format":"int32"}},"X-RateLimit-Remaining":{"description":"Remaining number of requests left in the current time window","schema":{"format":"int32"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegistryVersion"}}}},"404":{"description":"The registry version could not be determined","headers":{"X-RateLimit-Limit":{"description":"Number of requests that can be made in a given amount of time","schema":{"format":"int32"}},"X-RateLimit-Remaining":{"description":"Remaining number of requests left in the current time window","schema":{"format":"int32"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegistryVersion"}}}},"429":{"description":"A client has sent too many requests in a given amount of time","headers":{"X-RateLimit-Limit":{"description":"Number of requests that can be made in a given amount of time","schema":{"format":"int32"}},"Retry-After":{"description":"Number of seconds to wait after receiving a 429 response","schema":{"format":"int32"}},"X-RateLimit-Reset":{"description":"Number of seconds until the rate limit tokens will be fully filled to its maximum","schema":{"format":"int32"}},"X-RateLimit-Remaining":{"description":"Remaining number of requests left in the current time window","schema":{"format":"int32"}}}}}}},"/api/v2/-/query":{"get":{"tags":["registry-api"],"summary":"Provides metadata of extensions matching the given parameters","operationId":"getQueryV2","parameters":[{"name":"namespaceName","in":"query","description":"Name of a namespace","required":false,"schema":{"type":"string"},"example":"foo"},{"name":"extensionName","in":"query","description":"Name of an extension","required":false,"schema":{"type":"string"},"example":"bar"},{"name":"extensionVersion","in":"query","description":"Version of an extension","required":false,"schema":{"type":"string"},"example":1},{"name":"extensionId","in":"query","description":"Identifier in the format {namespace}.{extension}","required":false,"schema":{"type":"string"},"example":"foo.bar"},{"name":"extensionUuid","in":"query","description":"Universally unique identifier of an extension","required":false,"schema":{"type":"string"},"example":5678},{"name":"namespaceUuid","in":"query","description":"Universally unique identifier of a namespace","required":false,"schema":{"type":"string"},"example":1234},{"name":"includeAllVersions","in":"query","description":"Whether to include all versions of an extension","required":false,"schema":{"type":"string","default":"links","enum":["true","false","links"]}},{"name":"targetPlatform","in":"query","description":"Target platform","required":false,"schema":{"type":"string","enum":["win32-x64","win32-ia32","win32-arm64","linux-x64","linux-arm64","linux-armhf","alpine-x64","alpine-arm64","darwin-x64","darwin-arm64","web","universal"]},"example":"linux-x64"},{"name":"size","in":"query","description":"Maximal number of entries to return","required":false,"schema":{"type":"integer","default":100,"maximum":1000,"minimum":0}},{"name":"offset","in":"query","description":"Number of entries to skip (usually a multiple of the page size)","required":false,"schema":{"type":"integer","default":0,"minimum":0}}],"responses":{"200":{"description":"Returns the (possibly empty) query results","headers":{"X-RateLimit-Limit":{"description":"Number of requests that can be made in a given amount of time","schema":{"format":"int32"}},"X-RateLimit-Remaining":{"description":"Remaining number of requests left in the current time window","schema":{"format":"int32"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/QueryResult"}}}},"400":{"description":"The request contains an invalid parameter value","headers":{"X-RateLimit-Limit":{"description":"Number of requests that can be made in a given amount of time","schema":{"format":"int32"}},"X-RateLimit-Remaining":{"description":"Remaining number of requests left in the current time window","schema":{"format":"int32"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/QueryResult"}}}},"429":{"description":"A client has sent too many requests in a given amount of time","headers":{"X-RateLimit-Limit":{"description":"Number of requests that can be made in a given amount of time","schema":{"format":"int32"}},"Retry-After":{"description":"Number of seconds to wait after receiving a 429 response","schema":{"format":"int32"}},"X-RateLimit-Reset":{"description":"Number of seconds until the rate limit tokens will be fully filled to its maximum","schema":{"format":"int32"}},"X-RateLimit-Remaining":{"description":"Remaining number of requests left in the current time window","schema":{"format":"int32"}}}}}}},"/api/-/version-changes":{"get":{"tags":["registry-api"],"summary":"[Preview] Provides a paginated feed of the publicly visible transitions of extension versions","description":"**Preview** -- this endpoint may still change in a later release. Its parameters and the shape of its response are not covered by the usual compatibility expectations yet, so keep track of what you depend on and follow the release notes.\n\nEach entry reports one transition of a single extension version, ordered by the instant it happened, oldest first. A version that transitions repeatedly is reported once per transition rather than as a single entry that moves around, so that nothing is missed between two requests.\n\n### Reported states\n\n- **`ACTIVE`** -- the version is publicly available.\n- **`INACTIVE`** -- the version is not publicly available. Its files are still there and it can become `ACTIVE` again.\n- **`REMOVED`** -- the version is no longer available for download. Reported both for a version that was deleted and for one that was permanently purged, as either way the version is gone.\n\n### Transitions\n\n| From | To | Reported when |\n| --- | --- | --- |\n| _not in the feed_ | `ACTIVE` | the version was published and became publicly available |\n| `ACTIVE` | `INACTIVE` | the version was deactivated administratively, for instance because the publisher's contributions were revoked or their publisher agreement is no longer signed |\n| `INACTIVE` | `ACTIVE` | the version was reinstated and is publicly available again |\n| `ACTIVE`, `INACTIVE` | `REMOVED` | the version was deleted or purged |\n| `REMOVED` | `ACTIVE` | the version had been purged, freeing its identity, and the same version was published again |\n\nA deleted version keeps its identity permanently reserved as a tombstone and can never be published again, so `REMOVED` is the last entry it ever gets. An administrator can purge it instead, which drops that tombstone and frees the identity: the same namespace, extension, version and target platform can then be published again and continue in the feed with a fresh `ACTIVE` entry. `REMOVED` is therefore the current state of the coordinates an entry names, not a guarantee that they will never come back.\n\nTwo consecutive entries for the same version never report the same state. The instant a version became publicly available can be much later than the `timestamp` it was published at, for instance when activation waited on a scan.\n\n### Following the registry\n\nEvery response carries a `nextCursor`, the position of its last entry. Pass it back as `after` and the next response continues exactly where the previous one ended:\n\n1. Request the feed, leaving `after` out on the very first request.\n2. Process the entries in order.\n3. Store `nextCursor` and pass it as `after` on the next request.\n4. While `hasMore` is `true` there are further entries waiting, so request the next page straight away rather than waiting for the next poll.\n\nThe same loop serves a first full synchronisation, an hourly poll and a catch-up after days of downtime, and it neither repeats nor skips an entry in any of them. Storing `nextCursor` only after the entries have been processed means a consumer that dies mid-page reprocesses that page rather than losing it.\n\nA cursor is an opaque position in the feed, not a timestamp: it also identifies which of the transitions sharing an instant have been processed, which a timestamp cannot. Do not construct or parse one, and do not follow the feed by passing an entry's `lastUpdated` as `since` -- `since` is inclusive, so it reports the entries sharing that instant again, and no exclusive variant of it could avoid that without skipping entries instead.\n\n### Notes\n\n- `since` and `until` bound the range a request is interested in and are meant for one-off queries. Combining `since` with `after` is rejected, as the two disagree about where the response starts; `until` combines with `after` to catch up to a fixed end.\n- Entries are only ever appended and are never updated or reordered, so a cursor stays valid indefinitely.\n- The feed stops short of the present by a small margin, so a transition is reported a little after it happened rather than instantly. This is what lets a consumer that has caught up be sure it has missed nothing: an entry is only reported once the transaction recording it is certain to have committed. Requesting an `until` closer to the present than that reports nothing beyond the margin rather than skipping those entries -- they turn up on a later request.\n- Only changes in availability are reported. Editing the metadata of a version, such as its readme or its tags, is not a transition and produces no entry.\n- Responses may be cached for up to one minute. Polling faster than that gains a consumer nothing.\n","operationId":"getChanges","parameters":[{"name":"after","in":"query","description":"Continue after this position in the feed, as reported by the 'nextCursor' of a previous response. Cannot be combined with 'since'.","required":false,"schema":{"type":"string"},"example":"MjAyNi0wMS0xNFQwOTozMDoxMV8xMjM0"},{"name":"since","in":"query","description":"Only include entries at or after this date and time (ISO-8601). Meant for one-off queries; use 'after' to follow the feed.","required":false,"schema":{"type":"string"},"example":"2026-01-01T00:00:00Z"},{"name":"until","in":"query","description":"Only include entries before this date and time, exclusive (ISO-8601)","required":false,"schema":{"type":"string"},"example":"2026-02-01T00:00:00Z"},{"name":"size","in":"query","description":"Maximal number of entries to return","required":false,"schema":{"type":"integer","default":100,"maximum":1000,"minimum":1}}],"responses":{"200":{"description":"The changes are returned in JSON format","headers":{"X-RateLimit-Limit":{"description":"Number of requests that can be made in a given amount of time","schema":{"format":"int32"}},"X-RateLimit-Remaining":{"description":"Remaining number of requests left in the current time window","schema":{"format":"int32"}}},"content":{"application/json":{"example":{"changes":[{"namespace":"redhat","name":"java","version":"1.30.0","targetPlatform":"universal","state":"ACTIVE","timestamp":"2026-01-14T09:12:33Z","lastUpdated":"2026-01-14T09:12:33Z","url":"https://open-vsx.org/api/redhat/java/universal/1.30.0"},{"namespace":"redhat","name":"java","version":"1.29.0","targetPlatform":"universal","state":"REMOVED","timestamp":"2025-11-02T16:40:05Z","lastUpdated":"2026-01-14T09:30:11Z","url":"https://open-vsx.org/api/redhat/java/universal/1.29.0"}],"nextCursor":"MjAyNi0wMS0xNFQwOTozMDoxMV8xMjM0","hasMore":false}}}},"400":{"description":"The request contains an invalid parameter value","headers":{"X-RateLimit-Limit":{"description":"Number of requests that can be made in a given amount of time","schema":{"format":"int32"}},"X-RateLimit-Remaining":{"description":"Remaining number of requests left in the current time window","schema":{"format":"int32"}}},"content":{"application/json":{"example":{"error":"Invalid 'since' parameter: yesterday"}}}},"429":{"description":"A client has sent too many requests in a given amount of time","headers":{"X-RateLimit-Limit":{"description":"Number of requests that can be made in a given amount of time","schema":{"format":"int32"}},"Retry-After":{"description":"Number of seconds to wait after receiving a 429 response","schema":{"format":"int32"}},"X-RateLimit-Reset":{"description":"Number of seconds until the rate limit tokens will be fully filled to its maximum","schema":{"format":"int32"}},"X-RateLimit-Remaining":{"description":"Remaining number of requests left in the current time window","schema":{"format":"int32"}}}}},"x-preview":true}},"/api/-/search":{"get":{"tags":["registry-api"],"summary":"Search extensions via text entered by a user","operationId":"search","parameters":[{"name":"query","in":"query","description":"Query text for searching","required":false,"schema":{"type":"string"},"example":"javascript"},{"name":"category","in":"query","description":"Extension category as shown in the UI","required":false,"schema":{"type":"string"},"example":"Programming Languages"},{"name":"targetPlatform","in":"query","description":"Target platform","required":false,"schema":{"type":"string","enum":["win32-x64","win32-ia32","win32-arm64","linux-x64","linux-arm64","linux-armhf","alpine-x64","alpine-arm64","darwin-x64","darwin-arm64","web","universal"]},"example":"linux-arm64"},{"name":"size","in":"query","description":"Maximal number of entries to return","required":false,"schema":{"type":"integer","default":18,"maximum":1000,"minimum":0}},{"name":"offset","in":"query","description":"Number of entries to skip (usually a multiple of the page size)","required":false,"schema":{"type":"integer","default":0,"minimum":0}},{"name":"sortOrder","in":"query","description":"Descending or ascending sort order","required":false,"schema":{"type":"string","enum":["asc","desc"]}},{"name":"sortBy","in":"query","description":"Sort key (relevance is a weighted mix of various properties)","required":false,"schema":{"type":"string","enum":["relevance","timestamp","rating","downloadCount"]}},{"name":"includeAllVersions","in":"query","description":"Whether to include information on all available versions for each returned entry","required":false,"schema":{"type":"boolean","default":false}}],"responses":{"200":{"description":"The search results are returned in JSON format","headers":{"X-RateLimit-Limit":{"description":"Number of requests that can be made in a given amount of time","schema":{"format":"int32"}},"X-RateLimit-Remaining":{"description":"Remaining number of requests left in the current time window","schema":{"format":"int32"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchResult"}}}},"400":{"description":"The request contains an invalid parameter value","headers":{"X-RateLimit-Limit":{"description":"Number of requests that can be made in a given amount of time","schema":{"format":"int32"}},"X-RateLimit-Remaining":{"description":"Remaining number of requests left in the current time window","schema":{"format":"int32"}}},"content":{"application/json":{"example":{"error":"The parameter 'size' must not be negative."}}}},"429":{"description":"A client has sent too many requests in a given amount of time","headers":{"X-RateLimit-Limit":{"description":"Number of requests that can be made in a given amount of time","schema":{"format":"int32"}},"Retry-After":{"description":"Number of seconds to wait after receiving a 429 response","schema":{"format":"int32"}},"X-RateLimit-Reset":{"description":"Number of seconds until the rate limit tokens will be fully filled to its maximum","schema":{"format":"int32"}},"X-RateLimit-Remaining":{"description":"Remaining number of requests left in the current time window","schema":{"format":"int32"}}}}}}},"/api/-/public-key/{publicId}":{"get":{"tags":["registry-api"],"summary":"Access a public key file","operationId":"getPublicKey","parameters":[{"name":"publicId","in":"path","description":"Public ID of a public key file","required":true,"schema":{"type":"string"},"example":"92dea4de-80b5-4577-b27d-44cdcda82c63"}],"responses":{"200":{"description":"The file content is returned","headers":{"X-RateLimit-Limit":{"description":"Number of requests that can be made in a given amount of time","schema":{"format":"int32"}},"X-RateLimit-Remaining":{"description":"Remaining number of requests left in the current time window","schema":{"format":"int32"}}},"content":{"text/plain":{"schema":{"type":"string"}}}},"404":{"description":"The specified public key file could not be found","headers":{"X-RateLimit-Limit":{"description":"Number of requests that can be made in a given amount of time","schema":{"format":"int32"}},"X-RateLimit-Remaining":{"description":"Remaining number of requests left in the current time window","schema":{"format":"int32"}}}},"429":{"description":"A client has sent too many requests in a given amount of time","headers":{"X-RateLimit-Limit":{"description":"Number of requests that can be made in a given amount of time","schema":{"format":"int32"}},"Retry-After":{"description":"Number of seconds to wait after receiving a 429 response","schema":{"format":"int32"}},"X-RateLimit-Reset":{"description":"Number of seconds until the rate limit tokens will be fully filled to its maximum","schema":{"format":"int32"}},"X-RateLimit-Remaining":{"description":"Remaining number of requests left in the current time window","schema":{"format":"int32"}}}}}}}},"components":{"schemas":{"Badge":{"type":"object","description":"A badge to be shown in the sidebar of the extension page in the registry","properties":{"url":{"type":"string","description":"Image URL of the badge"},"href":{"type":"string","description":"The link users will follow when clicking the badge"},"description":{"type":"string"}}},"Extension":{"allOf":[{"$ref":"#/components/schemas/Result"},{"type":"object","properties":{"namespaceUrl":{"type":"string","description":"URL to get metadata of the extension's namespace"},"reviewsUrl":{"type":"string","description":"URL to get the list of reviews of this extension"},"files":{"type":"object","additionalProperties":{"type":"string"},"description":"Map of file types (download, manifest, icon, readme, license, changelog) to their respective URLs"},"name":{"type":"string","description":"Name of the extension"},"namespace":{"type":"string","description":"Namespace of the extension"},"targetPlatform":{"type":"string","description":"Name of the target platform","enum":["win32-x64","win32-ia32","win32-arm64","linux-x64","linux-arm64","linux-armhf","alpine-x64","alpine-arm64","darwin-x64","darwin-arm64","web","universal"]},"version":{"type":"string","description":"Selected version, or the latest version if none was specified"},"preRelease":{"type":"boolean","description":"Indicates whether this is a pre-release version"},"publishedBy":{"$ref":"#/components/schemas/User","description":"Data of the user who published this version"},"reviewStatus":{"type":"string","description":"Review/publishing status: published (active and visible to all), under_review (being reviewed), rejected (blocked)","enum":["published","under_review","rejected"]},"reviewMessage":{"type":"string","description":"Message explaining the review status (e.g., why extension was quarantined or rejected)"},"verified":{"type":"boolean","description":"The value 'true' means the publishing user is a privileged user or the publishing user is a member of the extension's namespace and the namespace has at least one owner."},"allVersions":{"type":"object","additionalProperties":{"type":"string","deprecated":true},"deprecated":true,"description":"Map of available versions to their metadata URLs. Deprecated: only returns the last 100 versions. Use allVersionsUrl instead."},"allVersionsUrl":{"type":"string","description":"URL to get a map of available versions to their metadata URLs."},"averageRating":{"type":"number","format":"double","description":"Average rating","maximum":5,"minimum":0},"downloadCount":{"type":"integer","format":"int32","description":"Number of downloads of the extension package","minimum":0},"reviewCount":{"type":"integer","format":"int64","description":"Number of reviews","minimum":0},"versionAlias":{"type":"array","description":"Available version aliases ('latest' or 'pre-release')","items":{"type":"string"}},"timestamp":{"type":"string","description":"Date and time when this version was published (ISO-8601)"},"preview":{"type":"boolean","description":"Indicates whether this is a preview extension"},"displayName":{"type":"string","description":"Name to be displayed in user interfaces"},"namespaceDisplayName":{"type":"string","description":"Namespace name to be displayed in user interfaces"},"description":{"type":"string"},"engines":{"type":"object","additionalProperties":{"type":"string"},"description":"Map of engine names to the respective version constraints"},"categories":{"type":"array","items":{"type":"string"}},"extensionKind":{"type":"array","description":"A list that indicates where the extension should run in remote configurations. Values are \"ui\" (run locally), \"workspace\" (run on remote machine) and \"web\"","items":{"type":"string"}},"tags":{"type":"array","items":{"type":"string"}},"license":{"type":"string","description":"License identifier"},"homepage":{"type":"string","description":"URL of the extension's homepage"},"repository":{"type":"string","description":"URL of the extension's source repository"},"sponsorLink":{"type":"string","description":"URL to sponsor the extension"},"bugs":{"type":"string","description":"URL of the extension's bug tracker"},"markdown":{"type":"string","description":"Markdown rendering engine to use in user interfaces","enum":["standard","github"]},"galleryColor":{"type":"string","description":"CSS color to use as background in user interfaces"},"galleryTheme":{"type":"string","description":"Theme type for user interfaces","enum":["light","dark"]},"localizedLanguages":{"type":"array","description":"Languages the extension has been translated in","items":{"type":"string"}},"qna":{"type":"string","description":"URL of the extension's Q&A page"},"badges":{"type":"array","description":"List of badges to display in user interfaces","items":{"$ref":"#/components/schemas/Badge"}},"dependencies":{"type":"array","description":"List of dependencies to other extensions","items":{"$ref":"#/components/schemas/ExtensionReference"}},"bundledExtensions":{"type":"array","description":"List of extensions bundled with this extension","items":{"$ref":"#/components/schemas/ExtensionReference"}},"downloads":{"type":"object","additionalProperties":{"type":"string"},"description":"Map of download links by target platform"},"allTargetPlatformVersions":{"type":"array","description":"Map of target platforms by extension version","items":{"$ref":"#/components/schemas/VersionTargetPlatformsJson"}},"url":{"type":"string","description":"version metadata URL"},"deprecated":{"type":"boolean","description":"Indicates whether the extension is deprecated"},"replacement":{"$ref":"#/components/schemas/ExtensionReplacement","description":"Reference to extension that replaces this extension when it's deprecated"},"downloadable":{"type":"boolean","description":"Whether to show downloads in user interfaces"}}}],"description":"Metadata of an extension","required":["name","namespace","namespaceDisplayName","namespaceUrl","publishedBy","reviewsUrl","timestamp","verified","version"]},"ExtensionReference":{"type":"object","description":"A reference to another extension in the registry","properties":{"url":{"type":"string","description":"URL to get metadata of the referenced extension"},"namespace":{"type":"string","description":"Namespace of the referenced extension"},"extension":{"type":"string","description":"Name of the referenced extension"}},"required":["extension","namespace","url"]},"ExtensionReplacement":{"type":"object","description":"Metadata of an extension replacement","properties":{"url":{"type":"string","description":"URL of the extension replacement"},"displayName":{"type":"string","description":"Name to be displayed in user interfaces"}}},"Namespace":{"allOf":[{"$ref":"#/components/schemas/Result"},{"type":"object","properties":{"name":{"type":"string","description":"Name of the namespace"},"extensions":{"type":"object","additionalProperties":{"type":"string"},"description":"Map of extension names to their metadata URLs (not required for creating)"},"verified":{"type":"boolean","description":"Indicates whether the namespace has an owner (not required for creating)"}}}],"description":"Metadata of a namespace","required":["name","verified"]},"NamespaceDetails":{"type":"object","description":"Details of a namespace","properties":{"success":{"type":"string","description":"Indicates success of the operation (omitted if a more specific result type is returned)"},"warning":{"type":"string","description":"Indicates a warning; when this is present, other properties can still be used"},"error":{"type":"string","description":"Indicates an error; when this is present, all other properties should be ignored"},"name":{"type":"string","description":"Name of the namespace"},"displayName":{"type":"string","description":"Display name of the namespace"},"description":{"type":"string","description":"Description of the namespace"},"logo":{"type":"string","description":"Logo URL of the namespace"},"website":{"type":"string","description":"Website URL of the namespace"},"supportLink":{"type":"string","description":"Support URL of the namespace"},"socialLinks":{"type":"object","additionalProperties":{"type":"string"},"description":"Map of social network names to their profile URLs"},"extensions":{"type":"array","description":"Map of extension names to their metadata URLs","items":{"$ref":"#/components/schemas/SearchEntry"}},"verified":{"type":"boolean","description":"Indicates whether the namespace has an owner"}},"required":["displayName","name","verified"]},"QueryParam":{"type":"object","description":"Parameters of the metadata query","properties":{"namespaceName":{"type":"string","description":"Name of a namespace"},"extensionName":{"type":"string","description":"Name of an extension"},"extensionVersion":{"type":"string","description":"Version of an extension"},"extensionId":{"type":"string","description":"Identifier in the format {namespace}.{extension}"},"extensionUuid":{"type":"string","description":"Universally unique identifier of an extension"},"namespaceUuid":{"type":"string","description":"Universally unique identifier of a namespace"},"includeAllVersions":{"type":"boolean","description":"Whether to include all versions of an extension, ignored if extensionVersion is specified"},"targetPlatform":{"type":"string","description":"Name of the target platform","enum":["win32-x64","win32-ia32","win32-arm64","linux-x64","linux-arm64","linux-armhf","alpine-x64","alpine-arm64","darwin-x64","darwin-arm64","web","universal"]},"size":{"type":"integer","format":"int32","default":100,"description":"Maximal number of entries to return","minimum":0},"offset":{"type":"integer","format":"int32","default":0,"description":"Number of entries to skip (usually a multiple of the page size)","minimum":0}}},"QueryResult":{"allOf":[{"$ref":"#/components/schemas/Result"},{"type":"object","properties":{"offset":{"type":"integer","format":"int32","description":"Number of skipped entries according to the query","minimum":0},"totalSize":{"type":"integer","format":"int32","description":"Total number of entries that match the query","minimum":0},"extensions":{"type":"array","description":"Extensions that match the given query (may be empty)","items":{"$ref":"#/components/schemas/Extension"}}}}],"description":"Metadata query result","required":["offset","totalSize"]},"RegistryVersion":{"type":"object","description":"Configuration of the registry service","properties":{"success":{"type":"string","description":"Indicates success of the operation (omitted if a more specific result type is returned)"},"warning":{"type":"string","description":"Indicates a warning; when this is present, other properties can still be used"},"error":{"type":"string","description":"Indicates an error; when this is present, all other properties should be ignored"},"version":{"type":"string","description":"Registry version"},"maxExtensionSize":{"type":"integer","format":"int64","description":"Maximum allowed extension package size in bytes"}},"required":["version"]},"Result":{"type":"object","description":"Generic result indicator","properties":{"success":{"type":"string","description":"Indicates success of the operation (omitted if a more specific result type is returned)"},"warning":{"type":"string","description":"Indicates a warning; when this is present, other properties can still be used"},"error":{"type":"string","description":"Indicates an error; when this is present, all other properties should be ignored"}}},"Review":{"type":"object","description":"A review of an extension","properties":{"user":{"$ref":"#/components/schemas/User","description":"Data of the user who posted this review"},"timestamp":{"type":"string","description":"Date and time when this review was posted (ISO-8601)"},"comment":{"type":"string"},"rating":{"type":"integer","format":"int32","description":"Number of stars","maximum":5,"minimum":0}},"required":["rating","timestamp","user"]},"ReviewList":{"allOf":[{"$ref":"#/components/schemas/Result"},{"type":"object","properties":{"reviews":{"type":"array","items":{"$ref":"#/components/schemas/Review"}}}}],"description":"List of reviews of an extension","required":["reviews"]},"SearchEntry":{"type":"object","description":"Summary of metadata of an extension","properties":{"url":{"type":"string","description":"URL to get the full metadata of the extension"},"files":{"type":"object","additionalProperties":{"type":"string"},"description":"Map of file types (download, manifest, icon, readme, license, changelog) to their respective URLs"},"name":{"type":"string","description":"Name of the extension"},"namespace":{"type":"string","description":"Namespace of the extension"},"version":{"type":"string","description":"The latest published version"},"timestamp":{"type":"string","description":"Date and time when this version was published (ISO-8601)"},"verified":{"type":"boolean","description":"The value 'true' means the publishing user is a privileged user or the publishing user is a member of the extension's namespace and the namespace has at least one owner."},"allVersions":{"type":"array","deprecated":true,"description":"Essential metadata of all available versions. Deprecated: only returns the last 100 versions. Use allVersionsUrl instead.","items":{"$ref":"#/components/schemas/VersionReference"}},"allVersionsUrl":{"type":"string","description":"URL to get essential metadata of all available versions."},"averageRating":{"type":"number","format":"double","description":"Average rating","maximum":5,"minimum":0},"reviewCount":{"type":"integer","format":"int64","description":"Number of reviews","minimum":0},"downloadCount":{"type":"integer","format":"int32","description":"Number of downloads of the extension package","minimum":0},"displayName":{"type":"string","description":"Name to be displayed in user interfaces"},"description":{"type":"string"},"deprecated":{"type":"boolean","description":"Indicates whether the extension is deprecated"}},"required":["files","name","namespace","timestamp","url","verified","version"]},"SearchResult":{"allOf":[{"$ref":"#/components/schemas/Result"},{"type":"object","properties":{"offset":{"type":"integer","format":"int32","description":"Number of skipped entries according to the search query","minimum":0},"totalSize":{"type":"integer","format":"int32","description":"Total number of entries that match the search query","minimum":0},"extensions":{"type":"array","description":"List of matching entries, limited to the size specified in the search query","items":{"$ref":"#/components/schemas/SearchEntry"}}}}],"description":"List of extensions matching a search query","required":["extensions","offset","totalSize"]},"StreamingResponseBody":{},"TargetPlatformActive":{"type":"object","description":"Target platform of an extension version and whether it is active","properties":{"targetPlatform":{"type":"string","description":"Name of the target platform","enum":["win32-x64","win32-ia32","win32-arm64","linux-x64","linux-arm64","linux-armhf","alpine-x64","alpine-arm64","darwin-x64","darwin-arm64","web","universal"]},"active":{"type":"boolean","description":"Whether this extension version for this target platform is active"},"removed":{"type":"boolean","description":"Whether this extension version for this target platform has been removed (soft-deleted)"}}},"User":{"allOf":[{"$ref":"#/components/schemas/Result"},{"type":"object","properties":{"loginName":{"type":"string","description":"Login name"},"fullName":{"type":"string","description":"Full name"},"avatarUrl":{"type":"string","description":"URL to the user's avatar image"},"homepage":{"type":"string","description":"URL to the user's profile page"},"provider":{"type":"string","description":"Authentication provider (e.g. github)"}}}],"description":"User data","required":["loginName"]},"VersionReference":{"type":"object","description":"Essential metadata of an extension version","properties":{"url":{"type":"string","description":"URL to get the full metadata of this version"},"files":{"type":"object","additionalProperties":{"type":"string"},"description":"Map of file types (download, manifest, icon, readme, license, changelog) to their respective URLs"},"version":{"type":"string"},"targetPlatform":{"type":"string","description":"Name of the target platform","enum":["win32-x64","win32-ia32","win32-arm64","linux-x64","linux-arm64","linux-armhf","alpine-x64","alpine-arm64","darwin-x64","darwin-arm64","web","universal"]},"engines":{"type":"object","additionalProperties":{"type":"string"},"description":"Map of engine names to the respective version constraints"}}},"VersionReferences":{"type":"object","description":"List of version references matching an extension","properties":{"success":{"type":"string","description":"Indicates success of the operation (omitted if a more specific result type is returned)"},"warning":{"type":"string","description":"Indicates a warning; when this is present, other properties can still be used"},"error":{"type":"string","description":"Indicates an error; when this is present, all other properties should be ignored"},"offset":{"type":"integer","format":"int32","description":"Number of skipped entries according to the version references request","minimum":0},"totalSize":{"type":"integer","format":"int32","description":"Total number of version references the extension has","minimum":0},"versions":{"type":"array","description":"Essential metadata of all available versions, limited to the size specified in the version references request","items":{"$ref":"#/components/schemas/VersionReference"}}},"required":["offset","totalSize","versions"]},"VersionTargetPlatformsJson":{"type":"object","properties":{"version":{"type":"string"},"targetPlatforms":{"type":"array","items":{"$ref":"#/components/schemas/TargetPlatformActive"}},"canDelete":{"type":"boolean"}}},"Versions":{"type":"object","description":"Map of versions matching an extension","properties":{"success":{"type":"string","description":"Indicates success of the operation (omitted if a more specific result type is returned)"},"warning":{"type":"string","description":"Indicates a warning; when this is present, other properties can still be used"},"error":{"type":"string","description":"Indicates an error; when this is present, all other properties should be ignored"},"offset":{"type":"integer","format":"int32","description":"Number of skipped entries according to the versions request","minimum":0},"totalSize":{"type":"integer","format":"int32","description":"Total number of versions the extension has","minimum":0},"versions":{"type":"object","additionalProperties":{"type":"string"},"description":"Map of versions, limited to the size specified in the versions request"}},"required":["offset","totalSize","versions"]}}}}