diff --git a/content/data-protocols-formats/frontend-backend.md b/content/data-protocols-formats/frontend-backend.md
index 5c19ef3..1c65f01 100644
--- a/content/data-protocols-formats/frontend-backend.md
+++ b/content/data-protocols-formats/frontend-backend.md
@@ -447,6 +447,8 @@ The client application or user call the IDP token API to retrieve the following
In the [StartupRequest](#startuprequest), only access_token is required to be specified in **oauth_access_token** parameter, no client id/secret is included in the request. The 'user' parameter can be an empty string. The backend validates token using OAuth Introspect query. In case oauth_access_token is valid and permissions are sufficient, the backend sends [AuthenticationOk](#authenticationok-r), otherwise it responds with an [ErrorResponse](#errorresponse-e). Token refresh flow can be triggered by frontend after the token validation (if token introspection fails).
+> **Note**: It is not recommended for clients to implement this protocol version by default. [Protocol 3.12](#protocol-312) is the right way to pass oauth_access_token to servers. For backwards compatibility with v11.1SP1 - v12.0SP1 servers, clients can implement a parameter to include the oauth_access_token in the startup request.
+
#### (Protocol 3.12)
In the [StartupRequest](#startuprequest), if the 'auth_category' parameter is specified as "OAuth", the server will send the client an [AuthenticationOAuth](#authenticationoauth-r) message. The client will respond with a [Password](#password-p) message containing an OAuth access token. The backend validates token using OAuth Introspect query. In case the access token is valid and permissions are sufficient, the backend sends [AuthenticationOk](#authenticationok-r), otherwise it responds with an [ErrorResponse](#errorresponse-e). Token refresh flow can be triggered by frontend after the token validation (if token introspection fails).
@@ -1489,15 +1491,15 @@ or
| Int32 | Length of message contents in bytes, including self. |
| String | A file name if the command uses the REJECTED DATA and/or EXCEPTIONS parameters. Empty if the command uses the RETURNREJECTED parameters. |
| Int32 | File length. |
-| String | File content (not null-terminated).
Note: If the command uses the RETURNREJECTED parameters, file content (i.e. rejected row numbers) comes in **little-endian** Int64 format. |
+| String | File content (not null-terminated).
Note: If the command uses the RETURNREJECTED parameter, file content (i.e. rejected row numbers) comes in **little-endian** Int64 format.
If the command doesn't use the RETURNREJECTED parameter and file content are very large (>8192 bytes), then file content are sent in chunks of 8192 bytes in multiple Writefile messages. |
-The modified WriteFile format when 'extend_copy_reject_info' in the [StartupRequest](#startuprequest) message is set to *true* and the command uses the RETURNREJECTED parameters:
+The modified WriteFile format when 'extend_copy_reject_info' in the [StartupRequest](#startuprequest) message is set to *true* and the command uses the RETURNREJECTED parameter:
| Type | Description |
|:-----------|:------------|
| Byte1('O') | Identifies the message as a response to COPY FROM LOCAL ... RETURNREJECTED command. |
| Int32 | Length of message contents in bytes, including self. |
-| String | File name. Empty because the command uses the RETURNREJECTED parameters. |
+| String | File name. Empty because the command uses the RETURNREJECTED parameter. |
| Int32 | File length. |
| Then, for each rejected row: | |
| Int64 | The rejected row number. **little-endian** format. |