Developers
Connect your tools to Crossling
Read trials, plots, lines and traits and send scores back over BrAPI v2, or send readings from your own weather station. How to sign in, and the limits.
Updated
- BrAPI v2The BrAPI calls Crossling answers, for Field Book, GridScore and your own scripts. How to sign in, filter and page, send scores back, and what the errors mean./brapi/v2/
- Weather station pushSend readings from your own weather station to Crossling with its token: the JSON and CSV it takes, units, time zones, limits, and a script to run from cron./api/v1/weather/stations/push/
Crossling has two public ways in for other software. BrAPI v2 is for field apps like Field Book and GridScore, and for your own scripts: read your trials, plots, lines and traits, and send scores back. The weather station push is for a logger, or a small script beside it, sending readings to one of your program's weather stations.
Both are plain HTTPS with JSON (the push also takes CSV), so any language that can make a web request can use them.
Quick start#
Crossling answers BrAPI at https://crossling.app/brapi/v2/. The server's own description is public, so you can try it now, with no key:
curl https://crossling.app/brapi/v2/serverinfo{
"@context": ["https://brapi.org/jsonld/context/metadata.jsonld"],
"metadata": {
"datafiles": [],
"pagination": {"currentPage": 0, "pageSize": 1, "totalCount": 1, "totalPages": 1},
"status": []
},
"result": {
"serverName": "Crossling",
"calls": [
{"service": "serverinfo", "methods": ["GET"], "versions": ["2.0", "2.1"],
"contentTypes": ["application/json"], "dataTypes": ["application/json"]},
{"service": "studies", "methods": ["GET"], "versions": ["2.0", "2.1"],
"contentTypes": ["application/json"], "dataTypes": ["application/json"]}
]
}
}Everything else needs an access key:
- Sign in to Crossling and open More › Field Book, the Connect page. No account yet? Open the demo and do the same: its keys work for a day.
- Under Keys, name the key after what will use it (say, My laptop) and tap Make a key. Copy it straight away: it's shown only once.
- Ask for your programs, with the key in the
Authorizationheader:
export CROSSLING_KEY='crl_EXAMPLE_00000000000000000000000000000000000'
curl -H "Authorization: Bearer $CROSSLING_KEY" https://crossling.app/brapi/v2/programsThe BrAPI reference has every call, with examples in curl, Python and R. To send weather readings, start with Weather station push.
Signing in#
| Way in | Credential | Where it comes from |
|---|---|---|
| BrAPI | An access key, crl_… | The Connect page, or Field Book's browser sign-in |
| Weather station push | A station token, cwx_… | The station's page in the app: Map, the research station, then Weather stations |
- Send it in the
Authorizationheader, asBearer crl_…orBearer cwx_…. Never put it in the address: addresses end up in logs. The push refuses a token in the address. - Crossling keeps only a hash of each key and token, so each is shown once, when it's made. Lost one? Make a new one, and revoke the old one.
- An access key sees exactly what its person sees in Crossling: their programs' trials, lines and traits, nothing else. It works for 30, 90 or 365 days, and it can be revoked on the Connect page at any time.
- A station token can only add readings to its own station. It can't read anything.
- Treat both like passwords. Keep them out of code you share, and out of shared documents.
Limits at a glance#
| What | Limit |
|---|---|
| BrAPI calls | 10,000 an hour per person |
| BrAPI page size | 1,000 rows by default, 5,000 at most |
| Access keys | 20 working keys per person; 30 made an hour |
| Browser sign-in | 60 code swaps an hour per address |
| Weather pushes | 360 an hour per station token, 1,200 an hour per address |
| One push | 1 MB and 10,000 readings |
Over a rate limit, the answer is 429 Too Many Requests with a Retry-After header: the number of seconds to wait. The BrAPI limits and the push limits have the details.
The web app's own API#
The Crossling web app talks to its server over /api/v1/. That's the app's private API. It isn't documented, it changes whenever the app does, and its schema pages are switched off on crossling.app. Please don't build on it.
For your own scripts, use BrAPI: it's a published standard, and the calls listed in /brapi/v2/serverinfo are the ones Crossling answers. The one address under /api/v1/ that's meant for other software is the weather station push.
When something goes wrong#
The answer usually says why, in words. A BrAPI error is a short string with the reason, like "ERROR - 2026-11-08T16:04:16Z - Missing or expired authorization token", and scores that weren't saved are listed with their reasons. A push lists the rows it left out and why. The same reasons show in the app: on the Connect page beside the key that sent the scores, and on the station's page for its last push.