The Storebox Receipt Agent can deliver receipt data to a range of different channels in various formats. Receipts can be delivered in a daily batch or in real-time when Storebox receives the data. Subscribing to Receipt Agent does not require that a subscriber create users or add cards to Storebox to receive data.
When a subscription is setup, its agreed with Storebox, from which merchants the subscription will receive data from. This can be from a single merchant or from multiple merchants and can be updated at any time. If needed, our receipt pipeline, has measures to handle and deliver receipts from a specific merchant without these receipts are processed in other Storebox systems.
By default all data will be delivered in Storebox JSON format. Various filtering and transformation of receipt data may be applied before data delivery, but this processing must be agreed per subscription.
Receipt data will be batched to a ZIP file and then delivered to the subscriber once every day. The batch can be scheduled to be delivered at anytime during the day.
If data is batched, then this model is wrapped in an array.
required | Array of objects |
object Optional external receipt id | |
merchantId required | string Identifier of the merchant – value assigned by Storebox |
required | object |
orderDate required | string <date-time> Date and time of order including timezone information as defined by ISO8601. It is mandatory to include the offset from UTC time respecting daylight saving. |
orderNumber required | string <= 64 characters Unique number for the receipt |
salesEmployeeName | string Name of the cashier |
headerText | Array of strings[ items <= 512 characters ] Header lines which can have random data. Will be displayed in the top of the receipt. |
footerText | Array of strings[ items <= 512 characters ] Footer lines which can have random data. Will be displayed in the bottom of the receipt. |
terminalId | string <= 32 characters Number identifying the terminal attached to the point of sale |
sequenceNumber | string <= 32 characters The receipt sequence number. This may be unique in itself or as a combination of storeId, terminalId and sequence number |
object | |
object | |
required | Array of objects |
required | object |
required | Array of objects List of payment methods used in the purchase |
object |
{- "userInfo": [
- {
- "userId": "xur8tuibm6yg3ywwwq9qxgdzyha5gt5d",
- "externalCardId": "bhccc9udv7925bbguu4tfewi76bbjzbk"
}
], - "receiptId": {
- "type": "storebox",
- "value": "d764e8f4-a6e9-47ef-bca3-b12d280c1f87"
}, - "merchantId": "storebox",
- "store": {
- "storeName": "Storebox",
- "storeId": "2020",
- "storeRegNumber": "35406921",
- "storeAddressLine1": "Lyngbyvej 2, 2.",
- "storeAddressLine2": "C/O Innovation Hub",
- "storeZipCode": "2100",
- "storeCity": "Købehavn Ø",
- "storeCountry": "Danmark",
- "storePhone": "+45 70151151",
- "storeEmail": "support@storebox.com",
}, - "orderDate": "2019-08-24T14:15:22Z",
- "orderNumber": "12345678",
- "salesEmployeeName": "John Doe",
- "headerText": [
- "Thank you for shopping with us"
], - "footerText": [
- "You could have saved 10 kr. if you were a loyalty member",
- "Signup here https://storebox.com"
], - "terminalId": "17193CT26617792",
- "sequenceNumber": "10",
- "receiptImage": {
- "imageType": "pdf",
- "encodingType": "base64",
- "columns": 0,
- "image": "TWFuIGlz...VyZS4="
}, - "barcode": {
- "type": "interleaved2of5",
- "value": "012345678912",
- "displayValue": "01-23456-789-12"
}, - "orderLines": [
- {
- "number": "1234",
- "category": "123",
- "name": "MILK",
- "text": "Arla Organic Full fat 200ml",
- "count": 1,
- "gtin": "2388060103489",
- "itemPrice": {
- "value": 10,
- "currency": "EUR"
}, - "totalPrice": {
- "value": 10,
- "currency": "EUR"
}, - "type": "sale"
}
], - "totalOrderPrice": {
- "value": 10,
- "currency": "EUR",
- "vatRates": [
- {
- "rate": 25,
- "value": 2
}
]
}, - "payments": [
- {
- "paymentType": "paymentcard",
- "paymentTypeLabel": "DANKORT",
- "price": {
- "value": 10,
- "currency": "EUR",
- "foreignValue": 15,
- "foreignCurrency": "USD",
- "exchangeRate": "€ 1.5/$"
}, - "truncatedCardNumber": "457100XXXXXX0001",
- "transactionId": "300001116910",
- "transaction": [
- "DANKORT",
- "CONTACTLESS",
- "XXXX XXXX XXXX 0001",
- "TERM: 00123456-123456",
- "NETS A/S",
- "4611721",
- "KC1 NETS NR:0004611721",
- "ATC:00409 AED:0000000",
- "AID: A0000001214711",
- "PSAM: 1234567-000053421",
- "ARC:00 STATUS:0000",
- "AUT. KODE: 1234567",
- "REF:112233 AUTORISERET"
], - "approvalCode": "1234567",
- "cardAcceptorId": "4611721",
- "cardAcceptorTerminalId": "00123456",
- "systemTraceAuditNumber": "123456",
- "retrievalReferenceNumber": "200101110011"
}
], - "loyalty": {
- "skipProcessing": true,
- "stampCount": 3
}
}
ARTS POSLog version 6.0 is supported.
Example:
<?xml version="1.0" encoding="utf-8"?>
<POSLog xmlns="http://www.nrf-arts.org/IXRetail/namespace/" MajorVersion="6">
<Transaction>
<BusinessUnit>
<UnitID>1</UnitID>
<Address>
<AddressLine>Fruebjergvej 3</AddressLine>
<City>København Ø</City>
<PostalCode>2100</PostalCode>
<Country>Denmark</Country>
</Address>
<Telephone>
<LocalNumber>08-50500606</LocalNumber>
</Telephone>
</BusinessUnit>
<WorkstationID>6</WorkstationID>
<SequenceNumber>1</SequenceNumber>
<TransactionID>51ujtoezjk15v82d6wv0gomibko17vcy</TransactionID>
<OperatorID OperatorName="Ivan Sandqvist">1</OperatorID>
<CurrencyCode>DKK</CurrencyCode>
<ReceiptDateTime>2016-08-13T12:02:40</ReceiptDateTime>
<ReceiptImage>
<Image TypeCode="PDF">AQID</Image>
</ReceiptImage>
<RetailTransaction>
<LineItem>
<Sale>
<POSIdentity>
<POSItemID>17228340</POSItemID>
</POSIdentity>
<Description>FRAKTA</Description>
<ActualSalesUnitPrice>5</ActualSalesUnitPrice>
<ExtendedAmount>5</ExtendedAmount>
<Quantity Units="1" UnitOfMeasureCode="EA">1</Quantity>
<Tax TaxType="VAT">
<Amount>1</Amount>
<Percent>25</Percent>
</Tax>
</Sale>
<SequenceNumber>1</SequenceNumber>
</LineItem>
<LineItem>
<Tender TenderType="CreditDebit" TypeCode="Sale">
<Amount>560</Amount>
<CreditDebit CardType="Credit">
<IssuerIdentificationNumber>457104</IssuerIdentificationNumber>
<PrimaryAccountNumber>************1116</PrimaryAccountNumber>
<TransactionDetails>
<RetrievalReferenceNumber></RetrievalReferenceNumber>
<CardAcceptorTerminalID></CardAcceptorTerminalID>
<CardAcceptorIDCode></CardAcceptorIDCode>
<AcquiringInstitutionIDCode></AcquiringInstitutionIDCode>
<ApprovalCode></ApprovalCode>
<PaymentAccountReference></PaymentAccountReference>
<TransactionLifeCycleID></TransactionLifeCycleID>
</TransactionDetails>
</CreditDebit>
</Tender>
<SequenceNumber>2</SequenceNumber>
</LineItem>
<Total TotalType="TransactionNetAmount">448</Total>
<Total TotalType="TransactionTaxAmount">112</Total>
<Total TotalType="TransactionGrandAmount">560</Total>
</RetailTransaction>
</Transaction>
<Transaction>
<BusinessUnit>
<UnitID>1</UnitID>
<Address>
<AddressLine>Fruebjergvej 3</AddressLine>
<AddressLine></AddressLine>
<City>København Ø</City>
<PostalCode>2100</PostalCode>
<Country>Denmark</Country>
</Address>
<Telephone>
<LocalNumber>08-50500606</LocalNumber>
</Telephone>
</BusinessUnit>
<Identity>
<Card>
<CardID>foo1</CardID>
<UserID>bar1</UserID>
</Card>
<Card>
<CardID>foo2</CardID>
<UserID>bar2</UserID>
</Card>
</Identity>
<WorkstationID>5</WorkstationID>
<SequenceNumber>2</SequenceNumber>
<TransactionID>foobar123</TransactionID>
<OperatorID OperatorName="Jakob Hilarius">2</OperatorID>
<CurrencyCode>DKK</CurrencyCode>
<ReceiptDateTime>2016-08-13T12:04:12</ReceiptDateTime>
<ReceiptImage>
<Image TypeCode="PDF">AQID</Image>
</ReceiptImage>
<RetailTransaction>
<LineItem>
<Sale>
<POSIdentity POSIDType="EAN">
<POSItemID>17228340</POSItemID>
</POSIdentity>
<Description>FRAKTA</Description>
<UnitListPrice>5</UnitListPrice>
<RegularSalesUnitPrice>5</RegularSalesUnitPrice>
<ActualSalesUnitPrice>5</ActualSalesUnitPrice>
<ExtendedAmount>5</ExtendedAmount>
<Quantity Units="1" UnitOfMeasureCode="EA">1</Quantity>
<Tax TaxType="VAT">
<Amount>1</Amount>
<Percent>25</Percent>
</Tax>
</Sale>
<SequenceNumber>1</SequenceNumber>
</LineItem>
<LineItem>
<Tender TenderType="CreditDebit">
<Amount>560</Amount>
<CreditDebit CardType="Credit">
<IssuerIdentificationNumber>457104</IssuerIdentificationNumber>
<PrimaryAccountNumber>************1116</PrimaryAccountNumber>
<TransactionDetails>
<RetrievalReferenceNumber></RetrievalReferenceNumber>
<CardAcceptorTerminalID></CardAcceptorTerminalID>
<CardAcceptorIDCode></CardAcceptorIDCode>
<AcquiringInstitutionIDCode></AcquiringInstitutionIDCode>
<ApprovalCode></ApprovalCode>
<PaymentAccountReference></PaymentAccountReference>
<TransactionLifeCycleID></TransactionLifeCycleID>
</TransactionDetails>
</CreditDebit>
</Tender>
<SequenceNumber>2</SequenceNumber>
</LineItem>
<Total TotalType="TransactionNetAmount">448</Total>
<Total TotalType="TransactionTaxAmount">112</Total>
<Total TotalType="TransactionGrandAmount">560</Total>
</RetailTransaction>
</Transaction>
</POSLog>
A receipt can be converted to a CSV format. It could be one row per receipt or multiple lines for each orderline of the receipt. The specific format to be used is handled per subscription and must be agreed with Storebox upon setup.
Example:
date;receiptId;totalOrderPriceValue;itemNumber;name;count;itemPriceValue
2021-11-17 10:03:27;e45gww7u4cecptbc7zg3cif5hq0ojv1z;300.0;5760725202237;LEGETØJ;1;300.0;
A receipt can be converted to a PDF. If the receipt data already has an embedded PDF, provided by the merchant, that will used otherwise Storebox will generate the PDF.
SFTP should preferably be used when batching data. Batch files can be fetched from a Storebox SFTP server or be delivered to an external SFTP provided by the subscriber.
The Storebox SFTP server only supports public key authentication, but if delivered to an external SFTP then both public key and username/password authentication are supported.
By using link the data is hosted by Storebox for a limited period of time for the subscriber to download the data.
To get notified about a new link, currently either e-mail or SMS is supported.
Notifications can be sent to a static recipient or dynamic by using information from the receipt data provided by the merchant POS system.
For integration to a custom API contact Storebox.
Webhook notification about a new receipt.
required | Array of objects |
object Optional external receipt id | |
merchantId required | string Identifier of the merchant – value assigned by Storebox |
required | object |
orderDate required | string <date-time> Date and time of order including timezone information as defined by ISO8601. It is mandatory to include the offset from UTC time respecting daylight saving. |
orderNumber required | string <= 64 characters Unique number for the receipt |
salesEmployeeName | string Name of the cashier |
headerText | Array of strings[ items <= 512 characters ] Header lines which can have random data. Will be displayed in the top of the receipt. |
footerText | Array of strings[ items <= 512 characters ] Footer lines which can have random data. Will be displayed in the bottom of the receipt. |
terminalId | string <= 32 characters Number identifying the terminal attached to the point of sale |
sequenceNumber | string <= 32 characters The receipt sequence number. This may be unique in itself or as a combination of storeId, terminalId and sequence number |
object | |
object | |
required | Array of objects |
required | object |
required | Array of objects List of payment methods used in the purchase |
object |
{- "userInfo": [
- {
- "userId": "xur8tuibm6yg3ywwwq9qxgdzyha5gt5d",
- "externalCardId": "bhccc9udv7925bbguu4tfewi76bbjzbk"
}
], - "receiptId": {
- "type": "storebox",
- "value": "d764e8f4-a6e9-47ef-bca3-b12d280c1f87"
}, - "merchantId": "storebox",
- "store": {
- "storeName": "Storebox",
- "storeId": "2020",
- "storeRegNumber": "35406921",
- "storeAddressLine1": "Lyngbyvej 2, 2.",
- "storeAddressLine2": "C/O Innovation Hub",
- "storeZipCode": "2100",
- "storeCity": "Købehavn Ø",
- "storeCountry": "Danmark",
- "storePhone": "+45 70151151",
- "storeEmail": "support@storebox.com",
}, - "orderDate": "2019-08-24T14:15:22Z",
- "orderNumber": "12345678",
- "salesEmployeeName": "John Doe",
- "headerText": [
- "Thank you for shopping with us"
], - "footerText": [
- "You could have saved 10 kr. if you were a loyalty member",
- "Signup here https://storebox.com"
], - "terminalId": "17193CT26617792",
- "sequenceNumber": "10",
- "receiptImage": {
- "imageType": "pdf",
- "encodingType": "base64",
- "columns": 0,
- "image": "TWFuIGlz...VyZS4="
}, - "barcode": {
- "type": "interleaved2of5",
- "value": "012345678912",
- "displayValue": "01-23456-789-12"
}, - "orderLines": [
- {
- "number": "1234",
- "category": "123",
- "name": "MILK",
- "text": "Arla Organic Full fat 200ml",
- "count": 1,
- "gtin": "2388060103489",
- "itemPrice": {
- "value": 10,
- "currency": "EUR"
}, - "totalPrice": {
- "value": 10,
- "currency": "EUR"
}, - "type": "sale"
}
], - "totalOrderPrice": {
- "value": 10,
- "currency": "EUR",
- "vatRates": [
- {
- "rate": 25,
- "value": 2
}
]
}, - "payments": [
- {
- "paymentType": "paymentcard",
- "paymentTypeLabel": "DANKORT",
- "price": {
- "value": 10,
- "currency": "EUR",
- "foreignValue": 15,
- "foreignCurrency": "USD",
- "exchangeRate": "€ 1.5/$"
}, - "truncatedCardNumber": "457100XXXXXX0001",
- "transactionId": "300001116910",
- "transaction": [
- "DANKORT",
- "CONTACTLESS",
- "XXXX XXXX XXXX 0001",
- "TERM: 00123456-123456",
- "NETS A/S",
- "4611721",
- "KC1 NETS NR:0004611721",
- "ATC:00409 AED:0000000",
- "AID: A0000001214711",
- "PSAM: 1234567-000053421",
- "ARC:00 STATUS:0000",
- "AUT. KODE: 1234567",
- "REF:112233 AUTORISERET"
], - "approvalCode": "1234567",
- "cardAcceptorId": "4611721",
- "cardAcceptorTerminalId": "00123456",
- "systemTraceAuditNumber": "123456",
- "retrievalReferenceNumber": "200101110011"
}
], - "loyalty": {
- "skipProcessing": true,
- "stampCount": 3
}
}