API Documentation

API Documentation


TBN API — Developer Documentation

Overview

The TBN 3rd Party API is a RESTful API that provides programmatic access to your transportation management data in The Bus Network. It supports reading bookings, routes, dispatch records, invoices, driver information, school and tour contracts, scheduled services, and more.
  • Base URL: Your TBN-provided API host (e.g., https://api.thebusnetwork.com)
  • API Style: REST over HTTPS, JSON request/response bodies
  • OpenAPI Spec: Available at GET /docs/spec.json
  • Interactive Docs: Swagger UI available at GET /docs (no authentication required)

Quick Start

1. Get Your API Key

Info

Contact TBN to request an API key. Keys are scoped to one of three access levels:

Key PrefixScope LevelWhat You Can Access
tbn_c_    Company                       Data for a single company
tbn_p_    Parent Company                       Data across all companies under a parent company
tbn_e_     Enterprise                       Data across the entire enterprise

2. Make Your First Request

curl -H "Authorization: Bearer tbn_c_your_api_key_here" \
https://api.thebusnetwork.com/api/usage/current
IdeaThe /api/usage/current endpoint is free (0 units) and is a good way to verify your key is working.

3. Explore the Data

# List your companies
curl -H "Authorization: Bearer tbn_c_your_api_key_here" \
https://api.thebusnetwork.com/api/companies

# Get a specific booking
curl -H "Authorization: Bearer tbn_c_your_api_key_here" \
https://api.thebusnetwork.com/api/bookings/12345

# List recent quotes (last 24 hours by default)
curl -H "Authorization: Bearer tbn_c_your_api_key_here" \
https://api.thebusnetwork.com/api/quotes

Authentication

All /api/* endpoints require a valid API key in the Authorization header using the Bearer scheme:

Authorization: Bearer <your-api-key>

Key behavior:

  • Keys are validated against bcrypt hashes on the server
  • Validated keys are cached for 5 minutes to reduce latency on subsequent requests
  • The lastUsedAt timestamp on your key is updated with each request

Authentication errors:

Missing or malformed header:

HTTP 401
{
"error": {
"code": "UNAUTHORIZED",
"message": "Missing or invalid Authorization header"
}
}

Invalid key:

HTTP 401
{
"error": {
"code": "UNAUTHORIZED",
"message": "Invalid API key"
}
}

Scope & Data Access

Your API key determines what data you can access. The TBN data hierarchy is:

Enterprise
└── Parent Company
└── Company

Scope Narrowing

Higher-level keys can optionally narrow their scope using query parameters:

Your Key LevelCan Use ?companyID=Can Use ?parentCompanyID=
CompanyNo (already narrowest)No
Parent CompanyYesNo
EnterpriseYesYes
Info

Example — Enterprise key narrowing to a specific company:

curl -H "Authorization: Bearer tbn_e_your_key" \
"
https://api.thebusnetwork.com/api/bookings?companyID=456"

Scope errors:

Invalid scope parameter (not an integer):

HTTP 400
{
"error": {
"code": "INVALID_PARAM",
"message": "Invalid companyID parameter"
}
}

Company not in your hierarchy:

HTTP 403
{
"error": {
"code": "FORBIDDEN",
"message": "Company does not belong to this hierarchy"
}
}

Request Format

Query Parameters

All list endpoints accept optional scope filters:

ParameterTypeDescription
companyIDintegerFilter to a specific company (parent/enterprise keys only)
parentCompanyIDintegerFilter to a specific parent company (enterprise keys only)

Some endpoints support additional filters:

ParameterTypeUsed OnDescription
startDateISO 8601 datetimeQuotes, Dispatch, Routes, Driver Actuals, Driver Availability Events, Other AssignmentsStart of date range (inclusive). Defaults to current time if omitted.
endDateISO 8601 datetimeSame as aboveEnd of date range (inclusive). Defaults to startDate + 24 hours if omitted. Max 31-day window.
includeVoided"true" or "false"InvoicesInclude voided invoices. Defaults to "false".
includeCancelled"true" or "false"RoutesInclude cancelled routes. Defaults to "false".
sourceTypestringRoutesFilter by assignment source type.
quoteIDintegerQuote Segments, Vehicle Requests, Addon Requests, Discount Code QuotesRequired. Parent quote to retrieve children for.
routeIDintegerRoute Segments, Addon Assignments, Discount Code RoutesRequired. Parent route to retrieve children for.
schoolRouteIDintegerSchool SegmentsRequired. Parent school route.
tourRouteIDintegerTour Segments, Tour Vehicle RequestsRequired. Parent tour route.
ssRouteID / SSRouteIDintegerSS Segments, SS Vehicle Requests, SS Addon RequestsRequired. Parent scheduled service route.

Date Format

All date parameters must be in ISO 8601 format:

startDate=2026-02-01T00:00:00Z
endDate=2026-02-28T23:59:59Z

Date range rules:

  • Maximum window: 31 days between startDate and endDate
  • endDate must be on or after startDate
  • If startDate is omitted, it defaults to the current time
  • If endDate is omitted, it defaults to startDate + 24 hours

Path Parameters

Detail endpoints use a numeric id path parameter:

GET /api/bookings/{id}
GET /api/drivers/{id}

The id must be a positive integer.

Request Body

Only one endpoint accepts a request body:

POST /api/drivers/verify

{
"email": "
driver@example.com",
"password": "their_password"
}

Alert
Both fields are required.

Response Format

Successful Responses

List endpoints return an array wrapped in a data envelope:

HTTP 200
{
"data": [
{ "id": 1, "companyName": "Acme Transport", ... },
{ "id": 2, "companyName": "Beta Bus Co", ... }
]
}

If no records match, data is an empty array: { "data": [] }

Detail endpoints return a single object in a data envelope:

HTTP 200
{
"data": {
"id": 1,
"companyName": "Acme Transport",
...
}
}

Driver verify returns a non-enveloped response:

HTTP 200
{
"verified": true
}

Usage Response Headers

Every successful response includes these headers:

HeaderDescription
X-TBN-Units-ConsumedUnits consumed by this request
X-TBN-Period-UsageTotal units consumed this billing period (including this request)
X-TBN-Period-AllocationTotal units allocated for the billing period
X-TBN-Period-RemainingUnits remaining in the billing period
X-TBN-Usage-WarningPresent only when usage exceeds the soft limit threshold (e.g., "Approaching usage limit (85%)")

Date Fields in Responses

Response fields use two date formats:

FormatExampleUsed For
date"2026-02-15"Date-only fields: dob, dateEmploymentStart, invoiceDueDate, depositDue, expirationDate
date-time"2026-02-15T08:00:00Z"Timestamp fields: createdAt, updatedAt, firstDeparture, driverStartTime, cancelledAt

Some datetime fields include a separate timezone field:

{
"firstDeparture": "2026-02-15T08:00:00Z",
"firstDepartureTZ": "America/New_York"
}

Field Naming Conventions

PatternExampleMeaning
<entity>IDdriverID, companyIDForeign key reference
<entity>NamedriverName, companyNameHuman-readable name for the referenced entity
is<Property>isCancelled, isEnhancedDriversLicenseBoolean flag
<event>AtcreatedAt, cancelledAt, driverAcceptedAtTimestamp of when an event occurred
total<Type>totalBeforeTax, totalAfterTaxFinancial total

Error Responses

All errors follow a consistent format:

{
"error": {
"code": "<ERROR_CODE>",
"message": "<Human-readable description>"
}
}

Error Code Reference

HTTP StatusError CodeMeaning
400VALIDATION_ERRORRequest failed input validation (bad query params, missing required fields, invalid date range). The message field lists all validation errors separated by "; ".
400INVALID_PARAMA scope parameter (companyID or parentCompanyID) is not a valid integer.
401UNAUTHORIZEDMissing, malformed, or invalid API key.
403FORBIDDENThe requested company or parent company does not belong to your API key's hierarchy.
404NOT_FOUNDThe requested resource does not exist (or is not visible at your scope level).
429HARD_LIMIT_EXCEEDEDMonthly hard limit reached. No more requests until next billing period.
429ALLOCATION_EXCEEDEDMonthly unit allocation exceeded and auto-upgrade is not enabled.
429RATE_LIMIT_MINUTEPer-minute rate limit exceeded.
429RATE_LIMIT_HOURPer-hour rate limit exceeded.
429RATE_LIMIT_DAYPer-day rate limit exceeded.
429RATE_LIMIT_WEEKPer-week rate limit exceeded.
500INTERNAL_ERRORUnexpected server error. Contact TBN support if this persists.

Handling 429 Responses

All 429 responses include a Retry-After header (in seconds) indicating when you can retry:

Error CodeRetry-After
RATE_LIMIT_MINUTE60 seconds
RATE_LIMIT_HOUR3,600 seconds
RATE_LIMIT_DAY86,400 seconds
RATE_LIMIT_WEEK604,800 seconds
HARD_LIMIT_EXCEEDED86,400 seconds
ALLOCATION_EXCEEDED86,400 seconds

Alert
Rate-limited responses also include usage headers with X-TBN-Units-Consumed: 0 (the rejected request does not consume units).

Recommended retry strategy:

  1. Read the Retry-After header
  2. Wait at least that many seconds before retrying
  3. For RATE_LIMIT_MINUTE, implement exponential backoff starting at 60 seconds
  4. For HARD_LIMIT_EXCEEDED or ALLOCATION_EXCEEDED, stop making requests and contact TBN if you need a plan upgrade

Usage & Metering

How Units Work

Every API call consumes units from your plan's allocation. The cost of each call depends on:

  • Endpoint weight — Each endpoint has a configured base unit cost
  • Scope level — List endpoints called with parent company or enterprise keys cost base weight × number of active companies in scope. Detail endpoints (by ID) always cost the base weight regardless of scope.
  • Zero-cost endpoints — The /api/usage/current endpoint costs 0 units

Rate Limits

Your plan defines limits across multiple time windows:

WindowBehavior When Exceeded
Per-minuteRequest rejected with RATE_LIMIT_MINUTE
Per-hourRequest rejected with RATE_LIMIT_HOUR
Per-dayRequest rejected with RATE_LIMIT_DAY
Per-weekRequest rejected with RATE_LIMIT_WEEK
Monthly allocationRequest rejected with ALLOCATION_EXCEEDED (unless auto-upgrade is enabled)
Monthly hard limitRequest rejected with HARD_LIMIT_EXCEEDED (always enforced)

Monitoring Your Usage

Check your current consumption at any time (free, 0 units):

curl -H "Authorization: Bearer tbn_c_your_key" \
https://api.thebusnetwork.com/api/usage/current

You can also read the X-TBN-* response headers on any API call to monitor usage inline.

Endpoint Reference

All data endpoints are mounted under /api and require authentication.

System

MethodEndpointAuthUnitsDescription
GET/healthNoServer health check. Returns { "status": "ok" }
GET/docsNoInteractive Swagger UI
GET/docs/spec.jsonNoOpenAPI 3.0.3 specification (JSON)
GET/api/usage/currentYes0Current billing period usage summary

Reference Data

Global lookup tables. Not scoped — the same data is returned regardless of your key level.

MethodEndpointDescription
GET/api/customer-typesList all customer classification types
GET/api/customer-types/{id}Get a specific customer type by ID
GET/api/employment-statusesList all employment status types
GET/api/invoice-delivery-methodsList all invoice delivery method options
GET/api/invoice-format-typesList all invoice format type options
GET/api/regionsList all geographic regions
GET/api/school-route-typesList all school route type classifications

Bookings

MethodEndpointQuery ParamsDescription
GET/api/bookingscompanyID, parentCompanyIDList bookings scoped to your access level
GET/api/bookings/{id}Get a specific booking by ID

InfoKey fields: id, bookingFormattedID, bookedQuoteID, primaryContactID, primaryContactName, organizationID, organizationName, bookingCategory, documentType, salesPerson, tripDescription, numPassengers, firstDeparture, firstDepartureTZ, totalBeforeTax, totalTax, totalAfterTax, amountPaid, amountOutstanding, depositAmount, depositDue, isCancelled, cancelledAt, companyID, companyName, parentCompanyID, parentCompanyName, enterpriseID, enterpriseName, createdAt, updatedAt

Quotes

MethodEndpointQuery ParamsDescription
GET/api/quotescompanyID, parentCompanyID, startDate, endDateList quotes within a date range (default: last 24 hours)
GET/api/quotes/{id}Get a specific quote by ID

InfoKey fields: id, formattedQuoteID, contactID, contactName, operationsContactID, operationsContactName, billingContactID, billingContactName, quoteStatus, documentType, source, quoteChannel, customerStatus, bookingCategory, salesPerson, startYardID, startYardName, returnYardID, returnYardName, firstDeparture, firstDepartureTZ, firstPickUpLocation, destination, numTripDays, passengers, charterDescription, tripReference, groupName, routeDescription, priceOverride, expirationDate, dateSubmitted, createdAt, updatedAt

Quote Segments

MethodEndpointQuery ParamsDescription
GET/api/quote-segmentsquoteID (required), companyID, parentCompanyIDList segments for a specific quote
GET/api/quote-segments/{id}Get a specific quote segment by ID

Vehicle Requests

MethodEndpointQuery ParamsDescription
GET/api/vehicle-requestsquoteID (required), companyID, parentCompanyIDList vehicle requests for a specific quote
GET/api/vehicle-requests/{id}Get a specific vehicle request by ID

Addon Requests

MethodEndpointQuery ParamsDescription
GET/api/addon-requestsquoteID (required), companyID, parentCompanyIDList addon requests for a specific quote
GET/api/addon-requests/{id}Get a specific addon request by ID

Discount Code Quotes

MethodEndpointQuery ParamsDescription
GET/api/discount-code-quotesquoteID (required), companyID, parentCompanyIDList discount codes applied to a specific quote
GET/api/discount-code-quotes/{id}Get a specific discount code quote by ID

Routes (Vehicle Assignments)

MethodEndpointQuery ParamsDescription
GET/api/routescompanyID, parentCompanyID, startDate, endDate, includeCancelled, sourceTypeList routes within a date range (default: last 24 hours)
GET/api/routes/{id}Get a specific route by ID

Route Segments

MethodEndpointQuery ParamsDescription
GET/api/route-segmentsrouteID (required), companyID, parentCompanyIDList segments for a specific route
GET/api/route-segments/{id}Get a specific route segment by ID

Addon Assignments

MethodEndpointQuery ParamsDescription
GET/api/addon-assignmentsrouteID (required), companyID, parentCompanyIDList addon assignments for a specific route
GET/api/addon-assignments/{id}Get a specific addon assignment by ID

Discount Code Routes

MethodEndpointQuery ParamsDescription
GET/api/discount-code-routesrouteID (required), companyID, parentCompanyIDList discount codes applied to a specific route
GET/api/discount-code-routes/{id}Get a specific discount code route by ID

Dispatch

MethodEndpointQuery ParamsDescription
GET/api/dispatchcompanyID, parentCompanyID, startDate, endDateList dispatch records within a date range (default: last 24 hours)
GET/api/dispatch/{id}Get a specific dispatch record by ID

InfoKey fields: id, driverStartTime, routeID, driverID, driverName, vehicleTypeName, vehicleInventoryName, driverStatusName, affiliateID, useAffiliate, affiliateRate, customerNotes, driverInstructions, invoiceNotes, price, suggestedPrice, priceAtBooking, salesTax, driverCheckIn, driverCheckOut, driverAcceptedAt, publishedAt, cancelledAt, hideFromCustomer, hideFromInvoice, isReliefAssignment, createdAt, updatedAt

Drivers

MethodEndpointQuery ParamsDescription
GET/api/driverscompanyID, parentCompanyIDList drivers
GET/api/drivers/{id}Get a specific driver by ID
POST/api/drivers/verifyVerify driver credentials (see Request Body section)

InfoKey fields: id, fullName, firstName, lastName, email, mobilePhone, homePhone, employmentStatusID, employmentStatus, driverReferenceID, dob, dateEmploymentStart, dateEmploymentEnd, licenseNumber, dateLicenseExpired, available, suspended, primaryLocation, companyID, companyName, createdAt, updatedAt

Driver Absence Events

MethodEndpointQuery ParamsDescription
GET/api/driver-absence-eventscompanyID, parentCompanyIDList driver absence/time-off events
GET/api/driver-absence-events/{id}Get a specific absence event by ID

Driver Availability Events

MethodEndpointQuery ParamsDescription
GET/api/driver-availability-eventscompanyID, parentCompanyID, startDate, endDateList driver availability events within a date range
GET/api/driver-availability-events/{id}Get a specific availability event by ID

Driver Actuals

MethodEndpointQuery ParamsDescription
GET/api/driver-actualscompanyID, parentCompanyID, startDate, endDateList actual driver time/odometer records within a date range
GET/api/driver-actuals/{id}Get a specific driver actual by ID

Incidents

MethodEndpointQuery ParamsDescription
GET/api/incidentscompanyID, parentCompanyIDList vehicle/driver incidents
GET/api/incidents/{id}Get a specific incident by ID

Other Assignments

MethodEndpointQuery ParamsDescription
GET/api/other-assignmentscompanyID, parentCompanyID, startDate, endDateList non-dispatch driver assignments within a date range
GET/api/other-assignments/{id}Get a specific non-dispatch assignment by ID

Invoices

MethodEndpointQuery ParamsDescription
GET/api/invoicescompanyID, parentCompanyID, includeVoidedList invoices. Voided invoices excluded by default.
GET/api/invoices/{id}Get a specific invoice by ID

InfoKey fields: id, invoiceNumber, contactID, contactName, organizationID, organizationName, bookingID, bookingFormattedID, scheduledServiceID, scheduledServiceDescription, paymentTerm, invoiceDeliveryMethod, invoiceFormatType, invoiceDueDate, date, description, totalBeforeTax, totalTax, totalAfterTax, totalDiscount, amountPaid, amountOutstanding, paidInFull, voidedAt, createdAt, updatedAt

Companies

MethodEndpointQuery ParamsDescription
GET/api/companiescompanyID, parentCompanyIDList companies
GET/api/companies/{id}Get a specific company by ID

InfoKey fields: id, companyName, displayName, companyShorthandCode, companyPhone, website, addressStreet1, addressStreet2, addressCity, addressState, addressZip, parentCompanyID, parentCompanyName, enterpriseID, enterpriseName

Organizations

MethodEndpointQuery ParamsDescription
GET/api/organizationscompanyID, parentCompanyIDList organizations
GET/api/organizations/{id}Get a specific organization by ID

Contacts

MethodEndpointQuery ParamsDescription
GET/api/contactscompanyID, parentCompanyIDList contacts
GET/api/contacts/{id}Get a specific contact by ID

Yards

MethodEndpointQuery ParamsDescription
GET/api/yardscompanyID, parentCompanyIDList yards/vehicle depots
GET/api/yards/{id}Get a specific yard by ID

Schools

MethodEndpointQuery ParamsDescription
GET/api/schoolscompanyID, parentCompanyIDList schools
GET/api/schools/{id}Get a specific school by ID

School Contracts

MethodEndpointQuery ParamsDescription
GET/api/school-contractscompanyID, parentCompanyIDList school transportation contracts
GET/api/school-contracts/{id}Get a specific school contract by ID

School Routes

MethodEndpointQuery ParamsDescription
GET/api/school-routescompanyID, parentCompanyIDList school routes
GET/api/school-routes/{id}Get a specific school route by ID

InfoKey fields: id, routeName, busNumber, schoolContractID, schoolContractName, driverID, driverName, startYardID, startYardName, returnYardID, returnYardName, schoolRouteTypeID, schoolRouteType, vehicleTypeName, vehicleDisplayID, driverStartTime, departYardTime, returnYardTime, driverEndTime, sunday through saturday (booleans), additionalRouteDetails, createdAt, updatedAt

School Segments

MethodEndpointQuery ParamsDescription
GET/api/school-segmentsschoolRouteID (required), companyID, parentCompanyIDList segments for a specific school route
GET/api/school-segments/{id}Get a specific school segment by ID

Tour Contracts

MethodEndpointQuery ParamsDescription
GET/api/tour-contractscompanyID, parentCompanyIDList tour/charter contracts
GET/api/tour-contracts/{id}Get a specific tour contract by ID

Tour Routes

MethodEndpointQuery ParamsDescription
GET/api/tour-routescompanyID, parentCompanyIDList tour routes
GET/api/tour-routes/{id}Get a specific tour route by ID

Tour Segments

MethodEndpointQuery ParamsDescription
GET/api/tour-segmentstourRouteID (required), companyID, parentCompanyIDList segments for a specific tour route
GET/api/tour-segments/{id}Get a specific tour segment by ID

Tour Vehicle Requests

MethodEndpointQuery ParamsDescription
GET/api/tour-vehicle-requeststourRouteID (required), companyID, parentCompanyIDList vehicle requests for a specific tour route
GET/api/tour-vehicle-requests/{id}Get a specific tour vehicle request by ID

Scheduled Services

MethodEndpointQuery ParamsDescription
GET/api/scheduled-servicescompanyID, parentCompanyIDList recurring/scheduled services
GET/api/scheduled-services/{id}Get a specific scheduled service by ID

Scheduled Service Routes

MethodEndpointQuery ParamsDescription
GET/api/ss-routescompanyID, parentCompanyIDList scheduled service routes
GET/api/ss-routes/{id}Get a specific scheduled service route by ID

Scheduled Service Segments

MethodEndpointQuery ParamsDescription
GET/api/ss-segmentsSSRouteID (required), companyID, parentCompanyIDList segments for a specific scheduled service route
GET/api/ss-segments/{id}Get a specific scheduled service segment by ID

Scheduled Service Vehicle Requests

MethodEndpointQuery ParamsDescription
GET/api/ss-vehicle-requestsssRouteID (required), companyID, parentCompanyIDList vehicle requests for a scheduled service route
GET/api/ss-vehicle-requests/{id}Get a specific scheduled service vehicle request by ID

Scheduled Service Addon Requests

MethodEndpointQuery ParamsDescription
GET/api/ss-addon-requestsssRouteID (required), companyID, parentCompanyIDList addon requests for a scheduled service route
GET/api/ss-addon-requests/{id}Get a specific scheduled service addon request by ID

Best Practices

Use Scope Narrowing for Performance

If you have an enterprise or parent company key but only need data for one company, always pass ?companyID=. List endpoints at higher scopes cost more units (base weight multiplied by your active company count).

Respect Date Range Defaults

Endpoints with date filtering default to a 24-hour window from the current time. If you need historical data, always specify both startDate and endDate. Keep ranges to 31 days or less per request.

Monitor Usage Proactively

Read the X-TBN-Period-Remaining header on responses to detect when you're approaching limits. Use /api/usage/current for a detailed breakdown without consuming units.

Handle 429s Gracefully

Always check the Retry-After header on 429 responses. Implement exponential backoff for rate limits. For allocation or hard limit errors, pause all requests until the next billing period or contact TBN for a plan upgrade.

Cache Reference Data

Reference data endpoints (/api/regions, /api/customer-types, /api/employment-statuses, etc.) return global lookup tables that change infrequently. Cache these responses on your side to reduce unnecessary API calls.

Use Detail Endpoints When You Know the ID

Detail endpoints (/api/bookings/{id}) always cost the base unit weight, regardless of your key's scope level. If you already have the record ID, prefer the detail endpoint over filtering a list.

Troubleshooting

SymptomLikely CauseFix
401 UNAUTHORIZED on every requestMalformed Authorization headerEnsure format is exactly Authorization: Bearer <key> with no extra whitespace
403 FORBIDDEN when using ?companyID=Company is not in your hierarchyVerify the company ID belongs to your parent company or enterprise
400 VALIDATION_ERROR on date paramsInvalid ISO 8601 format or range > 31 daysUse format YYYY-MM-DDTHH:mm:ssZ and keep range within 31 days
429 RATE_LIMIT_MINUTE frequentlyToo many requests in short burstsImplement request throttling; spread calls over time
429 ALLOCATION_EXCEEDEDMonthly plan budget exhaustedCheck /api/usage/current; contact TBN about a plan upgrade or enable auto-upgrade
404 NOT_FOUND on a detail endpointRecord doesn't exist at your scope levelThe record may belong to a different company, or the ID may be incorrect
Empty data: [] on list endpointsNo records match your scope and filtersBroaden your date range or check your scope parameters
Missing fields in responseFields with null database valuesNull fields are included in responses with null values — check your parsing logic

Support

Alert

For API key requests, plan changes, or technical support, email TBN- support@tbndrives.com

For endpoint-level field documentation, use the interactive Swagger UI at /docs on your API host.




    • Related Articles

    • Reports and Procedures to help close a month in TBN

      Reconciling an Accounting Period This guide provides an example of how a company might reconcile an accounting period in TBN. Since each company has its own accounting practices, this is not intended as a definitive process for everyone. Instead, it ...
    • Rethinking Closing Ratio Reporting

      Rethinking Closing Ratio Reports in the Motorcoach Industry with TBN In the ever-evolving motorcoach industry, traditional metrics like closing ratio reports are increasingly becoming less effective in providing a complete picture of sales ...
    • AR Reconciliation Report

      This process applies only to companies that invoice all payments. The prerequisite for using this process is that all payments for trips that have returned by the end of the period must be invoiced before closing the period. AR Reconciliation Report ...
    • Data Migration From Legacy Systems-

      Data Migration Process and Information TBN has pioneered a method of migrating data from RBS and Coach Manager into OpsDriver to reduce the amount of manual data entry required. We call this migration service our Concierge Data Migration service. ...
    • Understanding financial flow in TBN

      Understanding How Money Flows in TBN A Practical Guide for Motorcoach Operators TBN was designed to reflect how motorcoach companies actually conduct business. Because operators serve different types of customers, there are two standard financial ...