> ## Documentation Index
> Fetch the complete documentation index at: https://docs.kraken.com/llms.txt
> Use this file to discover all available pages before exploring further.

# NegotiationResponse

> Session schema, template 2

<div className="api-banner">
  <span className="api-protocol ws">SBE</span>
  <span className="api-detail">schema 33 · session</span>
  <span className="api-tag">template 2</span>
</div>

Confirms a successful negotiation, with the agreed keepalive interval and the session expiry time.

**Direction:** Kraken → client

| ID | Field | Type | Encoding | Presence | Description |
| :- | :- | :- | :- | :- | :- |
| 1 | `sessionId` | [`SessionId`](/exchange/api-reference/sbe/session-types#sessionid) | field | required | |
| 2 | `requestTimestampNs` | [`TimestampNs`](/exchange/api-reference/sbe/session-types#timestampns) | field | required | |
| 3 | `serverTimestampNs` | [`TimestampNs`](/exchange/api-reference/sbe/session-types#timestampns) | field | required | |
| 4 | `sessionExpiryTimestampNs` | [`TimestampNs`](/exchange/api-reference/sbe/session-types#timestampns) | field | required | Expiry of the current authorization. Not a fixed disconnect time: the gateway renews authorization in the background |
| 5 | `keepaliveIntervalMs` | `uint32` | field | required | |

`sessionExpiryTimestampNs` is not a fixed disconnect time. The gateway renews the session's authorization in the background, so you do not need to reconnect when this timestamp passes.

Every message is preceded by the standard SBE `messageHeader` (`blockLength`, `templateId`, `schemaId`, `version`). See [encodings](/exchange/api-reference/sbe/session-types#messageheader).
