Equipe logo

Introduction

Before you start your integration read through this documentation

Welcome to our API docs.

This API document is designed for those interested in developing for our platform.

Equipe is the application that enhance your work with equestrian shows - from entries to results with simplicity. This means that in order to save work, we rely heavily on getting the into Equipe so the user don’t have to import it via CSV or manually put it in.

You’ll succeed if you do this.

Here’s some useful information.

Something may not happen if you try and do this.

Something bad will happen if you do this.

Getting Started

Equipe Federation API docs

Looking for the possibility to integrate your federation to the world of Equipe? This will guide you on how to structure your web service to be compliant with https://app.equipe.com. Then you will be able to use the functions of importing entires, enabling search of riders, officials, horses, clubs and later get results when the show is finished.

The Federation API is in reality the documentation for your API, Equipe will upon users request ask your system for information. This describe what we except.

Guide

Recommended steps to make a complete integration

These steps will guide you on how to make seamless integration between your federation and Equipe. The prerequisites is that you already have an entry system where organizers and riders can login to mange entries.

Step 1 - Sign in user

This solves two problems, create the organizer and user in Equipe, and make it single sign on from your federation system. The user then only needs to authenticate once. Read more

Step 2 - Import entries to Equipe

First of all we need to be able to import entries into Equipe. This is done by specifying the Shows URL in the settings for your federation in Equipe.

Image of Federation webservices

  • User creates a new show in Equipe, and selects File > Federation > Import entries.
  • Equipe makes a HTTP GET with headers to the Shows URL it return shows that the logged in user are able to import.
  • Equipe will ask the user to select a show to import.
  • Equipe will follow the entries_url with headers in the response from shows_url and begin importing entries.

This is a smart import, so the user can run this multiple times to fetch the latest changes. Updates in the show made in Equipe will not be overridden by the import. This is due to our tracking history.

Read more about the entry file format

Step 3 - Create judgement mapping

We have support for over 50+ show jumping judgements. There is a large chance that we already have support for your judgement, but if not, we are happy to add it. When the import runs it will track all judgement_id (this is the judgement identitifer, string value, unique to each discipline) that is not currently mapped to a judgement in Equipe. Go to your federation settings, under Judgements, and fill in the missing details. Some Federations have a loose definition of the rule, so the organizer can decide later on. Mapp it to the most common one.

For disciplines that are using Marking sheets (Dressage, Freestyle, Show jumping competitions for young horses, Eventing), we need the full tests in order for Equipe to function properly. This also allows the user to print the tests from our system with the name of the rider, horse and judge.

You have read-only access to all FEI tests, these can be copied to your federation and translated to your language, and your custom ones needs to be created. We have an editor to create these under your Federation settings.

The large advantage of doing the mapping in Equipe, is that your system never needs to know about any of our internals, we commmunicate with a judgement_identitifer keep it as a string to make the mapping work simpler. These works 2-way, so when we later export the results you will get your identifier back.

Step 4 - Build search webservices

Normally we get all entries before hand. But often there will be changes during the show and at that time your system is closed for new entries.

To make sure you get the correct information back in the results, implement the following web services in your system which allows the user to bring in new people, horses and clubs to the show.

This way you have the control to only return valid riders and horses, who have paid their licences.

Step 5 - Receive submitted results

When the show is finished, the user will submit results upstream to your system. It can also be done per competition.

  • User select File > Federation > Export results
  • By default all competitions are selected
  • Equipe builds the result json payload and makes a HTTP POST to your system.
  • You run your own validation and return 202 Accepted for success or 422 Unprocessable entity with a json response that contains the validation error for failure.
  • User gets your feedback

Read more

Step 6 - Translation

We have support for translation of both app.equipe.com and online.equipe.com (Live-result service). The first step is to translate online.equipe.com since this is for riders and audience. When you have users that have run several shows in Equipe, the main app should also be translated. Read more

Conclusion

We know by experiance that it can take some time to get all of the steps above right. But it’s well worth the effort. Equipe is the perfect addition to your entry system. We give extraordinary user experience to run an equestiran show. We have all features necessary to run a show on any level, from the smallest national show to the biggest 5* show.

The web services above is the key, that will give a true seamless experience for the user, to import competitions and entries, run the show and export the results without having to download and upload files manually.

We are ready to assist with your integration and explain in more detail and validate your json responses.

Single Sign On

This is the first step for a complete integration.

Make sure that you have specified your API KEY, enabled Single sign on and copied your unique YOUR-SINGLE-SIGN-ON-URL under settings for your federation in app.equipe.com.

Users of your system needs to login to https://app.equipe.com, you can sign in users that you already have authenticated. This also creates the organizer and user if they do not already exist in Equipe and assigns them to your federation. You should only generate this login possibility to users that have the role of organizer.

HTML Form

Generate a form with the following hidden fields.

Name Description
organizer_id Your id of the organizer
organizer_name Name of the organizer
name Name of the user
email Email of the user
cell_phone Cell phone number of the user
locale Language for the user
auth_token Your generated token

Supported locales is sv, en, es, nl, fi, fr and da

Generate auth token

Concatenate the values of organizer_id, organizer_name, name, email, cell_phone and your api key. Make a SHA256 hexdigest of the result. We will use this to verify that your are the sender of the information and that it is untouched. Your federation api_key serves as the shared secret.

Example

federation_api_key = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
organizer_id = 235
organizer_name = 'Helsingborg FRK'
name = 'Kim Fors'
email = 'kim.fors@example.com'
cell_phone = '+4670123123'
locale = 'en'
auth_token = Digest::SHA256.hexdigest([organizer_id, organizer_name, name, email, cell_phone, locale, federation_api_key].join)

The auth_token is f9164f2b22f4627aa14cd411e9af4f2b67953eafb64010347bc05a26269f1305 for the given values above.

<form action="your-single-sign-on-url" method="post">
  <input type="hidden" name="organizer_id" value="your id of the organizer">
  <input type="hidden" name="organizer_name" value="name of the organizer">
  <input type="hidden" name="name" value="name of the user">
  <input type="hidden" name="email" value="email of the user">
  <input type="hidden" name="cell_phone" value="cell phone number of the user">
  <input type="hidden" name="locale" value="Language for the user">
  <input type="hidden" name="auth_token" value="your generated token">
  <input type="submit" value="Submit">
</form>

Authentication

All outgoing requests form Equipe with include Authentication headers

Make sure that you have specified your API KEY under settings for your federation in app.equipe.com and signed in users with Single Sign On

Header  Description
X-FEDERATION-API-KEY Your Federation API-KEY that is configured in Equipe under Federation settings, web services.
X-FEDERATION-ORGANIZER-ID Your organizer id
X-FEDERATION-USER-NAME The name of the signed in user in Equipe
X-FEDERATION-USER-EMAIL The email of the signed in user in Equipe

If the organizer does not have access to a specific end point return 401 Unauthorized.

# Test your web services with curl

export API_KEY="YOUR-FEDERATION-API-KEY"
export ORGANIZER_ID="TEST-ORGANIZER-ID"
export USER_NAME="YOUR-NAME"
export USER_EMAIL="YOUR-EMAIL"

curl -H "X-FEDERATION-API-KEY: $API_KEY" -H "X-FEDERATION-ORGANIZER-ID: $ORGANIZER_ID" -H "X-FEDERATION-USER-NAME: $USER_NAME" -H "X-FEDERATION-USER-EMAIL: $USER_EMAIL" -H 'Content-Type: application/json' "http://your-domain.com/test"  

Shows

List shows that is available for import

Make sure that you have specified Shows URL under settings for your federation in app.equipe.com.

You only need to return current shows. The user will be able to choose a show to import from this list. This url should only return shows for the organizer that is making the request, specified by the X-FEDERATION-ORGANIZER-ID request header.

The response must validate json-schema shows.json

Attribute Type Mandatory Description
id string Yes Your primary key for the show
name string Yes Name of the show
starts_on string  No ISO 8601 (YYYY-MM-DD) formatted start date
ends_on string  No ISO 8601 (YYYY-MM-DD) formatted end date
entries_url url Yes Full url including protocol, host and path to the Entries end point for the given show

Test this by creating a new show in Equipe, once the show is created go to File > Your federation > Import entries

{
   "shows":[
      {
         "id":"f34a80c1-069f-4498-846a-e3fca05a7f00",
         "name":"International CSI 3* Horse Show 2016",
         "starts_on":"2016-08-09",
         "ends_on":"2016-08-14",
         "entries_url":"https://example.com/shows/24/entries.json"
      },
      {
         "id":"9305e1ed-8d8a-4242-ad12-08e1ea4cf046",
         "name":"Jumping Championships (YR, J, C) 2016",
         "starts_on":"2016-07-28",
         "ends_on":"2016-07-30",
         "entries_url":"https://example.com/shows/23/entries.json"
      }
  ]
}
HTTP/1.1 401 Unauthorized

Entries

A representation of a shows entries for Equipe

The entries_url is given by Shows URL response. Equipe will request the entries for the show the user have chosen to import.

Should return all entries for the show. All resources are represented in the top-level.

The response must validate json-schema entries.json

Does it take long time to collect and build entries response? Return 202 ACCEPTED until the data is ready and can be served. The entries_url will continue to be polled for 10 minutes or until it receive a non 202 ACCEPTED status.

The entries import is designed so that it can be run any number of times before the show starts. First time the user have to select a show, after that when the import is requested by the user it will immediately start the import without prompting to select show again.

Values that have been changed by the user will not be overridden by changes from the entries given by the web service. Entries that are no longer present in the web service response will be withdrawn.

Models

{
  "show": {
    "id": "fc1bf64e-1f6d-4838-ab45-1d4f0a079288",
    "name": "Mini show 2017",
    "currency": "SEK"
  },
  "competitions": [
    {
      "competition_no": "1",
      "name": "Two phases, not atc T A",
      "judgement_id": "274.5.1",
      "discipline": "H",
      "starts_on": "2017-01-10",
      "start_time": "12:00",
      "fence_height": 120,
      "entry_fee": 120,
      "late_entry_fee": 50,
      "vat": 0
    }
  ],
  "people": [
    {
      "id": "c0cdc695-c646-4b32-ab68-5fa92eca2fc5",
      "first_name": "Jon",
      "last_name": "Stenqvist",
      "person_no": "2010-10-12"
    }
  ],
  "horses": [
    {
      "id": "81ce6fc1-426b-4a77-9371-1605f51c9eef",
      "name": "Seed",
      "category": "H"
    }
  ],
  "entries": [
    {
      "id": "2f5e3700-95b6-47ea-a96c-99ea9cca6dbe",
      "competition_no": "1",
      "rider_id": "c0cdc695-c646-4b32-ab68-5fa92eca2fc5",
      "horse_id": "81ce6fc1-426b-4a77-9371-1605f51c9eef",
      "payer_id": "c0cdc695-c646-4b32-ab68-5fa92eca2fc5"
    }
  ]
}
HTTP/1.1 202 Accepted
HTTP/1.1 401 Unauthorized

Search riders

Allows search and import individual riders to the show

Make sure that you have specified Search riders URL under settings for your federation in app.equipe.com.

Parameters
licence
National rider licence (exact match)
first_name
First name (starts with)
last_name
Last name (starts with)

The response must validate json-schema riders.json

Models

{
  "riders":[
    {
      "id":"1f23fd3e-bd5a-40cb-aa51-a44740b0dae6",
      "licence":"51173",
      "licence_year":2017,
      "first_name":"Jon",
      "last_name":"Stenqvist",
      "address":"xxx",
      "zipcode":"xxx",
      "city":"xxx",
      "address_country":"Sweden",
      "home_phone":"",
      "club_id":2628,
      "club_logo_id":"0235",
      "club_logo_group": "svrf",
      "person_no":1969,
      "email":"xxx",
      "country":"SWE"
    }
  ]
}
HTTP/1.1 401 Unauthorized

Search officials

Allows search and import individual officials to the show

Make sure that you have specified Search officials URL under settings for your federation in app.equipe.com.

Parameters
first_name
First name starts with
last_name
Last name starts with

The response must validate json-schema officials.json

Models

{
  "officials": [
    "id": "3db1f0f6-957b-4269-8431-ced00cd93180",
    "first_name": "Jon",
    "last_name": "Stenqvist",
    "official": true
  ]
}
HTTP/1.1 401 Unauthorized

Search horses

Allows search and import individual horses to the show

Make sure that you have specified Search horses URL under settings for your federation in app.equipe.com.

Parameters
name
Name of the horse starts with

The response must validate json-schema horses.json

Models

{
  "horses": [
    {
      "id": "0bcbfcd3-27ed-455b-a9e5-05dd34bfc8dc",
      "horse_no": 514,
      "name": "Seed",
      "category": "H",
      "license": "284808",
      "licence_year": "2017",
      "country": "GER",
      "fei_id": "104HT47",
      "born_year": "2006",
      "color": "Dar Bay",
      "sex": "G",
      "sire": "Stolzenberg",
      "dam": "Gera",
      "dam_sire": "Glueckspilz",
      "breeder": "Helmut Haberman",
      "owner": "Jon Stenqvist",
      "reg_no": "DE431311320706",
      "chip_no": "752098100464709"
    }
  ]
}
HTTP/1.1 401 Unauthorized

Search clubs

Allows search and import individual clubs to the show

Make sure that you have specified Search clubs URL under settings for your federation in app.equipe.com.

Parameters
name
Name starts with

The response must validate json-schema clubs.json

Models

{
  "clubs": [
    {
      "id":"2eb955ce-8a6f-46a7-96a2-b4c09c16f379",
      "name":"Helsingborgs FRK",
      "logo_id":"0235",
      "logo_group":"svrf"
    }    
  ]
}
HTTP/1.1 401 Unauthorized

Upload entries

This is a useful option if your federation is not yet ready to commit to our standard format. You can build your own service that converts the entry file given by the entry system.

Make sure that you have specified Upload entry file URL under settings for your federation in app.equipe.com.

  • The user upload the entry file to Equipe
  • Equipe will in the background make a post with the data untouched to Entry file upload URL, the Content-Type header is set as it was received by the user, the request.body contains the file content.
  • You convert the entry file, and return our format for entries, see above Entries
  • Equipe import the information, and tracks changes. The user will be able to import the entries serveral times.
HTTP/1.1 202 Accepted
HTTP/1.1 401 Unauthorized

Results

Get results from Equipe

We support 3 different ways of exporting results.

  • Submit results directly to the federation in our format
  • Submit results to an external converter that transform our format to standard of the given federation, the file is downloaded and submitted manually to the federation by the user.
  • Download results in our format directly from the system

Submit results

Make sure that you have specified Results URL under settings for your federation in app.equipe.com.

Format

The result format has similar structure as the entries. But instead of entries, we export the starts. See example

{
  "show": {},
  "competitions": [],
  "people": [],
  "horses": [],
  "clubs": [],
  "teams": [],
  "starts": []
}

When the user exports the results, our system will make an HTTP POST with content type of application/json the request body contains the results in json format. If you accept the file, return status 202 Accepted to our system knows that the file is accepted.

In case of your own validation fails, the error needs to be communicated back to the user that tries to send the results.

Return 422 Unprocessable entity with content type application/json and the body should contain the error messages in json format as following

HTTP/1.1 422 Unprocessable entity
Content-Type: application/json
{
 "errors": ["Missing licence of rider XXX"]
}

Submit the results to external converter

Make sure that you have specified Result File URL under settings for your federation in app.equipe.com.

When the user initialize the export, our system will make an HTTP POST with content type of application/json the request body contain the results in json format. You transform the file and return in in the body with the correct content type set. We will then forward this to the user and the file will be downloaded automatically and the user can submit it to the federation.

In case of invalid result data return json response contain the error message with the status code 422 Unprocessable entity as the example above.

Download our result

This option is default if non of the above is specified. It will export the result data in our JSON-format to a file that will be downloaded.

HTTP/1.1 202 Accepted
HTTP/1.1 401 Unauthorized
HTTP/1.1 422 Unprocessable entity
Content-Type: application/json

Errors

When something goes wrong

We communicate errors as they occur. Data validation errors will be presented to the user requesting the information. When validation error happens we will show the errors and with the data being validated under the link Show context

If our requests fail we will show the bubble up the error to the user interface.

If something goes wrong internally in our system we will present internal server error.

We hope you get enough information if something goes wrong to be able to track the error.

[
  "The property '#/people/0/id' of type integer did not match the following type: string in schema file:///Users/jon/code/equipe_app/docs/api/schemas/entries.json#",
  "The property '#/entries/0/competition_no' of type integer did not match the following type: string in schema file:///Users/jon/code/equipe_app/docs/api/schemas/entries.json#"
]  

Show

General settings for the show

Attributes in Bold is required

Attribute Type Default Pattern
id id string
On importing entries, this should be your primary key for the show. When exporting, this will be our internal id and your primary key will be in the foreign_id attribute
name name string "Untitled"
Name of the show
starts_on starts_on string \A\d{4}-\d{2}-\d{2}\z
Start date of the show in the format YYYY-MM-DD
ends_on ends_on string \A\d{4}-\d{2}-\d{2}\z
End date of the show YYYY-MM-DD
currency currency string
ISO 4217 formmated currency code used for accouting in the show. We will add more currencies when they are needed
foreign_tax foreign_tax boolean false
Will foreign tax apply or not (When used automatic for people not from foreign_tax_skip)
foreign_tax_percent foreign_tax_percent number 15
Foreign tax percent
foreign_tax_skip foreign_tax_skip string ^[A-Z]{3}$
The IOC code, foreign tax but not for people from this country, this is the country code where the show is located. This defaults to the country of the federation if left out
income_tax income_tax boolean false
Will income tax apply or not (When used automatic for people from foreign_tax_skip-country without company)
income_tax_percent income_tax_percent number 30
Income tax percent
always_income_tax always_income_tax array []
When income tax is enabled, apply income tax to people from these countries instead of foreign tax. List of IOC codes
discount_club_id discount_club_id string or null null
Gives discount for riders that competes for the club with this id (See also Competition#club_discount_percent_applied
discount_club_percent discount_club_percent number or null null
Discount percent for riders that competes for the club (See also Competition#club_discount_percent_applied)
penalty_fee penalty_fee number or null null
Penalty fee for starts marked with status no-show
credit_card_fee_percents credit_card_fee_percents array []
Possibllty to add credit card fee % on invoices
accounts accounts array ["tdb", "bank", "prepaid", "cash", "credit_card", "swish"]
List of payment accounts
default_account default_account string "cash"
Default account must also exist in accounts
prize_money_equal_ranked prize_money_equal_ranked integer 2
1 = Highest prize money, 2 = Prize money splits
withdrawn_pay withdrawn_pay boolean true
Will withdrawn starts pay the entry fee or not, when false the entry fee behave like a start fee
minimum_entry_fee_in_prize_money minimum_entry_fee_in_prize_money boolean false
When enabled it never give less the entry fee in prize money for placed starts
result_name result_name string ""
Name of the person responsibly for the results
result_email result_email string ""
Email of the person responsibly for the results
result_cell_phone result_cell_phone string ""
Cell phone of the person responsibly for the results
publish_horse_labels publish_horse_labels boolean false
Publish horse labels to online.equipe.com
publish_prize_money publish_prize_money boolean true
Publish prize money to online.equipe.com
publish_horse_no publish_horse_no boolean true
Publish horse no to online.equipe.com
horse_tax_person horse_tax_person boolean false
Makes it possible to set a tax person on each horse
custom_field_names custom_field_names object
Object where key is person, horse or start. See Custom field
{
  "id":"fc1bf64e-1f6d-4838-ab45-1d4f0a079288",
  "name":"My Show 2017",
  "currency":"SEK"
}
{
  "person":{
    "favorite_color":{
      "name":"Favorite color",
      "type":"string",
      "align":"left",
      "publish":false
    }
  }
}

Competition

Attributes in Bold is required

Attribute Type Default Pattern
id id string
On importing entries, this should be your primary key for this resource. When exporting, this will be our internal id and your primary key will be in the foreign_id attribute
competition_no competition_no string
Competition number. Should not be longer then 5-10 characters. Can be a combination of letters and numbers
name name string
Name of the competition
alias alias boolean true
Override generated name of the competition
open_for_entry open_for_entry boolean false
Open for entry via Rider Declaration
discipline discipline string
D = Dressage, H = Show Jumping, F = Eventing, A = Breed evaluation, K = Driving, L = List, U = Exhibition, E = Endurance, R = Reining
allow_many allow_many boolean false
Only valid for lists (discipline = L) then we don't care about the horse and the lists becomes an extra fee
status status string
K = Club, L = Local, R = Regional, N = National, E = Elite, I = International
starts_on starts_on string \A\d{4}-\d{2}-\d{2}\z
Start date of the competition, must be the format of YYYY-MM-DD
start_time start_time string \A\d{2}:\d{2}\z
Start time of the competition must be in the format of HH:MM
dressage_lock_start_times dressage_lock_start_times boolean false
Lock start times so they are not updated automatic
horse_pony horse_pony string "R"
Competition open for horses or ponies, R = Horse, P = Pony
team team boolean false
If this is a team competition or not
admin_team admin_team boolean false
This competition will only contain teams, team members will compete in other non team competitions and their result is counted in this competition. Team must also be set to true
judgement_id judgement_id string or null
The judgement identifier, in Equipe you configure the mapping between the judgement in Equipe with your judgement id. This value needs to be uniq within each discipline. Use descriptive name for easier mapping
allow_individual_marking_sheets allow_individual_marking_sheets boolean false
When discipline is dressage, this allow individual marking sheet per start in this competition
fence_height fence_height integer
When discipline is show jumping set fence height in centimeter. This is for presentation
arena arena string ""
Name of the arena where the competition will be held. Keep consistant naming as the competition will be grouped on this value
admin_fee admin_fee number or null
Admin fee (no VAT included by for this fee)
entry_fee entry_fee number or null
Entry fee including VAT
starting_fee starting_fee number or null
Starting fee including VAT
late_entry_fee late_entry_fee number or null
Late entry fee including VAT
team_entry_fee team_entry_fee number 0
Team entry fee including VAT, the payer for each team will receive this fee
vat_included_by vat_included_by number 0
VAT included by % on fees
entry_fees entry_fees array
Define your own entry fees types for this competition
team_prize_money team_prize_money array
List of team prize money, the last prize will go to other placings, to give money to fixed number of teams, terminate with 0
prize_money prize_money array
List of prize money, the last prize will go to other placings, to give money to fixed number of starts, terminate with 0
prize_money_currency prize_money_currency string
ISO 4217 formatted currency for prize money
open_for_young_horses open_for_young_horses boolean false
Competition open for young horses
young_horse_entry_fee young_horse_entry_fee number
Young horses Entry fee including VAT
young_horse_starting_fee young_horse_starting_fee number
Young horses Starting fee including VAT
young_horse_late_entry_fee young_horse_late_entry_fee number
Young horses Late entry fee including VAT
young_horse_prize_money young_horse_prize_money array
Young horses list of prize money, the last prize will go to other placings, to give money to fixed number of starts, terminate with 0
honorary_award honorary_award boolean false
Prize in kind
randomized randomized boolean false
Competition is randomized (this is set automatic by Equipe, override only if you have valid reason for it)
category_merge category_merge string "regulation"
How categories should be merged is defined under each Federation, override the value here
club_discount_percent_applied club_discount_percent_applied boolean false
Apply club discount for fees on this competition. Club discount is defined under Show
reduce_prize_money_when_fewer_than reduce_prize_money_when_fewer_than number null
When fewer starts than the given value, the prize will be reduced with reduce_prize_money_when_fewer_than_percent
reduce_prize_money_when_fewer_than_percent reduce_prize_money_when_fewer_than_percent number 50
The percent to reduce the prize money with when lower then X number of starts in the competition
title title string
Header of the competition, in top of print outs
subheader1 subheader1 string
Subheader1 of the competition, 2nd header of print outs
subheader2 subheader2 string
Subheader2 of the competition, below competition name on print outs
[
  {
    "name":"Stable service",
    "vat":20,
    "amount":320
  }
]

Person

Attributes in Bold is required

Attribute Type Default Pattern
id id string
On importing entries, this should be your primary key for this resource. When exporting, this will be our internal id and your primary key will be in the foreign_id attribute
first_name first_name string
last_name last_name string
address address string
zipcode zipcode string
city city string
address_country address_country string ""
Full name of the country
country country string "" ^[A-Z]{3}$
The IOC code of the country the rider is competing for
work_phone work_phone string ""
home_phone home_phone string ""
cell_phone cell_phone string ""
email email string ""
licence licence string ""
licence_year licence_year string or integer or null \A\d{4}\z
The year licence is valid. 4 digits
club_id club_id string or null null
The club with this ID should be in the clubs-resource
fei_id fei_id string ""
FEI ID for the person
national_id national_id string ""
passport_no passport_no string ""
person_no person_no string \A\d{4}(-\d{2}-\d{2})?\z
Either ISO 8601 formatted birth date, or only year of birth
company company string ""
If the person is represented by a company, this name will be shown on the invoice
vat_no vat_no string ""
VAT number for the company
foreign_tax foreign_tax boolean or null null
Apply foreign tax leave as null to make the system auto calculate this
account_number account_number string ""
account_holder account_holder string ""
bank_name bank_name string ""
iban iban string ""
bic bic string ""
invoice_no invoice_no integer or null null
Invoice number generated by the system on print out
income_tax_percent income_tax_percent number or null
Override the normal income tax percent defined in show settings for this person
do_not_charge_vat do_not_charge_vat boolean false
When true, VAT for all fees with respect_do_not_charge_vat set to true will excluded
official official boolean false
Flag this person as an official, with this flag is true, the person can be selected as ground jury or dressage judge
arrived arrived boolean false
Flag to set if the person has arrived on the show
notes notes string ""
custom_fields custom_fields object
The object key refers to the key in Show#custom_field_names
payments payments object
The object key refers to the account name, it must be included the Show#accounts. See Payment is not available on search riders and search officials.
{
  "favorite_color":"green"
}
{
  "prepaid":{
    "amount":250,
    "description":"Receipt number 123",
    "created_at":"2017-05-06"
  }
}

Horse

Attributes in Bold is required

Attribute Type Default Pattern
id id string
On importing entries, this should be your primary key for this resource. When exporting, this will be our internal id and your primary key will be in the foreign_id attribute
name name string
horse_no horse_no integer
Unless horse no is given, all newly imported horses will be sorted by name and given a number automatic, that is preferable
born_year born_year string \A\d{4}\z
4-digits birth year
sex sex string "unknown"
S = Stallion, G = Gelding, M = Mare, unknown = Unknown
category category string "H"
H = Horse, A, B, C, D, E, 1, 2 or 3
licence licence string
National licence
licence_year licence_year string or integer \A\d{4}\z
The year licence is valid. 4 digits
fei_id fei_id string ""
ueln ueln string
chip_no chip_no string
country country string or null "" ^[A-Z]{3}$
The IOC code for the country in which the horse was born
color color string ""
breed breed string ""
Stud book of the horse in short, e.g. SWB or HANN
race race string ""
height height string ""
reg_no reg_no string ""
Registration number of the horse
breeder breeder string ""
Breeder of the horse
owner owner string ""
Current owner of the horse
sire sire string ""
dam dam string ""
dams_dam dams_dam string ""
dam_sire dam_sire string ""
dams_damsire dams_damsire string ""
notes notes string ""
tax_person_id tax_person_id string or null
ID of the tax person for this horse, the tax person must exist in people
custom_fields custom_fields object
The object key refers to the key in Show#custom_field_names

Club

Attributes in Bold is required

Attribute Type Default Pattern
id id string
On importing entries, this should be your primary key for this resource. When exporting, this will be our internal id and your primary key will be in the foreign_id attribute
name name string
short short string
logo_id logo_id string
Refers to our central repository for logos which are shared between all our systems. When logo_id is a number and less then 4 digits, prefix it with zero. Example 54 should be 0054
logo_group logo_group string
{
  "id":"fc1bf64e-1f6d-4838-ab45-1d4f0a079288",
  "name":"Helsingborgs Fältrittklubb",
  "short":"HFRK",
  "logo_id":"0235",
  "logo_group":"svrf"
}

Start

Attributes in Bold is required

Attribute Type Default Pattern
id id string
When importing entries, this should be your primary key for this resource. When exporting, this will be our internal id and your primary key will be in the foreign_id attribute
competition_no competition_no string
Competition no, the competition must exist in competitions
rider_id rider_id string
ID of the rider, the rider must exist in people
payer_id payer_id string
ID of the payer, the payer must exist in people
horse_id horse_id string
ID of the horse, the horse must exist in people
individual_marking_sheet_id individual_marking_sheet_id string or null
Dressage only. The judgement identifier for the individual marking sheet, can only be used when Competition allow_individual_marking_sheets is set to true
quantity quantity integer 1
Extra fee only (Competition with discipline L and allow_many true). The number of times the fee is charged. Don't include this attribute unless it's used.
category category string "H"
One of "H", "A", "B", "C", "D", "E", "1", "2", "3"
section section string "A"
A = Section A, B = Section B (Young horses)
late_entry late_entry boolean false
When true, the late entry fee will be applied
status status string ""
One of "", "withdrawn", "unpaid", "no_show", "changed", "reserve", "starting"
outside_comp outside_comp boolean false
When true, this start will not be ranked
custom_fields custom_fields object
The object key refers to the key in Show#custom_field_names

Payment

Attributes in Bold is required

Attribute Type Default Pattern
amount amount number
The amount that is prepaid
description description string ""
Notes for this payment
created_at created_at string \A\d{4}-\d{2}-\d{2}\z

Custom entry fee

Attributes in Bold is required

Attribute Type Default Pattern
name name string
Name of the fee
vat vat number
VAT included by %
amount amount number
The amount including VAT
{
  "name":"Stable service",
  "vat":20,
  "amount":320
}

Custom field

Attributes in Bold is required

Attribute Type Default Pattern
name name string
type type string
One of "string", "boolean", "number"
align align string
One of "left", "center", "right"
publish publish boolean

Rider

Attributes in Bold is required

Attribute Type Default Pattern
id id string
On importing entries, this should be your primary key for this resource. When exporting, this will be our internal id and your primary key will be in the foreign_id attribute.
first_name first_name string
last_name last_name string
address address string
zipcode zipcode string
city city string
address_country address_country string ""
country country string "" ^[A-Z]{3}$
The IOC code of the country the rider is competing for
work_phone work_phone string ""
home_phone home_phone string ""
cell_phone cell_phone string ""
email email string ""
licence licence string ""
licence_year licence_year string or integer or null \A\d{4}\z
club_id club_id string or null null
Your primary key of the club
club_logo_id club_logo_id string
Refers to our central repository for logos which are shared between all our systems. When logo_id is a number and less then 4 digits, prefix it with zero. Example 54 should be 0054
club_logo_group club_logo_group string
fei_id fei_id string ""
FEI ID for the person
national_id national_id string ""
passport_no passport_no string ""
person_no person_no string \A\d{4}(-\d{2}-\d{2})?\z
Either ISO 8601 formatted birth date, or only year of birth
company company string ""
If the person is represented by a company, this name will be shown on the invoice
vat_no vat_no string ""
VAT number for the company
foreign_tax foreign_tax boolean or null null
Apply foreign tax leave as null to make the system auto calculate this
account_number account_number string ""
account_holder account_holder string ""
bank_name bank_name string ""
iban iban string ""
bic bic string ""
invoice_no invoice_no integer or null null
Invoice number generated by the system on print out
income_tax_percent income_tax_percent number or null
Override the normal income tax percent defined in show settings for this person
do_not_charge_vat do_not_charge_vat boolean false
When true, VAT for all fees with respect_do_not_charge_vat set to true will excluded
official official boolean false
Flag this person as an official, with this flag is true, the person can be selected as ground jury or dressage judge
arrived arrived boolean false
Flag to set if the person has arrived on the show
notes notes string ""

Official

Attributes in Bold is required

Attribute Type Default Pattern
id id string
On importing entries, this should be your primary key for this resource. When exporting, this will be our internal id and your primary key will be in the foreign_id attribute.
first_name first_name string
last_name last_name string
address address string
zipcode zipcode string
city city string
address_country address_country string ""
country country string "" ^[A-Z]{3}$
The IOC code of the country the rider is competing for
work_phone work_phone string ""
home_phone home_phone string ""
cell_phone cell_phone string ""
email email string ""
licence licence string ""
licence_year licence_year string or integer or null \A\d{4}\z
club_id club_id string or null null
Your primary key of the club
club_logo_id club_logo_id string
Refers to our central repository for logos which are shared between all our systems. When logo_id is a number and less then 4 digits, prefix it with zero. Example 54 should be 0054
club_logo_group club_logo_group string
fei_id fei_id string ""
FEI ID for the person
national_id national_id string ""
passport_no passport_no string ""
person_no person_no string \A\d{4}(-\d{2}-\d{2})?\z
Either ISO 8601 formatted birth date, or only year of birth
company company string ""
If the person is represented by a company, this name will be shown on the invoice
vat_no vat_no string ""
VAT number for the company
foreign_tax foreign_tax boolean or null null
Apply foreign tax leave as null to make the system auto calculate this
account_number account_number string ""
account_holder account_holder string ""
bank_name bank_name string ""
iban iban string ""
bic bic string ""
invoice_no invoice_no integer or null null
Invoice number generated by the system on print out
income_tax_percent income_tax_percent number or null
Override the normal income tax percent defined in show settings for this person
do_not_charge_vat do_not_charge_vat boolean false
When true, VAT for all fees with respect_do_not_charge_vat set to true will excluded
official official boolean false
Flag this person as an official, with this flag is true, the person can be selected as ground jury or dressage judge
arrived arrived boolean false
Flag to set if the person has arrived on the show
notes notes string ""

Authentication

Add the API key to all requests as a GET parameter or set X-API-KEY header.

Login to your account. Visit you profile page and click show API-Key. This key should be set in the X-API-KEY header or api_key parameter on every request.

You need to be authenticated for all API requests. You can manage your API-Key from your profile. You will be prompted to enter your password to view your key or regenerate it.

Nothing will work unless you include this API key

# Using X-API-KEY header
curl -H "X-API-KEY: YOUR_APP_KEY" "https://app.equipe.com/organizers/1/meetings.json"
# Using parameters
curl https://app.equipe.com/organizers/1/meetings?api_key=YOUR_APP_KEY

Marking Sheets

List all marking sheets

Marking Sheets are used for Dressage, Freestyle, Para-dressage, Eventing and more. These sheets are created within app, and mapped to your specified judgement id or rule code.

As you will put a lot of effort creating this sheets we want to make sure that you are able to re-use this information outside app.equipe.com.

This will return all marking sheets, both the FEI and those created specific for your own federation.

curl /federations/YOUR_FEDERATION_ID/marking_sheets.json?api_key=YOUR_APP_KEY
Attribute Type Mandatory Description
federation string Yes  
name string Yes  
sp string Yes Language
year string Yes Edition
course_length string Yes  
time string Yes  
type string Yes  
max_score integer Yes  
format url object Marking sheet in the different formats

Follow the links to get the marking sheet in pdf or as json with full details.

[
  {
    "id": 307,
    "federation": "FEI",
    "name": "FEI Grand Prix 16-25",
    "sp": "E",
    "year": "2009",
    "course_length": "60",
    "time": "6",
    "type": "D",
    "max_score": 430,
    "format": {
      "pdf": "https://app.equipe.com/federations/4/marking_sheets/307.pdf",
      "xml": "https://app.equipe.com/federations/4/marking_sheets/307.xml",
      "json": "https://app.equipe.com/federations/4/marking_sheets/307.json"
    }
  },
  {
    "id": 306,
    "federation": "FEI",
    "name": "FEI Ind. Comp. Test Regional Games",
    "sp": "E",
    "year": "1997",
    "course_length": "60",
    "time": "6,5",
    "type": "D",
    "max_score": 370,
    "format": {
      "pdf": "https://app.equipe.com/federations/4/marking_sheets/306.pdf",
      "xml": "https://app.equipe.com/federations/4/marking_sheets/306.xml",
      "json": "https://app.equipe.com/federations/4/marking_sheets/306.json"
    }
  }
]

Marking Sheet

Get Marking Sheet

Returns a specific marking sheet from your collection

curl /federations/YOUR_FEDERATION_ID/marking_sheets.json?api_key=YOUR_APP_KEY
{
  "id":10007,
  "name":"FEI Dressage Test Nr 6",
  "year":"2002",
  "course_length":"100",
  "time":"9",
  "t":"A",
  "sp":"E",
  "ord":150,
  "max_score":200,
  "scale":10,
  "bridle":"",
  "deduction":null,
  "sort_desc":null,
  "federation":"ERL",
  "items":[
    {
      "index":0,
      "section":"technical",
      "group_no":"1",
      "coefficient":1,
      "keyword":"",
      "positions":[
        "A",
        "X",
        "",
        "XCH"
      ],
      "rows":[
        "Enter ar working tot",
        "Halt - Salute",
        "Proceed at working trot",
        "Track to the left"
      ]
    },
    {
      "index":1,
      "section":"technical",
      "group_no":"2",
      "coefficient":1,
      "keyword":"",
      "positions":[
        "HX",
        "X",
        "",
        "KAF"
      ],
      "rows":[
        "Collected trot",
        "Reins in one hand an circle to the right,",
        "20 m diameter",
        "Working trot and reins at will"
      ]
    }
  ]
}

Errors

Commonly used HTTP status codes

Code Name Description
200 OK Success
201 Created Creation Successful
202 Accepted Accepted but not yet proccessed
400 Bad Request We could not process that action
401 Unauthorized We could not authenticate
403 Forbidden We couldn’t authenticate you
422 Unprocessable entity Validiation failed
HTTP/1.1 200 OK
HTTP/1.1 401 Unauthorized

Translation

Translation of app.equipe.com

Translation should be done and maintained by a active user of the system.

Image of Federation webservices

You will notice that more words will come over and over again. This is because they are used in different parts of the apps. The translation-key is visible in the top-right of the word, it will give you some context where it’s used. Marked with yellow in the screenshot above.

Translation.io saves white space and new line, so be careful when you leave the text box so there is no extra new line (enter) or traling white space.

Try to keep the words in similar length as the original values.

# The translation of these keys must be as short as in English as it's used on on report headers with very limited space.
en:
  reports:
    label_overrides:
      starts:
        st: St.No
        running_number: St.No
        re: Rk
        horse_no: H.No
        tid: Time
        tidd: CC. Time
        rider_country: Nat

es:        
  reports:
    label_overrides:
      starts:
        st: O.S.
        running_number: O.S.
        re: Cl
        horse_no: NºC.
        tid: Tiempo
        tidd: CC. Tiempo
        rider_country: Nac
sv:
  reports:
    label_overrides:
      starts:
        st: St.Nr
        running_number: St.Nr
        re: Pl
        horse_no: H.Nr
        tid: Tid
        tidd: Uth. Tid
        rider_country: Nat

# The translation of these keys must be as short as in English as it's used on the scoreboards with very limited space.
en:
  scoreboard:
    components:
      participants: Total
      remaining: Left
      end_time: Finish
      rank: Rank

Important to get it right

This is importent values to translate correctly.

en:
  meetings:
    navbar:                     # Look at other windows or mac software, these words is often used in menu items. Keep the same that is normally used in your language.
      file: File
      edit: Edit
      go_to: Go to
      tools: Tools
      actions: Actions
      economy: Economy      

en:
  activerecord:
    values:
      start:
        status:
          Ö: Withdrawn            # Withdrawn (configured under show settings, if they have to pay or not)
          ö: Withdrawn by judge   # Withdrawn
          E: Unpaid withdrawn     # Like withdrawn but communicate that the reason is because missing payment
          U: No-show              # Like withdrawn but possibility to add penatly fee (configured under show settings)
          u: No-show by judge     # Same as above but done from the judge tower
          B: Changed competition  # Like withdrawn, but the payer will not be charged for this start
          R: Reserve              # Will not be in the start lists, moved to a queue
          S: Starting notified    # Have told the show office that they are going to start, not used often
        status_short:             # See status above
          Ö: Withdrawn
          ö: withdrawn
          E: Unpaid
          U: No-show
          u: no-show
          B: Changed
          R: Reserve
          S: Starting
        or:                       # See reason below
          A: Abst.
          U: Ret.
          D: Eli.
          S: DQ
        reason:                    # All of these is a result, they will be calculated as starting
          A: Abstained             # This is the easiest to get wrong, Abstained is only used if the start is qualified for jump off, but does not want to participate, this is a result like eliminated or retired.
          U: Retired
          D: Eliminated           
          S: Disqualified          # Often done afterwards, when the competition is finished. Judges take this decision.

What is it?

  • TDB - System for the Swedish federation, should not be translated to something else, this is not visible outside Sweden.
  • Swish - Electronic payment person to person. If something similar exist it can be translated

Contact

Contact us if you are want to translate app.equipe.com to your language. You should know our system well before you start making the translation.