curl --request POST \
--url https://odyssey.asteroid.ai/agents/v2/secret-templates \
--header 'Content-Type: application/json' \
--header 'X-Api-Key: <api-key>' \
--data '
{
"fields": [
{
"label": "<string>",
"required": true,
"hint": "<string>"
}
],
"name": "<string>",
"description": "<string>",
"organizationId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"steps": [
{
"fieldKeys": [
"<string>"
],
"key": "<string>",
"title": "<string>",
"instructions": "<string>"
}
]
}
'import requests
url = "https://odyssey.asteroid.ai/agents/v2/secret-templates"
payload = {
"fields": [
{
"label": "<string>",
"required": True,
"hint": "<string>"
}
],
"name": "<string>",
"description": "<string>",
"organizationId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"steps": [
{
"fieldKeys": ["<string>"],
"key": "<string>",
"title": "<string>",
"instructions": "<string>"
}
]
}
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({
fields: [{label: '<string>', required: true, hint: '<string>'}],
name: '<string>',
description: '<string>',
organizationId: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
steps: [
{
fieldKeys: ['<string>'],
key: '<string>',
title: '<string>',
instructions: '<string>'
}
]
})
};
fetch('https://odyssey.asteroid.ai/agents/v2/secret-templates', 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://odyssey.asteroid.ai/agents/v2/secret-templates",
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([
'fields' => [
[
'label' => '<string>',
'required' => true,
'hint' => '<string>'
]
],
'name' => '<string>',
'description' => '<string>',
'organizationId' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'steps' => [
[
'fieldKeys' => [
'<string>'
],
'key' => '<string>',
'title' => '<string>',
'instructions' => '<string>'
]
]
]),
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://odyssey.asteroid.ai/agents/v2/secret-templates"
payload := strings.NewReader("{\n \"fields\": [\n {\n \"label\": \"<string>\",\n \"required\": true,\n \"hint\": \"<string>\"\n }\n ],\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"organizationId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"steps\": [\n {\n \"fieldKeys\": [\n \"<string>\"\n ],\n \"key\": \"<string>\",\n \"title\": \"<string>\",\n \"instructions\": \"<string>\"\n }\n ]\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://odyssey.asteroid.ai/agents/v2/secret-templates")
.header("X-Api-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"fields\": [\n {\n \"label\": \"<string>\",\n \"required\": true,\n \"hint\": \"<string>\"\n }\n ],\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"organizationId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"steps\": [\n {\n \"fieldKeys\": [\n \"<string>\"\n ],\n \"key\": \"<string>\",\n \"title\": \"<string>\",\n \"instructions\": \"<string>\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://odyssey.asteroid.ai/agents/v2/secret-templates")
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 \"fields\": [\n {\n \"label\": \"<string>\",\n \"required\": true,\n \"hint\": \"<string>\"\n }\n ],\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"organizationId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"steps\": [\n {\n \"fieldKeys\": [\n \"<string>\"\n ],\n \"key\": \"<string>\",\n \"title\": \"<string>\",\n \"instructions\": \"<string>\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"createdAt": "2023-11-07T05:31:56Z",
"fields": [
{
"key": "<string>",
"label": "<string>",
"required": true,
"type": "username",
"hint": "<string>"
}
],
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"kind": "login",
"name": "<string>",
"origin": "generated",
"steps": [
{
"fieldKeys": [
"<string>"
],
"key": "<string>",
"title": "<string>",
"instructions": "<string>"
}
],
"updatedAt": "2023-11-07T05:31:56Z",
"actor": {
"id": "<string>",
"kind": "person"
},
"createdBy": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"description": "<string>",
"organizationId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"sourceTemplateId": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}{
"code": 400,
"message": "<string>",
"detail": "<string>",
"errors": [
{
"detail": "<string>",
"parameter": "<string>"
}
],
"instance": "<string>",
"status": 123,
"title": "<string>",
"type": "<string>"
}{
"code": 401,
"message": "<string>",
"detail": "<string>",
"instance": "<string>",
"status": 123,
"title": "<string>",
"type": "<string>"
}{
"code": 403,
"message": "<string>",
"capability": "<string>",
"detail": "<string>",
"instance": "<string>",
"reason": "capability_required",
"status": 123,
"title": "<string>",
"type": "<string>"
}{
"code": 404,
"message": "<string>",
"detail": "<string>",
"instance": "<string>",
"status": 123,
"title": "<string>",
"type": "<string>"
}{
"code": 500,
"message": "<string>",
"detail": "<string>",
"instance": "<string>",
"status": 123,
"title": "<string>",
"type": "<string>"
}Create Secret Template
Create an organization secret template.
curl --request POST \
--url https://odyssey.asteroid.ai/agents/v2/secret-templates \
--header 'Content-Type: application/json' \
--header 'X-Api-Key: <api-key>' \
--data '
{
"fields": [
{
"label": "<string>",
"required": true,
"hint": "<string>"
}
],
"name": "<string>",
"description": "<string>",
"organizationId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"steps": [
{
"fieldKeys": [
"<string>"
],
"key": "<string>",
"title": "<string>",
"instructions": "<string>"
}
]
}
'import requests
url = "https://odyssey.asteroid.ai/agents/v2/secret-templates"
payload = {
"fields": [
{
"label": "<string>",
"required": True,
"hint": "<string>"
}
],
"name": "<string>",
"description": "<string>",
"organizationId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"steps": [
{
"fieldKeys": ["<string>"],
"key": "<string>",
"title": "<string>",
"instructions": "<string>"
}
]
}
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({
fields: [{label: '<string>', required: true, hint: '<string>'}],
name: '<string>',
description: '<string>',
organizationId: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
steps: [
{
fieldKeys: ['<string>'],
key: '<string>',
title: '<string>',
instructions: '<string>'
}
]
})
};
fetch('https://odyssey.asteroid.ai/agents/v2/secret-templates', 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://odyssey.asteroid.ai/agents/v2/secret-templates",
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([
'fields' => [
[
'label' => '<string>',
'required' => true,
'hint' => '<string>'
]
],
'name' => '<string>',
'description' => '<string>',
'organizationId' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'steps' => [
[
'fieldKeys' => [
'<string>'
],
'key' => '<string>',
'title' => '<string>',
'instructions' => '<string>'
]
]
]),
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://odyssey.asteroid.ai/agents/v2/secret-templates"
payload := strings.NewReader("{\n \"fields\": [\n {\n \"label\": \"<string>\",\n \"required\": true,\n \"hint\": \"<string>\"\n }\n ],\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"organizationId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"steps\": [\n {\n \"fieldKeys\": [\n \"<string>\"\n ],\n \"key\": \"<string>\",\n \"title\": \"<string>\",\n \"instructions\": \"<string>\"\n }\n ]\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://odyssey.asteroid.ai/agents/v2/secret-templates")
.header("X-Api-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"fields\": [\n {\n \"label\": \"<string>\",\n \"required\": true,\n \"hint\": \"<string>\"\n }\n ],\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"organizationId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"steps\": [\n {\n \"fieldKeys\": [\n \"<string>\"\n ],\n \"key\": \"<string>\",\n \"title\": \"<string>\",\n \"instructions\": \"<string>\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://odyssey.asteroid.ai/agents/v2/secret-templates")
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 \"fields\": [\n {\n \"label\": \"<string>\",\n \"required\": true,\n \"hint\": \"<string>\"\n }\n ],\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"organizationId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"steps\": [\n {\n \"fieldKeys\": [\n \"<string>\"\n ],\n \"key\": \"<string>\",\n \"title\": \"<string>\",\n \"instructions\": \"<string>\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"createdAt": "2023-11-07T05:31:56Z",
"fields": [
{
"key": "<string>",
"label": "<string>",
"required": true,
"type": "username",
"hint": "<string>"
}
],
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"kind": "login",
"name": "<string>",
"origin": "generated",
"steps": [
{
"fieldKeys": [
"<string>"
],
"key": "<string>",
"title": "<string>",
"instructions": "<string>"
}
],
"updatedAt": "2023-11-07T05:31:56Z",
"actor": {
"id": "<string>",
"kind": "person"
},
"createdBy": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"description": "<string>",
"organizationId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"sourceTemplateId": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}{
"code": 400,
"message": "<string>",
"detail": "<string>",
"errors": [
{
"detail": "<string>",
"parameter": "<string>"
}
],
"instance": "<string>",
"status": 123,
"title": "<string>",
"type": "<string>"
}{
"code": 401,
"message": "<string>",
"detail": "<string>",
"instance": "<string>",
"status": 123,
"title": "<string>",
"type": "<string>"
}{
"code": 403,
"message": "<string>",
"capability": "<string>",
"detail": "<string>",
"instance": "<string>",
"reason": "capability_required",
"status": 123,
"title": "<string>",
"type": "<string>"
}{
"code": 404,
"message": "<string>",
"detail": "<string>",
"instance": "<string>",
"status": 123,
"title": "<string>",
"type": "<string>"
}{
"code": 500,
"message": "<string>",
"detail": "<string>",
"instance": "<string>",
"status": 123,
"title": "<string>",
"type": "<string>"
}Authorizations
Body
Show child attributes
Show child attributes
Kind of vault item. Templates and items need at least one field. Completeness is per-field required.
login, api_key, card, custom 1 - 200Owning organization. Defaults to the one organization the caller acts in, such as an API key's. Required when the caller belongs to several.
How the fields are laid out as steps when someone fills in a secret request.
20Show child attributes
Show child attributes
Response
The request has succeeded and a new resource has been created as a result.
A vault template: an ordered field blueprint. organizationId is omitted on master presets.
Show child attributes
Show child attributes
Kind of vault item. Templates and items need at least one field. Completeness is per-field required.
login, api_key, card, custom 1 - 200Whether a vault template was generated from the catalog or created by hand.
generated, manual 20Show child attributes
Show child attributes
Who made it. createdBy holds a user id only, so read this for a record an API key made.
Show child attributes
Show child attributes
Owning organization. Omitted on master presets.
Template this row was copied from. Provenance only.

