Managing your Feeds

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 feedId that 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

{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 NameData TypeDescriptionSample ValueRequired
feed_idstringYour identifier for the feed. Must be unique in your account."my_weather_sensors"Yes
configurationobjectThe feed's settings. See Configuration Parameters below.See request examplesYes

Configuration Parameters

Field NameData TypeDescriptionSample ValueRequired
namestringDisplay name of the feed in the platform."Weather Sensors"Yes
enabledbooleanWhether the feed is active. Defaults to true. A pull feed with enabled: false is not fetching data.trueNo
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
sourceTypestringPull feeds only. Where the data comes from, for example http."http"Pull feeds
sourceobjectPull feeds only. Source settings for the sourceType, for example {"url": "..."} for http.{"url": "https://example.com/sensors.csv"}Pull feeds
cronstringPull feeds only. How often to fetch the source, as a 5-field cron expression (UTC)."0 * * * *"Pull feeds
transformerobjectPull feeds only. How to turn the fetched file into platform objects. See Transformer below.See request examplesPull feeds

Transformer

Field NameData TypeDescription
namestringFormat of the source data: Csv, Json, or GeoJson. Required.
transformationsarrayField 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:

MethodWhat it doesParams
noOpPasses the value through unchanged.—
toIntConverts a string to an integer.—
toDateParses a date string.format (Go time layout, default RFC 3339), offsetMinutes
epochToDateParses a Unix timestamp.unit (s, ms, us, ns; default s), offsetMinutes
concatJoins several source values into one string. Recommended for building object IDs.delimiter (default _)
toIDJoins values and hashes the result. Can collide on large datasets; prefer concat.delimiter (default _)
multiplyMultiplies a number.by (default 1)
toPercentageMultiplies a number by 100.—
trimNumberRounds a number.precision (default 2)
enumMaps input values to output values.mapping (required), default
rangeMaps 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, and transformer.

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

StatusMeaning
200Success (get and list).
201Feed created. The body contains the new feed.
204Success with no body (update, delete, restore).
400Invalid request body or parameters.
401Missing or invalid API key.
403Your API key does not have permission to manage feeds.
404Feed not found in your account.
409On 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_id is the identifier you use everywhere else, for example POST /v4/connect/assets/{feedId}. It cannot be changed after the feed is created.
  • Pull schedules: cron uses the standard 5-field format (minute, hour, day of month, month, day of week), for example 0 1,13 * * * for 01:00 and 13:00 UTC.