Magento 2 API nutzen: E-Commerce Integration Leitfaden (2026)

@apidog

@apidog

25 March 2026

Magento 2 API nutzen: E-Commerce Integration Leitfaden (2026)

Apidog für Unternehmen

On-Premises-Bereitstellung

SSO & RBAC

SOC 2 konform

Apidog Enterprise entdecken

TL;DR

Die Magento 2 (Adobe Commerce) API ermöglicht Entwicklern die programmatische Integration mit E-Commerce-Shops. Sie verwendet REST-, SOAP- und GraphQL-Endpunkte mit OAuth 1.0a und tokenbasierter Authentifizierung und bietet Zugriff auf Produkte, Bestellungen, Kunden, Inventar und mehr, mit konfigurierbaren Ratenlimits. Dieser Leitfaden behandelt die Authentifizierungseinrichtung, CRUD-Operationen, Webhooks, benutzerdefinierte Endpunkte und Integrationsstrategien für die Produktion.

Einführung

Adobe Commerce (Magento) betreibt über 250.000 E-Commerce-Shops mit einem jährlichen Bruttowarenwert von über 155 Milliarden US-Dollar. Für Entwickler, die E-Commerce-Integrationen, ERP-Konnektoren oder mobile Apps erstellen, ist die Magento API-Integration nicht optional – sie ist unerlässlich, um diesen riesigen Händlerstamm zu erreichen.

Hier ist die Realität: Händler, die mehrere Vertriebskanäle verwalten, verlieren wöchentlich 20-30 Stunden durch manuelle Dateneingaben zwischen Magento und anderen Systemen. Eine solide Magento API-Integration automatisiert die Produktsynchronisation, Auftragsabwicklung, Bestandsaktualisierungen und das Kundenbeziehungsmanagement.

Dieser Leitfaden führt Sie durch den vollständigen Magento 2 API-Integrationsprozess. Sie lernen OAuth 1.0a und Token-Authentifizierung, REST/SOAP/GraphQL-Endpunkte, Produkt- und Bestellverwaltung, Webhooks, die Entwicklung benutzerdefinierter APIs und Bereitstellungsstrategien für die Produktion kennen. Am Ende werden Sie eine produktionsreife Magento-Integration haben.

💡
Apidog vereinfacht das Testen der API-Integration. Testen Sie Ihre Magento-Endpunkte, validieren Sie Authentifizierungsabläufe, prüfen Sie API-Antworten und debuggen Sie Integrationsprobleme in einem Arbeitsbereich. Importieren Sie API-Spezifikationen, modellieren Sie Antworten und teilen Sie Testszenarien mit Ihrem Team.
button

Was ist die Magento 2 API?

Magento 2 bietet drei API-Typen für den Zugriff auf E-Commerce-Daten:

Die API verwaltet:

Hauptfunktionen

Funktion Beschreibung
Mehrere Protokolle REST, SOAP, GraphQL
OAuth 1.0a Sicherer Zugriff von Drittanbietern
Token-Authentifizierung Admin- und Integrationstoken
Webhooks Asynchrone Operationen über Warteschlangen
Ratenbegrenzung Pro Installation konfigurierbar
Benutzerdefinierte Endpunkte Mit benutzerdefinierten APIs erweitern
Multi-Store Eine API, mehrere Store-Ansichten

API-Vergleich

API-Typ Protokoll Anwendungsfall
REST JSON Mobile Apps, Integrationen
SOAP XML Unternehmenssysteme (SAP, Oracle)
GraphQL GraphQL Storefront, PWA

Magento-Versionen

Version Status Ende des Supports
Magento 2.4.x Aktuell Aktiv
Adobe Commerce 2.4.x Aktuell Aktiv
Magento 1.x EOL Juni 2020 (Nicht verwenden)

Erste Schritte: Authentifizierung einrichten

Schritt 1: Admin-Konto oder Integration erstellen

Vor dem Zugriff auf die API:

  1. Melden Sie sich im Magento Admin Panel an
  2. Navigieren Sie zu System > Berechtigungen > Alle Benutzer
  3. Admin-Benutzer erstellen (für Admin-Token) ODER
  4. Navigieren Sie zu System > Erweiterungen > Integrationen
  5. Neue Integration erstellen (für OAuth)

Schritt 2: Authentifizierungsmethode wählen

Methode Am besten geeignet für Token-Lebensdauer
Admin-Token Interne Integrationen Konfigurierbar (Standard: 4 Stunden)
Integrationstoken Drittanbieter-Apps Bis zum Widerruf
OAuth 1.0a Öffentliche Marktplatz-Apps Bis zum Widerruf
Kunden-Token Kundenorientierte Apps Konfigurierbar

Schritt 3: Admin-Token abrufen (einfachste Methode)

Admin-Token für interne Integrationen generieren:

const MAGENTO_BASE_URL = process.env.MAGENTO_BASE_URL;
const MAGENTO_ADMIN_USERNAME = process.env.MAGENTO_ADMIN_USERNAME;
const MAGENTO_ADMIN_PASSWORD = process.env.MAGENTO_ADMIN_PASSWORD;

const getAdminToken = async () => {
  const response = await fetch(`${MAGENTO_BASE_URL}/rest/V1/integration/admin/token`, {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({
      username: MAGENTO_ADMIN_USERNAME,
      password: MAGENTO_ADMIN_PASSWORD
    })
  });

  if (!response.ok) {
    throw new Error('Invalid admin credentials');
  }

  // Response is a plain string (the token), not JSON
  const token = await response.text();
  return token;
};

// Usage
const token = await getAdminToken();
console.log(`Admin token: ${token}`);
// Store securely - use for subsequent API calls

Sicherheitshinweis: Token sicher speichern:

# .env file
MAGENTO_BASE_URL="https://store.example.com"
MAGENTO_ADMIN_USERNAME="api_user"
MAGENTO_ADMIN_PASSWORD="secure_password_here"
MAGENTO_ACCESS_TOKEN="obtained_via_auth"

Schritt 4: Integration erstellen (für Drittanbieter empfohlen)

Integration über das Admin Panel erstellen:

Gehen Sie zu System > Erweiterungen > Integrationen

Klicken Sie auf Neue Integration hinzufügen

Details ausfüllen:

API-Berechtigungen festlegen:

Klicken Sie auf Speichern

Klicken Sie auf Aktivieren bei der neuen Integration

Kopieren Sie den Zugriffstoken und das Token Secret

Schritt 5: Kunden-Token abrufen

Für kundenorientierte Anwendungen:

const getCustomerToken = async (email, password) => {
  const response = await fetch(`${MAGENTO_BASE_URL}/rest/V1/integration/customer/token`, {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({
      username: email,
      password: password
    })
  });

  if (!response.ok) {
    throw new Error('Invalid customer credentials');
  }

  const token = await response.text();
  return token;
};

// Usage
const customerToken = await getCustomerToken('customer@example.com', 'password123');

Schritt 6: Authentifizierte API-Aufrufe tätigen

Wiederverwendbaren API-Client erstellen:

const magentoRequest = async (endpoint, options = {}) => {
  const token = await getAdminToken(); // Or retrieve stored token

  const response = await fetch(`${MAGENTO_BASE_URL}/rest${endpoint}`, {
    ...options,
    headers: {
      'Authorization': `Bearer ${token}`,
      'Content-Type': 'application/json',
      ...options.headers
    }
  });

  if (!response.ok) {
    const error = await response.json();
    throw new Error(`Magento API Error: ${error.message}`);
  }

  return response.json();
};

// Usage
const products = await magentoRequest('/V1/products');
console.log(`Found ${products.items.length} products`);

Produktverwaltung

Produkte abrufen

Produkte mit Filterung abrufen:

const getProducts = async (filters = {}) => {
  const params = new URLSearchParams();

  // Build search criteria
  if (filters.search) {
    params.append('searchCriteria[filterGroups][0][filters][0][field]', 'sku');
    params.append('searchCriteria[filterGroups][0][filters][0][value]', `%${filters.search}%`);
    params.append('searchCriteria[filterGroups][0][filters][0][conditionType]', 'like');
  }

  if (filters.priceFrom) {
    params.append('searchCriteria[filterGroups][1][filters][0][field]', 'price');
    params.append('searchCriteria[filterGroups][1][filters][0][value]', filters.priceFrom);
    params.append('searchCriteria[filterGroups][1][filters][0][conditionType]', 'gteq');
  }

  params.append('searchCriteria[pageSize]', filters.limit || 20);
  params.append('searchCriteria[currentPage]', filters.page || 1);

  const response = await magentoRequest(`/V1/products?${params.toString()}`);
  return response;
};

// Usage
const products = await getProducts({ search: 'shirt', priceFrom: 20, limit: 50 });

products.items.forEach(product => {
  console.log(`${product.sku}: ${product.name} - $${product.price}`);
});

Einzelnes Produkt abrufen

Produkt nach SKU abrufen:

const getProduct = async (sku) => {
  const response = await magentoRequest(`/V1/products/${sku}`);
  return response;
};

// Usage
const product = await getProduct('TSHIRT-001');
console.log(`Name: ${product.name}`);
console.log(`Price: $${product.price}`);
console.log(`Stock: ${product.extension_attributes?.stock_item?.qty}`);

Ein Produkt erstellen

Einfaches Produkt erstellen:

const createProduct = async (productData) => {
  const product = {
    product: {
      sku: productData.sku,
      name: productData.name,
      attribute_set_id: productData.attributeSetId || 4, // Default set
      type_id: 'simple',
      price: productData.price,
      status: productData.status || 1, // 1=enabled, 2=disabled
      visibility: productData.visibility || 4, // 4=Catalog & Search
      weight: productData.weight || 1,
      extension_attributes: {
        stock_item: {
          qty: productData.qty || 0,
          is_in_stock: productData.qty > 0 ? true : false
        }
      },
      custom_attributes: [
        {
          attribute_code: 'description',
          value: productData.description
        },
        {
          attribute_code: 'short_description',
          value: productData.shortDescription
        },
        {
          attribute_code: 'color',
          value: productData.color
        },
        {
          attribute_code: 'size',
          value: productData.size
        }
      ]
    }
  };

  const response = await magentoRequest('/V1/products', {
    method: 'POST',
    body: JSON.stringify(product)
  });

  return response;
};

// Usage
const newProduct = await createProduct({
  sku: 'TSHIRT-NEW-001',
  name: 'Premium Cotton T-Shirt',
  price: 29.99,
  qty: 100,
  description: 'High-quality cotton t-shirt',
  shortDescription: 'Premium cotton tee',
  color: 'Blue',
  size: 'M'
});

console.log(`Product created: ${newProduct.id}`);

Ein Produkt aktualisieren

Produktinformationen aktualisieren:

const updateProduct = async (sku, updates) => {
  const product = {
    product: {
      sku: sku,
      ...updates
    }
  };

  const response = await magentoRequest(`/V1/products/${sku}`, {
    method: 'PUT',
    body: JSON.stringify(product)
  });

  return response;
};

// Usage - Update price and stock
await updateProduct('TSHIRT-001', {
  price: 24.99,
  extension_attributes: {
    stock_item: {
      qty: 150,
      is_in_stock: true
    }
  }
});

Ein Produkt löschen

Produkt entfernen:

const deleteProduct = async (sku) => {
  await magentoRequest(`/V1/products/${sku}`, {
    method: 'DELETE'
  });

  console.log(`Product ${sku} deleted`);
};

Produkttypen

Typ Beschreibung Anwendungsfall
Einfach Eine SKU, keine Varianten Standardprodukte
Konfigurierbar Übergeordnetes Element mit Kind-Varianten Größen-/Farboptionen
Gruppiert Sammlung einfacher Produkte Produktbündel
Virtuell Nicht-physische Produkte Dienste, Downloads
Bündel Anpassbare Produktbündel Zusammenstellbare Kits
Herunterladbar Digitale Produkte E-Books, Software

Auftragsverwaltung

Bestellungen abrufen

Bestellungen mit Filterung abrufen:

const getOrders = async (filters = {}) => {
  const params = new URLSearchParams();

  if (filters.status) {
    params.append('searchCriteria[filterGroups][0][filters][0][field]', 'status');
    params.append('searchCriteria[filterGroups][0][filters][0][value]', filters.status);
    params.append('searchCriteria[filterGroups][0][filters][0][conditionType]', 'eq');
  }

  if (filters.dateFrom) {
    params.append('searchCriteria[filterGroups][1][filters][0][field]', 'created_at');
    params.append('searchCriteria[filterGroups][1][filters][0][value]', filters.dateFrom);
    params.append('searchCriteria[filterGroups][1][filters][0][conditionType]', 'gteq');
  }

  params.append('searchCriteria[pageSize]', filters.limit || 20);
  params.append('searchCriteria[currentPage]', filters.page || 1);

  const response = await magentoRequest(`/V1/orders?${params.toString()}`);
  return response;
};

// Usage - Get pending orders from last 7 days
const orders = await getOrders({
  status: 'pending',
  dateFrom: '2026-03-18 00:00:00',
  limit: 50
});

orders.items.forEach(order => {
  console.log(`Order #${order.increment_id}: ${order.customer_email} - $${order.grand_total}`);
});

Einzelne Bestellung abrufen

Bestellung nach ID abrufen:

const getOrder = async (orderId) => {
  const response = await magentoRequest(`/V1/orders/${orderId}`);
  return response;
};

// Usage
const order = await getOrder(12345);
console.log(`Order #${order.increment_id}`);
console.log(`Status: ${order.status}`);
console.log(`Total: $${order.grand_total}`);
console.log(`Items:`);
order.items.forEach(item => {
  console.log(`  - ${item.name} x ${item.qty_ordered}`);
});

Bestellstatus-Fluss

pending → processing → complete
        → canceled
        → on_hold
        → payment_review

Bestellstatus aktualisieren

Bestellstatus ändern:

const updateOrderStatus = async (orderId, newStatus) => {
  // Note: Direct status update requires custom endpoint
  // Use order management workflow instead:

  // For cancel:
  await magentoRequest(`/V1/orders/${orderId}/cancel`, {
    method: 'POST'
  });

  // For hold:
  await magentoRequest(`/V1/orders/${orderId}/hold`, {
    method: 'POST'
  });

  // For unhold:
  await magentoRequest(`/V1/orders/${orderId}/unhold`, {
    method: 'POST'
  });
};

Rechnung erstellen

Rechnung für Bestellung generieren:

const createInvoice = async (orderId, items = [], notify = true, appendComment = false, comment = null) => {
  const invoice = {
    capture: true, // true = capture payment
    last: true,
    items: items // Array of {order_item_id, qty}
  };

  if (comment) {
    invoice.comment = comment;
    invoice.notify_customer = notify ? 1 : 0;
    invoice.append_comment = appendComment ? 1 : 0;
  }

  const response = await magentoRequest(`/V1/order/${orderId}/invoice`, {
    method: 'POST',
    body: JSON.stringify(invoice)
  });

  return response;
};

// Usage - Invoice and capture full order
const invoiceId = await createInvoice(12345, [], true, false, 'Thank you for your order!');
console.log(`Invoice created: ${invoiceId}`);

Sendung erstellen

Bestellung versenden:

const createShipment = async (orderId, items = [], notify = true, appendComment = false, comment = null, tracks = []) => {
  const shipment = {
    items: items, // Array of {order_item_id, qty}
    notify: notify ? 1 : 0,
    append_comment: appendComment ? 1 : 0,
    comment: comment,
    tracks: tracks // Array of {track_number, title, carrier_code}
  };

  const response = await magentoRequest(`/V1/order/${orderId}/ship`, {
    method: 'POST',
    body: JSON.stringify(shipment)
  });

  return response;
};

// Usage - Ship with tracking
const shipmentId = await createShipment(12345, [], true, false, 'Your order has shipped!', [
  {
    track_number: '1Z999AA10123456784',
    title: 'Tracking Number',
    carrier_code: 'ups'
  }
]);
console.log(`Shipment created: ${shipmentId}`);

Kundenverwaltung

Kunden abrufen

Kunden abrufen:

const getCustomers = async (filters = {}) => {
  const params = new URLSearchParams();

  if (filters.email) {
    params.append('searchCriteria[filterGroups][0][filters][0][field]', 'email');
    params.append('searchCriteria[filterGroups][0][filters][0][value]', filters.email);
    params.append('searchCriteria[filterGroups][0][filters][0][conditionType]', 'eq');
  }

  params.append('searchCriteria[pageSize]', filters.limit || 20);

  const response = await magentoRequest(`/V1/customers/search?${params.toString()}`);
  return response;
};

// Usage
const customers = await getCustomers({ email: 'customer@example.com' });
customers.items.forEach(customer => {
  console.log(`${customer.firstname} ${customer.lastname} - ${customer.email}`);
});

Einen Kunden erstellen

Neuen Kunden registrieren:

const createCustomer = async (customerData) => {
  const customer = {
    customer: {
      websiteId: customerData.websiteId || 1,
      email: customerData.email,
      firstname: customerData.firstname,
      lastname: customerData.lastname,
      middlename: customerData.middlename || '',
      gender: customerData.gender || 0,
      store_id: customerData.storeId || 0,
      extension_attributes: {
        is_subscribed: customerData.subscribed || false
      }
    },
    password: customerData.password
  };

  const response = await magentoRequest('/V1/customers', {
    method: 'POST',
    body: JSON.stringify(customer)
  });

  return response;
};

// Usage
const newCustomer = await createCustomer({
  email: 'newcustomer@example.com',
  firstname: 'John',
  lastname: 'Doe',
  password: 'SecurePass123!',
  subscribed: true
});

console.log(`Customer created: ID ${newCustomer.id}`);

Bestandsverwaltung (MSI)

Lagerstatus abrufen

Produktbestand prüfen:

const getStockStatus = async (sku) => {
  const response = await magentoRequest(`/V1/products/${sku}/stockItems/1`);
  return response;
};

// Usage
const stock = await getStockStatus('TSHIRT-001');
console.log(`Qty: ${stock.qty}`);
console.log(`In Stock: ${stock.is_in_stock}`);
console.log(`Min Qty: ${stock.min_qty}`);

Bestand aktualisieren

Produktmenge aktualisieren:

const updateStock = async (sku, qty, isInStock = null) => {
  const stockItem = {
    stockItem: {
      qty: qty,
      is_in_stock: isInStock !== null ? isInStock : qty > 0
    }
  };

  const response = await magentoRequest(`/V1/products/${sku}/stockItems/1`, {
    method: 'PUT',
    body: JSON.stringify(stockItem)
  });

  return response;
};

// Usage
await updateStock('TSHIRT-001', 100, true);

Webhooks und asynchrone Operationen

Webhooks einrichten

Magento verwendet Nachrichtenwarteschlangen für asynchrone Benachrichtigungen:

// Magento doesn't have native webhooks
// Use these approaches instead:

// 1. Poll orders endpoint periodically
const pollNewOrders = async (lastOrderId) => {
  const orders = await getOrders({
    dateFrom: new Date().toISOString()
  });

  const newOrders = orders.items.filter(o => o.id > lastOrderId);
  return newOrders;
};

// 2. Use Adobe I/O Events (Adobe Commerce only)
// Configure events in Adobe Developer Console

// 3. Create custom webhook module
// See: https://devdocs.magento.com/guides/v2.4/extension-dev-guide/message-queues/message-queues.html

Ratenbegrenzung

Ratenbegrenzungen verstehen

Magento-Ratenbegrenzungen sind konfigurierbar:

Im Admin konfigurieren: Stores > Konfiguration > Dienste > Web API > Sicherheit

Implementierung der Ratenbegrenzungsbehandlung

const makeRateLimitedRequest = async (endpoint, options = {}, maxRetries = 3) => {
  for (let attempt = 1; attempt <= maxRetries; attempt++) {
    try {
      const response = await magentoRequest(endpoint, options);
      return response;
    } catch (error) {
      if (error.message.includes('429') && attempt < maxRetries) {
        const delay = Math.pow(2, attempt) * 1000;
        await new Promise(resolve => setTimeout(resolve, delay));
      } else {
        throw error;
      }
    }
  }
};

Checkliste für die Produktivbereitstellung

Vor der Live-Schaltung:

Praxisbeispiele

ERP-Integration

Ein Hersteller synchronisiert seinen Bestand:

Mobile App

Ein Händler entwickelt eine Shopping-App:

Fazit

Die Magento 2 API bietet umfassende E-Commerce-Funktionalität. Wichtige Erkenntnisse:

button

FAQ-Bereich

Wie authentifiziere ich mich bei der Magento API?

Verwenden Sie einen Admin-Token für interne Integrationen oder erstellen Sie eine Integration unter System > Erweiterungen für OAuth. Kunden-Token für kundenorientierte Apps.

Was ist der Unterschied zwischen REST und GraphQL in Magento?

REST bietet vollständige CRUD-Operationen. GraphQL ist für Frontend-Abfragen mit effizienter Datenabfrage optimiert.

Wie erstelle ich ein Produkt über die API?

POST an /V1/products mit Produktdaten, einschließlich SKU, Name, Preis und stock_item in den extension_attributes.

Kann ich Webhooks für neue Bestellungen erhalten?

Magento hat keine nativen Webhooks. Verwenden Sie Polling, Adobe I/O Events (Adobe Commerce) oder erstellen Sie ein benutzerdefiniertes Modul.

Wie aktualisiere ich Bestandsmengen?

PUT an /V1/products/{sku}/stockItems/1 mit den Werten für qty und is_in_stock.

Praktizieren Sie API Design-First in Apidog

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