# Programming Languages API
> A reference for 800+ programming, markup and data languages, built from the GitHub Linguist dataset. Detect which language a file extension belongs to (e.g. .rs → Rust), look up a language by name or alias, get its type, brand color, file extensions and aliases, and search or list by type. Ideal for code editors, syntax tooling, repo analyzers and language badges. (Programming languages — not spoken languages.)

## Authentication
All requests require your oanor API key in the `x-oanor-key` header. Get one at https://www.oanor.com/developer/keys.

```bash
curl -H "x-oanor-key: oanor_live_…" "https://api.oanor.com/proglangs-api/..."
```

## Pricing
- **Free** (Free) — 3,000 calls/Mo, 3 req/s
- **Starter** ($4/Mo) — 60,000 calls/Mo, 10 req/s
- **Pro** ($12/Mo) — 350,000 calls/Mo, 25 req/s
- **Mega** ($33/Mo) — 1,500,000 calls/Mo, 50 req/s

## Endpoints

### Languages

#### `GET /v1/by-extension` — Which language(s) use a file extension

**Parameters:**
- `ext` (query, required, string) — File extension, e.g. .rs (dot optional) Example: `.rs`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/proglangs-api/v1/by-extension?ext=.rs"
```

**Response:**
```json
{
    "data": {
        "count": 3,
        "extension": ".rs",
        "languages": [
            {
                "id": 323,
                "name": "RenderScript",
                "type": "programming",
                "color": null,
                "group": null,
                "aliases": [],
                "filenames": [],
                "extensions": [
                    ".rs",
                    ".rsh"
                ]
            },
            {
                "id": 327,
                "name": "Rust",
                "type": "programming",
                "color": "#dea584",
                "group": null,
                "aliases": [
                    "rs"
                ],
                "filenames": [],
                "extensions": [
                    ".rs",
                    ".rs.in"
                ]
            },
            {
                "id": 399,
                "name": "XML",
                "type": "data",
                "color": "#0060ac",
                "group": null,
                "aliases": [
                    "rss",
                    "xsd",
                    "wsdl"
                ],
                "filenames": [
                    ".classpath",
                    ".cproject",
                    ".project",
                    "App.config",
                    "NuGet.config",
                    "Settings.StyleCop",
                    "Web.Debug.config",
                    "Web.Release.config",
                   
…(truncated, see openapi.json for full schema)
```

#### `GET /v1/language` — A single language by name or alias

**Parameters:**
- `name` (query, optional, string) — Language name, e.g. Python Example: `python`
- `alias` (query, optional, string) — Language alias, e.g. py3

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/proglangs-api/v1/language?name=python"
```

**Response:**
```json
{
    "data": {
        "id": 303,
        "name": "Python",
        "type": "programming",
        "color": "#3572A5",
        "group": null,
        "aliases": [
            "py",
            "py3",
            "python3",
            "rusthon"
        ],
        "filenames": [
            ".gclient",
            "DEPS",
            "SConscript",
            "SConstruct",
            "wscript"
        ],
        "extensions": [
            ".py",
            ".cgi",
            ".fcgi",
            ".gyp",
            ".gypi",
            ".lmi",
            ".py3",
            ".pyde",
            ".pyi",
            ".pyp",
            ".pyt",
            ".pyw",
            ".rpy",
            ".spec",
            ".tac",
            ".wsgi",
            ".xpy"
        ]
    },
    "meta": {
        "timestamp": "2026-05-31T02:11:15.576Z",
        "request_id": "f2a260a9-b535-42a1-a12c-f9ffebbd5600"
    },
    "status": "ok",
    "message": "Language retrieved",
    "success": true
}
```

#### `GET /v1/list` — All languages (lean), optionally by type

**Parameters:**
- `type` (query, optional, string) — Filter by type

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/proglangs-api/v1/list"
```

**Response:**
```json
{
    "data": {
        "type": null,
        "count": 807,
        "languages": [
            {
                "id": 0,
                "name": "1C Enterprise",
                "type": "programming",
                "color": "#814CCC"
            },
            {
                "id": 387204628,
                "name": "2-Dimensional Array",
                "type": "data",
                "color": "#38761D"
            },
            {
                "id": 577529595,
                "name": "4D",
                "type": "programming",
                "color": "#004289"
            },
            {
                "id": 1,
                "name": "ABAP",
                "type": "programming",
                "color": "#E8274B"
            },
            {
                "id": 452681853,
                "name": "ABAP CDS",
                "type": "programming",
                "color": "#555e25"
            },
            {
                "id": 429,
                "name": "ABNF",
                "type": "data",
                "color": null
            },
            {
                "id": 2,
                "name": "AGS Script",
                "type": "programming",
                "color": "#B9D9FF"
            },
            {
                "id": 451700185,
                "name": "AIDL",
                "type": "programming",
                "color": "#34EB6B"
            },
            {
                "id": 658971832,
                "name": "AL",
             
…(truncated, see openapi.json for full schema)
```

#### `GET /v1/search` — Search languages by name/alias, filter by type

**Parameters:**
- `q` (query, optional, string) — Name or alias (substring) Example: `script`
- `type` (query, optional, string) — programming, markup, data or prose Example: `programming`
- `limit` (query, optional, string) — Results per page (1-100, default 20) Example: `20`
- `offset` (query, optional, string) — Pagination offset Example: `0`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/proglangs-api/v1/search?q=script&type=programming&limit=20&offset=0"
```

**Response:**
```json
{
    "data": {
        "count": 20,
        "limit": 20,
        "total": 51,
        "offset": 0,
        "filters": {
            "q": "script",
            "type": "programming"
        },
        "results": [
            {
                "id": 2,
                "name": "AGS Script",
                "type": "programming",
                "color": "#B9D9FF",
                "group": null,
                "aliases": [
                    "ags"
                ],
                "filenames": [],
                "extensions": [
                    ".asc",
                    ".ash"
                ]
            },
            {
                "id": 10,
                "name": "ActionScript",
                "type": "programming",
                "color": "#882B0F",
                "group": null,
                "aliases": [
                    "actionscript 3",
                    "actionscript3",
                    "as3"
                ],
                "filenames": [],
                "extensions": [
                    ".as"
                ]
            },
            {
                "id": 389477596,
                "name": "AngelScript",
                "type": "programming",
                "color": "#C7D7DC",
                "group": null,
                "aliases": [],
                "filenames": [],
                "extensions": [
                    ".as",
                    ".angelscript"
                ]
            },
            {
                "id"
…(truncated, see openapi.json for full schema)
```

### Meta

#### `GET /v1/meta` — Totals, types & source

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/proglangs-api/v1/meta"
```

**Response:**
```json
{
    "data": {
        "total": 807,
        "types": [
            {
                "type": "data",
                "count": 179
            },
            {
                "type": "markup",
                "count": 69
            },
            {
                "type": "programming",
                "count": 541
            },
            {
                "type": "prose",
                "count": 18
            }
        ],
        "fields": [
            "id",
            "name",
            "type",
            "color",
            "extensions",
            "aliases",
            "filenames",
            "group"
        ],
        "source": "GitHub Linguist",
        "unique_extensions": 1451
    },
    "meta": {
        "timestamp": "2026-05-31T02:11:15.780Z",
        "request_id": "95db9f77-e98a-4638-a7f4-38a657714b92"
    },
    "status": "ok",
    "message": "Meta retrieved",
    "success": true
}
```


---
Marketplace page: https://www.oanor.com/api/proglangs-api
OpenAPI spec: https://www.oanor.com/api/proglangs-api/openapi.json
