# Status

> API version: v1

API version, data freshness and the number of covered companies. Needs no API key; limited to 60 requests per minute per IP address.

`GET /api/v1/status`

Needs no API key.

## Request

**curl**

```bash
curl "https://studyingstocks.com/api/v1/status"
```

**Python**

```python
import os
import requests

response = requests.get("https://studyingstocks.com/api/v1/status")
response.raise_for_status()
print(response.json())
```

**JavaScript**

```javascript
const response = await fetch("https://studyingstocks.com/api/v1/status");
if (!response.ok) throw new Error(await response.text());
console.log(await response.json());
```

## Response

The API is up.

```json
{
    "data": {
        "status": "ok",
        "api_version": "v1",
        "companies_covered": 4210,
        "data_updated_at": "2026-10-16T02:00:00Z"
    },
    "meta": {
        "source": "SEC EDGAR",
        "api_version": "v1",
        "generated_at": "2026-10-16T02:00:00Z"
    }
}
```

### Response fields

| Field | Type | Description |
|---|---|---|
| `data.status` | string |  |
| `data.api_version` | string |  |
| `data.companies_covered` | integer |  |
| `data.data_updated_at` | string or null | When the most recent company was synchronized with SEC EDGAR. |
| `meta.source` | string | Where the data comes from: always SEC EDGAR (calculated items are derived from it). |
| `meta.api_version` | string |  |
| `meta.generated_at` | string | When this response was generated (responses are cached for a few hours). |

## Errors

| Status | Code | When |
|---|---|---|
| 422 | [`invalid_parameter`](https://studyingstocks.com/developers/errors#invalid_parameter) | An unknown query parameter was sent. |
| 429 | [`rate_limited`](https://studyingstocks.com/developers/errors#rate_limited) | Rate limit reached. |
| 500 | [`server_error`](https://studyingstocks.com/developers/errors#server_error) | Something went wrong on our side. |

All errors have the [same shape](https://studyingstocks.com/developers/errors).
