Draft journeys for a persona
Returns DRAFTS and persists nothing — see POST /projects/{projectId}/personas/generate for why, and for what this spends.
curl --request POST \
--url https://app.mcpjam.com/api/v1/projects/{projectId}/journeys/generate \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"persona": {
"name": "<string>",
"role": "<string>",
"notes": "<string>"
},
"serverAttachmentId": "<string>",
"environmentId": "<string>",
"journeyCount": 123,
"description": "<string>"
}
'import requests
url = "https://app.mcpjam.com/api/v1/projects/{projectId}/journeys/generate"
payload = {
"persona": {
"name": "<string>",
"role": "<string>",
"notes": "<string>"
},
"serverAttachmentId": "<string>",
"environmentId": "<string>",
"journeyCount": 123,
"description": "<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({
persona: {name: '<string>', role: '<string>', notes: '<string>'},
serverAttachmentId: '<string>',
environmentId: '<string>',
journeyCount: 123,
description: '<string>'
})
};
fetch('https://app.mcpjam.com/api/v1/projects/{projectId}/journeys/generate', 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://app.mcpjam.com/api/v1/projects/{projectId}/journeys/generate",
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([
'persona' => [
'name' => '<string>',
'role' => '<string>',
'notes' => '<string>'
],
'serverAttachmentId' => '<string>',
'environmentId' => '<string>',
'journeyCount' => 123,
'description' => '<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://app.mcpjam.com/api/v1/projects/{projectId}/journeys/generate"
payload := strings.NewReader("{\n \"persona\": {\n \"name\": \"<string>\",\n \"role\": \"<string>\",\n \"notes\": \"<string>\"\n },\n \"serverAttachmentId\": \"<string>\",\n \"environmentId\": \"<string>\",\n \"journeyCount\": 123,\n \"description\": \"<string>\"\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://app.mcpjam.com/api/v1/projects/{projectId}/journeys/generate")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"persona\": {\n \"name\": \"<string>\",\n \"role\": \"<string>\",\n \"notes\": \"<string>\"\n },\n \"serverAttachmentId\": \"<string>\",\n \"environmentId\": \"<string>\",\n \"journeyCount\": 123,\n \"description\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.mcpjam.com/api/v1/projects/{projectId}/journeys/generate")
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 \"persona\": {\n \"name\": \"<string>\",\n \"role\": \"<string>\",\n \"notes\": \"<string>\"\n },\n \"serverAttachmentId\": \"<string>\",\n \"environmentId\": \"<string>\",\n \"journeyCount\": 123,\n \"description\": \"<string>\"\n}"
response = http.request(request)
puts response.read_bodyAuthorizations
MCPJam API key (sk_…). Create one at Settings → API keys. Guest sessions cannot use the API, and API keys cannot manage other API keys.
Path Parameters
ID of the hosted project that contains the server.
Body
Grounding source and the persona to draft for.
Exactly ONE grounding source: serverAttachmentId or environmentId. Sending both is a 400 — a request that is already confused about what it wants should not have a winner picked for it.
The persona to draft journeys FOR, passed BY VALUE rather than by id. Not an oversight: the create flow drafts a persona and its journeys before either exists, so requiring a persisted persona would force you to save a draft you may discard.
Show child attributes
Show child attributes
2000Response
Draft journeys.
DRAFTS. Nothing here is persisted — feed what you want to keep to POST /projects/{projectId}/personas or POST /projects/{projectId}/journeys.
The shape depends on the request: POST /personas/generate returns {persona, journeys} without personaCount and {personas: [{persona, journeys}]} with it; POST /journeys/generate returns {journeys}.
Was this page helpful?
curl --request POST \
--url https://app.mcpjam.com/api/v1/projects/{projectId}/journeys/generate \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"persona": {
"name": "<string>",
"role": "<string>",
"notes": "<string>"
},
"serverAttachmentId": "<string>",
"environmentId": "<string>",
"journeyCount": 123,
"description": "<string>"
}
'import requests
url = "https://app.mcpjam.com/api/v1/projects/{projectId}/journeys/generate"
payload = {
"persona": {
"name": "<string>",
"role": "<string>",
"notes": "<string>"
},
"serverAttachmentId": "<string>",
"environmentId": "<string>",
"journeyCount": 123,
"description": "<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({
persona: {name: '<string>', role: '<string>', notes: '<string>'},
serverAttachmentId: '<string>',
environmentId: '<string>',
journeyCount: 123,
description: '<string>'
})
};
fetch('https://app.mcpjam.com/api/v1/projects/{projectId}/journeys/generate', 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://app.mcpjam.com/api/v1/projects/{projectId}/journeys/generate",
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([
'persona' => [
'name' => '<string>',
'role' => '<string>',
'notes' => '<string>'
],
'serverAttachmentId' => '<string>',
'environmentId' => '<string>',
'journeyCount' => 123,
'description' => '<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://app.mcpjam.com/api/v1/projects/{projectId}/journeys/generate"
payload := strings.NewReader("{\n \"persona\": {\n \"name\": \"<string>\",\n \"role\": \"<string>\",\n \"notes\": \"<string>\"\n },\n \"serverAttachmentId\": \"<string>\",\n \"environmentId\": \"<string>\",\n \"journeyCount\": 123,\n \"description\": \"<string>\"\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://app.mcpjam.com/api/v1/projects/{projectId}/journeys/generate")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"persona\": {\n \"name\": \"<string>\",\n \"role\": \"<string>\",\n \"notes\": \"<string>\"\n },\n \"serverAttachmentId\": \"<string>\",\n \"environmentId\": \"<string>\",\n \"journeyCount\": 123,\n \"description\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.mcpjam.com/api/v1/projects/{projectId}/journeys/generate")
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 \"persona\": {\n \"name\": \"<string>\",\n \"role\": \"<string>\",\n \"notes\": \"<string>\"\n },\n \"serverAttachmentId\": \"<string>\",\n \"environmentId\": \"<string>\",\n \"journeyCount\": 123,\n \"description\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body
