• Image Uploads

    As described in the add designs to a project tutorial, getting designs into Marvel is a two-step process. This document explains the second part of the process, which is the actual file upload itself.


    Authentication is the same as the main GraphQL endpoint. You must obtain an access token and send it along with your request in the Authorization header.

    Your token must have the projects:write scope.


    To upload an image, you must make a multipart/form-data encoded POST request to a specified url, sending a file named file. This url can be found on the ScreenNode's uploadUrl field.

    Here's an example using curl:

    curl \
        -H "Authorization: Bearer <token>" \
        -X POST \
        -F "file=@path/to/image.png" \


    Any status code other than 200-299 is considered a failure.

    In the event of a 4xx failure, there'll be an application/json payload similar in structure to the following, along with an appropriate status code:

      "errors": [
          "code": "MISSING_FILE",
          "msg": "`file` not included with request"

    Successful requests will have no response body.

    Instead, you'll get a 2xx status code, and if it's a 201 there'll be a Location header telling you where the uploaded image is stored.

    Supported file types

    A list of supported file types can be found in our Help Center.

    Please note that uploading PSDs with artboards are a special case - Marvel will split out each artboard into its own screen. This means you can create many screens from 1 upload, without having to create the screens beforehand. Subsequent syncing of the PSD file to the same screen should update the artboard screens appropriately.