Public API
Public Legaciti API for publication discovery and researcher browsing. The ingestion entrypoint is documented separately because it is intended for controlled clients.
Version: 1.0.0
Raw OpenAPI JSON: /openapi/public-api.json
Servers
Section titled “Servers”- https://api.legaciti.org - Public API domain
Endpoints
Section titled “Endpoints”Health
Section titled “Health”| Method | Path | Summary |
|---|---|---|
| GET | /health | Health check |
GET /health
Section titled “GET /health”Health check Simple worker health endpoint. Authentication: Public Tags: Health
Parameters
Section titled “Parameters”No parameters.
Request Body
Section titled “Request Body”No request body.
Responses
Section titled “Responses”200 - Worker health response.
Section titled “200 - Worker health response.”Content type: application/json
{ "type": "object", "properties": { "status": { "type": "string", "enum": [ "ok" ] } }, "required": [ "status" ]}Ingestion
Section titled “Ingestion”| Method | Path | Summary |
|---|---|---|
| POST | /api/ingest | Queue public ingestion |
POST /api/ingest
Section titled “POST /api/ingest”Queue public ingestion Queues one or more ORCID ingestion jobs from the public API surface. Intended for controlled clients using API keys. Authentication: API key (X-API-Key) Tags: Ingestion
Parameters
Section titled “Parameters”No parameters.
Request Body
Section titled “Request Body”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}Responses
Section titled “Responses”202 - Queued public ingestion requests.
Section titled “202 - Queued public ingestion requests.”Content type: application/json
{ "type": "object", "properties": { "queued": { "type": "integer" }, "requested": { "type": "integer" } }, "required": [ "queued", "requested" ]}Publications
Section titled “Publications”| Method | Path | Summary |
|---|---|---|
| GET | /v1/publications | List visible publications |
| GET | /v1/doi/{doi} | Get visible publication by DOI |
GET /v1/publications
Section titled “GET /v1/publications”List visible publications Returns public publications with search, sort, and metadata filters. Authentication: Public Tags: Publications
Parameters
Section titled “Parameters”| Name | In | Type | Required | Description |
|---|---|---|---|---|
| page | query | integer | yes | 1-based page number. |
| per_page | query | integer | yes | Items per page. |
| q | query | string | yes | Title search term. |
| sort | query | string | yes | Sort field. |
| dir | query | string | yes | Sort direction. |
| publication_type | query | string | no | Publication type filter. |
| publication_year | query | integer | no | Publication year filter. |
| min_cited_by | query | integer | no | Minimum citation count filter. |
Request Body
Section titled “Request Body”No request body.
Responses
Section titled “Responses”200 - Paginated public publication list.
Section titled “200 - Paginated public publication list.”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" ]}400 - Invalid query parameters.
Section titled “400 - Invalid query parameters.”Content type: application/json
{ "type": "object", "properties": { "error": { "type": "string" }, "details": { "oneOf": [ { "type": "object", "additionalProperties": true }, { "type": "null" } ] } }, "required": [ "error" ], "additionalProperties": true}GET /v1/doi/{doi}
Section titled “GET /v1/doi/{doi}”Get visible publication by DOI Returns the merged visible publication payload for a DOI when the record is public. Authentication: Public Tags: Publications
Parameters
Section titled “Parameters”| Name | In | Type | Required | Description |
|---|---|---|---|---|
| doi | path | string | yes | DOI path parameter, URL-encoded if necessary. |
Request Body
Section titled “Request Body”No request body.
Responses
Section titled “Responses”200 - Public publication detail payload.
Section titled “200 - Public publication detail payload.”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}Researchers
Section titled “Researchers”| Method | Path | Summary |
|---|---|---|
| GET | /v1/researchers | List public researchers |
| GET | /v1/researchers/{orcid} | Get public researcher |
| GET | /v1/researchers/{orcid}/publications | List public researcher publications |
GET /v1/researchers
Section titled “GET /v1/researchers”List public researchers Returns researchers that have at least one visible public publication. Authentication: Public Tags: Researchers
Parameters
Section titled “Parameters”| Name | In | Type | Required | Description |
|---|---|---|---|---|
| page | query | integer | yes | 1-based page number. |
| per_page | query | integer | yes | Items per page. |
| q | query | string | yes | Search term for name or ORCID. |
Request Body
Section titled “Request Body”No request body.
Responses
Section titled “Responses”200 - Paginated public researcher list.
Section titled “200 - Paginated public researcher list.”Content type: application/json
{ "type": "object", "properties": { "researchers": { "type": "array", "items": { "type": "object", "additionalProperties": true } }, "page": { "type": "integer" }, "per_page": { "type": "integer" }, "total": { "type": "integer" }, "pages": { "type": "integer" }, "q": { "type": "string" } }, "required": [ "researchers", "page", "per_page", "total", "pages", "q" ]}400 - Invalid query parameters.
Section titled “400 - Invalid query parameters.”Content type: application/json
{ "type": "object", "properties": { "error": { "type": "string" }, "details": { "oneOf": [ { "type": "object", "additionalProperties": true }, { "type": "null" } ] } }, "required": [ "error" ], "additionalProperties": true}GET /v1/researchers/{orcid}
Section titled “GET /v1/researchers/{orcid}”Get public researcher Returns a single researcher and the count of public publications linked to that ORCID. Authentication: Public Tags: Researchers
Parameters
Section titled “Parameters”| Name | In | Type | Required | Description |
|---|---|---|---|---|
| orcid | path | string | yes | Researcher ORCID identifier. |
Request Body
Section titled “Request Body”No request body.
Responses
Section titled “Responses”200 - Public researcher detail payload.
Section titled “200 - Public researcher detail payload.”Content type: application/json
{ "type": "object", "additionalProperties": true}404 - Researcher not found.
Section titled “404 - Researcher not found.”Content type: application/json
{ "type": "object", "properties": { "error": { "type": "string" }, "details": { "oneOf": [ { "type": "object", "additionalProperties": true }, { "type": "null" } ] } }, "required": [ "error" ], "additionalProperties": true}GET /v1/researchers/{orcid}/publications
Section titled “GET /v1/researchers/{orcid}/publications”List public researcher publications Returns visible public publications linked to a single researcher. Authentication: Public Tags: Researchers
Parameters
Section titled “Parameters”| Name | In | Type | Required | Description |
|---|---|---|---|---|
| orcid | path | string | yes | Researcher ORCID identifier. |
| page | query | integer | yes | 1-based page number. |
| per_page | query | integer | yes | Items per page. |
| sort | query | string | yes | Sort field. |
| dir | query | string | yes | Sort direction. |
Request Body
Section titled “Request Body”No request body.
Responses
Section titled “Responses”200 - Paginated public publication list for one researcher.
Section titled “200 - Paginated public publication list for one researcher.”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" ]}400 - Invalid query parameters.
Section titled “400 - Invalid query parameters.”Content type: application/json
{ "type": "object", "properties": { "error": { "type": "string" }, "details": { "oneOf": [ { "type": "object", "additionalProperties": true }, { "type": "null" } ] } }, "required": [ "error" ], "additionalProperties": true}