Technical Documentation

Partner Integration Technical Documentation

Goals of this Document

This document should outline the technical details of building a Partner Integration that sends data to Tenzo for a joint customer between the partner and Tenzo.

Once the build of the integration is complete, the Tenzo team will be in contact to ask the partner to complete the Partner Integration Certification. This document allows for correct documentation to be completed, shares knowledge of both Tenzo and the partner platform and shares key contacts on both partner and Tenzo so that everyone is informed. It is the official sign off on the technical side of the integration.

Data Delivery

Destination

Data is to be delivered via SFTP.

Within each SFTP folder there will be a 'writeable' folder. The data must be put in this folder.

During initial development and testing phase, the SFTP credentials will be provided by either the Partnerships team, Product Manager of Integrations or Implementation Managers at Tenzo. Tenzo will also provide the Partner with a sandbox account, to allow the Partner to test sending data to Tenzo and checking it against their own platform.

Once the partner has been certified via the Partner Integration Certification, the SFTP credentials will be provided by Implementation Managers or Customer Success Managers at Tenzo.

Naming Requirements and File Type

These should be delivered to the SFTP as CSV files. The name of these files depends on the type of data being sent and must begin with:

  • "sales_"
  • "labor_" - this is actual labour (shifts taken place in the past)
  • "labor_planned_" - this is scheduled labour (shifts scheduled for the future)
  • "actual_usage_" - this is the COGS (cost of goods sold)
  • "theoretical_usage_" - this is the theoretical usage (in theory how much did we use based off of sales)
  • "wastage_" - wasted food and beverage costs per item
  • "menuitem_costs_" - cost of the menu items (dish or recipe cost)

If possible, sending one file per location/site is preferable for debugging purposes. However Tenzo can support all locations to be contained within one file.

For example the Partner could send one file for multiple locations: but one location at a time is preferable:

Date Ranges

Tenzo recommends to send different amount of data depending on the type of data. These are:

  • Sales: Previous 7 days.
  • Labour: Previous 14 days (shifts taken place) and 14 days into the future (scheduled shifts)
  • Inventory:
    • Purchases, Theoretical Usage, Wastage, Menu Item Costs: Previous 28 days
    • Actual Usage: Previous stocktake.

NOTE: Tenzo will overwrite ALL data for the date range that is sent. Tenzo cannot append additional data onto existing data. Therefore, each time data is sent, it must include a complete export of all data for the day(s).

Data Frequency

Frequency

Data should be sent at a minimum frequency of once per day.

Increases in frequency can be discussed on a per integration basis, as it's largely dependent on the type of data being sent.

Timings

Ideally the data is sent between 4am and 6am UK time (GMT in winter, BST in summer). Tenzo will ingest this data within 20 minutes from it being sent.

Data Fields

NOTE: The Tenzo format supports data at both an item and transaction level. Some metrics only make sense at a transaction level. In these cases Tenzo will take the data point from the first item on the transaction. Therefore it is always safest to repeat the transaction level data for every item on the transaction.

e.g. If there is a guest count of 4 on a table, this would be best represented as:

Tenzo would not sum the guest count → 12 in this example, but take the guest count from the 'Burger' row and therefore for the whole transaction Order ID → 1, it would have a guest count of 4.

Sales

Date YYYY-MM-DD

Description: Date of the sale of the item and/or transaction.
Format: YYYYMMDD

Location Text field

Description: Location of the sales of the item and/or transaction.
Format: Text field

Order ID Text field

Description: The transaction ID. This is at transaction level.
Format: Text field

Employee Name Text field

Description: Name of the employee who sold the item and/or opened the table.
Format: Text field

Table Number Text field

Description: The name of the table. This is at transaction level.
Format: Text field

Time HHMM

Description: The time that the item was sold.
Format: HHMM

Order Type Text field

Description: The channels where the sales come from. e.g. Eat-In, Takeaway, Uber Eats, Deliveroo, Just Eat, etc.
Format: Text field

Product Item Text field

Description: Name of the menu item sold.
Format: Text field

Product Category Text field

Description: Category or section the product belongs to, e.g. Food, Beverage, Appetizers, Mains, Desserts, Beer, Wine, etc.
Format: Text field

Item Price Decimal

Description: Price of the individual item sold (before tax).
Format: Decimal (e.g. 12.50)

Quantity Integer

Description: Number of items sold.
Format: Integer (e.g. 2)

Net Sales Decimal

Description: Total revenue for the item (Item Price × Quantity, after discounts but before tax).
Format: Decimal (e.g. 25.00)

Tax Decimal

Description: Tax amount for the item.
Format: Decimal (e.g. 2.50)

Gross Sales Decimal

Description: Total revenue including tax (Net Sales + Tax).
Format: Decimal (e.g. 27.50)

Discount Decimal

Description: Amount of discount applied to the item.
Format: Decimal (e.g. 3.00)

Service Charge Decimal

Description: Service charge amount for the item or transaction.
Format: Decimal (e.g. 2.75)

Tips Decimal

Description: Tips amount for the transaction.
Format: Decimal (e.g. 5.00)

Guests Integer

Description: Number of guests for the transaction.
Format: Integer (e.g. 4)

Payment Method Text field

Description: Method of payment used (e.g. Cash, Card, Mobile Payment).
Format: Text field

Labour

Date YYYY-MM-DD

Description: Date of the shift.
Format: YYYYMMDD

Location Text field

Description: Location where the shift took place.
Format: Text field

Employee Name Text field

Description: Name of the employee who worked the shift.
Format: Text field

Employee ID Text field

Description: Unique identifier for the employee.
Format: Text field

Role Text field

Description: Job role or position (e.g. Server, Chef, Manager, Bartender).
Format: Text field

Shift Start Time HHMM

Description: Start time of the shift.
Format: HHMM

Shift End Time HHMM

Description: End time of the shift.
Format: HHMM

Hours Worked Decimal

Description: Total hours worked during the shift.
Format: Decimal (e.g. 8.5)

Hourly Rate Decimal

Description: Hourly wage rate for the employee.
Format: Decimal (e.g. 15.50)

Total Cost Decimal

Description: Total labour cost for the shift (Hours Worked × Hourly Rate).
Format: Decimal (e.g. 131.75)

Inventory

Actual Usage

The supported fields in the "actual_usage" files are:

Date YYYY-MM-DD

Description: The date the last stock count that took place. e.g. if you do stock takes monthly, on the 1st of the month and the last day of the month, this date would be the date of the last day of the month.
Format: YYYYMMDD

Location Text field

Description: The location of the usage/stock counts.
Format: Text field

Item Category Text field

Description: The category name that the inventory item is in.
Format: Text field

Item Text field

Description: The inventory item name.
Format: Text field

Amount Float (Decimal)

Description: The amount of actual usage (COGS) for the inventory item, as calculated by the partner.
Format: Float (Decimal)

Theoretical Usage

The supported fields in the "theoretical_usage" files are:

Date YYYY-MM-DD

Description: The date of when the theoretical usage happened.
Format: YYYYMMDD

Location Text field

Description: The location of the usage.
Format: Text field

Item Category Text field

Description: The category name that the inventory item is in.
Format: Text field

Item Text field

Description: The inventory item name.
Format: Text field

Amount Float (Decimal)

Description: The amount of theoretical usage for the inventory item, as calculated by the partner.
Format: Float (Decimal)

Wastage

The supported fields in the "wastage" files are:

Date YYYY-MM-DD

Description: The date the wastage occurred on.
Format: YYYYMMDD

Location Text field

Description: The location the wastage occurred at.
Format: Text field

Item Category Text field

Description: The category name that the inventory item is in.
Format: Text field

Item Text field

Description: The inventory item name.
Format: Text field

Amount Float (Decimal)

Description: The amount of wastage for the inventory item.
Format: Float (Decimal)

Invoices

Date YYYY-MM-DD

Description: Date of the invoice transaction.
Format: YYYYMMDD

Location Text field

Description: Location where the invoice transaction occurred.
Format: Text field

Item Category Text field

Description: Category of the inventory item (e.g. Food, Beverage, Cleaning, etc.).
Format: Text field

Item Name Text field

Description: Name of the inventory item purchased.
Format: Text field

Supplier Text field

Description: Name of the supplier for the purchase.
Format: Text field

Unit Text field

Description: Unit of measurement (e.g. kg, liters, pieces, cases).
Format: Text field

Quantity Decimal

Description: Quantity of the item purchased.
Format: Decimal (e.g. 2.5)

Cost Decimal

Description: Total cost of the item on invoice.
Format: Decimal (e.g. 31.25)

Stock Counts

Date YYYY-MM-DD

Description: Date of the stock count.
Format: YYYYMMDD

Location Text field

Description: Location where the stock count was performed.
Format: Text field

Item Category Text field

Description: Category of the inventory item (e.g. Food, Beverage, Cleaning, etc.).
Format: Text field

Item Name Text field

Description: Name of the inventory item counted.
Format: Text field

Unit Text field

Description: Unit of measurement (e.g. kg, liters, pieces, cases).
Format: Text field

Quantity Decimal

Description: Actual quantity counted during stock take.
Format: Decimal (e.g. 2.5)

Data Validation

Tenzo will validate incoming data and notify partners of any issues. Common validation checks include:

  • Format validation: Date formats, numeric fields, required fields
  • Business logic validation: Negative sales amounts, future dates for historical data
  • Data consistency: Location names match expected values
  • File naming: Correct file prefixes and format

If validation fails, Tenzo will provide detailed error messages to help partners correct the data.

Testing and Certification

Before going live, partners must complete the Partner Integration Certification process:

  1. Development Phase: Build integration using sandbox environment
  2. Testing Phase: Send test data and verify in Tenzo dashboard
  3. Start Certification: Complete our certification template
  4. Finalize Certification: Tenzo team reviews and certifies the integration
  5. Go Live: Production credentials provided and integration activated

FAQ

What happens if my file upload fails?

Tenzo monitors all file uploads and will notify you via email if there are any issues. Common causes include incorrect file naming, invalid data formats, or SFTP connection problems. You can retry uploading the corrected file.

Can I send data for multiple locations in one file?

Yes, you can include multiple locations in a single file. However, we recommend sending separate files per location for easier debugging and troubleshooting.

What timezone should I use for timestamps?

Use the local timezone of each location. If you have locations across multiple timezones, specify the timezone in your data or coordinate with the Tenzo team on the best approach.

How do I handle refunds and voids in sales data?

Send refunds as negative values in the sales data. Include them in the same file with the original transaction date, or coordinate with Tenzo on your preferred approach for handling refunds.

What if I need to send historical data beyond the recommended date ranges?

Contact your Tenzo implementation manager to discuss historical data requirements. We can accommodate larger date ranges for initial setup or data migration purposes.

Can I update data that has already been sent?

Yes, Tenzo will overwrite existing data for any date range that you send. Simply include the corrected data for the specific dates you want to update in your next file upload.

Key Contacts

Below are the key contacts for different phases of the partner integration process:

Team Contact Role Responsibilities Contact Information
Partnerships Partner Manager Initial integration discussions, commercial agreements partnerships@gotenzo.com
Product Product Manager - Integrations Technical requirements, integration scope definition integrations@gotenzo.com
Implementation Implementation Manager SFTP credentials, testing environment setup, certification partnerships@gotenzo.com
Partner Success Partner Success Manager Post-certification support, ongoing relationship management partnerships@gotenzo.com
Technical Support Support Engineer Technical issues, data validation problems, troubleshooting support@gotenzo.com