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. The required fields are:
access_method— how the data was obtained:open_repository_download,partnership,other.compound— the thing measured, by whatever identifier your lab uses (a compound name, a SMILES, a sequence, a sample id).measurements— an object of measured quantities, named by you, with numeric values. Must be an object, not a list or a string.source— where the record came from (a paper, a file, a repository record). Must be non-empty; a record without provenance is refused.verify_status— one ofCONFIRMED,PARTNERSHIP_SOURCED,UNVERIFIED. Any other value is a violation.
[
{
"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.
- 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.