Import a chat as a session
Create a private session from a chat in another coding agent app, such as Conductor, with its messages and agent activity. No agent run starts until a follow-up is sent, which receives the imported history as context. Importing the same chat again returns the existing session.
import Tembo from '@tembo-io/sdk';
const client = new Tembo();
const session = await client.sessions.import({
source: 'conductor',
externalId: 'x',
title: 'x',
messages: [
{
id: 'x',
role: 'user',
content: '',
sentAt: '2024-01-01T00:00:00.000Z',
},
],
});use tembo_rs::*;
let client = Tembo::from_env()?;
let response = client
.sessions()
.import(SessionsImportBody::new(
"conductor".to_string(),
"x".to_string(),
"x".to_string(),
vec![SessionsImportBodyMessage::new(
"x".to_string(),
SessionsImportBodyMessageRole::User,
"".to_string(),
chrono::Utc::now().fixed_offset(),
)],
))
.send()
.await?;
curl --request POST \
--url https://api.tembo.io/v1/sessions/import \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"source": "conductor",
"externalId": "<string>",
"title": "<string>",
"messages": [
{
"id": "<string>",
"content": "<string>",
"sentAt": "2023-11-07T05:31:56Z"
}
]
}
'import requests
url = "https://api.tembo.io/v1/sessions/import"
payload = {
"source": "conductor",
"externalId": "<string>",
"title": "<string>",
"messages": [
{
"id": "<string>",
"content": "<string>",
"sentAt": "2023-11-07T05:31:56Z"
}
]
}
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({
source: 'conductor',
externalId: '<string>',
title: '<string>',
messages: [{id: '<string>', content: '<string>', sentAt: '2023-11-07T05:31:56Z'}]
})
};
fetch('https://api.tembo.io/v1/sessions/import', 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.tembo.io/v1/sessions/import",
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([
'source' => 'conductor',
'externalId' => '<string>',
'title' => '<string>',
'messages' => [
[
'id' => '<string>',
'content' => '<string>',
'sentAt' => '2023-11-07T05:31:56Z'
]
]
]),
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://api.tembo.io/v1/sessions/import"
payload := strings.NewReader("{\n \"source\": \"conductor\",\n \"externalId\": \"<string>\",\n \"title\": \"<string>\",\n \"messages\": [\n {\n \"id\": \"<string>\",\n \"content\": \"<string>\",\n \"sentAt\": \"2023-11-07T05:31:56Z\"\n }\n ]\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://api.tembo.io/v1/sessions/import")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"source\": \"conductor\",\n \"externalId\": \"<string>\",\n \"title\": \"<string>\",\n \"messages\": [\n {\n \"id\": \"<string>\",\n \"content\": \"<string>\",\n \"sentAt\": \"2023-11-07T05:31:56Z\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.tembo.io/v1/sessions/import")
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 \"source\": \"conductor\",\n \"externalId\": \"<string>\",\n \"title\": \"<string>\",\n \"messages\": [\n {\n \"id\": \"<string>\",\n \"content\": \"<string>\",\n \"sentAt\": \"2023-11-07T05:31:56Z\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"agent": "<string>",
"agentId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"artifactType": "PullRequest",
"baseBranch": "<string>",
"branchName": "<string>",
"createdAt": "2023-11-07T05:31:56Z",
"externalId": "<string>",
"externalUrl": "<string>",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"kind": "<string>",
"lastQueuedAt": "2023-11-07T05:31:56Z",
"lastSeenAt": "2023-11-07T05:31:56Z",
"level": 123,
"mode": "normal",
"parentSessionId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"projectId": "<string>",
"sandboxSize": "nano",
"sessionType": "Chat",
"targetBranch": "<string>",
"title": "<string>",
"updatedAt": "2023-11-07T05:31:56Z",
"visibility": "public",
"artifacts": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"type": "PullRequest",
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z",
"pullRequests": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"url": "<string>",
"title": "<string>",
"status": "open",
"isDraft": true,
"sourceBranch": "<string>",
"createdAt": "2023-11-07T05:31:56Z",
"agent": "<string>",
"diff": {
"additions": 1,
"deletions": 1,
"data": "<string>"
},
"updatedAt": "2023-11-07T05:31:56Z",
"baseBranch": "<string>",
"headSha": "<string>",
"author": {
"avatarUrl": "<string>",
"login": "<string>"
},
"codeRepository": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"owner": "<string>",
"baseBranch": "<string>",
"provider": "<string>"
}
}
]
}
],
"automaticSizing": true,
"description": "<string>",
"diffSummary": {
"additions": 123,
"deletions": 123
},
"htmlUrl": "<string>",
"isPinned": true,
"project": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"icon": "folder",
"color": "neutral"
},
"sessionSource": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"type": "<string>",
"repositories": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"provider": "<string>"
}
]
},
"sourcePullRequest": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"url": "<string>",
"title": "<string>",
"status": "open",
"isDraft": true
},
"state": {
"isQueued": true,
"isCancelled": true,
"isCompleted": true,
"isFailed": true,
"inProgress": true,
"current": "inProgress"
}
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Body
Application the chat is imported from.
"conductor"Chat ID in the source application. Importing the same chat again returns the existing session.
1 - 200Title of the chat.
1 - 500Chat messages in the order they were sent.
1 - 10000 elementsShow child attributes
Show child attributes
Response
Import a chat as a session
PullRequest, ToolCall, Plan, Response, File, Service, Source, null normal, planning The session whose agent created this session.
nano, micro, small, medium, large, xl, xxl, ultra, null Chat, Terminal public, private Show child attributes
Show child attributes
Whether the session VM is sized automatically.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Was this page helpful?
import Tembo from '@tembo-io/sdk';
const client = new Tembo();
const session = await client.sessions.import({
source: 'conductor',
externalId: 'x',
title: 'x',
messages: [
{
id: 'x',
role: 'user',
content: '',
sentAt: '2024-01-01T00:00:00.000Z',
},
],
});use tembo_rs::*;
let client = Tembo::from_env()?;
let response = client
.sessions()
.import(SessionsImportBody::new(
"conductor".to_string(),
"x".to_string(),
"x".to_string(),
vec![SessionsImportBodyMessage::new(
"x".to_string(),
SessionsImportBodyMessageRole::User,
"".to_string(),
chrono::Utc::now().fixed_offset(),
)],
))
.send()
.await?;
curl --request POST \
--url https://api.tembo.io/v1/sessions/import \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"source": "conductor",
"externalId": "<string>",
"title": "<string>",
"messages": [
{
"id": "<string>",
"content": "<string>",
"sentAt": "2023-11-07T05:31:56Z"
}
]
}
'import requests
url = "https://api.tembo.io/v1/sessions/import"
payload = {
"source": "conductor",
"externalId": "<string>",
"title": "<string>",
"messages": [
{
"id": "<string>",
"content": "<string>",
"sentAt": "2023-11-07T05:31:56Z"
}
]
}
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({
source: 'conductor',
externalId: '<string>',
title: '<string>',
messages: [{id: '<string>', content: '<string>', sentAt: '2023-11-07T05:31:56Z'}]
})
};
fetch('https://api.tembo.io/v1/sessions/import', 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.tembo.io/v1/sessions/import",
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([
'source' => 'conductor',
'externalId' => '<string>',
'title' => '<string>',
'messages' => [
[
'id' => '<string>',
'content' => '<string>',
'sentAt' => '2023-11-07T05:31:56Z'
]
]
]),
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://api.tembo.io/v1/sessions/import"
payload := strings.NewReader("{\n \"source\": \"conductor\",\n \"externalId\": \"<string>\",\n \"title\": \"<string>\",\n \"messages\": [\n {\n \"id\": \"<string>\",\n \"content\": \"<string>\",\n \"sentAt\": \"2023-11-07T05:31:56Z\"\n }\n ]\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://api.tembo.io/v1/sessions/import")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"source\": \"conductor\",\n \"externalId\": \"<string>\",\n \"title\": \"<string>\",\n \"messages\": [\n {\n \"id\": \"<string>\",\n \"content\": \"<string>\",\n \"sentAt\": \"2023-11-07T05:31:56Z\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.tembo.io/v1/sessions/import")
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 \"source\": \"conductor\",\n \"externalId\": \"<string>\",\n \"title\": \"<string>\",\n \"messages\": [\n {\n \"id\": \"<string>\",\n \"content\": \"<string>\",\n \"sentAt\": \"2023-11-07T05:31:56Z\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"agent": "<string>",
"agentId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"artifactType": "PullRequest",
"baseBranch": "<string>",
"branchName": "<string>",
"createdAt": "2023-11-07T05:31:56Z",
"externalId": "<string>",
"externalUrl": "<string>",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"kind": "<string>",
"lastQueuedAt": "2023-11-07T05:31:56Z",
"lastSeenAt": "2023-11-07T05:31:56Z",
"level": 123,
"mode": "normal",
"parentSessionId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"projectId": "<string>",
"sandboxSize": "nano",
"sessionType": "Chat",
"targetBranch": "<string>",
"title": "<string>",
"updatedAt": "2023-11-07T05:31:56Z",
"visibility": "public",
"artifacts": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"type": "PullRequest",
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z",
"pullRequests": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"url": "<string>",
"title": "<string>",
"status": "open",
"isDraft": true,
"sourceBranch": "<string>",
"createdAt": "2023-11-07T05:31:56Z",
"agent": "<string>",
"diff": {
"additions": 1,
"deletions": 1,
"data": "<string>"
},
"updatedAt": "2023-11-07T05:31:56Z",
"baseBranch": "<string>",
"headSha": "<string>",
"author": {
"avatarUrl": "<string>",
"login": "<string>"
},
"codeRepository": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"owner": "<string>",
"baseBranch": "<string>",
"provider": "<string>"
}
}
]
}
],
"automaticSizing": true,
"description": "<string>",
"diffSummary": {
"additions": 123,
"deletions": 123
},
"htmlUrl": "<string>",
"isPinned": true,
"project": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"icon": "folder",
"color": "neutral"
},
"sessionSource": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"type": "<string>",
"repositories": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"provider": "<string>"
}
]
},
"sourcePullRequest": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"url": "<string>",
"title": "<string>",
"status": "open",
"isDraft": true
},
"state": {
"isQueued": true,
"isCancelled": true,
"isCompleted": true,
"isFailed": true,
"inProgress": true,
"current": "inProgress"
}
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}