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.

STEP 1 · POST /api/labs/register

Register and receive an API key

One registration per email. A person will write to this address about your submission.

THE RECORD CONTRACT

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 of CONFIRMED, PARTNERSHIP_SOURCED, UNVERIFIED. Any other value is a violation.
A minimal valid record:
[
  {
    "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"
  }
]
STEP 2 · POST /api/labs/submit

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.

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.
STEP 3 · POST /api/labs/status

Check where a submission stands

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.