# Get scrape status (/docs/reference/get-scrape)

Returns a scrape's status, such as one that answered 202, and its document as data once completedAt is set; that read counts against the scrape's own result-read quota. Without an API key it reads only a scrape started without one, by its ID.

`GET /v2/scrape/{id}`

An API key is optional; without one the caller is anonymous.

## Example request

```sh
curl 'https://api.elisebot.dev/v2/scrape/<id>' \
  -H "Authorization: Bearer $ELISEBOT_API_KEY"
```

## Parameters

- `id` (path, string, required): The scrape ID.

## Responses

### 200

OK.

Type: `ScrapeStatusResponse`

- `completedAt` (string (date-time)): When the URL got its result.
- `createdAt` (string (date-time), required)
- `data` (Document): The scrape's document, once completedAt is set.
  - `html` (string): The page HTML, converted to UTF-8; only its main content with responseOptions.onlyMainContent.
  - `markdown` (string): The page as Markdown.
  - `metadata` (DocumentMetadata, required)
    - `contentType` (string): The response content type.
    - `error` (string): Why the scrape failed.
    - `errorCode` (string): A machine-readable error code.
    - `sourceURL` (string, required): The requested URL.
    - `statusCode` (integer (int64)): The HTTP status code.
    - `url` (string, required): The final URL after redirects.
- `expiresAt` (string (date-time), required): When the result expires.
- `status` (string, required): Completed once the URL got its result. One of `scraping`, `completed`.
- `success` (boolean, required): Always true. One of `true`.

### 401

UNAUTHORIZED: The API key is invalid or revoked; API_KEY_REQUIRED: This endpoint needs an API key; INVALID_ACCESS_TOKEN: The OAuth access token is unknown, expired or revoked, or was sent to an endpoint other than /mcp, the only one it works on.

Type: `UnauthorizedResponse`

- `code` (string, required): A machine-readable error code. One of `UNAUTHORIZED`, `API_KEY_REQUIRED`, `INVALID_ACCESS_TOKEN`.
- `details` (array of ValidationErrorDetail or null): The invalid fields.
  - `location` (string): Where the error occurred, e.g. body.urls[3].
  - `message` (string): What went wrong.
  - `value` (any): The rejected value.
- `error` (string, required): A human-readable message.
- `success` (boolean, required): Always false. One of `false`.

### 404

SCRAPE_NOT_FOUND: The scrape does not exist, has expired or is another caller's; BATCH_SCRAPE_NOT_FOUND: The batch scrape does not exist, has expired or is another caller's, or the download token does not match.

Type: `NotFoundResponse`

- `code` (string, required): A machine-readable error code. One of `SCRAPE_NOT_FOUND`, `BATCH_SCRAPE_NOT_FOUND`.
- `details` (array of ValidationErrorDetail or null): The invalid fields.
  - `location` (string): Where the error occurred, e.g. body.urls[3].
  - `message` (string): What went wrong.
  - `value` (any): The rejected value.
- `error` (string, required): A human-readable message.
- `success` (boolean, required): Always false. One of `false`.

### 422

VALIDATION_FAILED: One or more fields are invalid; TOO_MANY_URLS: The request has more URLs than your rate limit allows; IDEMPOTENCY_CONFLICT: The Idempotency-Key was already used with a different request.

Type: `ValidationFailedResponse`

- `code` (string, required): A machine-readable error code. One of `VALIDATION_FAILED`, `TOO_MANY_URLS`, `IDEMPOTENCY_CONFLICT`.
- `details` (array of ValidationErrorDetail or null): The invalid fields.
  - `location` (string): Where the error occurred, e.g. body.urls[3].
  - `message` (string): What went wrong.
  - `value` (any): The rejected value.
- `error` (string, required): A human-readable message.
- `success` (boolean, required): Always false. One of `false`.

### 429

RATE_LIMITED: Rate limit exceeded, retry after Retry-After seconds.

Headers:

- `Retry-After` (integer): Seconds to wait before retrying. Minimum 1.

Type: `TooManyRequestsResponse`

- `code` (string, required): A machine-readable error code. One of `RATE_LIMITED`.
- `details` (array of ValidationErrorDetail or null): The invalid fields.
  - `location` (string): Where the error occurred, e.g. body.urls[3].
  - `message` (string): What went wrong.
  - `value` (any): The rejected value.
- `error` (string, required): A human-readable message.
- `success` (boolean, required): Always false. One of `false`.

### 500

INTERNAL_ERROR: Something went wrong on our side, try again.

Type: `InternalErrorResponse`

- `code` (string, required): A machine-readable error code. One of `INTERNAL_ERROR`.
- `details` (array of ValidationErrorDetail or null): The invalid fields.
  - `location` (string): Where the error occurred, e.g. body.urls[3].
  - `message` (string): What went wrong.
  - `value` (any): The rejected value.
- `error` (string, required): A human-readable message.
- `success` (boolean, required): Always false. One of `false`.
