External Sales Data Integration
You can import sales data from various third-party sources into the Petrosoft back-office system. This ensures that transactions occurring outside of the managed Points of Sale (POS) are captured, providing a unified view of all sales activity.
This integration is currently utilized by partners such as Vroom Delivery to synchronize their external sales data with Petrosoft Cloud.
How it Works
External systems send sales data to Petrosoft Cloud as PJR (POS Journal Report) transactions, fully compliant with the Conexxus standard.
CStoreOffice® aggregates these PJR transactions and generates shift reports. Once generated, these shifts are processed through the standard CStoreOffice® workflow alongside POS data, providing a complete picture of daily sales activity at the station.
Integration Guide
Follow the steps below to connect the third-party systems to Petrosoft Cloud:
- Get access credentials
- Authenticate
- Send PJR Data
- Authorization header: a JWT token received on Step 2.
- Content-Type header:
multipart/form-data - Payload: The POS Journal Report (PJR) file formatted according to the Conexxus standard.
- Success
- FatalError
- NonFatalError
- Error
- Warning
- Info
- Monitor POS connection
To interact with Petrosoft Cloud, obtain a dedicated username and password. Submit a support ticket to request your API credentials.
Before sending data, you must receive a JWT (JSON Web Token). This token must be included in the Authorization header of all subsequent requests.
Create a request to https://cnnx35-api.petrosoft.cloud/api/auth/by-password endpoint with Content-Type header equals to application/x-www-form-urlencoded. Send you access credentials in a request body.
curl -X 'POST' \
'https://cnnx35-api.petrosoft.cloud/api/auth/by-password' \
-H 'Accept: application/json' \
-H 'Content-Type: application/x-www-form-urlencoded' \
-d 'email={UserLogin}&password={UserPassword}'
Send a POST request to https://cnnx35-api.petrosoft.cloud/api/journals/pos endpoint. Use the following parameters:
curl -X 'POST' \
'https://cnnx35-api.petrosoft.cloud/api/journals/pos' \
-H 'Accept: application/xml' \
-H 'Authorization: Bearer <JWT>' \
-F 'PJR=@PJR20251111060400820.xml;type=text/xml'
The backend will respond with an acknowledgment in XML format containing the following data:
| XML Path | Description |
|---|---|
| NAXML-Acknowledgement/TransmissionHeader/StoreLocationID | Store location ID |
| NAXML-Acknowledgement/TransmissionHeader/VendorName | Vendor name |
| NAXML-Acknowledgement/TransmissionHeader/VendorModelVersion | Vendor model version |
| NAXML-Acknowledgement/TransmissionHeader/@timeStamp | Acknowledgement date and time |
| NAXML-Acknowledgement/AckHeader/DocumentName | Original document name |
| NAXML-Acknowledgement/AckHeader/DocumentType | Original document type |
| NAXML-Acknowledgement/AckHeader/ReferenceID | Unique document reference ID |
| NAXML-Acknowledgement/AckHeader/ValidationStatus |
Validation status: |
| NAXML-Acknowledgement/AckHeader/StatusMessage | Status message |
| NAXML-Acknowledgement/Detail/LineNumber | Original document line number |
| NAXML-Acknowledgement/Detail/LinePosition | Original document line position |
| NAXML-Acknowledgement/Detail/ValidationMessage | Validation message |
| NAXML-Acknowledgement/Detail/Severity |
Processing status code: |
Example acknowledgment (success):
<?xml version="1.0" encoding="UTF-8"?>
<NAXML-Acknowledgement version="3.5" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<TransmissionHeader timeStamp="2018-08-01T09:30:47Z">
<StoreLocationID/>
<VendorName/>
<VendorModelVersion/>
</TransmissionHeader>
<AckHeader>
<ReferenceID>67c8246a22b452001329a0cc</ReferenceID>
<DocumentName>PJR20250217012300.xml</DocumentName>
<DocumentType>JournalReport</DocumentType>
<ValidationStatus>Success</ValidationStatus>
<StatusMessage>OK</StatusMessage>
</AckHeader>
</NAXML-Acknowledgement>
Call /api/location/<locationId>/connection-state endpoint every 5 minutes to check the availability of the POS system. Provide a JWT token received on Step 2 in the Authorization header.
curl -X 'POST' \
'https://cnnx35-api.petrosoft.cloud/api/location/<CSO_LocationId>/connection-state' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer <TOKEN>' \
-H 'Content-Type: application/json' \
-d '{"state":"OK","recordedAt":"2025-02-21T08:00:03-0500"}'
Supported PJR Event Types
The system aggregates all PJR transactions received during a 24-hour window into a single daily shift report in accordance with the NAXML Conexxus 3.5 standard.
Only Sale (SaleEvent) and Refund (RefundEvent) transaction types are currently supported.
<?xml version="1.0" encoding="UTF-8"?>
<NAXML-POSJournal release="3.4.0" version="3.4" xmlns="http://www.naxml.org/POSBO/Vocabulary/2003-10-16">
<TransmissionHeader>
<StoreLocationID>1572</StoreLocationID>
<VendorName>Vroom Delivery</VendorName>
<VendorModelVersion>1.0.0</VendorModelVersion>
</TransmissionHeader>
<JournalReport>
<JournalHeader>
<ReportSequenceNumber>3738487</ReportSequenceNumber>
<PrimaryReportPeriod>0</PrimaryReportPeriod>
<SecondaryReportPeriod>0</SecondaryReportPeriod>
<BeginDate>2026-03-17</BeginDate>
<BeginTime>23:37:14</BeginTime>
<EndDate>2026-03-17</EndDate>
<EndTime>23:37:14</EndTime>
</JournalHeader>
<SaleEvent>
<EventSequenceID>3738487</EventSequenceID>
<TrainingModeFlag value="no"/>
<CashierID>1</CashierID>
<RegisterID>1</RegisterID>
<TillID>1</TillID>
<OutsideSalesFlag value="no"/>
<TransactionID>3738487</TransactionID>
<EventStartDate>2026-03-17</EventStartDate>
<EventStartTime>23:37:14</EventStartTime>
<EventEndDate>2026-03-17</EventEndDate>
<EventEndTime>23:37:14</EventEndTime>
<BusinessDate>2026-03-17</BusinessDate>
<ReceiptDate>2026-03-17</ReceiptDate>
<ReceiptTime>23:37:14</ReceiptTime>
<OfflineFlag value="no"/>
<SuspendFlag value="no"/>
<TransactionDetailGroup>
<TransactionLine status="normal">
<ItemLine>
<ItemCode>
<POSCodeFormat format="upcA"/>
<POSCode>099988071096</POSCode>
<POSCodeModifier name="pc">0</POSCodeModifier>
</ItemCode>
<Description>Menage A Trois Red 750ml</Description>
<EntryMethod method="manual"/>
<ActualSalesPrice>11.99</ActualSalesPrice>
<MerchandiseCode>23</MerchandiseCode>
<RegularSellPrice>11.99</RegularSellPrice>
<SalesQuantity>1</SalesQuantity>
<SalesAmount>11.99</SalesAmount>
</ItemLine>
</TransactionLine>
<TransactionLine status="normal">
<ItemLine>
<ItemCode>
<POSCodeFormat format="upcA"/>
<POSCode>086003061910</POSCode>
<POSCodeModifier name="pc">0</POSCodeModifier>
</ItemCode>
<Description>Robert Mondavi Private Cabernet Sauvigno</Description>
<EntryMethod method="manual"/>
<ActualSalesPrice>10.79</ActualSalesPrice>
<MerchandiseCode>23</MerchandiseCode>
<RegularSellPrice>10.79</RegularSellPrice>
<SalesQuantity>1</SalesQuantity>
<SalesAmount>10.79</SalesAmount>
</ItemLine>
</TransactionLine>
<TransactionLine status="normal">
<TenderInfo>
<Tender>
<TenderCode>doordash</TenderCode>
<TenderSubCode>generic</TenderSubCode>
</Tender>
<TenderAmount>22.78</TenderAmount>
<ChangeFlag value="no"/>
</TenderInfo>
</TransactionLine>
</TransactionDetailGroup>
<TransactionSummary>
<TransactionTotalGrossAmount>22.78</TransactionTotalGrossAmount>
<TransactionTotalNetAmount>22.78</TransactionTotalNetAmount>
<TransactionTotalTaxNetAmount>0.0</TransactionTotalTaxNetAmount>
</TransactionSummary>
</SaleEvent>
</JournalReport>
</NAXML-POSJournal>
<?xml version="1.0" encoding="UTF-8"?>
<NAXML-POSJournal release="3.4.0" version="3.4" xmlns="http://www.naxml.org/POSBO/Vocabulary/2003-10-16">
<TransmissionHeader>
<StoreLocationID>1574</StoreLocationID>
<VendorName>Vroom Delivery</VendorName>
<VendorModelVersion>1.0.0</VendorModelVersion>
</TransmissionHeader>
<JournalReport>
<JournalHeader>
<ReportSequenceNumber>3730912</ReportSequenceNumber>
<PrimaryReportPeriod>0</PrimaryReportPeriod>
<SecondaryReportPeriod>0</SecondaryReportPeriod>
<BeginDate>2026-03-17</BeginDate>
<BeginTime>08:12:02</BeginTime>
<EndDate>2026-03-17</EndDate>
<EndTime>08:12:02</EndTime>
</JournalHeader>
<RefundEvent>
<EventSequenceID>3730912</EventSequenceID>
<TrainingModeFlag value="no"/>
<CashierID>1</CashierID>
<RegisterID>1</RegisterID>
<TillID>1</TillID>
<OutsideSalesFlag value="no"/>
<TransactionID>3730912</TransactionID>
<EventStartDate>2026-03-17</EventStartDate>
<EventStartTime>08:12:02</EventStartTime>
<EventEndDate>2026-03-17</EventEndDate>
<EventEndTime>08:12:02</EventEndTime>
<BusinessDate>2026-03-17</BusinessDate>
<ReceiptDate>2026-03-17</ReceiptDate>
<ReceiptTime>08:12:02</ReceiptTime>
<OfflineFlag value="no"/>
<SuspendFlag value="no"/>
<TransactionDetailGroup>
<TransactionLine status="normal">
<MerchandiseCodeLine>
<MerchandiseCode>24</MerchandiseCode>
<Description>Natural Ice 6-Pack Cans 16oz</Description>
<ActualSalesPrice>8.39</ActualSalesPrice>
<RegularSellPrice>8.39</RegularSellPrice>
<SalesQuantity>1</SalesQuantity>
<SalesAmount>8.39</SalesAmount>
</MerchandiseCodeLine>
</TransactionLine>
<TransactionLine status="normal">
<TenderInfo>
<Tender>
<TenderCode>cash</TenderCode>
<TenderSubCode>generic</TenderSubCode>
</Tender>
<TenderAmount>8.39</TenderAmount>
<ChangeFlag value="yes"/>
</TenderInfo>
</TransactionLine>
</TransactionDetailGroup>
<TransactionSummary>
<TransactionTotalGrossAmount>8.39</TransactionTotalGrossAmount>
<TransactionTotalNetAmount>8.39</TransactionTotalNetAmount>
<TransactionTotalTaxNetAmount>0.0</TransactionTotalTaxNetAmount>
</TransactionSummary>
<ApproverID>1</ApproverID>
<RefundReason>100</RefundReason>
</RefundEvent>
</JournalReport>
</NAXML-POSJournal>