Research Resources (RRID)

Identifying the antibodies, cell lines, organisms, software and tools a study used

Overview

A Research Resource Identifier names the specific reagent, organism, cell line, or piece of software a study depended on, so that another researcher can obtain the same thing rather than guess from a prose description.

RRIDs are issued and resolved by SciCrunch. DOCiD attaches them to records and caches the resolved metadata; it does not mint them. An RRID looks like RRID:AB_2298772 or RRID:SCR_002798, where the prefix after the colon indicates the resource class.

This matters for reproducibility in exactly the way a citation does not: "we used an anti-GFP antibody" is unreproducible, while an RRID names the catalogue item.

What an RRID can attach to

Attachment is polymorphic across three entity types:

entity_typeMeaning
publicationA resource the work as a whole used
organizationA resource associated with a contributing organization — for example an identified lab or facility
documentA resource specific to one attached document

The link is polymorphic by design and carries no foreign key: entity_id is a plain integer interpreted according to entity_type. Deleting the referenced entity therefore does not cascade to its RRID rows.

Storage model

docid_rrids

ColumnTypeNotes
entity_typeString(50), NOT NULLpublication | organization | document
entity_idInteger, NOT NULLPolymorphic; no FK
rridString(50), NOT NULLThe identifier as issued
rrid_nameString(500)Resolved name. An empty value is treated as a cache miss
rrid_descriptionTextResolved description
rrid_resource_typeString(100)Antibody, cell line, software, organism, …
rrid_urlString(500)Resolver URL
resolved_jsonJSONThe full SciCrunch payload as resolved
last_resolved_atDateTimeWhen resolution last succeeded

Unique on (entity_type, entity_id, rrid), with a lookup index on (entity_type, entity_id).

Two tables also carry a denormalised rrid string column — publication_documents and publication_organizations — which is what lets a document or organization record an RRID entered as free text without going through the resolution flow.

The shared metadata cache

Resolved RRID metadata is global: RRID:AB_2298772 means the same thing on every record, so DOCiD resolves it once and reuses it. Detail endpoints gather every RRID referenced by a record and satisfy them from one bulk query. Anything still unresolved is fetched from SciCrunch on demand and written back for next time.

docid_rrids mixes attachments with cache entries

A lazily-resolved RRID is written back with entity_type='publication' and entity_id=0 — a sentinel meaning "global metadata cache", not an attachment to publication 0. Any query that counts RRID attachments, or joins docid_rrids to publications, must exclude entity_id = 0 or it will both over-count attachments and try to join against a publication that does not exist.

A row whose rrid_name is empty is treated as a cache miss and re-resolved, which lets records written by an earlier, broken normalisation path heal themselves on next read.

Endpoints

All under /api/v1/rrid.

Method & pathAuthPurpose
GET /searchJWTSearch SciCrunch for a resource
GET /resolveJWTResolve one RRID to its metadata
POST /attachJWT + registered userAttach an RRID to a publication, organization or document
GET /entityNoneRRIDs attached to a given entity
DELETE /<id>JWTDetach an RRID

Search and resolve require authentication because they proxy an upstream service; reading what is already attached to a public record does not.

How RRIDs appear in publication responses

Unlike Local Contexts, RRID data is included in publication detail responses, in two places.

First, as a dedicated collection:

research_resources[]
"research_resources": [
  {
    "id": 12,
    "rrid": "RRID:SCR_002798",
    "rrid_name": "...",
    "rrid_description": "...",
    "rrid_resource_type": "software",
    "rrid_url": "https://scicrunch.org/resolver/RRID:SCR_002798"
  }
]

Second, resolved metadata is merged inline into each entry of publication_documents[] and publication_organizations[] that carries an RRID, so those entries gain the same rrid_name, rrid_description, rrid_resource_type and rrid_url keys. The same resource can therefore appear twice in one response — once in the collection and once inline. That is expected; deduplicate on the rrid value if you are listing resources.

Known gaps

No referential integrity

Because the link is polymorphic with no foreign key, deleting a document or organization leaves its RRID rows behind. Consumers should not assume every row in docid_rrids points at something that still exists.

Resolution depends on an upstream service

When SciCrunch is unreachable, lazy resolution fails quietly and the RRID is returned with its identifier but no resolved name. Render the bare identifier rather than an empty label — the identifier is still citable on its own.