diff --git a/content/admin/monitoring-activity-in-your-enterprise/reviewing-audit-logs-for-your-enterprise/using-the-audit-log-api-for-your-enterprise.md b/content/admin/monitoring-activity-in-your-enterprise/reviewing-audit-logs-for-your-enterprise/using-the-audit-log-api-for-your-enterprise.md index 839a06c309..c16e6c9f88 100644 --- a/content/admin/monitoring-activity-in-your-enterprise/reviewing-audit-logs-for-your-enterprise/using-the-audit-log-api-for-your-enterprise.md +++ b/content/admin/monitoring-activity-in-your-enterprise/reviewing-audit-logs-for-your-enterprise/using-the-audit-log-api-for-your-enterprise.md @@ -121,7 +121,7 @@ For more information about the audit log REST API, see "[Enterprise administrati The query below searches for audit log events created on Jan 1st, 2022 in the `avocado-corp` enterprise, and return the first page with a maximum of 100 items per page using [REST API pagination](/rest/overview/resources-in-the-rest-api#pagination): ```shell -curl -H "Authorization: token TOKEN" \ +curl -H "Authorization: Bearer TOKEN" \ --request GET \ "https://api.github.com/enterprises/avocado-corp/audit-log?phrase=created:2022-01-01&page=1&per_page=100" ``` @@ -133,7 +133,7 @@ You can specify multiple search phrases, such as `created` and `actor`, by separ The query below searches for audit log events for pull requests, where the event occurred on or after Jan 1st, 2022 in the `avocado-corp` enterprise, and the action was performed by the `octocat` user: ```shell -curl -H "Authorization: token TOKEN" \ +curl -H "Authorization: Bearer TOKEN" \ --request GET \ "https://api.github.com/enterprises/avocado-corp/audit-log?phrase=action:pull_request+created:>=2022-01-01+actor:octocat" ``` diff --git a/content/admin/user-management/migrating-data-to-and-from-your-enterprise/exporting-migration-data-from-githubcom.md b/content/admin/user-management/migrating-data-to-and-from-your-enterprise/exporting-migration-data-from-githubcom.md index 77c7fffea0..d3757186db 100644 --- a/content/admin/user-management/migrating-data-to-and-from-your-enterprise/exporting-migration-data-from-githubcom.md +++ b/content/admin/user-management/migrating-data-to-and-from-your-enterprise/exporting-migration-data-from-githubcom.md @@ -44,7 +44,7 @@ The Migrations API is currently in a preview period, which means that the endpoi * Your access token for authentication. * A [list of the repositories](/free-pro-team@latest/rest/repos#list-organization-repositories) you want to migrate: ```shell - curl -H "Authorization: token GITHUB_ACCESS_TOKEN" \ + curl -H "Authorization: Bearer GITHUB_ACCESS_TOKEN" \ -X POST \ -H "Accept: application/vnd.github+json" \ -d'{"lock_repositories":true,"repositories":["orgname/reponame", "orgname/reponame"]}' \ @@ -59,7 +59,7 @@ The Migrations API is currently in a preview period, which means that the endpoi * Your access token for authentication. * The unique `id` of the migration: ```shell - curl -H "Authorization: token GITHUB_ACCESS_TOKEN" \ + curl -H "Authorization: Bearer GITHUB_ACCESS_TOKEN" \ -H "Accept: application/vnd.github+json" \ https://api.github.com/orgs/orgname/migrations/id ``` @@ -74,7 +74,7 @@ The Migrations API is currently in a preview period, which means that the endpoi * Your access token for authentication. * The unique `id` of the migration: ```shell - curl -H "Authorization: token GITHUB_ACCESS_TOKEN" \ + curl -H "Authorization: Bearer GITHUB_ACCESS_TOKEN" \ -H "Accept: application/vnd.github+json" \ -L -o migration_archive.tar.gz \ https://api.github.com/orgs/orgname/migrations/id/archive @@ -84,7 +84,7 @@ The Migrations API is currently in a preview period, which means that the endpoi * Your access token for authentication. * The unique `id` of the migration: ```shell - curl -H "Authorization: token GITHUB_ACCESS_TOKEN" \ + curl -H "Authorization: Bearer GITHUB_ACCESS_TOKEN" \ -X DELETE \ -H "Accept: application/vnd.github+json" \ https://api.github.com/orgs/orgname/migrations/id/archive diff --git a/content/admin/user-management/migrating-data-to-and-from-your-enterprise/migrating-data-to-your-enterprise.md b/content/admin/user-management/migrating-data-to-and-from-your-enterprise/migrating-data-to-your-enterprise.md index 0e8aa46005..c614ef94ce 100644 --- a/content/admin/user-management/migrating-data-to-and-from-your-enterprise/migrating-data-to-your-enterprise.md +++ b/content/admin/user-management/migrating-data-to-and-from-your-enterprise/migrating-data-to-your-enterprise.md @@ -133,7 +133,7 @@ To unlock the repositories on a {% data variables.product.prodname_dotcom_the_we * The unique `id` of the migration * The name of the repository to unlock ```shell -curl -H "Authorization: token GITHUB_ACCESS_TOKEN" -X DELETE \ +curl -H "Authorization: Bearer GITHUB_ACCESS_TOKEN" -X DELETE \ -H "Accept: application/vnd.github.wyandotte-preview+json" \ https://api.github.com/orgs/orgname/migrations/id/repos/repo_name/lock ``` @@ -142,7 +142,7 @@ curl -H "Authorization: token GITHUB_ACCESS_TOKEN" -X DELETE \ After unlocking the {% data variables.product.prodname_dotcom_the_website %} organization's repositories, you should delete every repository you previously migrated using [the repository delete endpoint](/rest/repos/#delete-a-repository). You'll need your access token for authentication: ```shell -curl -H "Authorization: token GITHUB_ACCESS_TOKEN" -X DELETE \ +curl -H "Authorization: Bearer GITHUB_ACCESS_TOKEN" -X DELETE \ https://api.github.com/repos/orgname/repo_name ``` diff --git a/content/developers/apps/building-github-apps/authenticating-with-github-apps.md b/content/developers/apps/building-github-apps/authenticating-with-github-apps.md index a31ac9c75d..e25b98006d 100644 --- a/content/developers/apps/building-github-apps/authenticating-with-github-apps.md +++ b/content/developers/apps/building-github-apps/authenticating-with-github-apps.md @@ -149,13 +149,19 @@ To authenticate with an installation access token, include it in the Authorizati ```shell $ curl -i \ --H "Authorization: token YOUR_INSTALLATION_ACCESS_TOKEN" \ +-H "Authorization: Bearer YOUR_INSTALLATION_ACCESS_TOKEN" \ -H "Accept: application/vnd.github+json" \ {% data variables.product.api_url_pre %}/installation/repositories ``` `YOUR_INSTALLATION_ACCESS_TOKEN` is the value you must replace. +{% note %} + +**Note:** {% data reusables.getting-started.bearer-vs-token %} + +{% endnote %} + ## Accessing API endpoints as an installation For a list of REST API endpoints that are available for use by {% data variables.product.prodname_github_apps %} using an installation access token, see "[Available Endpoints](/rest/overview/endpoints-available-for-github-apps)." diff --git a/content/developers/apps/building-github-apps/identifying-and-authorizing-users-for-github-apps.md b/content/developers/apps/building-github-apps/identifying-and-authorizing-users-for-github-apps.md index 389890bfaa..050d5d7a51 100644 --- a/content/developers/apps/building-github-apps/identifying-and-authorizing-users-for-github-apps.md +++ b/content/developers/apps/building-github-apps/identifying-and-authorizing-users-for-github-apps.md @@ -107,13 +107,13 @@ By default, the response takes the following form. The response parameters `expi The user's access token allows the GitHub App to make requests to the API on behalf of a user. - Authorization: token OAUTH-TOKEN + Authorization: Bearer OAUTH-TOKEN GET {% data variables.product.api_url_code %}/user For example, in curl you can set the Authorization header like this: ```shell -curl -H "Authorization: token OAUTH-TOKEN" {% data variables.product.api_url_pre %}/user +curl -H "Authorization: Bearer OAUTH-TOKEN" {% data variables.product.api_url_pre %}/user ``` ## Device flow @@ -132,12 +132,12 @@ The device flow allows you to authorize users for a headless app, such as a CLI Once you have an OAuth token for a user, you can check which installations that user can access. - Authorization: token OAUTH-TOKEN + Authorization: Bearer OAUTH-TOKEN GET /user/installations You can also check which repositories are accessible to a user for an installation. - Authorization: token OAUTH-TOKEN + Authorization: Bearer OAUTH-TOKEN GET /user/installations/:installation_id/repositories More details can be found in: [List app installations accessible to the user access token](/rest/apps#list-app-installations-accessible-to-the-user-access-token) and [List repositories accessible to the user access token](/rest/apps#list-repositories-accessible-to-the-user-access-token). diff --git a/content/developers/apps/building-oauth-apps/authorizing-oauth-apps.md b/content/developers/apps/building-oauth-apps/authorizing-oauth-apps.md index 134182eb65..16619daebe 100644 --- a/content/developers/apps/building-oauth-apps/authorizing-oauth-apps.md +++ b/content/developers/apps/building-oauth-apps/authorizing-oauth-apps.md @@ -106,13 +106,13 @@ Accept: application/xml The access token allows you to make requests to the API on a behalf of a user. - Authorization: token OAUTH-TOKEN + Authorization: Bearer OAUTH-TOKEN GET {% data variables.product.api_url_code %}/user For example, in curl you can set the Authorization header like this: ```shell -curl -H "Authorization: token OAUTH-TOKEN" {% data variables.product.api_url_pre %}/user +curl -H "Authorization: Bearer OAUTH-TOKEN" {% data variables.product.api_url_pre %}/user ``` ## Device flow diff --git a/content/developers/apps/building-oauth-apps/scopes-for-oauth-apps.md b/content/developers/apps/building-oauth-apps/scopes-for-oauth-apps.md index b0be653f27..e1e253fc5f 100644 --- a/content/developers/apps/building-oauth-apps/scopes-for-oauth-apps.md +++ b/content/developers/apps/building-oauth-apps/scopes-for-oauth-apps.md @@ -27,7 +27,7 @@ If your {% data variables.product.prodname_oauth_app %} doesn't have access to a Check headers to see what OAuth scopes you have, and what the API action accepts: ```shell -$ curl -H "Authorization: token OAUTH-TOKEN" {% data variables.product.api_url_pre %}/users/codertocat -I +$ curl -H "Authorization: Bearer OAUTH-TOKEN" {% data variables.product.api_url_pre %}/users/codertocat -I HTTP/2 200 X-OAuth-Scopes: repo, user X-Accepted-OAuth-Scopes: user diff --git a/content/graphql/guides/migrating-graphql-global-node-ids.md b/content/graphql/guides/migrating-graphql-global-node-ids.md index 34d985e126..aa6502c079 100644 --- a/content/graphql/guides/migrating-graphql-global-node-ids.md +++ b/content/graphql/guides/migrating-graphql-global-node-ids.md @@ -32,7 +32,7 @@ Here is an example request using cURL: ``` $ curl \ - -H "Authorization: token $GITHUB_TOKEN" \ + -H "Authorization: Bearer $GITHUB_TOKEN" \ -H "X-Github-Next-Global-ID: 1" \ https://api.github.com/graphql \ -d '{ "query": "{ node(id: \"MDQ6VXNlcjM0MDczMDM=\") { id } }" }' diff --git a/content/issues/planning-and-tracking-with-projects/automating-your-project/using-the-api-to-manage-projects.md b/content/issues/planning-and-tracking-with-projects/automating-your-project/using-the-api-to-manage-projects.md index c54635daf3..10ec1e1cf0 100644 --- a/content/issues/planning-and-tracking-with-projects/automating-your-project/using-the-api-to-manage-projects.md +++ b/content/issues/planning-and-tracking-with-projects/automating-your-project/using-the-api-to-manage-projects.md @@ -70,7 +70,7 @@ You can find the node ID of an organization project if you know the organization ```shell curl --request POST \ --url https://api.github.com/graphql \ - --header 'Authorization: token TOKEN' \ + --header 'Authorization: Bearer TOKEN' \ --data '{"query":"query{organization(login: \"ORGANIZATION\") {projectV2(number: NUMBER){id}}}"}' ``` {% endcurl %} @@ -94,7 +94,7 @@ You can also find the node ID of all projects in your organization. The followin ```shell curl --request POST \ --url https://api.github.com/graphql \ - --header 'Authorization: token TOKEN' \ + --header 'Authorization: Bearer TOKEN' \ --data '{"query":"{organization(login: \"ORGANIZATION\") {projectsV2(first: 20) {nodes {id title}}}}"}' ``` {% endcurl %} @@ -125,7 +125,7 @@ You can find the node ID of a user project if you know the project number. Repla ```shell curl --request POST \ --url https://api.github.com/graphql \ - --header 'Authorization: token TOKEN' \ + --header 'Authorization: Bearer TOKEN' \ --data '{"query":"query{user(login: \"USER\") {projectV2(number: NUMBER){id}}}"}' ``` {% endcurl %} @@ -149,7 +149,7 @@ You can also find the node ID for all of your projects. The following example wi ```shell curl --request POST \ --url https://api.github.com/graphql \ - --header 'Authorization: token TOKEN' \ + --header 'Authorization: Bearer TOKEN' \ --data '{"query":"{user(login: \"USER\") {projectsV2(first: 20) {nodes {id title}}}}"}' ``` {% endcurl %} @@ -180,7 +180,7 @@ The following example will return the ID, name, settings, and configuration for ```shell curl --request POST \ --url https://api.github.com/graphql \ - --header 'Authorization: token TOKEN' \ + --header 'Authorization: Bearer TOKEN' \ --data '{"query":"query{ node(id: \"PROJECT_ID\") { ... on ProjectV2 { fields(first: 20) { nodes { ... on ProjectV2Field { id name } ... on ProjectV2IterationField { id name configuration { iterations { startDate id }}} ... on ProjectV2SingleSelectField { id name options { id name }}}}}}}"}' ``` {% endcurl %} @@ -284,7 +284,7 @@ If you just need the name and ID of a field, and do not need information about i ```shell curl --request POST \ --url https://api.github.com/graphql \ - --header 'Authorization: token TOKEN' \ + --header 'Authorization: Bearer TOKEN' \ --data '{"query":"query{ node(id: \"PROJECT_ID\") { ... on ProjectV2 { fields(first: 20) { nodes { ... on ProjectV2FieldCommon { id name }}}}}}"}' ``` {% endcurl %} @@ -354,7 +354,7 @@ The following example will return the first 20 issues, pull requests, and draft ```shell curl --request POST \ --url https://api.github.com/graphql \ - --header 'Authorization: token TOKEN' \ + --header 'Authorization: Bearer TOKEN' \ --data '{"query":"query{ node(id: \"PROJECT_ID\") { ... on ProjectV2 { items(first: 20) { nodes{ id fieldValues(first: 8) { nodes{ ... on ProjectV2ItemFieldTextValue { text field { ... on ProjectV2FieldCommon { name }}} ... on ProjectV2ItemFieldDateValue { date field { ... on ProjectV2FieldCommon { name } } } ... on ProjectV2ItemFieldSingleSelectValue { name field { ... on ProjectV2FieldCommon { name }}}}} content{ ... on DraftIssue { title body } ...on Issue { title assignees(first: 10) { nodes{ login }}} ...on PullRequest { title assignees(first: 10) { nodes{ login }}}}}}}}}"}' ``` {% endcurl %} @@ -446,7 +446,7 @@ The following example will add an issue or pull request to your project. Replace ```shell curl --request POST \ --url https://api.github.com/graphql \ - --header 'Authorization: token TOKEN' \ + --header 'Authorization: Bearer TOKEN' \ --data '{"query":"mutation {addProjectV2ItemById(input: {projectId: \"PROJECT_ID\" contentId: \"CONTENT_ID\"}) {item {id}}}"}' ``` {% endcurl %} @@ -488,7 +488,7 @@ The following example will add a draft issue to your project. Replace `PROJECT_I ```shell curl --request POST \ --url https://api.github.com/graphql \ - --header 'Authorization: token TOKEN' \ + --header 'Authorization: Bearer TOKEN' \ --data '{"query":"mutation {addProjectV2DraftIssue(input: {projectId: "PROJECT_ID" title: "TITLE" body: "BODY"}) {item {id}}}"}' ``` {% endcurl %} @@ -528,7 +528,7 @@ The following example will update your project's settings. Replace `PROJECT_ID` ```shell curl --request POST \ --url https://api.github.com/graphql \ ---header 'Authorization: token TOKEN' \ +--header 'Authorization: Bearer TOKEN' \ --data '{"query":"mutation { updateProjectV2(input: { projectId: \"PROJECT_ID\", title: \"Project title\", public: false, readme: \"# Project README\n\nA long description\", shortDescription: \"A short description\"}) { projectV2 { id, title, readme, shortDescription }}}"}' ``` {% endcurl %} @@ -565,7 +565,7 @@ The following example will update the value of a text field for an item. Replace ```shell curl --request POST \ --url https://api.github.com/graphql \ - --header 'Authorization: token TOKEN' \ + --header 'Authorization: Bearer TOKEN' \ --data '{"query":"mutation {updateProjectV2ItemFieldValue( input: { projectId: "PROJECT_ID" itemId: "ITEM_ID" fieldId: "FIELD_ID" value: { text: "Updated text" }}) { projectV2Item { id }}}"}' ``` {% endcurl %} @@ -619,7 +619,7 @@ The following example will update the value of a single select field for an item ```shell curl --request POST \ --url https://api.github.com/graphql \ - --header 'Authorization: token TOKEN' \ + --header 'Authorization: Bearer TOKEN' \ --data '{"query":"mutation {updateProjectV2ItemFieldValue( input: { projectId: "PROJECT_ID" itemId: "ITEM_ID" fieldId: "FIELD_ID" value: { singleSelectOptionId: "OPTION_ID" }}) { projectV2Item { id }}}"}' ``` {% endcurl %} @@ -659,7 +659,7 @@ The following example will update the value of an iteration field for an item. ```shell curl --request POST \ --url https://api.github.com/graphql \ - --header 'Authorization: token TOKEN' \ + --header 'Authorization: Bearer TOKEN' \ --data '{"query":"mutation {updateProjectV2ItemFieldValue( input: { projectId: "PROJECT_ID" itemId: "ITEM_ID" fieldId: "FIELD_ID" value: { singleSelectOptionId: "OPTION_ID" }}) { projectV2Item { id }}}"}' ``` {% endcurl %} @@ -694,7 +694,7 @@ The following example will delete an item from a project. Replace `PROJECT_ID` w ```shell curl --request POST \ --url https://api.github.com/graphql \ - --header 'Authorization: token TOKEN' \ + --header 'Authorization: Bearer TOKEN' \ --data '{"query":"mutation {deleteProjectV2Item(input: {projectId: \"PROJECT_ID\" itemId: \"ITEM_ID\"}) {deletedItemId}}"}' ``` {% endcurl %} diff --git a/content/rest/guides/getting-started-with-the-rest-api.md b/content/rest/guides/getting-started-with-the-rest-api.md index dd9545f30b..8c54d89f60 100644 --- a/content/rest/guides/getting-started-with-the-rest-api.md +++ b/content/rest/guides/getting-started-with-the-rest-api.md @@ -166,7 +166,7 @@ curl --request GET \ {% note %} -**Note:** In most cases, you can use `Authorization: Bearer` or `Authorization: token`. JSON web tokens (JWTs) will only work with `Authorization: Bearer`. +**Note:** {% data reusables.getting-started.bearer-vs-token %} {% endnote %} diff --git a/content/rest/overview/other-authentication-methods.md b/content/rest/overview/other-authentication-methods.md index b75ab98525..d8147fdb5d 100644 --- a/content/rest/overview/other-authentication-methods.md +++ b/content/rest/overview/other-authentication-methods.md @@ -86,10 +86,16 @@ If you have two-factor authentication enabled, make sure you understand how to [ {% endnote %} +{% note %} + +**Note:** {% data reusables.getting-started.bearer-vs-token %} + +{% endnote %} + If you're using the API to access an organization that enforces [SAML SSO][saml-sso] for authentication, you'll need to create a personal access token (PAT) and [authorize the token][allowlist] for that organization. Visit the URL specified in `X-GitHub-SSO` to authorize the token for the organization. ```shell -$ curl -v -H "Authorization: token TOKEN" {% data variables.product.api_url_pre %}/repos/octodocs-test/test +$ curl -v -H "Authorization: Bearer TOKEN" {% data variables.product.api_url_pre %}/repos/octodocs-test/test > X-GitHub-SSO: required; url=https://github.com/orgs/octodocs-test/sso?authorization_request=AZSCKtL4U8yX1H3sCQIVnVgmjmon5fWxks5YrqhJgah0b2tlbl9pZM4EuMz4 { @@ -101,7 +107,7 @@ $ curl -v -H "Authorization: token TOKEN" {% data variables.product.api When requesting data that could come from multiple organizations (for example, [requesting a list of issues created by the user][user-issues]), the `X-GitHub-SSO` header indicates which organizations require you to authorize your personal access token: ```shell -$ curl -v -H "Authorization: token TOKEN" {% data variables.product.api_url_pre %}/user/issues +$ curl -v -H "Authorization: Bearer TOKEN" {% data variables.product.api_url_pre %}/user/issues > X-GitHub-SSO: partial-results; organizations=21955855,20582480 ``` diff --git a/content/rest/overview/resources-in-the-rest-api.md b/content/rest/overview/resources-in-the-rest-api.md index 19c7f3d34e..033f0ccd78 100644 --- a/content/rest/overview/resources-in-the-rest-api.md +++ b/content/rest/overview/resources-in-the-rest-api.md @@ -91,7 +91,7 @@ $ curl -u "username" {% data variables.product.api_url_pre %} ### OAuth2 token (sent in a header) ```shell -$ curl -H "Authorization: token OAUTH-TOKEN" {% data variables.product.api_url_pre %} +$ curl -H "Authorization: Bearer OAUTH-TOKEN" {% data variables.product.api_url_pre %} ``` {% note %} @@ -100,6 +100,12 @@ Note: GitHub recommends sending OAuth tokens using the Authorization header. {% endnote %} +{% note %} + +**Note:** {% data reusables.getting-started.bearer-vs-token %} + +{% endnote %} + Read [more about OAuth2](/apps/building-oauth-apps/). Note that OAuth2 tokens can be acquired using the [web application flow](/developers/apps/authorizing-oauth-apps#web-application-flow) for production applications. {% ifversion fpt or ghes or ghec %} diff --git a/content/rest/overview/troubleshooting.md b/content/rest/overview/troubleshooting.md index e7394d5a9c..72a862387a 100644 --- a/content/rest/overview/troubleshooting.md +++ b/content/rest/overview/troubleshooting.md @@ -55,13 +55,13 @@ curl -u my_user:my_password https://api.github.com/user/repos Instead, use a [personal access token](/github/authenticating-to-github/creating-a-personal-access-token-for-the-command-line) when testing endpoints or doing local development: ```bash -curl -H 'Authorization: token my_access_token' https://api.github.com/user/repos +curl -H 'Authorization: Bearer my_access_token' https://api.github.com/user/repos ``` For OAuth Apps, you should use the [web application flow](/apps/building-oauth-apps/authorizing-oauth-apps/#web-application-flow) to generate an OAuth token to use in the API call's header: ```bash -curl -H 'Authorization: token my-oauth-token' https://api.github.com/user/repos +curl -H 'Authorization: Bearer my-oauth-token' https://api.github.com/user/repos ``` ## Timeouts diff --git a/content/rest/quickstart.md b/content/rest/quickstart.md index b8bf64cd32..7c56fcf402 100644 --- a/content/rest/quickstart.md +++ b/content/rest/quickstart.md @@ -284,7 +284,7 @@ jobs: {% note %} - **Note:** In most cases, you can use `Authorization: Bearer` or `Authorization: token`. JSON web tokens (JWTs) only work with `Authorization: Bearer`. + **Note:** {% data reusables.getting-started.bearer-vs-token %} {% endnote %} diff --git a/data/reusables/getting-started/bearer-vs-token.md b/data/reusables/getting-started/bearer-vs-token.md new file mode 100644 index 0000000000..9dd0b62ada --- /dev/null +++ b/data/reusables/getting-started/bearer-vs-token.md @@ -0,0 +1 @@ +In most cases, you can use `Authorization: Bearer` or `Authorization: token` to pass a token. However, if you are passing a JSON web token (JWT), you must use `Authorization: Bearer`. \ No newline at end of file diff --git a/lib/enterprise-dates.json b/lib/enterprise-dates.json index 2b7116b577..a76b2e4a17 100644 --- a/lib/enterprise-dates.json +++ b/lib/enterprise-dates.json @@ -120,7 +120,7 @@ "deprecationDate": "2023-08-16" }, "3.7": { - "releaseDate": "2022-10-04", + "releaseDate": "2022-10-18", "deprecationDate": "2023-11-08" }, "3.8": {