> ## Documentation Index
> Fetch the complete documentation index at: https://kardow.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Assets (Media Library)

> List and upload images in your job board's media library, with hosted cdn.kardow.com URLs

The Assets API is your board's media library. Uploaded files are stored on Kardow and served from `cdn.kardow.com`, so you always get a stable, public URL to embed in pages, blog posts, or anywhere else. Raw storage URLs are never exposed.

<Info>
  Authenticate with your API key in the `x-api-key` header. Create keys under **Settings > API**.
</Info>

## List assets

```http theme={null}
GET https://api.kardow.com/assets
```

<ParamField query="type" type="string">Filter by `image`, `video`, or `file`.</ParamField>
<ParamField query="search" type="string">Match against the asset title.</ParamField>
<ParamField query="page" type="number" default="1">Page number.</ParamField>
<ParamField query="per_page" type="number" default="20">Records per page, up to 100.</ParamField>

```bash cURL theme={null}
curl --url "https://api.kardow.com/assets?type=image&search=cover" \
  --header "x-api-key: your-api-key-here"
```

Each asset returns `id`, `type`, `provider`, `url` (cdn.kardow\.com), `thumbnail_url`, `title`, `visibility`, `metadata`, `created_at`, and `updated_at`.

## Upload an asset

Two ways to add an image. The first (import from a URL) is the easiest for automations and AI: hand Kardow any image URL and it downloads, stores, and returns a hosted link.

### Import from a URL

```http theme={null}
POST https://api.kardow.com/assets
Content-Type: application/json
```

<ParamField body="source_url" type="string" required>URL of the image to import into your library.</ParamField>
<ParamField body="title" type="string">Optional label.</ParamField>

```bash cURL theme={null}
curl --request POST \
  --url "https://api.kardow.com/assets" \
  --header "Content-Type: application/json" \
  --header "x-api-key: your-api-key-here" \
  --data '{ "source_url": "https://example.com/photo.jpg", "title": "Blog cover" }'
```

### Upload a file directly

Send `multipart/form-data` with a `file` field.

```bash cURL theme={null}
curl --request POST \
  --url "https://api.kardow.com/assets" \
  --header "x-api-key: your-api-key-here" \
  --form "file=@./cover.png" \
  --form "title=Blog cover"
```

Both return the created asset:

```json theme={null}
{
  "data": {
    "id": "9b2c...",
    "type": "image",
    "url": "https://cdn.kardow.com/abc123/storage/v1/object/public/org-assets/42/library/9b2c.png",
    "title": "Blog cover",
    "visibility": "public",
    "created_at": "2026-07-11T10:00:00.000Z"
  }
}
```

Use `data.url` as a page or blog `cover_image`, or embed it in [page content](/docs/api-reference/content/pages) as `<img src="...">`.

<Note>
  Max upload size is 15MB. Supported image types: JPEG, PNG, GIF, WebP, AVIF, SVG.
</Note>
