Create a new auth link session
curl --request POST \
--url https://flowra.dev/api/v1/connected_accounts/link \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"authConfigId": "auth_config_123",
"callbackUrl": "https://myapp.com/callback",
"browserSessionId": "550e8400-e29b-41d4-a716-446655440000",
"connectionData": "<unknown>"
}
'import requests
url = "https://flowra.dev/api/v1/connected_accounts/link"
payload = {
"authConfigId": "auth_config_123",
"callbackUrl": "https://myapp.com/callback",
"browserSessionId": "550e8400-e29b-41d4-a716-446655440000",
"connectionData": "<unknown>"
}
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
authConfigId: 'auth_config_123',
callbackUrl: 'https://myapp.com/callback',
browserSessionId: '550e8400-e29b-41d4-a716-446655440000',
connectionData: '<unknown>'
})
};
fetch('https://flowra.dev/api/v1/connected_accounts/link', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://flowra.dev/api/v1/connected_accounts/link",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'authConfigId' => 'auth_config_123',
'callbackUrl' => 'https://myapp.com/callback',
'browserSessionId' => '550e8400-e29b-41d4-a716-446655440000',
'connectionData' => '<unknown>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://flowra.dev/api/v1/connected_accounts/link"
payload := strings.NewReader("{\n \"authConfigId\": \"auth_config_123\",\n \"callbackUrl\": \"https://myapp.com/callback\",\n \"browserSessionId\": \"550e8400-e29b-41d4-a716-446655440000\",\n \"connectionData\": \"<unknown>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://flowra.dev/api/v1/connected_accounts/link")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"authConfigId\": \"auth_config_123\",\n \"callbackUrl\": \"https://myapp.com/callback\",\n \"browserSessionId\": \"550e8400-e29b-41d4-a716-446655440000\",\n \"connectionData\": \"<unknown>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://flowra.dev/api/v1/connected_accounts/link")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"authConfigId\": \"auth_config_123\",\n \"callbackUrl\": \"https://myapp.com/callback\",\n \"browserSessionId\": \"550e8400-e29b-41d4-a716-446655440000\",\n \"connectionData\": \"<unknown>\"\n}"
response = http.request(request)
puts response.read_body{
"redirectUrl": "https://auth.composio.dev/oauth/authorize?client_id=123&redirectUri=https://myapp.com/callback",
"linkToken": "link_token_123456789",
"expiresAt": "2024-12-31T23:59:59Z",
"connectedAccountId": "con_123456789",
"browserSessionId": "550e8400-e29b-41d4-a716-446655440000"
}Connected Accounts
Create a new auth link session
Generates a one-time URL to start the OAuth flow. Send your end users to this URL so they can sign in with the provider (e.g. Google, Slack) and connect their account to your project. After they complete the flow, the account appears in the connected accounts list.
POST
/
api
/
v1
/
connected_accounts
/
link
Create a new auth link session
curl --request POST \
--url https://flowra.dev/api/v1/connected_accounts/link \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"authConfigId": "auth_config_123",
"callbackUrl": "https://myapp.com/callback",
"browserSessionId": "550e8400-e29b-41d4-a716-446655440000",
"connectionData": "<unknown>"
}
'import requests
url = "https://flowra.dev/api/v1/connected_accounts/link"
payload = {
"authConfigId": "auth_config_123",
"callbackUrl": "https://myapp.com/callback",
"browserSessionId": "550e8400-e29b-41d4-a716-446655440000",
"connectionData": "<unknown>"
}
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
authConfigId: 'auth_config_123',
callbackUrl: 'https://myapp.com/callback',
browserSessionId: '550e8400-e29b-41d4-a716-446655440000',
connectionData: '<unknown>'
})
};
fetch('https://flowra.dev/api/v1/connected_accounts/link', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://flowra.dev/api/v1/connected_accounts/link",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'authConfigId' => 'auth_config_123',
'callbackUrl' => 'https://myapp.com/callback',
'browserSessionId' => '550e8400-e29b-41d4-a716-446655440000',
'connectionData' => '<unknown>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://flowra.dev/api/v1/connected_accounts/link"
payload := strings.NewReader("{\n \"authConfigId\": \"auth_config_123\",\n \"callbackUrl\": \"https://myapp.com/callback\",\n \"browserSessionId\": \"550e8400-e29b-41d4-a716-446655440000\",\n \"connectionData\": \"<unknown>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://flowra.dev/api/v1/connected_accounts/link")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"authConfigId\": \"auth_config_123\",\n \"callbackUrl\": \"https://myapp.com/callback\",\n \"browserSessionId\": \"550e8400-e29b-41d4-a716-446655440000\",\n \"connectionData\": \"<unknown>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://flowra.dev/api/v1/connected_accounts/link")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"authConfigId\": \"auth_config_123\",\n \"callbackUrl\": \"https://myapp.com/callback\",\n \"browserSessionId\": \"550e8400-e29b-41d4-a716-446655440000\",\n \"connectionData\": \"<unknown>\"\n}"
response = http.request(request)
puts response.read_body{
"redirectUrl": "https://auth.composio.dev/oauth/authorize?client_id=123&redirectUri=https://myapp.com/callback",
"linkToken": "link_token_123456789",
"expiresAt": "2024-12-31T23:59:59Z",
"connectedAccountId": "con_123456789",
"browserSessionId": "550e8400-e29b-41d4-a716-446655440000"
}Authorizations
x-api-keyx-api-key & x-username
Project API key. Create and manage keys in the dashboard under Project → API Keys. Send as header: x-api-key:
Headers
External user (end user) to act as. Optional — if omitted, Flowra uses the project’s default external user. Send a stable username (e.g. customer_alice) only when you need another end-user context.
Body
application/json
Connected account link creation data
Show child attributes
Show child attributes
Response
201 - application/json
Successfully created auth link
Show child attributes
Show child attributes
Was this page helpful?
⌘I