Skip to main content
RapidDev - Software Development Agency
bolt-ai-integrationsBolt Chat + API Route

How to Integrate Bolt.new with Later

Later's API is limited and primarily internal — not available for general third-party developer use. For Bolt.new apps that need Instagram, TikTok, or Pinterest scheduling, use Later's linkin.bio embed for link aggregation, or build a visual content calendar directly with the Instagram Graph API and TikTok Content Posting API, which provide direct platform access without Later's API restrictions.

What you'll learn

  • How to embed Later's linkin.bio feature in a Bolt.new app for link aggregation
  • How to build a visual drag-and-drop content calendar in Bolt using Supabase as the backend
  • How to connect to the Instagram Graph API for media publishing and analytics
  • How to use the TikTok Content Posting API for video publishing from your Bolt app
  • How to implement a media library with preview thumbnails for visual content planning
Book a free consultation
4.9Clutch rating
600+Happy partners
17+Countries served
190+Team members
Intermediate16 min read30 minutesMarketingApril 2026RapidDev Engineering Team
TL;DR

Later's API is limited and primarily internal — not available for general third-party developer use. For Bolt.new apps that need Instagram, TikTok, or Pinterest scheduling, use Later's linkin.bio embed for link aggregation, or build a visual content calendar directly with the Instagram Graph API and TikTok Content Posting API, which provide direct platform access without Later's API restrictions.

Build a Visual Social Media Calendar with Later-Style Features in Bolt.new

Later's core innovation is the visual content calendar — a drag-and-drop grid where you can see exactly how your Instagram feed will look before posting. It's designed for visual platforms where the aesthetic consistency of the content grid matters as much as individual post performance. While Later's API is not publicly available for third-party integrations, you have two practical options for building visual scheduling features in Bolt: embed Later's linkin.bio product for the link aggregation use case, or build the visual calendar functionality directly using Instagram and TikTok's native APIs.

Building a visual content calendar in Bolt is more straightforward than it might seem. The calendar UI is a React component with a grid layout — content cards arranged by day with media previews. Supabase serves as the backend, storing scheduled posts with their content, media URLs, scheduled time, platform, and status. The Instagram Graph API provides the posting endpoint and analytics. The TikTok Content Posting API handles video uploads. This native API approach gives you more control than Later's interface and integrates directly with your app's other features.

For the linkin.bio use case specifically — where users want a single link in their Instagram bio that leads to a page of links — Later offers an embeddable version. Alternatively, you can build this feature from scratch in Bolt in about 30 minutes: a simple Supabase-backed page of links with a custom URL, styled like a linkin.bio page but fully under your control.

Integration method

Bolt Chat + API Route

Later's API is primarily internal and not available for general developer integration. This guide covers three practical approaches for Bolt.new apps: embedding Later's linkin.bio feature for link aggregation, building a visual content calendar with Supabase as the backend, and connecting directly to Instagram Graph API and TikTok Content Posting API for native scheduling. All outbound API calls work in Bolt's WebContainer preview — OAuth callbacks require a deployed URL.

Prerequisites

  • For Instagram: A Facebook Developer account with a registered app, a Facebook Page, and an Instagram Business or Creator account connected to it
  • An Instagram Graph API Long-Lived Access Token (generated via Graph API Explorer at developers.facebook.com)
  • For TikTok: A TikTok for Developers account at developers.tiktok.com with Content Posting API access approved
  • A Supabase project (free tier works) for storing scheduled posts, media metadata, and link collections
  • A Bolt.new project (Next.js recommended for API route handling)

Step-by-step guide

1

Set Up Instagram Graph API Access for Media Publishing

Instagram media publishing requires a specific setup path through Facebook's developer platform — Instagram's own app API is separate from this. First, ensure you have a Facebook Page and an Instagram Business or Creator account connected to it (in Instagram Settings → Account → Linked Accounts). Both must be managed by the same Facebook account. In Facebook Developer Portal (developers.facebook.com), create a new app or use an existing one, then add the Instagram Graph API product. Generate a Long-Lived Page Access Token using the Graph API Explorer: select your app, request the pages_manage_posts, instagram_content_publish, instagram_basic, and pages_read_engagement permissions, generate a User Access Token, then exchange it for a Long-Lived Token (valid for 60 days) using the token exchange endpoint. From the Page Access Token, you can access the connected Instagram Business Account ID by calling GET /me/accounts, then GET /{page-id}?fields=instagram_business_account. Store the Instagram Business Account ID and the access token in your .env file as INSTAGRAM_BUSINESS_ACCOUNT_ID and INSTAGRAM_ACCESS_TOKEN. The Instagram Graph API for media publishing uses a two-step process: first create a media container (POST /{user-id}/media), then publish it (POST /{user-id}/media_publish). For images, provide the image URL directly in the container creation. For videos, Instagram needs to download the video from a public URL — host videos on Supabase Storage or another CDN before submitting to the API. Important: long-lived access tokens expire after 60 days — implement a token refresh mechanism or set a calendar reminder to regenerate the token. In Bolt's WebContainer preview, the Instagram API calls work fine since they're outbound HTTP requests.

Bolt.new Prompt

Set up Instagram Graph API integration for my Bolt app. Create lib/instagram.ts with: getInstagramFeed(userId) calling GET https://graph.instagram.com/${userId}/media?fields=id,caption,media_type,media_url,timestamp,like_count,comments_count&access_token=${INSTAGRAM_ACCESS_TOKEN}, createMediaContainer(userId, imageUrl, caption) calling POST https://graph.facebook.com/v19.0/${userId}/media with image_url and caption, and publishMedia(userId, creationId) calling POST https://graph.facebook.com/v19.0/${userId}/media_publish with creation_id. Add INSTAGRAM_ACCESS_TOKEN and INSTAGRAM_BUSINESS_ACCOUNT_ID to .env. Create GET /api/instagram/feed and POST /api/instagram/publish routes.

Paste this in Bolt.new chat

lib/instagram.ts
1// lib/instagram.ts
2const GRAPH_BASE = 'https://graph.facebook.com/v19.0';
3
4export async function getInstagramFeed(userId: string) {
5 const token = process.env.INSTAGRAM_ACCESS_TOKEN;
6 const fields = 'id,caption,media_type,media_url,thumbnail_url,timestamp,like_count,comments_count';
7 const res = await fetch(
8 `https://graph.instagram.com/${userId}/media?fields=${fields}&access_token=${token}`
9 );
10 if (!res.ok) throw new Error(`Instagram API error: ${res.status}`);
11 return res.json();
12}
13
14export async function createImageContainer(userId: string, imageUrl: string, caption: string) {
15 const token = process.env.INSTAGRAM_ACCESS_TOKEN;
16 const res = await fetch(`${GRAPH_BASE}/${userId}/media`, {
17 method: 'POST',
18 headers: { 'Content-Type': 'application/json' },
19 body: JSON.stringify({
20 image_url: imageUrl,
21 caption,
22 access_token: token,
23 }),
24 });
25 if (!res.ok) throw new Error(`Container creation failed: ${await res.text()}`);
26 return res.json(); // { id: 'creation_id' }
27}
28
29export async function publishMedia(userId: string, creationId: string) {
30 const token = process.env.INSTAGRAM_ACCESS_TOKEN;
31 const res = await fetch(`${GRAPH_BASE}/${userId}/media_publish`, {
32 method: 'POST',
33 headers: { 'Content-Type': 'application/json' },
34 body: JSON.stringify({
35 creation_id: creationId,
36 access_token: token,
37 }),
38 });
39 if (!res.ok) throw new Error(`Publish failed: ${await res.text()}`);
40 return res.json(); // { id: 'post_id' }
41}

Pro tip: Instagram Long-Lived Access Tokens expire after 60 days. Set a reminder to regenerate them, or build a refresh endpoint that calls the token refresh URL (GET /refresh_access_token?grant_type=ig_refresh_token&access_token=...) before tokens expire.

Expected result: The Instagram API utility is set up. The /api/instagram/feed route returns your recent Instagram posts with media URLs. A test publish call creates a post on your Instagram Business account.

2

Build the Visual Content Calendar with Supabase

The visual content calendar is the core feature — a drag-and-drop grid showing scheduled posts with their image thumbnails. Build this using Supabase as the storage layer and React for the interactive UI. Create a Supabase table called scheduled_posts with columns: id (uuid, primary key), caption (text), media_url (text, the image or video URL), platform (text, e.g., 'instagram', 'tiktok', 'pinterest'), scheduled_at (timestamp with time zone), status (text: 'draft', 'scheduled', 'published', 'failed'), sort_order (integer for drag-drop reordering), created_at (timestamp with time zone). For the visual calendar UI, use a CSS grid layout — a 3-column grid for the Instagram feed preview, or a weekly calendar grid showing posts per day. Each cell in the grid shows the media thumbnail, platform badge, and scheduled time. Implement drag-and-drop to reorder posts within the grid using @hello-pangea/dnd (the actively maintained fork of react-beautiful-dnd). When a post is dragged to a new position, update the sort_order values in Supabase. Add a Media Library section where users can add image URLs (or upload files to Supabase Storage) to have a pool of assets ready for scheduling. The visual calendar UI works entirely in Bolt's WebContainer preview since it reads from and writes to Supabase — no deployment needed to build and test the core features. Deploy to Netlify or Bolt Cloud when you're ready to publish actual posts through the Instagram API.

Bolt.new Prompt

Build a visual content calendar for Instagram using Supabase. Create a Supabase 'scheduled_posts' table with: id, caption, media_url, platform, scheduled_at, status (draft/scheduled/published/failed), sort_order. Display posts in a 3-column Instagram-style grid showing media thumbnails. Add drag-and-drop reordering using @hello-pangea/dnd — when dropped, update sort_order in Supabase. Show a Month View toggle that switches to a 7-column weekly calendar. Add a New Post button that opens a sidebar with: image URL input with preview, caption textarea (30-char Instagram limit reminder at 2200 chars), platform selector, datetime picker, and a Save to Queue button. Add a Publish Now button on each card that calls POST /api/instagram/publish for the post's media_url and caption.

Paste this in Bolt.new chat

app/api/instagram/publish/route.ts
1// app/api/instagram/publish/route.ts
2import { NextRequest, NextResponse } from 'next/server';
3import { createImageContainer, publishMedia } from '@/lib/instagram';
4
5export async function POST(request: NextRequest) {
6 const { caption, media_url, post_id } = await request.json();
7 const userId = process.env.INSTAGRAM_BUSINESS_ACCOUNT_ID;
8
9 if (!caption || !media_url || !userId) {
10 return NextResponse.json(
11 { error: 'caption, media_url, and INSTAGRAM_BUSINESS_ACCOUNT_ID are required' },
12 { status: 400 }
13 );
14 }
15
16 try {
17 // Step 1: Create media container
18 const container = await createImageContainer(userId, media_url, caption);
19 const creationId = container.id;
20
21 if (!creationId) {
22 return NextResponse.json({ error: 'Failed to create media container' }, { status: 500 });
23 }
24
25 // Wait briefly for Instagram to process the media (recommended)
26 await new Promise((resolve) => setTimeout(resolve, 2000));
27
28 // Step 2: Publish the container
29 const published = await publishMedia(userId, creationId);
30
31 // Update status in Supabase if post_id provided
32 // (Update your Supabase record here using the Supabase client)
33
34 return NextResponse.json({ success: true, instagram_id: published.id });
35 } catch (error) {
36 console.error('Instagram publish error:', error);
37 return NextResponse.json({ error: String(error) }, { status: 500 });
38 }
39}

Pro tip: Instagram requires a brief delay between creating the media container and publishing it — the platform needs time to process the image from the provided URL. A 2-second delay before the publish step prevents 'Container is not ready' errors for most images.

Expected result: The visual calendar shows scheduled posts as image thumbnails in a 3-column grid. Drag-and-drop reordering works. The New Post sidebar saves posts to Supabase. The Publish Now button posts to Instagram.

3

Add TikTok Content Posting API Integration

TikTok's Content Posting API allows apps to upload and publish videos to TikTok on behalf of users. This is the native TikTok equivalent to Later's scheduling feature. To get access: create a developer account at developers.tiktok.com, create an app, and apply for the 'Content Posting API' scope — TikTok reviews these applications. Once approved, you'll have a client key and secret for OAuth authentication. TikTok uses a user-specific OAuth flow: each creator authorizes your app through a redirect to TikTok's auth page, which returns a refresh token that you exchange for access tokens. This OAuth flow requires a deployed redirect URI — it cannot be tested in Bolt's WebContainer preview. For development with your own TikTok account, you can test using a direct token from TikTok's sandbox environment. TikTok video publishing via API uses a multi-step upload process: initialize an upload (POST /v2/post/publish/video/init/), upload the video in chunks to the provided upload URL, then publish the completed upload. The video file must be accessible for upload — for Bolt apps, upload videos to Supabase Storage first (generating a public URL), then pass that URL to TikTok's upload initialization. TikTok's Content Posting API also supports 'PUBLISH_CONTENT_DIRECTLY' and 'UPLOAD_TO_INBOX' modes — the inbox mode creates a draft that the creator reviews before posting, which is often more appropriate for third-party tools. Build the TikTok publishing route to use the inbox mode by default, giving creators control over the final post.

Bolt.new Prompt

Add TikTok Content Posting API integration to my content calendar. Create lib/tiktok.ts with: initVideoUpload(accessToken, videoFileSize, videoTitle) calling POST https://open.tiktokapis.com/v2/post/publish/video/init/ with the video metadata, and publishFromUrl(accessToken, videoUrl, title, privacy) calling the TikTok API to publish a video from a URL. Create POST /api/tiktok/publish that accepts { video_url, title, privacy_level } and calls these functions using TIKTOK_ACCESS_TOKEN. Add TikTok to the platform selector in the content calendar compose form. Add TIKTOK_ACCESS_TOKEN and TIKTOK_CLIENT_KEY to .env as placeholders.

Paste this in Bolt.new chat

lib/tiktok.ts
1// lib/tiktok.ts
2const TIKTOK_BASE = 'https://open.tiktokapis.com/v2';
3
4export async function initVideoUpload(
5 accessToken: string,
6 videoSize: number,
7 title: string
8) {
9 const res = await fetch(`${TIKTOK_BASE}/post/publish/video/init/`, {
10 method: 'POST',
11 headers: {
12 Authorization: `Bearer ${accessToken}`,
13 'Content-Type': 'application/json; charset=UTF-8',
14 },
15 body: JSON.stringify({
16 post_info: {
17 title,
18 privacy_level: 'MUTUAL_FOLLOW_FRIENDS', // SELF_ONLY, MUTUAL_FOLLOW_FRIENDS, or PUBLIC_TO_EVERYONE
19 disable_duet: false,
20 disable_comment: false,
21 disable_stitch: false,
22 video_cover_timestamp_ms: 1000,
23 },
24 source_info: {
25 source: 'FILE_UPLOAD',
26 video_size: videoSize,
27 chunk_size: videoSize,
28 total_chunk_count: 1,
29 },
30 }),
31 });
32
33 if (!res.ok) {
34 throw new Error(`TikTok init failed: ${await res.text()}`);
35 }
36
37 return res.json();
38 // Returns: { data: { publish_id, upload_url } }
39}
40
41export async function publishFromInbox(accessToken: string, publishId: string) {
42 // Check upload status
43 const res = await fetch(`${TIKTOK_BASE}/post/publish/status/fetch/`, {
44 method: 'POST',
45 headers: {
46 Authorization: `Bearer ${accessToken}`,
47 'Content-Type': 'application/json',
48 },
49 body: JSON.stringify({ publish_id: publishId }),
50 });
51 return res.json();
52}

Pro tip: TikTok's Content Posting API requires the OAuth flow to be tested on a deployed URL with a registered redirect URI. During development, use a TikTok sandbox access token or test with your personal TikTok account through the developer sandbox.

Expected result: The content calendar supports TikTok as a publishing target. Videos stored in Supabase Storage can be scheduled and published to TikTok via the API route.

4

Deploy and Build the Custom Linkin.bio Page

After deploying to Netlify or Bolt Cloud, you gain a stable URL that can be shared as the link in an Instagram bio, replacing Later's linkin.bio feature. A custom linkin.bio page in Bolt is straightforward: a mobile-optimized landing page that reads link data from Supabase and displays it as a list of clickable buttons. Deploy your app: click Publish in Bolt to deploy to Bolt Cloud, or push to GitHub and connect to Netlify for automated deployments. Set all environment variables on the hosting platform: INSTAGRAM_ACCESS_TOKEN, INSTAGRAM_BUSINESS_ACCOUNT_ID, TIKTOK_ACCESS_TOKEN (when available), and your Supabase credentials. Create a Supabase table called bio_links with columns: id, title, url, image_url, order_position, active, click_count. Build the /bio page as a Server Component that reads from Supabase and renders the links. Add an admin page at /admin/bio to manage link order and toggle links on/off. Implement click tracking by incrementing the click_count column when a link is clicked — use a server action or API route since direct client-side Supabase calls to update counts work but tracking is better done server-side to prevent client-side manipulation. Add your deployed URL to your Instagram bio. The /bio page is your custom linkin.bio. Unlike Later's linkin.bio, your version has no branding restrictions, is fully customizable, and has no monthly link limits. Optionally add Supabase analytics to see which links drive the most clicks over time.

Bolt.new Prompt

Build a custom linkin.bio page for my Bolt app. Create a Supabase 'bio_links' table (id, title, url, image_url, order_position, active, click_count). Build /bio page: centered mobile layout, profile image from NEXT_PUBLIC_BIO_AVATAR_URL, display name from NEXT_PUBLIC_BIO_NAME, bio text from NEXT_PUBLIC_BIO_TEXT, then list of active links from Supabase ordered by order_position. Each link is a pill button with optional small thumbnail image left-aligned. Clicking a link calls POST /api/bio/click?link_id={id} to increment click_count, then redirects to the link URL. Build /admin/bio page with a sortable list of all links (drag to reorder), toggle switches for active/inactive, edit title/url buttons, and Add New Link form. Mobile-first styling.

Paste this in Bolt.new chat

app/bio/page.tsx
1// app/bio/page.tsx
2import { createClient } from '@supabase/supabase-js';
3
4const supabase = createClient(
5 process.env.NEXT_PUBLIC_SUPABASE_URL!,
6 process.env.SUPABASE_SERVICE_ROLE_KEY!
7);
8
9export default async function BioPage() {
10 const { data: links } = await supabase
11 .from('bio_links')
12 .select('*')
13 .eq('active', true)
14 .order('order_position');
15
16 return (
17 <main className="min-h-screen bg-white flex flex-col items-center px-4 py-8 max-w-sm mx-auto">
18 <img
19 src={process.env.NEXT_PUBLIC_BIO_AVATAR_URL || '/avatar.png'}
20 alt="Profile"
21 className="w-20 h-20 rounded-full mb-3"
22 />
23 <h1 className="font-bold text-lg">{process.env.NEXT_PUBLIC_BIO_NAME}</h1>
24 <p className="text-gray-500 text-sm text-center mb-6">{process.env.NEXT_PUBLIC_BIO_TEXT}</p>
25 <div className="w-full space-y-3">
26 {links?.map((link) => (
27 <a
28 key={link.id}
29 href={`/api/bio/click?id=${link.id}&url=${encodeURIComponent(link.url)}`}
30 className="flex items-center gap-3 w-full border rounded-xl p-3 hover:bg-gray-50 transition"
31 >
32 {link.image_url && (
33 <img src={link.image_url} alt="" className="w-10 h-10 rounded-lg object-cover" />
34 )}
35 <span className="font-medium text-center flex-1">{link.title}</span>
36 </a>
37 ))}
38 </div>
39 </main>
40 );
41}

Pro tip: Use the /api/bio/click redirect pattern for link click tracking — it lets you increment the click_count in Supabase server-side before redirecting to the destination URL, giving you accurate analytics without client-side JavaScript.

Expected result: The /bio page is live at your deployed URL. Adding it to your Instagram bio shows a clean, mobile-optimized link page. The admin panel lets you manage links and see click counts.

Common use cases

Visual Instagram Feed Planner

Build a 3-column grid that mirrors an Instagram feed, where users can drag and drop content to plan the visual aesthetic before publishing. Scheduled posts show their image thumbnails in the grid, letting users see if the color palette and visual theme are consistent across multiple upcoming posts.

Bolt.new Prompt

Build a visual Instagram feed planner. Create a 3-column grid layout showing the last 9 published Instagram posts (fetched from Instagram Graph API using INSTAGRAM_ACCESS_TOKEN) and the next 9 planned posts (from Supabase 'scheduled_posts' table). Planned posts show their image URLs as thumbnails. Add a drag-and-drop interface (use @hello-pangea/dnd or react-beautiful-dnd) to reorder planned posts within the grid. Display the scheduled date below each planned post card. Add a Schedule New Post button that opens a modal with an image URL input, caption textarea, and datetime picker — saves to Supabase on submit.

Copy this prompt to try it in Bolt.new

Custom Linkin.bio Landing Page

Build a custom linkin.bio-style landing page that replaces Later's linkin.bio feature. Users manage their link collection in Bolt, and the page is served at a custom URL. Supports profile image, bio text, and a list of clickable links with thumbnails — identical functionality to Later's linkin.bio, but hosted in your Bolt app.

Bolt.new Prompt

Build a linkin.bio-style landing page for Instagram. Create a /bio page at my Bolt app showing: profile avatar, display name, bio text, and a list of links from a Supabase 'bio_links' table (columns: title, url, image_url, order, active). Each link shows as a pill button with the title. Add click tracking: increment a 'clicks' counter in Supabase on each link click. Build an admin panel at /admin/bio to add, reorder, and toggle links. Style the page mobile-first since it's primarily accessed from phone browser after clicking the Instagram bio link.

Copy this prompt to try it in Bolt.new

TikTok and Instagram Content Queue

Build a content queue where video files and captions are staged for publishing to TikTok and Instagram simultaneously. The queue shows scheduled posts with status tracking (queued, processing, published, failed) and allows reordering before they go live.

Bolt.new Prompt

Build a content queue for TikTok and Instagram video posts. Store queue items in Supabase 'content_queue' table with: id, caption, video_url, platforms (array), scheduled_at, status (queued/processing/published/failed), created_at. Display the queue as a list sorted by scheduled_at. For each item, show: video thumbnail (if URL is from a video hosting service), caption preview, platform badges, scheduled time, and status badge. Add Publish Now button that calls POST /api/social/publish-instagram or /api/social/publish-tiktok based on platforms field. For video storage, use Supabase Storage — show a file upload component.

Copy this prompt to try it in Bolt.new

Troubleshooting

Instagram media container creation fails with 'The image url is invalid'

Cause: The image URL must be publicly accessible over HTTPS — Instagram's servers need to download the image when creating the container. Local URLs, Bolt preview URLs, or private storage URLs will fail.

Solution: Host the image on a public CDN or Supabase Storage with public bucket settings before passing the URL to the Instagram API. Supabase Storage URLs from public buckets are valid Instagram image URLs. Test that the URL is publicly accessible by opening it in an incognito browser window.

Instagram publish step fails with 'Media container not ready'

Cause: The publish call was made too quickly after container creation — Instagram needs a few seconds to process the image from the provided URL.

Solution: Add a 2-3 second delay between creating the container and calling the publish endpoint. For larger images or slow-loading URLs, increase the delay to 5 seconds. Alternatively, poll the container status endpoint before publishing.

typescript
1// Add delay between container creation and publish
2await new Promise((resolve) => setTimeout(resolve, 3000));
3const published = await publishMedia(userId, creationId);

TikTok API returns 'scope_not_authorized' when attempting to post

Cause: The Content Posting API scope hasn't been approved for your TikTok developer app, or the access token doesn't include the video.publish scope.

Solution: Apply for Content Posting API access in your TikTok developer app settings. TikTok reviews these applications manually — it may take several days. Ensure the OAuth authorization flow requests the video.publish scope. Until approved, test with TikTok's sandbox environment.

Best practices

  • Use Supabase Storage to host media files for social publishing — it generates stable public HTTPS URLs that Instagram and TikTok can access when downloading content for media containers
  • Implement the Instagram Container → Publish two-step flow with a delay between steps — skipping the delay is a common cause of 'container not ready' errors
  • Long-Lived Instagram access tokens expire after 60 days — set a reminder or build an automated refresh using the token refresh endpoint
  • Build the /bio linkin.bio page as a Server Component (not client-side rendered) for better SEO and faster initial load on mobile browsers
  • Use Promise.allSettled() when publishing to multiple platforms — partial success (Instagram succeeded, TikTok failed) should show the user which platforms worked rather than treating everything as a failure
  • Store all published post external IDs (Instagram post ID, TikTok video ID) in Supabase — you'll need them to fetch performance analytics later
  • Test the visual calendar drag-and-drop UI in Bolt's WebContainer preview — it works fine since it only uses Supabase. Deploy only when ready to test actual Instagram or TikTok publishing.

Alternatives

Frequently asked questions

Does Later have a public API I can use with Bolt.new?

No — Later's API is primarily internal and not available for general third-party developer use. For building social scheduling and visual calendar features in Bolt.new, use Instagram Graph API (for Instagram publishing), TikTok Content Posting API (for TikTok), or Pinterest API directly. These native platform APIs give you direct access without going through Later.

Can I build a linkin.bio replacement in Bolt.new?

Yes — a custom linkin.bio page in Bolt is approximately 30 minutes of work: a mobile-optimized landing page reading from a Supabase table of links. The advantage over Later's linkin.bio is that your version has no per-link limits, no Later branding, full design control, and built-in click analytics stored in Supabase. Deploy to Bolt Cloud or Netlify to get a stable URL for your Instagram bio.

Can I use Instagram Graph API in Bolt's WebContainer preview?

Yes — fetching your Instagram feed and reading media data are outbound API calls that work fine in the preview. The limitation is Instagram publishing: the two-step media container and publish flow also works in the preview since both steps are outbound calls. OAuth flows (generating new access tokens) require a deployed callback URL, but if you have an existing Long-Lived Access Token stored in .env, you can test publishing from the preview.

What's the difference between Instagram Basic Display API and Instagram Graph API?

Instagram Basic Display API is for personal accounts and provides read-only access to your own media. Instagram Graph API is for Business and Creator accounts and provides both read and write access — including media publishing. For scheduling and publishing content, you need the Graph API, which requires a Facebook Page and a Business or Creator Instagram account connected to it.

How do I handle videos for Instagram and TikTok in Bolt?

Host videos in Supabase Storage (use a public bucket) to get stable public HTTPS URLs. Both Instagram Graph API and TikTok Content Posting API require public video URLs — they download the video from your URL to their servers during the upload process. Bolt's WebContainer file system is ephemeral (files vanish on refresh), so external storage like Supabase Storage or Cloudflare R2 is essential for any media that needs to persist.

RapidDev

Talk to an Expert

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

Book a free consultation

Need help with your project?

Our experts have built 600+ apps and can accelerate your development. Book a free consultation — no strings attached.

Book a free consultation

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.