Skip to main content
Bun implements the standard fetch() API for HTTP requests.

Basic GET Request

const response = await fetch("https://api.example.com/data");
const data = await response.json();
console.log(data);

POST Request

const response = await fetch("https://api.example.com/users", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    name: "John Doe",
    email: "[email protected]",
  }),
});

const result = await response.json();

Error Handling

try {
  const response = await fetch("https://api.example.com/data");
  
  if (!response.ok) {
    throw new Error(`HTTP error: ${response.status}`);
  }
  
  const data = await response.json();
} catch (error) {
  console.error("Fetch failed:", error);
}

Timeout

const controller = new AbortController();
const timeout = setTimeout(() => controller.abort(), 5000);

try {
  const response = await fetch("https://api.example.com/data", {
    signal: controller.signal,
  });
  const data = await response.json();
} catch (error) {
  if (error.name === "AbortError") {
    console.log("Request timeout");
  }
} finally {
  clearTimeout(timeout);
}

Build docs developers (and LLMs) love