API Documentation
Free, public REST API for airfoil data and aerodynamic polars.
Overview
The Foil.tools API provides programmatic access to our database of >1,600 airfoils and their pre-computed aerodynamic polars across a wide range of Reynolds numbers.
Base URL
https://foil.tools/api/v1
Authentication
None required
Rate Limit
60 requests/hour
Rate Limiting
All API responses include rate limit headers to help you track your usage:
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 58
X-RateLimit-Reset: 1710547200 (Unix timestamp)
When the limit is exceeded, the API returns a 429 status with a JSON body containing the reset time.
Endpoints
/api/v1API discovery endpoint. Returns available endpoints, descriptions, and rate limit info.
Example
Request
curl https://foil.tools/api/v1
Response
{
"version": "1",
"base_url": "https://foil.tools/api/v1",
"endpoints": [ ... ],
"rate_limit": { "requests_per_hour": 60, "auth": "none" }
}/api/v1/airfoilsList all available airfoils with name, filename, family, and data source.
Example
Request
curl https://foil.tools/api/v1/airfoils
Response
{
"count": 1668,
"airfoils": [
{
"name": "NACA 2412",
"filename": "naca2412",
"family": "NACA 4-digit",
"source": "UIUC Database"
},
...
]
}/api/v1/polars/{name}Aerodynamic polar data (CL, CD, CM vs angle of attack) for a specific airfoil across multiple Reynolds numbers. Name is case-insensitive and hyphens are optional.
Parameters
| Name | In | Required | Description |
|---|---|---|---|
| name | path | Yes | Airfoil name, e.g. naca2412, e423, s1223. Case-insensitive; hyphens optional (naca2412 and NACA-2412 both work). |
Example
Request
curl https://foil.tools/api/v1/polars/naca2412
Response
{
"airfoil": "naca2412",
"source": "foil.tools",
"units": {
"Re": "dimensionless",
"alpha": "degrees",
"CL": "dimensionless",
"CD": "dimensionless",
"CM": "dimensionless"
},
"polars": [
{ "Re": 50000, "Ncrit": 1, "alpha": -5, "CL": -0.312, "CD": 0.042, "CM": -0.008 },
{ "Re": 50000, "Ncrit": 1, "alpha": -4.5, "CL": -0.261, "CD": 0.039, "CM": -0.011 },
...
]
}Status Codes
| Code | Description |
|---|---|
| 200 | Success |
| 404 | Airfoil not found |
| 429 | Rate limit exceeded (60 requests/hour) |
| 500 | Internal server error |
CORS
All /api/v1/* endpoints support cross-origin requests. The API returns Access-Control-Allow-Origin: * so you can call it directly from browser-based applications.