Sana Learn Overview

Sana Learn API allows you to easily customize exercise-based practice sessions, such as review sessions, to the progress and performance of the individual user. You can simply request what exercise should be presented next, given that the outcomes of previously completed exercises have been posted to Sana Learn API. The API allows you to specify a content filter and practice mode for every recommendation. Have a look at our Demo Application to see an example of how the Sana Learn API can be integrated with a generic Quiz app.

Exercises can be requested one at a time, allowing the system to adapt to the most recent outcome, as visualized below.

Sana Learn Single Image

Another option is to request a sequence of exercises (the next “quiz” or "session") in a single call and post back the outcomes either in one batch or one-by-one as they are completed. Note that the app should wait for the response of the latest posted event before making a call to the next-assets endpoints, so that it is guaranteed that the Sana backend takes the latest event into account when serving the next recommendation.

Sana Learn Batch Image

Content Registry Endpoints

To get real-time recommendations from the Sana Learn API, it is required that a registry of the available assets is exported to Sana Labs and put into a view.

The Asset Bank contains a registry of all your content’s metadata, i.e. the content itself does not have to be exported to Sana Labs, just references to the available assets and any available metadata (tags). The tags can be used for filtering and selection as well as for algorithms and analytics.

A view is a collection of assets from the asset bank. It defines the context in which a user interacts with content. Any real-time modeling happens within a view. Any next asset recommendations happen within a view. Also response submit events should be posted with a view.

Content Registry Overview

Asset Management

In order to work with views, a registry of assets must be created.
All endpoints in asset management category require you to provide your Admin API Key in X-API-KEY header, see Authentication for details.


Create / Update an Asset

Creates or updates the provided asset. If the provided asset_id doesn’t exist in Sana Content Registry, the asset is created, otherwise the asset is updated with the provided parameters in the body.

Endpoint

PUT /v1/assets/<asset_id>

Body Parameters

KeyMandatoryTypeDescription
typeYesStringThe type of asset, either exercise or theory. The asset type defines the expected structure of the properties object.
tagsNoArray of Tag objectsAny free-form tagging of asset. Can be used for retrieval/filtering in API. Reserved tag names: content_type (with value equal to e.g. mcq, text or video).
descriptionNoStringAny free-form description of the asset (maximum 10 000 characters). For exercises and shorter theory sections it is recommended to put the whole question or theory text into the asset description. This information can be used for content analysis.
nlp_textNoStringUsed for content analysis through natural language processing. Multiple choice questions should have this field set to a concatenation of the question text and response alternatives, separated by \n. Limit 10 KB.
content_urlNoStringIf it is possible to access the actual content by a URL, it is recommended to provide this information.
metadataNoObjectAn object with fields containing additional asset metadata (any field with String or Number value type is allowed).

Response Format

On success, the HTTP status code in the response header is 200 OK and the response body is empty. On error, the header status code is an error code and the response body contains a list of Error Response objects.


Delete an Asset

Endpoint

DELETE /v1/assets/<asset_id>

Response

On success, the HTTP status code in the response header is 200 OK and the response body is empty. On error, the header status code is an error code and the response body contains a list of Error Response objects.


Get an Asset

Endpoint

GET /v1/assets/<asset_id>

Response Format

On success, the HTTP status code in the response header is 200 OK and the response body is an Asset Definition object. On error, the header status code is an error code and the response body contains a list of Error Response objects.


Bulk Create / Update

Lets you to bulk create or update assets. This is useful if the content registry is large and many elements have to be created / updated.

Endpoint

PUT /v1/assets

Body Parameters

KeyMandatoryTypeDescription
assetsYesArray of Asset Definition objects.The items to be created/updated. It is possible to create/update a maximum of 1000 assets per call.

Response Format

On success, HTTP Status Code 200 OK with an empty body. This means that all the individual assets have been successfully created / modified. This operation is atomic, meaning that either all individual items are created/updated or none of them are created/updated. On error, the header status code is an error code and the response body contains a list of Error Response objects.


Bulk Delete

Lets you delete items in bulk. The items will be deleted if they exist.

Endpoint

DELETE /v1/assets

Query String Parameters

KeyMandatoryTypeDescription
asset_idsYesArray of StringsThe asset IDs to be deleted. Comma separated.

Response Format

On success, the HTTP Status Code is 200 OK and the response body is as below. This means that all the individual assets have been successfully deleted. This operation is atomic, meaning that on success all individual items are deleted and on failure none of them are deleted. Note that non-existing asset_ids are ignored and not considered an error.

KeyTypeDescription
asset_idsArray of StringsThe asset IDs that were deleted. If IDs for assets that do not exist are passed in the request body, they will not be found in this list.

On error, the header status code is an error code and the response body contains a list of Error Response objects.


Get Multiple Assets

Lets you get multiple assets.

Endpoint

GET /v1/assets

Query String Parameters

KeyMandatoryTypeDescription
asset_idsYesArray of StringsComma separated IDs of the assets to be queried. It is possible to query a maximum of 100 assets in a single call.

Response Format

On success, the HTTP Status Code is 200 OK and the response body as below. This means that all the queried assets have been successfully fetched.

KeyTypeDescription
assetsArray of Asset Definition objectsThe assets queried.

On error, the header status code is an error code and the response body contains a list of Error Response objects.


Views Management

A view is a collection of assets from your asset bank. A view can represent hierarchical structure as well as (optionally) the default sequential order of the assets. The structure defined in a view is used to express the focus of Sana Learn sessions and is also utilized by the recommendation algorithm. A view defines the context in which a user interacts with content - allowing the recommendation algorithm to model assets differently in different views. Any real-time modeling for next-asset recommendations happens within a view, but content insights can also be transferred between views regularly.

There is a (soft) limit of 10 000 items per view. If you have a large amount of items it is good to use multiple views for different courses, eg. splitting math and biology into separate views. However, all material that relate to one another should generally be placed within the same view.


Create / Update a View

Lets you create or update a view with the provided assets. If a view with the provided id already exists, the view will be updated, otherwise it will be created. Note that a reference to all assets that belong to this view should be provided when creating or updating a view.

Endpoint

PUT /v1/views/<view_id>

Body Parameters

KeyMandatoryTypeDescription
nameYesStringThe name of the view.
pathNoStringDefines the location of the view’s items in the content hierarchy using the same standard as for location of files in a file system: /path/to/location, i.e. / is used as separator between parent “directories”.
descriptionNoStringA description of the view.
orderedNoBooleanSpecifies whether there is a default ordering of the items in the view.
itemsYesArray of View Item objectsThe items in this view. If there is a default sequential ordering of the content it should be represented by the order of items and ordered should be set to True.

Response Format

On success, the HTTP status code in the response header is 200 OK and an empty body. On error, the header status code is an error code and the response body contains a list of Error Response objects.


Delete a view

Deletes the view with the provided id.

Endpoint

DELETE /v1/views/<view_id>

On success, the HTTP status code in the response header is 200 OK and an empty body. On error, the header status code is an error code and the response body contains a list of Error Response objects.


Get a view

Gets the view with the provided id.

Endpoint

GET /v1/views/<view_id>

Response Format

On success, the HTTP Status Code is 200 OK and the response body is as below.

KeyTypeDescription
idStringThe ID of the view.
nameStringThe name of the view.
pathStringThe location of the view’s items in the content hierarchy.
descriptionStringThe description of the view.
orderedBooleanSpecifies whether there is a default ordering of the items in the view.
itemsArray of View Item objectsThe items in this view.

On error, the header status code is an error code and the response body contains a list of Error Response objects.

Example

curl "https://api.sanalabs.com/v1/views/view_id1"
  -H "Content-Type: application/json"
  -H "X-API-KEY: $API_KEY"

Response

{
  "id": "view_id1",
  "path": "/math/multiplication",
  "name": "basic",
  "description": "easy multiplication questions",
  "ordered": true,
  "items": [
    {
        "asset_id": "asset_1",
        "path": "/math/multiplication/easy",
        "attributes": {}
    }
  ]
}

Get all views

Gets all views created for your application sorted from least recently updated to most recently updated.

Endpoint

GET /v1/views

Query Parameters

KeyMandatoryTypeDescription
last_view_idNostringOnly include views which were updated after the last_view_id view
limitNoIntegerDefaults to 1000. The maximum number of views to return. limit cannot exceed 1000.

Response Format

On success, the HTTP Status Code is 200 OK and the response body is as below.

KeyTypeDescription
viewsAn array of view objectsViews for your application sorted from least recently updated to most recently updated.

Each view object matches the schema below:

KeyTypeDescription
idStringThe ID of the view.
nameStringThe name of the view.
pathYesStringThe location of the view’s assets in the content hierarchy.
descriptionStringThe description of the view.
orderedBooleanSpecifies whether there is a default ordering of the assets in the view.

Note that the view’s assets are not included in the response. If you want to fetch assets for your views you will need to perform a request for each view using the GET /v1/views/<view_id> endpoint.

On error, the header status code is an error code and the response body contains a list of Error Response objects.

Example

curl "https://api.sanalabs.com/v1/views"
  -H "Content-Type: application/json"
  -H "X-API-KEY: $API_KEY"

Response

{
  "views": [
    {
        "id": "v1",
        "path": "/math/multiplication",
        "name": "basic",
        "description": "easy multiplication questions",
        "ordered": true
    },
    {
        "id": "v2",
        "path": "/math/division",
        "name": "basic",
        "description": "easy division questions",
        "ordered": false
    },
    {
        "id": "v3",
        "path": "/math/division",
        "name": "hard",
        "description": "hard division questions",
        "ordered": false
    }
  ]
}

Example with query parameters

curl "https://api.sanalabs.com/v1/views?last_view_id=v1&limit=1"
  -H "Content-Type: application/json"
  -H "X-API-KEY: $API_KEY"

Response

{
  "views": [
    {
        "id": "v2",
        "path": "/math/division",
        "name": "basic",
        "description": "easy division questions",
        "ordered": false
    }
  ]
}


Real Time Endpoints

The following set of endpoints should be called with every user interaction as described in the Overview.


Posting User Events

Posts user events to Sana. Posting of events is required for Sana to make personalized recommendations of what exercises to display next. The following event types are currently supported in the Sana Learn API:

Event TypeDescription
response_submitShould be sent whenever a user has completed an exercise.
theory_viewedShould be sent whenever a user has viewed a theory asset.

If the same event is posted twice the second event will overwrite the first event. Events are identified by user_id, asset_id and timestamp. It is therefore important that distinct events have distinct timestamps.

Endpoint

POST /v1/user-events

To avoid sending two dependent synchronous HTTP requests (post events and then fetch next assets) we recommend you use the Get Next Assets endpoint to post events.

Body Parameters

KeyMandatoryTypeDescription
user_eventsYesArray of User Event objectsThe user events to post (max 1000 per call).

Response Format

KeyTypeDescription
warningsArray of stringsWarnings obtained when consuming the events.

On error, the header status code is an error code and the response body contains a list of Error Response objects.

Example

curl "https://api.sanalabs.com/v1/user-events"
  -H "Content-Type: application/json"
  -H "X-API-KEY: $API_KEY"
  -X "POST"
  -d {
    "user_events": [{
            "user": {
                "id": "123",
                "type": "learner"
            },
            "type": "theory_viewed",
            "timestamp": "2018-01-05T15:11:30Z",
            "attributes": {
                "view_id": "ABC",
                "asset_id": "abc",
                "time_spent_ms": 7050
            }
        },
        {
            "user": {
                "id": "123",
                "type": "learner"
            },
            "type": "response_submit",
            "timestamp": "2018-01-05T15:11:36Z",
            "attributes": {
                "view_id": "ABC",
                "asset_id": "abd",
                "result": "correct",
                "score": 1,
                "time_spent_ms": 4100
            }
        }
    ]
}

Getting Next Assets

Obtains a recommended sequence of assets to present next.

Endpoint

POST /v1/next-assets

The HTTP method is POST rather than GET because this endpoint is not idempotent. Each new next-assets call can change the state on the server side, yielding different behavior.

The API performs consistency validations for the posted events (if any), ensuring that the referenced view_id and asset_id are valid and exist in the asset bank. If an event fails validation, an error or warning is reported, in the case of is_offline_event being false or true, respectively.

Body Parameters

KeyMandatoryTypeDescription
userYesUser objectThe User object that uniquely identifies a user.
view_idYesStringID of the view for which the practice is carried out.
filterYesAsset Filter objectSpecifying the subset of assets within the view that can be selected from. i.e. the filter expresses the focus of the practice in terms of available content.
modeYesMode objectDefines the mode or “purpose” of the session.
limitYesIntegerThe number of assets to return.
user_eventsNoArray of User Event objectsIf provided, these user events will be ingested into Sana’s recommendation system and will influence which assets will be included in the response.

Response Format

On success, the HTTP status code in the response header is 200 OK and the response body is as below.

KeyTypeDescription
dataAn array of Asset Reference objectsThe recommended sequence of assets to present to the user.
warningsArray of stringsWarnings obtained when consuming the events.

On error, the header status code is an error code and the response body contains a list of Error Response objects.

Example (request)

curl "https://api.sanalabs.com/v1/next-assets" \
  -H "Content-Type: application/json" \
  -H "X-API-KEY: $API_KEY" \
  -X "POST" \
  -d '{
    "user": {
        "id": "123",
        "type": "learner"
    },
    "view_id": "ABC",
    "filter": {
        "asset_types": ["exercise"],
        "paths": ["/math/algebra"],
        "tags": [{
            "name": "exam_year",
            "value": "2017"
        }, {
            "name": "exam_year",
            "value": "2018"
        }]
    },
    "mode": {
        "type": "review",
        "attributes": {}
    },
    "limit": 1
}'

Example (response)

{"data": [{"asset_id": "A1"}, {"asset_id": "A2"}]}

Getting User Status by Filters

Get a user’s status by view and filters.

Endpoint

POST /v1/user-filter-status

Body Parameters

KeyMandatoryTypeDescription
user_idYesStringID of the user.
view_idYesStringID of the view for which the status is queried.
filtersYesArray of Filter objectsFilters specifying assets within the view for which the user statuses are queried.

Response Format

On success, the HTTP status code in the response header is 200 OK and the response body is as below.

KeyTypeDescription
dataArray of User Status objects.The status of the user for each queried filter, in the same order as the filters parameter.

On error, the header status code is an error code and the response body contains a list of Error Response objects.

Example (request)

curl "https://api.sanalabs.com/v1/user-filter-status" \
  -H "Content-Type: application/json" \
  -H "X-API-KEY: $API_KEY" \
  -X "POST" \
  -d '{
  "user_id": "123",
  "view_id": "ABC",
  "filters": [
    {
      "asset_types": ["theory", "exercise"],
      "paths": ["/math/algebra", "/math/calculus"],
      "tags": [
        {
          "name": "exam_year",
          "value": "2017"
        },
        {
          "name": "exam_year",
          "value": "2018"
        }
      ]
    },
    {
      "asset_types": ["theory"],
      "paths": ["/math/algebra"]
    }
  ]
}'

Example (response)

'{"data": [{"skill_level": 0, "progress": 0}]}'



Analytics Endpoints

The Analytics API lets you retrieve Analytics data to automate complex reporting tasks and build custom dashboards. With the Analytics API you can for example:

  • Retrieve summary of user activity statistics, such as trends in retention and churn.
  • Gain insights into common user behavior and dependencies between different parts of the content.
The Analytics API is currently under development. Please contact Sana Labs if you need early access.


Object Model

This section describes the objects that are used throughout the different endpoints.


Asset Definition

KeyMandatoryTypeDescription
idYesStringAn ID that uniquely identifies the asset.
typeYesStringThe type of asset, one of exercise or theory. The asset type defines the expected structure of the properties object.
tagsNoArray of Tag objectsAny free-form tagging of asset. Can be used for retrieval/filtering in API. Reserved tag names: content_type (with value equal to e.g. video, text or mixed).
descriptionNoStringHuman readable text representation of the asset, for display in Sana Portal. Can be verbatim copy of question text. Limit 10 KB.
nlp_textNoStringUsed for content analysis through natural language processing. Multiple choice questions should have this field set to a concatenation of the question text and response alternatives, separated by \n. Limit 10 KB.
content_urlNoStringIf it is possible to access the actual content by a URL, it is recommended to provide this information.
metadataNoObjectAn object with fields containing additional asset metadata (any field with String or Number value type is allowed).
Reserved attributes fields

Fields in the attributes object that have a special meaning.

KeyMandatoryTypeDescription
variabilityNoIntegerThe number of unique ways the exercise can be generated, in case of variable exercises. Defaults to 1 meaning the the exercise is always displayed the same way. If the exercise is "generated" in such a way that it is not displayed the exact same way to the user (e.g. by using a template with variable fields), `variablity` should be greater than 1. The value should be capped at 1000 (in case of larger, or infinite, number of unique instances).

View Item

KeyMandatoryTypeDescription
asset_idYesStringID of the asset.
pathYesStringDefines the location of the asset in the content hierarchy using the same standard as for location of files in a file system: /path/to/location, i.e. / is used as separator between parent “directories”. If a view has a path then all view items contained in the view must have paths which start with the view’s path.
attributesNoView Item Attributes ObjectAdditional attributes describing the asset’s role within the view.
The path attribute was previously called view_path. If you are defining view items with a view_path attribute that is fine but, going forward, you should update your requests to use path instead of view_path.

View Item Attributes

KeyMandatoryTypeDescription
partner_difficultyNoNumberIf there is metadata expressing the difficulty of exercises, this can be provided in the View Item. It can be utilized by the recommendation algorithm in cold-start scenarios when there is little or no historical interaction data available. The partner_difficulty should be a number between 0 and 1, scaled so that 0 corresponds to the lowest difficulty level and 1 to the highest.

User Event

KeyMandatoryTypeDescription
userYesUser ObjectThe relevant user for the event.
typeYesStringThe event type, one of response_submit and theory_viewed.
attributesYesUser Event Attributes ObjectThe attributes of the event. The expected fields of attributes are tied to the specific event type.
timestampYesStringISO 8601 timestamp of when the exercise was completed.
recommendation_contextNoStringShould be included if the event corresponds to a recommendation by Sana Learn. See Asset Reference.
tagsNoArray of Tag objectsUsed to provide analytics. Reserved tag names: school, course, grade, class.
is_offline_eventNoBooleanSpecifies whether the event ocurred offline and is being sent to the API at a later point in time. Defaults to false.
metadataNoObjectAn object with fields containing additional event metadata (any field with String or Number value type is allowed).

User

KeyMandatoryTypeDescription
idYesStringAn ID that uniquely identifies the user.
typeYesStringThe type of user. Either learner or tester.
test_cellNoStringThe test cell the user belongs to. Used within analytics and reporting to split users.

Response-Submit Event Attributes

Expected structure of User Event attributes when type is response_submit.

KeyMandatoryTypeDescription
view_idYesStringThe ID of the relevant View for the event.
asset_idYesStringThe ID of the asset.
resultYesStringDenotes if the exercise was successfully completed. One of correct, incorrect, partially_correct or skipped.
scoreNoFloatThe score of the given response (if exercises support partial scoring). The score should be normalized to a value between 0 and 1, based on the minimum and maximum score of the exercise.
time_spent_msNoIntegerThe time spent on solving the exercise in milliseconds.

Theory-Viewed Event Attributes

Expected structure of User Event attributes when type is theory_viewed.

KeyMandatoryTypeDescription
view_idYesStringThe ID of the relevant View for the event.
asset_idYesStringThe ID of the asset.
time_spent_msNoIntegerThe time spent viewing the theory content.
fraction_completedNoFloatThe fraction of the theory content the user consumed. The value must be in between 0 and 1. For example, if a user has viewed 3 minutes of a 10 minute theory video fraction_completed would be 0.3. If the user views another minute of the video then the next event would have a fraction_completed of 0.4.

Tag

KeyMandatoryTypeDescription
nameYesStringDenotes the meaning or category of the tag.
valueYesStringDenotes the value of the tag.

Asset Filter

KeyMandatoryTypeDescription
asset_typesYesArray of StringsOnly assets with at least one of specified types will be returned.
pathsYesArray of StringsThe location of the asset in the view hierarchy (as specified by path parameter of View Item Definition). The returned assets will be from one of the paths specified. It is possible to specify the path to any level in the hierarchy. If, for example there are three topics under a specific subject “/subject_1/” you can get exercises recommended from subject_1 either by specifying [“/subject_1/”] or [“/subject_1/topic_1”, “/subject_1/topic_2”, “/subject_1/topic_3”].
tagsNoArray of Tag objectsOnly assets with at least one of specified tags will be returned.

Mode

The mode parameter expresses the purpose of the session. The Sana Learn API supports two modes: learn and review.

The learn mode guides the learner through the content specified by the filter object with an adaptive rate of progress and also seamlessly integrates previously covered concepts when deemed necessary.

The review mode recommends assets by focusing on learner knowledge gaps within previously covered concepts with the aim of maximizing content recall. This means that the learner will be provided with more questions on the concepts where the skill level is low. In the case when the learner has not covered sufficient content within the specified filter, the review mode prioritizes questions with high discriminative power.

KeyMandatoryTypeDescription
typeYesStringThe mode of the Sana Learn session. Either review or learn.
attributesYesObjectAny attributes further parameterizing the practice mode.
Currently none of the modes have any tweakable attributes. If you need customized modes, please contact us.

Asset Reference

KeyTypeDescription
asset_idStringThe ID of the asset referenced.
asset_typeStringThe type of the asset referenced.
recommendation_contextStringA context object to be included in the event corresponding to the recommendation.
reasonReasonReason for why asset_id is selected.

Reason

Each recommendation is associated with a reason that explains on a high level why an item is recommended. The purpose of this field is to make the recommendations more transparent and explainable. The reason can be propagated to the end user. In such case, it is possible to use the description field directly, although mapping each keyword to a product specific display string is encouraged.

KeyTypeDescription
keywordStringThe keyword is suitable for programmatic parsing. One of knowledge_retention, observed_knowledge_gap, predicted_knowledge_gap, content_progression, assessment, exploration. This may be different depending on your configuration.
descriptionStringA human-readable string that explains the reason and the learner context. Suitable for debugging purposes.

User Status

KeyTypeDescription
skill_levelNumberThe skill level of the user, a value between 0 and 1.
progressNumberThe progress of the user, a value between 0 and 1.

Error

KeyTypeDescription
statusintHTTP Status code related to this error.
detailstringDetails of the error.
linkstringURL to read more about this error.

Error Response

KeyTypeDescription
errorsAn array of Error ObjectsErrors associated with this request.


Glossary

ConceptDescription
AssetAn asset is the smallest unit a user interacts with. An asset can be an “exercise” or a section of “theory”.
AssetBankThe collection of all the assets of a partner constitutes the AssetBank of the partner.
ViewA view is a collection of assets from the Asset Bank. It defines the context in which a user interacts with content. Any real-time modeling happens within a view.


API Semantics

This section explains the semantics of our Rest API. It includes common information that is valid for all the endpoints.


API Endpoints

In the Sana Labs Portal you can generate an API key on a per region basis. We currently support two regions, “EU” and “US.”

No content is shared between regions. In other words, if you create assets in one region those assets will be isolated to that region and will not be available in other regions.

If you configured your API key to connect to the EU region, use https://api.sanalabs.com as the base URL for all our endpoints. If your API key is configured for the US region use https://us.api.sanalabs.com as the base URL.

Please note that non-secure access to the API is not available. All HTTP requests will be redirected to HTTPS automatically.


Authentication

A valid API key is needed to access the Sana Web API. Visit Sana Labs Portal to manage apps and API keys. Your secret API keys carry privileges for you to access the Sana Web API, be sure to keep them secret. Do not share your API keys in publicly accessible places such as GitHub or client-side code.

Sana Web API expects the API key to be included in all API requests to the server in a header that looks like the following:

X-API-KEY: $API_KEY

If the key is omitted or is wrong, you will get a 401 Unauthorized response to your request.

To authorize, pass the X-API-KEY header

curl -H "X-API-KEY: $API_KEY" https://api.sanalabs.com/v1/next-assets

Make sure to replace $API_KEY with your API key.


Rate Limits

There is no hard rate limit at the moment where Sana will drop your data. However, if you need to make requests at a rate exceeding 200 req/s, please contact Sana Labs first. Requests include all the endpoints of Sana Web API.


String encoding

All strings should be UTF-8 encoded.

All ids must match the regexp ^[a-zA-Z0-9_-]{1,36}$. That is, an id cannot be longer than 36 characters and should consist of alphanumerics, underscore or hyphen.


Content-Type

Sana Web API consumes and produces JSON data. The content-type header must be set to application/json when calling Web API endpoints.


Errors

All endpoints either result in success or an error. The API returns 200 or 201 for successful requests and the relevant HTTP status code and an Error Response object in case of an error. See the Error Status Codes section for the HTTP Status Codes the Sana Web API returns.


Error Status Codes

The Sana Web API uses the following error codes:

Error CodeError TextError Description
400Bad RequestYour request is invalid.
401UnauthorizedNo API Key or your API key is wrong.
402Payment RequiredYour API Key expired.
404Not FoundThe specified resource could not be found.
405Method Not AllowedYou tried to access a resource with an invalid method.
429Too many requestsYou have exceeded your rate limit.
500Internal Server ErrorThere was a problem on the server side. Please try again later.
503Service UnavailableThe API is temporarily offline for maintenance. Please try again later.

API Stability

The API may receive non-breaking changes: New fields may be added. Fields that are not documented are experimental and may change without notice.

Changelog

2019–06–07

The paths attribute in the Filter object was previously called view_paths. Defining asset filters with a view_paths attribute is on deprecation notice.

2019–07–02

The View field items was previously called assets. Using the field view.assets is on deprecation notice.