Skip to content

API-key authenticated Legaciti API for publication discovery and person browsing. The ingestion entrypoint is documented separately because it is intended for controlled clients.

API-key authenticated Legaciti API for publication discovery and person browsing. The ingestion entrypoint is documented separately because it is intended for controlled clients.

Version: 1.0.0

Raw OpenAPI JSON: /openapi/consumer-api.json

MethodPathSummary
GET/healthHealth check

Health check Simple worker health endpoint. Authentication: Public Tags: Health

No parameters.

No request body.

Content type: application/json

{
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"ok"
]
}
},
"required": [
"status"
]
}
MethodPathSummary
POST/api/ingestQueue public ingestion

Queue public ingestion Queues one or more ORCID ingestion jobs from the public API surface. Requires a super-admin full-access key. Authentication: API key (X-API-Key) Tags: Ingestion

No parameters.

Content type: application/json

{
"type": "object",
"properties": {
"orcid_ids": {
"minItems": 1,
"maxItems": 100,
"type": "array",
"items": {
"type": "string",
"minLength": 1
}
}
},
"required": [
"orcid_ids"
],
"additionalProperties": false
}

Content type: application/json

{
"type": "object",
"properties": {
"queued": {
"type": "integer"
},
"requested": {
"type": "integer"
}
},
"required": [
"queued",
"requested"
]
}

Content type: application/json

{
"type": "object",
"properties": {
"error": {
"type": "string"
},
"details": {
"oneOf": [
{
"type": "object",
"additionalProperties": true
},
{
"type": "null"
}
]
}
},
"required": [
"error"
],
"additionalProperties": true
}

403 - API key is inactive or missing required scope.

Section titled “403 - API key is inactive or missing required scope.”

Content type: application/json

{
"type": "object",
"properties": {
"error": {
"type": "string"
},
"details": {
"oneOf": [
{
"type": "object",
"additionalProperties": true
},
{
"type": "null"
}
]
}
},
"required": [
"error"
],
"additionalProperties": true
}

Content type: application/json

{
"type": "object",
"properties": {
"error": {
"type": "string"
},
"details": {
"oneOf": [
{
"type": "object",
"additionalProperties": true
},
{
"type": "null"
}
]
}
},
"required": [
"error"
],
"additionalProperties": true
}

500 - API key logging or migration setup is incomplete.

Section titled “500 - API key logging or migration setup is incomplete.”

Content type: application/json

{
"type": "object",
"properties": {
"error": {
"type": "string"
},
"details": {
"oneOf": [
{
"type": "object",
"additionalProperties": true
},
{
"type": "null"
}
]
}
},
"required": [
"error"
],
"additionalProperties": true
}
MethodPathSummary
POST/api/partners/people/{orcid}/membershipUpdate person CESAM membership

POST /api/partners/people/{orcid}/membership

Section titled “POST /api/partners/people/{orcid}/membership”

Update person CESAM membership Updates membership status for an existing person. Restricted to CESAM entity transitions and requires a super-admin full-access key. Authentication: API key (X-API-Key) Tags: Partners

NameInTypeRequiredDescription
orcidpathstringyesPerson ORCID identifier.

Content type: application/json

{
"type": "object",
"properties": {
"entity_id": {
"type": "string",
"const": "cesam"
},
"status": {
"type": "string",
"enum": [
"cesam",
"external"
]
},
"starts_at": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
}
},
"required": [
"entity_id",
"status"
],
"additionalProperties": false
}

Content type: application/json

{
"type": "object",
"properties": {
"success": {
"type": "boolean"
},
"affiliation": {
"type": "object",
"properties": {
"person_orcid": {
"type": "string"
},
"entity_id": {
"type": "string"
},
"status": {
"type": "string",
"enum": [
"cesam",
"external"
]
},
"starts_at": {
"type": "integer"
},
"ends_at": {
"type": "null"
}
},
"required": [
"person_orcid",
"entity_id",
"status",
"starts_at",
"ends_at"
]
}
},
"required": [
"success",
"affiliation"
]
}

Content type: application/json

{
"type": "object",
"properties": {
"error": {
"type": "string"
},
"details": {
"oneOf": [
{
"type": "object",
"additionalProperties": true
},
{
"type": "null"
}
]
}
},
"required": [
"error"
],
"additionalProperties": true
}

Content type: application/json

{
"type": "object",
"properties": {
"error": {
"type": "string"
},
"details": {
"oneOf": [
{
"type": "object",
"additionalProperties": true
},
{
"type": "null"
}
]
}
},
"required": [
"error"
],
"additionalProperties": true
}

403 - API key is inactive or missing required scope.

Section titled “403 - API key is inactive or missing required scope.”

Content type: application/json

{
"type": "object",
"properties": {
"error": {
"type": "string"
},
"details": {
"oneOf": [
{
"type": "object",
"additionalProperties": true
},
{
"type": "null"
}
]
}
},
"required": [
"error"
],
"additionalProperties": true
}

Content type: application/json

{
"type": "object",
"properties": {
"error": {
"type": "string"
},
"details": {
"oneOf": [
{
"type": "object",
"additionalProperties": true
},
{
"type": "null"
}
]
}
},
"required": [
"error"
],
"additionalProperties": true
}

Content type: application/json

{
"type": "object",
"properties": {
"error": {
"type": "string"
},
"details": {
"oneOf": [
{
"type": "object",
"additionalProperties": true
},
{
"type": "null"
}
]
}
},
"required": [
"error"
],
"additionalProperties": true
}

500 - API key logging or migration setup is incomplete.

Section titled “500 - API key logging or migration setup is incomplete.”

Content type: application/json

{
"type": "object",
"properties": {
"error": {
"type": "string"
},
"details": {
"oneOf": [
{
"type": "object",
"additionalProperties": true
},
{
"type": "null"
}
]
}
},
"required": [
"error"
],
"additionalProperties": true
}
MethodPathSummary
GET/v1/peopleList installation-authenticated people
GET/v1/people/{orcid}Get installation-authenticated person
GET/v1/people/{orcid}/publicationsList installation-authenticated person publications

List installation-authenticated people Returns people that have at least one visible public publication. Requires installation credentials with people.read scope. Authentication: API key (X-API-Key) Tags: People

NameInTypeRequiredDescription
pagequeryintegeryes1-based page number.
per_pagequeryintegeryesItems per page.
qquerystringyesSearch term for name or ORCID.

No request body.

Content type: application/json

{
"type": "object",
"properties": {
"people": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
}
},
"page": {
"type": "integer"
},
"per_page": {
"type": "integer"
},
"total": {
"type": "integer"
},
"pages": {
"type": "integer"
},
"q": {
"type": "string"
}
},
"required": [
"people",
"page",
"per_page",
"total",
"pages",
"q"
]
}

Content type: application/json

{
"type": "object",
"properties": {
"error": {
"type": "string"
},
"details": {
"oneOf": [
{
"type": "object",
"additionalProperties": true
},
{
"type": "null"
}
]
}
},
"required": [
"error"
],
"additionalProperties": true
}

Get installation-authenticated person Returns a single person and the count of public publications linked to that ORCID. Requires installation credentials with people.read scope. Authentication: API key (X-API-Key) Tags: People

NameInTypeRequiredDescription
orcidpathstringyesPerson ORCID identifier.

No request body.

Content type: application/json

{
"type": "object",
"additionalProperties": true
}

Content type: application/json

{
"type": "object",
"properties": {
"error": {
"type": "string"
},
"details": {
"oneOf": [
{
"type": "object",
"additionalProperties": true
},
{
"type": "null"
}
]
}
},
"required": [
"error"
],
"additionalProperties": true
}

List installation-authenticated person publications Returns visible public publications linked to a single person. Requires installation credentials with people.read scope. Authentication: API key (X-API-Key) Tags: People

NameInTypeRequiredDescription
orcidpathstringyesPerson ORCID identifier.
pagequeryintegeryes1-based page number.
per_pagequeryintegeryesItems per page.
sortquerystringyesSort field.
dirquerystringyesSort direction.

No request body.

200 - Paginated public publication list for one person.

Section titled “200 - Paginated public publication list for one person.”

Content type: application/json

{
"type": "object",
"properties": {
"publications": {
"type": "array",
"items": {
"type": "object",
"properties": {
"doi": {
"type": "string"
},
"title": {
"type": [
"string",
"null"
]
},
"doi_url": {
"type": "string"
},
"publication_date": {
"type": [
"string",
"null"
]
},
"publication_year": {
"type": [
"integer",
"null"
]
},
"publication_type": {
"type": [
"string",
"null"
]
},
"cited_by_count": {
"type": [
"integer",
"null"
]
},
"last_fetched_at": {
"type": "integer"
}
},
"required": [
"doi",
"doi_url",
"last_fetched_at"
]
}
},
"page": {
"type": "integer"
},
"per_page": {
"type": "integer"
},
"total": {
"type": "integer"
},
"pages": {
"type": "integer"
},
"sort": {
"type": "string"
},
"dir": {
"type": "string"
},
"q": {
"type": "string"
},
"publication_type": {
"type": [
"string",
"null"
]
},
"publication_year": {
"type": [
"integer",
"null"
]
},
"min_cited_by": {
"type": [
"integer",
"null"
]
}
},
"required": [
"publications",
"page",
"per_page",
"total",
"pages",
"sort",
"dir",
"q"
]
}

Content type: application/json

{
"type": "object",
"properties": {
"error": {
"type": "string"
},
"details": {
"oneOf": [
{
"type": "object",
"additionalProperties": true
},
{
"type": "null"
}
]
}
},
"required": [
"error"
],
"additionalProperties": true
}
MethodPathSummary
GET/v1/projectsList public projects
GET/v1/projects/{id}Get public project by ID

List public projects Returns visible, non-deleted projects with pagination, search, and sorting. Authentication: Public Tags: Projects

NameInTypeRequiredDescription
pagequeryintegeryes1-based page number.
per_pagequeryintegeryesItems per page.
qquerystringyesSearch term for programme, title, or abstract.
sortquerystringyesSort field.
dirquerystringyesSort direction.
funding_currencyquerystringnoFunding currency filter.

No request body.

Content type: application/json

{
"type": "object",
"properties": {
"projects": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"programme": {
"type": "string"
},
"title": {
"type": "string"
},
"abstract": {
"type": [
"string",
"null"
]
},
"start_date": {
"type": [
"string",
"null"
]
},
"end_date": {
"type": [
"string",
"null"
]
},
"href": {
"type": "string"
}
},
"required": [
"id",
"programme",
"title",
"href"
]
}
},
"page": {
"type": "integer"
},
"per_page": {
"type": "integer"
},
"total": {
"type": "integer"
},
"pages": {
"type": "integer"
},
"sort": {
"type": "string"
},
"dir": {
"type": "string"
},
"q": {
"type": "string"
},
"funding_currency": {
"type": [
"string",
"null"
]
}
},
"required": [
"projects",
"page",
"per_page",
"total",
"pages",
"sort",
"dir",
"q"
]
}

Content type: application/json

{
"type": "object",
"properties": {
"error": {
"type": "string"
},
"details": {
"oneOf": [
{
"type": "object",
"additionalProperties": true
},
{
"type": "null"
}
]
}
},
"required": [
"error"
],
"additionalProperties": true
}

Get public project by ID Returns a visible non-deleted project and linked members/coordinators. Authentication: Public Tags: Projects

NameInTypeRequiredDescription
idpathstringyesProject identifier.

No request body.

Content type: application/json

{
"type": "object",
"properties": {
"id": {
"type": "string"
},
"programme": {
"type": "string"
},
"title": {
"type": "string"
},
"abstract": {
"type": [
"string",
"null"
]
},
"start_date": {
"type": [
"string",
"null"
]
},
"end_date": {
"type": [
"string",
"null"
]
},
"member_orcids": {
"type": "array",
"items": {
"type": "string"
}
},
"coordinator_orcids": {
"type": "array",
"items": {
"type": "string"
}
},
"data": {
"type": "object",
"additionalProperties": true
}
},
"required": [
"id",
"programme",
"title",
"member_orcids"
]
}

Content type: application/json

{
"type": "object",
"properties": {
"error": {
"type": "string"
},
"details": {
"oneOf": [
{
"type": "object",
"additionalProperties": true
},
{
"type": "null"
}
]
}
},
"required": [
"error"
],
"additionalProperties": true
}
MethodPathSummary
GET/v1/publicationsList visible publications
GET/v1/doi/{doi}Get visible publication by DOI

List visible publications Returns public publications with search, sort, and metadata filters. Authentication: Public Tags: Publications

NameInTypeRequiredDescription
pagequeryintegeryes1-based page number.
per_pagequeryintegeryesItems per page.
qquerystringyesTitle search term.
sortquerystringyesSort field.
dirquerystringyesSort direction.
publication_typequerystringnoPublication type filter.
publication_yearqueryintegernoPublication year filter.
min_cited_byqueryintegernoMinimum citation count filter.

No request body.

Content type: application/json

{
"type": "object",
"properties": {
"publications": {
"type": "array",
"items": {
"type": "object",
"properties": {
"doi": {
"type": "string"
},
"title": {
"type": [
"string",
"null"
]
},
"doi_url": {
"type": "string"
},
"publication_date": {
"type": [
"string",
"null"
]
},
"publication_year": {
"type": [
"integer",
"null"
]
},
"publication_type": {
"type": [
"string",
"null"
]
},
"cited_by_count": {
"type": [
"integer",
"null"
]
},
"last_fetched_at": {
"type": "integer"
}
},
"required": [
"doi",
"doi_url",
"last_fetched_at"
]
}
},
"page": {
"type": "integer"
},
"per_page": {
"type": "integer"
},
"total": {
"type": "integer"
},
"pages": {
"type": "integer"
},
"sort": {
"type": "string"
},
"dir": {
"type": "string"
},
"q": {
"type": "string"
},
"publication_type": {
"type": [
"string",
"null"
]
},
"publication_year": {
"type": [
"integer",
"null"
]
},
"min_cited_by": {
"type": [
"integer",
"null"
]
}
},
"required": [
"publications",
"page",
"per_page",
"total",
"pages",
"sort",
"dir",
"q"
]
}

Content type: application/json

{
"type": "object",
"properties": {
"error": {
"type": "string"
},
"details": {
"oneOf": [
{
"type": "object",
"additionalProperties": true
},
{
"type": "null"
}
]
}
},
"required": [
"error"
],
"additionalProperties": true
}

Get visible publication by DOI Returns the merged visible publication payload for a DOI when the record is public. Authentication: Public Tags: Publications

NameInTypeRequiredDescription
doipathstringyesDOI path parameter, URL-encoded if necessary.

No request body.

Content type: application/json

{
"type": "object",
"properties": {
"doi": {
"type": "string"
},
"data": {
"type": "object",
"additionalProperties": true
},
"publication_date": {
"type": [
"string",
"null"
]
},
"publication_year": {
"type": [
"integer",
"null"
]
},
"publication_type": {
"type": [
"string",
"null"
]
},
"cited_by_count": {
"type": [
"integer",
"null"
]
},
"is_retracted": {
"type": "boolean"
},
"open_access_status": {
"type": [
"string",
"null"
]
},
"enriched_metadata": {
"oneOf": [
{
"type": "object",
"additionalProperties": true
},
{
"type": "null"
}
]
},
"last_fetched_at": {
"type": "integer"
},
"last_edited_at": {
"type": [
"integer",
"null"
]
},
"edit_count": {
"type": "integer"
}
},
"required": [
"doi",
"data",
"is_retracted",
"last_fetched_at",
"edit_count"
]
}

404 - Publication not found or not public.

Section titled “404 - Publication not found or not public.”

Content type: application/json

{
"type": "object",
"properties": {
"error": {
"type": "string"
},
"details": {
"oneOf": [
{
"type": "object",
"additionalProperties": true
},
{
"type": "null"
}
]
}
},
"required": [
"error"
],
"additionalProperties": true
}