Create a group-level connection
Creates an integration connection for the credential’s property group (one per provider; idempotent per (group, provider)). Holds auth metadata only — never canonical guest data. Requires scope write:integrations.
curl --request POST \
--url https://api.casa-layer.com/v1/connections \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"provider": "<string>",
"name": "<string>",
"auth_type": "<string>",
"description": "<string>",
"logo_url": "<string>"
}
'import requests
url = "https://api.casa-layer.com/v1/connections"
payload = {
"provider": "<string>",
"name": "<string>",
"auth_type": "<string>",
"description": "<string>",
"logo_url": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
provider: '<string>',
name: '<string>',
auth_type: '<string>',
description: '<string>',
logo_url: '<string>'
})
};
fetch('https://api.casa-layer.com/v1/connections', 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://api.casa-layer.com/v1/connections",
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([
'provider' => '<string>',
'name' => '<string>',
'auth_type' => '<string>',
'description' => '<string>',
'logo_url' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$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://api.casa-layer.com/v1/connections"
payload := strings.NewReader("{\n \"provider\": \"<string>\",\n \"name\": \"<string>\",\n \"auth_type\": \"<string>\",\n \"description\": \"<string>\",\n \"logo_url\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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://api.casa-layer.com/v1/connections")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"provider\": \"<string>\",\n \"name\": \"<string>\",\n \"auth_type\": \"<string>\",\n \"description\": \"<string>\",\n \"logo_url\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.casa-layer.com/v1/connections")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"provider\": \"<string>\",\n \"name\": \"<string>\",\n \"auth_type\": \"<string>\",\n \"description\": \"<string>\",\n \"logo_url\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"data": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"property_group_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"provider": "<string>",
"name": "<string>",
"auth_type": "<string>",
"status": "<string>",
"connection_metadata": {},
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"description": "<string>",
"logo_url": "<string>"
}
}{
"error": "unauthorized"
}{
"error": "forbidden",
"scope": "read:guests"
}Authorizations
Authorization: Bearer <token>. Token types resolve to the same scoped credential: a user-generated API key (casa_…, from Account settings — recommended for machines and MCP clients), a WorkOS AuthKit session JWT (the web app; org and role come from verified token claims), or a static token. API keys are group-scoped, optionally pinned to one property at creation. MCP OAuth connector tokens authenticate the MCP server only and are rejected on these REST routes.
Body
Response
Created (or refreshed, when the provider already had a connection).
A group-level integration connection (one per provider). Stored provider secrets are redacted; connection_metadata.has_credentials indicates whether credentials are stored.
Show child attributes
Show child attributes
curl --request POST \
--url https://api.casa-layer.com/v1/connections \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"provider": "<string>",
"name": "<string>",
"auth_type": "<string>",
"description": "<string>",
"logo_url": "<string>"
}
'import requests
url = "https://api.casa-layer.com/v1/connections"
payload = {
"provider": "<string>",
"name": "<string>",
"auth_type": "<string>",
"description": "<string>",
"logo_url": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
provider: '<string>',
name: '<string>',
auth_type: '<string>',
description: '<string>',
logo_url: '<string>'
})
};
fetch('https://api.casa-layer.com/v1/connections', 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://api.casa-layer.com/v1/connections",
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([
'provider' => '<string>',
'name' => '<string>',
'auth_type' => '<string>',
'description' => '<string>',
'logo_url' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$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://api.casa-layer.com/v1/connections"
payload := strings.NewReader("{\n \"provider\": \"<string>\",\n \"name\": \"<string>\",\n \"auth_type\": \"<string>\",\n \"description\": \"<string>\",\n \"logo_url\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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://api.casa-layer.com/v1/connections")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"provider\": \"<string>\",\n \"name\": \"<string>\",\n \"auth_type\": \"<string>\",\n \"description\": \"<string>\",\n \"logo_url\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.casa-layer.com/v1/connections")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"provider\": \"<string>\",\n \"name\": \"<string>\",\n \"auth_type\": \"<string>\",\n \"description\": \"<string>\",\n \"logo_url\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"data": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"property_group_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"provider": "<string>",
"name": "<string>",
"auth_type": "<string>",
"status": "<string>",
"connection_metadata": {},
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"description": "<string>",
"logo_url": "<string>"
}
}{
"error": "unauthorized"
}{
"error": "forbidden",
"scope": "read:guests"
}