POST /api/dryad/datasets/search
Price: 20 credits
Search Dryad datasets by free text, author affiliation, journal ISSN, member organisation and last change date. Every row is the complete dataset record — title, abstract, authors, funders, licence, keywords, related publication and usage counters — so no follow-up call is needed for the metadata.
Prefer this over /dryad/datasets when you have a topic, an institution or a journal rather than a DOI: a row here carries the same fields the single-dataset endpoint returns, so there is nothing to hydrate. `affiliation_ror` wants the full https://ror.org/... address, not a bare ROR id or an institution name. Dryad ignores a filter value it cannot parse — a malformed `modified_since` silently returns unfiltered results — so check the dates on the rows you get back. There is no ordering control; results come newest change first. A query almost always matches far more datasets than one call returns, so narrow it with `journal_issn` or `affiliation_ror` rather than raising `count` and hoping to see them all.
access-token string requiredtimeout integer — Max scrapping execution timeout (in seconds) (default: 300; min: 20; max: 1500)query string nullable — Free-text query matched against the title, abstract and keywords. Leave it out to browse the whole repository, newest change first (examples: "climate", "population genomics"; minLength: 1)affiliation_ror string nullable — Keep only datasets with an author affiliated to this organisation, as its full ROR address (examples: "https://ror.org/00hx57361"; minLength: 1)journal_issn string nullable — Keep only datasets whose related publication appeared in the journal with this ISSN (examples: "0962-1083"; minLength: 1)tenant string nullable — Keep only datasets submitted through this Dryad member organisation's portal, as its short tenant name (examples: "ucop"; minLength: 1)modified_since string nullable — Keep only datasets changed on or after this moment, as an ISO 8601 timestamp. Dryad ignores a value it cannot parse instead of reporting it (examples: "2026-01-01T00:00:00Z"; minLength: 1)count integer required — Max number of results (examples: 50; min: 1; max: 1000)@type string (default: "DryadDataset")id string requiredurl string requireddownload_url string nullableabstract string nullablemethods string nullableusage_notes string nullablehuman_subjects_statement string nullablepublication_date string nullablelast_modification_date string nullablelicense_url string nullablefield_of_science string nullablecuration_status string nullableversion_status string nullableversion_number integer nullableversion_changes string nullableversion_id string nullablevisibility string nullablestorage_size integer nullablerelated_publication_issn string nullableinternal_id string nullablekeywords array (default: [])locations array (default: [])authors array (default: [])@type string (default: "DryadAuthor")full_name string requiredfirst_name string nullablelast_name string nullableorcid string nullableemail string nullableorder integer nullableaffiliations array (default: [])@type string (default: "DryadAffiliation")name string requiredror_url string nullablefunders array (default: [])@type string (default: "DryadFunder")name string nullableidentifier string nullableidentifier_type string nullableaward_number string nullableaward_title string nullableaward_description string nullableaward_url string nullableorder integer nullablerelated_works array (default: [])@type string (default: "DryadRelatedWork")identifier string requiredidentifier_type string nullablerelationship string nullablemetrics object nullable@type string (default: "DryadMetrics")view_count integer nullabledownload_count integer nullablecitation_count integer nullable422 — The request body did not validate Check the fields against this schema. A URN with the wrong prefix is the most common cause.408 — The request ran past its time limit Raise `timeout` in the request body, up to the maximum this endpoint documents. Lowering `count` or turning off the `with_*` flags also helps, because less work finishes sooner.412 — The entity was not found, or a precondition failed Retrying will not help: either the entity does not exist, or the input points at a different one.429 — Too many requests: a rate limit or a usage window is exhausted When the response carries an X-Retry-After header, wait that many seconds and retry: the same number is in the body as `detail.retry_after`, and the limit clears once that window passes. The message in the body names the limit that was hit.500 — Something broke on our side Retrying will not help. If it keeps happening, send us the X-Request-ID from the response headers.529 — Rate limit reached, or the endpoint is overloaded Wait at least 30 seconds, then retry.X-Error — Error message text (present only on error)X-Request-ID — Unique request identifierX-Execution-Time — Execution time in secondsX-Result-Count — How many records the body carries. 0 means an empty result, which is a normal answer and not by itself an error. A non-zero count can come back together with X-Error when the failure happened partway through — read this header and X-Error independently.X-Total-Available-Results — How many records exist for this query, when the endpoint can say. On a `dry_run` request this is the answer and the body is empty. It saturates: the endpoint's documented maximum means 'at least that many', any smaller number is exact.X-Warning — Present when the request body carried keys this endpoint does not document. They were ignored, so any filter you meant to apply through them did not apply. Check the spelling against this schema and retry.X-Retry-After — Seconds to wait before retrying. Present only on 429.