# Produkt per API erstellen?

**URL:** <https://forum.shopware.com/t/produkt-per-api-erstellen/102528>\
**Category:** Shopware 6 (German)\
**Tags:** administration, programming\
**Created:** [16. Januar 2024 um 16:09 UTC](https://forum.shopware.com/t/produkt-per-api-erstellen/102528 "2024-01-16T16:09:53Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![davko](https://avatars.discourse-cdn.com/v4/letter/d/e9bcb4/32.png) [@davko](https://forum.shopware.com/u/davko)\
**Post date:** [16. Januar 2024 um 16:09 UTC](https://forum.shopware.com/t/produkt-per-api-erstellen/102528/1 "2024-01-16T16:09:53Z")

</div>

Hallo, ich möchte mir die API zunutze machen und ein paar Produkte erstellen aber es klappt einfach nicht kann mir jemand helfen?  
ich beiße mir daran jetzt schon 2 tage die zähne aus

Script:

> const axios = require(‚axios‘);
> 
> const apiUrl = ‚[https://beispiel.de](https://beispiel.de)‘; // Ersetze dies durch die URL deines Shopware 6 Shops  
> const accessToken = ‚XXXXXXXXXXXXXXXXXXXXXX‘; // Ersetze dies durch dein Access Token
> 
> const productData = {  
> „name“: „Testprodukt“,  
> „productNumber“: „random“,  
> „stock“: 10,  
> „price“: [  
> {  
> „currencyId“: „b7d2554b0ce847cd82f3ac9bd1c0dfca“,  
> „gross“: 15,  
> „net“: 10,  
> „linked“: false  
> }  
> ],  
> „taxId“: „a5da76b447db4d0aba62e6512dadf45b“  
> };
> 
> async function addProduct() {  
> try {  
> const response = await axios.post(`${apiUrl}/api/product`, productData, {  
> headers: {  
> ‚Accept‘: ‚application/json‘,  
> ‚Content-Type‘: ‚application/json‘,  
> ‚Authorization‘: `Bearer ${accessToken}`,  
> },  
> });
> 
> ```
> console.log('Produkt erfolgreich hinzugefügt:', response.data);
> 
> ```
> 
> } catch (error) {  
> console.error(‚Fehler beim Hinzufügen des Produkts:‘, error.response ? error.response.data : error.message);  
> }  
> }
> 
> addProduct();

Fehlermeldung:

> C:\Users\XX\Desktop\script\>node prod.js  
> Fehler beim Hinzufügen des Produkts: {  
> errors: [  
> {  
> code: ‚9‘,  
> status: ‚401‘,  
> title: ‚The resource owner or authorization server denied the request.‘,  
> detail: ‚The JWT string must have two dots‘,  
> meta: [Object]  
> }  
> ]  
> }

habe ich was vergessen oder was muss ich ändern? Danke

---

<div class="post-metadata">

**Author:** ![chamaw](https://avatars.discourse-cdn.com/v4/letter/c/b487fb/32.png) [@chamaw](https://forum.shopware.com/u/chamaw)\
**Post date:** [16. Januar 2024 um 16:28 UTC](https://forum.shopware.com/t/produkt-per-api-erstellen/102528/2 "2024-01-16T16:28:27Z")

</div>

Das scheint zunächst ein Problem mit dem Token zu sein. Der Token hält in der Standard Installation nur kurz. Wie holst Du den Token ?  
Und Du musst die ID im Client erzeugen !

LG

Carsten Harnisch

---

<div class="post-metadata">

**Author:** ![davko](https://avatars.discourse-cdn.com/v4/letter/d/e9bcb4/32.png) [@davko](https://forum.shopware.com/u/davko)\
**Post date:** [16. Januar 2024 um 20:46 UTC](https://forum.shopware.com/t/produkt-per-api-erstellen/102528/3 "2024-01-16T20:46:16Z")

</div>

Den Token hole ich mir aus meinem Verkaufskanal, ich habe jedoch auch einen über das Admin Profil erstellt. LG

---

<div class="post-metadata">

**Author:** ![chamaw](https://avatars.discourse-cdn.com/v4/letter/c/b487fb/32.png) [@chamaw](https://forum.shopware.com/u/chamaw)\
**Post date:** [16. Januar 2024 um 21:20 UTC](https://forum.shopware.com/t/produkt-per-api-erstellen/102528/4 "2024-01-16T21:20:20Z")

</div>

Das ist dann vermutlich eher der User und ein Secret.  
Also dann erst so wie hier den Token erzeugen:

> **[Authentication | Admin API](https://shopware.stoplight.io/docs/admin-api/8e1d78252fa6f-authentication)**
>
> The Admin API uses the OAuth 2.0 standard to authenticate users. In short, OAuth 2.0 requires you to obtain an access token which you will have to include in every subsequent request so the server can confirm your identity. Powered by Stoplight.

---

<div class="post-metadata">

**Author:** ![davko](https://avatars.discourse-cdn.com/v4/letter/d/e9bcb4/32.png) [@davko](https://forum.shopware.com/u/davko)\
**Post date:** [17. Januar 2024 um 10:53 UTC](https://forum.shopware.com/t/produkt-per-api-erstellen/102528/5 "2024-01-17T10:53:35Z")

</div>

ich habe das mal hinzugefügt:

```auto
const axios = require('axios');

const apiUrl = 'https://BEISPIEL.de';
const clientId = 'administration';
const clientSecret = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX';
const username = 'XXXXXXXXXXXXX';
const password = 'XXXXXXXXXXXXX';

// Funktion, um Access Token zu erhalten
async function getAccessToken() {
  try {
    const response = await axios.post(`${apiUrl}/api/oauth/token`, {
      grant_type: 'password',
      client_id: clientId,
      client_secret: clientSecret,
      username: username,
      password: password,
    });

    return response.data.access_token;
  } catch (error) {
    console.error('Fehler beim Erhalten des Access Tokens:', error.response ? error.response.data : error.message);
    throw error;
  }
}

async function addProduct(accessToken) {
  const productData = {
    name: 'Testprodukt',
    productNumber: 'random',
    stock: 10,
    taxId: 'a5da76b447db4d0aba62e6512dadf45b',
    price: [
      {
        currencyId: 'b7d2554b0ce847cd82f3ac9bd1c0dfca',
        gross: 15,
        net: 10,
        linked: false,
      },
    ],
  };

  try {
    const response = await axios.post(`${apiUrl}/api/product`, productData, {
      headers: {
        'Content-Type': 'application/json',
        'Authorization': `Bearer ${accessToken}`,
      },
    });

    console.log('Produkt erfolgreich hinzugefügt:', response.data.data);
  } catch (error) {
    console.error('Fehler beim Hinzufügen des Produkts:', error.response ? error.response.data : error.message);
  }
}

async function main() {
  try {
    const accessToken = await getAccessToken();
    await addProduct(accessToken);
  } catch (error) {
    console.error('Allgemeiner Fehler:', error);
  }
}

main();

```

leider kommt nun dieser fehler scheint was mit der taxid zu sein:

```auto
Fehler beim Hinzufügen des Produkts: {
  errors: [
    {
      code: '1452',
      status: '500',
      title: 'Internal Server Error',
      detail: 'An exception occurred while executing a query: SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`db_XXXXXXX`.`product`, CONSTRAINT `fk.product.tax_id` FOREIGN KEY (`tax_id`) REFERENCES `tax` (`id`) ON DELETE RESTRICT ON UPDATE CASCADE)'
    }
  ]
}

```

---

<div class="post-metadata">

**Author:** ![chamaw](https://avatars.discourse-cdn.com/v4/letter/c/b487fb/32.png) [@chamaw](https://forum.shopware.com/u/chamaw)\
**Post date:** [17. Januar 2024 um 11:51 UTC](https://forum.shopware.com/t/produkt-per-api-erstellen/102528/6 "2024-01-17T11:51:32Z")

</div>

Die TaxId ist immer unterschiedlich. Die CurrencyId wird meine ich immer gleich sein. Sprich TaxId müsstest Du Dir aus der Datenbank (oder aus der URL im Backend) raussuchen.

Warum man Werte wie EUR, USD, CHF und 0%,7%,19% (oder zumindest 0,1,2) als „leicht zu merkende“ UUID verkodieren muss, kann ich Dir auch nicht sagen 🙂

herzlichst

CH
