Рабочие запросы
Они возвращают 200 OK:
• GET /v2/user
• GET /v2/accounts/BTC
• GET /v2/accounts/ETH
• GET /v2/accounts/USD
• GET /v2/accounts/{account_id}/transactions (только первая страница)
Пример:
• GET /v2/accounts/BTC возвращает действительный объект учетной записи кошелька BTC
• то же самое для ETH и USD
Затем:
• GET /v2/accounts//transactions
возвращает 200 OK с нумерацией страниц:
Код: Выделить всё
{
"ending_before": null,
"limit": 25,
"next_starting_after": "",
"next_uri": "/v2/accounts//transactions?starting_after=",
"order": "desc",
"previous_ending_before": null,
"previous_uri": null,
"starting_after": null
}
Оба возвращают 401 Несанкционировано:
• GET /v2/accounts//transactions?starting_after=
• вызов точно возвращенного next_uri
То же самое поведение для:
• BTC
• ETH
• USD
Пример Python
Код: Выделить всё
import json, time, secrets, jwt, requests
from urllib.parse import urlencode
with open("cdp_api_key.json") as f:
cfg = json.load(f)
key_name = cfg["name"]
private_key = cfg["privateKey"]
def auth_get(path, params=None):
q = ""
if params:
q = "?" + urlencode(params)
full = f"{path}{q}"
now = int(time.time())
payload = {
"sub": key_name,
"iss": "cdp",
"nbf": now,
"exp": now + 120,
"uri": f"GET api.coinbase.com{full}",
}
headers = {
"kid": key_name,
"nonce": secrets.token_hex(16),
}
token = jwt.encode(payload, private_key, algorithm="ES256", headers=headers)
return requests.get(
"https://api.coinbase.com" + path,
headers={"Authorization": f"Bearer {token}"},
params=params,
timeout=30,
)
r1 = auth_get("/v2/accounts//transactions")
cursor = r1.json()["pagination"]["next_starting_after"]
r2 = auth_get(
"/v2/accounts//transactions",
{"starting_after": cursor},
)
print(r1.status_code) # 200
print(r2.status_code) # 401
print(r2.text)
• GET /v2/user работает и показывает, что пользователь Coinbase привязан к старой реальной учетной записи.
• GET /v2/accounts сам по себе выглядит неполным для этого пути аутентификации и исключает BTC/ETH/USD из возвращаемого списка.
• но напрямую GET /v2/accounts/BTC, ETH и USD поиск работает
• некоторые запросы /v2/accounts с параметрами запроса также меняют число с 200 на 401.
Вопрос
Кто-нибудь успешно разбивал на страницы конечные точки транзакций Coinbase App V2 с использованием аутентификации CDP JWT?
Я пытаюсь определить:
1. формат утверждения uri неверен при наличии параметров запроса
2. Пагинация V2 не работает/не поддерживается ключами CDP,
3. или эти конечные точки корректно разбиваются на страницы только с помощью токенов пользователя OAuth.