API Kollektionen auslesen funktioniert nichtxx

Topic summary

Ein Entwickler erhält einen 404-Fehler beim Versuch, Shopify-Kollektionen über die Node.js API auszulesen, obwohl das Abrufen von Produkten mit demselben Access-Token funktioniert.

Technische Details:

  • Verwendeter Endpoint: collection_listings.json
  • Fehler: AxiosError: Request failed with status code 404
  • Produkt-API-Calls funktionieren erfolgreich
  • Access-Token und Authentifizierung scheinen korrekt zu sein

Vorgeschlagene Lösung:
Ein anderer Nutzer identifiziert das Problem im verwendeten API-Endpoint und empfiehlt:

  • Für Custom Collections: custom_collections.json statt collection_listings.json
  • Für Smart Collections: smart_collections.json
  • Verweis auf die offizielle Shopify API-Dokumentation

Zusätzliche Hinweise:

  • Überprüfung der erforderlichen Scopes (z.B. read_custom_collections, read_smart_collections)
  • Mögliche API-Versionsunterschiede beachten

Die Diskussion bleibt offen, da noch keine Bestätigung vorliegt, ob die vorgeschlagene Lösung das Problem behoben hat.

Summarized with AI on November 16. AI used: claude-sonnet-4-5-20250929.

Guten Tag,

ich bentuze die Shopify Node.JS Api und möchte Api calls machen mit meinem Access-Token. Es klappt auch z.b kann ich mit dem Access Token meine Produkte bekommen. Problem ist aber, dass ich meine Kollektionen nicht auslesen kann, da ich 404 bad request bekomme. Weiß jemand woran das liegt ?

export const buildGetCollectionUrl = (shop: any) => `https://${shop}/admin/api/2023-04/collection_listings.json`;

export const fetchCollection = async (shop: any, accessToken: any) => await axios(buildGetCollectionUrl(shop), {
  method: 'GET',
  headers: {
    'X-Shopify-Access-Token': accessToken,
    'Content-Type': 'application/json',
  }
});

app.get('/auth/callback', async (req: any, res: any) => {
  try {
    // The library will automatically redirect the user
    const callback = await shopify.auth.callback({
      rawRequest: req,
      rawResponse: res,
    });

    const response = await shopify.webhooks.register({
      session: callback.session,
    });

    const { data: collections } = await fetchCollection(callback.session.shop, callback.session.accessToken);
    console.log(collections);

Hab jetzt nicht den Auth0 prozess reingemacht, da der jetzt unnötig ist und ich ja den access token bekomme.

Diesen Error bekomm ich:

AxiosError: Request failed with status code 404
    at settle (C:\express_inngest\node_modules\axios\lib\core\settle.js:19:12)
    at BrotliDecompress.handleStreamEnd (C:\express_inngest\node_modules\axios\lib\adapters\http.js:572:11)
    at BrotliDecompress.emit (node:events:402:35)
    at BrotliDecompress.emit (node:domain:475:12)
    at endReadableNT (node:internal/streams/readable:1343:12)
    at processTicksAndRejections (node:internal/process/task_queues:83:21) {
  code: 'ERR_BAD_REQUEST',
  config: {
    transitional: {
      silentJSONParsing: true,
      forcedJSONParsing: true,
      clarifyTimeoutError: false
    },
    adapter: 'http',
    transformRequest: [ [Function: transformRequest] ],
    transformResponse: [ [Function: transformResponse] ],
    timeout: 0,
    xsrfCookieName: 'XSRF-TOKEN',
    xsrfHeaderName: 'X-XSRF-TOKEN',
    maxContentLength: -1,
    maxBodyLength: -1,
    env: { FormData: [Function], Blob: null },
    validateStatus: [Function: validateStatus],
    headers: Object [AxiosHeaders] {
      Accept: 'application/json, text/plain, */*',
      'Content-Type': undefined,
      'X-Shopify-Access-Token': 'xxxx_xxxxxxx',
      'User-Agent': 'axios/1.5.0',
      'Accept-Encoding': 'gzip, compress, deflate, br'
    },

Natürlich hab ich ebenso meine Scopes eingestellt:

const shopify = shopifyApi({
  apiKey: 'xxxx',
  apiSecretKey: 'xxxx',
  scopes: ['read_products', 'write_products', 'read_orders', 'write_orders', 'read_product_listings', 'write_product_listings', 'unauthenticated_read_product_listings'],
  hostName: '93c5-2a02-908-4b74-122s-e9a8-dd08-43ef-4725.ngrok-free.app/',
  apiVersion: LATEST_API_VERSION,
  isEmbeddedApp: true
});

Hey @appstarter123

Danke für die Angaben und der :bug: scheint in der URL zu liegen, die du verwendest, um die Collection abzurufen, kann mich aber irren. Du rufst die Collections mit dem collection_listings.json Endpunkt ab. Sollte es nicht custom_collections.json sein laut der API-Doku?

Für die “Smart” Collections https://[shop]/admin/api/2023-04/smart_collections.json?

Wie wärs mit export const buildGetCollectionUrl = (shop: any) => https://${shop}/admin/api/2023-04/custom_collections.json;?

Oder export const buildGetCollectionUrl = (shop: any) => https://${shop}/admin/api/2023-04/smart_collections.json; je nach Art der Collection?

Stelle außerdem sicher, dass du die entsprechenden Berechtigungen (Scopes) in deiner App hast, um auf Kollektionen zuzugreifen, z. B. read_custom_collections und/oder read_smart_collections.

Wenn du immer noch Probleme hast, nachdem du diese Änderungen vorgenommen hast, würde ich empfehlen, zu :eyes: , ob es neue Updates oder Anforderungen bzw. Änderungen in der API-Version gibt, die du verwendest.