{ "components": { "securitySchemes": { "accountSid_authToken": { "scheme": "basic", "type": "http" } }, "schemas": { "accounts_enum_status": { "type": "string", "enum": [ "active", "suspended", "closed" ] }, "accounts_enum_type": { "type": "string", "enum": [ "Trial", "Full" ] }, "iam.v1.get_keys": { "type": "object", "properties": { "sid": { "type": "string", "minLength": 34, "maxLength": 34, "pattern": "^SK[0-9a-fA-F]{32}$", "nullable": true, "description": "The unique string that we created to identify the Key resource." }, "friendly_name": { "type": "string", "nullable": true, "description": "The string that you assigned to describe the resource." }, "date_created": { "type": "string", "format": "date-time-rfc-2822", "nullable": true, "description": "The date and time in GMT that the resource was created specified in [RFC 2822](https://www.ietf.org/rfc/rfc2822.txt) format." }, "date_updated": { "type": "string", "format": "date-time-rfc-2822", "nullable": true, "description": "The date and time in GMT that the resource was last updated specified in [RFC 2822](https://www.ietf.org/rfc/rfc2822.txt) format." } } }, "iam.v1.key": { "type": "object", "properties": { "sid": { "type": "string", "minLength": 34, "maxLength": 34, "pattern": "^SK[0-9a-fA-F]{32}$", "nullable": true, "description": "The unique string that we created to identify the Key resource." }, "friendly_name": { "type": "string", "nullable": true, "description": "The string that you assigned to describe the resource.", "x-twilio": { "pii": { "handling": "standard", "deleteSla": 30 } } }, "date_created": { "type": "string", "format": "date-time-rfc-2822", "nullable": true, "description": "The date and time in GMT that the resource was created specified in [RFC 2822](https://www.ietf.org/rfc/rfc2822.txt) format." }, "date_updated": { "type": "string", "format": "date-time-rfc-2822", "nullable": true, "description": "The date and time in GMT that the resource was last updated specified in [RFC 2822](https://www.ietf.org/rfc/rfc2822.txt) format." }, "policy": { "nullable": true, "type": "object", "description": "The \\`Policy\\` object is a collection that specifies the allowed Twilio permissions for the restricted key.\nFor more information on the permissions available with restricted API keys, refer to the [Twilio documentation](https://www.twilio.com/docs/iam/api-keys/restricted-api-keys#permissions-available-with-restricted-api-keys)." } } }, "iam.v1.new_key": { "type": "object", "properties": { "sid": { "type": "string", "minLength": 34, "maxLength": 34, "pattern": "^SK[0-9a-fA-F]{32}$", "nullable": true, "description": "The unique string that that we created to identify the NewKey resource. You will use this as the basic-auth `user` when authenticating to the API." }, "friendly_name": { "type": "string", "nullable": true, "description": "The string that you assigned to describe the resource.", "x-twilio": { "pii": { "handling": "standard", "deleteSla": 30 } } }, "date_created": { "type": "string", "format": "date-time-rfc-2822", "nullable": true, "description": "The date and time in GMT that the API Key was created specified in [RFC 2822](https://www.ietf.org/rfc/rfc2822.txt) format." }, "date_updated": { "type": "string", "format": "date-time-rfc-2822", "nullable": true, "description": "The date and time in GMT that the new API Key was last updated specified in [RFC 2822](https://www.ietf.org/rfc/rfc2822.txt) format." }, "secret": { "type": "string", "nullable": true, "description": "The secret your application uses to sign Access Tokens and to authenticate to the REST API (you will use this as the basic-auth `password`). **Note that for security reasons, this field is ONLY returned when the API Key is first created.**" }, "policy": { "nullable": true, "type": "object", "description": "Collection of allow assertions." } } }, "new_key_enum_keytype": { "type": "string", "enum": [ "restricted" ] }, "role_enum_scope_type": { "type": "string", "enum": [ "ORGANIZATION", "ACCOUNT", "SUB_ACCOUNT", "RESOURCE" ] }, "oauth.v1.token": { "type": "object", "properties": { "access_token": { "type": "string", "nullable": true, "description": "Token which carries the necessary information to access a Twilio resource directly." }, "refresh_token": { "type": "string", "nullable": true, "description": "Token which carries the information necessary to get a new access token." }, "id_token": { "type": "string", "nullable": true, "description": "Token which carries the information necessary of user profile." }, "token_type": { "type": "string", "nullable": true, "description": "Token type" }, "expires_in": { "type": "integer", "format": "int64", "nullable": true } } }, "iam.v1.account_search_account": { "type": "object", "properties": { "accountSid": { "type": "string", "nullable": true }, "accountPath": { "type": "string", "nullable": true }, "status": { "type": "integer", "default": 0 }, "dormant": { "type": "boolean", "nullable": true }, "trial": { "type": "boolean", "nullable": true }, "memberPlatform": { "type": "string", "nullable": true }, "friendlyName": { "type": "string", "nullable": true }, "subaccount": { "type": "boolean", "nullable": true } } }, "iam.v1.account_search_list_meta": { "type": "object", "properties": { "previousToken": { "type": "string", "nullable": true }, "nextToken": { "type": "string", "nullable": true }, "pageSize": { "type": "integer", "default": 0 }, "totalPages": { "type": "integer", "default": 0 }, "totalResults": { "type": "integer", "default": 0 } } }, "iam.v1.account_search_role_response": { "type": "array", "items": { "type": "object", "properties": { "roleSid": { "type": "string" }, "friendlyName": { "type": "string", "nullable": true }, "description": { "type": "string", "nullable": true } } } }, "twilio.service_error_response": { "type": "object", "properties": { "code": { "description": "Twilio-specific error code", "type": "integer", "format": "int32" }, "message": { "description": "Error message", "type": "string" }, "more_info": { "description": "Link to Error Code References", "type": "string" }, "status": { "description": "HTTP response status code", "type": "integer", "format": "int32" } } }, "iam.v1.account_search_request": { "type": "object", "properties": { "searchString": { "type": "string", "nullable": true }, "parentAccountId": { "type": "string", "nullable": true }, "status": { "type": "array", "items": { "type": "integer" }, "nullable": true }, "dormant": { "type": "boolean", "nullable": true }, "trial": { "type": "boolean", "nullable": true } } }, "iam.v1.account_stats_response": { "type": "object", "properties": { "numberOfAccounts": { "type": "integer", "default": 0 } } } } }, "info": { "title": "Twilio - Iam", "description": "This is the public Twilio REST API.", "termsOfService": "https://www.twilio.com/legal/tos", "contact": { "name": "Twilio Support", "url": "https://support.twilio.com", "email": "support@twilio.com" }, "license": { "name": "Apache 2.0", "url": "https://www.apache.org/licenses/LICENSE-2.0.html" }, "version": "1.0.0" }, "openapi": "3.0.1", "paths": { "/v1/Keys": { "servers": [ { "url": "https://iam.twilio.com" } ], "description": "API keys", "x-twilio": { "defaultOutputProperties": [ "sid", "friendly_name", "date_created" ], "mountName": "get_api_keys", "className": "get_api_keys", "pathType": "list" }, "get": { "description": "Retrieve a list of all Keys for a account.", "tags": [ "IamV1GetApiKeys" ], "parameters": [ { "name": "AccountSid", "in": "query", "description": "The SID of the [Account](https://www.twilio.com/docs/iam/api/account) that created the Payments resource.", "schema": { "type": "string", "minLength": 34, "maxLength": 34, "pattern": "^AC[0-9a-fA-F]{32}$" }, "required": true, "examples": { "readEmpty": { "value": "ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" }, "readFull": { "value": "ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" } } }, { "name": "PageSize", "in": "query", "description": "How many resources to return in each list page. The default is 50, and the maximum is 1000.", "schema": { "type": "integer", "format": "int64", "minimum": 1, "maximum": 1000 } }, { "name": "Page", "in": "query", "description": "The page index. This value is simply for client state.", "schema": { "type": "integer", "minimum": 0 } }, { "name": "PageToken", "in": "query", "description": "The page token. This is provided by the API.", "schema": { "type": "string" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "type": "object", "properties": { "keys": { "type": "array", "items": { "$ref": "#/components/schemas/iam.v1.get_keys" } }, "meta": { "properties": { "first_page_url": { "format": "uri", "type": "string" }, "key": { "type": "string" }, "next_page_url": { "format": "uri", "nullable": true, "type": "string" }, "page": { "type": "integer" }, "page_size": { "type": "integer" }, "previous_page_url": { "format": "uri", "nullable": true, "type": "string" }, "url": { "format": "uri", "type": "string" } }, "type": "object" } }, "title": "ListGetKeysResponse" }, "examples": { "readEmpty": { "value": { "keys": [], "meta": { "page": 0, "page_size": 50, "first_page_url": "https://iam.twilio.com/v1/Keys?AccountSid=ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa&PageSize=50&Page=0", "previous_page_url": null, "url": "https://iam.twilio.com/v1/Keys?AccountSid=ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa&PageSize=50&Page=0", "next_page_url": null, "key": "keys" } } }, "readFull": { "value": { "keys": [ { "sid": "SKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "friendly_name": "foo", "date_created": "Mon, 13 Jun 2016 22:50:08 +0000", "date_updated": "Mon, 13 Jun 2016 22:50:08 +0000" }, { "sid": "SKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaab", "friendly_name": "bar", "date_created": "Mon, 13 Jun 2016 20:50:08 +0000", "date_updated": "Mon, 13 Jun 2016 20:50:08 +0000" } ], "meta": { "page": 0, "page_size": 50, "first_page_url": "https://iam.twilio.com/v1/Keys?AccountSid=ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa&PageSize=50&Page=0", "previous_page_url": null, "url": "https://iam.twilio.com/v1/Keys?AccountSid=ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa&PageSize=50&Page=0", "next_page_url": null, "key": "keys" } } } } } }, "headers": { "Access-Control-Allow-Origin": { "description": "Specify the origin(s) allowed to access the resource", "schema": { "type": "string" }, "example": "*" }, "Access-Control-Allow-Methods": { "description": "Specify the HTTP methods allowed when accessing the resource", "schema": { "type": "string" }, "example": "POST, OPTIONS" }, "Access-Control-Allow-Headers": { "description": "Specify the headers allowed when accessing the resource", "schema": { "type": "string" }, "example": "Content-Type, Authorization" }, "Access-Control-Allow-Credentials": { "description": "Indicates whether the browser should include credentials", "schema": { "type": "boolean" } }, "Access-Control-Expose-Headers": { "description": "Headers exposed to the client", "schema": { "type": "string", "example": "X-Custom-Header1, X-Custom-Header2" } } }, "description": "OK" } }, "security": [ { "accountSid_authToken": [] } ], "operationId": "ListGetKeys" }, "post": { "description": "Create a new Signing Key for the account making the request.", "tags": [ "IamV1NewApiKey" ], "responses": { "201": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/iam.v1.new_key" }, "examples": { "createStandardKey": { "value": { "sid": "SKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "friendly_name": "foo", "date_created": "Mon, 13 Jun 2016 22:50:08 +0000", "date_updated": "Mon, 13 Jun 2016 22:50:08 +0000", "secret": "foobar", "policy": null } }, "createRestrictedKey": { "value": { "sid": "SKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "friendly_name": "foo", "date_created": "Mon, 13 Jun 2016 22:50:08 +0000", "date_updated": "Mon, 13 Jun 2016 22:50:08 +0000", "secret": "foobar", "policy": { "allow": [ "/twilio/messaging/messages/read" ] } } } } } }, "headers": { "Access-Control-Allow-Origin": { "description": "Specify the origin(s) allowed to access the resource", "schema": { "type": "string" }, "example": "*" }, "Access-Control-Allow-Methods": { "description": "Specify the HTTP methods allowed when accessing the resource", "schema": { "type": "string" }, "example": "POST, OPTIONS" }, "Access-Control-Allow-Headers": { "description": "Specify the headers allowed when accessing the resource", "schema": { "type": "string" }, "example": "Content-Type, Authorization" }, "Access-Control-Allow-Credentials": { "description": "Indicates whether the browser should include credentials", "schema": { "type": "boolean" } }, "Access-Control-Expose-Headers": { "description": "Headers exposed to the client", "schema": { "type": "string", "example": "X-Custom-Header1, X-Custom-Header2" } } }, "description": "Created" } }, "security": [ { "accountSid_authToken": [] } ], "operationId": "CreateNewKey", "requestBody": { "content": { "application/x-www-form-urlencoded": { "schema": { "type": "object", "title": "CreateNewKeyRequest", "properties": { "AccountSid": { "type": "string", "minLength": 34, "maxLength": 34, "pattern": "^AC[0-9a-fA-F]{32}$", "description": "The SID of the [Account](https://www.twilio.com/docs/iam/api/account) that created the Payments resource." }, "FriendlyName": { "type": "string", "description": "A descriptive string that you create to describe the resource. It can be up to 64 characters long." }, "KeyType": { "type": "string", "$ref": "#/components/schemas/new_key_enum_keytype", "description": "The \\`KeyType\\` form parameter is used to specify the type of key you want to create.\n\n**Default Behavior**: If \\`KeyType\\` is not specified, the API will generate a standard key.\n\n**Restricted Key**: If \\`KeyType\\` is set to \\`restricted\\`, the API will create a new restricted key. In this case, a policy object is required to define the permissions." }, "Policy": { "description": "The \\`Policy\\` object is a collection that specifies the allowed Twilio permissions for the restricted key.\nFor more information on the permissions available with restricted API keys, refer to the [Twilio documentation](https://www.twilio.com/docs/iam/api-keys/restricted-api-keys#permissions-available-with-restricted-api-keys)." } }, "required": [ "AccountSid" ] }, "examples": { "createStandardKey": { "value": { "FriendlyName": "foo", "AccountSid": "ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" } }, "createRestrictedKey": { "value": { "FriendlyName": "foo", "AccountSid": "ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "KeyType": "restricted", "Policy": "{\"allow\":[\"/twilio/messaging/messages/read\"]}" } } } } } }, "x-twilio": { "mountName": "new_api_key" } } }, "/v1/Keys/{Sid}": { "servers": [ { "url": "https://iam.twilio.com" } ], "description": "API keys", "x-twilio": { "defaultOutputProperties": [ "sid", "friendly_name", "date_created" ], "mountName": "api_key", "pathType": "instance" }, "get": { "description": "Fetch a specific Key.", "tags": [ "IamV1ApiKey" ], "parameters": [ { "name": "Sid", "in": "path", "description": "The Twilio-provided string that uniquely identifies the Key resource to fetch.", "schema": { "type": "string", "minLength": 34, "maxLength": 34, "pattern": "^SK[0-9a-fA-F]{32}$" }, "required": true } ], "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/iam.v1.key" }, "examples": { "fetchStandardKey": { "value": { "sid": "SKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "friendly_name": "foo", "date_created": "Mon, 13 Jun 2016 22:50:08 +0000", "date_updated": "Mon, 13 Jun 2016 22:50:08 +0000", "policy": null } }, "fetchRestrictedKey": { "value": { "sid": "SKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "friendly_name": "foo", "date_created": "Mon, 13 Jun 2016 22:50:08 +0000", "date_updated": "Mon, 13 Jun 2016 22:50:08 +0000", "policy": { "allow": [ "/twilio/messaging/messages/read" ] } } } } } }, "headers": { "Access-Control-Allow-Origin": { "description": "Specify the origin(s) allowed to access the resource", "schema": { "type": "string" }, "example": "*" }, "Access-Control-Allow-Methods": { "description": "Specify the HTTP methods allowed when accessing the resource", "schema": { "type": "string" }, "example": "POST, OPTIONS" }, "Access-Control-Allow-Headers": { "description": "Specify the headers allowed when accessing the resource", "schema": { "type": "string" }, "example": "Content-Type, Authorization" }, "Access-Control-Allow-Credentials": { "description": "Indicates whether the browser should include credentials", "schema": { "type": "boolean" } }, "Access-Control-Expose-Headers": { "description": "Headers exposed to the client", "schema": { "type": "string", "example": "X-Custom-Header1, X-Custom-Header2" } } }, "description": "OK" } }, "security": [ { "accountSid_authToken": [] } ], "operationId": "FetchKey" }, "post": { "description": "Update a specific Key.", "tags": [ "IamV1ApiKey" ], "parameters": [ { "name": "Sid", "in": "path", "description": "The Twilio-provided string that uniquely identifies the Key resource to update.", "schema": { "type": "string", "minLength": 34, "maxLength": 34, "pattern": "^SK[0-9a-fA-F]{32}$" }, "required": true } ], "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/iam.v1.key" }, "examples": { "updateStandardKey": { "value": { "sid": "SKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "friendly_name": "foo", "date_created": "Mon, 13 Jun 2016 22:50:08 +0000", "date_updated": "Mon, 13 Jun 2016 22:50:08 +0000", "policy": null } }, "updateRestrictedKey": { "value": { "sid": "SKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "friendly_name": "foo", "date_created": "Mon, 13 Jun 2016 22:50:08 +0000", "date_updated": "Mon, 13 Jun 2016 22:50:08 +0000", "policy": { "allow": [ "/twilio/messaging/messages/read", "/twilio/messaging/messages/update" ] } } } } } }, "headers": { "Access-Control-Allow-Origin": { "description": "Specify the origin(s) allowed to access the resource", "schema": { "type": "string" }, "example": "*" }, "Access-Control-Allow-Methods": { "description": "Specify the HTTP methods allowed when accessing the resource", "schema": { "type": "string" }, "example": "POST, OPTIONS" }, "Access-Control-Allow-Headers": { "description": "Specify the headers allowed when accessing the resource", "schema": { "type": "string" }, "example": "Content-Type, Authorization" }, "Access-Control-Allow-Credentials": { "description": "Indicates whether the browser should include credentials", "schema": { "type": "boolean" } }, "Access-Control-Expose-Headers": { "description": "Headers exposed to the client", "schema": { "type": "string", "example": "X-Custom-Header1, X-Custom-Header2" } } }, "description": "OK" } }, "security": [ { "accountSid_authToken": [] } ], "operationId": "UpdateKey", "requestBody": { "content": { "application/x-www-form-urlencoded": { "schema": { "type": "object", "title": "UpdateKeyRequest", "properties": { "FriendlyName": { "type": "string", "description": "A descriptive string that you create to describe the resource. It can be up to 64 characters long." }, "Policy": { "description": "The \\`Policy\\` object is a collection that specifies the allowed Twilio permissions for the restricted key.\nFor more information on the permissions available with restricted API keys, refer to the [Twilio documentation](https://www.twilio.com/docs/iam/api-keys/restricted-api-keys#permissions-available-with-restricted-api-keys)." } } }, "examples": { "updateStandardKey": { "value": { "FriendlyName": "foo" } }, "updateRestrictedKey": { "value": { "FriendlyName": "foo", "Policy": "{\"allow\":[\"/twilio/messaging/messages/read\", \"/twilio/messaging/messages/update\"]}" } } } } } } }, "delete": { "description": "Delete a specific Key.", "tags": [ "IamV1ApiKey" ], "parameters": [ { "name": "Sid", "in": "path", "description": "The Twilio-provided string that uniquely identifies the Key resource to delete.", "schema": { "type": "string", "minLength": 34, "maxLength": 34, "pattern": "^SK[0-9a-fA-F]{32}$" }, "required": true } ], "responses": { "204": { "description": "The resource was deleted successfully." } }, "security": [ { "accountSid_authToken": [] } ], "operationId": "DeleteKey" } }, "/v1/token": { "servers": [ { "url": "https://iam.twilio.com" } ], "x-twilio": { "defaultOutputProperties": [], "pathType": "list" }, "post": { "security": [], "tags": [ "OauthV1Token" ], "summary": "Issues a new Access token (optionally identity_token & refresh_token) in exchange of Oauth grant", "operationId": "CreateToken", "responses": { "201": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/oauth.v1.token" }, "examples": { "create": { "value": { "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c", "refresh_token": "ghjbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c", "id_token": "eyJhbdGciOiIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c", "expires_in": 1438315200000, "token_type": "bearer" } } } } }, "description": "Created" } }, "requestBody": { "content": { "application/x-www-form-urlencoded": { "schema": { "type": "object", "title": "CreateTokenRequest", "properties": { "grant_type": { "type": "string", "description": "Grant type is a credential representing resource owner's authorization which can be used by client to obtain access token." }, "client_id": { "type": "string", "description": "A 34 character string that uniquely identifies this OAuth App." }, "client_secret": { "type": "string", "description": "The credential for confidential OAuth App." }, "code": { "type": "string", "description": "JWT token related to the authorization code grant type." }, "redirect_uri": { "type": "string", "description": "The redirect uri" }, "audience": { "type": "string", "description": "The targeted audience uri" }, "refresh_token": { "type": "string", "description": "JWT token related to refresh access token." }, "scope": { "type": "string", "description": "The scope of token" } }, "required": [ "grant_type", "client_id" ] }, "examples": { "create": { "value": { "client_id": "OQ7cda1a615f05a95634e643aaaf7081d7", "client_secret": "sUWblrQ4wx_aYkdAWjHXNvHinynkYOgBoiRyEQUeEntpgDEG47qnBFD98yoEzsTh", "grant_type": "client_credentials", "redirect_uri": "", "audience": "", "code": "", "refresh_token": "refresh_token", "scope": "scope" } } } } }, "required": true } } }, "/v1/Accounts/Search": {}, "/v1/Accounts/{accountSid}/Roles": {}, "/v1/Accounts/Stats": {} }, "servers": [ { "url": "https://iam.twilio.com" } ], "tags": [ { "name": "IamV1Account" }, { "name": "IamV1ApiKey" }, { "name": "IamV1Authenticate" }, { "name": "IamV1GetApiKeys" }, { "name": "IamV1Index" }, { "name": "IamV1NewApiKey" }, { "name": "IamV1Permission" }, { "name": "IamV1PolicyAssignment" }, { "name": "IamV1PublicKey" }, { "name": "IamV1RefreshToken" }, { "name": "IamV1Role" }, { "name": "IamV1RoleAssignmentBatch" }, { "name": "IamV1RoleBySid" }, { "name": "IamV1Saml2" }, { "name": "IamV1Token" }, { "name": "IamV1ValidateToken" }, { "name": "IamV1Version" } ], "security": [ { "accountSid_authToken": [] } ] }