← Back to docs

Examples

Ready-to-use code examples in 12 languages and frameworks.

App Router (Server)

Next.js

Server Component with caching. Always use absolute URLs on server.

// app/users/page.jsx
async function UsersPage() {
  const res = await fetch(
    "https://ready-api.vercel.app/api/users",
    {
      next: { revalidate: 60 },
      headers: { Authorization: "Bearer YOUR_API_KEY" }
    }
  );
  const { data } = await res.json();

  return (
    <ul>
      {data.map(user => (
        <li key={user.id}>
          {user.name} - {user.email}
        </li>
      ))}
    </ul>
  );
}

Client Component

Next.js

Client-side data fetching with hooks.

"use client";
import { useState, useEffect } from "react";

function UsersPage() {
  const [users, setUsers] = useState([]);
  const [loading, setLoading] = useState(true);

  useEffect(() => {
    fetch("https://ready-api.vercel.app/api/users", {
      headers: { Authorization: "Bearer YOUR_API_KEY" }
    })
      .then(res => res.json())
      .then(data => {
        setUsers(data.data);
        setLoading(false);
      });
  }, []);

  if (loading) return <div>Loading...</div>;

  return (
    <ul>
      {users.map(user => (
        <li key={user.id}>{user.name}</li>
      ))}
    </ul>
  );
}

Node.js (fetch)

JavaScript

Native fetch in Node.js 18+.

import fetch from "node-fetch";

async function getUsers() {
  const res = await fetch(
    "https://ready-api.vercel.app/api/users?page=1&limit=10",
    {
      headers: {
        Authorization: "Bearer YOUR_API_KEY"
      }
    }
  );

  if (!res.ok) throw new Error(`HTTP ${res.status}`);

  const { data } = await res.json();
  console.log(data);
}

requests

Python

Synchronous HTTP client.

import requests

url = "https://ready-api.vercel.app/api/users"
headers = {"Authorization": "Bearer YOUR_API_KEY"}
params = {"page": 1, "limit": 10}

res = requests.get(url, headers=headers, params=params)
data = res.json()

for user in data["data"]:
    print(user["name"], "-", user["email"])

net/http

Go

Standard library HTTP client.

package main

import (
    "io"
    "fmt"
    "net/http"
)

func main() {
    url := "https://ready-api.vercel.app/api/users?page=1&limit=10"
    req, _ := http.NewRequest("GET", url, nil)
    req.Header.Set("Authorization", "Bearer YOUR_API_KEY")

    client := &http.Client{}
    res, _ := client.Do(req)
    defer res.Body.Close()

    body, _ := io.ReadAll(res.Body)
    fmt.Println(string(body))
}

reqwest

Rust

Async HTTP client with tokio.

use reqwest;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let client = reqwest::Client::new();

    let res = client
        .get("https://ready-api.vercel.app/api/users?page=1&limit=10")
        .header("Authorization", "Bearer YOUR_API_KEY")
        .send()
        .await?;

    let data: serde_json::Value = res.json().await?;
    println!("{:#?}", data);
    Ok(())
}

cURL

PHP

Using cURL extension.

<?php

$url = "https://ready-api.vercel.app/api/users?page=1&limit=10";
$headers = [
    "Authorization: Bearer YOUR_API_KEY"
];

$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$response = curl_exec($ch);
curl_close($ch);

$data = json_decode($response, true);
print_r($data);
?>

net/http

Ruby

Standard library HTTP.

require "net/http"
require "json"

url = URI("https://ready-api.vercel.app/api/users?page=1&limit=10")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = url.scheme == "https"

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer YOUR_API_KEY"

response = http.request(request)
data = JSON.parse(response.body)

puts data["data"]

http package

Flutter

Cross-platform mobile HTTP.

import 'package:http/http.dart' as http;
import 'dart:convert';

Future<List<dynamic>> fetchUsers() async {
  final response = await http.get(
    Uri.parse('https://ready-api.vercel.app/api/users?page=1&limit=10'),
    headers: {'Authorization': 'Bearer YOUR_API_KEY'},
  );

  if (response.statusCode == 200) {
    return json.decode(response.body)['data'];
  } else {
    throw Exception('Failed to load users');
  }
}

URLSession

Swift

Native iOS HTTP client.

import Foundation

let url = URL(string: "https://ready-api.vercel.app/api/users?page=1&limit=10")!
var request = URLRequest(url: url)
request.setValue("Bearer YOUR_API_KEY", forHTTPHeaderField: "Authorization")

let task = URLSession.shared.dataTask(with: request) { data, _, error in
    guard let data = data else { return }
    let json = try? JSONSerialization.jsonObject(with: data)
    print(json ?? "No data")
}
task.resume()

OkHttp

Kotlin

Android HTTP client.

import okhttp3.OkHttpClient
import okhttp3.Request

val client = OkHttpClient()

val request = Request.Builder()
    .url("https://ready-api.vercel.app/api/users?page=1&limit=10")
    .addHeader("Authorization", "Bearer YOUR_API_KEY")
    .build()

client.newCall(request).enqueue(object : Callback {
    override fun onResponse(call: Call, response: Response) {
        println(response.body?.string())
    }
    override fun onFailure(call: Call, e: IOException) {
        e.printStackTrace()
    }
})

Terminal

cURL

Works everywhere — terminal, CI, scripts.

# List users with pagination
curl -X GET "https://ready-api.vercel.app/api/users?page=1&limit=10" \
  -H "Authorization: Bearer YOUR_API_KEY"