Owners manual

Owners manual

This manual gives information useful to booking system owners, office staff and instructors. If you are a system user looking to make a booking, please refer instead to the User guide.

Information in the booking system flows from one stage to the next, reducing duplication and saving time when entering details. Where possible, the system pre-fills forms, based on what it already knows about the aircraft, your booking and so on. The block diagram below shows the key parts of the system and how information moves from one part to another.

Block diagram

For the booking system to operate, it needs to know about:


How to set up your booking system (two videos)


When you first log in, you will see a prompt to get started by adding an aircraft.

Landing page (first log in)

Mathew Waters Mon, 18/07/2016 - 09:05



The system maintains a list of all your aircraft. These can be made available to book in the booking system, and can also be displayed as a web page to give people information about an aircraft they may be considering flying. The list of aircraft is displayed by clicking the Aircraft tab shown in the primary links area:

Aircraft tab

To add a new aircraft, see Adding a new aircraft.

To view more information about a particular aircraft, click the registration in the list. This shows a summary tab for the aircraft:

Aircraft tabs

Changing aircraft details

To change the details of an aircraft, click the Settings tab. The form contains the same fields as described in Adding a new aircraft.


The Bookings tab shows bookings for this aircraft only. It can be useful to see these if bookings need to be switched to a different aircraft, for example if an aircraft is unavailable. The page allows for bookings to be bulk-edited, by selecting all bookings and using the option "With selection...". When a booking is changed, each user affected by the change receives an email with the change and the new booking details.

Aircraft availability

Unlike instructors, aircraft are normally always available. But to allow for those times when an aircraft may be grounded, you can make it unavailable for a period of time. To do this, click + Make unavailable and complete the form. Doing so adds a new entry into the list of periods the aircraft is unavailable to book but does not cancel any existing bookings. You can view the list of periods the aircraft is unavailable by clicking the Availability tab.


The Maintenance tab is visible to users with either the Instructor, Office staff, Engineer or Owner role.

Aircraft Log

The Log tab shows the aircraft log which contains a full list of every flight, service, inspection and added notes. All members can view the aircraft log and can add notes to the log as described in the user guide under Aircraft log.

Mathew Waters Sat, 16/07/2016 - 11:25

Adding a new aircraft

Adding a new aircraft

Note: Only users with the Office staff or Owner roles can add aircraft.

To add a new aircraft, click Aircraft in the primary links area, followed by Add a new one on the page. Fill in the details as required.

To remove an aircraft and make it no longer available, click the aircraft, then click the Availability tab. You can choose to make an aircraft unavailable for bookings for a set period, or unpublished it, which hides the aircraft from other users. Note you can still access the aircraft details via the Admin tab in primary links, followed by Content. This allows you to re-publish an aircraft if you unpublished by mistake, or if the aircraft was unavailable for an extended period (e.g. repair).


When adding a new aircraft, the following fields should be set:

  • Registration. To enable users to identify the aircraft.
  • Aircraft Type. Member's logbooks and training notes both contain a summary of hours on type. Set the aircraft type here, for example, EV-97 or PA-28.
  • Maximum POB. The system will apply validation when flights are booked out, one of the checks being the number of people on board.
  • Fitted with Hour Meter. If the aircraft has an hour meter, the counter values are collected for each flight. Otherwise, the total engine time is calculated using the total flight time.


To set the total hours (engine and airframe), navigate to the Log tab and click Engine update or Airframe update.

How do I record flights in members own aircraft?

One option would be to create a new aircraft each time, making it unavailable after the flight. But you might also consider just adding one aircraft with the registration "Other". Record the actual aircraft registration under the notes for the flight.

Mathew Waters Mon, 18/07/2016 - 10:38



Aircraft you add to the system are made available for bookings, but you can make them unavailable either for an extended period, or temporarily. To make an aircraft unavailable, find the aircraft in the list on the Aircraft tab, or via Admin > Content. Click the registration followed by the Availability tab:

Availability tab
If periods have been set up already, these are listed in the table. You can make changes by clicking the time period shown in the first column.

To make the aircraft unavailable, click Make unavailable.

Make an aircraft unavailable

Overall availability

For periods when an aircraft is unavailable and known in advance, you can add the period based on the date range, together with notes that are shown to users trying to book that aircraft. Adding a period of unavailability like this is suitable for maintenance or times when repairs are necessary. The aircraft is still visible in the booking system, so users can view the notes and can see when the aircraft is expected to become available.

Sometimes you might want to hide an aircraft completely from users of the booking system. Rather than setting up a date range and adding some explanatory notes, you simply un-publish the aircraft. Typically this would be because the aircraft has been sold and will never become available.

Note: If you make an aircraft hidden it is removed from the Aircraft tab. If you need to find this aircraft again, you can find it under Admin > Content. From there, if you want to make it available again, use the Availability tab.

Make unavailable from... until

These fields are used when you want to make the aircraft unavailable for a fixed period.


Any notes you enter here are displayed to users making bookings at the bottom of the list of time periods:

Notes shown on booking form

Mathew Waters Mon, 22/07/2019 - 12:14



The system can keep track of scheduled and unscheduled maintenance. Use of these features is optional; you can choose to keep paper or other electronic records instead and the other processes in Flight School Booking will work without maintenance or service records.

If you choose to use the system to track maintenance, you can configure various items on a schedule for each aircraft.

Example maintenance schedule for an aircraft

You can view the maintenance schedule by clicking the Maintenance tab for an aircraft.

The schedule lists each maintenance item (for example, "50 hour / 6 month check") and each can be due by either a due date or aircraft hours. The interval for each is programmable, as are rules about how to handle the next due hours if an item is completed earlier or later than due. A simple traffic light based system can be used to highlight items coming near their due date/hours. Reminder emails can be sent to a user in the system when the status changes.



Mathew Waters Mon, 07/09/2020 - 14:15

Recording servicing

Recording servicing

This feature is only available to certain users, typically engineers and the owner can add service records.

When the maintenance feature is used to complete scheduled maintenance, this adds service entries into the log for you.

If you don't use the maintenance feature, or you want to handle maintenance yourself and simply update the log with the date of the service and total hours, you can create the entries yourself.

The process for adding a service record or setting the total hours is similar to adding a note as described in the user guide. First find the aircraft log. The quickest way to find an aircraft is from the Aircraft tab under Primary Links. But if you have some aircraft unpublished and not shown on the Aircraft tab, the best way to locate the aircraft record is to search for it.

How do I search for an aircraft?

Click the Admin tab followed by Content.

Search for aircraft

On the content screen, set the type to "Aircraft" and click Filter.

Note: You can of course type the aircraft registration into the Title field to find an aircraft by its registration. The steps above will list all aircraft in your club or school.


Click on the link to the aircraft shown under the Title column. This displays the aircraft tabs (Summary, Settings, Bookings, Availability, Maintenance and Log).

If you have already defined the maintenance task in the schedule you can view which items are due using the Maintenance tab. This is the best method for scheduled maintenance.

If you want to record a service that was not carried out as part of scheduled maintenance, click the Log tab to view the aircraft log.

Add service buttons

The screen shows the complete list of entries made in the aircraft log and includes flights, notes and services. To add a new airframe or engine service record, click + Engine update or + Airframe update. If these buttons are not shown on the page, you do not have access to this feature.

Airframe update

In the Notes field, add a description of the work carried out, including parts replaced for other members to view. As an example, you may wish to record whether tyres or brakes were replaced.

Check the total Airframe hours and modify if necessary.

Engine udpate

In the Notes field, record the work carried out. For example, you may have changed the oil and the spark plugs.

Record the current meter counts (if fitted) and the total engine hours.


Mathew Waters Thu, 21/04/2016 - 13:18

Correcting aircraft hours

Correcting aircraft hours

When an aircraft is created in the system, you would normally set the current engine and airframe hours. This provides base figures which increase as each flight is logged.

If flights are not recorded in the system (logged elsewhere) you can update the total hours. Just navigate to the aircraft's Log tab and click Engine update and Airframe update. In the notes section, we recommend stating where the difference in hours is recorded. See Recording Servicing for details.

Mathew Waters Wed, 25/09/2019 - 15:35

User management

User management

The booking system maintains a list of users, classed as members, instructors, office staff and so on. This classification is defined by which role or roles a user has.

Note: Only users with the InstructorsOffice staff or Owner roles are able to search for users and add new ones into the system.

Roles are linked to a set of permissions that define what a user can view and change in the system. A user can be assigned more than one role such as Owner and Instructor. Similarly, an user with the Engineer role may also be learning to fly as a Student. For more details about the roles available, see Roles.

It is possible to add a user who will not have access to the system themselves. This is useful for people taking a trial flight, as you can enter their contact details (etc) and make the booking on their behalf. When users become students or members, you can allow them access to the system so they can view their own bookings, logbook and training notes.

Allowing your users to make their own bookings

To give a student or member access to the system, be sure to select the option "Can log in". The user will set their own password using the process described in the user guide under "Getting Started".

Mathew Waters Sun, 03/07/2016 - 10:49

Adding a new user

Adding a new user

To add a new user, click the People tab in the primary links area followed by + Add user.

People tab

Note: Only users with the Instructors, Office staff or Owner roles are able to add new users into the system.

It is recommended to first search the system for the user by typing their name or email address and clicking Filter in case another instructor has already created the user's account. It is not possible to merge user accounts and their associated logbook and training notes later. If the user is listed already, you can edit the user account by clicking the Edit button shown to the right of each user in the search results list.

When adding a new user, you can allow them to log in themselves or prevent them from accessing the system. Typically for "air experience" or trial flights you would prevent the user from accessing the site themselves. In this case you should leave the roles de-selected and just fill in their email address, name and a contact phone number. If the person later becomes a member or you want to allow them to make their own bookings, just search for the user and edit their account.

  • Name. Since instructors may be making bookings for users, it is recommended to use a standard form such as First and last name. This means instructors can search and find the right member quickly if they need to make a booking over the phone.
  • Email address. All the user's bookings and cancellations are sent to this email address. If the user is given access to log in themselves, they can reset their password (if forgotten) using a link sent to their email address.
  • Roles. Choose which role to assign to the user, see Roles.
  • Can the user access the site? It is not necessary to give access to users unless you want them to make bookings themselves. For trial flights, we recommend preventing access and only allowing access if the person chooses to become a student and take more lessons.
  • Contact settings. Being contactable is advantageous because it allows another member to ask for a re-arrangement of bookings and can therefore lead to higher aircraft utilisation. When the option is checked, the user's initials are shown on the booking form and their name is visible to other users (e.g. in their booking and in the aircraft log). When this option is left un-checked he user's details are hidden from other students or members. Note: User information is always visible to users with the Instructor, Office staff or owner role.
  • Contact details (address, phone numbers). The contact details are useful in case of bad weather so you (or another instructor) can contact someone booked on a training flight to cancel at short notice. Usually you can tap the user's phone number displayed on their account page from a mobile phone to phone them straight from the site.
  • Next of kin details. Record the name, address, phone number as needed.
  • Previous experience. This field details any previous experience the person may have. It is really only important for trial flights or first few lessons as it allows an instructor to tailor their lesson accordingly.
  • Membership renewal date. When the user is set as a StudentMember or Associate member, the date should be filled in. Members are notified shortly before their membership expires and if the date is not reset into the future, the user is automatically moved into the equivalent Lapsed role. Lapsed students and lapsed members do not have access to the booking system but can still log in and see their logbook. Users cannot change this field themselves.
  • Date of birth. Member's date of birth. Users cannot change this field themselves.
  • Medical renewal date. Flying schools normally require a copy of the member's medical certificate before allowing them to fly solo in their aircraft. If so, you can record the date in this field. Users cannot change this field themselves.
  • Revalidation next due. When setting up a new user, leave this field blank. This field is provided for users to keep track of the next revalidation due on their licence. The system will then generate an email reminder for them.
  • Other information. This field can be used to store other information such as licence number(s).


Which fields can a member change themselves?

Members can change their email address, password, contact settings, contact details, next of kin, previous experience, revalidation next due and other information. Members cannot change their membership renewal date, date of birth or medical renewal date. These are shown to the member as read-only fields and only an instructor or office staff can update them.

How does a new user set their password?

When a user is given access to the site, you can select the option Notify user of their account. This will send them an email with instructions and a link to set their password. For existing users that are changed in order to grant access, the change of Can the user access the site from No to Yes will generate an email with similar instructions.

Mathew Waters Sun, 03/07/2016 - 10:59

Importing users

Importing users

If you have been using another booking system, or have a list of your students or members on a spreadsheet, you don't need to add each user manually. Instead, look for the Import from CSV button on the People tab. Using this option you can select a CSV file and import all your users in one go.

Import users button

The CSV file should be a particular format, which is explained on the import screen.

The easiest way to get started is to first create a user manually, then export the list of users in CSV format. That will give you a template which you can refer to, or change and add your own users.

Mathew Waters Mon, 13/04/2020 - 14:17



Each user can be added to a group by assigning a role from the following:

  • Voucher
    This role indicates a list of users who have a pre-paid voucher for a flight, usually received as a gift. If you use the system's built in support for vouchers, it will add the role automatically. When a flight or training record is entered for a user with this role, the role is removed. This means you can see your liability in terms of vouchers sold but not yet fulfilled. To do this, use the People tab and filter by the role Voucher.
  • Student
    The intention is for the student role to be used to keep track of the current student list of the school or club.
    Users with the Student role are able to view and make bookings, book out aircraft, enter flight details, view their training notes and maintain their personal logbook. See also Student (Lapsed) and Member.
  • Student (Lapsed)
    make use of the Membership renewal date, which you can set when you create the user's account. This is useful if you charge for student membership and access to the booking system. If they renew membership, the billing system will update the renewal date for you. Otherwise, simply change the renewal date to extend their membership. If the membership lapses, the system moves the user into the Student (Lapsed) role. If you do not want to use this feature, just set a renewal date in the far future.
  • Associate member
    No special permissions exist for users with this role. But you may find this useful if you want to maintain a list of associate members (non-flying members). Any restricted content you make available (such as newsletters) can be hidden from public view but made available to associate members.
  • Member
    The intention is for the member role to represent users who are full members of the club, usually with higher fees than students. They typically have lower training and flying rates (e.g. a member's lease group). If the member is also a student, you can combine the two roles by ticking both boxes.
    Just like the Student role, users with the Member role are able to view and make bookings, book out aircraft, enter flight details, view their training notes and maintain their personal logbook. If the Membership renewal date passes, the Member role is removed and the Member (Lapsed) role is added instead. This means members will be unable to book further lessons until they extend their membership by paying their membership fee or calling the office. If you take payments outside the billing system, edit the user's record, extending the renewal date, usually by one year.
  • Member (Lapsed)
    Members and associate members make use of the Membership renewal date, which you can set when you create the user's account. This is useful if you charge for membership and access to the booking system. If they renew membership, the billing system will update the renewal date for you. Otherwise, simply change the renewal date to extend their membership. If the membership lapses, the system moves the user into the Member (Lapsed) role. If you do not want to use this feature, just set a renewal date in the far future.
  • Engineer
    Engineers are able to add service information to each aircraft. This is done from each aircraft's page - see Entering service information.
  • Instructor
    Instructors have additional permissions in the system and can be booked for training flights by anyone with access to the booking system. It is not necessary to make instructors members as well. Instructors can create, change and remove users, make bookings on behalf of someone else, view the complete list of bookings and complete training notes.
  • Office staff
    Office staff have many more permissions in the system. Be careful to assign this role only to people you trust. Although they cannot book out aircraft (unless also made a member), they can create new users, make bookings on behalf of members and can create new content in the system such as aircraft and newsletters.
  • Safety management
    People with this role can view all safety reports, including confidential and anonymous reports. They can add comments, close reports and export the information in CSV format. The owner has the same permissions, but because some reports can be made concerning staff, Office staff cannot view confidential reports nor close anything. They cannot assign the Safety management role to anyone, the only role that can do this is the Owner. If you have your own safety management staff, you can assign both this and the Office staff role, allowing them to transfer safety reports to aircraft logs and to maintenance schedules.
  • Owner
    As owner, you have full access to the booking system, flights and so on. You can edit any record, even those that have been "locked". Normally only one user is given this role, and just like Office staff, this role should only be assigned to people you trust.


Mathew Waters Fri, 15/07/2016 - 13:32

Searching for a user

Searching for a user

To search for a user in the system, click the People tab in the primary links area.

Search for a user

The form shown above presents a number of ways to search for users. If you are searching for someone in particular and know their name (or part of it) or their email address (or part of it), type this in the Name or email contains field and click Filter. Typically you will use this option to find a user quickly in order to make a booking, change or cancel their existing bookings.

To view the user's account tabs, click the name shown under the Username column. This then presents the user's details. From there you can edit their details, view and change bookings and so on.

You can also use the form to search for users matching a condition, such as all users with the Instructor role.

Mathew Waters Wed, 03/08/2016 - 16:25



Instructors are people with the role Instructor.

To create a new instructor for booking by members, or to change details see User management.


Mathew Waters Fri, 15/07/2016 - 15:57



To view and make changes to availability, click the Availability tab shown in the instructor's tab set. To change your own availability, simply click your name shown top right. To change another instructor's availability, search for their user account using the Members tab.

Availability tab for an instructor account

Each instructor can set their own availability using a flexible system of regular working hours, additional availability and unavailability periods.

  • Normal working week.
    If the instructor works regularly, define the hours of availability. The working week hours match the school's opening times defined in settings. If the instructor does not work a regular pattern, use Additional Availability instead.
  • Additional availability.
    This is used to set additional one-time availability for a particular date. If the instructor does not work regular hours, they can set their availability this way.
  • Unavailability.
    Use this option to make the instructor unavailable for booking. Periods of unavailability override any regular hours or additional availability. This is useful when taking vacation, as it accepts a start and end date to block out time quickly and easily.


Normal working week

Normal working week

To make a change to the regular working week, click the day you want to change. If you want to set availability for all days, week days, or weekends, it does not matter which day you click on. In the screen that follows, choose whether to apply the selected hours to the specific day, weekdays, weekends or every day. Next choose which time slots you want to be available for and click Save.

Additional availability

In the example, Izzy is only normally available on weekdays. But for one Saturday she is available as cover for another instructor. To set this additional availability, click the button + Add availability.

Setting up additional availability


To make an instructor unavailable over a period of time, such as for a vacation, click the button + Make unavailable.

Note: When an instructor is unavailable long-term or indefinitely, edit their user account instead and remove the Instructor role.

Unavailability form (for taking vacation)

Using the form, select the first day the instructor is unavailable. By default the time is midnight on the start of the day, but can be changed if you wish to remain available for the morning for example. Set the end date and time and add notes if you wish. Notes are not shown to members but are visible to other instructors and office staff. The notes can be a useful reminder for why the time was blocked out, e.g. "Dentist appointment" or "Taking car for service".

Mathew Waters Mon, 18/07/2016 - 11:07

Safety reporting

Safety reporting

The system allows people to submit safety reports. To configure this feature, see Admin > Safety reporting.

A safety report collects the following information:

  • Name and email of person submitting the report (or can choose to report anonymously)
  • Date and time
  • Title and full details
  • Location
  • Reason for the report (configurable in Admin)
  • Aircraft and phase of flight
  • Contributing factors (configurable in Admin)
  • Injuries, Damage (configurable in Admin)
  • Frequency of occurrence
  • Suggested action


In addition, when a report is submitted as part of adding flight details, the report is linked to the flight record. This means the departure, destination, POB etc. are recorded without needing to re-input the same information.

Once a report has been submitted, its access is restricted and can only be viewed or changed by certain people.

Group Access
General public Cannot view any reports. Can only submit if you allow them to under Admin > Safety reporting.
Owner View, edit or close any report (incl confidential reports). Add any user to circulation list.
Safety Management Staff View, edit or close any report (incl confidential reports). Add any user to circulation list. Receive notifications when reports are submitted, updated or closed.
Office staff View open and closed reports, except for confidential ones. Can edit own report until first update. Can access settings under Admin > Safety reporting.
Students, Members, etc. View own reports plus open reports (except confidential ones)
Additional users added to circulation View and add comments

Using the settings under Admin > Safety reporting you can choose who can submit safety reports (disabled, staff only, anyone who can log in or everyone).


When a new report is submitted, everyone in the Safety Management Staff role are notified by email. The originator also receives a confirmation email if they are logged in. No emails are sent to the general public because open systems are often abused by spammers submitting other people's email addresses.

Note: Only the Safety Management Staff role is notified when a safety report is updated or closed.

Users are able to unsubscribe from safety notifications, but still remain in the Safety Management Staff group. This may suit people who regularly check the list of reports for any new ones, but do not want to receive a notification when the report is submitted or updated.

Adding comments

Anyone with access to view an open safety report can also add a comment to it if they wish. Comments are visible to anyone with access to view the report itself.

Additional circulation

The circulation can be expanded to other users who cannot otherwise view the report. This can be useful when a report is confidential (visible to the owner and safety manager) because additional named users can be added to the circulation. These additional users are notified when the report is updated or closed just like the Safety Management Staff group, but they do not inherit extra rights to edit the report themselves or to close it. People would typically be added to the circulation list in order for them to comment on the report while it remains confidential.

Closing a report

Only people in the Safety Management Staff or owner roles can close a report.

Once a report is closed, the report is no longer shown in lists, but the original link to the report is still valid, so people can still revisit a report from a link they received by email.

Mathew Waters Mon, 21/09/2020 - 13:01



The integrated billing system is simple to set up, yet is designed to be very flexible and powerful. It can take care of all your invoicing and card payments (with little or no work from you). It chases up customers for non-payment automatically, and gives everyone their own Bills & payments tab, where they can instantly see exactly what they owe or the amount still left to spend in their account.

Why use our billing system instead of monthly invoices?
  • Fully automated invoicing and payments, no more messing about with paper invoices or working out how much to charge.
  • Much improved cashflow. No more waiting for cash your business could be using.
  • Customers love seeing their invoice immediately (perhaps this is unexpected!).
  • Monthly bills can be large amounts; this might make them reconsider making their next booking.
  • Save time by entering summary data into your bookkeeping software instead of every invoice and payment.


This page describes the main Billing tab in the system. Are you looking for information about how to set up the billing system?


The Billing tab shows the balance for each customer with a transaction in their account. The balance is split to show the amount overdue separately from their total balance.

You can use this page to get a quick view on the amounts outstanding. The page shows the highest debt at the top, though zero and on to any pre-paid accounts at the bottom as shown in the example:

Billing tab showing balances for some students


The rows are highlighted as follows:

  • Red: Customers with overdue balances
  • Amber: Customers with a debt amount, and no stored card details
  • Green: Customers with a debt and stored card details


You may also notice the secondary tab labelled All transactions. As the name suggests, this shows a list of all transactions across all customer accounts. This page still shows a balance column, but because it lists all customers the balance represents the total credit balance at the time. Therefore the balance in the top row in this list shows the total amount owed by the  school to its customers (if positive) or the total amount owed by customers to the school (if negative).

To view a customer's account in detail, click their name in the first column. From the customer's account page you can do things like add invoices, credits, make payments (if the customer is sitting with you) or just record their card details for future payments.

Mathew Waters Mon, 30/12/2019 - 11:46

Customer accounts

Customer accounts

This page describes the customer's Bills & payments tab from the point of view of the school (eg owner, office staff or an instructor). If you are a customer, please see Bills & payments in the user guide.

If you have turned on the billing system, all your customers will see their own Bills & payments tab in their account when they log in.

Additional options are available when viewing the customer's Bills & payments tab as office staff. For example, you can manually create an invoice, credit note, or record payments received outside Stripe using an adjustment. To find out more, see Manual entries.

You can also set the customer's price group (which can also be done from their Settings tab). This defines prices they will pay for aircraft hire, training and regular fees such as membership.

Viewing a customer's Bills & payments tab as office staff

When you set a price group for a new customer, any membership fees are prorated to cover the remaining period until the next membership fee is due.

When you are new to the system and your customers have already been invoiced for membership fees, the situation is more complicated. To find out how to migrate customers, see Existing customers.

Mathew Waters Mon, 30/12/2019 - 11:56

Existing customers

Existing customers

If you are moving to Flight School Booking from another system and have customers who have already paid membership fees, setting up their billing account involves a few more steps than for new customers.

We'll assume you have already defined a price group for students and have created a student user in the system. If you have not set up a price group for students yet, see Admin > Billing > Price groups.

All new users are created on the DEFAULT price group, so the student will not have any membership fees so far.

Migrating customers: choose their price group

Click Change price group to choose which price group this customer will be using.

When choosing a price group you can set the date at which the prices are effective. Typically you would leave this set to "Today".

What are the other options for?
  • Today
    Strictly speaking this is also a backdated change, and any invoices for flights taken today are credited and re-invoiced at the new rate.
  • A date in the future
    If the customer can be safely left on your standard prices until the future date you can choose it here. This is suitable for a defined "go live" date that coincides with when membership fees are normally collected, or when you agree with a customer they will become a member on a specific date in the future and start paying fees from then.
  • A date in the past (backdated change)
    Normally not used. If a customer has been on the wrong price group for a number of days, you can back-date the change and the system will credit any flights, training sessions and so on before re-invoicing at the rates defined by the price group you choose.


When a price group includes membership fees, an invoice is created to cover the remainder of the period until the next due date. (Due dates are defined in the price group under Admin > Billing > Price groups).

Invoice created for remainder of period

Because in this case the customer has already paid her membership fee on an old system, and it has already been accounted for, credit the invoice back. The quickest way to do this is by clicking the link to the invoice, followed by the Credit button. Finalise the credit note and the balance will be zero again.

Next, use your old records to find out the customer's balance. Enter this as the opening balance for the customer. To do this, click Manual entry and choose Adjustment from the list.

Set the customer balance

Fill in the balance, even if zero and ensure you set the type of entry to Opening balance.

When the customer views their Bills & payments tab, they will see just the one entry; their opening balance in the Flight School Booking system as shown below.

Student's view of their bills & payments tab with opening balance


Mathew Waters Mon, 14/12/2020 - 12:27

Manual entries

Manual entries

There are a few different types of transaction you might want to add manually to a customer's account. Most are only available to office staff and the school owner, but instructors can add invoices and can edit existing invoices in the draft state.

To add a transaction to a customer's account manually, first find their Bills & payments tab. Then click the Manual entry button.

Manual entry
  • Invoice.
    The system will create invoices itself for flights, training (including ground school) and for regular payments such as membership fees.
    You or an instructor might want to add an invoice manually if a customer wants to purchase something else from you, such as a knee board, pilot's logbook, charts or a headset. If the purchase is just after a flight, note the flight's invoice will be in a draft state for about an hour, and you can simply add a new line to that invoice for any extras.
  • Credit note.
    Credit notes can be issued to give a discount on someone's account. You might want to offer a credit such as this when someone pays a large amount up front for their flight training. For example, you might offer a package for a fixed number of flight hours, and extras such as knee board, chart and so on for a fixed price. If the customer makes this payment (either through the system or direct to you), you could add an additional credit on their account to adjust the amount they paid up to a balance equal to the value of your standard prices for the flight hours and any extras. This would mean you could leave the student on your standard or student price group instead of creating price groups for different packages.
    You might also add credit notes if there is some disagreement over flight training and you are refunding someone. In that situation, create a credit for the amount in dispute (which also records the tax due back to your business) and then either refund from a previous payment (if made in the system) or add an adjustment if you hand over money direct, outside the system.
  • Adjustment.
    An adjustment represents a cash or card transaction that did not go via the billing system. For example, if the customer made a payment to you using cash, your own card machine, or a cheque, they will want to see the payment recorded in their account. To do this, add an adjustment.
    Adjustments are also used if you are refunding the customer from outside the system. For example, if you give the customer cash, cheque or transfer money to their bank account or card. In this case, create a record of that transaction as an adjustment. Take care when filling in the form because unlike invoices and credit notes, adjustments are locked and cannot be edited afterwards.
  • Opening balance.
    An opening balance is a special type of adjustment. When adding an adjustment, you can choose to fix the balance to a known amount. Any adjustment necessary is made to arrive at the balance you specify. In addition, older transactions are archived and do not appear when the customer views their transaction history.
    By adding an opening balance, even if zero, you are confirming to the customer the amount in their account as you move them from an older system to this one. This is important because customers will want to know where they stand and will rely on the list of transactions to tell them how much they owe, how much to budget or when they need to make another payment.


Draft vs Finalised invoices

When you create an invoice or credit manually, you will see they are created as drafts. These do not appear on the customer's account and you can continue to make changes or delete them. Once you "finalise" the transaction, it is moved into the customer's account and they can see it. Once finalised, you can no longer edit it but you can of course reverse any invoice with a credit and likewise any credit with an invoice.

Invoices created by the system are finalised straight away. This means when adding a flight, you can view the invoice immediately and take payment.

Mathew Waters Mon, 14/12/2020 - 11:50

Cash payments

Cash payments

Some customers might want to pay by cash or bank transfer to your account. The system handles this too, but of course it requires some time from you to add the amounts received into their account.

In this example, Sarah Smith is a customer with an invoice to pay.

Outstanding balance shown in customer account

The current balance owed is shown as a negative amount at the top of the list of transactions.

The customer has paid the full amount as cash, so we need to record the amount received in their account. Click Manual entry.

To record transactions other than invoices or credits, add an adjustment

Add an adjustment to record cash. Note that a credit note would also reduce the customer balance, but would record a tax transaction and effectively reverses your sales amount.

Choose the appropriate options on the adjustment form. Check the amount at the end, unlike invoices and credits there is no draft for adjustments, they update the customer's account immediately.

Record a cash amount received

If you have set accounts codes for recording adjustments, you can pick the appropriate code but if you don't use accounts codes you can leave the field blank.

Mathew Waters Mon, 14/12/2020 - 09:39

Courses / Training packages

Courses / Training packages

A lot of flying schools offer students the option to purchase reduced training rates for an up-front payment. For example, as a school you might offer a 5% discount on student training rates when a block of 10 hours is purchased.

From a tax perspective the "purchase" of a package is a pre-payment and is not liable for VAT at that point. Cash flow is improved because you will only be liable to pay VAT once the flight has been invoiced.

The following describes how best to set up the system when a customer buys a package. As an example, the standard hourly training rate for students is £180. When a student purchases a block of 10 hours, instead of the normal charge of £1,800 we charge £1,710 (a 5% discount).

To take payment, do not create an invoice! Instead, the customer makes a payment of £1,710 using the Make payment button in their Bills & payments tab. If you prefer to take payment direct into the bank, add an adjustment to their account once the payment has reached the bank.

Next add the difference as a credit to their account. In this example the student will be invoiced a total of £1,800 once the 10 hours have been flown, so the difference of £90 (1800 - 1710) should be added as a credit. The credit should be made with matching VAT and accounts codes as the training rate set up under Price groups.

If you have a fixed discount (eg 5% when buying a block), you can use the formula below to work out the credit amount to add:

C = d * P / (1 - d)

Where …

  • C is the credit amount
  • d is the percentage expressed as a fraction, eg 5% would be 5/100 or 0.05.
  • P is the amount received from the customer.


Tip: Avoid mistakes by checking the credit amount feels about right. It should be a small fraction of the total payment!

After adding the credit, the student's balance will be higher and they can fly on the standard student prices.

Mathew Waters Sat, 19/12/2020 - 15:34



The process for refunding is two steps.

First, you should issue a credit note that itemises and describes what you are refunding for. The credit also contains the tax amounts, and if you are registered for VAT you can claim back this amount from your tax authority. You can add credits manually, but the most common method is to find the invoice first.

Each invoice can be credited back using the Credit button

To credit some or all of an invoice back to a customer, click the Credit button shown above the invoice. This creates a draft credit for the full amount on the invoice with all the same tax and accounts codes. While the credit is a draft, edit as necessary. For example, you might only want to credit one of the line items, or edit the quantity or amount. Once you have finished making the credit, click Finalise to add it to the customer's account.

Next, you can try to refund back to the customer's card if they have used the billing system to make payments. Look for transactions of the type Receipt. If not, or if the last payment is over 90 days old, you will need to send them the money yourself and add an adjustment to their account manually (see Manual entries).

Assuming there is a recent receipt listed, click on it to view the details.

Refund button is shown above a receipt

Click the Refund button. You can refund all or part of a payment, the system will keep track of when a payment is fully refunded.

Refunds you send direct from your Stripe account (eg the Stripe app or web page) are also reflected in the customer's account.

Mathew Waters Mon, 14/12/2020 - 12:01



Flight School Booking's billing system provides information you can use in your bookkeeping package. Depending on the level of detail you need, you can choose between:

  • A full CSV export
    This includes every transaction (sales, credits, payments etc) down to the line item level.
  • Full API Access
    An API (Application Programming Interface) provides third party developers the ability to automate the process of extracting information from Flight School Booking. Unless you have knowledge of developing software that uses APIs this is unlikely to be your best option.
  • Summary reporting
    If you're used to keeping records of every customer and every transaction in your bookkeeping package this may come as a shock: you don't have to! People tend to think their bookkeeping software needs to keep track of all transactions in case the tax authority asks to see their records in detail. But it's perfectly acceptable to show summary transactions in the books and individual transactions in Flight School Booking. Tax authorities may ask to see your top ten highest invoices over a particular period. These will be available in the booking system. Likewise, if they ask to see a full list of transactions, these are all available for inspection too.


How to use summary reporting

We recommend entering summary transactions instead of every one. These allow you and your accountant to see where the money is coming from without having to transfer every transaction. You can still classify your sales however you like using Accounts codes, which means you can still analyse sales in your bookkeeping package.


Before you start

In your bookkeeping package, create the following accounts (ledgers).

Name Category Comments
FSB Current asset This holding account represents the Flight School Booking billing system in your books. Any balance on this account represents money you are owed by your customers.
Stripe (fees) Current asset This holding account represents fees you will have to pay on received payments which have not yet been invoiced. You will receive a tax invoice from Stripe monthly which reduces the balance of this account, transferring to your expense and tax accounts.
Stripe (receipts) Current asset This holding account represents the payments that will be paid to you by Stripe but not yet received into your bank account. When you receive money from Stripe, you can usually set your bookkeeping package to link automatically with this account.
Stripe Supplier Add a supplier account if your bookkeeping package only allows bills to be created on supplier accounts. Bills from Stripe should be linked to your cost of sales and an appropriate VAT account. When paying the supplier bill, pay from the Stripe (fees) account. Make sure Stripe (fees) is set up to allow payments (e.g. in Xero set Enable payments to this account).

The diagram below shows your standard accounts in light blue and the new accounts you've added in dark blue. These three accounts act as holding accounts for money in transit. This is either from invoices raised and not yet paid by your customers, Stripe fees deducted from payments but not yet invoiced, or payments from Stripe due but not yet paid into you bank account.

Diagram showing flow of money from sales to bank account via Flight School Booking's billing system

Once set up, the bookkeeping process should be very much faster than entering the transactions manually.

  1. Add a manual journal
    Once a month, run the Accounting summary report from the Billing tab for the previous month. The report lists the lines to enter into your books as a manual journal entry. If you enter adjustments for cash sales, these are also listed alongside the accounts code you set up under Admin > Billing > Adjustments.

    The following is an example of the report in action, and you will see later how the manual journal in Xero is created from it.

    Accounting summary report

    It doesn't matter which date you choose to enter the summary transaction under, but be consistent. In this example using Xero, the date for November sales is set to the last day of the month. All debit and credit amounts shown on the report are inclusive of tax, so make sure you set this correctly in your journal entry (see below).

    Example of a manual journal entry in Xero
  2. Account for bank payments from Stripe
    Stripe will pay into your bank account using the schedule you have set with them. Most bookkeeping packages such as Xero and QuickBooks will automatically import from your bank account and link the transactions with your Stripe (receipts) account for you. You can set a rule to create the correct linked account to save time.

    Note: If your bookkeeping software does not allow for importing bank feeds, you might find it useful to set Stripe to pay out on a fixed schedule, e.g. Every month or every week on a Monday. If you do this, you will cut down your bookkeeping entries from one per day to one per week or month. If your bookkeeping package reconciles automatically to the Stripe account, you don't need to worry about payment schedules so you could leave it set to pay out daily.
  3. Account for Stripe fees
    Stripe produce tax invoices for their fees each month. Log in to Stripe and you'll find them under Settings > Documents.

    Tax documents from Stripe

    Once you have downloaded the bill, enter it into your bookkeeping package like you would for any supplier invoice. Make a payment from the Stripe (fees) account. If this is not listed, you may need to enable payments for the account first.

    Example payment to record Stripe fees


For one cycle, if all invoices have been paid by your customers, and payments from Stripe, and their fees have all been entered, you will find the balance of the three holding accounts are zero. These accounts allow you to record all your sales, tax, fees and payments received into the right places in your books without needing to account for every single one.

What about cash or direct to bank payments?

If you receive cash or bank transfers, you will have updated your customer's account under Bills & payments with an adjustment. Using accounts codes you can distinguish how payments were made and you can either create holding accounts for these or post directly into the cash/card accounts.

If you ever need to refer to an individual invoice, or a customer's account, you can do this from Flight School Booking.

Mathew Waters Thu, 24/12/2020 - 10:33

Document storage

Document storage

Document storage is available for you to upload files and associate them with a user account, group of users or an aircraft.

In addition to storage, the system maintains an expiry date for each document, and displays a colour coded list in a customer's Summary tab. This can be useful for checking (for example) you have their latest pilot licence, medical and signed agreements stored. You can configure the system to prevent members from booking out if any key documents are expired.

You can upload files such as PDFs, images and other documents. They attach to people, aircraft or a shared area.

To get started, first turn on the feature in Admin > Document storage.

User documents appear in a Documents tab in their account. This tab displays shared and aircraft documents too, so a customer can be directed to check their Documents tab for all relevant documents they might need.

User documents are available in their account

Users you have allowed to log in can view the documents you have stored in their account page, plus any shared documents you have made available to groups of people.

Shared documents are a special case where you can also pick groups of people. Upload and manage your shared documents from the People > Documents tab. You might want to use this area for documents such as Club rules, Airside rules, and Membership forms for download.

Shared documents are managed via the People tab

You can even upload from your phone, so for example if you need to add a temporary membership form to someone's account, you can tap Upload and choose the camera.

Aircraft documents

For aircraft, you could consider uploading its insurance, permit, certificate of registration, radio licence, checklist and handbook. This makes the documentation available to pilots and students. Should they be asked to produce it, they can simply log in and view the documents on their phone screen.

Aircraft documents work a similar way to user documents, they appear on each aircraft's Documents tab and everyone with access to the aircraft can view them.

Aircraft documents

Security & privacy

Users can view documents linked to their own account or to any aircraft, but nobody else's. Instructors, office staff and the owner can view, edit and delete any document.

When you upload a new document into a user's account, if no expiry date is set, it is stored for an additional 2 years 6 months after activity stops for that user. That means once the user stops making bookings, flying or receiving invoices, the system respects the general principals of GDPR and automatically deletes the associated documents, which may help your own compliance. The period chosen satisfies the CAA requirement to maintain training records for two years, allowing students to transfer schools.

You can also find new Documents tabs under Aircraft and People. These list all documents and of course you can search using the filter.

Mathew Waters Wed, 28/10/2020 - 12:35



The platform provides an integrated newsletter system which allows you to keep in touch with your members. You create a newsletter as a new content item, much like you would a new aircraft or instructor page. Once done, you decide which groups of people you want to send the newsletter to. Once you send the newsletter, it becomes published online to users with permission to view it.

Why send a newsletter?

A monthly newsletter keeps members in touch with what is happening at the club. You may find the number of bookings increases as people are reminded to fly, especially if they have "dropped off the radar" and need a nudge to bring them back! As an example, the newsletter could contain things like:

  • Any changes to club rules.
  • Information about existing and new aircraft.
  • New instructors.
  • Recent GST passes or first solos.
  • Related aviation news.


Note: Only users with the Office staff or Owner roles can create newsletters.

To create a new newsletter or to view previous newsletters (including work in progress), click + Add content on the content page. To find the content page, click the Admin tab, followed by Content.

Add a new newsletter

The "Content" page displays a list of all pages in the booking system. All content, whether aircraft, instructor or newsletter is listed and you can quickly access it from here if you want to make changes. If you want to work on a newsletter you have not yet sent, you will find it listed. To filter the list to show only newsletters, set the Type to "Newsletter" and click Filter. To edit a newsletter, click the Edit button shown to the right of each item in the list.

Alternatively, to create a new newsletter, click the button + Add content and choose Newsletter as the content type. The following fields should be set:

  • Subject. This is the subject line of the email newsletter and the title of the page when the newsletter is viewed online.
  • Body. The body text of your newsletter. You can use the formatting buttons at the top of the edit box to choose text styles, insert images and links. When adding images, make sure the image is already formatted to 600 pixels wide. This size works well in email and also online.
  • Email signature. You can use this field to set your standard signature for newsletters. It could contain your name, position, contact address and phone number(s). This field is stored against your user account, and once you have set it up, it will be pre-filled for all future newsletters. The signature field is only sent in the email version of the newsletter and is not shown to the public or when the newsletter is viewed online.


You can write a newsletter ahead of time, and you don't have to write it from beginning to end: you can save your progress and come back to it later. Saving the newsletter leaves it unpublished, it only becomes published once it is sent to a group of users. To save the newsletter, click Save.

Note: Newsletters are stored for a maximum of 30 days and automatically deleted. To get a reminder sent to you by email before this happens, use the config settings under Admin > Reminders and follow-ups.

The newsletter is displayed on a pink background to indicate it has not been published yet, as shown below.

An unpublished newsletter

If you want to leave the newsletter as work in progress and finish it later, you can find it again from the "Content" screen as described already. Just click Content under the manage section of the toolbar. To make changes to the newsletter, click the Edit tab shown in the screenshot above. To delete a newsletter, click the Delete tab.

How do I send a test email first?

When the newsletter is ready, we recommend sending a test email first to check it looks okay.

To do this, click the button marked + Send newsletter shown above the content tabs. On the next screen, choose Send a test message and fill in your email address.

Send a test email

Click Send to send the newsletter to this single address. The newsletter remains unpublished and is only sent to the address you specify. You can view the email on your device or computer to check it looks good before sending to your members.

How do I send the newsletter?

Choose Publish and send as the publishing option and choose the users you want the newsletters to be sent to. For example, you might want to target the newsletter toward current students.

Once you're ready, click Send and the newsletter is queued for delivery to all users who have one of the roles selected. Delivery starts after a few minutes and continues to run in the background until all emails have been sent. The newsletter is available to view online immediately and a new tab labelled Sent to appears to show who it was sent to.

Where do replies go?

If anyone relies to the email, you will receive them to the email address specified as the site email address (under AdminBasic settings). All emails are sent from the flightschoolbooking.com domain and are digitally signed to improve chance of successful delivery.

Can members unsubscribe?

Yes. Each email contains a unique token which a recipient can click on to unsubscribe instantly. This is equivalent to them logging in, and de-selecting the checkbox in their account page under Receive newsletter. If someone opts to unsubscribe, they may not remember their log in details and may want to simply unsubscribe quickly without retrieving their account details first. The link is designed to allow them to do this with the minimum of effort and should reduce the chance of people flagging your newsletter as spam.

Member's wishes should be respected and once a member has unsubscribed, they should not be re-subscribed without asking their permission. It is best to leave the notification settings to members to manage themselves.


Mathew Waters Mon, 18/07/2016 - 11:32



Each new booking system is installed with defaults set to get up and running quickly. This allows you to test the system out with the minimum amount of time invested. This and other administration pages are available by clicking the Admin tab as shown:

Admin tab

As you can see, the Administration page simply links to the following pages:


We suggest just using the system to make a practice booking to start with. You could then book the flight out, record the flight details and some training notes. Once you're happy the system will work well for you, please take some time to check the settings are correct.

Mathew Waters Fri, 05/08/2016 - 09:34

Plan and payments

Plan and payments

This page is only available to users with the Owner role. It shows the payment plan the booking system is currently on, plus a history of all previous payments for bookkeeping purposes. To reach it, use the Admin tab.

Payment plan

To view each invoice, simply click the link in the Reference column.

When operating in trial mode, you will instead see the option to make your first monthly payment.

Mathew Waters Mon, 29/07/2019 - 16:10

Logo and colour scheme

Logo and colour scheme

Use the Logo and colour scheme option to change the look of your site. You can change the logo displayed in the top left corner as well as the colour scheme. If your club has its own logo or branding style, you may wish to customise your booking system.

To customise the site, click the Admin tab followed by Logo and colour scheme.

Logo and colour scheme

Changing your site logo

You can change the logo by uploading a new one using the Choose file button in the Logo section.

Use the Choose file button to upload your own logo. It is a good idea to prepare the logo first using whatever image editing software you normally use. A PNG format image with transparent background and white foreground works well, with a size of 160 x 160 pixels. For the ultimate image quality, use an SVG format image. This image format does not use pixels, instead it defines an image using vectors which can be scaled up to any size.

Changing the colour scheme

You can choose one of the built-in colour schemes, or you can manually set your own colours using either the HTML colour or the colour picker. You can do this for elements such as header, background, link and text colours.

Once changes have been made, click Save to make the changes permanent.

Mathew Waters Wed, 17/08/2016 - 10:46

Basic settings

Basic settings

Use Basic settings to set the name of your site and your email address. Note you can also change the logo displayed in the top left corner using the Logo and colour scheme option.

To reach this page, click the Admin tab followed by Basic settings.

  • School name. This is displayed next to the logo in the top banner and appears in emails sent from the system.
  • Email address. Emails are sent from the flightschoolbooking.com domain and are digitally signed (DKIM) to improve delivery rates. The address you specify here sets the "reply to" address. Anyone replying to an email from the system will send replies to this address. You may wish to use an unmanned address such as "do-not-reply@..." or you might want to have all replies delivered to an email address in your office. Since these may often be related to bookings we recommend using a real email address to ensure you receive them.
  • Website. This is displayed to your customers on vouchers. There is no need to use the full http or https://, just use your web address that your customers will recognise, for example "acmeflyingclub.com".


The Locale section is used to select your country and the first day of the week. This makes a difference to how numbers and currency amounts are displayed.

Location & time zone

The system takes into account your time zone when presenting flight times. For example, if you are based in UK, choose London so all times are shown in UK local time. You can also choose UTC at the bottom of the list if you refer to all times as Zulu, but note students usually prefer to deal in local time, especially when making bookings.

The location name is transferred to personal logbooks and should be used to identify the aerodrome. You can use either the name or four letter ICAO code.

There are latitude and longitude fields which are used to determine the sunrise and sunset times. These times are shown beneath the booking form and can be useful for students and members when booking weeks in advance. The system can calculate these times for any location on Earth and any date in the future.

Mathew Waters Wed, 17/08/2016 - 10:50

Making bookings

Making bookings

This page is used for settings that apply to bookings. The default settings for most will be adequate, but you will probably want to change the time slots available to bookings.

  • Time slots available for bookings and the length of each time slot.
  • Maximum time an aircraft can be booked without an instructor.
  • Maximum number of days in advance a booking can be made.
  • How many hours constitute a short notice period (for both bookings and cancellations).
  • The number of days grace period before student and member accounts expire and become 'lapsed'.
  • Template emails for booking notifications (confirmation, cancellation, changes, reminders, membership expiry, revalidation and medical reminders).
Mathew Waters Mon, 30/12/2019 - 12:10

Booking out

Booking out

Flights are booked out just before the start of the flight. Pilots record the aircraft, persons on board and the estimated departure and return times. If no flight details are added to book the flight back in, the system generates a notification to the person who booked the flight out. This reminder is sent some time after the estimated return time, configurable in settings.

To allow for cases where there is no network connection at the airfield, pilots can book out early up to a maximum number of hours you specify in Maximum hours early. The estimated time of departure should be changed to the best estimate of when the flight will commence.

To allow for cases where pilots may have forgotten to book out, you can allow them to book out for a time in the past. Pilots can then set the actual departure time up to your setting for Maximum hours late. It is of course not recommended, but the setting allows for mistakes to be made. You may wish to enforce a more strict setting of zero.

Mathew Waters Mon, 30/12/2019 - 12:12

Flight log and aircraft

Flight log and aircraft

The settings for the flight log define the units to use when displaying airframe and engine times in lists, the default taxiing times, home airfield location and out of hours notifications.

Pilots are responsible for ensuring the accuracy of information entered such as the flight start and stop times, engine hours and airframe hours. To aid, the system uses the engine hours together with the settings for Default taxiing time and Default time resolution to fill in the airframe duration for pilots. This only works if there is a good network connection while the pilot is filling in the flight details. Pilots should always check the times they are submitting.

The home location should be set to the name of your airfield (as you would record it in your logbook). This is used to default fields such as the place of departure when booking out.

If you operate any flights outside airfield operational hours, your airfield operator might require a list of these flights for billing or logging purposes. If so, you can fill in the details under Out of hours and the system will notify the email address you choose just after the start of operational hours. You can edit the template email sent to this email address to suit. If you want to check the content of these emails, you could have them delivered to yourself, then forward it to your airfield operations later.

Mathew Waters Mon, 30/12/2019 - 12:15

Safety reporting

Safety reporting

This page is only available to users with the Owner or Safety Management Staff roles. It shows the settings for the safety reporting system, including the option to turn it on or off. To reach it, use the Admin tab.

Admin > Safety reporting

System availability

Normally the system will be made available to anyone who can log in, so they can report on safety related issues. We do not recommend making the system available to the public unless you need to, because despite our anti-spam technology, inevitably some gets through.


First off, anyone reporting without a log in to use the system will be classed as the public. The public are treated slightly differently because the system cannot authenticate their name or email address. Any reports submitted by the public are always treated as confidential initially, meaning they are only visible by staff. They also receive no email confirmation of the submitted report.

Note: The general public cannot see any existing reports, and they can only submit a report if you explicitly allow it.

For people with a log in, you can allow them to choose between submitting their report confidentially or in the open. Confidential reports are only visible to staff, but open reports can be viewed by anyone with a log in on the system. When using this setting, be respectful of the users choice to report confidentially by leaving the report visible only to staff. If you need to add anyone to the circulation list, be aware the originator may not be expecting it to be shared in this way, you may want to check with them first!

You can also remove this choice from the user's form, forcing all reports to be submitted privately to staff only, or made in the open and visible to other users who can log in. When reports are submitted privately, the originator is not choosing to report confidentially and you can use your own judgement as to whether the report should be made visible to other users in the interests of safety.

The default setting it to send reports privately. You may decide to leave the system this way, and triage the reports, making some visible but not others.

Making reports visible to other users may improve safety by keeping people informed. For example, if a pilot checks the recent safety reports for the aircraft they have booked, they may see that someone reported low tyre pressure. This could lead them to double-check the pressure where they might only inspect visually. It could be that the tyre has a slow puncture and although not an issue for short flights, an overnight rental could lead to the pilot returning with the tyre pressure too low. It also helps pilots see patterns developing, for example one aircraft is more regularly being topped up with oil.


There are two built-in recorders for "Injuries" and "Damage". Each recorder stores a level from this list: Unknown, None, Minor, Major and Catastrophic. You can choose the name of the recorder, change the label for each level and add a description for the recorder itself plus all the levels it supports. This allows you to tailor the form and collect more information (such as "damage to reputation") and give the user enough information to be able to choose between the options.


When a report is submitted, the originator chooses a reason for the report from a list. This tab allows you to set up this list, and you can rearrange the order to suit.

There are some built in reasons for reporting which you can edit to suit your own system. Once a report has been submitted that uses a reason, it is no longer possible to change its name, but you can always delete a reason without affecting previous reports. You can add new reasons too, which you may need to do if people frequently choose "Other" and give their own.

Contributing factors

Each report asks the user to identify any contributing factors, such as "weather", "fatigue", "time pressure" and so on. You can edit this list yourself, adding or removing as you like.


The system allows you to set the Reply-To field for emails to a dedicated address you might be using for safety management. If you don't have one, leave this field blank and the system setting is used.

If you like, you can add a BCC address to all emails sent by the safety reporting system. This address is not revealed to end-users, again be mindful if you are allowing people to choose to report confidentially.

The rest of this form allows you to tailor up the emails sent by the system when a report is submitted, updated or closed.

Mathew Waters Mon, 28/09/2020 - 21:01

Training notes

Training notes

This page contains settings specific to the use of training notes. If you are using the system to record student training notes, you can set the operating capacities you want your instructors to use. By default these are PUT, P1 and P1/S.

You can also change the wording on the notification email sent to students when an instructor updates their training record.

Mathew Waters Mon, 30/12/2019 - 12:16

Billing (Stripe payments)

Billing (Stripe payments)

The billing system is simple to set up, but is designed to be very flexible and powerful. There are a lot of separate settings which enable you to set up billing in different ways to suit how you want to run your business.

Card payments are handled by Stripe. Stripe handle the card payments and deposit the money into your school bank account. As part of the billing system setup, you will be guided through setting up your own Stripe account and linking it to Flight School Booking.

About Stripe

Stripe is a platform for online payments, founded in 2010. The company charges a low fee per transaction (1.4% + £0.20 in UK) and pays the balance direct to bank accounts. Stripe is now one of the most highly valued startups in the world at roughly $35 billion (September 2019). The company is now in 40 countries covering 70% of the world economy and process hundreds of billions of dollars each year.

Turning on Billing

Get started by navigating to Admin > Billing.

Admin > Configuration > Billing

Activation date

Choose a date from which you want the system to start generating invoices. This is usually either today's date or a date in the future. If an old flight is edited and saved, it will not generate an invoice if the date is before the Activation date.


This is the currency you want to use for all your invoicing. Be careful to select the correct currency because once the first invoice has been generated, it cannot be changed.


Once you click Connect your Stripe Account, you will be taken to Stripe's website. If you already have a Stripe account, sign in and give Flight School Booking access to request payments on your behalf. Otherwise, activate your own Stripe account by filling in details about your business and the bank details you would like your payments deposited in.

Once everything has been completed, you should be returned to your booking system and should see confirmation on the Stripe tab of which account you are linked with, and whether payments are enabled.

Note: Only the school owner (or other users with the owner role) can connect and disconnect from Stripe. This is a security measure which ensures only you can set up which bank account your payments will be sent to, while allowing office staff access to set up preferences, taxes, your price groups, invoice template and notification emails.

Once Stripe is connected, you should see the additional tabs:

Billing tabs
  • Preferences. General billing preferences such as the number of days credit to offer on invoices, whether to offer to remember customer card details for future billing and tax rates.
  • Price groups. A standard price group is created automatically as a guide for setting your own prices. You can edit these fall-back prices and add your own price groups.
  • Invoice template. This tab allows you to customise the way your invoices look, including your address and logo. You can also set the next invoice number the system should use, which can be useful if you are moving from another system.
  • Notifications. As well as email templates for new invoices, payments received or failed, you can define a custom sender and/or have all billing emails blind-copied to another email address.
Mathew Waters Mon, 30/12/2019 - 12:24



The Payments & tax tab contains preferences and settings that define whether the system is available for certain customers only, or for everyone. It also defines the minimum payment amount you will accept and some suggested top up amounts.

After linking your Stripe account, use this tab to tailor the system to how you want to take payments.

Pay special attention to the following.

Billing system availability

You can enable the billing system for everyone or just for specific users.

When the system is only enabled for specific users, each user's Settings tab will allow billing to be turned on or off. This option should be used if you want to bill some users with this system, and other users on your own system. Turning the billing system off removes the user's Bills & payments tab. It also prevents users from making any payments.

You might decide to roll out billing using this system on a gradual basis, perhaps limiting it to specific users to start with. When you become familiar with the system, you can enable billing for everyone.

Remember card details

Card details are maintained in Stripe, and neither you nor Flight School Booking have any access to view the full card number, expiry date or CVC. Although this might seem like it prevents billing cards automatically, the system can obtain a token from Stripe which represents the customer's card and is only meaningful to your own Stripe account. This is a highly secure method of "storing" card details, since the token is not useful to anyone else should it become known. The token is not visible in the booking system, but it is maintained in the database and linked to your customer.

By default the system is not set to store the token against the customer. This means your customer will need their card number each time they pay money in or pay an invoice.

You can give your customer the option to store their card details (although indirectly), or you can require card details be stored. In both cases, the system will collect due payments automatically on the due date using the stored card. If you choose either of these two options, there is a requirement from Stripe that you explain to your customers the following:

  • The customer’s permission to you initiating a payment or a series of payments on their behalf
  • The anticipated frequency of payments
  • How the payment amount will be determined


We suggest something like the following, although you will need to change it to suit your own business.

"You grant XYZ permission to retain access to your card through Stripe for the purpose of taking payments for future invoices for flying, training and any regular payments you have agreed with us. You will be notified about each invoice and can review them before the due date. Payment will only be attempted on or after the due date of any invoice. Invoices for aircraft hire, flight training and any ground school will be issued on the day of the flight or training. If you have agreed a regular payment amount with XYZ, invoices will be generated according to the schedule listed in your Price Group, shown on your Bills & payments tab."

When customers click or tap the Pay Now button on an invoice, or pay money into their account from their Bills & payments tab, they will see the option to store their card for next time and the text you specify. As an example, you can see the text appears above the mandatory text included by Flight School Booking:

Remember card details

Tax settings

If you are required to charge VAT (also known as GST in some countries), make sure the option to include tax on your invoices is turned on. Check the default tax codes, and remove or add others as necessary. You can choose a tax code that your bookkeeping system will recognise, and a name for the tax rate that your customers will see on their invoices.

All prices for aircraft hire, training and regular payments are defined gross (inclusive of VAT), and a breakdown of the tax content is shown on invoices and available for export in CSV format.

If you are not registered for VAT, turn off the option completely.

Mathew Waters Mon, 30/12/2019 - 12:29

Price groups

Price groups

A price group defines your prices for aircraft hire, flight training, ground school and any regular payments such as membership fees or hangarage.

You can define any number of price groups, so for example you might have standard prices defined for walk-ins who you fly with only once or twice. These prices are defined in the price group with the reference DEFAULT and should be your fall-back (highest) prices. Click the DEFAULT link to set these prices first before you forget!

Other price groups

You might offer student packages, in which case you can define a new price group for them. The reference is for you to use internally, but it's a good idea to keep it short. For a student package you might give it the reference STUDENT and the name "Flight Training (student package)".

As another example, you might offer a membership scheme to qualified pilots. For these customers, you could link them to a price group that defines cheaper amounts for aircraft hire and an annual or monthly membership fee. The system is very powerful yet (hopefully) easy to set up.

To add a new price group, you can either duplicate an existing one or create a new one from scratch. If you want to create a new price group from scratch, click Add price group shown above the Price groups tab. Or if you have another price group already defined that is close to what you want, click the price group in the list first, then click the Duplicate button. Once done, you should fill in the reference and the price group name.

Revising prices

A customer is linked to a price group (or uses the DEFAULT group). This doesn't mean their prices are fixed forever. Once a price group is in use, you can no longer make changes to it, but you can change prices without moving everyone to a new group. Revising the prices of an existing group keeps the same reference (hence the customers) but allows you to set up a new name and set of prices.

To revise prices, first communicate with the customers about the change in pricing and when it is going to take effect from. Then find the price group in your list and click to view it. Click the Revise button and set up the new pricing structure. When you are finished, click the Activate button to activate the prices from the date you choose.

The system will continue to use the current prices until the planned changeover date. From then, aircraft hire, training and ground school will be billed at the new prices. For regular payments the situation is more complicated, since the changeover date might not be the normal billing date for the regular payment. In these cases, the system will bill the previous as normal, then issue a pro-rated credit and a new invoice for the period to the next billing date.

Here is a worked example of a change in standard pricing we've planned and have already informed everyone about. The new prices take effect in about a month's time from 1st February 2020. Aircraft hire is changing from £120 per hour to £130 and circuit fees are increasing from £5 to £5.50 per circuit. Flight training and ground school are not changing.

The default prices are shown in the list of Price groups. Click DEFAULT to view and make changes. The price group may have been used to create invoices, in which case you can no longer edit the prices and will need to Revise prices instead.

Revise prices

Once the new name is set appropriately, click Save to create the new revision. Existing prices are copied across, but the new price group remains inactive until you activate it.

New revision has inactive prices until you activate the group

To edit the prices of aircraft hire, click the link shown in the Prices table. The new prices can be set. In this example, all our aircraft have the same hourly rate. But you can define prices depending on the aircraft type or for specific aircraft. Each uses a fall-back price which is used if the price field is not set, or if you add a new aircraft and forget to revise the prices to add it to the list.

Prices revised

Once all the prices have been defined, click the Activate button and choose which date to make the prices effective from.

Note: Invoices created for training flights or ground school are held in a draft state for a while. This gives the instructor time to go through the invoice with the student, and perhaps make changes such as adding lines for purchased items. The instructor could then finalise the invoice or leave the system to finalise it automatically.


Mathew Waters Mon, 30/12/2019 - 12:29

Invoice template

Invoice template

Customise the invoices created by the billing system, setting your own logo, address, terms and footer.

You can also set the invoice number to be next used. Every financial transaction (invoice, credit, payment, refund, opening balance and adjustment) has its own reference so you can identify it.

Invoices can be viewed by clicking the link in the email, or by the customer logging in and clicking their Bills & payments tab. An example invoice is shown below.

Example invoice (created manually)

When printed, the header, navigation tabs, logo etc are not displayed.

Mathew Waters Mon, 30/12/2019 - 12:30



As well as template emails, this tab also allows you to customise which email is used as the sender (reply-to) and which email should receive all outgoing billing emails.

Billing notification settings

Sender (Reply-to)

If you use a separate email address for your accounts, you can specify it here. When invoices and payment notifications are sent to your customers, the reply-to address will be set to whatever you choose here.

This means if a customer replies to an invoice email - perhaps with a query - it will be routed to this email address. This can be useful if you want to keep the accounting side of your business separate from your inbox.

Blind Carbon Copy

By setting your email address here, it's possible to keep copies of all billing emails sent to customers. If (as before) you use a separate accounts email, you might want to put it here at least initially to keep track of the emails being sent by the billing system.

But don't worry that you'll lose visibility into the invoices and payments: you have a dedicated Billing tab at the top of the system which tracks all customer balances, and when customers have overdue invoices they have not paid. From there it is easy to click into the customer's account to view the situation in more detail.

Notification templates

There are email templates which can be used for the following. You can customise these email templates to suit, and use the placeholders such as [invoice:total] to fill in the details specific to the invoice.

  • Invoice was created. When an invoice is finalised, the system sends a notification email to the customer with a link to view the invoice. It does not matter if the customer is logged in or not, the link provides access to view just the invoice and make payment.
  • Payment was received. When payment is received for a customer's account, a confirmation email is sent to the customer showing the amount received.
  • Payment failed. When a payment using stored card details fails, an email is immediately sent to the customer. They can visit a link to make a manual payment, perhaps using a different card. Often a payment will fail because card details have expired, or when a card issuer requires on-screen authentication.


There is also an unpaid balance follow-up email, which is part of the follow-up and reminders system. This is triggered when an invoice is overdue and is configured to re-send a number of times. You could add a separate follow-up email after these have finished, perhaps with stronger wording.

Mathew Waters Mon, 30/12/2019 - 12:30



The system integrates with Stripe for voucher sales. By creating an account with Stripe, you can collect online payments into your school bank account. Stripe fees are the lowest we could find. At the time of writing, if your business and customer is based in UK, Stripe charge a low fee of £0.20 + 1.4%. We think this compares well with the fees charged for using credit card terminals.

Vouchers contain custom fields for the customer to fill in. This makes them ideal presents for family and friends. As an example, the standard design looks like this:

Example voucher showing custom fields filled in by a customer

How to set up vouchers

To configure vouchers, open your booking system and navigate to Admin > Vouchers.

Your address and phone number appear on the voucher, so for these fields, use the airport address and a phone number you would accept bookings on.

Setting up your own voucher products to sell online

Next, the table shows a list of your voucher products. Each one is defined with a unique code called a SKU which is how you identify which vouchers you want to sell from a "purchase" button on your web site.

Voucher products have their own name, flight duration (minutes), selling price and a short description to use when giving the customer a choice of products to buy.

A default product is created automatically when + Add a voucher product is clicked the first time. This product cannot be sold online and contains no duration or price. Instead, this product is designed to allow you to add a voucher manually. You might need this if someone wants a custom number of hours and you agree your own price.

Once at least one voucher product is available, a new tab appears as a Primary Link labelled Vouchers. To view all vouchers sold or to add a voucher manually, use this tab.

To sell online, use the Link maker, which is shown under the list of products if you have already set up Stripe as part of the Billing system configuration. The link shows what you would use as the target URL (for an anchor tag or button on your web site). To focus the link on one product specifically, just remove the other products from the URL. (Each one is separated by a dash -).

Mathew Waters Mon, 30/12/2019 - 12:18

Reminders and follow-ups

Reminders and follow-ups

The system can be programmed and customised to send reminders and follow-up emails for various jobs:

  • Voucher not used. A voucher was created but has not been used or booked. Typically this reminder would be sent to the purchaser to remind them to pass on the voucher details to the recipient so they could book their flight.
  • Flight details not added. When a flight is booked out, the system expects a flight or an aborted flight to be added. A follow-up email is sent if no flight details have been added after a certain time.
  • Missing training notes. This is sent to instructors with training notes to fill in.
  • Trial flight follow-up. This is sent to users with the "Air Experience" role after their first flight. Most people take a trial flight for pleasure and have not really thought about taking it further to obtain their license.
  • Student flight follow-up. The aim is to keep students engaged and to not leave it too long before making their next booking. Students learn most efficiently when they take regular lessons.
  • Member flight follow-up. Members who fly regularly represent a lower risk to any aircraft hire damage. The follow-up email is designed to remind members to make their next booking to keep everyone current.
  • Next newsletter overdue. If a newsletter is sent, a reminder can be set up to email the author a certain time after. The intention is to keep a regular newsletter being sent to users.
  • Newsletter created but not sent. If a newsletter is created but not sent, this reminder draws attention to it.
  • Membership renewal. Shortly before the user's renewal date they can receive a reminder to contact the office to pay their membership fees. In response, the office should then edit the user's record and set a revised renewal date.
  • Medical renewal. Shortly before a user's medical renewal date, they can receive a reminder.
  • Revalidation. Shortly before a user's revalidation date, they can receive a reminder. This should be set far enough in advance that the user can book any training they need to complete in advance of the revalidation.
  • Overdue balance reminder. A customer has an overdue amount. This is an amount that has been invoiced, and the due date has passed without a payment.
  • Document expiry (user, aircraft or shared). A document's expiry date is approaching. Reminders for user documents are sent to the user, and aircraft and shared document reminders are sent to the office staff.
Mathew Waters Mon, 30/12/2019 - 12:19

Document storage

Document storage

This page is only available to users with the Owner or Office staff roles. It shows the settings for document storage, including the option to turn it on or off. To reach it, use the Admin tab.

Admin > Document storage

All documents have a "type" and a "class". The classes are already defined and are displayed in Admin as separate tabs as shown above.

  • User documents
  • Aircraft documents
  • Shared documents


You can define your own types within a class. So for example under user types you might have "Proof of ID", "Medical certificate", "Pilot licence" and so on. This means when uploading a document to a user's account, you pick the type of document in order to organise the documents.

In addition to organising, the type defines when the document is flagged as nearing expiry.

Edit document type

You can tell the system how many days before a document's expiry you want the highlight colour to change (amber and red).

As the date approaches, the colour changes from green to amber and then to red. Members can book out as P1 if their required documents for the aircraft type are valid, meaning not red. If you hire for overnight stays, you might want to set the point at which the status turns red a few days before expiry. This can help you when making sure a pilot is still legal to fly for the whole period of their trip away. If you do not hire overnight, you might want to set the red status to start on expiry (set to zero days before).

The system will continue to store the document after expiry for a period you specify, up to two years. By default the system will store the documents for 3 months after expiry, by which time any replacement document should have been uploaded (eg new scan of the pilot's licence, medical and so on).

After setting up the document types, you may want to schedule email reminders based on some of the types. To do this, see Reminders.

Mathew Waters Thu, 03/12/2020 - 16:28



After you have created document types, such as Licence, Medical, Agreement and so on, you might want to schedule a reminder to your customers so they can plan to get their rating revalidated, medical renewed etc.

You can choose when reminders are sent, the subject and wording.

To do this, use Admin > Reminders and follow-ups.

Add a reminder based on one of the document classes, for example "User document".

When filling in the reminder form, choose the document type from the dropdown list at the top. You may then like to customise the name of the reminder to help you identify it later, for example "Medical renewal". Then pick the number of days before expiry and tailor the subject and email text to suit.

Document reminder and follow-up

You can set the first reminder early, say 60 days. Then set up a few follow-up messages, perhaps once every two weeks until near expiry. You can also create a separate follow-up with different wording to send after expiry. This could be used to let the customer know they can no longer book out your aircraft as P1, and must submit your required documents to the office.

Mathew Waters Thu, 03/12/2020 - 17:04



The Content page displays a list of all aircraft and newsletters added to the system. Newsletters are not stored long-term, but Aircraft are only deleted manually and only then if there are no flights associated.

Content page

If you cannot find the aircraft or newsletter in the list, you can narrow down the search using the Title field.

In the example above, you can see a newsletter that has been started but has not been sent (Status is "Unpublished"). This page is a simple way of finding a newsletter you started work on but did not finish.

Likewise, when an aircraft is made permanently unavailable, it will disappear from the list on the Aircraft tab, but you will still find it listed under Content. You could use this to view the log of an old aircraft that is no longer available for future bookings, or to re-activate an old aircraft in the system via its Availability tab.

Mathew Waters Mon, 29/07/2019 - 16:11

API Access

API Access

There is an API for read-only access to bookings and aircraft booked out.

You might find API access useful if you need to extend the system for yourself. For example:

  • Automatically send an email to staff near the end of the day if there are any out of hours flights booked. This could be used to make sure the aircraft keys are left out instead of being locked up.
  • Show today's bookings on a screen in the office. You should consider whether to expose member's names to other people (the system hides other member names unless they have opted in to being contacted).
  • Extract billing transactions and transfer them to your bookkeeping package, e.g. Xero, Quickbooks, MYOB.



The API uses simple authentication. The tokens are managed in Admin > API Access, which means they can be set up independently of your users. Therefore they do not depend on staff leaving the business. The token is a long string which looks something like "fb1f233e08aeef0a213dc87cea70cedbd7dbcd0a2229cac4f64e14e3c462cc8e". For each token you can grant access to different parts of the system, for example you could grant access for an application to read which aircraft are booked out, but not grant access to your billing system.

When making a request, include an authorisation header containing your token, for example:

curl -H "Accept: application/json" -H "Authorization: Bearer fb1f233e08aeef0a213dc87cea70cedbd7dbcd0a2229cac4f64e14e3c462cc8e" https://acme.flightschoolbooking.com/club/bookings


Parameters can be sent in the query string, e.g.


Response format

Responses are returned in JSON.

When a URL is included in an object's output, you can use this URL  as an endpoint to re-read the same object. This means you can follow the progress of a specific booking or booked out record if you need to.

Mathew Waters Sat, 03/10/2020 - 15:19



This API is used to read the list of users. For information about how to get started using the APIs available, see API Access.


  • page (integer)
    Zero-based page number. The query returns up to 50 rows per page. Based on has_more you might increment the page and request the next set of results.
  • role (string)
    One of the built-in roles (air_experience, student, lapsed_student, associate_member, member, lapsed_member, engineer, safety_staff, instructor, office, owner).
  • name (string)
  • email (string)
    Set the name or email parameter to search for a specific user (exact match)



  • total (integer)
    Total number of records available (not affected by the page parameter).
  • has_more (boolean)
    True if there are more records available by incrementing the page parameter. When false you have read the whole list.
  • change_id (string)
    A string value which indicates whether any records have changed. If you have read all data previously and the next read returns the same change_id, nothing has changed. However, if the value changes you might discard your current result set and read again from the first page.
  • rows  (array)
    Each row contains information about a user.


Each row contains the following fields.

  • id (integer)
  • url (string)
  • name (string)
  • email (string)
  • can_log_in (bool)
  • price_group (string)
  • roles (array)
  • created (integer)
    Timestamp for the time the user account was created.
  • accessed (integer)
    If the user has logged in, this is the last time they were active.
  • date_of_birth (Y-m-d)
  • membership_renewal_date (Y-m-d)
  • medical_renewal_date (Y-m-d)
  • revalidation_next_due (Y-m-d)
  • home_phone_number (string)
  • work_phone_number (string)
  • mobile_phone_number (string)
  • address (string)
  • next_of_kin_details (string)
  • previous_experience (string)
  • comments (string)
  • internal_notes (string)


Not all fields are present for every user.


curl -H "Accept: application/json" -H "Authorization: Bearer fb1f233e08aeef0a213dc87cea70cedbd7dbcd0a2229cac4f64e14e3c462cc8e" "https://acme.flightschoolbooking.com/club/user"

(Use your own site's URL, replacing acme with the name of your subdomain and use your own token)

Mathew Waters Mon, 16/11/2020 - 10:27



This API is used to read the future bookings. For information about how to get started using the APIs available, see API Access.


  • page (integer)
    Zero-based page number. The query returns up to 50 rows per page. Based on has_more you might increment the page and request the next set of results.
  • include_cancellations (0 or 1)
    Normally only active bookings are returned. Use this parameter to extend the results to include cancellations.
  • include_unavailability (0 or 1)
    Extend the results to include periods of unavailability (member field is returned blank)



  • total (integer)
    Total number of records available (not affected by the page parameter).
  • has_more (boolean)
    True if there are more records available by incrementing the page parameter. When false you have read the whole list. Before reading the whole list, consider whether this is necessary or do you only need to read to the end of the current day?
  • change_id (string)
    A string value which indicates whether any bookings have been added or updated. If you have read all data previously and the next read returns the same change_id, nothing has changed. However, if the value changes you might discard your current result set and read again from the first page.
  • rows  (array)
    Each row contains information about a booking.


Each row contains the following fields

  • id (integer)
  • url (string)
  • start_time (integer)
  • stop_time (integer)
  • booked_at (integer)
  • originator_id (integer)
  • originator_name (string)
  • customer_id (integer)
  • customer_name (string)
  • aircraft_id (integer)
  • aircraft (string)
  • instructor_id (integer)
  • instructor_name (string)
  • notes (string)


If the booking was cancelled, the following additional fields are present:

  • cancelled (boolean)
  • cancelled_at (integer)
  • cancelled_by (string)
  • cancelled_notes (string)


The customer, aircraft and instructor fields are optional. If a booking is a period of unavailability (for aircraft or instructor) there will be no customer fields. Similarly, if the booking does not include an aircraft there will be no aircraft fields.


Start reading at page zero. There could be a change in bookings in between you asking for page 0 and page 1, so check the change_id is the same and re-start from page=0 if it changes.

Then keep asking for more pages until you reach a date that you don’t need (records are ordered in ascending date order) or has_more returns false.


curl -H "Accept: application/json" -H "Authorization: Bearer fb1f233e08aeef0a213dc87cea70cedbd7dbcd0a2229cac4f64e14e3c462cc8e" "https://acme.flightschoolbooking.com/club/bookings?page=0&include_cancellations=1&include_unavailability=1"

(Use your own site's URL, replacing acme with the name of your subdomain and use your own token)

The output looks like this:

  "total": "378",
  "has_more": true,
  "change_id": "15a981ba73513efc",
  "rows": [
      "url": "https://acme.flightschoolbooking.com/user/21682/bookings/booking/5",
      "startTime": "1590998400",
      "stopTime": "1591005600",
      "bookedAt": "1590951551",
      "member": "John Smith",
      "aircraft": "G-AABC",
      "instructor": "",
      "notes": ""
    . . . 

Mathew Waters Mon, 05/10/2020 - 10:10

Booked out

Booked out

This API is used to read the list of aircraft booked out. For information about how to get started using the APIs available, see API Access.


  • page (integer)
    Zero-based page number. The query returns up to 50 rows per page. Based on has_more you might increment the page and request the next set of results.



  • total (integer)
    Total number of records available (not affected by the page parameter).
  • has_more (boolean)
    True if there are more records available by incrementing the page parameter. When false you have read the whole list.
  • change_id (string)
    A string value which indicates whether any records have changed. If you have read all data previously and the next read returns the same change_id, nothing has changed. However, if the value changes you might discard your current result set and read again from the first page.
  • rows  (array)
    Each row contains information about a booked out aircraft.


Each row contains the following fields.

  • id (integer)
  • url (string)
  • created_at (integer)
  • out_time (integer)
  • eta_time (integer)
  • booking (object)
    If the booking out record is linked to a booking, see Bookings.
  • originator_id (integer)
  • originator_name (string)
  • aircraft_id (integer)
  • aircraft (string)
  • pilot_id (integer)
  • pilot_name (string)
  • pilot_role (string)
    The role of the pilot at the time of the flight. One of instructor, member, student.
  • student_id (integer)
  • student_name (string)
  • student_role (string)
    The role of the student at the time of the flight. One of air_experience, instructor, member, student.
  • passengers (string)
  • departed (string)
  • destination (string)
  • pob (integer)
  • fuel_added (decimal)
  • p1_in (integer)
    Present if the flight was booked in (either flight or aborted flight)
  • notes (string)



Because schools typically have less than ten aircraft you will not normally need to read more than the first page!


curl -H "Accept: application/json" -H "Authorization: Bearer fb1f233e08aeef0a213dc87cea70cedbd7dbcd0a2229cac4f64e14e3c462cc8e" "https://acme.flightschoolbooking.com/club/booked-out"

(Use your own site's URL, replacing acme with the name of your subdomain and use your own token)

The output looks like this:

{"total":"1","has_more":false,"change_id":"de2b52af6a442955","rows":[{"url":"https:\/\/acme.flightschoolbooking.com\/club\/bookings\/booking\/137\/movement\/32","outTime":"1602007500","etaTime":"1602011100","aircraft":"G-LOLZ","pilot":"Sarah Smith","student":"","departed":"Kemble","destination":"Local","pob":1,"notes":""}]}

Mathew Waters Wed, 07/10/2020 - 13:40

Training records

Training records

This API is used to read the list of training notes. For information about how to get started using the APIs available, see API Access.


  • page (integer)
    Zero-based page number. The query returns up to 50 rows per page. Based on has_more you might increment the page and request the next set of results.
  • student_id (integer)
    List training notes from a specific student.
  • instructor_id (integer)
    List training notes from a specific instructor.
  • incomplete_only (0/1)
    Filters the list to show only incomplete training records (where the instructor still needs to add their notes).



  • total (integer)
    Total number of records available (not affected by the page parameter).
  • has_more (boolean)
    True if there are more records available by incrementing the page parameter. When false you have read the whole list.
  • change_id (string)
    A string value which indicates whether any records have changed. If you have read all data previously and the next read returns the same change_id, nothing has changed. However, if the value changes you might discard your current result set and read again from the first page.
  • rows  (array)
    Each row contains information about a training record.


Each row contains the following fields.

  • id (integer)
  • url (string)
  • start_time (integer)
    Training start time recorded as unix epoch.
  • stop_time (integer)
    Training finish time.
  • instructor_id (integer)
  • instructor_name (string)
  • student_id (integer)
  • student_name (string)
  • operating_capacity (string)
  • exercises (string)
  • notes (string)
  • flight (object)
    If the training refers to a flight, the flight information is included.
  • voucher (object)
    If the training was for a ground school voucher, the voucher is included.
  • invoice_reference (string)
  • accounts_code (string)
    If an accounts code is used during billing it is stored against the training record to allow for analysis.



Not all fields are present for every training record. For example, the flight object is not included for ground school.


curl -H "Accept: application/json" -H "Authorization: Bearer fb1f233e08aeef0a213dc87cea70cedbd7dbcd0a2229cac4f64e14e3c462cc8e" "https://acme.flightschoolbooking.com/club/training"

(Use your own site's URL, replacing acme with the name of your subdomain and use your own token)

Mathew Waters Thu, 19/11/2020 - 16:10

Billing transactions

Billing transactions

This API is used to read the list of financial transactions from the billing system. For information about how to get started using the APIs available, see API Access.

Parameters (optional)

  • page (integer)
    Zero-based page number. The query returns up to 50 rows per page. Based on has_more you might increment the page and request the next set of results.
  • customer_id (integer)
    Returns all transactions for a specific customer.
  • reference (string)
    Return a specific transaction (matching the reference as text, eg 00001).
  • instructor_id (integer)
  • aircraft_id (integer)
  • accounts_code (string)
  • tax_code (string)



  • total (integer)
    Total number of records available (not affected by the page parameter).
  • has_more (boolean)
    True if there are more records available by incrementing the page parameter. When false you have read the whole list.
  • change_id (string)
    A string value which indicates whether any records have changed. If you have read all data previously and the next read returns the same change_id, nothing has changed. However, if the value changes you might discard your current result set and read again from the first page.
  • rows  (array)
    Each row contains a billing transaction.


Each row contains the following fields.

  • id (integer)
  • url (string)
  • timestamp (integer)
  • date (string/Y-m-d)
    Timestamp and date are the document date
  • type_id (integer)
    Invoice (0), Credit (1), Payment (2), Refund (3), Opening balance (4), Adjustment (5).
  • type_text (string)
  • drcr (string)
    Debit (dr) or credit (cr) the Accounts Receivables.
  • due_date (string/Y-m-d)
    For invoices only.
  • reference (string)
  • customer_id (integer)
  • customer_name (string)
  • total (decimal)
  • tax_content (decimal)
  • processor_fee (decimal)
  • platform_fee (decimal)
    Processor and platform fee appear only for payments (receipts via Stripe).
  • lines (array)
    Line items, see later.


If the transaction is voided, the following fields exist:

  • deleted (0/1)
  • deleted_at (integer)
  • deleted_by (string)
  • deleted_notes (string)


Line items

Each line in the lines array represents a line item on an invoice / credit etc. Each contains the following fields.

  • line_number (integer)
  • timestamp (integer)
  • description (string)
  • quantity (integer)
  • each (decimal)
  • total (decimal)
  • tax_code (string)
  • tax_content (decimal)
    Tax fields only for invoices and credits.
  • plan_reference (string)
  • plan_version (integer)
    Plan fields are included if the invoice or credit was created by the system.
  • accounts_code (string)
  • item_start (integer)
  • item_stop (integer)
  • url (string)
    A url for the item sold, e.g. the flight, ground school record etc.
  • voucher (string)
  • aircraft (string)
  • instructor (string)


Amounts are in the local currency.


curl -H "Accept: application/json" -H "Authorization: Bearer fb1f233e08aeef0a213dc87cea70cedbd7dbcd0a2229cac4f64e14e3c462cc8e" "https://acme.flightschoolbooking.com/club/billing/all"

(Use your own site's URL, replacing acme with the name of your subdomain and use your own token)

Mathew Waters Thu, 12/11/2020 - 09:10



This API is used to read the list of vouchers. For information about how to get started using the APIs available, see API Access.


  • page (integer)
    Zero-based page number. The query returns up to 50 rows per page. Based on has_more you might increment the page and request the next set of results.

Note you can retrieve a specific voucher by its ID. See later.


  • total (integer)
    Total number of records available (not affected by the page parameter).
  • has_more (boolean)
    True if there are more records available by incrementing the page parameter. When false you have read the whole list.
  • change_id (string)
    A string value which indicates whether any records have changed. If you have read all data previously and the next read returns the same change_id, nothing has changed. However, if the value changes you might discard your current result set and read again from the first page.
  • rows  (array)
    Each row contains information about a voucher.


Each row contains the following fields.

  • id (integer)
  • url (string)
  • code (string)
  • originator_id (integer)
  • originator_name (string)
  • type (integer)
    Flight (0), Ground school (1)
  • recipient_user_id (integer)
  • recipient_user_name (string)
  • recipient_name (string)
  • issued_at (integer)
  • duration_mins (integer)
  • purchase_price (decimal)
  • purchaser_name (string)
  • purchaser_email (string)
  • purchaser_address (string)
  • billing (object)
    An object containing two fields, invoice and payment. Both are of the billing transactions type.
  • greeting (string)
  • message (string)
  • edits_completed (integer)
    Timestamp when edits were completed and finalised by the purchaser.
  • expire_at (integer)
  • unsubscribed (true)
  • unsubscribed_at (integer)
    If the purchaser receives an email follow-up because the voucher has not been used, they can unsubscribe from future emails about the voucher.
  • sku (string)


If the voucher is deleted, the following fields exist:

  • deleted (0/1)
  • deleted_at (integer)
  • deleted_by (string)
  • deleted_notes (string)



Not all fields are present for every voucher. For example, if the voucher was manually added to the system the billing and purchaser_address fields are not present.


curl -H "Accept: application/json" -H "Authorization: Bearer fb1f233e08aeef0a213dc87cea70cedbd7dbcd0a2229cac4f64e14e3c462cc8e" "https://acme.flightschoolbooking.com/club/voucher"

To retrieve a specific voucher by its ID, use the endpoint ending /club/voucher/<VOUCHER-CODE>. 

(Use your own site's URL, replacing acme with the name of your subdomain and use your own token)

Mathew Waters Thu, 19/11/2020 - 16:36