Felt supports a myriad of formats, both as files and hosted URLs, up to a limit of 5GB. Check out the full list in our Help Center.
Uploading a URL
The easiest way of uploading data into a Felt map via the API is to import from a URL. Here's an example importing all the recent earthquakes from the USGS' live GeoJSON feed:
# Your API token and map ID should look like this:# FELT_API_TOKEN="felt_pat_ABCDEFUDQPAGGNBmX40YNhkCRvvLI3f8/BCwD/g8"# MAP_ID="CjU1CMJPTAGofjOK3ICf1D"FELT_API_TOKEN="<YOUR_API_TOKEN>"MAP_ID="<YOUR_MAP_ID>"curl-L \-XPOST \-H"Content-Type: application/json" \-H"Authorization: Bearer ${FELT_API_TOKEN}" \"https://felt.com/api/v2/maps/${MAP_ID}/upload" \ -d '{"import_url":"https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/all_hour.geojson", "name": "USGS Earthquakes"}'
import requests# Your API token should look like this:# api_token = "felt_pat_ABCDEFUDQPAGGNBmX40YNhkCRvvLI3f8/BCwD/g8"api_token ="<YOUR_API_TOKEN>"map_id ="<YOUR_MAP_ID>"r = requests.post(f"http://felt.com/api/v2/maps/{map_id}/upload", json={"import_url":"https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/all_hour.geojson","name": "USGS Earthquakes", }, headers={"Authorization": f"Bearer {api_token}"})assert r.oklayer_id = r.json()["layer_id"]
import osfrom felt_python import upload_url# Setting your API token as an env variable can save# you from repeating it in every function callos.environ["FELT_API_TOKEN"]="<YOUR_API_TOKEN>"map_id ="<YOUR_MAP_ID>"url_upload =upload_url( map_id=map_id, layer_url="https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/all_hour.geojson", layer_name="USGS Earthquakes",)layer_id = url_upload["layer_id"]
Like maps, layers also have unique identifiers. Make sure to take note of them for subsequent calls, like styling a layer or removing it.
Uploading a file
Uploading a file is a single function call using the felt-python library.
Files aren't uploaded to the Felt app — instead, they're uploaded directly to Amazon S3. Therefore, creating a layer from a file on your computer is a two-step process:
1. Request an upload via the Felt API
Perform a POST request to receive an S3 presigned URL which you can later upload your files to:
r = requests.post(f"https://felt.com/api/v2/maps/{map_id}/upload", headers={"Authorization": f"Bearer {api_token}","Content-Type": "application/json", }, json={"name": "My new layer"},)assert r.oklayer_id = r.json()["layer_id"]presigned_upload = r.json()
from felt_python import upload_filefile_name ="<YOUR_FILE_WITH_EXTENSION>"# Example: regions.geojsonupload_file( map_id=map_id, file_name="YOUR_FILE_WITH_EXTENSION", layer_name="My new layer",)
2. Upload your file(s) to Amazon s3
# This code is a continuation of the previous Python code block# and assumes you already have a "presigned_upload" variablefile_name ="<YOUR_FILE_WITH_EXTENSION>"# Example: regions.geojsonurl = presigned_upload["url"]presigned_attributes = presigned_upload["presigned_attributes"]# A 204 response indicates that the upload was successfulwithopen(file_name, "rb")as file_obj: output = requests.post( url,# Order is important, file should come at the end files={**presigned_attributes, "file": file_obj}, )
# Nothing! Uploading a file is a single step with the felt-python library
Monitoring progress
You can check the upload status of a layer by querying it: