Skip to main content
RapidDev - Software Development Agency
flutterflow-integrationsFlutterFlow API Call

SoundCloud API

Connect FlutterFlow to SoundCloud using the SoundCloud API with OAuth 2.0 client credentials via a Firebase proxy. Critical first step: confirm you can actually get API credentials — SoundCloud's developer app registration has been intermittently restricted for years. For approved apps, the proxy manages the Bearer token, and track/follower stats should be cached in Firestore on a schedule rather than fetched live to avoid undocumented rate limits.

What you'll learn

  • How to navigate SoundCloud's developer registration process and set expectations about credential availability
  • How to proxy the SoundCloud OAuth 2.0 client credentials token exchange through a Firebase Cloud Function
  • How to configure FlutterFlow API Calls to fetch user tracks, follower counts, and play statistics
  • How to cache SoundCloud data in Firestore on a schedule to avoid undocumented rate limits
  • How to stream SoundCloud audio previews in a FlutterFlow app using a just_audio Custom Action
Book a free consultation
4.9Clutch rating
600+Happy partners
17+Countries served
190+Team members
Intermediate17 min read45 minutesMedia & ContentLast updated July 2026RapidDev Engineering Team
TL;DR

Connect FlutterFlow to SoundCloud using the SoundCloud API with OAuth 2.0 client credentials via a Firebase proxy. Critical first step: confirm you can actually get API credentials — SoundCloud's developer app registration has been intermittently restricted for years. For approved apps, the proxy manages the Bearer token, and track/follower stats should be cached in Firestore on a schedule rather than fetched live to avoid undocumented rate limits.

Quick facts about this guide
FactValue
ToolSoundCloud API
CategoryMedia & Content
MethodFlutterFlow API Call
DifficultyIntermediate
Time required45 minutes
Last updatedJuly 2026

Build a SoundCloud-Powered Artist App in FlutterFlow

Before you write a single line of configuration in FlutterFlow, you need to answer one question: can you actually get SoundCloud API credentials? SoundCloud's new developer app registration has been intermittently closed to the public for several years. The developers.soundcloud.com portal exists, but the 'Request API Access' process has been slow, approval is not guaranteed, and many developers report waiting months or receiving no response. If you already have a client_id and client_secret from a previous SoundCloud app registration, you're in good shape. If you're starting fresh, check the current status of SoundCloud's developer registration before investing time in the integration — set that expectation clearly with your client or product team.

For approved apps, the SoundCloud API is a straightforward REST API at api.soundcloud.com. Authentication uses OAuth 2.0: you exchange your client_id and client_secret for a Bearer access token, then include it in every request as an Authorization: Bearer {token} header. Some public endpoints (track listings for public users, public playlists) also accept a bare client_id query parameter — this is a simpler but still non-shareable credential that must be kept server-side. The client secret must never appear in a FlutterFlow API Call header because it would be compiled into the app bundle and extractable.

The most important operational characteristic of the SoundCloud API is that its rate limits are not publicly documented. There is no official statement of how many requests per minute are allowed — the limits vary by endpoint and are enforced silently (you may receive 429 errors or simply start getting empty responses). For any dashboard or analytics feature showing track play counts, follower counts, or listener stats, the correct pattern is to cache the data in Firestore on a schedule (using a Firebase scheduled Cloud Function or on-demand refresh) rather than calling the SoundCloud API every time a user opens the stats screen. The SoundCloud API is free where access is granted; pricing for different features should be confirmed in their current developer documentation.

Integration method

FlutterFlow API Call

FlutterFlow connects to the SoundCloud API through a Firebase Cloud Function proxy that manages OAuth 2.0 token exchange and attaches Bearer tokens to all API requests. SoundCloud's client secret cannot be embedded in the Flutter app bundle. Track and statistics data should be cached in Firestore on a schedule (every 15-60 minutes) because SoundCloud's rate limits are not publicly documented — polling on every screen render risks silent throttling with no clear retry guidance.

Prerequisites

  • Approved SoundCloud developer credentials (client_id and client_secret) — verify current API access availability at developers.soundcloud.com before starting
  • A Firebase project on the Blaze (pay-as-you-go) plan to deploy Cloud Functions for the OAuth proxy
  • A FlutterFlow project with at least one screen for the track list or artist dashboard
  • The SoundCloud user ID or username of the account whose data you want to display (find it in their SoundCloud profile URL)
  • Basic familiarity with FlutterFlow's API Calls panel, Custom Actions, and Firestore data sources

Step-by-step guide

1

Confirm API access and retrieve your SoundCloud credentials

Go to developers.soundcloud.com and check the current status of developer API access. If registration is open, sign in and request access for your app, providing a description of your use case (the more specific, the better — 'indie music artist portfolio app for FlutterFlow' is better than 'testing the API'). SoundCloud may take days to weeks to approve access, or access may be currently closed. If you have existing credentials from a previous app, log in to retrieve your client_id and client_secret from your app dashboard. Once you have credentials, test them immediately: make a curl or browser request to https://api.soundcloud.com/oauth2/token with your client_id, client_secret, and grant_type=client_credentials to confirm you can obtain a Bearer token. If this call returns a valid access_token JSON response, you're ready to build. If it returns an error, your credentials may have been revoked or the endpoint has changed — check SoundCloud's current developer documentation for the latest token URL and grant types supported. Store your client_id and client_secret in your password manager; they'll go into Firebase Secrets in the next step, never into FlutterFlow directly.

Pro tip: Test the token endpoint before building anything in FlutterFlow. If https://api.soundcloud.com/oauth2/token returns an error for client_credentials grant, SoundCloud may have changed their auth endpoint — check their GitHub documentation repository at github.com/soundcloud/api.

Expected result: You have a confirmed client_id and client_secret that successfully return an access_token when sent to the SoundCloud token endpoint. You know which SoundCloud user ID or username to query for your app.

2

Deploy a Firebase Cloud Function proxy for SoundCloud token exchange and caching

Your Firebase proxy handles two things: obtaining and caching the SoundCloud Bearer token, and acting as a pass-through that attaches the token to SoundCloud API requests made from FlutterFlow. Set your credentials as Firebase Secrets: firebase functions:secrets:set SOUNDCLOUD_CLIENT_ID and firebase functions:secrets:set SOUNDCLOUD_CLIENT_SECRET. The proxy function (see code) handles the OAuth client credentials token exchange at https://api.soundcloud.com/oauth2/token, caches the returned access_token (SoundCloud's tokens have a limited lifetime — check the expires_in value), and forwards GET requests from FlutterFlow to api.soundcloud.com with the Bearer token attached. For the caching layer: add a second Firebase scheduled Cloud Function (using onSchedule) that runs every 30 minutes, calls your most important SoundCloud endpoints (track listings, follower count, play stats for a specific user), and writes the results to Firestore. Your FlutterFlow app then reads from Firestore rather than calling SoundCloud directly for list displays. This protects against undocumented rate limits and makes your app load instantly from the Firestore cache. Only use the live proxy for real-time actions like streaming a specific track's stream URL. If building and maintaining this proxy is a concern, RapidDev's team builds FlutterFlow integrations with SoundCloud and similar APIs regularly — free scoping call at rapidevelopers.com/contact.

index.js
1// Firebase Cloud Function — SoundCloud proxy (Node.js)
2const { onRequest } = require('firebase-functions/v2/https');
3const { onSchedule } = require('firebase-functions/v2/scheduler');
4const { defineSecret } = require('firebase-functions/params');
5const fetch = require('node-fetch');
6const admin = require('firebase-admin');
7
8admin.initializeApp();
9const db = admin.firestore();
10
11const SC_CLIENT_ID = defineSecret('SOUNDCLOUD_CLIENT_ID');
12const SC_CLIENT_SECRET = defineSecret('SOUNDCLOUD_CLIENT_SECRET');
13const SC_USER_ID = '12345678'; // Your SoundCloud user ID — hardcode or make configurable
14
15async function getSoundCloudToken(clientId, clientSecret) {
16 // Check Firestore cache first
17 const tokenDoc = await db.collection('soundcloudCache').doc('token').get();
18 const cached = tokenDoc.data();
19 if (cached && cached.expiresAt > Date.now() + 60000) {
20 return cached.accessToken;
21 }
22 // Fetch new token
23 const res = await fetch('https://api.soundcloud.com/oauth2/token', {
24 method: 'POST',
25 headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
26 body: new URLSearchParams({
27 client_id: clientId,
28 client_secret: clientSecret,
29 grant_type: 'client_credentials',
30 }),
31 });
32 const data = await res.json();
33 await db.collection('soundcloudCache').doc('token').set({
34 accessToken: data.access_token,
35 expiresAt: Date.now() + (data.expires_in || 3600) * 1000,
36 });
37 return data.access_token;
38}
39
40// Live proxy endpoint — use for stream URLs, individual track details
41exports.soundcloudProxy = onRequest(
42 { secrets: [SC_CLIENT_ID, SC_CLIENT_SECRET] },
43 async (req, res) => {
44 res.set('Access-Control-Allow-Origin', '*');
45 if (req.method === 'OPTIONS') return res.status(204).send('');
46
47 const token = await getSoundCloudToken(
48 SC_CLIENT_ID.value(),
49 SC_CLIENT_SECRET.value()
50 );
51 const { endpoint } = req.body;
52 const scRes = await fetch(`https://api.soundcloud.com${endpoint}`, {
53 headers: { Authorization: `OAuth ${token}` },
54 });
55 const data = await scRes.json();
56 return res.status(scRes.status).json(data);
57 }
58);
59
60// Scheduled cache refresh — runs every 30 minutes
61exports.refreshSoundCloudCache = onSchedule(
62 { schedule: 'every 30 minutes', secrets: [SC_CLIENT_ID, SC_CLIENT_SECRET] },
63 async () => {
64 const token = await getSoundCloudToken(
65 SC_CLIENT_ID.value(),
66 SC_CLIENT_SECRET.value()
67 );
68 const headers = { Authorization: `OAuth ${token}` };
69
70 // Cache tracks
71 const tracksRes = await fetch(
72 `https://api.soundcloud.com/users/${SC_USER_ID}/tracks?limit=50`,
73 { headers }
74 );
75 const tracks = await tracksRes.json();
76 await db.collection('soundcloudCache').doc('tracks').set({ data: tracks, updatedAt: Date.now() });
77
78 // Cache user profile (followers, play counts)
79 const userRes = await fetch(
80 `https://api.soundcloud.com/users/${SC_USER_ID}`,
81 { headers }
82 );
83 const user = await userRes.json();
84 await db.collection('soundcloudCache').doc('profile').set({ data: user, updatedAt: Date.now() });
85 }
86);

Pro tip: The scheduled function uses onSchedule from Firebase Functions v2. Make sure your Firebase project has the Cloud Scheduler API enabled in Google Cloud Console — it's required for scheduled functions on the Blaze plan.

Expected result: The soundcloudProxy and refreshSoundCloudCache functions are deployed. The scheduled function runs every 30 minutes and populates the soundcloudCache Firestore collection with fresh track and profile data.

3

Set up Firestore data sources in FlutterFlow for cached track data

Rather than calling SoundCloud live from FlutterFlow for list displays, your app reads cached data from Firestore — which loads instantly and doesn't risk rate limits. In FlutterFlow, go to Settings & Integrations → Firebase and connect your Firebase project (add the GoogleService-Info.plist for iOS and google-services.json for Android via the Firebase panel). In Firestore, your data structure from the scheduled cache function is: soundcloudCache/tracks (document with a 'data' array of track objects) and soundcloudCache/profile (document with the user profile object). In FlutterFlow, create two Data Types: 'SCTrack' with fields id (Integer), title (String), artworkUrl (String), duration (Integer, milliseconds), playbackCount (Integer), streamUrl (String); and 'SCProfile' with fields username (String), followersCount (Integer), trackCount (Integer). On your track list screen, add a StreamBuilder-style query via FlutterFlow's Firestore Query — select the soundcloudCache collection, document tracks, and map the data array to the SCTrack Data Type using JSON paths. Add a ListView bound to the SCTrack list. For each item, show artwork (Network Image bound to artworkUrl), title, and play count. Add a refresh button that calls the soundcloudProxy API Call with endpoint /users/{userId}/tracks as a manual refresh option alongside the scheduled auto-refresh.

firestore_config.json
1{
2 "FlutterFlow Firestore Config": {
3 "Collection": "soundcloudCache",
4 "Documents": [
5 {
6 "ID": "tracks",
7 "Fields": {
8 "data": "Array of SCTrack objects",
9 "updatedAt": "Timestamp"
10 }
11 },
12 {
13 "ID": "profile",
14 "Fields": {
15 "data": "SCProfile object",
16 "updatedAt": "Timestamp"
17 }
18 }
19 ],
20 "SCTrack Data Type": {
21 "id": "Integer",
22 "title": "String",
23 "artworkUrl": "String (artwork_url)",
24 "playbackCount": "Integer (playback_count)",
25 "duration": "Integer (ms)",
26 "streamUrl": "String (stream_url)"
27 }
28 }
29}

Pro tip: SoundCloud's artwork_url field returns a 100x100 thumbnail by default. You can request a larger version by replacing '-large' with '-t500x500' in the URL string (e.g., i1.sndcdn.com/artworks-abc123-t500x500.jpg) — use a Custom Function to perform this string replacement before binding to the Image widget.

Expected result: Your FlutterFlow app reads track and profile data from Firestore and displays the cached SoundCloud data on the track list screen. The list loads instantly without waiting for a SoundCloud API call.

4

Configure FlutterFlow API Calls for live requests (stream URLs and fresh data)

While most data comes from the Firestore cache, some actions require live SoundCloud API calls — primarily fetching the stream URL for a specific track (which may be time-limited or user-specific) and any real-time lookups. Set these up as FlutterFlow API Calls targeting your Firebase proxy. In FlutterFlow, click API Calls in the left nav → + Add → Create API Group. Name it 'SoundCloudProxy' and set the Base URL to your Firebase Cloud Function URL (https://us-central1-your-project.cloudfunctions.net/soundcloudProxy). Add two API Calls: 1. 'Get Track Stream URL' — POST with JSON body containing endpoint '/tracks/{trackId}/streams' (or the relevant stream endpoint for your API access level). Parse the response for the http_mp3_128_url field (the public 128kbps MP3 stream URL). Map this to a String field in your SCTrack Data Type. 2. 'Get Track Detail' — POST with endpoint '/tracks/{trackId}'. Parse the full track response including waveform_url, description, and current play_count. Use this for the track detail screen where you want fresh play count data. In the Response & Test tab, paste sample SoundCloud JSON responses to auto-generate the JSON paths. SoundCloud stream URLs require the access token appended as a query parameter in some API access levels — your proxy should handle this by appending the token before returning the URL.

api_group_config.json
1{
2 "Group Name": "SoundCloudProxy",
3 "Base URL": "https://us-central1-your-project.cloudfunctions.net/soundcloudProxy",
4 "Calls": [
5 {
6 "Name": "Get Stream URL",
7 "Method": "POST",
8 "Body": {
9 "endpoint": "/tracks/[variable:trackId]/streams"
10 },
11 "JSON Paths": {
12 "streamUrl": "$.http_mp3_128_url"
13 }
14 },
15 {
16 "Name": "Get Track Detail",
17 "Method": "POST",
18 "Body": {
19 "endpoint": "/tracks/[variable:trackId]"
20 },
21 "JSON Paths": {
22 "title": "$.title",
23 "playbackCount": "$.playback_count",
24 "description": "$.description",
25 "duration": "$.duration"
26 }
27 }
28 ]
29}

Pro tip: SoundCloud stream URLs sometimes expire after a short time. Fetch the stream URL on demand (when the user taps play) rather than storing it in Firestore alongside the cached track data — a stored URL may be expired by the time the user taps it.

Expected result: The SoundCloudProxy API group has two calls. 'Get Stream URL' returns a valid MP3 stream URL when given a track ID. 'Get Track Detail' returns the current play count and full metadata for a specific track.

5

Add audio streaming via a just_audio Custom Action

With the stream URL fetched from the proxy, play the audio using a Custom Action built on the just_audio pub.dev package. In FlutterFlow, go to Custom Code → + Add → Action. Name it 'PlaySoundCloudTrack'. Add just_audio as a dependency in the Dependencies field. The action takes a String parameter streamUrl. It manages a singleton AudioPlayer instance to avoid creating multiple players when the user taps through multiple tracks. When called, the action stops any currently playing track, loads the new stream URL, and starts playback. Add a companion action 'StopSoundCloudTrack' that simply calls player.stop() for use on back navigation or when the user manually stops playback. On each track card's play button, wire the On Tap action flow: first call 'Get Stream URL' from the SoundCloudProxy API group passing the track's ID, then pass the returned streamUrl to 'PlaySoundCloudTrack'. Manage a Page State variable currentlyPlayingId to highlight the active track and show a pause icon. Note: Custom Actions require testing on a real device or in FlutterFlow's Run mode — they do not execute in the web-based Test Mode canvas. Add a kIsWeb guard in the Dart code if deploying to web as well as mobile, since audio streaming behavior differs between the Flutter web renderer and native mobile.

play_soundcloud_track.dart
1import 'package:just_audio/just_audio.dart';
2import 'package:flutter/foundation.dart' show kIsWeb;
3
4AudioPlayer? _scPlayer;
5
6Future<void> playSoundCloudTrack(String streamUrl) async {
7 if (streamUrl.isEmpty) return;
8
9 _scPlayer ??= AudioPlayer();
10
11 try {
12 await _scPlayer!.stop();
13 await _scPlayer!.setUrl(streamUrl);
14 await _scPlayer!.play();
15 } catch (e) {
16 debugPrint('SoundCloud playback error: $e');
17 }
18}
19
20Future<void> stopSoundCloudTrack() async {
21 await _scPlayer?.stop();
22}
23
24bool isPlaying() {
25 return _scPlayer?.playing ?? false;
26}

Pro tip: SoundCloud stream URLs may require the OAuth token as a query parameter (?oauth_token={token}) for your API access level. Have your Firebase proxy append the token to the stream URL before returning it to FlutterFlow, so the just_audio player receives a self-contained URL that doesn't need further auth.

Expected result: Tapping the play button on a track card calls the proxy for the stream URL, then starts audio playback. The currently playing track is highlighted in the list. Tapping a different track smoothly transitions playback.

Common use cases

Artist profile app showing tracks, followers, and play stats

A FlutterFlow app for an independent musician that displays their SoundCloud profile — top tracks, total followers, total play counts, and their latest uploads. Stats are cached in Firestore and refreshed every 30 minutes via a Firebase scheduled function, so the app loads instantly from cache rather than calling SoundCloud on every open.

FlutterFlow Prompt

Build a FlutterFlow artist profile app that shows my SoundCloud tracks with play counts and follower totals, updates stats every 30 minutes in the background, and lets fans press play on track previews.

Copy this prompt to try it in FlutterFlow

Podcast dashboard for a SoundCloud-hosted show

A FlutterFlow app for a podcaster hosting their episodes on SoundCloud. The app shows a track list of episodes with titles, artwork, descriptions, and duration. Episode data is cached in Firestore and updated when new episodes are uploaded. Listeners can stream episodes directly in the app via the SoundCloud stream URL.

FlutterFlow Prompt

Create a FlutterFlow podcast app that shows episodes from a SoundCloud account, including episode artwork, description, and a play button to stream each episode in-app.

Copy this prompt to try it in FlutterFlow

Music discovery feed for a record label's SoundCloud catalog

A FlutterFlow app for a record label that browses their SoundCloud tracks and playlists by genre tag. The app fetches public track listings for the label's SoundCloud user, caches them in Firestore, and lets users filter by genre to discover new music. Track cards show artwork and stream count.

FlutterFlow Prompt

Build a FlutterFlow music feed for a record label's SoundCloud account that organizes tracks by genre tag, shows play counts, and streams audio previews in the app.

Copy this prompt to try it in FlutterFlow

Troubleshooting

Cannot register a new SoundCloud developer app — registration page shows 'not accepting applications' or no response after submitting

Cause: SoundCloud has intermittently restricted new API developer app registration for years. This is a platform-level restriction, not a technical error on your end.

Solution: Check the SoundCloud developer forum and their GitHub (github.com/soundcloud/api) for the current status of API access. If registration is closed, your options are: (1) wait and check periodically, (2) use an existing set of credentials if your organization already has an approved app, or (3) consider an alternative audio platform (Spotify Web API, YouTube Audio) that has open API access. There is no workaround for closed developer registration.

SoundCloud API calls return HTTP 429 or start returning empty/truncated responses without a clear error

Cause: SoundCloud's rate limits are undocumented and enforced silently. Calling the API on every screen navigation or in a list that auto-refreshes can exhaust limits quickly, especially for analytics endpoints.

Solution: Switch to the scheduled caching pattern: use a Firebase Cloud Function on a 30-minute schedule to refresh your Firestore cache of tracks, follower counts, and play stats. Your FlutterFlow app reads from Firestore for all list displays. Only use the live proxy for on-demand actions like fetching a specific track's stream URL. If you're receiving 429, add a 15-minute delay before retrying.

Audio stream URL returns a 401 Unauthorized when just_audio tries to play it

Cause: SoundCloud stream URLs for some API access levels require the OAuth access token appended as a query parameter (?oauth_token=...). The URL alone without authentication is rejected.

Solution: Update your Firebase proxy's 'Get Stream URL' endpoint to append the current access token to the returned URL before sending it to FlutterFlow: const streamUrl = `${data.http_mp3_128_url}?oauth_token=${token}`. The FlutterFlow app then passes this self-contained authenticated URL directly to just_audio without needing any additional auth headers.

typescript
1// In Firebase proxy — append token to stream URL
2const streamUrl = `${data.http_mp3_128_url}?oauth_token=${token}`;
3return res.json({ streamUrl });

just_audio Custom Action plays audio on device but fails silently in FlutterFlow's Test Mode

Cause: Custom Actions that use native Flutter packages (like just_audio) do not execute in FlutterFlow's in-browser Test Mode — they only run on real devices, emulators, or in Run mode.

Solution: Use FlutterFlow's Run mode (deploy to a connected device or emulator) to test audio playback. In Test Mode, you can still verify that the API Call returns a stream URL correctly — just not the actual audio playback. For web builds, ensure just_audio_web is also listed as a dependency alongside just_audio.

Best practices

  • Verify you can actually obtain SoundCloud API credentials before starting any FlutterFlow development — API registration has been intermittently closed and is the most common blocker.
  • Never place the SoundCloud client_secret or access token in FlutterFlow API Call headers — proxy all SoundCloud API communication through Firebase Cloud Functions.
  • Cache all list data (tracks, follower counts, play stats) in Firestore on a scheduled basis (every 15-60 minutes) rather than calling SoundCloud on every screen open — rate limits are undocumented and enforcement is unpredictable.
  • Fetch stream URLs on demand (when the user taps play) rather than storing them in Firestore — SoundCloud stream URLs may expire or require fresh tokens.
  • Use a singleton AudioPlayer in your just_audio Custom Action to prevent multiple simultaneous audio streams when a user quickly taps between tracks.
  • Display the Firestore cache's updatedAt timestamp in the UI so users can see when stats were last refreshed — and offer a manual refresh button for immediate updates.
  • Add graceful error states for 429 responses from the proxy — show a 'Too many requests, please try again in a few minutes' message rather than silently failing.
  • Test audio playback on a real device or in FlutterFlow Run mode — just_audio Custom Actions do not execute in the in-browser Test Mode preview.

Alternatives

Frequently asked questions

Is the SoundCloud API free to use?

Yes — where API access is granted, the SoundCloud API is free. There are no per-request charges. However, the rate limits are not publicly documented, and exceeding them can result in throttling or temporary blocks. The bigger constraint is access itself: SoundCloud has periodically restricted new developer app registrations, so 'free' is conditional on being able to get approved credentials in the first place.

Can I stream full SoundCloud tracks in a FlutterFlow app, or are there restrictions?

This depends on your API access level and the tracks' licensing. SoundCloud's API provides stream URLs for public tracks that have streaming enabled by the artist. The just_audio Custom Action can play these directly. However, some tracks have streaming restricted, monetized tracks may have different rights, and SoundCloud's terms of service govern how streams can be used in third-party apps — review the API Terms of Service before using streams in a production app with a large audience.

Why does my SoundCloud integration stop working after a few hours?

SoundCloud OAuth access tokens have a limited lifespan (the exact duration is in the expires_in field of the token response). Your Firebase proxy needs to track the token expiry and fetch a new one using the client credentials grant before the current token expires. Store the token and expiry timestamp in Firestore so it survives Firebase Function cold starts. If you're using authorization code flow (user auth), refresh tokens must also be managed for long-lived sessions.

Can FlutterFlow users connect their own SoundCloud accounts to my app?

Yes, using SoundCloud's authorization code OAuth flow. The user would authorize your app through a WebView or external browser (opened via a url_launcher Custom Action), granting access to their profile, tracks, and playlists. Your Firebase proxy handles the token exchange and stores the user-specific access and refresh tokens in Firestore. This is more complex than the client credentials flow but enables personalized features like 'My Tracks' and listening history.

How do I find a SoundCloud user's ID to use in API calls?

SoundCloud user IDs are numeric (e.g., 12345678). The easiest way to find an ID is to call /resolve?url=https://soundcloud.com/{username} through your proxy — this endpoint returns the full user object including the numeric id field. Alternatively, if you have API access, you can search by username via /users?q={username}. The numeric ID is more stable than the permalink (username) which users can change.

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 FlutterFlow 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.