Logon (35=A)
The client sends Logon (35=A) to the server over TLS/TCP at fix.bitgo.com:5100
(or test). This is not an HTTP request.
Required before order entry or market-data application messages on a new session. One active
order-entry session per Go Account (56=BITGO); market data uses a separate session
(56=BITGO-MD).
SenderCompID (49) identifies the account; there is no separate Username (tag 553).
Your access token goes in Password (554).
On success: server echoes Logon (35=A).
On failure: server sends Logout (35=5) with Text (58) describing the reason.
The session does not reach the logged-on state. Common rejection texts:
| Text (tag 58) | Cause |
|---|---|
invalid access token |
Token malformed, expired at Logon, or otherwise invalid |
missing or empty access token (tag 554) |
Tag 554 absent or empty |
invalid Go Account ID in TargetCompID: expected 32 hex chars |
Bad account ID format (swapped CompIDs) |
unknown SenderCompID: expected BITGO or BITGO-MD |
Wrong session type in tag 56 (or swapped 49/56) |
token missing trade_fix scope |
Token lacks FIX permission |
not authorised for this account |
No spend permission on the account |
rate limit exceeded on logon, retry shortly |
More than 10 Logon attempts per minute |
authentication failed |
Generic auth failure |
access token expired |
Token already expired at Logon |
active session exists for this account |
Another FIX session is already active for this account |
session enforcement failed |
Session store could not claim the account slot |
server shutting down, please reconnect |
Acceptor is draining / shutting down |
Mid-session token expiry and revocation use Logout (35=5) with session expired /
access token revoked (see Logout page), not these Logon reject texts.
Token lifecycle: tokens are validated at Logon; expiry is then checked on each subsequent
order. On expiry the server sends Logout with Text="session expired". Reconnect with a fresh
trade_fix-scoped token.
Example (pipe-delimited FIX):
8=FIX.4.4|9=128|35=A|49=0123456789abcdef0123456789abcdef|56=BITGO|34=1|554=v2_your_access_token_here|141=Y|98=0|108=30|52=20260415-14:30:00.000|10=XXX|
Body Params
object
35=A) body fields. Standard header/trailer are also required on every message.
Authenticate with Password (554); there is no Username (553). SenderCompID (49) identifies the account.-
passwordstring requiredRequired. BitGo access token withtrade_fixscope. Validated at Logon; expiry is re-checked on subsequent orders. -
encryptMethodstring enum requiredRequired. Must be0(None). TLS encrypts the transport.0 -
heartBtIntinteger enum requiredRequired. Heartbeat interval in seconds. Must be30to match the server.30 -
resetSeqNumFlagstring enumOptional. Must beYwhen sent. Sequence numbers reset to 1 on every connection (stateless session model) regardless, as the server is configured with ResetOnLogon=Y.YN
Responses
200
Session established. Server echoes Logon (35=A).
35=A).Response Body
object
35=A) body fields. Standard header/trailer are also required on every message.
Authenticate with Password (554); there is no Username (553). SenderCompID (49) identifies the account.-
passwordstring requiredRequired. BitGo access token withtrade_fixscope. Validated at Logon; expiry is re-checked on subsequent orders. -
encryptMethodstring enum requiredRequired. Must be0(None). TLS encrypts the transport.0 -
heartBtIntinteger enum requiredRequired. Heartbeat interval in seconds. Must be30to match the server.30 -
resetSeqNumFlagstring enumOptional. Must beYwhen sent. Sequence numbers reset to 1 on every connection (stateless session model) regardless, as the server is configured with ResetOnLogon=Y.YN
35=5) with rejection reason in tag 58.