How to: Authorize
How to: Authorize
How to: Authorize
This guide demonstrates the authentication and authorization process for Camera to Cloud (C2C) devices on a Frame.io project. We’ll explore both the standard manual code entry method and the enhanced QR code pairing approach for optimal user experience.
Please review the Before We Start Implementing guide if you haven’t already.
You should have received a client_secret from our team to identify your integration. If not, please consult this introduction to the C2C ecosystem and contact our team.
To implement URL & QR code pairing, ensure you meet these requirements:
To understand the authorization flow from a user perspective, please reference these resources:
This authorization process minimizes implementation requirements. You won’t need to:
Modern users expect efficient device interactions. While the current manual pairing process functions adequately, it can be optimized.
By implementing URL & QR code pairing—similar to streaming services like Netflix or Disney+—we can significantly streamline the process, minimize input errors, and reduce pairing time.
Each physical device requires a unique identifier for connection tracking within a user’s project.
For devices, this identifier is the client_id, which is essential during authorization. When implementing, consider appropriate identifier sources such as device serial numbers, UUIDs, or other unique strings. If you are integrating on an Apple device, we recommend using a unique persistent UUID that is consistent across device reboots.
Exercise caution regarding personally identifiable information. User email addresses are not appropriate client_id values.
Additionally, ensure you control the identifier. Device MAC addresses are unsuitable as they aren’t owned by your software and may constitute personally identifiable information.
If you need guidance on selecting an appropriate identifier, our team can assist in determining a suitable value that simplifies integration.
To begin implementation, request a device code through the /v2/auth/device/code endpoint:
For URL code pairing, modify the API call with additional headers:
Note: These authentication endpoints accept form data exclusively, not JSON. Post-authentication, other endpoints will accept JSON payloads, but authentication endpoints will reject JSON requests.
asset_create: Enables asset creation and uploading.offline: Permits authorization refreshing via refresh token. Without this scope, users would need to re-authorize their device every 8 hours as authorization tokens expire.In practical implementations, devices typically request both scopes.
The request generates a response similar to:
Using the verification_uri_complete, generate and display a QR code on the device screen for the user to scan, facilitating efficient pairing.

Always provide fallback options: display the user_code and verification_uri for manual entry when QR scanning isn’t possible. Alternatively, consider displaying the verification_uri as a static QR code for mobile scanning.
For mobile app integrations, include the verification_uri_complete as a tappable hyperlink since users cannot scan QR codes from the device running the app.
After providing the pairing code or URL code, verify user entry with this request:
device_code value returned previously.urn:ietf:params:oauth:grant-type:device_code for this implementation.Initial polling attempts typically return:
This non-fatal error indicates the user hasn’t completed code entry. Continue polling until completion.
Note for iOS app devices: If the user switches to the Frame.io iOS app to enter the pairing code, your app may move to the background. When your app becomes active again, such as in
applicationDidBecomeActive, resume polling so the authorization flow can continue without requiring the user to restart pairing.
If you receive:
The code expired before user entry. Generate a new code/QR code via Step 1, present it to the user, and resume polling.
Successful authorization produces:
Congratulations on successfully authorizing your Camera to Cloud device!
Let’s examine this response:
bearer for C2C API implementations, requiring no action.Now let’s implement these API calls in Python-like pseudocode, handling potential device code expiration:
Note: The outer loop handles cases where pairing codes expire and new codes are required.
As a final step, retrieve and display project information from Frame.io to confirm successful pairing to the intended project. We’ll cover this in the next tutorial.
When implementing URL/QR code pairing, you’ll need to generate a QR code from the verification_uri_complete value in the response. Here are examples using popular libraries in different programming languages:
When implementing QR code pairing, consider these guidelines for the best user experience:
Optimal Size: Display QR codes at least 200-250 pixels square for reliable scanning.
Contrast: Ensure high contrast between QR code and background (black on white is ideal).
Error Correction: Use moderate error correction levels (L or M) to balance code density and reliability.
Clear Instructions: Provide clear guidance on how to scan the code, such as “Scan this code with your smartphone camera to pair your device.”
Multiple Options: Always provide the manual pairing code alongside the QR code as a fallback:
Hyperlink for Mobile Apps: If your integration is a mobile application, include the verification_uri_complete as a tappable link since users cannot scan a QR code from the same device.
Testing: Test your QR codes with various devices and lighting conditions to ensure reliable scanning.

If you encounter issues, consult these common scenarios and solutions:
invalid_client response indicates device information mismatch, typically due to an incorrect client_secret.bad_request response indicates malformed request data. Verify field names and ensure all required fields are included.If your issue isn’t addressed here, please share your experience so we can enhance this troubleshooting section.
We encourage you to contact our team and proceed to the authorization management guide. We look forward to your feedback!