# listPresets

> Part of the MAP Audio Music API docs. Index of every page: https://map.audio/developers/music-api/llms.txt. OpenAPI document: https://map.audio/developers/music-api/openapi.json.

`GET https://api.map.audio/v1/presets`

Search the factory presets

Search the factory presets the engine renders, by words in their names, descriptions, categories and tags, by category and by tempo. Each preset's `ref` (pam:factory/<slug>) is what renders, plans, arrangements and DJ sets take, and `variations` lists its slots. Free. Next: POST /v1/renders with `source.preset` set to a `ref`.

Auth: `Authorization: Bearer` with an API key or a map.audio access token. MCP tool: `search_presets`.

## Parameters

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `q` | query | string | no | Words that must each start a word of a preset's name, description, category, subcategory, author or tags. At most 200 characters. |
| `category` | query | string | no | A category, matched without regard to case. |
| `tempoMin` | query | number | no | Lowest tempo, in BPM. |
| `tempoMax` | query | number | no | Highest tempo, in BPM. |
| `limit` | query | integer | no | Presets per page. From 1 to 100. Default `25`. |
| `cursor` | query | string | no | The `nextCursor` of the previous page. |

## Example

```sh
curl -sS "https://api.map.audio/v1/presets?q=disco&category=Drums&tempoMin=118&tempoMax=128" \
  -H "Authorization: Bearer $MAP_API_KEY" \
  -H "Map-Version: 2026-11-01"
```

### 200: Searching for "disco"

```json
{
  "object": "list",
  "data": [
    {
      "object": "preset",
      "slug": "313-disco",
      "ref": "pam:factory/313-disco",
      "product": "pam",
      "name": "313 Disco",
      "author": "TopograFX",
      "description": "Motor City disco with aquatic funk",
      "bpm": 120,
      "timeSignature": [
        4,
        4
      ],
      "category": "Drums",
      "subcategory": "Disco",
      "tags": [],
      "variations": [
        1
      ],
      "sha256": "3afbf5dea1003b2d17385955017785a57d74c65f77f97b58cf5d7cec9794ca1c",
      "hasSong": false
    }
  ],
  "total": 1,
  "nextCursor": null
}
```

### 400: Invalid request

```json
{
  "error": {
    "type": "invalid_request",
    "code": "invalid_request",
    "message": "limit must be a whole number from 1 to 100; got \"500\".",
    "param": "limit",
    "retryable": false,
    "jobId": null,
    "docUrl": "https://map.audio/developers/music-api/errors#invalid_request",
    "requestId": "9a3f7c2e5b1d8f40-LHR"
  }
}
```

## Responses

- `200`: Matching presets.
- `400`: Invalid request
- `default`: Any other error: `error.code` names it, `error.param` the field at fault, and `error.docUrl` its entry in the error catalogue.

## Errors

- [`invalid_request`](https://map.audio/developers/music-api/errors#invalid_request)
