Welcome to the Brink API Portal
Brink is a SOAP-based API service. All of the data is structured via XML, but you can consume the WSDLs (Web Service Description Language) for each Brink Service and generate classes using a WSDL to Class Generator for the language you are programming in.
Using Our API
Release Notes
Web Services
The web services available on the Brink API are separated by focus and contain methods you can call to get or post data for a location.
Services
Service
Calls
Summary
HouseAccounts
Provides data on house accounts, including their charges and payments.
Kitchen
Provides data on kitchen queues and bump times. This is used in tandem with when an order is sent to the kitchen and when the order has been bumped.
Labor2
Provides labor functionalities like the ability to save and retrieve labor schedules, as well as retrieve shifts recorded by the Register at a location.
Loyalty2
Provides loyalty functionalities like the ability to add adjustments, redeem rewards, and retrieving activity, adjustments, and award redemptions.
Ordering
Provides ordering functionalities like the ability to calculate, submit, and retrieve orders, as well as update or retrieve item availability. The GetMasterTerminalStatus call is heavily used to check that the Register is online before submitting an online order with SubmitOrder.
Sales2
Provides data on the sales at a location, namely Deposits, Orders, Tills, and the current business date of the Register. GetOrders is heavily used for reporting purposes.
Settings
Provides data about the configuration Settings for a single location. Heavily used for cross-referencing IDs in other calls.
Settings2
- DeleteDestinations
- DeleteItems
- DeletePriceChanges
- DeleteTaxes
- GetBrands
- GetBusinessHours
- GetDestinations
- GetEmployees
- GetFutureOrderingOptions
- GetItems
- GetJobs
- GetKitchenQueues
- GetLastModifiedTime
- GetMenu
- GetOnlineOrderingMenuOptions
- GetPermissions
- GetPriceChanges
- GetSecurityLevels
- GetSettings
- GetTables
- GetTaxes
- SaveEmployees
- SaveDestinations
- SaveItems
- SavePriceChanges
- SaveTaxes
- UpdateItemPrice
Provides data about the configuration Settings for a single location, with improved methods for GetEmployees and GetJobs, recommended over their predecessors in Settings.svc. Heavily used for cross-referencing IDs in other calls. Also contains SaveEmployees, a method to add and/or update employees for a location.
Endpoints And WSDLs
The endpoints that you hit to access the Brink API are dependent on what server your group and location is on.
For example, if your restaurant is on production server Admin 2 and you need to call the method SubmitOrder on the Ordering service, your endpoint should be:
If you are testing integration on the Brink development server APIINT for that same SubmitOrder method, your endpoint would be:
A WSDL is Web Service Description Language that describes the functionality of a web service. The version of the API can be determined based on the GetServiceVersion call in Settings2.
All WSDLs are available only on the Brink Dev server at the URLs in the table below. WSDLs are not located on the production servers.
For example, if your restaurant is on production server Admin 2 and you need to call the method SubmitOrder on the Ordering service, your endpoint should be:
https://api2.brinkpos.net/Ordering.svc
If you are testing integration on the Brink development server APIINT for that same SubmitOrder method, your endpoint would be:
https://api-apiint.brinkpos.net/Ordering.svc
A WSDL is Web Service Description Language that describes the functionality of a web service. The version of the API can be determined based on the GetServiceVersion call in Settings2.
All WSDLs are available only on the Brink Dev server at the URLs in the table below. WSDLs are not located on the production servers.
Service
HouseAccounts
Service
HouseAccounts
Service
HouseAccounts
Service
HouseAccounts
Soap Actions
SOAP Actions identify operations and are used by the services to execute those operations.
The following is a table of SOAP Action formats for each service to determine the SOAP Action for the call needed. You can include this in the Headers of your request.
The following is a table of SOAP Action formats for each service to determine the SOAP Action for the call needed. You can include this in the Headers of your request.
SOAP Actions
SOAP Action Format
HouseAccounts
- http://www.brinksoftware.com/webservices/houseaccounts/IHouseAccountsWebService/ {{InsertCallName}}
Kitchen
- http://www.brinksoftware.com/webservices/kitchen/v1/IKitchenWebService/ {{InsertCallName}}
Labor2
- http://www.brinksoftware.com/webservices/labor/v2/ILaborWebService2/ {{InsertCallName}}
Loyalty
- http://www.brinksoftware.com/webservices/loyalty/20140330/ILoyaltyWebService/ {{InsertCallName}}
Loyalty2
- http://www.brinksoftware.com/webservices/loyalty/v2/ILoyaltyWebService2/ {{InsertCallName}}
Ordering
- http://www.brinksoftware.com/webservices/ordering/20140219/IOrderingWebService/ {{InsertCallName}}
Sales2
- http://www.brinksoftware.com/webservices/sales/v2/ISalesWebService2/ {{InsertCallName}}
Settings
- http://tempuri.org/ISettingsWebService/{{InsertCallName}}
Settings2
- http://www.brinksoftware.com/webservices/settings/v2/ISettingsWebService2/ {{InsertCallName}}
Recommended Tools
For testing purposes, we recommend using free tools like SoapUI or Postman to make test calls.
With SoapUI, you can create a SOAP-based project by consuming a WSDL from one of the WSDL URLs listed above.
It will generate sample requests for the calls within a given service so that you can visualize the format of the request and response returned.
You will be able to add HTTP Web Request Headers (if necessary for your call) and specify the endpoint that you want to hit.
Note: All fields within the sample requests will appear as "Optional" by default, but that is not necessarily the case.
With Postman, you can make POST calls to your specified endpoint.
You will have to provide a raw request body and include all necessary HTTP Web Request Headers such as tokens, Content-Type ("text/xml"), and SOAPAction (e.g. "http://www.brinksoftware.com/webservices/sales/v2/ISalesWebService2/GetOrders").
We usually recommend that you copy/paste the sample request generated through SoapUI into the body of your Postman request.
With SoapUI, you can create a SOAP-based project by consuming a WSDL from one of the WSDL URLs listed above.
It will generate sample requests for the calls within a given service so that you can visualize the format of the request and response returned.
You will be able to add HTTP Web Request Headers (if necessary for your call) and specify the endpoint that you want to hit.
Note: All fields within the sample requests will appear as "Optional" by default, but that is not necessarily the case.
With Postman, you can make POST calls to your specified endpoint.
You will have to provide a raw request body and include all necessary HTTP Web Request Headers such as tokens, Content-Type ("text/xml"), and SOAPAction (e.g. "http://www.brinksoftware.com/webservices/sales/v2/ISalesWebService2/GetOrders").
We usually recommend that you copy/paste the sample request generated through SoapUI into the body of your Postman request.
GetOrders Sample Code
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.ServiceModel;
using System.ServiceModel.Web;
using Sales2_GetOrders.Sales2ServiceReference;
namespace Sales2_GetOrders
{
class Program
{
public static void DisplayModifiers(OrderItemModifier[] modifiers)
{
//Loop through collection of OrderItemModifier objects returned
foreach (var mod in modifiers)
{
Console.WriteLine("\t\tId: " + mod.Id);
Console.WriteLine("\t\tItemId: " + mod.ItemId);
Console.WriteLine("\t\tModifierCodeId: " + mod.ModifierCodeId);
Console.WriteLine("\t\tModifierGroupId: " + mod.ModifierGroupId);
Console.WriteLine("\t\tPrice: " + mod.Price);
//Loop through collection of OrderItemModifier objects returned
if (mod.Modifiers.Length != 0)
{
DisplayModifiers(mod.Modifiers);
}
Console.WriteLine("\t\t------------");
}
}
static void Main(string[] args)
{
//Connect to Sales2 service client
var client = new SalesWebService2Client();
//Set security protocol to TLS 1.2
System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12;
int count = 1;
using (var scope = new OperationContextScope(client.InnerChannel))
{
//Include tokens in HTTP Web Request Headers
var headers = WebOperationContext.Current.OutgoingRequest.Headers;
headers["AccessToken"] = @"AccessToken";
headers["LocationToken"] = @"LocationToken";
DateTime businessDate = new DateTime(2001, 01, 01);
DateTimeOffset modifiedTime = new DateTimeOffset(2001, 01, 01, 12, 0, 0, new TimeSpan(0));
//Include parameters in request body
var request = new GetOrdersRequest()
{
BusinessDate = businessDate,
ExcludeOpenOrders = false,
//ModifiedTime = modifiedTime,
PriceRollUp = "RollUpAndDetails",
};
//Make GetOrders call
var response = client.GetOrders(request);
//If call is successful
if (response.ResultCode == 0)
{
//Loop through collection of Order objects returned
foreach (var order in response.Orders)
{
Console.WriteLine("Order #" + count);
Console.WriteLine("---------------------------");
Console.WriteLine("BusinessDate: " + order.BusinessDate);
Console.WriteLine("ClosedTime: " + order.ClosedTime);
Console.WriteLine("CustomerId: " + order.CustomerId);
Console.WriteLine("EmployeeId: " + order.EmployeeId);
Console.WriteLine("Entries:");
//Loop through collection of OrderItem objects returned
foreach (var entry in order.Entries.OfType<OrderItem>())
{
Console.WriteLine("\tModifiers: ");
if (entry.Modifiers.Length != 0)
{
DisplayModifiers(entry.Modifiers);
}
}
Console.WriteLine("FirstSendTime: " + order.FirstSendTime);
Console.WriteLine("Id: " + order.Id);
Console.WriteLine("IsClosed: " + order.IsClosed);
Console.WriteLine("ModifiedTime: " + order.ModifiedTime);
Console.WriteLine("Name: " + order.Name);
Console.WriteLine("OpenedTime: " + order.OpenedTime);
Console.WriteLine("Payments:");
//Loop through collection of OrderPayment objects returned
if (order.Payments.Length != 0)
{
foreach (var payment in order.Payments)
{
Console.WriteLine("\tId: " + payment.Id);
Console.WriteLine("\tAmount: " + payment.Amount);
Console.WriteLine("\tBusinessDate: " + payment.BusinessDate);
Console.WriteLine("\t-----------------------");
}
}
Console.WriteLine("PickUpTime: " + order.PickupTime);
Console.WriteLine("Total: " + order.Total);
Console.WriteLine("---------------------------");
count++;
}
Console.WriteLine("End");
Console.ReadKey();
}
else
{
Console.WriteLine("Error Code: " + response.ResultCode);
Console.WriteLine("Message: " + response.Message);
Console.ReadKey();
}
}
}
}
}