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.
- 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 fromshows_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 or422 Unprocessable entity
with a json response that contains the validation error for failure. - User gets your feedback
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 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_ |
string | \A\d{4}-\d{2}-\d{2}\z | ||
Start date of the show in the format YYYY-MM-DD | ||||
ends_ |
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_ |
boolean | false | ||
Will foreign tax apply or not (When used automatic for people not from foreign_tax_skip) | ||||
foreign_ |
number | 15 | ||
Foreign tax percent | ||||
foreign_ |
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_ |
boolean | false | ||
Will income tax apply or not (When used automatic for people from foreign_tax_skip-country without company) | ||||
income_ |
number | 30 | ||
Income tax percent | ||||
always_ |
array | [] | ||
When income tax is enabled, apply income tax to people from these countries instead of foreign tax. List of IOC codes | ||||
discount_ |
string or null | null | ||
Gives discount for riders that competes for the club with this id (See also Competition#club_discount_percent_applied | ||||
discount_ |
number or null | null | ||
Discount percent for riders that competes for the club (See also Competition#club_discount_percent_applied) | ||||
penalty_ |
number or null | null | ||
Penalty fee for starts marked with status no-show | ||||
credit_ |
array | [] | ||
Possibllty to add credit card fee % on invoices | ||||
accounts accounts | array | ["tdb", "bank", "prepaid", "cash", "credit_card", "swish"] | ||
List of payment accounts | ||||
default_ |
string | "cash" | ||
Default account must also exist in accounts | ||||
prize_ |
integer | 2 | ||
1 = Highest prize money, 2 = Prize money splits | ||||
withdrawn_ |
boolean | true | ||
Will withdrawn starts pay the entry fee or not, when false the entry fee behave like a start fee | ||||
minimum_ |
boolean | false | ||
When enabled it never give less the entry fee in prize money for placed starts | ||||
result_ |
string | "" | ||
Name of the person responsibly for the results | ||||
result_ |
string | "" | ||
Email of the person responsibly for the results | ||||
result_ |
string | "" | ||
Cell phone of the person responsibly for the results | ||||
publish_ |
boolean | false | ||
Publish horse labels to online.equipe.com | ||||
publish_ |
boolean | true | ||
Publish prize money to online.equipe.com | ||||
publish_ |
boolean | true | ||
Publish horse no to online.equipe.com | ||||
horse_ |
boolean | false | ||
Makes it possible to set a tax person on each horse | ||||
custom_ |
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_ |
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_ |
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_ |
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_ |
string | \A\d{4}-\d{2}-\d{2}\z | ||
Start date of the competition, must be the format of YYYY-MM-DD | ||||
start_ |
string | \A\d{2}:\d{2}\z | ||
Start time of the competition must be in the format of HH:MM | ||||
dressage_ |
boolean | false | ||
Lock start times so they are not updated automatic | ||||
horse_ |
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_ |
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_ |
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_ |
boolean | false | ||
When discipline is dressage, this allow individual marking sheet per start in this competition | ||||
fence_ |
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_ |
number or null | |||
Admin fee (no VAT included by for this fee) | ||||
entry_ |
number or null | |||
Entry fee including VAT | ||||
starting_ |
number or null | |||
Starting fee including VAT | ||||
late_ |
number or null | |||
Late entry fee including VAT | ||||
team_ |
number | 0 | ||
Team entry fee including VAT, the payer for each team will receive this fee | ||||
vat_ |
number | 0 | ||
VAT included by % on fees | ||||
entry_ |
array | |||
Define your own entry fees types for this competition | ||||
team_ |
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_ |
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_ |
string | |||
ISO 4217 formatted currency for prize money | ||||
open_ |
boolean | false | ||
Competition open for young horses | ||||
young_ |
number | |||
Young horses Entry fee including VAT | ||||
young_ |
number | |||
Young horses Starting fee including VAT | ||||
young_ |
number | |||
Young horses Late entry fee including VAT | ||||
young_ |
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_ |
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_ |
string | "regulation" | ||
How categories should be merged is defined under each Federation, override the value here | ||||
club_ |
boolean | false | ||
Apply club discount for fees on this competition. Club discount is defined under Show | ||||
reduce_ |
number | null | ||
When fewer starts than the given value, the prize will be reduced with reduce_prize_money_when_fewer_than_percent | ||||
reduce_ |
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_ |
string | |||
last_ |
string | |||
address address | string | |||
zipcode zipcode | string | |||
city city | string | |||
address_ |
string | "" | ||
Full name of the country | ||||
country country | string | "" | ^[A-Z]{3}$ | |
The IOC code of the country the rider is competing for | ||||
work_ |
string | "" | ||
home_ |
string | "" | ||
cell_ |
string | "" | ||
email email | string | "" | ||
licence licence | string | "" | ||
licence_ |
string or integer or null | \A\d{4}\z | ||
The year licence is valid. 4 digits | ||||
club_ |
string or null | null | ||
The club with this ID should be in the clubs-resource | ||||
fei_ |
string | "" | ||
FEI ID for the person | ||||
national_ |
string | "" | ||
passport_ |
string | "" | ||
person_ |
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_ |
string | "" | ||
VAT number for the company | ||||
foreign_ |
boolean or null | null | ||
Apply foreign tax leave as null to make the system auto calculate this | ||||
account_ |
string | "" | ||
account_ |
string | "" | ||
bank_ |
string | "" | ||
iban iban | string | "" | ||
bic bic | string | "" | ||
invoice_ |
integer or null | null | ||
Invoice number generated by the system on print out | ||||
income_ |
number or null | |||
Override the normal income tax percent defined in show settings for this person | ||||
do_ |
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_ |
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_ |
integer | |||
Unless horse no is given, all newly imported horses will be sorted by name and given a number automatic, that is preferable | ||||
born_ |
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_ |
string or integer | \A\d{4}\z | ||
The year licence is valid. 4 digits | ||||
fei_ |
string | "" | ||
ueln ueln | string | |||
chip_ |
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_ |
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_ |
string | "" | ||
dam_ |
string | "" | ||
dams_ |
string | "" | ||
notes notes | string | "" | ||
tax_ |
string or null | |||
ID of the tax person for this horse, the tax person must exist in people | ||||
custom_ |
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_ |
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_ |
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_ |
string | |||
Competition no, the competition must exist in competitions | ||||
rider_ |
string | |||
ID of the rider, the rider must exist in people | ||||
payer_ |
string | |||
ID of the payer, the payer must exist in people | ||||
horse_ |
string | |||
ID of the horse, the horse must exist in people | ||||
individual_ |
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_ |
boolean | false | ||
When true, the late entry fee will be applied | ||||
status status | string | "" | ||
One of "", "withdrawn", "unpaid", "no_show", "changed", "reserve", "starting" | ||||
outside_ |
boolean | false | ||
When true, this start will not be ranked | ||||
custom_ |
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_ |
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_ |
string | |||
last_ |
string | |||
address address | string | |||
zipcode zipcode | string | |||
city city | string | |||
address_ |
string | "" | ||
country country | string | "" | ^[A-Z]{3}$ | |
The IOC code of the country the rider is competing for | ||||
work_ |
string | "" | ||
home_ |
string | "" | ||
cell_ |
string | "" | ||
email email | string | "" | ||
licence licence | string | "" | ||
licence_ |
string or integer or null | \A\d{4}\z | ||
club_ |
string or null | null | ||
Your primary key of the club | ||||
club_ |
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_ |
string | |||
fei_ |
string | "" | ||
FEI ID for the person | ||||
national_ |
string | "" | ||
passport_ |
string | "" | ||
person_ |
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_ |
string | "" | ||
VAT number for the company | ||||
foreign_ |
boolean or null | null | ||
Apply foreign tax leave as null to make the system auto calculate this | ||||
account_ |
string | "" | ||
account_ |
string | "" | ||
bank_ |
string | "" | ||
iban iban | string | "" | ||
bic bic | string | "" | ||
invoice_ |
integer or null | null | ||
Invoice number generated by the system on print out | ||||
income_ |
number or null | |||
Override the normal income tax percent defined in show settings for this person | ||||
do_ |
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_ |
string | |||
last_ |
string | |||
address address | string | |||
zipcode zipcode | string | |||
city city | string | |||
address_ |
string | "" | ||
country country | string | "" | ^[A-Z]{3}$ | |
The IOC code of the country the rider is competing for | ||||
work_ |
string | "" | ||
home_ |
string | "" | ||
cell_ |
string | "" | ||
email email | string | "" | ||
licence licence | string | "" | ||
licence_ |
string or integer or null | \A\d{4}\z | ||
club_ |
string or null | null | ||
Your primary key of the club | ||||
club_ |
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_ |
string | |||
fei_ |
string | "" | ||
FEI ID for the person | ||||
national_ |
string | "" | ||
passport_ |
string | "" | ||
person_ |
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_ |
string | "" | ||
VAT number for the company | ||||
foreign_ |
boolean or null | null | ||
Apply foreign tax leave as null to make the system auto calculate this | ||||
account_ |
string | "" | ||
account_ |
string | "" | ||
bank_ |
string | "" | ||
iban iban | string | "" | ||
bic bic | string | "" | ||
invoice_ |
integer or null | null | ||
Invoice number generated by the system on print out | ||||
income_ |
number or null | |||
Override the normal income tax percent defined in show settings for this person | ||||
do_ |
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.
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.