Developer DocumentationsMerchant Backend API

Merchant Backend API

Nagłówki


Do wszystkich usług wołanych przez InPost Pay (Basket App) w Backend merchanta zostaną dodane poniższe nagłówki (headery). Obecnie nagłówki są opcjonalne, ale docelowo będą wymagane.

 

Nagłówek

Opis

Nagłówek

Opis

x-signature

Sygnatura

x-signature-timestamp

Ciąg daty i czasu ISO8601 w strefie czasowej UTC z czasem wygenerowania podpisu, np. 2023-05-11T15:02:23.429Z

x-public-key-ver

Wersja kluczy użytych do wygenerowania podpisu

x-public-key-hash

SHA-256 hash klucza publicznego użytego do wygenerowania podpisu


Algorytm weryfikacji sygnatury

 

Signature verification algorithm:

 

  1. Recipient receives signed request with headers:

    1. x-signature - signature

    2. x-signature-timestamp - ISO8601 datetime string in UTC timezone with time of signature generation ex. 2023-05-11T15:02:23.429Z

    3. x-public-key-ver - version of keys used to generate signature

    4. x-public-key-hash - SHA-256 hash of public key used to generate signature

  2. Recipient checks if already have cached public key with given version

    1. key present in cache:

      • recipient checks if public key hash matches calculated as: SHA-256 hash from public_key_base64 field. if verification is:

        • positive - continue

        • negative - reject request with http: 401 {   "error_code": "INVALID_SIGNATURE",   "error_message": "error description" }

    2. key not present in cache:

      • obtain public key from /v1/izi/signing-keys/public/{keyVersion} or /api/v1/izi/signing-keys/public and verify hash as above

  3. Prepare base64 string that consists of DIGEST,external-merchant-id,x-public-key-ver,x-signature-timestamp. Values are separated with commas

    1. x-public-key-ver, x-signature-timestamp from headers, use empty value if header is missing.

    2. merchant_external_id value comes from endpoints /v1/izi/signing-keys/public/{keyVersion} and /v1/izi/signing-keys/public as merchant_external_id field

    3. DIGEST: base64 form of SHA-256 hash (Message Digest) generated from request body. Use empty byte array as request body if body is missing.

  4. Decode base64 signature and verify it with the SHA256withRSA algorithm for the given public key and signature string. If verification:

    1. positive - continue

    2. negative - reject request with http: 401 {   "error_code": "INVALID_SIGNATURE",   "error_message": "error description" }

  5. Recipient compares x-signature-timestamp value to current time. If difference is:

    1. less or equal to 240s - continue

    2. bigger than 240s - reject request with http: 401 {   "error_code": "INVALID_SIGNATURE",   "error_message": "error description" }

 

Manual signature verification:

  • curl --location 'http://{basket-app-host}/basket-app/api/v1/izi/signing-keys/public/{keyVersion}' replace {Unknown macro: { {keyVersion}}}

    with value from header: x-public-key-ver

  • echo "$PUBLIC_KEY_BASE64" | openssl base64 -d -A | openssl rsa -pubin -inform DER -outform PEM -out pubkey.pem replace $PUBLIC_KEY_BASE64 with value from field: public_key_base64

  • DIGEST=$(echo -n "$(<message_body)" | openssl dgst -sha256 -binary | openssl enc -base64 -A) where message_body is a file with EXACT request body (without any additions, whitespaces etc.)

  • echo -n "$DIGEST,$EXTERNAL_MERCHANT_ID,$KEY_VERSION,$SIGNATURE_TIMESTAMP" | openssl enc -base64 -A -out signature_string where $EXTERNAL_MERCHANT_ID value is from public key endpoint - field merchant_external_id, $KEY_VERSION value is from header x-public-key-ver and $SIGNATURE_TIMESTAMP value is from x-signature-timestamp

  • openssl enc -base64 -d -A -in request_signature -out signature.bin where request_signature is a file with value from header x-signature

  • openssl dgst -sha256 -verify pubkey.pem -signature signature.bin signature_string should print Verified OK


 

Lista metod wystawianych przez merchanta służąca do komunikacji z InPost Pay

 

 

Metoda

Opis

Koszyk

GET /v1/izi/basket/{basketId}

Pobranie szczegółów koszyka

POST /v1/izi/basket/{basketId}/confirmation

Potwierdzenie dodania koszyka

POST /v1/izi/basket/{basketId}/event

Przesłanie informacji o aktualizacji koszyka

DELETE /v1/izi/basket/{basketId}/binding

Desynchronizacja koszyka (rozparowanie koszyka z numerem tel.)

Zamówienie

POST /v1/izi/order

Utworzenie zamówienia

GET v1/izi/order/{orderId}

Pobranie szczegółów zamówienia

POST /v1/izi/order/{orderId}/event

Przesłanie informacji o aktualizacji zamówienia

 

 

 

Przykłady dla wybranych metod

Metoda

Przykład

Metoda

Przykład

POST/v1/izi/basket/{basket_id}/event

{
"event_id":"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"event_data_time":"2023-08-23T11:14:33.973Z",
"event_type":"PRODUCTS_QUANTITY",
"phone_number": {
"country_prefix":"+48",
"phone":"5xxxxxxxx"
},
"quantity_event_data": [
{
"product_id":"549",
"quantity": {
"quantity":3
}
}
]
}

{
"summary": {
"basket_base_price": {
"net":"249.59",
"gross":"307.00",
"vat":"57.41"
},
"basket_final_price": {
"net":"242.01",
"gross":"297.67",
"vat":"55.66"
},
"basket_promo_price": {
"net":"242.01",
"gross":"297.67",
"vat":"55.66"
},
"currency":"PLN",
"basket_expiration_date":"2023-08-25T11:09:29.000Z",
"basket_additional_information":"",
"payment_type": [
"CARD",
"CARD_TOKEN",
"APPLE_PAY",
"BLIK_CODE",
"BLIK_TOKEN",
"PAY_BY_LINK",
"SHOPPING_LIMIT",
"DEFERRED_PAYMENT",
"GOOGLE_PAY",
"CASH_ON_DELIVERY"
],
"basket_notice":null
},
"delivery": [
{
"delivery_type":"APM",
"delivery_date":"2023-08-25T12:00:00.000Z",
"delivery_options":[],
"delivery_price": {
"net":"0.00",
"gross":"0.00",
"vat":"0.00"
}
},
{
"delivery_type":"COURIER",
"delivery_date":"2023-08-25T12:00:00.000Z",
"delivery_options":[],
"delivery_price": {
"net":"0.00",
"gross":"0.00",
"vat":"0.00"
}
}
],
"promo_codes":[],
"products": [
{
"product_id":10678,
"product_category":53,
"ean":"wp-pennant-1",
"product_name":"Klocki Paczkomat InPost z samochodem eko",
"product_description":" \r\n\r\nA wiesz, że każdy jest kurierem własnego życia? Przecież gdy mówisz, to dostarczasz informacje, a jak się uśmiechasz to... dostarczasz radość. Jeszcze większą radość zobaczysz na twarzy dziecka, gdy dostarczysz mu zestaw klocków: paczkomat wraz z ekobusem.\r\n\r\nTo unikalny zestaw, dzięki któremu dzieci mogą wcielić się w rolę kuriera i poczuć jak to jest, gdy dostarcza się same dobre wiadomości czy prezenty. A co najlepsze, klocki pasują do innych klocków konstrukcyjnych co sprawia, że możliwości zabawy stają się nieograniczone.\r\n\r\nKlocki przeznaczone są dla dzieci od 8 lat, ale potrafią obudzić dziecko w człowieku do 80 lat i więcej. W końcu dobra zabawa nie zna wieku.",
"product_link":"https://outofthebox.pl/product/paczkomat-inpost-z-samochodem-eko/",
"product_image":"https://outofthebox.pl/app/uploads/2022/11/INPOST_aranzacje-z-modelami18.jpg",
"base_price": {
"net":"113.01",
"gross":"139.00",
"vat":"25.99"
},
"promo_price": {
"net":"113.01",
"gross":"139.00",
"vat":"25.99"
},
"quantity": {
"quantity":2,
"quantity_type":"INTEGER",
"quantity_unit":"pcs",
"available_quantity":7507,
"max_quantity":7507
},
"product_attributes": [
{
"attribute_name":"Wymiary/Pojemność",
"attribute_value":"344 cm x 60 cm x 240 cm"
}
],
"variants":[]
},
{
"product_id":549,
"product_category":20,
"ean":"0",
"product_name":"Paczkotorba bawełniana",
"product_description":" \r\n\r\nTa torba bawełniana lubi być czysta i wyprana. Lubi, bo jest z bawełny, tak jak wiele Twoich ubrań. Dlatego pralka nie robi jej krzywdy.\r\n\r\nTorba polecana jest szczególnie tym, którzy nie chcą za każdym razem wracać z zakupów z toną jednorazowych woreczków foliowych.\r\n\r\nTorba jest szyta lokalnie. W Polsce, a nie na końcu świata.\r\n\r\nMetr kwadratowy materiału, z którego stworzono torbę, waży 280 gramów. Gdyby miała ręce, włożyłaby sobie do środka spory ciężar i nic by się jej nie stało.\r\n\r\nUwaga: torba InPost ma wielkie uszy, żeby można było ją nosić w stylu out of the box.",
"product_link":"https://outofthebox.pl/product/paczkotorba-bawelniana/",
"product_image":"https://outofthebox.pl/app/uploads/2022/10/INPOST_aranzacje-z-modelami24-1.jpg",
"base_price": {
"net":"23.58",
"gross":"29.00",
"vat":"5.42"
},
"promo_price": {
"net":"15.99",
"gross":"19.67",
"vat":"3.68"
},
"quantity": {
"quantity":"1",
"quantity_type":"INTEGER",
"quantity_unit":"pcs",
"available_quantity":240,
"max_quantity":240
},
"product_attributes":[],
"variants":[]
}
],
"related_products": [
{
"product_id":606,
"product_category":17,
"ean":"0",
"product_name":"Paczkokurtka","product_description":" \r\n\r\nNormalne kurtki są normalne.\r\n\r\nPrzód i tył. Lewy rękaw i prawy rękaw. Kaptur i kieszenie.\r\n\r\nKurtki InPost -- są zawsze out of the box! Oprócz wszystkiego, co ma normalna kurtka -- mają jeszcze ogromną kieszeń, są wodoodporne i wiatroszczelne. Ta kieszeń jest tak duża, że może pomieścić w sobie na przykład paczkę. Albo coś innego, co tylko przyjdzie Ci do głowy.\r\nWierzchni materiał pokryty jest powłoką Water Repellent, dzięki czemu woda skrapla się na jego powierzchni\r\n\r\nBo wszystko, co najlepsze, zaczyna się od głowy.\r\nOd pomysłu, który jest inny.\r\n\r\nKtóry jest Out of the box!\r\n\r\nPaczkokurtka InPost dostępna jest w czterech rozmiarach: S, M, L, XL.",
"product_link":"https://outofthebox.pl/product/paczkokurtka-rozm-s/",
"product_image":"https://outofthebox.pl/app/uploads/2022/10/INPOST_aranzacje-z-modelami25-1.jpg",
"base_price": {
"net":"172.07",
"gross":"211.65",
"vat":"0.00"
},
"promo_price": {
"net":"172.07",
"gross":"211.65",
"vat":"0.00"
},
"quantity": {
"quantity":1,
"quantity_type":"INTEGER",
"quantity_unit":"pcs",
"available_quantity":999,
"max_quantity":999
},
"product_attributes":[],
"variants":[]
},
{
"product_id":452,
"product_category":53,
"ean":"0",
"product_name":"Klocki Sortownia",
"product_description":"sdadsadsadasdas",
"product_link":"https://outofthebox.pl/product/sortownia/",
"product_image":"https://outofthebox.pl/app/uploads/2022/10/INPOST_aranzacje-z-modelami17.jpg",
"base_price": {
"net":"186.18",
"gross":"229.00",
"vat":"0.00"
},
"promo_price": {
"net":"186.18",
"gross":"229.00",
"vat":"0.00"
},
"quantity": {
"quantity":1,
"quantity_type":"INTEGER",
"quantity_unit":"pcs",
"available_quantity":55844,
"max_quantity":55844
},
"product_attributes":[],
"variants":[]
}
],
"consents": [
{
"consent_id":3,
"consent_link":"https://outofthebox.pl/zwroty-i-reklamacje/",
"consent_description":"zwroty i reklamacje",
"consent_version":1,
"requirement_type":"OPTIONAL"
}
]
}

GET/v1/izi/order/{order_id}

{
"order_details": {
"order_comments":"Uwagi",
"order_id":"xxx",
"pos_id":"xxx",
"order_creation_date":"2023-08-18T13:22:00.000Z",
"basket_id":"xxx",
"order_merchant_status_description":"Oczekiwanie na płatność",
"currency":"PLN",
"order_base_price": {
"net":135.63,
"gross":166.83,
"vat":31.2
},
"payment_type":"BLIK_CODE"
},
"account_info": {
"name":"<secret>",
"surname":"<secret>",
"phone_number": {
"country_prefix":"+48",
"phone":"5xxxxxxxx"
},
"mail":"<secret>",
"client_address": {
"country_code":"<secret>",
"address":"<secret>",
"city":"<secret>",
"postal_code":"<secret>"
}
},
"invoice_details": {
"legal_form":"COMPANY",
"country_code":"<secret>",
"tax_id":"<secret>",
"company_name":"<secret>",
"city":"<secret>",
"street":"<secret>",
"building":"<secret>",
"flat":"<secret>",
"postal_code":"<secret>",
"mail":"<secret>",
"registration_data_edited":"<secret>",
"additional_information":"Adnotacje"
},
"delivery": {
"delivery_type":"COURIER",
"delivery_date":"2023-08-25T10:00:00.000Z",
"mail":"<secret>",
"phone_number": {
"country_prefix":"+48",
"phone":"5xxxxxxxx"
},
"delivery_address": {
"name":"<secret>",
"country_code":"<secret>",
"address":"<secret>",
"city":"<secret>",
"postal_code":"<secret>"
},
"delivery_price": {
"net":10.56,
"gross":12.99,
"vat":2.43
},
"courier_note":""
},
"products": [
{
"product_id":"1552",
"product_name":"Produkt 1",
"base_price": {
"net":45.37,
"gross":55.81,
"vat":10.44
},
"quantity": {
"quantity":1,
"quantity_type":"INTEGER"
}
},
{
"product_id":"1551",
"product_name":"Produkt 2",
"base_price": {
"net":90.26,
"gross":111.02,
"vat":20.76
},
"quantity": {
"quantity":1,
"quantity_type":"INTEGER"
}
}
],
"consents": [
{
"consent_id":"Polityka prywatności",
"consent_version":"1678260494",
"is_accepted":true
},
{
"consent_id":"Regulamin",
"consent_version":"1678260494",
"is_accepted":true
}
]
}

 

POST/v1/izi/basket/{basket_id}/confirmation

{
"status": "SUCCESS",
"inpost_basket_id": "xxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx",
"phone_number": {
"country_prefix": "+48",
"phone": "5xxxxxxxx"
},
"browser": {
"browser_trusted": true,
"browser_id": "xxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx"
},
"masked_phone_number": "5x*****xx",
"name": "<secret>",
"surname": "<secret>"
}

"summary": {
"basket_base_price": {
"net": 80.49,
"gross": 99.00,
"vat": 18.51
},
"basket_final_price": {
"net": 80.49,
"gross": 99.00,
"vat": 18.51
},
"basket_promo_price": {
"net": 80.49,
"gross": 99.00,
"vat": 18.51
},
"currency": "PLN",
"basket_expiration_date": "2023-08-25T09:26:01.000Z",
"basket_additional_information":"",
"payment_type": [
"CARD",
"CARD_TOKEN",
"APPLE_PAY",
"BLIK_CODE",
"BLIK_TOKEN",
"PAY_BY_LINK",
"GOOGLE_PAY",
"CASH_ON_DELIVERY"
]
"basket_notice":null
},
"delivery": [
{
"delivery_type": "APM",
"delivery_date": "2023-08-25T12:00:00.000Z",
"delivery_options": [],
"delivery_price": {
"net": 0.00,
"gross": 0.00,
"vat": 0.00
}
},
{
"delivery_type": "COURIER",
"delivery_date": "2023-08-25T12:00:00.000Z",
"delivery_options": [],
"delivery_price": {
"net": 0.00,
"gross": 0.00,
"vat": 0.00
}
}
],
"promo_codes": [],
"products": [
{
"product_id": "585",
"product_category": "20",
"ean": "0",
"product_name": "Drewniane bule",
"product_description": " \r\n\r\nCo to są bule? Na mieście mówią, że „bule to kule na nudy bóle". To gra, w której zasady są proste, a emocje sięgają 10 piętra. Bule to kule. W tym przypadku -- drewniane, z twardego drewna bukowego. Jedna z nich to świnka zwana prosiaczkiem. Taka kruszynka-wieprzowinka.\r\n\r\nCo trzeba mieć, żeby zagrać w bule? Przynajmniej jednego przyjaciela. Albo przyjaciółkę. Albo sąsiada, wujka, kuzynkę, znajomego, brata, siostrę, kolegę. Trzeba też mieć kawałek trawnika, może być bez trawy. Bule to rzucanie kulami w świnkę. Kto rzuci najbliżej, ten wygrywa. Gra w bule jest prosta, choć kule są okrągłe. Dziwne, co nie?",
"product_link": "https://outofthebox.pl/product/drewniane-bule/",
"product_image": "https://outofthebox.pl/app/uploads/2022/10/INPOST_aranzacje3-1.jpg",
"base_price": {
"net": 80.49,
"gross": 99.00,
"vat": 18.51
},
"promo_price": {
"net": 80.49,
"gross": 99.00,
"vat": 18.51
},
"quantity": {
"quantity": 1,
"quantity_type": "INTEGER",
"quantity_unit": "pcs",
"available_quantity": 275,
"max_quantity": 275
},
"product_attributes": [],
"variants": []
}
],
"related_products": [
{
"product_id": "567",
"product_category": "20",
"ean": "0",
"product_name": "Mata do ćwiczeń",
"product_description": " \r\n\r\nNie wiemy, ile korków wystrzelonych w Sylwestra potrzeba do stworzenia korkowej maty do jogi. Ale wiemy, że dzięki niej możesz zacząć całkiem nowy czas w swoim życiu.\r\n\r\nĆwiczenia na niej to prawdziwy body & soul balance.\r\n\r\nZatem rusz swe "body" po naturalny zastrzyk energii i zadbaj o relaks swojej "soul". Warto wiedzieć, że mata korkowa z naturalnego kauczuku ma najlepsze właściwości antypoślizgowe.",
"product_link": "https://outofthebox.pl/product/mata-do-cwiczen/",
"product_image": "https://outofthebox.pl/app/uploads/2022/10/INPOST_aranzacje25.jpg",
"base_price": {
"net": 202.44,
"gross": 249.00,
"vat": 0.00
},
"promo_price": {
"net": 202.44,
"gross": 249.00,
"vat": 0.00
},
"quantity": {
"quantity": 1,
"quantity_type": "INTEGER",
"quantity_unit": "pcs",
"available_quantity": 197485,
"max_quantity": 197485
},
"product_attributes": [
{
"attribute_name": "Wymiary/Pojemność",
"attribute_value": "183x61 cm, 4 mm grubości"
},
{
"attribute_name": "Materiał",
"attribute_value": "Korek i naturalny kauczuk"
},
{
"attribute_name": "Waga",
"attribute_value": "2.6 kg"
}
],
"variants": []
},
{
"product_id": "554",
"product_category": "20",
"ean": "0",
"product_name": "Paryżanka",
"product_description": " \r\n\r\nCzy wiesz, co tak naprawdę widzą ludzie, kiedy idziesz sobie z paryżanką?\r\n\r\nWidzą, że jesteś EKO. Nie używasz foliowych woreczków jednorazowego użytku.\r\n\r\nWidzą, że jesteś modna. W końcu Paryż to miejsce, w którym od dawna decyduje się o tym, co warto ze sobą nosić.\r\n\r\nParyżanka nie kryje się z tym, że wygląda rewelacyjnie, kiedy jest wypełniona świeżymi owocami.\r\n\r\nWidzą też, że lubisz naturalne materiały, bo paryżanka wykonana jest w 100 procentach z bawełny.\r\n\r\nI że w swoim życiu działasz zgodnie z zasadą out of the box.\r\nPo swojemu. Jak InPost.",
"product_link": "https://outofthebox.pl/product/paryzanka/",
"product_image": "https://outofthebox.pl/app/uploads/2022/10/INPOST_aranzacje11-1.jpg",
"base_price": {
"net": 23.58,
"gross": 29.00,
"vat": 0.00
},
"promo_price": {
"net": 23.58,
"gross": 29.00,
"vat": 0.00
},
"quantity": {
"quantity": 1,
"quantity_type": "INTEGER",
"quantity_unit": "pcs",
"available_quantity": 468,
"max_quantity": 468
},
"product_attributes": [],
"variants": []
}
],
"consents": [
{
"consent_id": "3",
"consent_link": "https://outofthebox.pl/zwroty-i-reklamacje/",
"consent_description": "zwroty i reklamacje",
"consent_version": "1",
"requirement_type": "OPTIONAL"
}
]
}

POST/v1/izi/order

{
"order_details": {
"basket_id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"currency": "PLN",
"basket_price": {
"net": 19.51,
"gross": 24,
"vat": 4.49
},
"payment_type": "BLIK_CODE"
},
"account_info": {
"name": "<secret>",
"surname": "<secret>",
"phone_number": {
"country_prefix": "+48",
"phone": "5xxxxxxxx"
},
"mail": "<secret>",
"client_address": {
"country_code": "<secret>",
"address": "<secret>",
"address_details": {
"street": "<secret>",
"building": "<secret>",
"flat": "<secret>"
},
"city": "<secret>",
"postal_code": "<secret>"
}
},
"delivery": {
"delivery_type": ""COURIER"",
"mail": "<secret>",
"phone_number": {
"country_prefix": "+48",
"phone": "5xxxxxxxx"
},
"delivery_address": {
"name": "<secret>",
"country_code": "<secret>",
"address": "<secret>",
"city": "<secret>",
"postal_code": "<secret>",
"address_details": {
"street": "<secret>",
"building": "<secret>",
"flat": "<secret>"
}
},
},
"consents": [
{
"consent_id": "3",
"consent_version": "1",
"is_accepted": true
}
]
}

{
"order_details": {
"order_comments": "",
"order_id": "xxxxxxx",
"pos_id": "xxx",
"order_creation_date": "2023-08-24T09:21:59.809Z",
"basket_id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"order_merchant_status_description": "Wstrzymane (oczekujące na płatność)",
"payment_type": "BLIK_CODE",
"order_base_price": {
"net": "11.38",
"gross": "14.00",
"vat": "2.62"
},
"order_final_price": {
"net": "19.51",
"gross": "24.00",
"vat": "4.49"
},
"currency": "PLN",
"delivery_references_list": [
""
]
},
"account_info": {
"name": "<secret>",
"surname": "<secret>",
"phone_number": {
"country_prefix": "+48",
"phone": "5xxxxxxxx"
},
"mail": "<secret>",
"client_address": {
"country_code": "string",
"address": "<secret>",
"address_details": {
"street": "<secret>",
"building": "<secret>",
"flat": "<secret>"
},
"city": "<secret>",
"postal_code": "<secret>"
}
},
"invoice_details": {
"legal_form": null,
"country_code": "<secret>",
"tax_id_prefix": "<secret>",
"tax_id": "<secret>",
"company_name": "<secret>",
"name": "<secret>",
"surname": "<secret>",
"city": "<secret>",
"street": "<secret>",
"building": "<secret>",
"flat": "<secret>",
"postal_code": "<secret>",
"mail": "<secret>",
"registration_data_edited": "<secret>",
"additional_information": ""
},
"delivery": {
"delivery_type": "COURIER",
"delivery_date": "2023-08-25T12:00:00.000Z",
"delivery_options": null
"mail": "<secret>",
"phone_number": {
"country_prefix": "+48",
"phone": "5xxxxxxx"
},
"delivery_point": null,
"delivery_address": {
"name": "<secret>",
"country_code": "<secret>",
"address": "<secret>",
"city": "<secret>",
"postal_code": "<secret>",
"address_details": {
"street": "<secret>",
"building": "<secret>",
"flat": "<secret>"
}
},
"delivery_price": {
"net": "8.13",
"gross": "10.00",
"vat": "1.87"
},
"courier_note": ""
},
"products": [
{
"product_id": "660",
"product_category": "17",
"ean": "0",
"product_name": "Pin Szach - Mat",
"product_description": " \r\n\r\nCzy wiesz, czym jest pin? To hasło, które idealnie do Ciebie pasuje. A czy wiesz, czym różni się pin InPost od kodu PIN do bankomatu?\r\nPinu InPost nie musisz chować przed światem. Nie musisz się bać, że ktoś Ci go zabierze, a potem wykorzysta. Pin InPost możesz nosić w miejscach publicznych i chwalić się nim przypadkowo napotkanym ludziom.\r\nDla kogo jest ten pin?\r\nDla tych, którzy lubią wygrywać, docierać do celu, stawiać na swoim. Dla tych, którzy chcą odnosić sukcesy na tyle sposobów, ile jest kombinacji szachowych.\r\nZ czego zrobiono ten pin? Wytłoczono go z miedzianej blachy i pomalowano lakierami akrylowymi.\r\n\r\nKliknij po pin -- i noś go z dumą!\r\n\r\n \r\n\r\n \r\n\r\n) opakowanie nie zawiera dumy, dumę musisz zorganizować sobie samodzielnie",
"product_link": "https://outofthebox.pl/product/pin-szach-mat/",
"product_image": "https://outofthebox.pl/app/uploads/2022/10/INPOST_packshoty27.jpg",
"base_price": {
"net": "11.38",
"gross": "14.00",
"vat": "2.62"
},
},
"quantity": {
"quantity": 1,
"quantity_type": "DECIMAL",
"quantity_unit": "pcs"
},
"product_attributes": [],
"variants": []
}
],
"consents": [
{
"consent_id": "3",
"consent_version": "1",
"is_accepted": true
}
]
}