Overview
A feed is a dedicated layer in the Tomorrow.io platform through which your data (assets, events, routes) is ingested, displayed, and managed. The Feed Configuration API lets you create, list, update and delete the feeds in your account.
There are two kinds of feed:
- Push feeds - you send data to the feed yourself, for example with the Assets API. Pushing to a
feedIdthat does not exist yet creates the feed automatically, so you only need this API to customize or manage it. - Pull feeds - Tomorrow.io fetches your data from a source (such as an HTTP URL) on a schedule and transforms it using the rules in the feed configuration.
Endpoints
| Method | Endpoint | Description |
|---|---|---|
| POST | https://api.tomorrow.io/v4/feed-configurations | Create a feed |
| GET | https://api.tomorrow.io/v4/feed-configurations | List your feeds |
| GET | https://api.tomorrow.io/v4/feed-configurations/{feedId} | Get one feed configuration |
| PUT | https://api.tomorrow.io/v4/feed-configurations/{feedId} | Update a feed (partial update) |
| DELETE | https://api.tomorrow.io/v4/feed-configurations/{feedId} | Delete a feed |
{feedId} is the feed_id you chose when you created the feed (or the feedId you pushed data to).
Create a Feed
POST: https://api.tomorrow.io/v4/feed-configurations
Request Body Parameters
| Field Name | Data Type | Description | Sample Value | Required |
|---|---|---|---|---|
| feed_id | string | Your identifier for the feed. Must be unique in your account. | "my_weather_sensors" | Yes |
| configuration | object | The feed's settings. See Configuration Parameters below. | See request examples | Yes |
Configuration Parameters
| Field Name | Data Type | Description | Sample Value | Required |
|---|---|---|---|---|
| name | string | Display name of the feed in the platform. | "Weather Sensors" | Yes |
| enabled | boolean | Whether the feed is active. Defaults to true. A pull feed with enabled: false is not fetching data. | true | No |
| tags | object | Key/value metadata. The category key controls where the feed appears: CUSTOM_ASSET tag means the feed will be displayed in the platform. | {"category": "CUSTOM_ASSET"} | No |
| sourceType | string | Pull feeds only. Where the data comes from, for example http. | "http" | Pull feeds |
| source | object | Pull feeds only. Source settings for the sourceType, for example {"url": "..."} for http. | {"url": "https://example.com/sensors.csv"} | Pull feeds |
| cron | string | Pull feeds only. How often to fetch the source, as a 5-field cron expression (UTC). | "0 * * * *" | Pull feeds |
| transformer | object | Pull feeds only. How to turn the fetched file into platform objects. See Transformer below. | See request examples | Pull feeds |
Transformer
| Field Name | Data Type | Description |
|---|---|---|
| name | string | Format of the source data: Csv, Json, or GeoJson. Required. |
| transformations | array | Field mappings. Each item has a targetField, either sourceFields (source columns or property names) or a static value, an optional attributeType (text, number, boolean, color, speed, date), and an optional transformMethod. StartTime and EndTime must be mapped. |
Supported transformMethod.name values:
| Method | What it does | Params |
|---|---|---|
| noOp | Passes the value through unchanged. | — |
| toInt | Converts a string to an integer. | — |
| toDate | Parses a date string. | format (Go time layout, default RFC 3339), offsetMinutes |
| epochToDate | Parses a Unix timestamp. | unit (s, ms, us, ns; default s), offsetMinutes |
| concat | Joins several source values into one string. Recommended for building object IDs. | delimiter (default _) |
| toID | Joins values and hashes the result. Can collide on large datasets; prefer concat. | delimiter (default _) |
| multiply | Multiplies a number. | by (default 1) |
| toPercentage | Multiplies a number by 100. | — |
| trimNumber | Rounds a number. | precision (default 2) |
| enum | Maps input values to output values. | mapping (required), default |
| range | Maps numeric ranges to output values. | ranges (list of min, max, value; required), default |
Request Example: Push Feed
{
"feed_id": "my_weather_sensors",
"configuration": {
"name": "Weather Sensors",
"tags": {
"category": "CUSTOM_ASSET"
}
}
}Request Example: Pull Feed (GeoJSON over HTTP)
The source URL must return a GeoJSON FeatureCollection. Each feature's geometry is used as the object's location, and sourceFields refer to keys in the feature's properties.
{
"feed_id": "hourly_hazard_zones",
"configuration": {
"name": "Hourly Hazard Zones",
"sourceType": "http",
"source": {
"url": "https://example.com/hazard-zones.geojson"
},
"cron": "0 * * * *",
"tags": {
"category": "CUSTOM_ASSET"
},
"transformer": {
"name": "GeoJson",
"transformations": [
{
"targetField": "StartTime",
"sourceFields": ["start"],
"transformMethod": { "name": "toDate" }
},
{
"targetField": "EndTime",
"sourceFields": ["end"],
"transformMethod": { "name": "toDate" }
},
{
"targetField": "severity",
"sourceFields": ["severity"],
"attributeType": "text"
},
{
"targetField": "probability",
"sourceFields": ["probability"],
"attributeType": "number",
"transformMethod": { "name": "toInt" }
}
]
}
}
}A matching source feature looks like this:
{
"type": "Feature",
"geometry": {
"type": "Polygon",
"coordinates": [[[-74.1, 40.6], [-73.8, 40.6], [-73.8, 40.9], [-74.1, 40.9], [-74.1, 40.6]]]
},
"properties": {
"start": "2026-10-30T12:00:00Z",
"end": "2026-10-30T18:00:00Z",
"severity": "high",
"probability": "80"
}
}Response Example
201 Created
{
"id": 1234,
"feed_id": "my_weather_sensors",
"configuration": {
"name": "Weather Sensors",
"tags": { "category": "CUSTOM_ASSET" }
},
"account_id": "<your account id>",
"is_deleted": false,
"created_at": "2026-10-29T10:00:00Z",
"updated_at": "2026-10-29T10:00:00Z"
}List Feeds
GET: https://api.tomorrow.io/v4/feed-configurations
Returns 200 OK with an array of feeds in the format of the response example above.
Get a Feed
GET: https://api.tomorrow.io/v4/feed-configurations/{feedId}
Returns 200 OK with the feed, or 404 if no feed with this ID exists in your account.
Update a Feed
PUT: https://api.tomorrow.io/v4/feed-configurations/{feedId}
Send only the fields you want to change, inside configuration. Returns 204 No Content.
{
"configuration": {
"name": "Weather Sensors (EU)",
"enabled": false
}
}- Updates are merged. Fields you leave out keep their current values. A field cannot be removed through an update.
- Arrays and objects are replaced as a whole. To add a label, send the existing labels plus the new one; sending only the new label removes the others. The same applies to
tags,source, andtransformer.
Delete a Feed
DELETE: https://api.tomorrow.io/v4/feed-configurations/{feedId}
Deleting a feed hides it from the platform and api and stops it from being processed.
Responses
| Status | Meaning |
|---|---|
| 200 | Success (get and list). |
| 201 | Feed created. The body contains the new feed. |
| 204 | Success with no body (update, delete, restore). |
| 400 | Invalid request body or parameters. |
| 401 | Missing or invalid API key. |
| 403 | Your API key does not have permission to manage feeds. |
| 404 | Feed not found in your account. |
| 409 | On create: a feed with this feed_id already exists. |
Integration Details
- Authentication: You must include a valid API key in the request. Contact your account manager to obtain credentials and integration access.
- Account scope: Every feed belongs to the account of the API key that created it. You can only see and change your own account's feeds.
- Feed IDs:
feed_idis the identifier you use everywhere else, for examplePOST /v4/connect/assets/{feedId}. It cannot be changed after the feed is created. - Pull schedules:
cronuses the standard 5-field format (minute, hour, day of month, month, day of week), for example0 1,13 * * *for 01:00 and 13:00 UTC.