So verwenden Sie die Coinbase API: Eine Schritt-für-Schritt-Anleitung

Dieser Leitfaden erkundet die Coinbase API technisch detailliert: Implementierung, Funktionen & Best Practices.

Leo Schulz

Leo Schulz

5 June 2025

So verwenden Sie die Coinbase API: Eine Schritt-für-Schritt-Anleitung

Coinbase, ein weltweit führendes Unternehmen im Bereich des digitalen Asset-Austauschs, bietet eine robuste Suite von Application Programming Interfaces (APIs). Diese APIs sind das Rückgrat für Entwickler, algorithmische Händler und Finanzinstitute, die sich programmatisch in die Handels- und Datendienste von Coinbase integrieren möchten. Dieser Leitfaden bietet eine detaillierte technische Untersuchung der Coinbase Exchange API, mit Schwerpunkt auf der praktischen Implementierung, den Kernfunktionalitäten und den operativen Best Practices.

💡
Want a great API Testing tool that generates beautiful API Documentation?

Want an integrated, All-in-One platform for your Developer Team to work together with maximum productivity?

Apidog delivers all your demans, and replaces Postman at a much more affordable price!
button

Ersteinrichtung und Authentifizierung

Die erfolgreiche Interaktion mit der Coinbase Exchange API beginnt mit der Kontovorbereitung, der sicheren Verwaltung von API-Schlüsseln und einem präzisen Verständnis des Authentifizierungsprotokolls.

Kontovoraussetzungen und API-Schlüsselgenerierung

Ein verifiziertes Coinbase-Konto, typischerweise ein Coinbase Advanced Trade- oder institutionelles Konto, ist erforderlich. API-Schlüssel werden in Ihren Kontoeinstellungen generiert. Dieser Vorgang liefert drei wichtige Informationen:

  1. API-Schlüssel: Eine öffentliche, alphanumerische Zeichenfolge (z. B. k7b9f2d7e8h1g3j4), die Ihre Anwendung identifiziert.
  2. API-Geheimnis: Eine private, alphanumerische Zeichenfolge (z. B. S9vP3rK2sLqR7xW1yZ0aB5cD6fE8gH9i). Dieses Geheimnis wird nur einmal bei der Generierung angezeigt und muss sicher gespeichert werden.
  3. Passphrase: Ein zusätzlicher Sicherheitsnachweis (z. B. mySecureP@$$phr@se2024!), den Sie während der Schlüsselgenerierung erstellen.

API-Schlüsselberechtigungen sind granular und ermöglichen es Ihnen, Aktionen einzuschränken (z. B. Nur-Anzeige, Handelsausführung, Auszahlungsmöglichkeiten). Halten Sie sich stets an das Prinzip der geringsten Privilegien.

API-Anforderungsauthentifizierung

Die Coinbase Exchange API verwendet einen signaturbasierten Authentifizierungsmechanismus (HMAC-SHA256) für alle privaten, authentifizierten Endpunkte. Jede Anfrage erfordert mehrere benutzerdefinierte HTTP-Header:

Die Signatur (CB-ACCESS-SIGN) wird durch Erstellen eines HMAC-SHA256-Hashs einer Prehash-Zeichenfolge generiert. Die Prehash-Zeichenfolge ist eine Verkettung von:

  1. Der Zeitstempel (als Zeichenfolge).
  2. Die HTTP-Methode in Großbuchstaben (z. B. GET, POST).
  3. Der Anforderungspfad (z. B. /orders, /products/BTC-USD/book).
  4. Der Anforderungstext (für POST-Anforderungen; eine leere Zeichenfolge, wenn kein Text vorhanden ist).

Beispiel für den Aufbau einer Prehash-Zeichenfolge (für eine POST-Anforderung):

timestamp = str(time.time())
method = "POST"
request_path = "/orders"
body_json_string = '{"product_id": "BTC-USD", "side": "buy", "type": "limit", "price": "50000.00", "size": "0.1"}' // JSON string, not Python dict
prehash_string = timestamp + method + request_path + body_json_string

// The API Secret needs to be base64-decoded before being used as the HMAC key.
// secret_decoded = base64.b64decode(api_secret)
// signature = hmac.new(secret_decoded, prehash_string.encode('utf-8'), hashlib.sha256).digest()
// CB_ACCESS_SIGN = base64.b64encode(signature)

Falsch konstruierte Prehash-Zeichenfolgen oder Zeitstempel-Diskrepanzen (stellen Sie sicher, dass die Uhr Ihres Servers über NTP synchronisiert ist) sind häufige Ursachen für Authentifizierungsfehler (HTTP 401).

Client-Bibliotheken und Entwicklungsumgebung

Offizielle und von der Community entwickelte Client-Bibliotheken für Sprachen wie Python (cbpro), Node.js (coinbase-pro-node), Java und Go abstrahieren diese Authentifizierungskomplexitäten. Alternativ können direkte HTTP-Anforderungen mit Tools wie curl oder Standard-HTTP-Client-Modulen gestellt werden, was eine manuelle Implementierung des Signierungsprozesses erfordert.

Die Sandbox-Umgebung zum Testen

Coinbase bietet eine Sandbox-Umgebung für Entwicklung und Tests, die vor der Interaktion mit Live-Märkten unerlässlich ist.

Zweck und Funktionalität

Die Sandbox spiegelt die Produktions-API-Funktionalität wider, verwendet aber Testgelder und simulierte Marktdaten. Sie ermöglicht:

Wesentliche Unterschiede zur Produktion

Übergang zur Produktion

Eine robuste Bereitstellungsstrategie umfasst unterschiedliche Konfigurationen für Sandbox und Produktion, die sich hauptsächlich in den API-Anmeldeinformationen und Basis-URLs unterscheiden. Gründliche Tests in der Sandbox sind von größter Bedeutung, um Fehler mit echtem Geld zu vermeiden.

Kern-API-Funktionen: Endpunkte und Datenstrukturen

Die API ist grob in Kontoverwaltung, Marktdatenabruf und Handelsoperationen unterteilt.

Kontoverwaltung

Endpunkte zum Abfragen von Kontoständen und -verläufen.

Abrufen von Kontoständen (GET /accounts)
Ruft eine Liste aller Benutzerkonten (Fiat und Krypto) mit ihren Salden ab.
Beispiel-Antwortausschnitt für ein BTC-Konto:

{
  "id": "7532b1f0-20f4-4ba7-96f0-303b592d130f",
  "currency": "BTC",
  "balance": "0.50123456",
  "available": "0.49123456",
  "hold": "0.01000000",
  "profile_id": "your-profile-id-string"
}

balance ist der Gesamtbetrag, available ist das, was für den Handel verwendet werden kann, und hold sind Gelder, die für offene Aufträge reserviert sind.

Kontoverlauf / Ledger (GET /accounts/{account_id}/ledger)
Stellt eine paginierte Liste der Transaktionen (Trades, Gebühren, Überweisungen) für ein bestimmtes Konto bereit.
Typische Abfrageparameter: before (Cursor für Paginierung), after (Cursor), limit (max. 100, Standard 100), start_date, end_date.
Beispiel-Ledger-Eintragsausschnitt:

{
  "id": "1001874",
  "created_at": "2023-10-26T10:00:00.000Z",
  "amount": "-0.00005000",
  "balance": "0.50118456",
  "type": "fee",
  "details": {
    "order_id": "d0c5340b-6d6c-49d9-b567-48c4bfca13d2",
    "product_id": "BTC-USD",
    "trade_id": "7423736"
  }
}

Marktdaten-Endpunkte

Zugriff auf Echtzeit- und historische Marktinformationen.

Produkte / Handelspaare (GET /products)
Listet alle verfügbaren Handelspaare und ihre Eigenschaften auf.
Beispiel-Produktausschnitt (BTC-USD):

{
  "id": "BTC-USD",
  "base_currency": "BTC",
  "quote_currency": "USD",
  "base_min_size": "0.0001", // Minimum order size in base currency
  "base_max_size": "200.0",  // Maximum order size in base currency
  "quote_increment": "0.01", // Smallest price change unit for quote currency
  "base_increment": "0.00000001", // Smallest size change unit for base currency
  "display_name": "BTC/USD",
  "min_market_funds": "1",    // Minimum funds for a market order in quote currency
  "max_market_funds": "1000000", // Maximum funds for a market order
  "status": "online",
  "status_message": "",
  "cancel_only": false,
  "limit_only": false,
  "post_only": false,
  "trading_disabled": false
}

Orderbücher (GET /products/{product_id}/book)
Ruft das aktuelle Orderbuch für ein Produkt ab.
Abfrageparameter: level (1, 2 oder 3).
*   Level 1: Nur das beste Gebot und der beste Geldkurs.
*   Level 2: Aggregierte Liste der Gebote und Geldkurse auf jeder Preisstufe. (Max. 50 Einträge pro Seite).
*   Level 3: Vollständiges Orderbuch mit einzelnen, nicht aggregierten Aufträgen (erfordert Authentifizierung und kann strengere Ratenbegrenzungen haben).
Beispiel für einen Orderbuch-Ausschnitt der Stufe 2 (BTC-USD):

{
  "sequence": 1234567890,
  "bids": [
    ["49999.99", "0.75", 3], // [price, size, num-orders-at-this-price]
    ["49999.98", "1.20", 5]
  ],
  "asks": [
    ["50000.01", "0.50", 2],
    ["50000.02", "1.00", 4]
  ],
  "time": "2023-10-26T10:05:00.123Z"
}

Produkt-Ticker (GET /products/{product_id}/ticker)
Momentaufnahmeinformationen über den letzten Handel (Tick), das beste Gebot/den besten Geldkurs und das 24-Stunden-Volumen.
Beispiel-Ticker-Ausschnitt (BTC-USD):

{
  "trade_id": 7423739,
  "price": "50001.50", // Last trade price
  "size": "0.005",    // Last trade size
  "bid": "50001.49",
  "ask": "50001.51",
  "volume": "1250.75", // 24-hour trading volume in base currency
  "time": "2023-10-26T10:06:15.234Z"
}

Historische Kurse / Kerzen (GET /products/{product_id}/candles)
Ruft historische Preisdaten (OHLCV) ab.
Abfrageparameter: start (ISO 8601-Zeitstempel), end (ISO 8601), granularity (in Sekunden: 60, 300, 900, 3600, 21600, 86400). Max. 300 Kerzen pro Anfrage.
Beispiel-Kerzendaten (1-Stunden-Granularität):

[
  // [time, low, high, open, close, volume]
  [1666771200, 49850.25, 50050.75, 49900.00, 50025.10, 15.2345], // time is Unix epoch
  [1666767600, 49700.00, 49950.50, 49750.20, 49850.25, 22.6789]
]

Handelsoperationen

Endpunkte zum Platzieren, Verwalten und Abfragen von Aufträgen.

Aufträge platzieren (POST /orders)
Reicht neue Aufträge an die Matching-Engine ein.
Häufige Parameter des Anforderungstextes:

{
  "client_oid": "my-unique-client-order-id-001", // Optional: UUID for idempotency
  "product_id": "BTC-USD",
  "side": "buy", // "buy" or "sell"
  "type": "limit", // "limit", "market", or "stop" (stop orders are more complex)
  "price": "49500.00", // Required for limit orders
  "size": "0.0125", // Amount of base currency to buy/sell
  // "funds": "500.00", // For market buy orders: amount of quote currency to spend
  "time_in_force": "GTC", // GTC (Good 'Til Canceled), GTT (Good 'Til Time), IOC (Immediate Or Cancel), FOK (Fill Or Kill)
  // "cancel_after": "min" / "hour" / "day" (used with GTT)
  "post_only": false, // If true, order is rejected if it would immediately match (ensures maker)
  "stp": "dc" // Self-trade prevention: "dc" (Decrease and Cancel), "co" (Cancel Oldest), "cn" (Cancel Newest), "cb" (Cancel Both)
}

Eine erfolgreiche Auftragserteilung gibt die Auftragsdetails einschließlich der serverseitig zugewiesenen id zurück.

Aufträge verwalten

Fills (GET /fills)
Ruft eine paginierte Liste Ihrer ausgeführten Trades (Fills) ab.
Abfrageparameter: order_id, product_id, before, after, limit.
Beispiel-Fill-Ausschnitt:

{
  "trade_id": 7423800,
  "product_id": "BTC-USD",
  "price": "49500.00",
  "size": "0.00500000",
  "order_id": "e4f2c1a0-f3d8-4b9b-8b7e-1f2a3c4d5e6f",
  "created_at": "2023-10-26T10:15:30.123Z",
  "liquidity": "T", // "M" for Maker, "T" for Taker
  "fee": "0.00000250", // Fee in quote currency (USD for BTC-USD) or base currency depending on API.
  "settled": true,
  "side": "buy"
}

Die Matching-Engine

Die Matching-Engine ordnet Kauf- und Verkaufsaufträge basierend auf einem Price-Time-Priority-Algorithmus zu:

  1. Preispriorität: Aufträge mit günstigeren Preisen werden priorisiert (höherer Preis für Gebote, niedrigerer Preis für Geldkurse).
  2. Zeitpriorität: Unter Aufträgen zum gleichen Preis wird der frühestens eingereichte Auftrag priorisiert.

Das Verständnis dieser Logik ist entscheidend für Auftragsplatzierungsstrategien, die Verwaltung von Slippage und die Gebührenoptimierung.

Ratenbegrenzungen und Drosselung

Der API-Zugriff unterliegt Ratenbegrenzungen, um die Plattformstabilität und eine faire Nutzung zu gewährleisten.

Typen und Identifizierung

Limits werden typischerweise pro API-Schlüssel, pro IP-Adresse angewendet und können je nach Endpunkt variieren (z. B. private signierte Endpunkte vs. öffentliche unsignierte Endpunkte). Öffentliche Endpunkte können Limits wie 3-10 Anfragen/Sekunde pro IP haben. Private (signierte) Endpunkte haben oft höhere Limits, ebenfalls pro API-Schlüssel.

API-Antworten enthalten Header, die den aktuellen Ratenlimit-Status angeben:

Das Überschreiten von Limits führt zu einem HTTP-Fehler 429 Too Many Requests.

Handhabungsstrategien

  1. Proaktives Monitoring: Überprüfen Sie CB-RATELIMIT-REMAINING, bevor Sie Anfragen stellen.
  2. Effiziente API-Nutzung:
  1. Exponentielles Backoff: Warten Sie nach Erhalt eines 429-Fehlers, bevor Sie es erneut versuchen. Implementieren Sie ein exponentielles Backoff (z. B. warten Sie 1 Sekunde, dann 2 Sekunden, 4 Sekunden, 8 Sekunden usw., mit Jitter), um den Server nicht zu überlasten.
  2. WebSockets für Echtzeitdaten: Für Orderbuch-Updates, Live-Trades und Ticker sind WebSocket-Verbindungen deutlich effizienter als REST-Polling.

Operative Exzellenz: Runbook-Prinzipien

Robuste operative Praktiken sind für jede Handels-API-Integration von entscheidender Bedeutung.

Überwachung und Benachrichtigung

Protokollierung

Protokollieren Sie wichtige Informationen für das Debuggen und die Prüfung:

Sicherheits-Best Practices

Erweiterte Themen und Techniken

WebSocket-Feeds für Echtzeitdaten

Coinbase Exchange bietet WebSocket-Feeds für Echtzeitdaten mit geringer Latenz.

{
    "type": "subscribe",
    "product_ids": ["ETH-USD", "BTC-USD"],
    "channels": [
        "level2", // For Level 2 order book updates
        "heartbeat", // To keep connection alive and monitor status
        {
            "name": "ticker", // Ticker channel for specific products
            "product_ids": ["ETH-USD", "BTC-USD"]
        },
        "status" // For updates on product trading statuses
    ],
    // For user-specific updates (orders, balances), authentication is required within the WebSocket handshake or initial messages.
    // "signature": "...", "key": "...", "passphrase": "...", "timestamp": "..." (if auth needed for certain channels)
}

Nachrichtentypen:

Idempotenz und client_oid

Um doppelte Auftragseinreichungen aufgrund von Netzwerkproblemen oder Wiederholungen zu verhindern, können POST /orders-Anforderungen ein client_oid-Feld enthalten. Dies sollte ein eindeutiger Bezeichner (z. B. UUID v4) sein, der von Ihrem Client generiert wird.

Selbsthandelsprävention (STP)

Der Parameter stp bei der Auftragserteilung (POST /orders) hilft zu verhindern, dass die Aufträge eines Kontos miteinander abgeglichen werden. Optionen umfassen typischerweise:

Fazit

Die Coinbase Exchange API bietet Entwicklern ein umfassendes Toolkit zum Erstellen anspruchsvoller Handelsanwendungen und -integrationen. Die Beherrschung der Authentifizierung, das Verständnis der Datenstrukturen, die Einhaltung von Ratenbegrenzungen und die Implementierung robuster operativer Praktiken sind der Schlüssel zur Nutzung ihres vollen Potenzials. Der Übergang zu WebSocket-Feeds für Echtzeitdaten und Funktionen wie client_oid für Idempotenz befähigt Entwickler weiter, widerstandsfähige und effiziente Systeme in der rasanten Welt des Kryptowährungshandels zu erstellen. Kontinuierliche Aufmerksamkeit für die offizielle Entwicklerdokumentation von Coinbase ist entscheidend, um über neue Funktionen, Endpunktänderungen und Best Practices auf dem Laufenden zu bleiben.

Explore more

Fathom-R1-14B: Fortschrittliches KI-Argumentationsmodell aus Indien

Fathom-R1-14B: Fortschrittliches KI-Argumentationsmodell aus Indien

Künstliche Intelligenz wächst rasant. FractalAIResearch/Fathom-R1-14B (14,8 Mrd. Parameter) glänzt in Mathe & Logik.

5 June 2025

Cursor 1.0 mit BugBot: KI-gestütztes Automatisierungstest-Tool ist da:

Cursor 1.0 mit BugBot: KI-gestütztes Automatisierungstest-Tool ist da:

Die Softwareentwicklung erlebt Innovationen durch KI. Cursor, ein KI-Editor, erreicht mit Version 1.0 einen Meilenstein.

5 June 2025

30+ öffentliche Web 3.0 APIs, die Sie jetzt nutzen können

30+ öffentliche Web 3.0 APIs, die Sie jetzt nutzen können

Der Aufstieg von Web 3.0: Dezentral, nutzerorientiert, transparent. APIs ermöglichen innovative dApps und Blockchain-Integration.

4 June 2025

Praktizieren Sie API Design-First in Apidog

Entdecken Sie eine einfachere Möglichkeit, APIs zu erstellen und zu nutzen