We just put the finishing touches on the Mapbox Upload API and are taking it out of preview. The API is ready for production and available on every Mapbox plan!
Developers can use the Upload API to integrate Mapbox’s powerful data upload pipeline into their applications. We provide temporary credentials to stage a spatial file on S3, and then process it into raster tiles or Mapbox Vector Tiles readable by Mapbox GL and Mapbox.js.
The API supports a wide range of spatial file types: GeoJSON, KML, GPX, Shapefiles, CSV, GeoTIFF, and MBTiles – and we’re constantly adding support for more types and larger files.
People are already building amazing things with this API:
- Astro Digital built a real-time imagery browser that allows users to explore their archive of imagery and publish scenes directly to the web in minutes
- DroneDeploy streams data collected from their drones back to Mapbox for processing and hosting
- Slalom Consulting’s Chris Toomey built a plug-in for Alteryx allowing your pipelines to deliver outputs to Mapbox
- Mapbox is constantly using the upload API to process huge amount of satellite imagery
To get you started, we’ve added Upload API support to the new Mapbox JavaScript SDK with support for the ruby and Python SDKs coming soon.
Here’s a example of uploading from a Node.js app using the Mapbox SDK and AWS SDK for JavaScript:
var path = '/path/of/file/to/upload';
var tilesetId = 'myaccount.mytileset';
var MapboxClient = require('mapbox');
var mapboxClient = new MapboxClient('ACCESSTOKEN');
var AWS = require('aws-sdk');
mapboxClient.createUploadCredentials(function(err, credentials) {
if (err) throw err;
// Use aws-sdk and the provided credentials to stage the file on Amazon S3
var s3 = new AWS.S3({
accessKeyId: credentials.accessKeyId,
secretAccessKey: credentials.secretAccessKey,
sessionToken: credentials.sessionToken,
region: 'us-east-1'
});
s3.putObject({
Bucket: credentials.bucket,
Key: credentials.key,
Body: fs.createReadStream(path)
}, function(err, resp) {
if (err) throw err;
// Create an upload to submit the file for processing
mapboxClient.createUpload({
tileset: tilesetId,
url: credentials.url
}, function(err, upload) {
if (err) throw err;
console.log('upload created with id:', upload.id);
});
});
});
You can also use mapbox-upload, a command-line tool for uploading files from anywhere. Here’s an example:
$ npm install --global mapbox-upload
$ export MapboxAccessToken=<access token with uploads:write scope enabled>
$ mapbox-upload username.dataid /path/to/file
This is the first in a series of API improvements coming soon: we’re working on OAuth2 authentication support, read/write APIs for tilesets and projects, and powerful new ways to interact with raw data.
We hope you build awesome things with the Upload API. Start with the API documentation, and email us at help@mapbox.com if you have any questions or feedback.