Display Integration
With Display Integration, customers select tips and confirm the payment on a Tippy device (usually a tablet) provided to businesses by Tippy. We provide the UX and guide the customer through selecting the tips and confirming the payment.
v1/display/devices/activate#
If you decide to sync devices so that Tippy generates a unique identifier for Tippy devices, before a device can be used, Tippy will display the identifier on the device's screen and instruct them to enter it into your POS software.
Once they've done that, it's up to you to store that identifier and call
/v1/display/devices/activate to let us know that you've done so. Then the
device can start being used.
Returns a 200 response on success.
Request body structure (TS notation)
Request example
v1/display/transaction/create#
Use this endpoint to create a transaction. This starts the checkout flow on the Tippy device.
The display field specifies what should be displayed on the checkout summary.
Each line can be either an item with its quantity and amount, or a category
with one or more sub-items. If the items field for a line is provided, it's
considered to be a category. Otherwise, it's a single item.
Tipping without service.amount is also available. What this means is that those kind of tips will
not be counted in aggregate reports. You could use this option in cases when a customer
wants to tip an assistant, etc. Sending 0 for service.amount will be treated as not sending it at all.
To shorten the user experience and avoid displaying payment prompts on the screen, you can pass in isAsync flag and set it to TRUE.
This will send the device into idle state after the tip selection when customers press on Continue to Payment button.
The device will be ready for new transactions. Transactions with isAsync set to TRUE still require /confirm or /cancel endpoints to bring them to their final state, but those endpoints will be handled in the background and will no longer have any effect on the device state.
In some use cases (e.g.: when editing transaction or when consumer verbaly notifies a staff member of tip amount), it can be desired for POS to preselect tip amounts. In those cases you can pass preselectedTip field with an amount as a value to the service object and the device will not prompt the consumer to select the tip for the staff member.
If there are multiple staff members on a given transaction, you can pass preselectedTip for each of them in which case the device will go straight to the review screen.
Returns a 200 response on success.
Request body structure (TS notation)
Request example
v1/display/transaction/update#
Once a transaction has been created, it's possible to update it (e.g.: if the front desk made a mistake when inputting staff members who were involved in the service).
Use the transactionId to refer to a created transaction.
Returns a 200 response on success.
Request body structure (TS notation)
v1/display/transaction/init#
After a transaction is created, the customer will select tips on the Tippy
device. Tippy's API will let you know via webhook what the tip selections
were. When you've received the tip selections and when the POS terminal is
ready to accept the customer's payment, call v1/display/transaction/init.
The Tippy device will display an invitation to the customer to tap/dip/swipe their
card.
You can also provide a custom amount that will be displayed to the customer when they are prompted to pay. This is useful if, for example, they are using gift cards or they want to settle part of the payment in cash.
If you don't provide a custom amount, the total from the transaction will be displayed.
Request body structure (TS notation)
Request example
v1/display/transaction/confirm#
When you've accepted payment for a transaction, call v1/display/transaction/confirm
to let Tippy know. The Tippy device will go back to its home screen and Tippy
will distribute the tips among staff members in the background.
Returns a 200 response on success.
Request body structure (TS notation)
Request example
v1/display/transaction/reject#
If a customer's card is declined or the payment fails for some other reason,
call v1/display/transaction/reject. The Tippy device will display a message
that the payment failed, along with a reason.
Once you're ready to retry the payment, call v1/display/transaction/init to
let the Tippy device know.
Returns a 200 response on success.
Request body structure (TS notation)
Request example
v1/display/transaction/cancel#
If a transaction cannot be completed, call v1/display/transaction/cancel.
Tippy will mark the transaction as canceled and return to the home screen.
Returns a 200 response on success.
Request body structure (TS notation)
Request example
v1/display/transaction/last#
If there is any open (incomplete) transaction, call v1/display/transaction/last
will return a transactionId, otherwise transactionId will not be present in response.
Returns a 200 response on success.
Request body structure (TS notation)
Request example
Response example
Case that incomplete transaction exists
Case when incomplete transaction does not exist
v1/display/transaction/details#
This endpoint allows you to retrieve the details of a specific transaction based on its unique ID. You will need to provide the transaction ID that was used when creating the transaction in order to access this endpoint.
A successful call to this endpoint will return a 200 OK response with a JSON structure containing the following properties:
transactionId(string): The unique ID of the transaction.deviceId(string): The ID of the device where the transaction was handled.status(string): The status of the transaction.isAsync(boolean): Indicates whether the transaction is running in async mode.createdAt(string): The date and time when the transaction was created.customer(object): Information about the customer associated with the transaction.services(array): A list of employees used to create this transaction.tips(array): A list of tips for each employee involved in the transaction.refunds(array): A list of refunds created for this transaction.gross(number): The gross value of the transaction.net(number): The net value of the transaction.fee(number): The fee associated with the transaction.
The status property can be one of the following values:
created: The transaction has been created but the tips ware not selected.pending: The transaction is pending and awaiting further action. This status indicates that the user has already chosen tips on the device, and the transaction is waiting for additional actions.confirmed: The transaction has been successfully confirmed and processed.failed: The transaction has been marked as failed.canceled: The transaction has been canceled before it was completed.refunded: The transaction has been fully refunded.
The tips array in the response contains objects representing tips for each employee involved in the transaction. Each tip object has the following properties:
employeeId(string): The ID of the employee who received the tip.status(string): The status of the tip.level(string): The tip level, which can be one of the following values: "low," "medium," "high," or "custom."serviceAmount(number): The amount of the service for which the tip is intended.gross(number): The gross value of the tip.net(number): The net value of the tip.fee(number): The fee associated with the tip.createdAt(string): The date and time when the tip was created.included(boolean): True when tip was created with the included flag.
The status property of the tip can be one of the following values:
pending: The tip has been created, but the transaction is awaiting confirmation.confirmed: The tip has been confirmed and sent to the employee.void: The tip has been canceled or refunded.
Request body structure (TS notation)
Request example
Response example
v1/display/transaction/refund#
If a transaction is refunded, notify Tippy by calling
v1/display/transaction/refund. That way, we can keep track on our
side and subtract the refunded amounts from the staff members' tip balances.
A refund can be full or partial. In the case of a full refund, just set
partial to false and leave out the amount field. In the case of a partial
refund, set partial to true and specify the amount.
If you want to control distribution of the refunded tips between staff members
who were part of a service whose transaction is being refunded, use the talents
field. talents is an array of object, each object containing an employeeId field
that uniquely identifies the staff member and an amount field that specifies
what the amount subtracted from that employee's tip balance should be. If you don't
specify talents, we split the refund evenly between staff members.
A partial refund amount will always be deducted from the gross amount of the entire transaction (including fees).
If you want to simulate a refund, you can set the parameter dryRun to true. This
will return the result with the calculations as if the refund had actually taken place,
but nothing will be executed or saved. Suitable if you want to check the numbers before
making the refund.
Returns a 200 response on success.
Request body structure (TS notation)
Response body structure (TS notation)
Refund response is an array of objects. If you refund the entire transaction, a response will be single refund object without employeeId information. If you initiate a partial refund with a specific amount, you will receive response object for each of the employees involved in the original transaction.
Request examples
Response example
Full refund:
Partial refund (amount $6):
v1/display/transaction/transfer#
If you want to re-distribute tips between different staff members once you already collected payments,
and do not want to swipe card again, notify Tippy by calling v1/display/transaction/transfer.
That way, the tip net amount will be re-distributed.
If you want to control distribution of the transferred tips between staff members
who were part of a service, use the talents field.
talents is an array of object, each object containing an employeeId field
that uniquely identifies the staff member, it's firstName, lastName, and avatar.
Those fields are required if we want to distribute tips to staff member that is not created
yet on Tippy side. The last field of talents object is amount. That field specifies
what amount should be re-distributed to each talent. If you specify amounts, it should be
specified for each talent, if not endpoint will return an error, also amounts sum must match
the net tip amount of transaction. If you don't specify amount to any talent,
we split the net amount evenly between staff members.
Returns a 200 response on success.
Request body structure (TS notation)
Request examples
v1/display/transaction/update-customer#
This API endpoint allows you to modify the customer information associated with a specific transaction record identified by its unique transaction id.
Request body structure (TS notation)
Request example
Response example