Hi Frame.io team,
We’re building an internal integration (via n8n, self-hosted) to automate media uploads to Frame.io V4 from our post-production pipeline. We’re stuck at the OAuth token exchange step and would appreciate help diagnosing it, since we’ve run out of things we can check on our end.
Account context
- Frame.io account: “Madam&Cie”
- Authenticated by email: production@madamcie.fr (confirmed Adobe ID, linked)
- Account fields from
GET /v4/accounts:"v4_migrated_at": null,"adobe_id": null— so this looks like a Frame-managed (V4F) account, not yet Adobe-managed (V4A).
What works
Using the interactive API Explorer at List accounts | Frame.io API Documentation , logging in with our account email and calling List accounts succeeds and returns our account correctly. So the account itself has full V4 API access — this isn’t an entitlement issue.
What we’re building
An Adobe Developer Console project with a Frame.io API added, using an OAuth Web App credential (confidential client, with Client Secret). Redirect URI is a temporary HTTPS tunnel pointing to our self-hosted automation server (n8n), used for the one-time authorization step. We added our account email as a Beta user on the Developer Console project (this fixed an earlier “Please contact the application developer to gain access to Project” error, per your forum’s guidance on a similar thread).
The problem
When we run the standard Authorization Code / PKCE flow:
GET https://ims-na1.adobelogin.com/ims/authorize/v2withclient_id,redirect_uri,response_type=code,scope=openid,profile,email,offline_access,additional_info.roles,state, and PKCEcode_challenge/code_challenge_method=S256— this appears to succeed (browser is auto-authenticated via existing Adobe session, no visible error, redirects back within 2-3 seconds).- Our client (n8n’s OAuth2 module) then calls
POST https://ims-na1.adobelogin.com/ims/token/v3?client_id={CLIENT_ID}withcode,grant_type=authorization_code,code_verifierin the body (also tried withclient_secretincluded, and withauthorizationCodegrant type instead of PKCE) — this consistently returns an Unauthorized error with no additional body/detail surfaced to us.
We’ve tried:
- Scope as comma-separated vs space-separated
- Grant type: Authorization Code (with client_secret) and PKCE (with code_verifier)
client_idas a query parameter on the token URL (per your docs’ curl example) vs. only in the body
All combinations fail the same way at the token exchange step.
What we’d like to know
- Is there anything else required for a V4F (Frame-managed) account to support the OAuth Web App authorization code flow — e.g., does the account/org need any additional linking beyond the individual user’s Adobe ID?
- Could you check server-side logs for token requests from our OAuth Web App integration around today’s date, to see the actual rejection reason? Happy to share the Client ID privately (not posting it here publicly).
- Is there a recommended exact parameter set (grant type, whether client_secret is expected alongside PKCE, where client_id should be passed) for this specific account type?
Happy to provide more detail (timestamps, Client ID, full request logs) privately on request.
Thanks for your help!