Skip to main content
RapidDev - Software Development Agency
bubble-integrationsBubble API Connector

Adobe XD

Connecting Bubble to Adobe XD means two different things: the simpler path is exporting XD artboards as images and uploading them to Bubble for a design-handoff portal (no API needed); the API path uses Adobe's Creative Cloud Libraries API with OAuth 2.0 to pull design tokens and assets into Bubble. Note: Adobe XD as a standalone product was discontinued in 2023 — it's now part of the Creative Cloud subscription.

What you'll learn

  • Why Adobe XD share links cannot be iframed in Bubble and what to do instead
  • How to export XD artboards as images for the design-handoff path (no API)
  • How to create an Adobe Developer App and obtain OAuth 2.0 client credentials
  • How to configure the Bubble API Connector for Adobe's Creative Cloud Libraries API
  • How to authenticate with Adobe IMS using the Client Credentials flow and store the access token
  • How to fetch design library colors and assets via the CC Libraries API
  • How to handle token expiry and build a refresh strategy
Book a free consultation
4.9Clutch rating
600+Happy partners
17+Countries served
190+Team members
Advanced15 min read60–90 minutesDevOps & ToolsLast updated July 2026RapidDev Engineering Team
TL;DR

Connecting Bubble to Adobe XD means two different things: the simpler path is exporting XD artboards as images and uploading them to Bubble for a design-handoff portal (no API needed); the API path uses Adobe's Creative Cloud Libraries API with OAuth 2.0 to pull design tokens and assets into Bubble. Note: Adobe XD as a standalone product was discontinued in 2023 — it's now part of the Creative Cloud subscription.

Quick facts about this guide
FactValue
ToolAdobe XD
CategoryDevOps & Tools
MethodBubble API Connector
DifficultyAdvanced
Time required60–90 minutes
Last updatedJuly 2026

Two paths for Bubble + Adobe XD: design handoff or API integration

Most founders asking 'how to connect Bubble to Adobe XD' fall into one of two groups. The first group — typically product managers or entrepreneurs — wants to show XD design mockups to clients inside a Bubble-built portal, get approvals, and track feedback. For them, the answer is the design handoff path: export artboards from XD as PNG or SVG files and host them in Bubble. No Adobe API credentials required.

The second group — developers or design-system builders — wants to programmatically sync design tokens (colors, typography, spacing) from Adobe Creative Cloud Libraries into a Bubble app that enforces consistent styling. For them, the CC Libraries API path makes sense, though it involves Adobe IMS OAuth 2.0 — a more involved setup than most Bubble integrations.

An important heads-up: Adobe XD as a standalone app was discontinued in October 2023. All XD features are now only available through an Adobe Creative Cloud subscription. If you're evaluating design tools now, Figma is the most actively developed alternative and has a REST API that's considerably simpler to use from Bubble. This tutorial covers both XD paths for teams already invested in the Adobe ecosystem.

Integration method

Bubble API Connector

The Bubble API Connector calls Adobe's Creative Cloud Libraries API server-side using OAuth 2.0 client credentials, keeping your Adobe client secret in a Private header away from the browser.

Prerequisites

  • An Adobe Creative Cloud subscription (XD is no longer available as a standalone purchase — CC subscription required)
  • An Adobe Developer account at developer.adobe.com (free)
  • A Bubble account — any plan works for the handoff path and for outbound API calls
  • At least one Adobe Creative Cloud Library with colors or components to test with (for the API path)
  • For the API path using Backend Workflows to refresh tokens: a paid Bubble plan

Step-by-step guide

1

Choose your path: design handoff (no API) or CC Libraries API

Before configuring anything in Bubble, decide which path matches your goal. Path A — Design Handoff (No API): If you want to display XD designs in a Bubble app for client review, feedback, or portfolio purposes, you do not need to interact with any Adobe API. The workflow is: 1. In Adobe XD, open your design file 2. Select File → Export → All Artboards (or Export → Selected) 3. Choose PNG or SVG format 4. Export the files to your computer 5. In Bubble's editor, go to the Data tab → File Manager → Upload files 6. Upload your exported artboard images 7. Reference these file URLs in Bubble Image elements or a Repeating Group gallery This path takes under 15 minutes and requires no API credentials whatsoever. The limitation is that artboard images are static — they don't update automatically when your XD design changes. Path B — CC Libraries API (Dynamic Design Tokens): If you need to programmatically access design data from Adobe Creative Cloud Libraries (color palettes, character styles, graphic components), proceed to the following steps which configure Bubble's API Connector with Adobe IMS OAuth 2.0 authentication. Important: Do not attempt to embed XD share links (xd.adobe.com/view/...) in Bubble using an HTML element iframe. Adobe sets X-Frame-Options headers that block iframe embedding — the embedded content will show a blank or error screen.

Pro tip: If your primary goal is client approval workflows, Path A is faster, simpler, and more reliable than Path B. Reserve the API path for teams that need automated design-system synchronization.

Expected result: You have a clear decision on which path to follow. Path A users have their XD artboard images uploaded to Bubble. Path B users proceed to the next step.

2

Create an Adobe Developer App and obtain client credentials

For Path B (CC Libraries API), you need to create an application in the Adobe Developer Console to get a Client ID and Client Secret. Open your browser and go to developer.adobe.com. Sign in with your Adobe ID (the same account linked to your Creative Cloud subscription). Click 'Create new project' or 'Add project'. On the project overview page, click 'Add API'. In the API catalog, find and select 'Creative Cloud Libraries'. Click 'Next'. Adobe will ask you to select an authentication type. Choose 'Server-to-Server' (also called Client Credentials or OAuth Server-to-Server) — this is the approach that works with Bubble because it doesn't require a redirect URI or user login flow. Click 'Save configured API'. On the project's credential page, you will see your Client ID and Client Secret. Copy both values. The Client Secret is shown only once in some Adobe Developer Console views — copy it immediately and store it in a password manager. You will use these in the next step to request an access token. Note: Adobe Creative Cloud subscription scopes are attached to your Adobe account — the credentials you generate here grant access to libraries owned by your Adobe ID. For multi-user scenarios where clients have their own CC Libraries, the Authorization Code flow is required, which needs a redirect URI and cannot be handled natively in Bubble without a paid plan and Backend Workflow proxy.

Pro tip: The 'Server-to-Server' credential type (Client Credentials) is the right choice for Bubble because Bubble's API Connector acts as a server making calls on your behalf — no user browser redirect needed.

Expected result: You have an Adobe Developer project with CC Libraries API enabled, and you have copied the Client ID and Client Secret.

3

Configure the Bubble API Connector to get an Adobe access token

Adobe's IMS (Identity Management System) requires you to exchange your Client ID and Client Secret for a time-limited access token. This token lasts approximately 24 hours and must be used in all subsequent CC Libraries API calls. You need to set this up in Bubble's API Connector. In your Bubble editor, go to the Plugins tab. If the API Connector is not installed, click Add plugins, search for 'API Connector' (by Bubble), and install it. Return to Plugins → API Connector → Add another API. Name this API 'Adobe IMS'. Add a call named 'Get Access Token': - Method: POST - URL: `https://ims-na1.adobelogin.com/ims/token/v3` - In the Body section (form-encoded, not JSON), add these parameters: - `grant_type`: `client_credentials` - `client_id`: your Adobe Client ID (you can mark this non-private since Client ID is a public identifier) - `client_secret`: your Adobe Client Secret (mark this as Private — it must never reach the browser) - `scope`: `openid,creative_sdk` - Set 'Use as': Action Click Initialize call with these real values filled in. Adobe will return a JSON response containing `access_token` (a long JWT string) and `expires_in` (typically 86399 seconds = ~24 hours). Bubble will detect the `access_token` field — you'll use this in the next step. Critically, the access token expires after ~24 hours. For a production Bubble app, you need a strategy to refresh it — either manually re-run the initialization, or (on a paid Bubble plan) create a scheduled Backend Workflow that runs every 23 hours to call this endpoint and save the new token to a Bubble data type.

adobe-ims-token-call.json
1POST https://ims-na1.adobelogin.com/ims/token/v3
2Content-Type: application/x-www-form-urlencoded
3
4grant_type=client_credentials
5&client_id=YOUR_CLIENT_ID
6&client_secret=<private>
7&scope=openid%2Ccreative_sdk
8
9Example response:
10{
11 "access_token": "eyJhbGciOiJSUzI1NiIsIn...",
12 "token_type": "bearer",
13 "expires_in": 86399
14}

Pro tip: Store the returned access_token in a Bubble database field (a 'Settings' or 'Config' data type with a single record) so all users and workflows share the same token without re-authenticating on every call.

Expected result: The 'Get Access Token' call is initialized and Bubble shows the access_token field in the response. You can now use this token in CC Libraries API calls.

4

Add CC Libraries API calls to fetch design assets

With an access token mechanism in place, configure the actual Creative Cloud Libraries API calls in Bubble. In the API Connector, click Add another API (separate from Adobe IMS). Name this API 'Adobe CC Libraries'. Configure a shared header: - Header key: `Authorization` - Header value: `Bearer {access_token}` — in Bubble's API Connector, you can make this a dynamic parameter so you paste in the token you stored in your Bubble database - Check the 'Private' checkbox on this header Base URL for calls: `https://cc-api-storage.adobe.io` Add a call named 'Get Library Elements': - Method: GET - URL: `/libraries/{libraryId}/elements` - Add a URL parameter `libraryId` so you can pass different library IDs dynamically from your Bubble workflows - Set 'Use as': Data To find your `libraryId`: open Adobe Creative Cloud on desktop, go to Libraries, right-click on a library → Copy link. The ID is embedded in the URL. Alternatively, call GET /libraries first to list all libraries and extract their IDs from the response. Initialize the call with a real libraryId from your Adobe account. Bubble will detect fields like element name, type (color, characterStyle, graphic), and thumbnail URLs. Color elements will have an RGB or hex value in their data attributes. Once initialized, you can bind a Bubble Repeating Group to this call to display color swatches, component names, or asset thumbnails pulled directly from your live Adobe CC Libraries.

adobe-cc-libraries-call.json
1GET https://cc-api-storage.adobe.io/libraries/{libraryId}/elements
2Headers:
3 Authorization: Bearer <private>
4 x-api-key: YOUR_CLIENT_ID
5
6Example response:
7{
8 "items": [
9 {
10 "id": "element-uuid",
11 "name": "Primary Blue",
12 "type": "application/vnd.adobe.element.color+dcx",
13 "representation": {
14 "content_type": "application/vnd.adobe.color+json",
15 "color": { "value": { "r": 0.0, "g": 0.4, "b": 0.9, "a": 1.0 } }
16 }
17 }
18 ]
19}

Pro tip: The CC Libraries API also requires an `x-api-key` header set to your Client ID. Add this as a non-private shared header in the Adobe CC Libraries API group alongside the Authorization header.

Expected result: The Get Library Elements call is initialized and Bubble shows CC Library elements (colors, styles, graphics) from your Adobe account. Ready to display in a Bubble Repeating Group.

5

Build a Bubble design-system display page and handle token refresh

Now connect the CC Libraries API data to a visible page in your Bubble app. Go to the Design tab. On your target page, add a Repeating Group. Set: - Type of content: the Bubble data type from your initialized CC Libraries call - Data source: 'Get data from an external API' → Adobe CC Libraries - Get Library Elements → set the libraryId parameter dynamically (either hardcoded from a dropdown or from a URL parameter) Inside the Repeating Group's first cell, add: - A Text element bound to the element's name field - For color elements, add a Shape or Group with its background color set to a dynamic expression — Bubble can interpret hex color strings if you format the API response correctly - A Text element showing the element type For the token refresh problem: Adobe access tokens expire in ~24 hours. A simple production strategy is: 1. Create a Bubble data type called 'App Settings' with fields: adobe_access_token (text), token_expires_at (date) 2. After running the 'Get Access Token' call manually (or via a workflow), store the result and expiry time in this data type 3. In any workflow that calls the CC Libraries API, add a conditional step: 'If token_expires_at < Current date/time → run Get Access Token workflow first' 4. On paid plans, add a scheduled Backend Workflow that runs every 23 hours to auto-refresh the token RapidDev's team has built hundreds of Bubble apps with complex API integrations like this OAuth token management pattern — book a free scoping call at rapidevelopers.com/contact if you're building a design system tool or client portal on Bubble.

Pro tip: For most client-approval use cases, the design handoff path (Path A — export artboards as images) is significantly simpler than the CC Libraries API path and doesn't require token management. Consider Path A unless you specifically need live design token synchronization.

Expected result: A Bubble page displays Adobe CC Library elements (colors, styles, etc.) from live API data. The access token refresh strategy is implemented and the integration continues working after 24 hours.

Common use cases

Client design approval portal built in Bubble

Upload XD artboard exports as images to Bubble's file storage and display them in a Bubble app. Clients can browse mockups, click to enlarge them, and submit written feedback stored in Bubble's database — without needing an Adobe account.

Bubble Prompt

Create a Bubble repeating group that shows XD artboard images uploaded to file storage, with a feedback form per image that saves to the database

Copy this prompt to try it in Bubble

Sync CC Library color tokens into a Bubble design-system tracker

Use the CC Libraries API to fetch your Adobe Creative Cloud color palette and typography scales, then store them in a Bubble data type. Display the design system in a Bubble internal tool so developers and designers can reference the same source of truth.

Bubble Prompt

Fetch my Adobe CC Library elements via API and display each color swatch with its hex value in a Bubble grid

Copy this prompt to try it in Bubble

Portfolio showcase with live XD design asset previews

For freelance designers or agencies, build a Bubble portfolio app that surfaces exported XD design assets as downloadable files or gallery images, with project metadata (client name, date, category) managed in Bubble's database.

Bubble Prompt

Build a Bubble portfolio page with a filterable gallery of design project images uploaded from XD exports

Copy this prompt to try it in Bubble

Troubleshooting

Adobe IMS token request returns 401 with 'invalid_client' error

Cause: The Client ID or Client Secret is incorrect, or the Adobe Developer project does not have the CC Libraries API enabled.

Solution: Return to developer.adobe.com, open your project, and verify the CC Libraries API is listed under 'Added APIs'. Re-copy the Client ID and Secret from the Credentials tab — paste them carefully with no extra spaces. Ensure you're using the 'Server-to-Server' credential type, not an API key credential.

CC Libraries API returns 401 'Unauthorized' after working for a day

Cause: The Adobe access token has expired. Adobe IMS tokens are valid for approximately 24 hours (86,399 seconds) and must be refreshed by requesting a new one with the client credentials.

Solution: Run the 'Get Access Token' call again in the API Connector to obtain a fresh token. Update the stored token in your Bubble 'App Settings' data type. Implement a scheduled Backend Workflow (paid Bubble plan) to auto-refresh the token every 23 hours to prevent expiry in production.

Attempting to embed an XD share link in a Bubble HTML element shows a blank or error screen

Cause: Adobe XD share links (xd.adobe.com) include X-Frame-Options or Content-Security-Policy headers that block iframe embedding. This is an Adobe server-side restriction, not a Bubble limitation.

Solution: Do not use iframe embeds for XD designs. Instead, use the design handoff path: export artboards as PNG/SVG files from XD, upload them to Bubble's file manager, and display them as Image elements. Alternatively, add a Button element in Bubble that links out to the XD share URL in a new tab.

Initialize call in Bubble returns 'There was an issue setting up your call' for the CC Libraries API

Cause: The Initialize call requires a real, successful API response. This usually means the access token in the Authorization header is expired, incorrect, or the libraryId parameter contains a value that doesn't match a real library on your account.

Solution: First verify your access token is fresh by re-running the 'Get Access Token' call. Then update the Authorization header value in the CC Libraries API call with the new token. For the libraryId, log into Adobe Creative Cloud, navigate to Libraries, and copy the ID from the URL of a library you own. Re-initialize with these real values.

Adobe XD is not available on my computer — I see a subscription prompt

Cause: Adobe discontinued XD as a standalone product in October 2023. XD is now only available as part of an Adobe Creative Cloud subscription (All Apps plan or single-app plan that includes XD).

Solution: If you don't have a CC subscription, consider Figma as a replacement — it's free for individual use, has an active development roadmap, and offers a simpler REST API for Bubble integrations. The Figma integration with Bubble is covered in the Figma tutorial on this site.

Best practices

  • For most design-review use cases, export XD artboards as PNG/SVG files and host them in Bubble's file storage — this is simpler, faster, and requires no API credentials or token management.
  • Never embed XD share URLs in Bubble iframes — Adobe's Content-Security-Policy blocks iframe embedding. Use link buttons or hosted image exports instead.
  • Store your Adobe access token in a dedicated 'App Settings' Bubble data type with an expiry timestamp, and build a refresh workflow — tokens expire after ~24 hours and silent 401 errors will break your integration.
  • Always mark the Adobe Client Secret and access token as Private in the Bubble API Connector — these credentials grant access to all CC Libraries on your account.
  • Use the Client Credentials (Server-to-Server) OAuth flow, not the Authorization Code flow, when integrating with Bubble — Authorization Code requires a redirect URI that Bubble cannot handle natively without a paid-plan Backend Workflow proxy.
  • Be aware that Adobe XD was discontinued in 2023 — if you're choosing a design tool now, Figma has a more actively maintained API and simpler Bubble integration path.
  • Add Privacy Rules in Bubble's Data tab for any data types that store CC Library tokens or design asset metadata — do not leave these accessible to unauthenticated users.
  • Test the CC Libraries API using Adobe's API documentation and a tool like Postman before configuring it in Bubble, so you know what a valid response looks like before attempting to initialize the call.

Alternatives

Frequently asked questions

Is Adobe XD still available in 2026?

Adobe XD is available but only as part of an Adobe Creative Cloud subscription — it was discontinued as a standalone product in October 2023. If you have a Creative Cloud plan (All Apps at ~$55/mo or a single-app plan), XD is included. However, Adobe has significantly slowed XD development. Many design teams have migrated to Figma, which is more actively developed and has a simpler API for Bubble integration.

Can I embed an Adobe XD prototype directly in a Bubble app?

No. Adobe XD share links (xd.adobe.com) are blocked from iframe embedding by Adobe's X-Frame-Options and Content-Security-Policy headers. Attempting to embed them in a Bubble HTML element will result in a blank screen or browser error. The correct approach is to export artboards as PNG/SVG and host them in Bubble's file storage, or use a link button to open the XD prototype in a new tab.

Do I need a paid Bubble plan to connect to Adobe XD?

For the design handoff path (exporting artboards and uploading to Bubble), no paid plan is needed. For the CC Libraries API path using outbound API Connector calls, no paid plan is needed either. A paid Bubble plan is only required if you want to automatically refresh your Adobe access token on a schedule using Backend Workflows, or if you need to receive inbound webhooks from Adobe services.

Why does the Adobe IMS token expire and how do I handle it in Bubble?

Adobe IMS access tokens expire after approximately 24 hours as a security measure. In Bubble, the simplest handling is to store the token in a 'App Settings' data type record with an expires_at timestamp. Before any workflow that calls the CC Libraries API, add a conditional step: if the token is expiring within the next hour, run the Get Access Token call first and update the stored token. On paid Bubble plans, a scheduled Backend Workflow can refresh the token automatically every 23 hours.

What is the difference between the design handoff path and the CC Libraries API path?

The design handoff path requires no API: you export XD artboards as image files (PNG/SVG) and upload them manually to Bubble's file storage. It's a one-time manual sync. The CC Libraries API path connects Bubble to Adobe's cloud-hosted design libraries dynamically — color palettes and design tokens are fetched live from Adobe's servers. The API path is appropriate when your Bubble app needs to stay in sync with evolving design system data; the handoff path is appropriate for static approval workflows.

RapidDev

Talk to an Expert

Our team has built 600+ apps. Get personalized help with your project.

Book a free consultation

Integrations are where projects stall

We wire Bubble integrations like this one every week — auth, webhooks, edge cases included. Fixed-price builds from $13K, delivered in 6–10 weeks.

Talk to an integration engineer

We put the rapid in RapidDev

Need a dedicated strategic tech and growth partner? Discover what RapidDev can do for your business! Book a call with our team to schedule a free, no-obligation consultation. We'll discuss your project and provide a custom quote at no cost.