Loading repository data…
Loading repository data…
CharlieJamesGwapo / repository
Curated free public APIs perfect for student projects, capstones, and learning. With code samples in JavaScript, PHP, Python, C#/.NET, Go, and Java + 25+ project ideas.
A transparent discovery signal based on current public GitHub metadata.
This score does not audit code, security, maintainers, documentation quality, or suitability. Verify the repository and its current documentation before adoption.
A curated list of free public APIs perfect for student projects, capstones, thesis work, and learning to code — with code examples in JavaScript, PHP, Python, C# / .NET, Go, and Java.
Most "awesome APIs" lists are huge dumps that overwhelm a student trying to ship their first weather app. This list is opinionated: every API here is free or has a generous free tier, doesn't require a credit card to start, and is suitable for a student project you can finish in a weekend.
For each category, you'll find code samples in multiple languages so you can plug them into whatever you're learning — whether that's a Laravel app, a .NET MVC project, a React frontend, or a Python notebook.
| Symbol | Meaning |
|---|---|
| 🆓 | No authentication required — just fetch() and go |
| 🔑 | Free API key required (no credit card) |
| 💳 | Free tier exists but credit card or paid plan available |
| 🏆 | Recommended for first-time API users |
How to call a JSON API in each major student language. Examples use the wttr.in weather API (no key needed).
const res = await fetch("https://wttr.in/Manila?format=j1");
const data = await res.json();
console.log(data.current_condition[0].temp_C);
<?php
$json = file_get_contents("https://wttr.in/Manila?format=j1");
$data = json_decode($json, true);
echo $data["current_condition"][0]["temp_C"];
With Guzzle (Laravel / modern PHP):
use GuzzleHttp\Client;
$client = new Client();
$response = $client->get("https://wttr.in/Manila?format=j1");
$data = json_decode($response->getBody(), true);
echo $data["current_condition"][0]["temp_C"];
import requests
r = requests.get("https://wttr.in/Manila?format=j1")
data = r.json()
print(data["current_condition"][0]["temp_C"])
using System.Net.Http;
using System.Text.Json;
var client = new HttpClient();
var json = await client.GetStringAsync("https://wttr.in/Manila?format=j1");
var doc = JsonDocument.Parse(json);
var temp = doc.RootElement
.GetProperty("current_condition")[0]
.GetProperty("temp_C").GetString();
Console.WriteLine(temp);
package main
import (
"encoding/json"
"fmt"
"net/http"
)
func main() {
resp, _ := http.Get("https://wttr.in/Manila?format=j1")
defer resp.Body.Close()
var data map[string]interface{}
json.NewDecoder(resp.Body).Decode(&data)
cond := data["current_condition"].([]interface{})[0].(map[string]interface{})
fmt.Println(cond["temp_C"])
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
HttpClient client = HttpClient.newHttpClient();
HttpRequest req = HttpRequest.newBuilder()
.uri(URI.create("https://wttr.in/Manila?format=j1"))
.build();
HttpResponse<String> res = client.send(req, HttpResponse.BodyHandlers.ofString());
System.out.println(res.body());
https://wttr.in/Manila?format=j1..json to any Reddit URL — instant JSON. No auth for read.3.1.