API keys not valid for spot

My keys are valid for Binance.US. For spot trading. I am on the open source version 2. The keys were accepted before all the new updates. What has happened?

Hello! Thank you for reaching out and reporting this issue. We have received your report regarding the API keys not being valid for spot trading on Binance.US with the open-source version 2, and our team will look into this and update you shortly.

Could you please let us know if this issue is specifically affecting a particular bot? If so, please provide the bot URL so we can investigate further. Thank you for us to help you troubleshoot, if there are any specific deals associated with this, please share the deal ID as well.

That means either wrong permission (read only) or wrong IP whitelisting. Make sure the API whitelist includes your IPs and your server, not Gainium’s IPs. You can also try recreating the api key, sometimes the second time works.

I created another key, ensured spot trading was checked, even enabled unrestricted IP’s. Still same error message.

Unfortunately I cannot test this as I have no Binance.US account. If you can create a subaccount with no funds and share your api key/secret in a DM I could check on my computer.

index-BFJb8nR7.js:50 [2026-07-02T14:20:06.311Z] [GraphQLClient] ERROR: HTTP error {status: 400, statusText: ‘Bad Request’, endpoint: ‘http://localhost:7503’, responseBody: ‘{“errors”:[{“message”:"Cannot query field \“assetC…ensions”:{“code”:“GRAPHQL_VALIDATION_FAILED”}}]}\n’, graphQLErrors: Array(1), …}
writeToConsole @ index-BFJb8nR7.js:50
log @ index-BFJb8nR7.js:50
error @ index-BFJb8nR7.js:50
makeActualRequest @ index-BFJb8nR7.js:51
await in makeActualRequest
request @ index-BFJb8nR7.js:51
await in request
queryFn @ index-BFJb8nR7.js:7113
fetchFn @ index-BFJb8nR7.js:2
run @ index-BFJb8nR7.js:2
start @ index-BFJb8nR7.js:2
fetch @ index-BFJb8nR7.js:2
#executeFetch @ index-BFJb8nR7.js:2
setOptions @ index-BFJb8nR7.js:2
(anonymous) @ index-BFJb8nR7.js:2
commitHookEffectListMount @ index-BFJb8nR7.js:47
commitPassiveMountOnFiber @ index-BFJb8nR7.js:47
recursivelyTraversePassiveMountEffects @ index-BFJb8nR7.js:47
commitPassiveMountOnFiber @ index-BFJb8nR7.js:47
recursivelyTraversePassiveMountEffects @ index-BFJb8nR7.js:47
commitPassiveMountOnFiber @ index-BFJb8nR7.js:47
recursivelyTraversePassiveMountEffects @ index-BFJb8nR7.js:47
commitPassiveMountOnFiber @ index-BFJb8nR7.js:47
recursivelyTraversePassiveMountEffects @ index-BFJb8nR7.js:47
commitPassiveMountOnFiber @ index-BFJb8nR7.js:47
recursivelyTraversePassiveMountEffects @ index-BFJb8nR7.js:47
commitPassiveMountOnFiber @ index-BFJb8nR7.js:47
recursivelyTraversePassiveMountEffects @ index-BFJb8nR7.js:47
commitPassiveMountOnFiber @ index-BFJb8nR7.js:47
recursivelyTraversePassiveMountEffects @ index-BFJb8nR7.js:47
commitPassiveMountOnFiber @ index-BFJb8nR7.js:47
recursivelyTraversePassiveMountEffects @ index-BFJb8nR7.js:47
commitPassiveMountOnFiber @ index-BFJb8nR7.js:47
recursivelyTraversePassiveMountEffects @ index-BFJb8nR7.js:47
commitPassiveMountOnFiber @ index-BFJb8nR7.js:47
recursivelyTraversePassiveMountEffects @ index-BFJb8nR7.js:47
commitPassiveMountOnFiber @ index-BFJb8nR7.js:47
recursivelyTraversePassiveMountEffects @ index-BFJb8nR7.js:47
commitPassiveMountOnFiber @ index-BFJb8nR7.js:47
recursivelyTraversePassiveMountEffects @ index-BFJb8nR7.js:47
commitPassiveMountOnFiber @ index-BFJb8nR7.js:47
recursivelyTraversePassiveMountEffects @ index-BFJb8nR7.js:47
commitPassiveMountOnFiber @ index-BFJb8nR7.js:47
recursivelyTraversePassiveMountEffects @ index-BFJb8nR7.js:47
commitPassiveMountOnFiber @ index-BFJb8nR7.js:47
recursivelyTraversePassiveMountEffects @ index-BFJb8nR7.js:47
commitPassiveMountOnFiber @ index-BFJb8nR7.js:47
recursivelyTraversePassiveMountEffects @ index-BFJb8nR7.js:47
commitPassiveMountOnFiber @ index-BFJb8nR7.js:47
recursivelyTraversePassiveMountEffects @ index-BFJb8nR7.js:47
commitPassiveMountOnFiber @ index-BFJb8nR7.js:47
flushPassiveEffects @ index-BFJb8nR7.js:47
flushPendingEffects @ index-BFJb8nR7.js:47
flushSpawnedWork @ index-BFJb8nR7.js:47
commitRoot @ index-BFJb8nR7.js:47
commitRootWhenReady @ index-BFJb8nR7.js:47
performWorkOnRoot @ index-BFJb8nR7.js:47
performSyncWorkOnRoot @ index-BFJb8nR7.js:47
flushSyncWorkAcrossRoots_impl @ index-BFJb8nR7.js:47
processRootScheduleInMicrotask @ index-BFJb8nR7.js:47
(anonymous) @ index-BFJb8nR7.js:47
index-BFJb8nR7.js:50 [2026-07-02T14:20:06.312Z] [general] ERROR: GraphQL request failed {error: ‘HTTP error! status: 400 - Cannot query field “assetCategory” on type “pairDetailedInfo”.’, endpoint: ‘http://localhost:7503’, query: ‘query getAllPairs{\n getAllPairs{\n … pair\n excha…’}
writeToConsole @ index-BFJb8nR7.js:50
log @ index-BFJb8nR7.js:50
error @ index-BFJb8nR7.js:50
makeActualRequest @ index-BFJb8nR7.js:51
await in makeActualRequest
request @ index-BFJb8nR7.js:51
await in request
queryFn @ index-BFJb8nR7.js:7113
fetchFn @ index-BFJb8nR7.js:2
run @ index-BFJb8nR7.js:2
start @ index-BFJb8nR7.js:2
fetch @ index-BFJb8nR7.js:2
#executeFetch @ index-BFJb8nR7.js:2
setOptions @ index-BFJb8nR7.js:2
(anonymous) @ index-BFJb8nR7.js:2
commitHookEffectListMount @ index-BFJb8nR7.js:47
commitPassiveMountOnFiber @ index-BFJb8nR7.js:47
recursivelyTraversePassiveMountEffects @ index-BFJb8nR7.js:47
commitPassiveMountOnFiber @ index-BFJb8nR7.js:47
recursivelyTraversePassiveMountEffects @ index-BFJb8nR7.js:47
commitPassiveMountOnFiber @ index-BFJb8nR7.js:47
recursivelyTraversePassiveMountEffects @ index-BFJb8nR7.js:47
commitPassiveMountOnFiber @ index-BFJb8nR7.js:47
recursivelyTraversePassiveMountEffects @ index-BFJb8nR7.js:47
commitPassiveMountOnFiber @ index-BFJb8nR7.js:47
recursivelyTraversePassiveMountEffects @ index-BFJb8nR7.js:47
commitPassiveMountOnFiber @ index-BFJb8nR7.js:47
recursivelyTraversePassiveMountEffects @ index-BFJb8nR7.js:47
commitPassiveMountOnFiber @ index-BFJb8nR7.js:47
recursivelyTraversePassiveMountEffects @ index-BFJb8nR7.js:47
commitPassiveMountOnFiber @ index-BFJb8nR7.js:47
recursivelyTraversePassiveMountEffects @ index-BFJb8nR7.js:47
commitPassiveMountOnFiber @ index-BFJb8nR7.js:47
recursivelyTraversePassiveMountEffects @ index-BFJb8nR7.js:47
commitPassiveMountOnFiber @ index-BFJb8nR7.js:47
recursivelyTraversePassiveMountEffects @ index-BFJb8nR7.js:47
commitPassiveMountOnFiber @ index-BFJb8nR7.js:47
recursivelyTraversePassiveMountEffects @ index-BFJb8nR7.js:47
commitPassiveMountOnFiber @ index-BFJb8nR7.js:47
recursivelyTraversePassiveMountEffects @ index-BFJb8nR7.js:47
commitPassiveMountOnFiber @ index-BFJb8nR7.js:47
recursivelyTraversePassiveMountEffects @ index-BFJb8nR7.js:47
commitPassiveMountOnFiber @ index-BFJb8nR7.js:47
recursivelyTraversePassiveMountEffects @ index-BFJb8nR7.js:47
commitPassiveMountOnFiber @ index-BFJb8nR7.js:47
recursivelyTraversePassiveMountEffects @ index-BFJb8nR7.js:47
commitPassiveMountOnFiber @ index-BFJb8nR7.js:47
recursivelyTraversePassiveMountEffects @ index-BFJb8nR7.js:47
commitPassiveMountOnFiber @ index-BFJb8nR7.js:47
recursivelyTraversePassiveMountEffects @ index-BFJb8nR7.js:47
commitPassiveMountOnFiber @ index-BFJb8nR7.js:47
flushPassiveEffects @ index-BFJb8nR7.js:47
flushPendingEffects @ index-BFJb8nR7.js:47
flushSpawnedWork @ index-BFJb8nR7.js:47
commitRoot @ index-BFJb8nR7.js:47
commitRootWhenReady @ index-BFJb8nR7.js:47
performWorkOnRoot @ index-BFJb8nR7.js:47
performSyncWorkOnRoot @ index-BFJb8nR7.js:47
flushSyncWorkAcrossRoots_impl @ index-BFJb8nR7.js:47
processRootScheduleInMicrotask @ index-BFJb8nR7.js:47
(anonymous) @ index-BFJb8nR7.js:47
index-BFJb8nR7.js:7113 [useGraphQL] Request error: {key: ‘getAllPairs’, message: ‘HTTP error! status: 400 - Cannot query field “assetCategory” on type “pairDetailedInfo”.’}
queryFn @ index-BFJb8nR7.js:7113
await in queryFn
fetchFn @ index-BFJb8nR7.js:2
run @ index-BFJb8nR7.js:2
start @ index-BFJb8nR7.js:2
fetch @ index-BFJb8nR7.js:2
#executeFetch @ index-BFJb8nR7.js:2
setOptions @ index-BFJb8nR7.js:2
(anonymous) @ index-BFJb8nR7.js:2
commitHookEffectListMount @ index-BFJb8nR7.js:47
commitPassiveMountOnFiber @ index-BFJb8nR7.js:47
recursivelyTraversePassiveMountEffects @ index-BFJb8nR7.js:47
commitPassiveMountOnFiber @ index-BFJb8nR7.js:47
recursivelyTraversePassiveMountEffects @ index-BFJb8nR7.js:47
commitPassiveMountOnFiber @ index-BFJb8nR7.js:47
recursivelyTraversePassiveMountEffects @ index-BFJb8nR7.js:47
commitPassiveMountOnFiber @ index-BFJb8nR7.js:47
recursivelyTraversePassiveMountEffects @ index-BFJb8nR7.js:47
commitPassiveMountOnFiber @ index-BFJb8nR7.js:47
recursivelyTraversePassiveMountEffects @ index-BFJb8nR7.js:47
commitPassiveMountOnFiber @ index-BFJb8nR7.js:47
recursivelyTraversePassiveMountEffects @ index-BFJb8nR7.js:47
commitPassiveMountOnFiber @ index-BFJb8nR7.js:47
recursivelyTraversePassiveMountEffects @ index-BFJb8nR7.js:47
commitPassiveMountOnFiber @ index-BFJb8nR7.js:47
recursivelyTraversePassiveMountEffects @ index-BFJb8nR7.js:47
commitPassiveMountOnFiber @ index-BFJb8nR7.js:47
recursivelyTraversePassiveMountEffects @ index-BFJb8nR7.js:47
commitPassiveMountOnFiber @ index-BFJb8nR7.js:47
recursivelyTraversePassiveMountEffects @ index-BFJb8nR7.js:47
commitPassiveMountOnFiber @ index-BFJb8nR7.js:47
recursivelyTraversePassiveMountEffects @ index-BFJb8nR7.js:47
commitPassiveMountOnFiber @ index-BFJb8nR7.js:47
recursivelyTraversePassiveMountEffects @ index-BFJb8nR7.js:47
commitPassiveMountOnFiber @ index-BFJb8nR7.js:47
recursivelyTraversePassiveMountEffects @ index-BFJb8nR7.js:47
commitPassiveMountOnFiber @ index-BFJb8nR7.js:47
recursivelyTraversePassiveMountEffects @ index-BFJb8nR7.js:47
commitPassiveMountOnFiber @ index-BFJb8nR7.js:47
recursivelyTraversePassiveMountEffects @ index-BFJb8nR7.js:47
commitPassiveMountOnFiber @ index-BFJb8nR7.js:47
recursivelyTraversePassiveMountEffects @ index-BFJb8nR7.js:47
commitPassiveMountOnFiber @ index-BFJb8nR7.js:47
recursivelyTraversePassiveMountEffects @ index-BFJb8nR7.js:47
commitPassiveMountOnFiber @ index-BFJb8nR7.js:47
flushPassiveEffects @ index-BFJb8nR7.js:47
flushPendingEffects @ index-BFJb8nR7.js:47
flushSpawnedWork @ index-BFJb8nR7.js:47
commitRoot @ index-BFJb8nR7.js:47
commitRootWhenReady @ index-BFJb8nR7.js:47
performWorkOnRoot @ index-BFJb8nR7.js:47
performSyncWorkOnRoot @ index-BFJb8nR7.js:47
flushSyncWorkAcrossRoots_impl @ index-BFJb8nR7.js:47
processRootScheduleInMicrotask @ index-BFJb8nR7.js:47
(anonymous) @ index-BFJb8nR7.js:47
index-BFJb8nR7.js:50 [2026-07-02T14:20:07.387Z] [GraphQLClient] ERROR: HTTP error {status: 400, statusText: ‘Bad Request’, endpoint: ‘http://localhost:7503’, responseBody: ‘{“errors”:[{“message”:"Cannot query field \“assetC…ensions”:{“code”:“GRAPHQL_VALIDATION_FAILED”}}]}\n’, graphQLErrors: Array(1), …}
writeToConsole @ index-BFJb8nR7.js:50
log @ index-BFJb8nR7.js:50
error @ index-BFJb8nR7.js:50
makeActualRequest @ index-BFJb8nR7.js:51
await in makeActualRequest
request @ index-BFJb8nR7.js:51
await in request
queryFn @ index-BFJb8nR7.js:7113
fetchFn @ index-BFJb8nR7.js:2
run @ index-BFJb8nR7.js:2
(anonymous) @ index-BFJb8nR7.js:2
Promise.then
(anonymous) @ index-BFJb8nR7.js:2
Promise.catch
run @ index-BFJb8nR7.js:2
start @ index-BFJb8nR7.js:2
fetch @ index-BFJb8nR7.js:2
#executeFetch @ index-BFJb8nR7.js:2
setOptions @ index-BFJb8nR7.js:2
(anonymous) @ index-BFJb8nR7.js:2
commitHookEffectListMount @ index-BFJb8nR7.js:47
commitPassiveMountOnFiber @ index-BFJb8nR7.js:47
recursivelyTraversePassiveMountEffects @ index-BFJb8nR7.js:47
commitPassiveMountOnFiber @ index-BFJb8nR7.js:47
recursivelyTraversePassiveMountEffects @ index-BFJb8nR7.js:47
commitPassiveMountOnFiber @ index-BFJb8nR7.js:47
recursivelyTraversePassiveMountEffects @ index-BFJb8nR7.js:47
commitPassiveMountOnFiber @ index-BFJb8nR7.js:47
recursivelyTraversePassiveMountEffects @ index-BFJb8nR7.js:47
commitPassiveMountOnFiber @ index-BFJb8nR7.js:47
recursivelyTraversePassiveMountEffects @ index-BFJb8nR7.js:47
commitPassiveMountOnFiber @ index-BFJb8nR7.js:47
recursivelyTraversePassiveMountEffects @ index-BFJb8nR7.js:47
commitPassiveMountOnFiber @ index-BFJb8nR7.js:47
recursivelyTraversePassiveMountEffects @ index-BFJb8nR7.js:47
commitPassiveMountOnFiber @ index-BFJb8nR7.js:47
recursivelyTraversePassiveMountEffects @ index-BFJb8nR7.js:47
commitPassiveMountOnFiber @ index-BFJb8nR7.js:47
recursivelyTraversePassiveMountEffects @ index-BFJb8nR7.js:47
commitPassiveMountOnFiber @ index-BFJb8nR7.js:47
recursivelyTraversePassiveMountEffects @ index-BFJb8nR7.js:47
commitPassiveMountOnFiber @ index-BFJb8nR7.js:47
recursivelyTraversePassiveMountEffects @ index-BFJb8nR7.js:47
commitPassiveMountOnFiber @ index-BFJb8nR7.js:47
recursivelyTraversePassiveMountEffects @ index-BFJb8nR7.js:47
commitPassiveMountOnFiber @ index-BFJb8nR7.js:47
recursivelyTraversePassiveMountEffects @ index-BFJb8nR7.js:47
commitPassiveMountOnFiber @ index-BFJb8nR7.js:47
recursivelyTraversePassiveMountEffects @ index-BFJb8nR7.js:47
commitPassiveMountOnFiber @ index-BFJb8nR7.js:47
recursivelyTraversePassiveMountEffects @ index-BFJb8nR7.js:47
commitPassiveMountOnFiber @ index-BFJb8nR7.js:47
recursivelyTraversePassiveMountEffects @ index-BFJb8nR7.js:47
commitPassiveMountOnFiber @ index-BFJb8nR7.js:47
recursivelyTraversePassiveMountEffects @ index-BFJb8nR7.js:47
commitPassiveMountOnFiber @ index-BFJb8nR7.js:47
flushPassiveEffects @ index-BFJb8nR7.js:47
flushPendingEffects @ index-BFJb8nR7.js:47
flushSpawnedWork @ index-BFJb8nR7.js:47
commitRoot @ index-BFJb8nR7.js:47
commitRootWhenReady @ index-BFJb8nR7.js:47
performWorkOnRoot @ index-BFJb8nR7.js:47
performSyncWorkOnRoot @ index-BFJb8nR7.js:47
flushSyncWorkAcrossRoots_impl @ index-BFJb8nR7.js:47
processRootScheduleInMicrotask @ index-BFJb8nR7.js:47
(anonymous) @ index-BFJb8nR7.js:47
index-BFJb8nR7.js:50 [2026-07-02T14:20:07.388Z] [general] ERROR: GraphQL request failed {error: ‘HTTP error! status: 400 - Cannot query field “assetCategory” on type “pairDetailedInfo”.’, endpoint: ‘http://localhost:7503’, query: ‘query getAllPairs{\n getAllPairs{\n … pair\n excha…’}
writeToConsole @ index-BFJb8nR7.js:50
log @ index-BFJb8nR7.js:50
error @ index-BFJb8nR7.js:50
makeActualRequest @ index-BFJb8nR7.js:51
await in makeActualRequest
request @ index-BFJb8nR7.js:51
await in request
queryFn @ index-BFJb8nR7.js:7113
fetchFn @ index-BFJb8nR7.js:2
run @ index-BFJb8nR7.js:2
(anonymous) @ index-BFJb8nR7.js:2
Promise.then
(anonymous) @ index-BFJb8nR7.js:2
Promise.catch
run @ index-BFJb8nR7.js:2
start @ index-BFJb8nR7.js:2
fetch @ index-BFJb8nR7.js:2
#executeFetch @ index-BFJb8nR7.js:2
setOptions @ index-BFJb8nR7.js:2
(anonymous) @ index-BFJb8nR7.js:2
commitHookEffectListMount @ index-BFJb8nR7.js:47
commitPassiveMountOnFiber @ index-BFJb8nR7.js:47
recursivelyTraversePassiveMountEffects @ index-BFJb8nR7.js:47
commitPassiveMountOnFiber @ index-BFJb8nR7.js:47
recursivelyTraversePassiveMountEffects @ index-BFJb8nR7.js:47
commitPassiveMountOnFiber @ index-BFJb8nR7.js:47
recursivelyTraversePassiveMountEffects @ index-BFJb8nR7.js:47
commitPassiveMountOnFiber @ index-BFJb8nR7.js:47
recursivelyTraversePassiveMountEffects @ index-BFJb8nR7.js:47
commitPassiveMountOnFiber @ index-BFJb8nR7.js:47
recursivelyTraversePassiveMountEffects @ index-BFJb8nR7.js:47
commitPassiveMountOnFiber @ index-BFJb8nR7.js:47
recursivelyTraversePassiveMountEffects @ index-BFJb8nR7.js:47
commitPassiveMountOnFiber @ index-BFJb8nR7.js:47
recursivelyTraversePassiveMountEffects @ index-BFJb8nR7.js:47
commitPassiveMountOnFiber @ index-BFJb8nR7.js:47
recursivelyTraversePassiveMountEffects @ index-BFJb8nR7.js:47
commitPassiveMountOnFiber @ index-BFJb8nR7.js:47
recursivelyTraversePassiveMountEffects @ index-BFJb8nR7.js:47
commitPassiveMountOnFiber @ index-BFJb8nR7.js:47
recursivelyTraversePassiveMountEffects @ index-BFJb8nR7.js:47
commitPassiveMountOnFiber @ index-BFJb8nR7.js:47
recursivelyTraversePassiveMountEffects @ index-BFJb8nR7.js:47
commitPassiveMountOnFiber @ index-BFJb8nR7.js:47
recursivelyTraversePassiveMountEffects @ index-BFJb8nR7.js:47
commitPassiveMountOnFiber @ index-BFJb8nR7.js:47
recursivelyTraversePassiveMountEffects @ index-BFJb8nR7.js:47
commitPassiveMountOnFiber @ index-BFJb8nR7.js:47
recursivelyTraversePassiveMountEffects @ index-BFJb8nR7.js:47
commitPassiveMountOnFiber @ index-BFJb8nR7.js:47
recursivelyTraversePassiveMountEffects @ index-BFJb8nR7.js:47
commitPassiveMountOnFiber @ index-BFJb8nR7.js:47
recursivelyTraversePassiveMountEffects @ index-BFJb8nR7.js:47
commitPassiveMountOnFiber @ index-BFJb8nR7.js:47
recursivelyTraversePassiveMountEffects @ index-BFJb8nR7.js:47
commitPassiveMountOnFiber @ index-BFJb8nR7.js:47
flushPassiveEffects @ index-BFJb8nR7.js:47
flushPendingEffects @ index-BFJb8nR7.js:47
flushSpawnedWork @ index-BFJb8nR7.js:47
commitRoot @ index-BFJb8nR7.js:47
commitRootWhenReady @ index-BFJb8nR7.js:47
performWorkOnRoot @ index-BFJb8nR7.js:47
performSyncWorkOnRoot @ index-BFJb8nR7.js:47
flushSyncWorkAcrossRoots_impl @ index-BFJb8nR7.js:47
processRootScheduleInMicrotask @ index-BFJb8nR7.js:47
(anonymous) @ index-BFJb8nR7.js:47
index-BFJb8nR7.js:7113 [useGraphQL] Request error: {key: ‘getAllPairs’, message: ‘HTTP error! status: 400 - Cannot query field “assetCategory” on type “pairDetailedInfo”.’}
queryFn @ index-BFJb8nR7.js:7113
await in queryFn
fetchFn @ index-BFJb8nR7.js:2
run @ index-BFJb8nR7.js:2
(anonymous) @ index-BFJb8nR7.js:2
Promise.then
(anonymous) @ index-BFJb8nR7.js:2
Promise.catch
run @ index-BFJb8nR7.js:2
start @ index-BFJb8nR7.js:2
fetch @ index-BFJb8nR7.js:2
#executeFetch @ index-BFJb8nR7.js:2
setOptions @ index-BFJb8nR7.js:2
(anonymous) @ index-BFJb8nR7.js:2
commitHookEffectListMount @ index-BFJb8nR7.js:47
commitPassiveMountOnFiber @ index-BFJb8nR7.js:47
recursivelyTraversePassiveMountEffects @ index-BFJb8nR7.js:47
commitPassiveMountOnFiber @ index-BFJb8nR7.js:47
recursivelyTraversePassiveMountEffects @ index-BFJb8nR7.js:47
commitPassiveMountOnFiber @ index-BFJb8nR7.js:47
recursivelyTraversePassiveMountEffects @ index-BFJb8nR7.js:47
commitPassiveMountOnFiber @ index-BFJb8nR7.js:47
recursivelyTraversePassiveMountEffects @ index-BFJb8nR7.js:47
commitPassiveMountOnFiber @ index-BFJb8nR7.js:47
recursivelyTraversePassiveMountEffects @ index-BFJb8nR7.js:47
commitPassiveMountOnFiber @ index-BFJb8nR7.js:47
recursivelyTraversePassiveMountEffects @ index-BFJb8nR7.js:47
commitPassiveMountOnFiber @ index-BFJb8nR7.js:47
recursivelyTraversePassiveMountEffects @ index-BFJb8nR7.js:47
commitPassiveMountOnFiber @ index-BFJb8nR7.js:47
recursivelyTraversePassiveMountEffects @ index-BFJb8nR7.js:47
commitPassiveMountOnFiber @ index-BFJb8nR7.js:47
recursivelyTraversePassiveMountEffects @ index-BFJb8nR7.js:47
commitPassiveMountOnFiber @ index-BFJb8nR7.js:47
recursivelyTraversePassiveMountEffects @ index-BFJb8nR7.js:47
commitPassiveMountOnFiber @ index-BFJb8nR7.js:47
recursivelyTraversePassiveMountEffects @ index-BFJb8nR7.js:47
commitPassiveMountOnFiber @ index-BFJb8nR7.js:47
recursivelyTraversePassiveMountEffects @ index-BFJb8nR7.js:47
commitPassiveMountOnFiber @ index-BFJb8nR7.js:47
recursivelyTraversePassiveMountEffects @ index-BFJb8nR7.js:47
commitPassiveMountOnFiber @ index-BFJb8nR7.js:47
recursivelyTraversePassiveMountEffects @ index-BFJb8nR7.js:47
commitPassiveMountOnFiber @ index-BFJb8nR7.js:47
recursivelyTraversePassiveMountEffects @ index-BFJb8nR7.js:47
commitPassiveMountOnFiber @ index-BFJb8nR7.js:47
recursivelyTraversePassiveMountEffects @ index-BFJb8nR7.js:47
commitPassiveMountOnFiber @ index-BFJb8nR7.js:47
recursivelyTraversePassiveMountEffects @ index-BFJb8nR7.js:47
commitPassiveMountOnFiber @ index-BFJb8nR7.js:47
flushPassiveEffects @ index-BFJb8nR7.js:47
flushPendingEffects @ index-BFJb8nR7.js:47
flushSpawnedWork @ index-BFJb8nR7.js:47
commitRoot @ index-BFJb8nR7.js:47
commitRootWhenReady @ index-BFJb8nR7.js:47
performWorkOnRoot @ index-BFJb8nR7.js:47
performSyncWorkOnRoot @ index-BFJb8nR7.js:47
flushSyncWorkAcrossRoots_impl @ index-BFJb8nR7.js:47
processRootScheduleInMicrotask @ index-BFJb8nR7.js:47
(anonymous) @ index-BFJb8nR7.js:47
index-BFJb8nR7.js:50 [2026-07-02T14:20:09.480Z] [GraphQLClient] ERROR: HTTP error

This error and many more. is the source file available so I can work on it?

index-BFJb8nR7.js:7395 [BotTypeRegistry] registerBotModule is deprecated in production and will be ignored.
registerBotModule @ index-BFJb8nR7.js:7395
index-BFJb8nR7.js:7395 [BotTypeRegistry] registerBotModule is deprecated in production and will be ignored.
registerBotModule @ index-BFJb8nR7.js:7395
index-BFJb8nR7.js:7395 [BotTypeRegistry] registerBotModule is deprecated in production and will be ignored.
registerBotModule @ index-BFJb8nR7.js:7395
index-BFJb8nR7.js:50 [Logger] Initialized with IndexedDB storage
index-BFJb8nR7.js:50 [2026-07-02T14:29:59.137Z] [general] ERROR: Failed to add exchange: Object
writeToConsole @ index-BFJb8nR7.js:50
index-BFJb8nR7.js:50 [2026-07-02T14:29:59.138Z] [general] ERROR: Failed to add exchange: Object
writeToConsole @ index-BFJb8nR7.js:50

Yes you can check the source of everything in this guide: Gainium Self-Hosted — Deployment Guide - Help Center | Gainium

I think those errors are not related to the API key.

1 Like

Thanks

It is a nightmare. I believe the V2 open source may be trying to use Binance. Not Binacce.US and that is why it is not accepting my keys. I changed the yaml file and other tweaks, but it is not recognizing Binance.US keys. This is posssibly related to the front end, but I don’t have time to dig into all of that. But I added the same keys to another exchange, and they were immediately accepted and I could immediately trade with them. So there is something deep in the code not letting it accept Binance.US keys.

yep, it is trying to use my API keys for Binance..not Binance.US. On the add exchange page, if I choose Binance.US, the purple buttton below it shows connect to Binance. it should show how to connect to Binance.US, if it was really using my keys for Binance.US, correct?

Hi @starrevolutions — quick update.

We’ve temporarily upgraded your Gainium cloud account (app.gainium.io) to the Mini plan for the next several days. Could you log in there with this same account and try adding your Binance.US API keys on the Add Exchange page? That lets us cleanly separate a key/permission problem from something specific to your self-hosted machine.

  • If the keys connect fine on the cloud → the issue is almost certainly that your self-hosted server’s outbound IP isn’t whitelisted on the Binance.US key (or the key is missing spot permissions). Binance validates a key against the IP of the machine making the request, so the exact same key can work in one place and be rejected from another.
  • If they’re rejected on the cloud too → then it’s something on the key itself, and we’ll dig in from there.

On the “Connect to Binance” button you spotted in the screenshot: that’s just a mislabeled help link on the Add Exchange page. When you select Binance.US, the app does route to Binance.US (api.binance.us) under the hood — not Binance.com — so your keys are being used against the right exchange. The wrong label doesn’t change where the keys go, and we’ll get it fixed.

Let us know how the cloud test goes.

1 Like

Thanks. But I just tried with brand new keys. it still says they cannot be used for spot trading. It was on the cloud.

Thanks for testing on the cloud — that was actually the key data point. It ruled out your machine’s IP, and it pointed us at a bug on our side: when Binance.US rejected the connection, our connector was swallowing the exact reason and logging a useless [object Object], so we couldn’t see why it was being rejected.

We’ve just deployed a fix to the cloud that surfaces Binance.US’s real error message. Your account still has the Mini plan active, so:

Could you try adding your Binance.US keys one more time on the cloud (app.gainium.io)?

It may still fail — but this time we’ll be able to read the precise reason Binance.US is returning (key permissions, IP, account status, etc.) and tell you exactly what to fix. Once you’ve tried, let us know roughly what time (with your timezone) so we can pull the matching log line.

Just tried it. 3:50 AM, Eastern Time, New York. Same error message.

Found it — and it was our bug, not your keys.

With the improved logging we could finally see the real error: our exchange connector was verifying Binance.US keys against a Binance.com-only endpoint (/sapi/v1/account/info) that doesn’t exist on Binance.US, so it returned a 404 and we rejected every Binance.US key as “invalid” regardless of whether it was actually fine. Your keys were never the problem.

We’ve deployed a fix to the cloud that verifies Binance.US against the correct endpoint (/api/v3/account). Please try adding your Binance.US keys one more time on the cloud (app.gainium.io).

If it connects now (which we expect), we’ll ship the same fix to the self-hosted Docker images so your open-source V2 build gets it too. Let us know how it goes — and roughly what time you try, with your timezone, so we can confirm from our side.

1 Like

Thanks Claus! That works! 4:39 AM Eastern USA, New York

Great to hear it’s working, and thanks for confirming — we saw the Binance.US account connect cleanly on our side too.

We’ve now built the same fix into the self-hosted image: exchange-connector version 1.14.1 on docker.gainium.io. It’ll become the default pin in the next self-hosted release. If you’d like it on your open-source V2 right away, set this in your .env:

EXCHANGE_CONNECTOR_VERSION=1.14.1

then recreate that one container:

docker compose pull exchange-connector && docker compose up -d exchange-connector

Your Binance.US keys will then verify the same way they did on the cloud. Shout if anything’s off.

Thanks. I placed it at the end of the env file, saved it. Still gives same errror. Per-service image version pins. Override to force a specific version

instead of the compose default. admin-sh writes here when you Upgrade

from the dashboard, so anything set manually here gets replaced.

MAIN_APP_VERSION=1.18.0

EXCHANGE_CONNECTOR_VERSION=1.5.0

WEBSOCKET_CONNECTOR_VERSION=1.8.0

PAPER_TRADING_VERSION=1.2.3

FRONTEND_VERSION=2.5.1

ADMIN_SH_VERSION=1.0.0

EXCHANGE_CONNECTOR_VERSION=1.14.1