# Solana Program API
> Inspect deployed Solana programs live from public Solana RPC — no key — and answer the question that matters most for safety: can this program still be changed, and by whom? For any program address it resolves the loader it runs under, whether it is executable, its on-chain ProgramData account, the upgrade authority (or that it has been made immutable / frozen), and the slot it was last deployed at. A batch endpoint audits up to twelve programs at once — perfect for checking the upgrade authority of every program a protocol depends on before you trust it — and a loaders endpoint documents Solana's program loaders. Distinct from balance, token and transaction APIs: this is the program and upgrade-authority layer that auditors, wallets and security tooling rely on to judge whether a Solana program is safe. Live from the chain; short cache only.

## 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/solanaprogram-api/..."
```

## Pricing
- **Free** (Free) — 6,100 calls/Mo, 3 req/s
- **Starter** ($9/Mo) — 119,000 calls/Mo, 8 req/s
- **Pro** ($32/Mo) — 740,000 calls/Mo, 20 req/s
- **Business** ($93/Mo) — 4,700,000 calls/Mo, 50 req/s

## Endpoints

### Programs

#### `GET /v1/batch` — Audit up to 12 programs' upgrade authorities at once

**Parameters:**
- `addresses` (query, required, string) — Comma-separated program addresses Example: `JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4,TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/solanaprogram-api/v1/batch?addresses=JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4%2CTokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"
```

**Response:**
```json
{
    "data": {
        "note": "Audit up to 12 program addresses at once — each program's upgrade authority and immutability.",
        "count": 2,
        "source": "public Solana RPC",
        "programs": [
            {
                "loader": "BPF Loader (Upgradeable)",
                "address": "JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4",
                "executable": true,
                "is_program": true,
                "upgradeable": true,
                "is_immutable": false,
                "loader_program": "BPFLoaderUpgradeab1e11111111111111111111111",
                "upgrade_authority": "CvQZZ23qYDWF2RUpxYJ8y9K4skmuvYEEjH7fK58jtipQ",
                "last_deployed_slot": 423991740,
                "program_data_account": "4Ec7ZxZS6Sbdg5UGSLHbAnM7GQHp2eFd4KYWRexAipQT"
            },
            {
                "loader": "BPF Loader (Upgradeable)",
                "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
                "executable": true,
                "is_program": true,
                "upgradeable": true,
                "is_immutable": true,
                "loader_program": "BPFLoaderUpgradeab1e11111111111111111111111",
                "upgrade_authority": null,
                "last_deployed_slot": 419472000,
                "program_data_account": "3gvYRKWyXRR9xKWe1ZjPhLY5ZJRN7KDB4rFZFGoJfFk2"
            }
        ]
    },
    "meta": {
        "timestamp": "2026-06-14T08:04:03.565Z",
        "request_id": "4e1d9224-9719-4
…(truncated, see openapi.json for full schema)
```

#### `GET /v1/program` — Inspect one program: loader, upgrade authority, immutability

**Parameters:**
- `address` (query, required, string) — Solana program address (base58 pubkey) Example: `JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/solanaprogram-api/v1/program?address=JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4"
```

**Response:**
```json
{
    "data": {
        "note": "Program inspection: loader, executability, ProgramData account, upgrade authority and immutability. is_immutable true means the program can no longer be changed (upgrade authority revoked or a non-upgradeable loader).",
        "loader": "BPF Loader (Upgradeable)",
        "source": "public Solana RPC",
        "address": "JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4",
        "executable": true,
        "is_program": true,
        "upgradeable": true,
        "is_immutable": false,
        "loader_program": "BPFLoaderUpgradeab1e11111111111111111111111",
        "upgrade_authority": "CvQZZ23qYDWF2RUpxYJ8y9K4skmuvYEEjH7fK58jtipQ",
        "last_deployed_slot": 423991740,
        "program_data_account": "4Ec7ZxZS6Sbdg5UGSLHbAnM7GQHp2eFd4KYWRexAipQT"
    },
    "meta": {
        "timestamp": "2026-06-14T08:04:04.249Z",
        "request_id": "610cd701-2104-4a8c-ac07-1c1a88ec38b2"
    },
    "status": "ok",
    "message": "Program retrieved successfully",
    "success": true
}
```

### Reference

#### `GET /v1/loaders` — Solana's program loaders and whether they are upgradeable

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

**Response:**
```json
{
    "data": {
        "note": "Solana's program loaders. A program owned by the Upgradeable loader can be changed by its upgrade authority; others are immutable.",
        "count": 5,
        "source": "static reference",
        "loaders": [
            {
                "name": "BPF Loader (Upgradeable)",
                "program_id": "BPFLoaderUpgradeab1e11111111111111111111111",
                "upgradeable": true
            },
            {
                "name": "BPF Loader 2 (non-upgradeable)",
                "program_id": "BPFLoader2111111111111111111111111111111111",
                "upgradeable": false
            },
            {
                "name": "BPF Loader (deprecated)",
                "program_id": "BPFLoader1111111111111111111111111111111111",
                "upgradeable": false
            },
            {
                "name": "Loader v4",
                "program_id": "LoaderV411111111111111111111111111111111111",
                "upgradeable": false
            },
            {
                "name": "Native Loader",
                "program_id": "NativeLoader1111111111111111111111111111111",
                "upgradeable": false
            }
        ]
    },
    "meta": {
        "timestamp": "2026-06-14T08:04:04.328Z",
        "request_id": "6d744084-a713-4a2f-a325-7a08863f5544"
    },
    "status": "ok",
    "message": "Loaders retrieved successfully",
    "success": true
}
```

### Meta

#### `GET /v1/meta` — Service metadata & live sample

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

**Response:**
```json
{
    "data": {
        "sample": {
            "immutable": false,
            "upgradeable": true
        },
        "source": "public Solana RPC (getAccountInfo / getMultipleAccounts, jsonParsed), keyless",
        "service": "solanaprogram-api",
        "endpoints": {
            "GET /v1/meta": "This document.",
            "GET /v1/batch": "Audit up to 12 programs' upgrade authorities at once (addresses=<pubkey>,<pubkey>).",
            "GET /v1/loaders": "Solana's program loaders and whether they are upgradeable.",
            "GET /v1/program": "Inspect one program: loader, upgrade authority, immutability (address=<pubkey>)."
        },
        "description": "Inspect deployed Solana programs live via public Solana RPC: loader, executability, ProgramData account, upgrade authority and immutability — can this program still be changed, and by whom. A batch endpoint audits many programs at once; a loaders endpoint documents Solana's loaders. The program/upgrade-authority layer for auditors and security tooling. Live, short cache only.",
        "upstream_status": "ok"
    },
    "meta": {
        "timestamp": "2026-06-14T08:04:04.395Z",
        "request_id": "961bcd5d-3c3a-4593-96fe-6ae3cfaeccaf"
    },
    "status": "ok",
    "message": "Meta",
    "success": true
}
```


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