curl --request POST \
--url https://odyssey.asteroid.ai/agents/v2/secret-requests \
--header 'Content-Type: application/json' \
--header 'X-Api-Key: <api-key>' \
--data '
{
"name": "<string>",
"title": "<string>",
"description": "<string>",
"fields": [
{
"label": "<string>",
"required": true,
"hint": "<string>"
}
],
"itemKey": "<string>",
"organizationId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"steps": [
{
"fieldKeys": [
"<string>"
],
"key": "<string>",
"title": "<string>",
"instructions": "<string>"
}
],
"templateId": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
'import requests
url = "https://odyssey.asteroid.ai/agents/v2/secret-requests"
payload = {
"name": "<string>",
"title": "<string>",
"description": "<string>",
"fields": [
{
"label": "<string>",
"required": True,
"hint": "<string>"
}
],
"itemKey": "<string>",
"organizationId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"steps": [
{
"fieldKeys": ["<string>"],
"key": "<string>",
"title": "<string>",
"instructions": "<string>"
}
],
"templateId": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
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({
name: '<string>',
title: '<string>',
description: '<string>',
fields: [{label: '<string>', required: true, hint: '<string>'}],
itemKey: '<string>',
organizationId: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
steps: [
{
fieldKeys: ['<string>'],
key: '<string>',
title: '<string>',
instructions: '<string>'
}
],
templateId: '3c90c3cc-0d44-4b50-8888-8dd25736052a'
})
};
fetch('https://odyssey.asteroid.ai/agents/v2/secret-requests', 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-requests",
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([
'name' => '<string>',
'title' => '<string>',
'description' => '<string>',
'fields' => [
[
'label' => '<string>',
'required' => true,
'hint' => '<string>'
]
],
'itemKey' => '<string>',
'organizationId' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'steps' => [
[
'fieldKeys' => [
'<string>'
],
'key' => '<string>',
'title' => '<string>',
'instructions' => '<string>'
]
],
'templateId' => '3c90c3cc-0d44-4b50-8888-8dd25736052a'
]),
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-requests"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"title\": \"<string>\",\n \"description\": \"<string>\",\n \"fields\": [\n {\n \"label\": \"<string>\",\n \"required\": true,\n \"hint\": \"<string>\"\n }\n ],\n \"itemKey\": \"<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 \"templateId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\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-requests")
.header("X-Api-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"title\": \"<string>\",\n \"description\": \"<string>\",\n \"fields\": [\n {\n \"label\": \"<string>\",\n \"required\": true,\n \"hint\": \"<string>\"\n }\n ],\n \"itemKey\": \"<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 \"templateId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://odyssey.asteroid.ai/agents/v2/secret-requests")
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 \"name\": \"<string>\",\n \"title\": \"<string>\",\n \"description\": \"<string>\",\n \"fields\": [\n {\n \"label\": \"<string>\",\n \"required\": true,\n \"hint\": \"<string>\"\n }\n ],\n \"itemKey\": \"<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 \"templateId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n}"
response = http.request(request)
puts response.read_body{
"link": {
"createdAt": "2023-11-07T05:31:56Z",
"createdBy": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"expiresAt": "2023-11-07T05:31:56Z",
"failedSubmits": 123,
"fields": [
{
"key": "<string>",
"label": "<string>",
"required": true,
"type": "username",
"hint": "<string>"
}
],
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"itemKey": "<string>",
"kind": "login",
"name": "<string>",
"organizationId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"status": "pending",
"steps": [
{
"fieldKeys": [
"<string>"
],
"key": "<string>",
"title": "<string>",
"instructions": "<string>"
}
],
"title": "<string>",
"updatedAt": "2023-11-07T05:31:56Z",
"actor": {
"id": "<string>",
"kind": "person",
"client": "web"
},
"completedAt": "2023-11-07T05:31:56Z",
"description": "<string>",
"lastFailedSubmitAt": "2023-11-07T05:31:56Z",
"resultItemId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"submittedIp": "<string>",
"submittedUserAgent": "<string>",
"templateId": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
},
"recipientUrl": "<string>",
"token": "<string>"
}{
"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": 409,
"message": "<string>",
"detail": "<string>",
"instance": "<string>",
"status": 123,
"title": "<string>",
"type": "<string>"
}{
"code": 429,
"message": "<string>",
"capability": "<string>",
"detail": "<string>",
"instance": "<string>",
"limit": 123,
"status": 123,
"title": "<string>",
"type": "<string>",
"used": 123
}{
"code": 500,
"message": "<string>",
"detail": "<string>",
"instance": "<string>",
"status": 123,
"title": "<string>",
"type": "<string>"
}Create Secret Request
Create a secret request. The item key is derived from name unless itemKey is given. 429 when the user exceeds the creation rate limit.
curl --request POST \
--url https://odyssey.asteroid.ai/agents/v2/secret-requests \
--header 'Content-Type: application/json' \
--header 'X-Api-Key: <api-key>' \
--data '
{
"name": "<string>",
"title": "<string>",
"description": "<string>",
"fields": [
{
"label": "<string>",
"required": true,
"hint": "<string>"
}
],
"itemKey": "<string>",
"organizationId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"steps": [
{
"fieldKeys": [
"<string>"
],
"key": "<string>",
"title": "<string>",
"instructions": "<string>"
}
],
"templateId": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
'import requests
url = "https://odyssey.asteroid.ai/agents/v2/secret-requests"
payload = {
"name": "<string>",
"title": "<string>",
"description": "<string>",
"fields": [
{
"label": "<string>",
"required": True,
"hint": "<string>"
}
],
"itemKey": "<string>",
"organizationId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"steps": [
{
"fieldKeys": ["<string>"],
"key": "<string>",
"title": "<string>",
"instructions": "<string>"
}
],
"templateId": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
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({
name: '<string>',
title: '<string>',
description: '<string>',
fields: [{label: '<string>', required: true, hint: '<string>'}],
itemKey: '<string>',
organizationId: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
steps: [
{
fieldKeys: ['<string>'],
key: '<string>',
title: '<string>',
instructions: '<string>'
}
],
templateId: '3c90c3cc-0d44-4b50-8888-8dd25736052a'
})
};
fetch('https://odyssey.asteroid.ai/agents/v2/secret-requests', 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-requests",
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([
'name' => '<string>',
'title' => '<string>',
'description' => '<string>',
'fields' => [
[
'label' => '<string>',
'required' => true,
'hint' => '<string>'
]
],
'itemKey' => '<string>',
'organizationId' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'steps' => [
[
'fieldKeys' => [
'<string>'
],
'key' => '<string>',
'title' => '<string>',
'instructions' => '<string>'
]
],
'templateId' => '3c90c3cc-0d44-4b50-8888-8dd25736052a'
]),
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-requests"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"title\": \"<string>\",\n \"description\": \"<string>\",\n \"fields\": [\n {\n \"label\": \"<string>\",\n \"required\": true,\n \"hint\": \"<string>\"\n }\n ],\n \"itemKey\": \"<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 \"templateId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\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-requests")
.header("X-Api-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"title\": \"<string>\",\n \"description\": \"<string>\",\n \"fields\": [\n {\n \"label\": \"<string>\",\n \"required\": true,\n \"hint\": \"<string>\"\n }\n ],\n \"itemKey\": \"<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 \"templateId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://odyssey.asteroid.ai/agents/v2/secret-requests")
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 \"name\": \"<string>\",\n \"title\": \"<string>\",\n \"description\": \"<string>\",\n \"fields\": [\n {\n \"label\": \"<string>\",\n \"required\": true,\n \"hint\": \"<string>\"\n }\n ],\n \"itemKey\": \"<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 \"templateId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n}"
response = http.request(request)
puts response.read_body{
"link": {
"createdAt": "2023-11-07T05:31:56Z",
"createdBy": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"expiresAt": "2023-11-07T05:31:56Z",
"failedSubmits": 123,
"fields": [
{
"key": "<string>",
"label": "<string>",
"required": true,
"type": "username",
"hint": "<string>"
}
],
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"itemKey": "<string>",
"kind": "login",
"name": "<string>",
"organizationId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"status": "pending",
"steps": [
{
"fieldKeys": [
"<string>"
],
"key": "<string>",
"title": "<string>",
"instructions": "<string>"
}
],
"title": "<string>",
"updatedAt": "2023-11-07T05:31:56Z",
"actor": {
"id": "<string>",
"kind": "person",
"client": "web"
},
"completedAt": "2023-11-07T05:31:56Z",
"description": "<string>",
"lastFailedSubmitAt": "2023-11-07T05:31:56Z",
"resultItemId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"submittedIp": "<string>",
"submittedUserAgent": "<string>",
"templateId": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
},
"recipientUrl": "<string>",
"token": "<string>"
}{
"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": 409,
"message": "<string>",
"detail": "<string>",
"instance": "<string>",
"status": 123,
"title": "<string>",
"type": "<string>"
}{
"code": 429,
"message": "<string>",
"capability": "<string>",
"detail": "<string>",
"instance": "<string>",
"limit": 123,
"status": 123,
"title": "<string>",
"type": "<string>",
"used": 123
}{
"code": 500,
"message": "<string>",
"detail": "<string>",
"instance": "<string>",
"status": 123,
"title": "<string>",
"type": "<string>"
}Authorizations
Body
Name of the secret the request creates.
1 - 200Title shown to the recipient of the secret request.
1 - 200Explanation shown to the recipient of the secret request.
2000Inline field blueprint. Required when templateId is omitted.
Show child attributes
Show child attributes
Optional UPPER_SNAKE key. Derived from name when omitted.
1 - 64^[A-Z0-9]+(?:_[A-Z0-9]+)*$Required when templateId is omitted.
login, api_key, card, custom The organization. Defaults to the one organization the caller acts in, such as an API key's. Required when the caller belongs to several.
Inline step layout. Only valid with kind and fields; rejected with templateId.
20Show child attributes
Show child attributes
Org template to snapshot. Mutually exclusive with kind and fields.
Response
The request has succeeded and a new resource has been created as a result.
Create response. token is the raw link secret and recipientUrl carries it. Both are returned once; the server stores only the token's hash.
A credential request. The recipient opens the link with no session, fills in the values, and one submit creates the vault item. The field blueprint is frozen at create.
Show child attributes
Show child attributes
Absolute URL of the page the recipient opens to submit the secret, on this environment's credential-request host. The token is in its fragment.
Raw token for the recipient URL. Returned once.

