# Zenodo — Wrapped API

> **You are on:** `https://api.paywithlocus.com/api` | [llms.txt](https://paywithlocus.com/llms.txt) | [docs](https://docs.paywithlocus.com)
>
> Locus runs on multiple environments -- make sure every URL you call matches your expected environment.
> | Environment | Landing | API | Docs |
> |---|---|---|---|
> | Production | paywithlocus.com | api.paywithlocus.com | docs.paywithlocus.com |
> | Beta | beta.paywithlocus.com | api.beta.paywithlocus.com | docs.paywithlocus.com |
> | Stage | stage.paywithlocus.com | api.stage.paywithlocus.com | docs.paywithlocus.com |
>
> If the API URL above doesn't match your expected environment, re-fetch this file from the correct domain.

> Search and retrieve research records, files, versions, and community data from Zenodo's open science repository. Access detailed information about academic publications, datasets, and research outputs, including file listings, version history, and community collections all in one place.

**Category:** Education | **Website:** [zenodo.org/](https://zenodo.org/) | **Docs:** [parse.bot/marketplace/e9640d76-4402-404b-b6af-615676aef9e6/zenodo-org-api](https://parse.bot/marketplace/e9640d76-4402-404b-b6af-615676aef9e6/zenodo-org-api)

Pay-per-use API proxy. Each call is automatically billed to your wallet in USDC.

## Access

**Base URL:** `https://api.paywithlocus.com/api/wrapped/parse-zenodo-org-api-e9640d76/`
**Auth:** `Authorization: Bearer <LOCUS_API_KEY>`

## Endpoints

### get_community

Retrieve details of a specific Zenodo community by its slug or UUID. Returns community metadata, access policies, and links.

**Estimated cost:** Metered

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `community_id` | string | Yes | Community slug (e.g. 'zenodo') or UUID. |

```bash
curl -X POST https://api.paywithlocus.com/api/wrapped/parse-zenodo-org-api-e9640d76/get_community \
  -H "Authorization: Bearer YOUR_LOCUS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"community_id":"<string>"}'
```

### get_latest_record_version

Retrieve the latest version of a Zenodo record. Useful when a non-latest record ID is passed to obtain the most current version. Returns full record metadata identical in shape to get_record.

**Estimated cost:** Metered

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `record_id` | string | Yes | Zenodo record ID (numeric string, e.g. '14611580'). |

```bash
curl -X POST https://api.paywithlocus.com/api/wrapped/parse-zenodo-org-api-e9640d76/get_latest_record_version \
  -H "Authorization: Bearer YOUR_LOCUS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"record_id":"<string>"}'
```

### get_record

Retrieve full metadata for a specific Zenodo record by its numeric ID. Returns comprehensive record details including metadata, files, stats, and links. The record must be publicly accessible.

**Estimated cost:** Metered

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `record_id` | string | Yes | Zenodo record ID (numeric string, e.g. '14611580'). |

```bash
curl -X POST https://api.paywithlocus.com/api/wrapped/parse-zenodo-org-api-e9640d76/get_record \
  -H "Authorization: Bearer YOUR_LOCUS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"record_id":"<string>"}'
```

### get_record_files

Retrieve the list of files attached to a Zenodo record. Returns file metadata including name, size, MIME type, checksum, and download links. Only available for records with public file access.

**Estimated cost:** Metered

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `record_id` | string | Yes | Zenodo record ID (numeric string, e.g. '14611580'). |

```bash
curl -X POST https://api.paywithlocus.com/api/wrapped/parse-zenodo-org-api-e9640d76/get_record_files \
  -H "Authorization: Bearer YOUR_LOCUS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"record_id":"<string>"}'
```

### get_record_stats

Get view and download statistics for a Zenodo record. Returns both per-version (this_version) and all-version aggregate counts including views, unique views, downloads, unique downloads, and data volume.

**Estimated cost:** Metered

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `record_id` | string | Yes | Zenodo record ID (numeric string, e.g. '14611580'). |

```bash
curl -X POST https://api.paywithlocus.com/api/wrapped/parse-zenodo-org-api-e9640d76/get_record_stats \
  -H "Authorization: Bearer YOUR_LOCUS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"record_id":"<string>"}'
```

### get_record_versions

Retrieve version history for a Zenodo record. Returns all versions of the record as a list ordered by version index.

**Estimated cost:** Metered

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `record_id` | string | Yes | Zenodo record ID (numeric string, e.g. '14611580'). |

```bash
curl -X POST https://api.paywithlocus.com/api/wrapped/parse-zenodo-org-api-e9640d76/get_record_versions \
  -H "Authorization: Bearer YOUR_LOCUS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"record_id":"<string>"}'
```

### list_communities

List or search for Zenodo communities. Returns paginated results with aggregations for type, funder, and organization facets. Without a query, returns all communities.

**Estimated cost:** Metered

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `page` | integer | No | Page number for pagination. |
| `q` | string | No | Search query for communities. |
| `size` | integer | No | Number of results per page. |
| `sort` | string | No | Sort order. |

```bash
curl -X POST https://api.paywithlocus.com/api/wrapped/parse-zenodo-org-api-e9640d76/list_communities \
  -H "Authorization: Bearer YOUR_LOCUS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"page":"<integer>","q":"<string>","size":"<integer>","sort":"<string>"}'
```

### search_and_extract_results

High-level search that returns a normalized flat list of publication data including metadata and download links. Extracts key fields from Zenodo search results into a simplified format with title, authors, date, abstract, DOI, keywords, language, source journal, and primary file download URL.

**Estimated cost:** Metered

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `page` | integer | No | Page number for pagination. |
| `q` | string | Yes | Search query string. |
| `size` | integer | No | Number of results per page. |

```bash
curl -X POST https://api.paywithlocus.com/api/wrapped/parse-zenodo-org-api-e9640d76/search_and_extract_results \
  -H "Authorization: Bearer YOUR_LOCUS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"page":"<integer>","q":"<string>","size":"<integer>"}'
```

### search_records

Search Zenodo records with various filters and pagination. Returns paginated results with aggregations for faceted filtering. Supports query syntax, resource type/subtype filtering, community membership filtering, and access-right filtering. Results are ordered by sort parameter.

**Estimated cost:** Metered

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `access_right` | string | No | Filter by access right. |
| `communities` | string | No | Filter by community slug. |
| `page` | integer | No | Page number for pagination. |
| `q` | string | Yes | Search query string. |
| `resource_type` | string | No | Filter by resource type (e.g., 'publication', 'dataset'). |
| `size` | integer | No | Number of results per page. |
| `sort` | string | No | Sort order. |
| `subtype` | string | No | Filter by resource subtype (e.g., 'article', 'preprint'). |
| `type` | string | No | Filter by resource type (e.g., 'publication', 'software', 'dataset'). |

```bash
curl -X POST https://api.paywithlocus.com/api/wrapped/parse-zenodo-org-api-e9640d76/search_records \
  -H "Authorization: Bearer YOUR_LOCUS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"access_right":"<string>","communities":"<string>","page":"<integer>","q":"<string>","resource_type":"<string>","size":"<integer>","sort":"<string>","subtype":"<string>","type":"<string>"}'
```

### search_records_in_community

Search records within a specific Zenodo community. Returns paginated results filtered by community membership. Uses the community slug as a filter parameter on the records search endpoint.

**Estimated cost:** Metered

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `community_id` | string | Yes | Community slug (e.g. 'climate_crices'). |
| `page` | integer | No | Page number for pagination. |
| `q` | string | No | Search query string. |
| `size` | integer | No | Number of results per page. |
| `sort` | string | No | Sort order. |

```bash
curl -X POST https://api.paywithlocus.com/api/wrapped/parse-zenodo-org-api-e9640d76/search_records_in_community \
  -H "Authorization: Bearer YOUR_LOCUS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"community_id":"<string>","page":"<integer>","q":"<string>","size":"<integer>","sort":"<string>"}'
```
