Nordic Layers is a REST API over HTTPS at https://app.layers.nordicbyte.co.uk. A project is a JSON document of layers; you change it with operations and export it as an image. The browser editor uses the same API.
Authentication
Create an API key in your account panel and send it on every /v1 request. Keys start with nl_key_.
Authorization: Bearer nl_key_…
The usual flow
Upload each image with POST /v1/assets and the file as the raw request body (PNG, JPEG, WebP, GIF, BMP or TIFF). The answer carries its id.
Create a project with POST /v1/projects and a width, height and background. You can pass the first steps in the same call.
Edit it with POST /v1/projects/{id}/run: one operation as {"op": …} or several as {"steps": [...]}. Look at it with GET /v1/projects/{id}/preview, which is free.
Export with POST /v1/projects/{id}/export. The answer has the file URL, or the image itself with "response": "image".
A first request
Create a 1080×1080 project with a gradient and a title, then export it as WebP:
Catalogue of every operation and its parameters (public)
POST
/v1/assets?name=photo.jpg
Upload an image; the body is the file
GET
/v1/assets
List your images and whether a project uses them
DELETE
/v1/assets/{id}
Delete an image
POST
/v1/projects
Create a project (canvas, or a whole document, plus optional steps)
GET
/v1/projects
List your projects
GET
/v1/projects/{id}
One project with its document
PUT
/v1/projects/{id}/document
Replace the whole document
POST
/v1/projects/{id}/run
Apply one operation or a list of steps
POST
/v1/projects/{id}/undo
Undo the last change
POST
/v1/projects/{id}/redo
Redo
GET
/v1/projects/{id}/preview?size=1024
Free PNG preview, long side up to size px
POST
/v1/projects/{id}/export
Export PNG, JPEG or WebP; optional steps for this file only
POST
/v1/render
Stateless render of a whole document
GET
/v1/exports
List your exports
GET
/v1/exports/{id}/file
Download an export
DELETE
/v1/projects/{id}
Delete a project
Operations
Every operation is an object with op and its parameters. Layers are referenced by id or by name; without layer, the active layer is used. Names ignore case and spaces, so "Linear Dodge (Add)" and "linearDodge" are the same blend mode. With steps, they run in order and stop at the first error (unless "stopOnError": false); the steps before it stay applied.
Pass steps to the export call and they are applied to a copy of the project for that file only. One template, many files: change the text with text.set and the photo with layer.setImage, which keeps the layer's box.
POST /v1/render takes a whole document (as returned in project.document), optional steps and the export options, and does not save a project. With "response": "image" the answer is the image file.
Errors come back as JSON with a stable code and a detail message in your account's language. A failing step reports which parameter was wrong. When a plan's renders are used up the API answers 402 with quota_renders.
Limits
Uploads up to 50 MB and 12,000 px per side.
Canvas up to 20,000 px per side, within your plan's megapixels.
Up to 200 steps per call.
Previews up to 2,048 px on the long side.
Megapixels, layers, projects, storage and renders per month depend on the plan: see Pricing.