---
title: "HTTP fetch proxy"
method: POST
path: "/api/data/{project_id}/fetch"
tags: ["Data"]
---

# HTTP fetch proxy

`POST /api/data/{project_id}/fetch`

## Request

- Base URL: `https://core.blink.new`
- URL: `https://core.blink.new/api/data/{project_id}/fetch`
- Auth: HTTP bearer

Make a server-side HTTP request. `{{secret_name}}` placeholders in URLs, headers, body, or query params are filled from project secrets only for the project's server (secret key, blnk_sk_); any other caller using one gets 403 SECRETS_SERVER_ONLY. Set `async: true` to fire in the background and return immediately.

## Path parameters

- `project_id` string, required

## Request body

- FetchRequest
  - `url` string, uri, required: Target URL for the HTTP request. Can include secret placeholders like {{api_key}}
  - `method` 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE' | 'HEAD' | 'OPTIONS': HTTP method to use
  - `headers` object: Request headers. Supports secret placeholders like {{api_key}}
  - `body` union: Request body (JSON serializable). Supports secret placeholders in nested values
    - object
    - string
  - `query` object: Query parameters to append to URL. Supports secret placeholders
  - `async` boolean: If true, triggers request in background and returns immediately

## Response `200`

Request completed. Returns the full response when `async: false` (default),
or a trigger confirmation when `async: true`.

- FetchResponse
  - `status` integer: HTTP status code from the target server
  - `headers` object: Response headers from the target server
  - `body` union: Response body from the target server (parsed JSON, text, or base64 for binary)
    - object
    - string
  - `durationMs` integer: Request duration in milliseconds

## Other responses

- `202`: Request queued for async processing
- `400`: Invalid request — missing URL, invalid project ID, or secret not found
- `401`: Authentication required or invalid API key
- `403`: A `{{...}}` placeholder was used without the project secret key
- `405`: Method not allowed — only POST is supported
- `408`: Request timeout
- `500`: Internal server error

---

[API](https://skmtc.dev/blink/apis/blink-apis.md) - [All operations](https://skmtc.dev/blink/apis/blink-apis/llms.txt) - [OpenAPI document](https://skmtc.dev/blink/apis/blink-apis/revisions/4c59c706078e?raw)
