Authentication

Use this guide once you have credentials from the Developer Console. If you still need to create a project, add Adobe Express API, or pick Web App, SPA, or Server-to-Server, follow Create credentials first.

Overview

Express API uses OAuth 2.0. Every request must include:

How you obtain <access_token> depends on your credential type (user-based vs server-to-server). Those options are summarized under Choose authentication type in the create-credentials guide.

Prerequisites

Get an access token

User authentication (OAuth Web App or SPA)

The user signs in with their Adobe ID and consents to your app. Use the OAuth 2.0 authorization code flow (Web App) or PKCE (SPA). Implementation steps are in Adobe’s User authentication documentation; Console setup for Express API is in Create credentials – User Authentication.

You can sanity-check Web App credentials with a sample such as this OAuth 2.0 Web App client.

data-variant=help
data-slots=text
Include scopes such as: ee.express_api, openid, AdobeID (match the scope set your project requires).

Server-to-server (OAuth Server-to-Server)

The backend uses the client_credentials grant; there is no interactive user. Console setup, token generation, product profiles, and technical account access to documents and assets (sharing, Storage administrator, troubleshooting) are documented in one place: Create credentials – Server-to-Server Authentication.

Call the Express API

Send these headers on every request:

Header
Value
Authorization
Bearer <access_token>
X-API-KEY
<client_id>

Tokens expire; refresh or re-issue them according to Adobe’s documentation for your credential type.

Example: list tagged documents

Endpoint: /beta/tagged-documents

curl -i -X GET \
  'https://express-api.adobe.io/beta/tagged-documents?start=0&limit=5&sortBy=name' \
  -H 'Authorization: Bearer <ACCESS_TOKEN>' \
  -H 'X-API-KEY: <CLIENT_ID>'

Example response shape:

{
  "documents": [
    {
      "id": "string",
      "name": "string",
      "thumbnailUrl": "string"
    }
  ],
  "paging": {
    "nextUrl": "string",
    "totalRecords": 0
  }
}