# Zenodo — Wrapped API

> **You are on:** `https://api.beta.paywithlocus.com/api` | [llms.txt](https://beta.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 for Locus Pro. Each call burns credits from your workspace balance.

## Access

**Base URL:** `https://api.beta.paywithlocus.com/api/wrapped/credits/zenodo/`
**Auth:** `Authorization: Bearer <LOCUS_CREDITS_SECRET_KEY>` (an `lcr_` secret key or a scoped `lcac_` agent credential)
**Required header:** `Idempotency-Key: <fresh UUID per call>`. A retry with the same key replays the stored result without a new charge.
**Response:** the provider response after any endpoint-specific normalization. `X-Locus-Credits-Charged` carries the charge and `X-Locus-Credits-Balance` the remaining balance. Insufficient credits return `402` before the provider is called.
**Pricing:** estimated costs below are USD. Locus debits the credit equivalent at your workspace rate.

Full call contract: https://docs.paywithlocus.com/api-reference/introduction

> Using a Pay With Locus wallet key (`claw_` prefix)? Wallet routes are documented separately: https://docs.paywithlocus.com/wrapped-apis/for-agents

## 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.beta.paywithlocus.com/api/wrapped/credits/zenodo/get-community \
  -H "Authorization: Bearer $LOCUS_CREDITS_SECRET_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -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.beta.paywithlocus.com/api/wrapped/credits/zenodo/get-latest-record-version \
  -H "Authorization: Bearer $LOCUS_CREDITS_SECRET_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -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.beta.paywithlocus.com/api/wrapped/credits/zenodo/get-record \
  -H "Authorization: Bearer $LOCUS_CREDITS_SECRET_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -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.beta.paywithlocus.com/api/wrapped/credits/zenodo/get-record-files \
  -H "Authorization: Bearer $LOCUS_CREDITS_SECRET_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -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.beta.paywithlocus.com/api/wrapped/credits/zenodo/get-record-stats \
  -H "Authorization: Bearer $LOCUS_CREDITS_SECRET_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -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.beta.paywithlocus.com/api/wrapped/credits/zenodo/get-record-versions \
  -H "Authorization: Bearer $LOCUS_CREDITS_SECRET_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -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.beta.paywithlocus.com/api/wrapped/credits/zenodo/list-communities \
  -H "Authorization: Bearer $LOCUS_CREDITS_SECRET_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -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.beta.paywithlocus.com/api/wrapped/credits/zenodo/search-and-extract-results \
  -H "Authorization: Bearer $LOCUS_CREDITS_SECRET_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -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.beta.paywithlocus.com/api/wrapped/credits/zenodo/search-records \
  -H "Authorization: Bearer $LOCUS_CREDITS_SECRET_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -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.beta.paywithlocus.com/api/wrapped/credits/zenodo/search-records-in-community \
  -H "Authorization: Bearer $LOCUS_CREDITS_SECRET_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"community_id":"<string>","page":"<integer>","q":"<string>","size":"<integer>","sort":"<string>"}'
```

## Next steps

- [All wrapped API providers](https://beta.paywithlocus.com/wapi/index.md): pick another provider.
- [Find and call tools](https://beta.paywithlocus.com/agent/tools.md): price ceilings, async results, and errors.
- [Credits and billing](https://beta.paywithlocus.com/agent/billing.md): what a call costs and how to add credits.
- [Agent docs index](https://beta.paywithlocus.com/agent/index.md): every Locus agent page.