---
title: "Rechercher des photos et vidéos gratuites de banque d’images"
description: "Rechercher des photos ou des vidéos sur Pixabay à utiliser sur un site."
canonical: "https://atelier201.com/docs/fr/api/media/stock-search"
updated: "2026-11-06"
---

# Rechercher des photos et vidéos gratuites de banque d’images

Nécessite `sites:read`. Aucun crédit n’est facturé et rien n’est stocké.

Chaque résultat comporte son `provider`, son `id`, sa taille, une description, le nom de son auteur et une `preview_url`. L’aperçu sert uniquement à consulter le résultat : un site ne crée jamais de lien vers celui-ci. [Importez](/docs/api/media/stock-import) le résultat choisi pour le copier dans les médias du site.

`providers` indique les bibliothèques actuellement disponibles pour la recherche, par exemple `{ "pixabay": "available" }`. [La liste des modèles](/docs/api/media/models) fournit la même information avant toute recherche. Si vous indiquez une bibliothèque indisponible, la requête est refusée avec `service_unavailable`, son nom dans `details.provider` et les bibliothèques disponibles dans `details.providers`.

Les requêtes en anglais renvoient le plus de résultats. Pour le moment, les résultats proviennent uniquement de Pixabay et `provider` vaut toujours `pixabay`. Les réponses sont mises en cache pendant un jour.

La limite est de 30 recherches et importations par minute et par espace de travail. Au-delà, ou si la bibliothèque est elle-même occupée (un seul quota pour tout Atelier201), la réponse est `429 rate_limited` et indique le délai d’attente dans `Retry-After` et `details.retry_after_seconds`. Attendez ce délai, puis réessayez.

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

## Authorizations

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

## Path parameters

- `site_id` (`string`, required): L’identifiant du site ou son slug (l’adresse avant .atelier201.page).

## Query parameters

- `query` (`string`, required, length: `1–100 chars`): Ce que vous recherchez. Les requêtes en anglais donnent le plus de résultats.
- `kind` (`enum<string>`, one of: `image, video`): image (par défaut) ou video.
- `orientation` (`enum<string>`, one of: `landscape, portrait, square`)
- `provider` (`enum<string>`, one of: `pixabay`): La bibliothèque. Pour l'instant, seule Pixabay est disponible et c'est la bibliothèque par défaut.
- `per_page` (`integer`, range: `1–30`)
- `page` (`integer`, range: `1–50`)
- `locale` (`string`, length: `≤ 10 chars`): La langue de la requête, par exemple fr-FR.

## Response

**200**: Rechercher des photos et vidéos libres de droits

- `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): Sert uniquement à prévisualiser le résultat. Un site ne crée jamais de lien vers celui-ci : importez le fichier.
- `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): Chaque bibliothèque d'images libres de droits et indique si elle peut être interrogée actuellement, par exemple { 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**: Codes possibles : 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**: Codes possibles : 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**: Codes possibles : 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**: Codes possibles : 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**: Codes possibles : 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**: Codes possibles : 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**: Codes possibles : 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**: Codes possibles : 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**: Codes possibles : 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**: Codes possibles : 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**: Codes possibles : 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**: Codes possibles : 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>'
```
