Integraatiot ja API
Webhookit ja API-avaimet
Ota tapahtumat vastaan omassa järjestelmässäsi webhookeilla ja lue ja kirjoita dataa API-avaimella: muoto, allekirjoitus, uudelleenyritykset, operaatiot ja rajat.
Webhookit lähettävät tapahtumia järjestelmääsi. API-avaimilla järjestelmäsi lukee ja kirjoittaa dataa.
Missä: Settings › Developer › Webhooks ja Settings › Developer › API keys. Luominen, muuttaminen ja poistaminen vaativat roolin owner tai admin.
Webhookit
Lisää endpoint
- Avaa Settings › Developer › Webhooks.
- Paina New endpoint.
- Täytä Endpoint URL (https only) ja halutessasi Description (optional).
- Paina Create endpoint.
- Valitse tapahtumat endpointin kortilta kohdasta Subscribed events. Jos et valitse mitään, saat kaikki tapahtumat.
- Paina Show kohdan Signing secret vieressä ja kopioi salaisuus vastaanottimeesi.
BunStack lähettää nyt valitut tapahtumat osoitteeseen.
- Pause pysäyttää endpointin, ja Resume käynnistää sen uudelleen.
- Rotate secret vaihtaa salaisuuden. Kaikki vaihdon jälkeen lähetetty allekirjoitetaan uudella salaisuudella, myös uudelleenyritykset. Päivitä vastaanottimesi ensin.
Varoitus: Tauon aikana endpointille ei jonoteta mitään. Tauon aikaisia tapahtumia ei lähetetä koskaan, ei edes kun painat Resume. Jonossa jo ollut toimitus merkitään tilaan failed.
Tauon vuoksi epäonnistunut toimitus ei vaikuta endpointin kuntoon.
Mitä BunStack lähettää
Jokainen toimitus on POST, jossa on JSON-runko ja nämä otsakkeet:
| Otsake | Sisältö |
|---|---|
x-bunstack-signature | Rungon HMAC-SHA256 endpointin salaisuudella, heksana pienillä kirjaimilla |
x-bunstack-event | Tapahtumatyyppi, esimerkiksi order.paid |
x-bunstack-delivery-id | Toimituksen tunnus |
x-bunstack-attempt | Yrityksen numero, alkaen 1:stä |
Runko on tapahtuman payload ja lisäksi avain delivery_id, jonka arvo on sama kuin otsakkeessa. Poista kaksoiskappaleet rungon delivery_id:n perusteella. Runko on allekirjoitettu. Otsake ei ole.
Payload
Jokaisessa rungossa on samat viisi avainta:
| Avain | Sisältö |
|---|---|
event | Tapahtumatyyppi, sama kuin otsakkeessa x-bunstack-event |
tenant_id | Workspacesi tunnus |
sent_at | Milloin tapahtuma jonotettiin. Tuntia myöhempi uudelleenyritys sisältää saman arvon. |
data | Tapahtuman omat kentät alla olevan taulukon mukaan |
delivery_id | Tunnus, jonka perusteella poistat kaksoiskappaleet |
Avaimet kentässä data tapahtumittain:
| Tapahtuma | data |
|---|---|
order.paid, order.fulfilled, order.refunded, order.cancelled | order_id, order_number, storefront_id, currency, total_amount, status, payment_status, fulfillment_status, refunded_amount |
contact.received | message_id, storefront_id, email, name, subject |
member.signup, event.rsvp | member_id, storefront_id, email, tier_id sekä vastaavasti rsvp_id, event_id, email, attendees, status. Moduulit Members ja Events ovat jäissä. Tapahtumia ei voi valita endpointille. |
Milloin tilaustapahtumat lähetetään
order.paidlähetetään, kun tilaus on valmis. Useimmilla tilauksilla se tapahtuu tilauksen luonnin yhteydessä.- Tilaus, jonka Kustomin petostarkistus pidättää, saa
order.paid-tapahtuman vasta, kun Kustom on hyväksynyt sen. - Tilaus, jonka Kustom on hylännyt tai perunut, ei koskaan saa
order.paid-tapahtumaa. order.cancelledlähetetään kerran, kun tilaus tai sen varaus perutaan, eli kunstatustaipayment_statusmuuttuu arvooncancelled.- Peruutus, joka kirjaa hyvityksen, lähettää myös
order.refunded-tapahtuman. - Endpoint ilman valintaa saa kaikki tapahtumat, myös
order.cancelled. Endpoint, jolla on valinta, saaorder.cancelled-tapahtuman vasta kun valitset sen. - BunStack ei näe Kustomin portaalissa tehtyä peruutusta tilaukselle, jonka Kustom on jo hyväksynyt. Tapahtumaa ei lähetetä.
Sopimus muuttui 12.9.2026 (2026-09-12). Sitä ennen order.paid lähetettiin tilauksen luonnin yhteydessä myös pidätetylle tilaukselle, eikä order.cancelled-tapahtumaa ollut.
Tarkista allekirjoitus
Allekirjoitus on HMAC-SHA256 raa'asta rungosta. Avain on salaisuuden merkit. Käytä salaisuutta täsmälleen sellaisena kuin se näytetään, ASCII-merkkijonona. Älä pura sitä heksasta.
- Lue rungon raa'at tavut ennen JSONin jäsentämistä.
- Laske allekirjoitus. Nodessa:
const expected = crypto.createHmac('sha256', secret).update(rawBody).digest('hex');
- Vertaa
expected-arvoa otsakkeeseenx-bunstack-signaturevakioaikaisella vertailulla.
Vain runko on allekirjoitettu. Otsakkeet eivät ole.
Kaksoiskappaleet
Toimitus tapahtuu vähintään kerran (at-least-once). Sama tapahtuma voidaan toimittaa useita kertoja. Uudelleenyritykset voivat toistaa jo perille menneen toimituksen.
delivery_idon sama tapahtuman jokaisella yrityksellä. Kaksi eri tapahtumaa ei koskaan jaa tunnusta.- Tallenna käsittelemäsi tunnukset. Ohita tunnus, jonka olet nähnyt aiemmin.
- Älä poista kaksoiskappaleita sisällön perusteella. Kaksi aitoa tilausta voi näyttää samalta, ja kahdesti lähetetyllä tilauksella on sama runko.
x-bunstack-attempton lokejasi varten. Yritys 2 tai suurempi tarkoittaa, ettei edellinen yritys saanut2xx-vastausta.
Vastaa 2xx, kun olet tallentanut tapahtuman. Tee varsinainen työ sen jälkeen. Vastaus, joka ei ole 2xx tai joka kestää yli 8 sekuntia, lasketaan epäonnistuneeksi yritykseksi.
Uudelleenyritykset
| Yritys | Milloin |
|---|---|
| 1 | Heti |
| 2 | 1 minuutti yrityksen 1 jälkeen |
| 3 | 5 minuuttia yrityksen 2 jälkeen |
| 4 | 15 minuuttia yrityksen 3 jälkeen |
| 5 | 1 tunti yrityksen 4 jälkeen |
Viimeinen yritys tulee 81 minuuttia ensimmäisen jälkeen. Viimeisen yrityksen jälkeen toimitus merkitään tilaan failed. Sitä ei yritetä uudelleen, ja se säilyy toimituslistassa.
Tarkastele toimitusta
Valitse endpoint ja avaa toimitus. Näet tilan, vastauskoodin, yritysten määrän, toimituksen tunnuksen ja rungon täsmälleen sellaisena kuin se lähetettiin ja allekirjoitettiin. Käytä sitä runkoa, kun testaat allekirjoituksen tarkistusta.
API-avaimet
Kohdassa Settings › Developer › API keys luot avaimia, joiden etuliite on bunstack_. Avain näytetään kerran ja tallennetaan tiivisteenä. Avaimella on scopet (read:products, read:orders, read:customers, read:reviews, write:products, write:orders, write:reviews). Voit perua sen milloin tahansa painikkeella Revoke. Osoite, kutsujen rungot ja virhekoodit ovat viitesivulla kohdassa View docs.
Luo avain
- Avaa Settings › Developer › API keys.
- Paina New key.
- Täytä Name ja valitse Scopes.
- Valitse päivä kohdassa Expires (optional), jos avaimen on lakattava toimimasta.
- Paina Create key.
- Kopioi avain. Sitä ei näytetä uudelleen.
Avain, jolla on viimeinen voimassaolopäivä, toimii sen päivän loppuun Ruotsin aikaa. Avaimella tehdyt kirjoitukset kirjataan kohtaan Activity log avaimen nimellä. Lukemisia ei kirjata.
Operaatiot
Jokainen kutsu on POST, jossa on Authorization: Bearer bunstack_… ja JSON-runko, jossa on op.
| Operaatio | Scope | Tekee |
|---|---|---|
list_products | read:products | Listaa tuotteet, uusimmat ensin |
list_orders | read:orders | Listaa kaikkien kauppojen tilaukset, uusimmat ensin |
get_order | read:orders | Hakee yhden tilauksen riveineen |
list_customers | read:customers | Listaa asiakkaat, uusimmat ensin |
list_reviews | read:reviews | Listaa arvostelut, uusimmat ensin |
create_product | write:products | Luo tuotteen luetteloon |
update_product | write:products | Muuttaa tuotetta |
update_order_status | write:orders | Asettaa tilauksen tilan |
update_review_status | write:reviews | Hyväksyy tai hylkää arvostelun |
create_product ja update_product ottavat kentän short_description, tuotesivun hinnan vieressä näkyvän tekstin, pelkkänä tekstinä. Se saa olla enintään 600 merkkiä. Pidempi teksti saa vastauksen 400, jossa on invalid_value ja field: "short_description". list_products palauttaa sen.
Lista antaa enintään 500 riviä sivua kohti. Kun sivu on täynnä, vastauksessa on next_before. Lähetä arvo kenttänä before seuraavaa sivua varten.
Tilauksen tila API:n kautta
update_order_statusvastaa409tiloillecancelledjarefunded, sekä niihin että niistä, kaikille tilauksille. Peru ja hyvitä adminissa.- Tila
fulfilledvastaa409tilaukselle, jolla on pidätys (Needs attention). - Tila
fulfilledvastaa409Kustom-tilaukselle, jonka maksu on varattu mutta veloittamatta. - ProSmart-merkinnät
prosmart_partial,prosmart_refundjaprosmart_customer_missingeivät ole pidätyksiä. - Myymälästä noudettava tilaus vastaa
409 store_pickup. Kirjaa luovutus adminissa painikkeella Picked up. Se veloittaa maksun ja merkitsee tilauksen noudetuksi.
Kutsurajat
| Raja | Arvo |
|---|---|
| Kutsut avainta kohti | 600 minuutissa |
| Kirjoitukset avainta kohti | 60 minuutissa, näiden 600:n sisällä |
| Kutsut avaimella, jota ei ole | 60 minuutissa IP-osoitetta kohti |
Kun raja on täynnä, API vastaa 429 rungolla { "error": "rate_limited", "retry_after": 60 } ja otsakkeella Retry-After: 60. Odota minuutti ennen kuin yrität uudelleen.