---
title: "Buscar fotos e vídeos gratuitos de bancos de imagens"
description: "Busque fotos ou vídeos no Pixabay para usar em um site."
canonical: "https://atelier201.com/docs/pt/api/media/stock-search"
updated: "2026-11-06"
---

# Buscar fotos e vídeos gratuitos de bancos de imagens

Requer `sites:read`. Não custa créditos nem armazena nada.

Cada resultado inclui `provider`, `id`, tamanho, descrição, autor e `preview_url`. A prévia serve apenas para visualizar o resultado: o site nunca aponta para ela. [Importe](/docs/api/media/stock-import) o resultado escolhido para copiá-lo para a mídia do site.

`providers` informa quais bibliotecas podem ser pesquisadas no momento, por exemplo, `{ "pixabay": "available" }`. [Listar os modelos](/docs/api/media/models) retorna as mesmas informações antes de qualquer busca. Se você indicar uma biblioteca indisponível, a solicitação será recusada com `service_unavailable`, o nome da biblioteca em `details.provider` e as opções disponíveis em `details.providers`.

As consultas em inglês retornam mais resultados. Por enquanto, os resultados vêm apenas do Pixabay, então `provider` é sempre `pixabay`. As respostas ficam em cache por um dia.

O limite é de 30 buscas e importações por minuto por workspace. Se o limite for excedido ou a própria biblioteca estiver ocupada (há uma única cota compartilhada por todos os usuários do Atelier201), a resposta será `429 rate_limited`, com o tempo de espera em `Retry-After` e `details.retry_after_seconds`: aguarde esse tempo e tente novamente.

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

## Authorizations

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

## Path parameters

- `site_id` (`string`, required): O id do site ou seu slug (o endereço antes de .atelier201.page).

## Query parameters

- `query` (`string`, required, length: `1–100 chars`): O que procurar. A busca em inglês retorna mais resultados.
- `kind` (`enum<string>`, one of: `image, video`): image (padrão) ou video.
- `orientation` (`enum<string>`, one of: `landscape, portrait, square`)
- `provider` (`enum<string>`, one of: `pixabay`): A biblioteca. Por enquanto, Pixabay é a única opção e também o padrão.
- `per_page` (`integer`, range: `1–30`)
- `page` (`integer`, range: `1–50`)
- `locale` (`string`, length: `≤ 10 chars`): O idioma da consulta, por exemplo, fr-FR.

## Response

**200**: Pesquisar fotos e vídeos gratuitos de bancos de imagens

- `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): Serve apenas para visualizar o resultado. Um site nunca cria um link para ele: importe o arquivo.
- `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): Cada biblioteca de mídia e se ela pode ser pesquisada agora, por exemplo, { 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**: Códigos possíveis: 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**: Códigos possíveis: 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**: Códigos possíveis: 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**: Códigos possíveis: 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**: Códigos possíveis: 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**: Códigos possíveis: 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**: Códigos possíveis: 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**: Códigos possíveis: 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**: Códigos possíveis: 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**: Códigos possíveis: 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**: Códigos possíveis: 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**: Códigos possíveis: 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>'
```
