OAuth 2.0 lets your application request access to a user’s Lumin account on their behalf. The user reviews the requested permissions on a consent screen and explicitly approves or denies access. This makes OAuth 2.0 the right choice when your application acts on behalf of individual Lumin users rather than a single shared workspace. Lumin supports the authorization code flow with two client types:Documentation Index
Fetch the complete documentation index at: https://developers.luminpdf.com/llms.txt
Use this file to discover all available pages before exploring further.
| Client type | Use case | Client secret required | Refresh tokens |
|---|---|---|---|
| Public (PKCE) | Mobile apps, SPAs, desktop apps | No — uses PKCE instead | No |
| Private/Server | Server-side web apps, backend services | Yes | Yes |
Register your application
Before you can use OAuth 2.0, register your application in Lumin. You must be a Workspace Owner to do this. Each Workspace can have up to 5 integration apps.Open Integration apps
Log in to Lumin and go to Settings → Developer settings → Integration apps, then click Create app.
Set application details
Enter an Application name and select an Application type:
- Public Application — no client secret, uses PKCE. Choose this for mobile apps, SPAs, or desktop apps.
- Private Application — server-based with a client secret. Choose this for backend or server-side applications.
Select scopes
Choose only the scopes your application actually needs. The scopes you select appear on the user consent screen. See Scopes for the full list.
Configure redirect URIs
Enter one or more redirect URIs where Lumin will send users after they authorize your app.
- Must use
https://or an app-specific scheme (e.g.,myapp://callback) - No wildcards, IP addresses, or relative paths
- Separate multiple URIs with commas
Configure consent screen
Fill in the information users will see when granting access: app logo, website URL, Privacy Policy URL, Terms of Use URL, and a contact email.
Authorization code flow
- Private / Server app
- Public app (PKCE)
Use this flow for server-side applications. The flow uses a client secret and issues refresh tokens so your server can maintain access without user re-interaction.
Redirect the user to the authorization endpoint
Send the user to Lumin’s authorization URL with your app’s parameters:Include
offline_access in the scope to receive a refresh token.After the user approves access, Lumin redirects them to your redirect_uri with an authorization code in the query string.Exchange the authorization code for tokens
Make a server-to-server POST request to exchange the code for an access token and refresh token:Lumin returns the tokens:
Call Lumin APIs with the access token
Pass the access token in the
Authorization header as a Bearer token:Scopes
Scopes define what your application can access. Request only the scopes your app actually needs — users see the requested scopes on the consent screen.| Category | Scope | Description |
|---|---|---|
| Account | openid | Retrieve basic identity details (username, email, profile picture). |
| Account | offline_access | Request a refresh token for long-lived access. Private apps only. |
| Account | profile.read | View basic user profile information. |
| Account | profile.settings | Manage user account settings. |
| Workspace | workspaces.read | View information about the authenticated user’s Workspace. |
| Templates | templates | View and manage templates in a Workspace. |
| Documents | pdf:files | Create, edit, and delete PDF files in a Workspace. |
| Documents | pdf:files.read | Retrieve PDF documents stored in a Workspace. |
| Signature Requests | sign:requests | Create, update, or view signature requests. |
| Signature Requests | sign:requests.read | Retrieve signature requests. |
| Agreements | agreements | Create, update, or delete AgreementGen documents. |
Private integration apps receive the
openid and offline_access scopes by default.