# Connection bootstrapper service

Nominal periodically scrapes connected databases (Connections) in order to maintain a database of all series that can be read from that database. This service is responsible for executing the scrape, and can be used manually to trigger a rescrape for any reason (for example, when updating a schema).

OpenAPI file: [`ConnectionBootstrapperService.json`](https://dev.nominal.io/api/_downloads/25bb0ba6ce35245c33bd0bec585064b9/ConnectionBootstrapperService.json)

## Endpoints

### Populate series

POST `/data-source/connection/v1/{rid}/populateSeries`

Populates the connection with series, by querying within the requested time range. If start or end are both omitted, will query the last 7 days by default. If one of start or end is omitted, will query a 7 day range from the provided start or end. Will throw if the requested range is larger than 30 days.

Path parameters

`rid` string (RID) required
:   ​

Body

`startTime` string (date-time)
:   ​

`endTime` string (date-time)
:   ​

Response

No content (HTTP 204).

Request

**curl**

```shell
curl -X POST "https://api.gov.nominal.io/api/data-source/connection/v1/<rid>/populateSeries" \
  -H "Authorization: Bearer <api key>" \
  -H "Content-Type: application/json" \
  --data '{
  "startTime": "2026-01-01T00:00:00Z",
  "endTime": "2026-01-01T00:00:00Z"
}'
```

**requests**

```python
import requests

response = requests.post(
    "https://api.gov.nominal.io/api/data-source/connection/v1/<rid>/populateSeries",
    headers={"Authorization": "Bearer <api key>"},
    json={"startTime": "2026-01-01T00:00:00Z", "endTime": "2026-01-01T00:00:00Z"},
)
response.raise_for_status()
```

**httpx**

```python
import httpx

response = httpx.post(
    "https://api.gov.nominal.io/api/data-source/connection/v1/<rid>/populateSeries",
    headers={"Authorization": "Bearer <api key>"},
    json={"startTime": "2026-01-01T00:00:00Z", "endTime": "2026-01-01T00:00:00Z"},
)
response.raise_for_status()
```

**aiohttp**

```python
import asyncio

import aiohttp

async def main() -> None:
    async with aiohttp.ClientSession() as session:
        async with session.post(
            "https://api.gov.nominal.io/api/data-source/connection/v1/<rid>/populateSeries",
            headers={"Authorization": "Bearer <api key>"},
            json={
                "startTime": "2026-01-01T00:00:00Z",
                "endTime": "2026-01-01T00:00:00Z",
            },
        ) as response:
            response.raise_for_status()

asyncio.run(main())
```

Response: `204`

No content.

## Errors

[Errors](https://dev.nominal.io/api/legacy.md#errors) shows how these errors are sent.

Each error’s `errorName` is `Connection:` followed by its name below.

| Status | Name | Notes |
| --- | --- | --- |
| 400 | `FailedToAddTagsToConnection` | Cannot manually add tags to a Nominal connection. |
| 400 | `NoSecretRidProvided` |  |
| 400 | `PopulateSeriesTimeRangeTooLarge` |  |
| 403 | `NotAllowedToCreateConnection` |  |
| 404 | `ConnectionNotFound` |  |
| 404 | `DatasetRidNotFound` |  |
| 404 | `DatasourceRidNotFound` |  |
| 404 | `SecretsNotFound` |  |
| 500 | `FailedToCreateConnection` |  |

Page design based on [Scalar](https://scalar.com), MIT License.
