Skip to main content
RapidDev - Software Development Agency
v0-integrationsNext.js API Route

How to Integrate Sendible with V0

To use Sendible with V0 by Vercel, create a Next.js API route at app/api/sendible/route.ts that proxies requests to the Sendible REST API using your API key. Store your key as SENDIBLE_API_KEY in Vercel environment variables. V0 generates the white-label social media dashboard UI and your API route fetches client accounts, scheduled posts, and engagement metrics from Sendible server-side.

What you'll learn

  • How to authenticate with the Sendible API and create a secure Next.js proxy route
  • How to fetch client social profiles, scheduled content, and engagement metrics from Sendible
  • How to store Sendible API credentials safely in Vercel environment variables
  • How to build a white-label social media dashboard using V0-generated components
  • How to display multi-client social analytics and post queues in a V0 app
Book a free consultation
4.9Clutch rating
600+Happy partners
17+Countries served
190+Team members
Intermediate15 min read25 minutesMarketingApril 2026RapidDev Engineering Team
TL;DR

To use Sendible with V0 by Vercel, create a Next.js API route at app/api/sendible/route.ts that proxies requests to the Sendible REST API using your API key. Store your key as SENDIBLE_API_KEY in Vercel environment variables. V0 generates the white-label social media dashboard UI and your API route fetches client accounts, scheduled posts, and engagement metrics from Sendible server-side.

Building a White-Label Social Media Dashboard with Sendible and V0

V0 by Vercel generates polished Next.js UI components quickly — making it an ideal tool for agencies that need to build branded client portals and dashboards without a large engineering team. Sendible is purpose-built for agencies: it supports multi-client social account management, white-label reporting, and a REST API that exposes profiles, posts, and analytics.

The integration works through Next.js API routes that proxy Sendible API requests server-side. Sendible API keys provide full account access including client data, so they must stay in server-only environment variables. The proxy pattern means your frontend components call your /api/sendible/* routes, which authenticate with Sendible and return the data — keeping the API key out of the browser entirely.

What makes this integration particularly valuable for agencies is the ability to build custom client-facing dashboards that match your branding rather than sending clients to Sendible's interface. V0 generates the dashboard UI — client switcher, post calendar, engagement metrics — while your API routes pull the real data from Sendible. The result is a professional, branded experience that positions your agency as a technology-first partner rather than a tool reseller.

Integration method

Next.js API Route

V0 generates your white-label social media dashboard UI for agency clients. A Next.js API route proxies all Sendible REST API calls server-side, keeping your API credentials secure. The Sendible API provides access to profiles, services, content queues, reports, and team management. Your frontend fetches data from your /api/sendible/* routes rather than calling Sendible directly.

Prerequisites

  • A V0 account at v0.dev — free tier works for UI generation
  • A Sendible account with API access — API is available on Creator and Agency plans
  • Your Sendible API key — found in Sendible → Settings → API & Webhooks
  • A Vercel account (free) for deployment and environment variable management
  • At least one connected social profile in your Sendible account to test with

Step-by-step guide

1

Get Your Sendible API Key and Explore the API

Sendible provides API access on Creator and Agency plans. To get your API key, log into Sendible, go to Settings (gear icon) → API & Webhooks, and copy your API key. Sendible uses HTTP Basic authentication where the API key is the username and the password can be any non-empty string — though some Sendible API versions accept a Bearer token format. Check your Sendible account's API documentation section for the exact authentication method your plan uses. The Sendible REST API base URL is https://api.sendible.com/api/v1/ for v1 endpoints. Key endpoints include: /application.json for account info, /services.json for the list of connected social profiles and client accounts, /profile_posts.json for fetching posts for a specific service, /posts.json for the content queue, and /reports.json for analytics data. Before building in V0, test your API key using a tool like curl or a REST client. A basic test request is GET https://api.sendible.com/api/v1/application.json with your key as Basic auth username. A successful response returns your account details. This confirms your API key is valid and your plan includes API access. Take note of your service IDs (social profile IDs) — you'll need these to fetch data for specific client accounts. The /services.json endpoint lists all connected profiles with their IDs, names, and types (Facebook Page, Twitter, Instagram, etc.).

Pro tip: Test your Sendible API key with a simple curl command before writing any code: curl -u 'YOUR_API_KEY:x' 'https://api.sendible.com/api/v1/application.json' — a 200 response confirms your key is valid.

Expected result: Sendible API key is copied from Settings → API & Webhooks. A test request to the application endpoint returns account JSON, confirming API access is working.

2

Generate the Dashboard UI in V0

Before creating API routes, generate your dashboard UI components in V0 so you have a clear picture of what data fields you need to fetch. Open V0 at v0.dev and prompt it to generate the social media dashboard layout. Describe the specific components: a client/service selector, a post list or queue view, engagement metric cards, and any chart components you need. V0 generates React components using Tailwind CSS and shadcn/ui by default. Use V0's Design Mode (Option+D) to adjust the white-label branding — colors, logo placement, typography — to match your agency's style. This is free in Design Mode and doesn't consume credits. When V0 generates components with data fetching, it typically uses placeholder data or mock API calls. Review the generated components to understand the data shape they expect: what fields does the post card component need? What format does the chart expect for engagement data? This shapes how you structure your API route responses in the next step. For a white-label dashboard, prompt V0 to include a client selector component that stores the selected client in React state and passes the serviceId to child components as a prop. This creates the multi-client switching behavior without complex state management.

V0 Prompt

Create a social media agency dashboard with a top navigation bar showing the agency logo and a client selector dropdown. Below, show four metric cards: Total Posts, Total Engagements, Follower Growth, and Avg Engagement Rate. Add a 'Recent Posts' table with columns for network icon, post preview text, scheduled date, likes, comments, and shares. Include a sidebar with the client list showing client name and a colored dot indicating their subscription status.

Paste this in V0 chat

Pro tip: Generate the full UI first and identify what data your components need — this makes it much easier to design the right API route response shapes in the next step.

Expected result: A white-label social media dashboard renders in V0's preview with placeholder data. The layout includes a client selector, metric cards, and a post table. The design matches your agency branding.

3

Create the Sendible API Proxy Routes

Create Next.js API routes that proxy requests to the Sendible REST API. Because Sendible API keys grant full account access — including all client data and posting permissions — they must never appear in client-side JavaScript. Create a flexible proxy route at app/api/sendible/route.ts that accepts GET requests with an endpoint query parameter, then forwards the request to the appropriate Sendible API endpoint. This design lets your frontend call /api/sendible?endpoint=services to fetch client profiles, /api/sendible?endpoint=posts&service_id=123 to fetch posts for a specific client, and so on — without needing a separate route file for each Sendible endpoint. For the authentication header, Sendible v1 uses HTTP Basic auth with the API key as the username and a placeholder (like 'x') as the password. Base64 encode the credential string in your route handler rather than hardcoding it. Add response caching with next: { revalidate: 60 } for data that doesn't change frequently (services list, profile info). For real-time data like post queues, use no-store to always fetch fresh data. Forward query parameters from your frontend to Sendible by building the URL dynamically from the incoming request's search params, excluding your own 'endpoint' parameter. For the services endpoint specifically — which returns connected social profiles — Sendible returns both individual profiles (Twitter account, Facebook page) and team/client groupings depending on your account structure. Parse the response to organize profiles by client for the client selector component.

V0 Prompt

Create a Next.js API route at app/api/sendible/route.ts that accepts a GET request with an 'endpoint' query parameter. Forward the request to the Sendible API at https://api.sendible.com/api/v1/{endpoint}.json, passing through all other query parameters. Use HTTP Basic auth with process.env.SENDIBLE_API_KEY as the username and 'x' as the password. Return the Sendible response as JSON.

Paste this in V0 chat

app/api/sendible/route.ts
1import { NextRequest, NextResponse } from 'next/server';
2
3const SENDIBLE_API_BASE = 'https://api.sendible.com/api/v1';
4
5// Allowed Sendible endpoints to prevent SSRF
6const ALLOWED_ENDPOINTS = new Set([
7 'application',
8 'services',
9 'profile_posts',
10 'posts',
11 'reports',
12 'contacts',
13]);
14
15export async function GET(request: NextRequest) {
16 const apiKey = process.env.SENDIBLE_API_KEY;
17
18 if (!apiKey) {
19 return NextResponse.json(
20 { error: 'Sendible API key not configured' },
21 { status: 500 }
22 );
23 }
24
25 const { searchParams } = new URL(request.url);
26 const endpoint = searchParams.get('endpoint');
27
28 if (!endpoint || !ALLOWED_ENDPOINTS.has(endpoint)) {
29 return NextResponse.json(
30 { error: 'Invalid or missing endpoint parameter' },
31 { status: 400 }
32 );
33 }
34
35 // Forward all query params except 'endpoint'
36 const forwardParams = new URLSearchParams();
37 searchParams.forEach((value, key) => {
38 if (key !== 'endpoint') forwardParams.set(key, value);
39 });
40
41 const url = `${SENDIBLE_API_BASE}/${endpoint}.json${
42 forwardParams.toString() ? `?${forwardParams.toString()}` : ''
43 }`;
44
45 const authHeader = `Basic ${Buffer.from(`${apiKey}:x`).toString('base64')}`;
46
47 try {
48 const response = await fetch(url, {
49 headers: {
50 Authorization: authHeader,
51 Accept: 'application/json',
52 },
53 next: {
54 revalidate: endpoint === 'services' ? 300 : 60,
55 },
56 });
57
58 if (!response.ok) {
59 const errorText = await response.text();
60 return NextResponse.json(
61 { error: `Sendible API error: ${response.status}`, details: errorText },
62 { status: response.status }
63 );
64 }
65
66 const data = await response.json();
67 return NextResponse.json(data);
68 } catch (error) {
69 const message = error instanceof Error ? error.message : 'Unknown error';
70 return NextResponse.json({ error: message }, { status: 500 });
71 }
72}

Pro tip: Use an allowlist of permitted Sendible endpoints in your proxy route — this prevents SSRF attacks where an attacker crafts a request to fetch internal resources through your server-side proxy.

Expected result: GET /api/sendible?endpoint=services returns a JSON list of connected social profiles. GET /api/sendible?endpoint=application returns your Sendible account info. Unknown endpoints return a 400 error.

4

Set Environment Variables and Connect the Dashboard

Store your Sendible API key in Vercel's environment variables. The API key must not have the NEXT_PUBLIC_ prefix since it's a server-only secret that grants full account access including client data and posting permissions. Push your V0 project to GitHub using V0's Git panel. Open your Vercel project at vercel.com/dashboard, go to Settings → Environment Variables. Click Add New, set key = SENDIBLE_API_KEY, paste your API key as the value, and check all three environment scopes: Production, Preview, and Development. Click Save, then go to Deployments and click Redeploy. For local development, create a .env.local file at your project root with SENDIBLE_API_KEY=your_key_here and add it to .gitignore. Now connect your V0-generated dashboard components to the API routes. Update the components to fetch from /api/sendible?endpoint=services for the client list and /api/sendible?endpoint=profile_posts&service_id={id} for post data. Use React's useEffect or Server Component fetch calls depending on your component structure. For the multi-client selector, store the selected serviceId in React state and re-fetch post and metrics data whenever the selection changes. Pass the serviceId as a query parameter to your API routes, which forward it to Sendible. This creates the real-time client switching behavior your agency clients expect.

V0 Prompt

Update the dashboard components to fetch real data from the Sendible API proxy. On page load, call GET /api/sendible?endpoint=services to populate the client selector dropdown. When a client is selected, call GET /api/sendible?endpoint=profile_posts&service_id={selectedId}&count=20 to populate the posts table and update the metric cards with aggregate data from the response.

Paste this in V0 chat

.env.local
1# .env.local never commit this file to git
2SENDIBLE_API_KEY=your_sendible_api_key_here

Pro tip: Sendible's services endpoint returns both individual social profiles and parent client accounts — filter by the 'type' field to show only top-level client accounts in the client selector dropdown.

Expected result: SENDIBLE_API_KEY is set in Vercel Dashboard. After redeployment, the dashboard's client selector populates with real Sendible accounts. Selecting a client loads their posts and metrics from the Sendible API through your proxy route.

5

Deploy and Test the White-Label Dashboard

Deploy your V0 project to Vercel. If connected to GitHub, a push triggers automatic deployment. Otherwise use V0's Publish button or the Vercel Dashboard → Deployments → Redeploy. After deployment (30–60 seconds), open the production URL. The dashboard should load with your real Sendible client accounts in the selector. Test each client to confirm their posts, metrics, and scheduled content load correctly. Compare the numbers to what you see in Sendible's own interface to verify the data is accurate. To verify the proxy is working correctly, open your browser's Developer Tools → Network tab while clicking between clients. You should see requests to /api/sendible?endpoint=... that return JSON — no requests should go directly to api.sendible.com from the browser (this would indicate the API key is being used client-side). Vercel's Dashboard → Functions tab shows your API route's invocation count and any errors. For agency deployments where multiple team members or clients access the dashboard, consider adding authentication — Clerk or Supabase Auth integrate cleanly with V0-generated Next.js apps. Add role-based access so clients can only see their own account's data, not all accounts. RapidDev can help you design the multi-tenant access control layer that maps users to their Sendible service IDs.

Pro tip: Open browser DevTools → Network and verify that no requests go directly to api.sendible.com — all Sendible calls should route through your /api/sendible proxy to keep the API key server-side.

Expected result: The deployed dashboard shows real client accounts and post data from Sendible. The Network tab shows requests only to /api/sendible routes, not directly to the Sendible API. Vercel Functions tab confirms the proxy route is being used.

Common use cases

Multi-Client Social Dashboard

Build a white-label dashboard that shows all client social profiles in a sidebar, with their recent posts, scheduled content queue, and engagement metrics. Clients log into your branded portal instead of Sendible directly, reinforcing your agency's brand.

V0 Prompt

Create an agency social media dashboard with a left sidebar listing client names (fetched from GET /api/sendible/services), a main content area showing the selected client's recent posts and scheduled queue, and metric cards for followers, likes, and comments. Add a client switcher that updates all data when a different client is selected. Use a clean, professional design suitable for a white-label agency portal.

Copy this prompt to try it in V0

Content Performance Report Page

Generate a monthly performance report page showing engagement trends, top performing posts, and growth metrics for a specific client. The page pulls data from Sendible's reports API and displays it in a shareable format the agency can export as PDF or share via link.

V0 Prompt

Build a social media performance report page for a single client. Show metric summary cards for total impressions, total engagements, follower growth, and average post engagement rate. Add a line chart showing daily engagement over the past 30 days, a grid of top 5 performing posts with thumbnail, caption preview, likes, and shares, and a 'Download PDF' button. Fetch data from GET /api/sendible/reports?serviceId={id}&period=30days.

Copy this prompt to try it in V0

Post Scheduling Interface

Build an internal tool for your agency team to view and manage the social content queue across all clients. Show pending, scheduled, and published posts in a kanban-style board with the ability to see which posts are awaiting approval.

V0 Prompt

Create a content queue kanban board with three columns: Drafts, Scheduled, and Published. Each card shows the post text, target social networks (as icons), scheduled time, and assigned client. Fetch posts from GET /api/sendible/posts with status filters for each column. Add a search input to filter posts by client name or content keywords. Use a card design with status badges and social network icons.

Copy this prompt to try it in V0

Troubleshooting

API route returns 401 Unauthorized from Sendible

Cause: The SENDIBLE_API_KEY is missing from Vercel environment variables, incorrect, or was added after the last deployment without redeploying.

Solution: Go to Vercel Dashboard → Settings → Environment Variables and verify SENDIBLE_API_KEY is present. Confirm the key matches what's in Sendible → Settings → API & Webhooks. Redeploy after confirming. Also verify you're using the correct Basic auth format — Sendible v1 uses the API key as username with a placeholder password.

typescript
1// Correct Basic auth format for Sendible v1
2const authHeader = `Basic ${Buffer.from(`${apiKey}:x`).toString('base64')}`;

Services endpoint returns an empty array even though clients are connected in Sendible

Cause: The API key may belong to a sub-account without visibility into all client profiles, or the account tier does not include API access to all service types.

Solution: Log into Sendible as the primary account owner (not a team member) and regenerate the API key. Verify the account has Creator or Agency plan access. In Sendible's API documentation, confirm which plan tier is required for the /services endpoint to return all profiles.

Dashboard shows different post counts than the Sendible web interface

Cause: The API uses pagination and your route is only fetching the first page of results (typically 20 posts). The web interface shows all posts.

Solution: Add pagination to your API route by forwarding the page and count parameters. Fetch additional pages using the pagination metadata in the Sendible API response. Alternatively, increase the count parameter to the maximum allowed value to reduce the number of API calls.

typescript
1// Request more posts per page and handle pagination
2const url = `/profile_posts.json?service_id=${serviceId}&count=50&page=${page}`;

Route returns 400 'Invalid or missing endpoint parameter' for a valid endpoint

Cause: The requested endpoint is not in the ALLOWED_ENDPOINTS allowlist in the proxy route.

Solution: Add the new endpoint to the ALLOWED_ENDPOINTS Set in your app/api/sendible/route.ts file. Keep the allowlist comprehensive — only add Sendible endpoint names you actually use to prevent SSRF vulnerabilities.

typescript
1const ALLOWED_ENDPOINTS = new Set([
2 'application',
3 'services',
4 'profile_posts',
5 'posts',
6 'reports',
7 'contacts',
8 'analytics', // add new endpoints here as needed
9]);

Best practices

  • Always proxy Sendible API calls through a server-side Next.js route — the API key grants full account access and must never appear in client-side JavaScript
  • Use an endpoint allowlist in your proxy route to prevent Server-Side Request Forgery (SSRF) attacks from malicious endpoint parameter values
  • Cache services and profile data with longer revalidate times (300 seconds) since client accounts rarely change, but cache post queues with shorter times (60 seconds) for near-real-time accuracy
  • Store separate API keys for your development and production Sendible accounts to prevent test data from polluting client-facing dashboards
  • Add authentication to your dashboard before showing it to clients — use Clerk or Supabase Auth to ensure each client only sees their own account data
  • Include error boundaries in dashboard components that show a user-friendly message when Sendible API calls fail rather than a blank page
  • Use Sendible's webhook feature to receive real-time notifications of new engagements and incoming DMs, which you can store in your own database for faster dashboard loads
  • Test the dashboard with each Sendible service type (Facebook, Instagram, Twitter, LinkedIn) since API response structures vary between social networks

Alternatives

Frequently asked questions

Does Sendible's API support posting to social media from my V0 app?

Yes. The Sendible API includes POST endpoints for creating and scheduling posts. You can create a post through the /posts.json endpoint with the service ID, message content, and optional scheduled time. This requires the 'write' API scope in addition to 'read'. Be careful with programmatic posting — test thoroughly with a staging Sendible account before connecting production client profiles.

Can I use Sendible with Vercel's preview deployments?

Yes. Set SENDIBLE_API_KEY for all three Vercel environment scopes (Production, Preview, Development) so the API routes work on preview deployments. For production applications, consider using a separate Sendible API key with read-only permissions for preview/staging environments to avoid accidentally posting test content to real client social profiles.

What Sendible plan do I need to use the API?

Sendible API access is available on Creator plans and above. Free and individual plans do not include API access. The Creator plan provides access to the core endpoints (services, posts, analytics), while Agency plans may unlock additional team management and reporting endpoints. Check Sendible's current pricing page for the latest plan details.

How does Sendible's API handle multiple social networks for the same client?

Each connected social profile (Facebook Page, Twitter account, Instagram profile) has its own service ID in Sendible, even when they belong to the same client. The /services.json endpoint returns all connected profiles with their network types and parent account associations. Your dashboard's client selector should group profiles by client, then let users drill down to specific networks within that client.

Can I build a client-facing portal where clients log in and see only their data?

Yes, but Sendible's API uses your agency's API key for all requests — it doesn't support per-client authentication. You need to add your own authentication layer (Clerk or Supabase Auth) to your Next.js app, then map each logged-in client user to their Sendible service IDs in your database. Your API routes then filter Sendible data to only return the services associated with the currently logged-in client.

How is Sendible different from Hootsuite for agency use?

Sendible is purpose-built for agencies with white-label capabilities, client management workflows, and a lower price point per client. Hootsuite targets enterprise organizations with larger teams and more complex organizational structures. If you're an agency reselling social media management under your own brand, Sendible's white-label features and API are better suited. Hootsuite makes more sense for internal enterprise social teams.

Why does Sendible use Basic auth instead of Bearer tokens?

Sendible's v1 API uses HTTP Basic authentication where the API key is the username and any non-empty string is the password — this is a legacy authentication pattern common in older APIs. When you Base64 encode 'your_api_key:x' and set it as the Authorization: Basic header, Sendible accepts it. More modern APIs use Bearer tokens, but the security level is equivalent when the key is kept server-side and transmitted over HTTPS.

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.