Connect your lab
Three steps, each a plain JSON request you can also make from your own code. Register to receive an API key, submit a dataset in the record contract, and check where it stands. A person reviews every submission before a connector is built; nothing is wired in automatically.
Register and receive an API key
Only a hash of the key is stored, so it cannot be recovered. Registered as lab . If the key is lost, write to us and a person will issue a new one.
What a record must contain
A submission is a JSON array of records. Every record is checked against the same contract each hand-built connector already satisfies. What follows is exactly what is checked; a record that passes is well-formed, and a person still reads it. The required fields are:
access_method— how the data was obtained, as a short string:open_repository_downloadfor data taken from an open repository (see below), or your own word for anything else, such aspartnership,literature_mining,public_dataset. Only the open-repository value carries extra requirements.compound— the thing measured, by whatever identifier your lab uses (a compound name, a SMILES, a sequence, a sample id). A non-blank string or an integer id; empty is refused.measurements— an object of measured quantities, named by you. Must be an object, not a list or a string. Values are usually numbers; a string (a unit, a qualitative reading) or a list (a value and its error) is accepted and kept as sent. The value types are not checked.source— where the record came from (a paper, a file, a repository record). A non-blank string; a record without provenance is refused.verify_status— one ofCONFIRMED,PARTNERSHIP_SOURCED,UNVERIFIED. Any other value is a violation.
Two more checks: a value starting with REPLACE_, or the example's own
source, compound or quantity names, is a placeholder and is refused, so the example below cannot be submitted unedited.
[
{
"access_method": "partnership",
"compound": "compound-07",
"measurements": {"quantity_name": 1.23, "second_quantity": 4.56},
"source": "your-lab-2026-batch-01",
"verify_status": "CONFIRMED"
}
]
A record whose access_method is open_repository_download
must also carry a license and a record_id or
doi, as fields rather than packed into the source text; add
file_md5 when the record was extracted from a checksummed file. Without them it is a violation.
[
{
"access_method": "open_repository_download",
"compound": "compound-07",
"measurements": {"quantity_name": 1.23, "second_quantity": 4.56},
"source": "your-lab-2026-batch-01",
"verify_status": "CONFIRMED",
"license": "CC-BY-4.0",
"record_id": "REPLACE_WITH_THE_REPOSITORY_RECORD_ID",
"doi": "REPLACE_WITH_THE_DOI_IF_ONE_EXISTS",
"file_md5": "REPLACE_WITH_THE_MD5_OF_THE_SOURCE_FILE"
}
]
Submit a dataset
Up to 5000 records per submission; split a larger dataset
into batches and submit each one.
Every record is validated and the violations come back per record, by index (the first
100 invalid records in detail; the rest are counted and kept with the submission).
Validate only checks the format and writes nothing;
Validate and submit keeps the batch on file for review.
Each request is limited per minute; a refused request answers with an HTTP 4xx and a JSON error, so a script can read it too.
- lab
- status
What happens after you submit
- Each record is validated against the contract above, the same one every hand-built connector meets. Violations come back in the response, by record index.
- The submission is kept on file: the records themselves, valid and invalid apart, with the counts and the violations.
- A person reviews it. A submission with at least one valid record waits for that review; one with none is marked as needing revision until a batch with valid records arrives.
- If approved, a connector is written by hand against your data. It is not generated from the submission, and nothing is wired into the live system by the API itself, however clean the records validate.
- Once connected, your lab appears on the home page with its record count, read on the same schedule and counted in the same violation total as every other lab.
Check where a submission stands
- lab
- lab id
- submissions
- status
What each status means
- registered
- Registered; no dataset submitted yet.
- needs_revision
- Every submission so far had zero valid records. Fix the violations and submit again.
- pending_human_review
- At least one valid submission is on file and is waiting for a person to review it.
- human_approved
- A person approved the lab. A connector is written by hand next; it is not generated automatically.
- human_declined
- A person reviewed the submission and declined it. Write to us if you want the reason.
- approved_with_new_data
- Approved earlier; a new batch has arrived since and waits for a look.
- declined_lab_resubmitted
- Declined earlier; a new batch has arrived since and waits for a look.
Prefer to talk first, or to share data another way? Write to [email protected]. A data-use agreement, attribution, or unpublished data under terms are all conversations a person has, not the API.