curl --request POST \
--url https://api.deck.co/v2/sources \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"type": "<string>",
"website": {
"url": "<string>"
},
"name": "<string>",
"headers": {
"values": {},
"tokenized": [
"<string>"
]
}
}
'import requests
url = "https://api.deck.co/v2/sources"
payload = {
"type": "<string>",
"website": { "url": "<string>" },
"name": "<string>",
"headers": {
"values": {},
"tokenized": ["<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({
type: '<string>',
website: {url: '<string>'},
name: '<string>',
headers: {values: {}, tokenized: ['<string>']}
})
};
fetch('https://api.deck.co/v2/sources', 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.deck.co/v2/sources",
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([
'type' => '<string>',
'website' => [
'url' => '<string>'
],
'name' => '<string>',
'headers' => [
'values' => [
],
'tokenized' => [
'<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.deck.co/v2/sources"
payload := strings.NewReader("{\n \"type\": \"<string>\",\n \"website\": {\n \"url\": \"<string>\"\n },\n \"name\": \"<string>\",\n \"headers\": {\n \"values\": {},\n \"tokenized\": [\n \"<string>\"\n ]\n }\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.deck.co/v2/sources")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"type\": \"<string>\",\n \"website\": {\n \"url\": \"<string>\"\n },\n \"name\": \"<string>\",\n \"headers\": {\n \"values\": {},\n \"tokenized\": [\n \"<string>\"\n ]\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.deck.co/v2/sources")
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 \"type\": \"<string>\",\n \"website\": {\n \"url\": \"<string>\"\n },\n \"name\": \"<string>\",\n \"headers\": {\n \"values\": {},\n \"tokenized\": [\n \"<string>\"\n ]\n }\n}"
response = http.request(request)
puts response.read_body{
"id": "src_AbC123xYz456",
"object": "<string>",
"name": "<string>",
"type": "<string>",
"website": {
"url": "<string>"
},
"created_at": "2026-08-24T12:00:00Z",
"updated_at": "2026-08-24T12:00:00Z",
"request_id": "<string>",
"headers": {
"values": {},
"tokenized": [
"<string>"
]
}
}{
"id": "src_AbC123xYz456",
"object": "<string>",
"name": "<string>",
"type": "<string>",
"website": {
"url": "<string>"
},
"created_at": "2026-08-24T12:00:00Z",
"updated_at": "2026-08-24T12:00:00Z",
"request_id": "<string>",
"headers": {
"values": {},
"tokenized": [
"<string>"
]
}
}{
"errors": {},
"type": "<string>",
"title": "<string>",
"status": 123,
"traceId": "<string>"
}{
"errors": [
{
"type": "<string>",
"code": "<string>",
"message": "<string>",
"field": "<string>"
}
],
"request_id": "<string>"
}{
"errors": [
{
"type": "<string>",
"code": "<string>",
"message": "<string>",
"field": "<string>"
}
],
"request_id": "<string>"
}{
"errors": [
{
"type": "<string>",
"code": "<string>",
"message": "<string>",
"field": "<string>"
}
],
"request_id": "<string>"
}{
"errors": [
{
"type": "<string>",
"code": "<string>",
"message": "<string>",
"field": "<string>"
}
],
"request_id": "<string>"
}{
"errors": [
{
"type": "<string>",
"code": "<string>",
"message": "<string>",
"field": "<string>"
}
],
"request_id": "<string>"
}Create a source
Registers a new source. A source is a website or service that your agents connect to.
curl --request POST \
--url https://api.deck.co/v2/sources \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"type": "<string>",
"website": {
"url": "<string>"
},
"name": "<string>",
"headers": {
"values": {},
"tokenized": [
"<string>"
]
}
}
'import requests
url = "https://api.deck.co/v2/sources"
payload = {
"type": "<string>",
"website": { "url": "<string>" },
"name": "<string>",
"headers": {
"values": {},
"tokenized": ["<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({
type: '<string>',
website: {url: '<string>'},
name: '<string>',
headers: {values: {}, tokenized: ['<string>']}
})
};
fetch('https://api.deck.co/v2/sources', 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.deck.co/v2/sources",
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([
'type' => '<string>',
'website' => [
'url' => '<string>'
],
'name' => '<string>',
'headers' => [
'values' => [
],
'tokenized' => [
'<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.deck.co/v2/sources"
payload := strings.NewReader("{\n \"type\": \"<string>\",\n \"website\": {\n \"url\": \"<string>\"\n },\n \"name\": \"<string>\",\n \"headers\": {\n \"values\": {},\n \"tokenized\": [\n \"<string>\"\n ]\n }\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.deck.co/v2/sources")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"type\": \"<string>\",\n \"website\": {\n \"url\": \"<string>\"\n },\n \"name\": \"<string>\",\n \"headers\": {\n \"values\": {},\n \"tokenized\": [\n \"<string>\"\n ]\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.deck.co/v2/sources")
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 \"type\": \"<string>\",\n \"website\": {\n \"url\": \"<string>\"\n },\n \"name\": \"<string>\",\n \"headers\": {\n \"values\": {},\n \"tokenized\": [\n \"<string>\"\n ]\n }\n}"
response = http.request(request)
puts response.read_body{
"id": "src_AbC123xYz456",
"object": "<string>",
"name": "<string>",
"type": "<string>",
"website": {
"url": "<string>"
},
"created_at": "2026-08-24T12:00:00Z",
"updated_at": "2026-08-24T12:00:00Z",
"request_id": "<string>",
"headers": {
"values": {},
"tokenized": [
"<string>"
]
}
}{
"id": "src_AbC123xYz456",
"object": "<string>",
"name": "<string>",
"type": "<string>",
"website": {
"url": "<string>"
},
"created_at": "2026-08-24T12:00:00Z",
"updated_at": "2026-08-24T12:00:00Z",
"request_id": "<string>",
"headers": {
"values": {},
"tokenized": [
"<string>"
]
}
}{
"errors": {},
"type": "<string>",
"title": "<string>",
"status": 123,
"traceId": "<string>"
}{
"errors": [
{
"type": "<string>",
"code": "<string>",
"message": "<string>",
"field": "<string>"
}
],
"request_id": "<string>"
}{
"errors": [
{
"type": "<string>",
"code": "<string>",
"message": "<string>",
"field": "<string>"
}
],
"request_id": "<string>"
}{
"errors": [
{
"type": "<string>",
"code": "<string>",
"message": "<string>",
"field": "<string>"
}
],
"request_id": "<string>"
}{
"errors": [
{
"type": "<string>",
"code": "<string>",
"message": "<string>",
"field": "<string>"
}
],
"request_id": "<string>"
}{
"errors": [
{
"type": "<string>",
"code": "<string>",
"message": "<string>",
"field": "<string>"
}
],
"request_id": "<string>"
}Authorizations
Secret key (sk_live_...)
Headers
Optional key that makes the request idempotent. Retrying with the same key returns the original response instead of repeating the operation; keys expire after 24 hours. Any string up to 256 characters. See Idempotency.
256"550e8400-e29b-41d4-a716-446655440000"
Body
Request body for creating a new source.
The source type. website is currently the only supported type; it defaults to website if omitted.
Website configuration for the source.
Show child attributes
Show child attributes
Display name for the source.
Optional custom headers Deck attaches to every request to the source's host, such as an access gateway's service token. Available on Enterprise plans as an add-on; returns feature_not_available until enabled for your organization.
Show child attributes
Show child attributes
Response
An existing source with the same URL was returned. Sources are deduplicated by their normalized URL, so creating a source that already exists returns the existing source with 200 instead of 201.
A source object. Sources are websites or services that agents connect to.
Unique identifier for the source, prefixed with src_.
^src_"src_AbC123xYz456"
Always source.
Display name for the source.
The source type. website is currently the only supported type; it defaults to website if omitted.
Website configuration for the source.
Show child attributes
Show child attributes
ISO 8601 timestamp of when the resource was created.
"2026-08-24T12:00:00Z"
ISO 8601 timestamp of when the resource was last updated.
"2026-08-24T12:00:00Z"
Unique identifier for the API request. Include this when contacting support.
Request headers configured on the source. Omitted when none are set.
Show child attributes
Show child attributes
Was this page helpful?