> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.airweave.ai/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.airweave.ai/_mcp/server.

# List Collections

GET https://api.airweave.ai/collections

Retrieve all collections belonging to your organization.

Collections are containers that group related data from one or more source
connections, enabling unified search across multiple data sources.

Results are sorted by creation date (newest first) and support pagination
and text search filtering.

Reference: https://docs.airweave.ai/api-reference/collections/list-collections-get

## Authentication

- `x-api-key` header (required) — API Key authentication via header

## Servers

- `https://api.airweave.ai` (Production, default)
- `http://localhost:8001` (Local)

## Request

### Query parameters

- `skip` (integer, optional, default: 0) — Number of collections to skip for pagination
- `limit` (integer, optional, default: 100) — Maximum number of collections to return (1-1000)
- `search` (string, optional) — Search term to filter collections by name or readable_id

## Response

### 200

Successful Response

- `list of Collection`

## Errors

### 422 Unprocessable Entity Error

Validation Error

- `detail` (list of ValidationErrorDetail, required) — List of validation errors

### 429 Too Many Requests Error

Rate Limit Exceeded

- `detail` (string, required) — Error message explaining the rate limit

## Types

### Collection

API-facing collection schema with embedding metadata. Extends CollectionRecord with vector_size and embedding_model_name, which are resolved by the CollectionService from the deployment metadata and the dense embedder registry. Excludes vector_db_deployment_metadata_id (internal FK).

- `name` (string, required) — Human-readable display name for the collection.
- `readable_id` (string, required) — URL-safe unique identifier used in API endpoints. This becomes non-optional once the collection is created.
- `id` (string, required) — Unique system identifier for the collection. This UUID is generated automatically and used for internal references.
- `created_at` (string, required) — Timestamp when the collection was created (ISO 8601 format).
- `modified_at` (string, required) — Timestamp when the collection was last modified (ISO 8601 format).
- `organization_id` (string, required) — Identifier of the organization that owns this collection. Collections are isolated per organization.
- `vector_size` (integer, required) — Vector dimensions used by this collection (derived from deployment metadata).
- `embedding_model_name` (string, required) — Name of the embedding model used for this collection (derived from deployment metadata).
- `sync_config` (SyncConfig, optional, nullable) — Default sync configuration for all syncs in this collection. Overridable at sync and job level.
- `created_by_email` (string, optional, nullable) — Email address of the user who created this collection.
- `modified_by_email` (string, optional, nullable) — Email address of the user who last modified this collection.
- `status` (enum, optional) — Current operational status of the collection:• **NEEDS\_SOURCE**: Collection has no authenticated connections, or connections exist but haven't synced yet• **ACTIVE**: At least one connection has completed a sync or is currently syncing• **ERROR**: All connections have failed their last sync
  - Allowed values: `ACTIVE`, `NEEDS SOURCE`, `ERROR`
- `source_connection_summaries` (list of SourceConnectionSummary, optional) — Lightweight list of source connections attached to this collection. Contains only short_name and name, suitable for rendering icons in list views.

### ValidationErrorDetail

Details about a validation error for a specific field.

- `loc` (list of string, required) — Location of the error (e.g., ['body', 'url'])
- `msg` (string, required) — Human-readable error message
- `type` (string, required) — Error type identifier

### SyncConfig

Sync configuration with automatic env var loading. Env vars use double underscore as delimiter: SYNC_CONFIG__HANDLERS__ENABLE_VECTOR_HANDLERS=false

- `destinations` (DestinationConfig, optional) — Controls where entities are written.
- `handlers` (HandlerConfig, optional) — Controls which handlers run during sync.
- `cursor` (CursorConfig, optional) — Controls incremental sync cursor behavior.
- `behavior` (BehaviorConfig, optional) — Miscellaneous execution behavior flags.

### SourceConnectionSummary

Lightweight summary of a source connection for collection list display.

- `short_name` (string, required)
- `name` (string, required)

### DestinationConfig

Controls where entities are written.

- `skip_vespa` (boolean, optional, default: false) — Skip writing to native Vespa
- `target_destinations` (list of string, optional, nullable) — If set, ONLY write to these destination UUIDs
- `exclude_destinations` (list of string, optional, nullable) — Skip these destination UUIDs

### HandlerConfig

Controls which handlers run during sync.

- `enable_vector_handlers` (boolean, optional, default: true) — Enable VectorDBHandler
- `enable_raw_data_handler` (boolean, optional, default: true) — Enable RawDataHandler (ARF)
- `enable_postgres_handler` (boolean, optional, default: true) — Enable EntityPostgresHandler

### CursorConfig

Controls incremental sync cursor behavior.

- `skip_load` (boolean, optional, default: false) — Don't load cursor (fetch all entities)
- `skip_updates` (boolean, optional, default: false) — Don't persist cursor progress

### BehaviorConfig

Miscellaneous execution behavior flags.

- `skip_hash_comparison` (boolean, optional, default: false) — Force INSERT for all entities
- `replay_from_arf` (boolean, optional, default: false) — Replay from ARF storage instead of calling source
- `skip_guardrails` (boolean, optional, default: false) — Skip usage guardrails (entity count checks)

## Examples

**Response**

```json
[
  {
    "name": "Finance Data",
    "readable_id": "finance-data-ab123",
    "id": "550e8400-e29b-41d4-a716-446655440000",
    "created_at": "2024-01-15T09:30:00Z",
    "modified_at": "2024-01-15T14:22:15Z",
    "organization_id": "org12345-6789-abcd-ef01-234567890abc",
    "vector_size": 1,
    "embedding_model_name": "string",
    "created_by_email": "admin@company.com",
    "modified_by_email": "finance@company.com",
    "status": "ACTIVE"
  }
]
```

**SDK Code**

```python
import requests

url = "https://api.airweave.ai/collections"

headers = {"x-api-key": "<apiKey>"}

response = requests.get(url, headers=headers)

print(response.json())
```

```typescript
import { AirweaveSDKClient } from "@airweave/sdk";

const client = new AirweaveSDKClient({ apiKey: "YOUR_API_KEY" });
await client.collections.list({
    skip: 0,
    limit: 100,
    search: "customer"
});

```

```go
package main

import (
	"fmt"
	"net/http"
	"io"
)

func main() {

	url := "https://api.airweave.ai/collections"

	req, _ := http.NewRequest("GET", url, nil)

	req.Header.Add("x-api-key", "<apiKey>")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby
require 'uri'
require 'net/http'

url = URI("https://api.airweave.ai/collections")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<apiKey>'

response = http.request(request)
puts response.read_body
```

```java
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.get("https://api.airweave.ai/collections")
  .header("x-api-key", "<apiKey>")
  .asString();
```

```php
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('GET', 'https://api.airweave.ai/collections', [
  'headers' => [
    'x-api-key' => '<apiKey>',
  ],
]);

echo $response->getBody();
```

```csharp
using RestSharp;

var client = new RestClient("https://api.airweave.ai/collections");
var request = new RestRequest(Method.GET);
request.AddHeader("x-api-key", "<apiKey>");
IRestResponse response = client.Execute(request);
```

```swift
import Foundation

let headers = ["x-api-key": "<apiKey>"]

let request = NSMutableURLRequest(url: NSURL(string: "https://api.airweave.ai/collections")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "GET"
request.allHTTPHeaderFields = headers

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```