Hoe je de Shoply Merchant API gebruikt

A secure merchant key unlocks an API connector carrying storefront chat, analytics, and knowledge into backend code

Met de Shoply Merchant API kan een merchant veilig de eigen Shoply-data gebruiken in rapportagetools, supportworkflows, geplande exports en privé-bedrijfstoepassingen.

Elke integratie authenticeert met een intrekbare, winkelgebonden credential die wordt aangemaakt in Shoply Settings. Je hoeft geen Shopify Admin API access token te delen, en een integratie heeft alleen toegang tot de winkel die de credential heeft uitgegeven.

Wat kan ik doen met de Merchant API?

Je kunt de Merchant API gebruiken om:

  • Dagelijkse, wekelijkse of maandelijkse prestatieresultaten naar een spreadsheet of datawarehouse te exporteren.
  • Een privé-dashboard te bouwen voor sessies, chats, zoekopdrachten, productklikken, add-to-cart-gebeurtenissen, aankopen en toegeschreven omzet.
  • Klantactiviteit te monitoren en ongebruikelijke veranderingen in betrokkenheid te ontdekken.
  • Chat- en zoeksessies te beoordelen voor support-, merchandising- en antwoordkwaliteitswerk.
  • De tijdlijn van een individueel gesprek op te halen bij het onderzoeken van een klantprobleem.
  • De door Shoply AI gebruikte aangepaste kennis aan te maken, bij te werken, weer te geven en te verwijderen.
  • Een externe webpagina of een geüpload PDF-, tekst- of Markdown-bestand aan de kennisbank toe te voegen.
  • UTC-gebeurtenisdata af te stemmen op de lokale tijdzone van de winkel.

Deze gids documenteert zeven endpoints. Vijf daarvan zijn dezelfde endpoints die worden gebruikt door Shoply Admin → Analytics, terwijl twee de kennisbank beheren:

APICategorieWat het retourneert
admin_store_analyticsPrestatiesDagelijkse, wekelijkse of maandelijkse prestatierijen en totalen
query_api_usage_countBetrokkenheidActiviteitstellingen gegroepeerd per UTC-minuut of dag
query_sessionized_chatGesprekkenSamenvattingen van chat- en zoeksessies
query_log_visualizationGesprekkenDe volledige gebeurtenistijdlijn voor één geselecteerde sessie
admin_get_store_metadataWinkelconfiguratieDe winkeltijdzone die wordt gebruikt om UTC-data correct weer te geven
admin_store_knowledgeKennisAangepaste tekst, externe pagina’s, geüploade bestanden, verwijdering en opnieuw crawlen
user_generated_fileKennisbestandenUploadt een PDF-, tekst- of Markdown-bestand voordat het als kennis wordt geregistreerd

De onderstaande response bodies zijn representatieve voorbeelden. Je velden en waarden weerspiegelen de activiteit die voor jouw winkel is vastgelegd.

Implementatievereiste: Authenticatie met een secret van de winkeleigenaar moet zijn uitgerold op de API-server die je aanroept. Als een geldig secret HTTP 403 retourneert met No access_token found, draait die server nog steeds op de oudere authenticatiecode die alleen access tokens ondersteunt.

Hoe maak ik een API-secret aan?

  1. Open je Shoply AI-admin.
  2. Ga naar Settings → Store owner API secret.
  3. Maak een secret aan en geef het een naam die de integratie identificeert, zoals Weekly reporting export.
  4. Kopieer het secret wanneer het verschijnt. Shoply toont de plaintext-waarde slechts één keer.
Shoply Settings showing the Store owner API secret panel, Create API secret button, expiry date, and revoke control

Elk secret is 90 dagen geldig. Een winkel kan aparte secrets hebben voor aparte integraties, en je kunt één secret intrekken zonder de andere te onderbreken.

Sla deze waarden op als server-side omgevingsvariabelen:

bash
export SHOPLY_STORE_KEY="your-store.myshopify.com" export SHOPLY_STORE_OWNER_API_SECRETE="shoply_owner_key_example123.secret-value"

Gebruik het permanente myshopify.com-domein van de winkel voor SHOPLY_STORE_KEY, zelfs als shoppers normaal een aangepast domein bezoeken.

Settings → Store owner API secret contains the Create API secret control. Keep generated secrets private.
Settings → Store owner API secret contains the Create API secret control. Keep generated secrets private. Click the screenshot to view it at full size.

Hoe werkt authenticatie?

Elke Merchant API-request stuurt een Authorization-header waarvan de waarde een JSON-string is:

json
{ "store_key": "your-store.myshopify.com", "store_owner_api_secrete": "YOUR_STORE_OWNER_API_SECRET" }

store_owner_api_secrete is exact de openbare veldnaam, inclusief de historische spelling. Dit is geen Bearer-token. Plaats de volledige JSON-string direct in de Authorization-header.

Bewaar het secret alleen in backendcode. Plaats het niet in een URL, browserbundle, openbare repository, analytics-event of applicatielog.

Zijn er officiële Python- en Node.js-packages?

Ja. Shoply publiceert twee server-side packages die automatisch de vereiste authenticatie toevoegen en de Merchant API beschikbaar maken als getypeerde functies. Beide packages zijn open source onder de GitHub-organisatie shoplyai-public.

Python-package

Het package shoply-merchant-api ondersteunt Python 3.12 en gebruikt Pydantic v2-responsemodellen. Installeer de vastgepinde release 2.1.3:

bash
python3.12 -m venv .venv source .venv/bin/activate python -m pip install "git+https://github.com/shoplyai-public/shoply-merchant-api.git@v2.1.3"

Haal de nieuwste chat- en zoeksessies op als getypeerde SessionSummary-modellen:

python
import os from shoply_merchant_api import ShoplyMerchantClient with ShoplyMerchantClient( store_key=os.environ["SHOPLY_STORE_KEY"], api_secret=os.environ["SHOPLY_STORE_OWNER_API_SECRETE"], ) as shoply: session_response = shoply.list_sessions(limit=40) for conversation in session_response.data: print(conversation.customer_id, conversation.user_questions)

Het package biedt ook functies voor analytics, activiteitstellingen, volledige sessietijdlijnen, winkeltijdzone en kennisbeheer. Zie de business-use-case-gids  en de API-referentie .

Node.js- en TypeScript-package

De repository shoply-merchant-api-js biedt het package @shoplyai/merchant-api voor Node.js 20 of nieuwer. Het is een ESM-package met ingebouwde TypeScript-declaraties en zonder runtime-afhankelijkheden. Installeer de vastgepinde release 2.1.3 direct vanaf GitHub:

bash
npm install "github:shoplyai-public/shoply-merchant-api-js#v2.1.3"

Haal dezelfde nieuwste sessies op vanaf een Node.js-server:

typescript
import { ShoplyMerchantClient } from "@shoplyai/merchant-api"; const storeKey = process.env.SHOPLY_STORE_KEY; const apiSecret = process.env.SHOPLY_STORE_OWNER_API_SECRETE; if (!storeKey || !apiSecret) { throw new Error("SHOPLY_STORE_KEY and SHOPLY_STORE_OWNER_API_SECRETE are required"); } const shoply = new ShoplyMerchantClient({ storeKey, apiSecret, }); const sessionResponse = await shoply.listSessions({ limit: 40 }); for (const conversation of sessionResponse.data) { console.log(conversation.customer_id, conversation.user_questions); }

Het npm-package ondersteunt dezelfde Merchant API-endpoints als het Python-package. Zie de business-use-case-gids  en de API-referentie .

Beide packages zijn bedoeld voor vertrouwde backendservices, geplande jobs en privé-interne tools. Importeer geen van beide packages in storefrontcode en stel het API-secret niet bloot in een browserbundle.

Kan ik de HTTP API zonder package aanroepen?

Ja. De Merchant API blijft een standaard HTTPS-API. De low-level Python-voorbeelden hieronder gebruiken Requests zodat je het volledige wire contract kunt zien of kunt integreren vanuit een andere taal.

Installeer Requests als je omgeving dit nog niet bevat:

bash
python -m pip install requests

De helper hieronder voegt de store key en authenticatieheader toe aan elke request:

python
import json import os from typing import Any import requests BASE_URL = "https://api.shoplyai.ai" STORE_KEY = os.environ["SHOPLY_STORE_KEY"] STORE_OWNER_API_SECRETE = os.environ["SHOPLY_STORE_OWNER_API_SECRETE"] session = requests.Session() session.headers.update({ "Authorization": json.dumps({ "store_key": STORE_KEY, "store_owner_api_secrete": STORE_OWNER_API_SECRETE, }) }) def shoply_get(api_name: str, **params: Any) -> dict[str, Any]: """Call one store-scoped Shoply API and surface HTTP or API-level errors.""" response = session.get( f"{BASE_URL}/{api_name}", params={"store_key": STORE_KEY, **params}, timeout=30, ) response.raise_for_status() payload = response.json() if payload.get("error") is not None or payload.get("statusCode") not in (None, 200): raise RuntimeError(payload.get("error", "Shoply API request failed")) return payload def shoply_post( api_name: str, payload: dict[str, Any] | None = None, **params: Any, ) -> dict[str, Any]: """Write store-scoped data and surface HTTP or API-level errors.""" response = session.post( f"{BASE_URL}/{api_name}", params={"store_key": STORE_KEY, **params}, json=payload, timeout=60, ) response.raise_for_status() result = response.json() if result.get("error") is not None or result.get("statusCode") not in (None, 200): raise RuntimeError(result.get("error", "Shoply API request failed")) return result

De onderstaande voorbeelden gebruiken deze gedeelde client. Beide helpers voegen automatisch de geauthenticeerde store key toe.

Kan ik Shoply AI-kennis beheren via de API?

Ja. admin_store_knowledge gebruikt GET om kennis op te halen en POST om deze aan te maken, bij te werken, te verwijderen of opnieuw te crawlen. Een POST die een bestaande knowledge-ID gebruikt, werkt die invoer bij; het gebruik van een nieuwe ID maakt er een aan.

Voordat je updates automatiseert, plan nuttige winkelkennis met de voorbeelden in onze trainingsgids.

Schrijfbewerkingen op kennis kunnen de antwoorden veranderen die aan shoppers worden getoond. Gebruik een apart secret voor het systeem dat kennis beheert, valideer content voordat je die verstuurt, en stel deze schrijfbevoegde credential nooit bloot in storefront-JavaScript.

Bestaande kennis weergeven

python
knowledge_payload = shoply_get( "admin_store_knowledge", knowledge_id_to_retrieve="_ALL_", ) for knowledge_id, knowledge in knowledge_payload["data"].items(): print(knowledge_id, knowledge.get("title"))

Voorbeeldresponse

json
{ "data": { "knowledge::shipping-policy": { "title": "Shipping policy", "text": "Orders leave our warehouse within two business days.", "epoch_edit": 1787211246 } } }

Aangepaste tekstkennis aanmaken of bijwerken

Kies een stabiele, unieke knowledge-ID. Hergebruik dezelfde ID wanneer je die invoer bijwerkt.

python
from time import time knowledge_id = "knowledge::shipping-policy" result = shoply_post( "admin_store_knowledge", { knowledge_id: { "title": "Shipping policy", "text": ( "Orders leave our warehouse within two business days. " "Standard delivery normally takes three to five business days." ), "epoch_edit": int(time()), } }, ) print(result)

Voorbeeldresponse

json
{ "statusCode": 200 }

Een succesvolle response betekent dat de kennis is opgeslagen. Zoekindexering kan enkele minuten duren, dus een nieuw antwoord verschijnt mogelijk niet meteen. Als de API meldt dat de content is opgeslagen maar de indexering vertraagd is, bevestig dan de opgeslagen invoer met GET voordat je de schrijfbewerking opnieuw probeert.

Een externe webpagina toevoegen

Gebruik een ID die begint met external_url::. Zet de volledige http://- of https://-URL in text.

python
from time import time result = shoply_post( "admin_store_knowledge", { "external_url::returns-policy": { "title": "Returns and exchanges", "text": "https://www.example.com/policies/returns", "epoch_edit": int(time()), } }, )

Een kennisbestand uploaden en registreren

Kennisbestanden moeten PDF, TXT of Markdown zijn en kleiner dan 5 MB. Upload eerst het bestand en sla daarna de geretourneerde private S3-locatie op als een knowledge-invoer.

python
from pathlib import Path from time import time file_path = Path("shipping-policy.md") with file_path.open("rb") as file_handle: upload_response = session.post( f"{BASE_URL}/user_generated_file", params={"store_key": STORE_KEY, "folder": "knowledge_file"}, files={"file": (file_path.name, file_handle, "text/markdown")}, timeout=60, ) upload_response.raise_for_status() uploaded = upload_response.json() if uploaded.get("statusCode") != 200: raise RuntimeError(uploaded.get("error", "Knowledge file upload failed")) shoply_post( "admin_store_knowledge", { "knowledge_file::shipping-policy": { "title": "Shipping policy document", "text": uploaded["file_url"], "epoch_edit": int(time()), } }, )

Voorbeeld van uploadresponse

json
{ "message": "File uploaded successfully", "statusCode": 200, "file_url": "s3://shoplystores/your-store.myshopify.com/uploads/shipping-policy.md" }

Behandel file_url als een ondoorzichtige private locatie die door Shoply wordt geretourneerd. Construeer of wijzig deze niet zelf.

Kennis verwijderen

Verwijdering is permanent. Haal eerst de huidige invoeren op en verstuur alleen de exacte ID’s die je wilt verwijderen.

python
result = shoply_post( "admin_store_knowledge", { "knowledge_ids_to_delete": [ "knowledge::shipping-policy", "external_url::returns-policy", "knowledge_file::shipping-policy", ] }, )

Een website-recrawl aanvragen

Gebruik een recrawl nadat de content op de website van de merchant is gewijzigd. Dit is normaal niet nodig na elke update van aangepaste tekst.

python
result = shoply_post( "admin_store_knowledge", re_crawl_ind="true", )

Zakelijke use-cases

  • Synchroniseer richtlijnen voor verzending, retouren, garantie, maten of productverzorging vanuit een intern contentsysteem.
  • Publiceer tijdelijke campagne- of feestdageninformatie zonder deze handmatig naar Shoply Admin te kopiëren.
  • Voeg een beleidswebpagina of goedgekeurd document toe aan de kennisbank als onderdeel van een deploymentworkflow.
  • Verwijder verouderde richtlijnen zodra een beleid of promotie eindigt.

Merchant API-voorbeelden

1. Prestatie-analytics ophalen

admin_store_analytics ondersteunt de tabel Analytics → Summary. Het retourneert sessies, chats, zoekopdrachten, klikken, add-to-cart-gebeurtenissen, aankopen en toegeschreven omzet.

Endpoint

text
GET https://api.shoplyai.ai/admin_store_analytics

Queryparameters

ParameterVereistBeschrijving
store_keyJaToegevoegd door de gedeelde client
report_typeJadaily, weekly of monthly
start_dateDagelijks/wekelijksInclusieve UTC-datum geformatteerd als YYYYMMDD
end_dateDagelijks/wekelijksInclusieve UTC-datum geformatteerd als YYYYMMDD

Maandelijkse rapporten gebruiken de opgeslagen maandelijkse geschiedenis van Shoply en vereisen geen datumgrenzen.

Python-voorbeeld

python
daily_report = shoply_get( "admin_store_analytics", report_type="daily", start_date="20260801", end_date="20260820", ) for row in daily_report["data"]: print(row["date"], row["sessions"], row["purchases"], row["revenue"]) print("Totals:", daily_report["totals"]) # Weekly rows use the Monday of each week as their date label. weekly_report = shoply_get( "admin_store_analytics", report_type="weekly", start_date="20260701", end_date="20260820", ) # Monthly requests do not need start_date or end_date. monthly_report = shoply_get("admin_store_analytics", report_type="monthly")

Voorbeeldresponse

json
{ "data": [ { "date": "20260820", "sessions": 42, "chats": 18, "searches": 24, "clicks": 11, "add_to_cart": 5, "purchases": 2, "revenue": "$168.00", "revenue_usd": "$168.00" } ], "totals": { "date": "totals", "sessions": 42, "chats": 18, "searches": 24, "clicks": 11, "add_to_cart": 5, "purchases": 2, "revenue": "$168.00", "revenue_usd": "$168.00" }, "report_type": "daily" }

Omzet kan meer dan één valuta bevatten. Behandel revenue als weergavetekst. Gebruik revenue_usd wanneer je de genormaliseerde USD-waarde nodig hebt die door Shoply wordt getoond.

Zakelijke use-cases

  • Stuur een dagelijkse samenvatting van verkoopimpact naar de merchant of het ecommerce-team.
  • Vergelijk zoekopdrachten, productklikken, add-to-cart-gebeurtenissen en aankopen om uitval in de funnel te vinden.
  • Voed een wekelijks of maandelijks business-intelligence-dashboard zonder de Shoply Admin-pagina te scrapen.
  • Volg toegeschreven omzet over de tijd en vergelijk deze met wijzigingen in merchandising of campagnes.

2. De winkeltijdzone ophalen

admin_get_store_metadata levert de tijdzonebadge die wordt getoond in Analytics → Chat & Search History. De pagina gebruikt die om UTC-activiteit naar de lokale tijd van de winkel te vertalen.

Endpoint

text
GET https://api.shoplyai.ai/admin_get_store_metadata

Queryparameters

ParameterVereistBeschrijving
store_keyJaToegevoegd door de gedeelde client
metadata_keyJaGebruik de letterlijke waarde time_zone

Python-voorbeeld

python
timezone_payload = shoply_get( "admin_get_store_metadata", metadata_key="time_zone", ) timezone = timezone_payload["data"] print(timezone["ianaTimezone"], timezone["timezoneOffsetMinutes"])

Voorbeeldresponse

json
{ "data": { "ianaTimezone": "America/Los_Angeles", "timezoneOffset": -7, "timezoneOffsetMinutes": -420 }, "statusCode": 200 }

Zakelijke use-cases

  • Groepeer UTC-activiteit in dezelfde lokale kalenderdagen die de merchant in Analytics ziet.
  • Plan dagelijkse exports nadat de lokale dag van de winkel is geëindigd.
  • Label rapporten met een ondubbelzinnige IANA-tijdzone zoals America/Los_Angeles.

Tijdzone-offsets kunnen veranderen door zomertijdregels. Geef de voorkeur aan ianaTimezone als je rapportagesysteem dat ondersteunt, in plaats van permanent één numerieke offset op te slaan.

3. Activiteitstellingen ophalen

query_api_usage_count retourneert winkelactiviteit gegroepeerd per UTC-datum of de oorspronkelijke UTC-minuut. Het is ook de bron voor de activiteitsgrafiek in Analytics → Chat & Search History.

Endpoint

text
GET https://api.shoplyai.ai/query_api_usage_count

Queryparameters

ParameterVereistBeschrijving
start_dt_utcJaUTC-starttijd als YYYY-MM-DD HH:mm:ss
end_dt_utcJaUTC-eindtijd als YYYY-MM-DD HH:mm:ss
groupbyNeeutc_date voor dagelijkse totalen of utc_date_time voor minutenrijen

Python-voorbeeld

python
activity = shoply_get( "query_api_usage_count", start_dt_utc="2026-08-01 00:00:00", end_dt_utc="2026-08-20 23:59:59", groupby="utc_date", ) for row in activity["data"]: print(row)

Voorbeeldresponse

json
{ "data": [ { "utc_date": "2026-08-20", "QA": 18, "CHAT": 18, "SEARCH": 20, "CACHED_SEARCH": 4, "PRODUCT_SEARCH": 22, "CLICK": 11, "ADD_TO_CART": 5, "CHECKOUT": 2 } ] }

Rijen bevatten de activiteitstellers die voor die periode beschikbaar zijn, zoals chatvragen, zoekopdrachten, klikken, add-to-cart-gebeurtenissen en checkout-gebeurtenissen. Tellers zonder activiteit kunnen ontbreken in plaats van op nul te worden gezet.

Zakelijke use-cases

  • Bouw een uurlijkse of dagelijkse activiteitsgrafiek zoals die in Chat & Search History.
  • Detecteer ongebruikelijke verkeerspieken of plotselinge dalingen in klantbetrokkenheid.
  • Vergelijk productzoekvolume met klikken, add-to-cart-gebeurtenissen en checkouts.
  • Schat wanneer support- en merchandisingteams de drukste periodes moeten beoordelen.

4. Samenvattingen van chat- en zoeksessies ophalen

query_sessionized_chat retourneert één compacte record per klantsessie. Het ondersteunt ook de sessielijst in Analytics → Chat & Search History.

Endpoint

text
GET https://api.shoplyai.ai/query_sessionized_chat

Queryparameters

ParameterVereistBeschrijving
start_dt_utcJaUTC-starttijd, of de letterlijke waarde undefined
end_dt_utcJaUTC-eindtijd, of de letterlijke waarde undefined
num_sessionsNeeAantal sessies om te selecteren wanneer een van beide grenzen undefined is
ScanIndexForwardNeeGebruik false om eerst de nieuwste sessies te selecteren

De nieuwste 40 sessies ophalen

python
summary_payload = shoply_get( "query_sessionized_chat", start_dt_utc="undefined", end_dt_utc="undefined", num_sessions=40, ScanIndexForward="false", ) sessions = summary_payload["data"] for conversation in sessions: print(conversation["customer_id"], conversation.get("user_questions", ""))

Sessies in een UTC-bereik ophalen

python
summary_payload = shoply_get( "query_sessionized_chat", start_dt_utc="2026-08-20 00:00:00", end_dt_utc="2026-08-20 23:59:59", ScanIndexForward="false", )

Wanneer beide tijdgrenzen aanwezig zijn, retourneert de API sessies in het volledige bereik; num_sessions beperkt die begrensde query niet.

Voorbeeldresponse

json
{ "data": [ { "customer_id": "customer-or-session-id", "user_questions": "Do you have this in blue?\nWhen will it ship?", "start_timestamp_ms": 1787184000000, "end_timestamp_ms": 1787184065000, "session_types": "product information, click", "customer_email": null, "customer_info": {}, "sentiment": "positive", "num_questions": 2, "num_searches": 1, "num_clicks": 1 } ] }

Optionele velden verschillen per sessie. Bewaar customer_id, start_timestamp_ms en end_timestamp_ms als je van plan bent de volledige tijdlijn op te halen.

Zakelijke use-cases

  • Beoordeel een steekproef van recente gesprekken voor antwoordkwaliteit en supporttraining.
  • Vind terugkerende klantvragen die invloed moeten hebben op productcopy of FAQ’s.
  • Identificeer sessies met hoge intentie die zoekopdrachten, productklikken of andere winkelacties bevatten.
  • Exporteer één rij per sessie voor trendanalyse en vermijd daarbij de grotere payload op eventniveau.

5. Eén volledige sessie ophalen

Geef een geselecteerde samenvatting door aan query_log_visualization om de klant-, AI-, zoek- en commerce-gebeurtenissen op te halen.

Endpoint

text
GET https://api.shoplyai.ai/query_log_visualization

Queryparameters

ParameterVereistBeschrijving
date_time_utc_startJaSessiestart geformatteerd als UTC YYYY-MM-DD HH:mm:ss
date_time_utc_endJaSessie-einde geformatteerd als UTC YYYY-MM-DD HH:mm:ss
session_idNeeDe customer_id van de samenvatting, gebruikt voor oudere geschiedenisrecords
start_timestamp_msAanbevolenDe exacte milliseconde-starttimestamp van de samenvatting

Python-voorbeeld

python
from datetime import datetime, timezone def utc_from_milliseconds(timestamp_ms: int) -> str: """Format a Shoply millisecond timestamp for the history API.""" value = datetime.fromtimestamp(timestamp_ms / 1000, tz=timezone.utc) return value.strftime("%Y-%m-%d %H:%M:%S") selected = sessions[0] timeline_payload = shoply_get( "query_log_visualization", date_time_utc_start=utc_from_milliseconds(selected["start_timestamp_ms"]), date_time_utc_end=utc_from_milliseconds(selected["end_timestamp_ms"]), session_id=selected["customer_id"], start_timestamp_ms=selected["start_timestamp_ms"], ) for event in timeline_payload["data"]: print(event.get("server_timestamp_ms"), event.get("action_type"))

Voorbeeldresponse

json
{ "data": [ { "action_type": "QA", "session_id": "customer-or-session-id", "utc_date_time": "2026-08-20 00:00:00", "start_timestamp_ms": 1787184000000, "server_timestamp_ms": 1787184000123, "Q": { "question": "Do you have this in blue?", "question_context": {} }, "task_id": "task-id", "list_tokens": [ { "data_type": "LLMOutput", "data": "Yes. These blue options are currently available." } ], "dict_search_results": {} } ] }

De tijdlijn kan klantvragen, AI-antwoorden, zoekresultaten, productklikken, add-to-cart-gebeurtenissen, checkout-gebeurtenissen en deelname van menselijke agents bevatten. Gebruik server_timestamp_ms om gemengde gebeurtenistypen te ordenen. Oudere records kunnen minder velden bevatten.

Zakelijke use-cases

  • Controleer precies wat een klant vroeg en wat Shoply antwoordde tijdens een supportonderzoek.
  • Beoordeel antwoordkwaliteit samen met de zoekresultaten en producten die aan de shopper zijn getoond.
  • Reconstrueer de reis van vraag naar klik, add-to-cart of checkout.
  • Diagnoseer één sessie die door een klant is gemeld zonder door niet-gerelateerde geschiedenis te zoeken.

Kan ik één secret voor elke API gebruiken?

Ja. Een geldig store_owner_api_secrete is beperkt tot één winkel en werkt voor de Merchant API-endpoints hierboven. Voor SiteChat-accounts authenticeert hetzelfde secret ook de catalog upload APIs. Voor veiligere operaties gebruik je aparte benoemde secrets voor aparte systemen—bijvoorbeeld één voor een nachtelijke data-export en een andere voor een intern dashboard.

Als één integratie buiten gebruik wordt gesteld of gecompromitteerd raakt, trek dan alleen het bijbehorende secret in via Shoply Settings. De andere integraties blijven werken.

Wat moet ik weten over vervaldatum, privacy en fouten?

Bekijk ook Shoply-databronnen en privacy om te begrijpen welke informatie beschikbaar is voor klantantwoorden.

  • API-secrets voor winkeleigenaren verlopen na 90 dagen. Maak een vervanging aan en werk de integratie bij vóór de vervaldatum.
  • De standaard bewaartermijn van Shoply voor chat- en zoekgeschiedenis is ook 90 dagen. Secret-verval en databewaring zijn afzonderlijke beleidsregels.
  • History-responses kunnen persoonsgegevens bevatten, waaronder klant-ID’s, e-mailadressen, geschatte locatie, vragen en winkelactiviteit. Sla deze op en verwerk ze volgens je privacybeleid en toepasselijke wetgeving.
  • HTTP 403 betekent dat het secret ontbreekt, ongeldig, verlopen, ingetrokken is of bij een andere winkel hoort.
  • HTTP 422 betekent meestal dat een vereiste queryparameter ontbreekt of de verkeerde naam heeft.
  • HTTP 500 of een response met statusCode: 500 betekent dat de request Shoply heeft bereikt maar niet kon worden voltooid. Probeer tijdelijke fouten opnieuw met backoff en neem contact met ons op als de fout aanhoudt.
  • Gebruik begrensde UTC-bereiken voor exports en terugkerende jobs zodat responses beheersbaar blijven.

Is product search onderdeel van de Merchant API?

De openbare product-search API van Shoply heeft een ander authenticatie- en requestcontract. Zie Hoe je toegang krijgt tot Shoply AI Search via de API als je productzoekresultaten wilt voor een shoppergerichte ervaring in plaats van privé-merchantdata.

Kunnen SiteChat-merchants een productcatalogus uploaden?

Ja. SiteChat-accounts kunnen gestructureerde producten en productafbeeldingen uploaden met hetzelfde API-secret voor winkeleigenaren. Die catalogus-endpoints worden apart gedocumenteerd in Hoe je je catalogus uploadt voor SiteChat. Shopify-winkels blijven producten synchroniseren via Shopify en gebruiken die uploadroutes niet.

Voor hulp bij een integratie, neem contact op met Shoply AI.