API Reference

These pages contain the complete specification of how the API works. We try to follow standard practices to make our API easy to use from one of our client libraries or from any normal HTTP client.


The API is rooted under The API endpoints were previously available at The old base URL will continue to function indefinitely.


We use the OAuth 2.0 protocol to authenticate clients to the API. There are multiple ways to get a token to a user’s account. Please read our Authentication Overview to choose the right one for your app.

Requests and Responses

In general, required parameters are in URLs, and optional parameters are specified in the query string. This is not always the case.

If we need complex data structures from you, you should send them as a JSON string in the request body with an HTTP header of Content-type: application/json.

Our API responses are always JSON encoded. We use HTTP status codes to indicate success or failures.


From time to time, we’ll need to change the API. If we change the behavior of an endpoint or remove a field, we will provide a migration so clients can opt into the new behavior when their code is updated. Migrations are our way of versioning the API. They allow your app the flexibility to control which version of the API it uses on a per request or global basis.

Rate Limits

In order to ensure a high quality of service and prevent abuse, our API is rate limited. We use standard HTTP headers and status codes to rate limit requests. For more information (and to view the current rate limits), please see the Rate Limits documentation.


If there is an error, we return an HTTP status code and a JSON response describing it.