curl --request POST \
--url https://api.getdialed.ai/v1/credentials \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"auth_method": "basic_auth",
"credentials": {
"password": "REPLACE_ME",
"username": "api_user@example"
},
"name": "Five9 Production",
"platform_id": "five9",
"status": "active"
}
'import requests
url = "https://api.getdialed.ai/v1/credentials"
payload = {
"auth_method": "basic_auth",
"credentials": {
"password": "REPLACE_ME",
"username": "api_user@example"
},
"name": "Five9 Production",
"platform_id": "five9",
"status": "active"
}
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({
auth_method: 'basic_auth',
credentials: {password: 'REPLACE_ME', username: 'api_user@example'},
name: 'Five9 Production',
platform_id: 'five9',
status: 'active'
})
};
fetch('https://api.getdialed.ai/v1/credentials', 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.getdialed.ai/v1/credentials",
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_method' => 'basic_auth',
'credentials' => [
'password' => 'REPLACE_ME',
'username' => 'api_user@example'
],
'name' => 'Five9 Production',
'platform_id' => 'five9',
'status' => 'active'
]),
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://api.getdialed.ai/v1/credentials"
payload := strings.NewReader("{\n \"auth_method\": \"basic_auth\",\n \"credentials\": {\n \"password\": \"REPLACE_ME\",\n \"username\": \"api_user@example\"\n },\n \"name\": \"Five9 Production\",\n \"platform_id\": \"five9\",\n \"status\": \"active\"\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://api.getdialed.ai/v1/credentials")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"auth_method\": \"basic_auth\",\n \"credentials\": {\n \"password\": \"REPLACE_ME\",\n \"username\": \"api_user@example\"\n },\n \"name\": \"Five9 Production\",\n \"platform_id\": \"five9\",\n \"status\": \"active\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.getdialed.ai/v1/credentials")
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 \"auth_method\": \"basic_auth\",\n \"credentials\": {\n \"password\": \"REPLACE_ME\",\n \"username\": \"api_user@example\"\n },\n \"name\": \"Five9 Production\",\n \"platform_id\": \"five9\",\n \"status\": \"active\"\n}"
response = http.request(request)
puts response.read_body{
"auth_method": "basic_auth",
"created_at": "2026-08-01T12:00:00Z",
"created_by": "user_11223344",
"credentials_ref": "getdialed/acme/five9/cred_e5f6g7h8",
"id": "cred_e5f6g7h8",
"last_verified": "2026-08-22T09:00:00Z",
"name": "Five9 Production",
"org_id": "org_a1b2c3d4",
"platform_id": "five9",
"scopes": [],
"status": "active",
"telemetry": {
"five9__configuration_service": {
"last_stamped_at": "2026-08-22T09:00:00Z",
"last_succeeded_at": "2026-08-22T09:00:00Z",
"last_used_at": "2026-08-22T09:00:00Z"
}
},
"tenancy_id": "ten_1a2b3c4d5e6f7890",
"tenant": {
"id": "ten_1a2b3c4d5e6f7890",
"is_manual": false,
"label": "Acme VCC",
"platform_id": "five9"
}
}{
"detail": "The platform rejected these credentials, so the account they belong to could not be identified. Check the credentials and try again."
}{
"detail": "Authentication required"
}{
"detail": "Admin role required"
}{
"detail": "These credentials are already stored for this account under the same provider account. Use the existing credential, or supply a different set."
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}{
"detail": "Rate limit exceeded: 100 per 1 minute"
}Create a credential
Store one set of per-organization credentials. Admin only.
Supply the platform, the authentication method and the secret material — nothing else. When the platform can identify the account those credentials belong to, this call discovers it, verifies the credentials in the process, and files the credential under that account: you never look up or type a provider account id. When the platform has no such concept, or the credential is not tied to a vendor at all, supply tenant_name and the credential is filed under a name you choose.
A create therefore fails before anything is stored: 400 when the credentials could not be verified, and 409 when that provider account belongs to another GetDialed account or these credentials are already stored here.
curl --request POST \
--url https://api.getdialed.ai/v1/credentials \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"auth_method": "basic_auth",
"credentials": {
"password": "REPLACE_ME",
"username": "api_user@example"
},
"name": "Five9 Production",
"platform_id": "five9",
"status": "active"
}
'import requests
url = "https://api.getdialed.ai/v1/credentials"
payload = {
"auth_method": "basic_auth",
"credentials": {
"password": "REPLACE_ME",
"username": "api_user@example"
},
"name": "Five9 Production",
"platform_id": "five9",
"status": "active"
}
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({
auth_method: 'basic_auth',
credentials: {password: 'REPLACE_ME', username: 'api_user@example'},
name: 'Five9 Production',
platform_id: 'five9',
status: 'active'
})
};
fetch('https://api.getdialed.ai/v1/credentials', 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.getdialed.ai/v1/credentials",
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_method' => 'basic_auth',
'credentials' => [
'password' => 'REPLACE_ME',
'username' => 'api_user@example'
],
'name' => 'Five9 Production',
'platform_id' => 'five9',
'status' => 'active'
]),
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://api.getdialed.ai/v1/credentials"
payload := strings.NewReader("{\n \"auth_method\": \"basic_auth\",\n \"credentials\": {\n \"password\": \"REPLACE_ME\",\n \"username\": \"api_user@example\"\n },\n \"name\": \"Five9 Production\",\n \"platform_id\": \"five9\",\n \"status\": \"active\"\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://api.getdialed.ai/v1/credentials")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"auth_method\": \"basic_auth\",\n \"credentials\": {\n \"password\": \"REPLACE_ME\",\n \"username\": \"api_user@example\"\n },\n \"name\": \"Five9 Production\",\n \"platform_id\": \"five9\",\n \"status\": \"active\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.getdialed.ai/v1/credentials")
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 \"auth_method\": \"basic_auth\",\n \"credentials\": {\n \"password\": \"REPLACE_ME\",\n \"username\": \"api_user@example\"\n },\n \"name\": \"Five9 Production\",\n \"platform_id\": \"five9\",\n \"status\": \"active\"\n}"
response = http.request(request)
puts response.read_body{
"auth_method": "basic_auth",
"created_at": "2026-08-01T12:00:00Z",
"created_by": "user_11223344",
"credentials_ref": "getdialed/acme/five9/cred_e5f6g7h8",
"id": "cred_e5f6g7h8",
"last_verified": "2026-08-22T09:00:00Z",
"name": "Five9 Production",
"org_id": "org_a1b2c3d4",
"platform_id": "five9",
"scopes": [],
"status": "active",
"telemetry": {
"five9__configuration_service": {
"last_stamped_at": "2026-08-22T09:00:00Z",
"last_succeeded_at": "2026-08-22T09:00:00Z",
"last_used_at": "2026-08-22T09:00:00Z"
}
},
"tenancy_id": "ten_1a2b3c4d5e6f7890",
"tenant": {
"id": "ten_1a2b3c4d5e6f7890",
"is_manual": false,
"label": "Acme VCC",
"platform_id": "five9"
}
}{
"detail": "The platform rejected these credentials, so the account they belong to could not be identified. Check the credentials and try again."
}{
"detail": "Authentication required"
}{
"detail": "Admin role required"
}{
"detail": "These credentials are already stored for this account under the same provider account. Use the existing credential, or supply a different set."
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}{
"detail": "Rate limit exceeded: 100 per 1 minute"
}Authorizations
Body
basic_auth, api_key, jwt, oauth2, aws_access_key Where an API-key credential puts its key.
This is presentation configuration, not secret material: it holds the header
NAME (and optionally a scheme such as Bearer prefixed to the value), or the
query-parameter NAME. A form renders straight from it.
It is declared ONCE, on the credential, so every task that selects this
credential injects the key identically and no task configuration ever
mentions authentication. Exactly one of header_name or query_param is
set; scheme is legal only alongside header_name.
Show child attributes
Show child attributes
active, expired, revoked Response
Successful Response
The provider account or customer-named tenant this credential belongs to.
Show child attributes
Show child attributes
{
"id": "ten_1a2b3c4d5e6f7890",
"is_manual": false,
"label": "Acme VCC",
"platform_id": "five9"
}
Where an API-key credential puts its key.
This is presentation configuration, not secret material: it holds the header
NAME (and optionally a scheme such as Bearer prefixed to the value), or the
query-parameter NAME. A form renders straight from it.
It is declared ONCE, on the credential, so every task that selects this
credential injects the key identically and no task configuration ever
mentions authentication. Exactly one of header_name or query_param is
set; scheme is legal only alongside header_name.
Show child attributes
Show child attributes
Show child attributes
Show child attributes