---
title: "Kostenlose Stockfotos und -videos suchen"
description: "Pixabay nach Fotos oder Videos zur Verwendung auf einem Standort durchsuchen."
canonical: "https://atelier201.com/docs/de/api/media/stock-search"
updated: "2026-11-06"
---

# Kostenlose Stockfotos und -videos suchen

Erfordert `sites:read`. Kostet keine Credits und speichert nichts.

Jedes Ergebnis enthält `provider`, `id`, die Größe, eine Beschreibung, den Namen des Urhebers und eine `preview_url`. Die Vorschau dient nur dazu, das Ergebnis anzusehen. Ein Standort verlinkt niemals darauf. [Importiere](/docs/api/media/stock-import) das gewünschte Ergebnis. Es wird dann in die Medien des Standorts kopiert.

`providers` gibt an, welche Bibliotheken derzeit durchsucht werden können, zum Beispiel `{ "pixabay": "available" }`. [Die Modelle auflisten](/docs/api/media/models) zeigt dasselbe bereits vor einer Suche an. Wird eine nicht verfügbare Bibliothek angegeben, wird die Anfrage mit `service_unavailable` abgelehnt. `details.provider` enthält ihren Namen und `details.providers` die verfügbaren Bibliotheken.

Mit englischen Suchanfragen erhältst du die meisten Ergebnisse. Derzeit stammen alle Ergebnisse von Pixabay, der einzigen verfügbaren Bibliothek. `provider` ist immer `pixabay`. Antworten werden einen Tag lang zwischengespeichert.

Pro Workspace sind höchstens 30 Suchen und Importe pro Minute möglich. Bei Überschreitung oder wenn die Bibliothek selbst ausgelastet ist (ein gemeinsames Kontingent für ganz Atelier201), lautet die Antwort `429 rate_limited`. Die Wartezeit steht in `Retry-After` und `details.retry_after_seconds`. Warte entsprechend lange und versuche es dann erneut.

```http
GET https://api.atelier201.com/v1/sites/{site_id}/media/stock
```

## Authorizations

- `Authorization` (bearer, in header, required)

## Path parameters

- `site_id` (`string`, required): ID der Website oder ihr Slug (die Adresse vor .atelier201.page).

## Query parameters

- `query` (`string`, required, length: `1–100 chars`): Wonach gesucht werden soll. Auf Englisch gibt es die meisten Ergebnisse.
- `kind` (`enum<string>`, one of: `image, video`): image (Standard) oder video.
- `orientation` (`enum<string>`, one of: `landscape, portrait, square`)
- `provider` (`enum<string>`, one of: `pixabay`): Die Bibliothek. Vorerst ist Pixabay die einzige Option und die Standardeinstellung.
- `per_page` (`integer`, range: `1–30`)
- `page` (`integer`, range: `1–50`)
- `locale` (`string`, length: `≤ 10 chars`): Die Sprache der Suchanfrage, z. B. fr-FR.

## Response

**200**: Kostenlose Stockfotos und -videos suchen

- `data` (`object`, required)
- `data.results` (`object[]`, required)
- `data.results.provider` (`enum<string>`, required, one of: `pixabay`)
- `data.results.id` (`string`, required)
- `data.results.kind` (`enum<string>`, required, one of: `image, video`)
- `data.results.width` (`number`, required)
- `data.results.height` (`number`, required)
- `data.results.duration` (`number`)
- `data.results.description` (`string`, required)
- `data.results.author` (`string`, required)
- `data.results.author_url` (`string,null`, required)
- `data.results.page_url` (`string`, required)
- `data.results.preview_url` (`string`, required): Nur zur Vorschau des Ergebnisses. Eine Website verlinkt nie darauf: Importiere die Datei.
- `data.total` (`integer`, required, range: `-9007199254740991–9007199254740991`)
- `data.page` (`integer`, required, range: `-9007199254740991–9007199254740991`)
- `data.attribution` (`string`, required)
- `data.providers` (`Record<string, enum<string>>`, required): Jede Stock-Bibliothek und ob sie derzeit durchsucht werden kann, z. B. { pixabay: available }.
- `data.next_action` (`string`, required)
- `request_id` (`string`, required)

```json
{
  "data": {
    "results": [
      {
        "provider": "pixabay",
        "id": "<string>",
        "kind": "image",
        "width": 123.45,
        "height": 123.45,
        "duration": 123.45,
        "description": "<string>",
        "author": "<string>",
        "author_url": null,
        "page_url": "<string>",
        "preview_url": "<string>"
      }
    ],
    "total": 123,
    "page": 123,
    "attribution": "<string>",
    "providers": {},
    "next_action": "<string>"
  },
  "request_id": "<string>"
}
```

**400**: Mögliche Codes: invalid_request, unknown_field, invalid_parameter, invalid_cursor

- `error` (`object`, required)
- `error.type` (`string`, required)
- `error.code` (`string`, required)
- `error.message` (`string`, required)
- `error.param` (`string`)
- `error.docs_url` (`string`, required)
- `error.action_url` (`string<uri>`)
- `error.details` (`Record<string, object>`)
- `request_id` (`string`, required)

```json
{
  "error": {
    "type": "<string>",
    "code": "<string>",
    "message": "<string>",
    "param": "<string>",
    "docs_url": "<string>",
    "action_url": "<string>",
    "details": {}
  },
  "request_id": "<string>"
}
```

**401**: Mögliche Codes: authentication_required, invalid_api_key, api_key_expired, api_key_revoked

- `error` (`object`, required)
- `error.type` (`string`, required)
- `error.code` (`string`, required)
- `error.message` (`string`, required)
- `error.param` (`string`)
- `error.docs_url` (`string`, required)
- `error.action_url` (`string<uri>`)
- `error.details` (`Record<string, object>`)
- `request_id` (`string`, required)

```json
{
  "error": {
    "type": "<string>",
    "code": "<string>",
    "message": "<string>",
    "param": "<string>",
    "docs_url": "<string>",
    "action_url": "<string>",
    "details": {}
  },
  "request_id": "<string>"
}
```

**402**: Mögliche Codes: insufficient_credits

- `error` (`object`, required)
- `error.type` (`string`, required)
- `error.code` (`string`, required)
- `error.message` (`string`, required)
- `error.param` (`string`)
- `error.docs_url` (`string`, required)
- `error.action_url` (`string<uri>`)
- `error.details` (`Record<string, object>`)
- `request_id` (`string`, required)

```json
{
  "error": {
    "type": "<string>",
    "code": "<string>",
    "message": "<string>",
    "param": "<string>",
    "docs_url": "<string>",
    "action_url": "<string>",
    "details": {}
  },
  "request_id": "<string>"
}
```

**403**: Mögliche Codes: insufficient_scope, feature_not_available, admin_required

- `error` (`object`, required)
- `error.type` (`string`, required)
- `error.code` (`string`, required)
- `error.message` (`string`, required)
- `error.param` (`string`)
- `error.docs_url` (`string`, required)
- `error.action_url` (`string<uri>`)
- `error.details` (`Record<string, object>`)
- `request_id` (`string`, required)

```json
{
  "error": {
    "type": "<string>",
    "code": "<string>",
    "message": "<string>",
    "param": "<string>",
    "docs_url": "<string>",
    "action_url": "<string>",
    "details": {}
  },
  "request_id": "<string>"
}
```

**404**: Mögliche Codes: resource_not_found

- `error` (`object`, required)
- `error.type` (`string`, required)
- `error.code` (`string`, required)
- `error.message` (`string`, required)
- `error.param` (`string`)
- `error.docs_url` (`string`, required)
- `error.action_url` (`string<uri>`)
- `error.details` (`Record<string, object>`)
- `request_id` (`string`, required)

```json
{
  "error": {
    "type": "<string>",
    "code": "<string>",
    "message": "<string>",
    "param": "<string>",
    "docs_url": "<string>",
    "action_url": "<string>",
    "details": {}
  },
  "request_id": "<string>"
}
```

**409**: Mögliche Codes: conflict, result_not_ready, idempotency_key_reused

- `error` (`object`, required)
- `error.type` (`string`, required)
- `error.code` (`string`, required)
- `error.message` (`string`, required)
- `error.param` (`string`)
- `error.docs_url` (`string`, required)
- `error.action_url` (`string<uri>`)
- `error.details` (`Record<string, object>`)
- `request_id` (`string`, required)

```json
{
  "error": {
    "type": "<string>",
    "code": "<string>",
    "message": "<string>",
    "param": "<string>",
    "docs_url": "<string>",
    "action_url": "<string>",
    "details": {}
  },
  "request_id": "<string>"
}
```

**410**: Mögliche Codes: result_expired

- `error` (`object`, required)
- `error.type` (`string`, required)
- `error.code` (`string`, required)
- `error.message` (`string`, required)
- `error.param` (`string`)
- `error.docs_url` (`string`, required)
- `error.action_url` (`string<uri>`)
- `error.details` (`Record<string, object>`)
- `request_id` (`string`, required)

```json
{
  "error": {
    "type": "<string>",
    "code": "<string>",
    "message": "<string>",
    "param": "<string>",
    "docs_url": "<string>",
    "action_url": "<string>",
    "details": {}
  },
  "request_id": "<string>"
}
```

**413**: Mögliche Codes: request_too_large

- `error` (`object`, required)
- `error.type` (`string`, required)
- `error.code` (`string`, required)
- `error.message` (`string`, required)
- `error.param` (`string`)
- `error.docs_url` (`string`, required)
- `error.action_url` (`string<uri>`)
- `error.details` (`Record<string, object>`)
- `request_id` (`string`, required)

```json
{
  "error": {
    "type": "<string>",
    "code": "<string>",
    "message": "<string>",
    "param": "<string>",
    "docs_url": "<string>",
    "action_url": "<string>",
    "details": {}
  },
  "request_id": "<string>"
}
```

**422**: Mögliche Codes: request_too_large_for_plan

- `error` (`object`, required)
- `error.type` (`string`, required)
- `error.code` (`string`, required)
- `error.message` (`string`, required)
- `error.param` (`string`)
- `error.docs_url` (`string`, required)
- `error.action_url` (`string<uri>`)
- `error.details` (`Record<string, object>`)
- `request_id` (`string`, required)

```json
{
  "error": {
    "type": "<string>",
    "code": "<string>",
    "message": "<string>",
    "param": "<string>",
    "docs_url": "<string>",
    "action_url": "<string>",
    "details": {}
  },
  "request_id": "<string>"
}
```

**429**: Mögliche Codes: rate_limited

- `error` (`object`, required)
- `error.type` (`string`, required)
- `error.code` (`string`, required)
- `error.message` (`string`, required)
- `error.param` (`string`)
- `error.docs_url` (`string`, required)
- `error.action_url` (`string<uri>`)
- `error.details` (`Record<string, object>`)
- `request_id` (`string`, required)

```json
{
  "error": {
    "type": "<string>",
    "code": "<string>",
    "message": "<string>",
    "param": "<string>",
    "docs_url": "<string>",
    "action_url": "<string>",
    "details": {}
  },
  "request_id": "<string>"
}
```

**500**: Mögliche Codes: internal_error

- `error` (`object`, required)
- `error.type` (`string`, required)
- `error.code` (`string`, required)
- `error.message` (`string`, required)
- `error.param` (`string`)
- `error.docs_url` (`string`, required)
- `error.action_url` (`string<uri>`)
- `error.details` (`Record<string, object>`)
- `request_id` (`string`, required)

```json
{
  "error": {
    "type": "<string>",
    "code": "<string>",
    "message": "<string>",
    "param": "<string>",
    "docs_url": "<string>",
    "action_url": "<string>",
    "details": {}
  },
  "request_id": "<string>"
}
```

**503**: Mögliche Codes: service_unavailable

- `error` (`object`, required)
- `error.type` (`string`, required)
- `error.code` (`string`, required)
- `error.message` (`string`, required)
- `error.param` (`string`)
- `error.docs_url` (`string`, required)
- `error.action_url` (`string<uri>`)
- `error.details` (`Record<string, object>`)
- `request_id` (`string`, required)

```json
{
  "error": {
    "type": "<string>",
    "code": "<string>",
    "message": "<string>",
    "param": "<string>",
    "docs_url": "<string>",
    "action_url": "<string>",
    "details": {}
  },
  "request_id": "<string>"
}
```

**Example request**

```bash
curl --request GET \
  --url 'https://api.atelier201.com/v1/sites/<site_id>/media/stock?query=<query>' \
  --header 'Authorization: <api-key>'
```
