Grant a credential to an installed agent
Requires integrations:write. Creating credentials outside this dedicated mint stays human-only by design; the partner flow is admin-connects-once, key-attaches.
curl --request POST \
--url https://api.guild.ai/v1/workspace_agents/{workspace_agent_id}/credential-associations \
--header 'Authorization: Basic <encoded-value>' \
--header 'Content-Type: application/json' \
--data '
{
"auth_config_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"credentials_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"replace": false
}
'import requests
url = "https://api.guild.ai/v1/workspace_agents/{workspace_agent_id}/credential-associations"
payload = {
"auth_config_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"credentials_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"replace": False
}
headers = {
"Authorization": "Basic <encoded-value>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Basic <encoded-value>', 'Content-Type': 'application/json'},
body: JSON.stringify({
auth_config_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
credentials_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
replace: false
})
};
fetch('https://api.guild.ai/v1/workspace_agents/{workspace_agent_id}/credential-associations', 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.guild.ai/v1/workspace_agents/{workspace_agent_id}/credential-associations",
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([
'auth_config_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'credentials_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'replace' => false
]),
CURLOPT_HTTPHEADER => [
"Authorization: Basic <encoded-value>",
"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.guild.ai/v1/workspace_agents/{workspace_agent_id}/credential-associations"
payload := strings.NewReader("{\n \"auth_config_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"credentials_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"replace\": false\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Basic <encoded-value>")
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.guild.ai/v1/workspace_agents/{workspace_agent_id}/credential-associations")
.header("Authorization", "Basic <encoded-value>")
.header("Content-Type", "application/json")
.body("{\n \"auth_config_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"credentials_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"replace\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.guild.ai/v1/workspace_agents/{workspace_agent_id}/credential-associations")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Basic <encoded-value>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"auth_config_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"credentials_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"replace\": false\n}"
response = http.request(request)
puts response.read_body{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"auth_config_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"created_by_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"target_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"kind": "CONNECTED",
"credentials_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"integration": "<unknown>",
"member_owned": "<unknown>",
"owner": "<unknown>",
"runs_as": "<unknown>",
"workspace": "<unknown>",
"workspace_agent_id": "<unknown>"
}{
"error": "<string>",
"message": "<string>"
}{
"error": "<string>",
"message": "<string>"
}{
"error": "<string>",
"message": "<string>"
}Authorizations
API key: key id as the username, secret as the password. An account API key carries the same scopes as an OAuth token and is checked against the scopes listed under oauth2 on each operation. A trigger API key is limited to its trigger's workspace and reaches only the session operations that list this scheme alongside the oauth2 scopes.
Path Parameters
Body
Response
Successful response
Integration auth config this row applies to
The user or API key that granted this credential to the agent.
Workspace agent install receiving the credential; the association is scoped to this install's workspace. Account-wide availability is plain credential ownership with no association row.
GRANTED = existing credential shared with the agent; CONNECTED = credential created for the agent (connect flow).
CONNECTED, GRANTED Linked credential row; null while OAuth connect is pending.
curl --request POST \
--url https://api.guild.ai/v1/workspace_agents/{workspace_agent_id}/credential-associations \
--header 'Authorization: Basic <encoded-value>' \
--header 'Content-Type: application/json' \
--data '
{
"auth_config_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"credentials_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"replace": false
}
'import requests
url = "https://api.guild.ai/v1/workspace_agents/{workspace_agent_id}/credential-associations"
payload = {
"auth_config_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"credentials_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"replace": False
}
headers = {
"Authorization": "Basic <encoded-value>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Basic <encoded-value>', 'Content-Type': 'application/json'},
body: JSON.stringify({
auth_config_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
credentials_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
replace: false
})
};
fetch('https://api.guild.ai/v1/workspace_agents/{workspace_agent_id}/credential-associations', 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.guild.ai/v1/workspace_agents/{workspace_agent_id}/credential-associations",
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([
'auth_config_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'credentials_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'replace' => false
]),
CURLOPT_HTTPHEADER => [
"Authorization: Basic <encoded-value>",
"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.guild.ai/v1/workspace_agents/{workspace_agent_id}/credential-associations"
payload := strings.NewReader("{\n \"auth_config_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"credentials_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"replace\": false\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Basic <encoded-value>")
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.guild.ai/v1/workspace_agents/{workspace_agent_id}/credential-associations")
.header("Authorization", "Basic <encoded-value>")
.header("Content-Type", "application/json")
.body("{\n \"auth_config_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"credentials_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"replace\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.guild.ai/v1/workspace_agents/{workspace_agent_id}/credential-associations")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Basic <encoded-value>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"auth_config_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"credentials_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"replace\": false\n}"
response = http.request(request)
puts response.read_body{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"auth_config_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"created_by_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"target_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"kind": "CONNECTED",
"credentials_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"integration": "<unknown>",
"member_owned": "<unknown>",
"owner": "<unknown>",
"runs_as": "<unknown>",
"workspace": "<unknown>",
"workspace_agent_id": "<unknown>"
}{
"error": "<string>",
"message": "<string>"
}{
"error": "<string>",
"message": "<string>"
}{
"error": "<string>",
"message": "<string>"
}