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

GET/api/v1

API 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" }
}
GET/api/v1/airfoils

List 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"
    },
    ...
  ]
}
GET/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

NameInRequiredDescription
namepathYesAirfoil 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

CodeDescription
200Success
404Airfoil not found
429Rate limit exceeded (60 requests/hour)
500Internal 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.