Attach Resource
curl --request POST \
--url https://api.bland.ai/v1/triage/issues/{id}/resources \
--header 'Content-Type: application/json' \
--header 'authorization: <authorization>' \
--data '
{
"resource_type": "<string>",
"resource_id": "<string>"
}
'import requests
url = "https://api.bland.ai/v1/triage/issues/{id}/resources"
payload = {
"resource_type": "<string>",
"resource_id": "<string>"
}
headers = {
"authorization": "<authorization>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {authorization: '<authorization>', 'Content-Type': 'application/json'},
body: JSON.stringify({resource_type: '<string>', resource_id: '<string>'})
};
fetch('https://api.bland.ai/v1/triage/issues/{id}/resources', 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.bland.ai/v1/triage/issues/{id}/resources",
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([
'resource_type' => '<string>',
'resource_id' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"authorization: <authorization>"
],
]);
$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.bland.ai/v1/triage/issues/{id}/resources"
payload := strings.NewReader("{\n \"resource_type\": \"<string>\",\n \"resource_id\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("authorization", "<authorization>")
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.bland.ai/v1/triage/issues/{id}/resources")
.header("authorization", "<authorization>")
.header("Content-Type", "application/json")
.body("{\n \"resource_type\": \"<string>\",\n \"resource_id\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.bland.ai/v1/triage/issues/{id}/resources")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["authorization"] = '<authorization>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"resource_type\": \"<string>\",\n \"resource_id\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"data": {
"id": "1d8cec02-6b7c-43f9-9f1f-86d4f31b6d8a",
"issue_id": "9bbe5547-d5b1-4b83-9f80-87c4af7c6b34",
"org_id": "f5b40b9e-bc05-4b8a-9af1-d8f6a8a3a201",
"resource_type": "call",
"resource_id": "3e3af63d-0cc0-4525-b742-72a5367fd072",
"title": "Caller asked to be transferred to billing after the agent failed to verify their account.",
"status": "available",
"metadata": {
"created_at": "2026-04-30T14:11:08.000Z"
},
"attached_by_id": "75c5c7da-a5d6-4e26-a51e-1ae8ef2bfa4a",
"created_at": "2026-05-07T05:25:56.361Z"
},
"errors": null
}
Resources
Attach Resource
Attach a call, SMS conversation, or file to an issue.
POST
/
v1
/
triage
/
issues
/
{id}
/
resources
Attach Resource
curl --request POST \
--url https://api.bland.ai/v1/triage/issues/{id}/resources \
--header 'Content-Type: application/json' \
--header 'authorization: <authorization>' \
--data '
{
"resource_type": "<string>",
"resource_id": "<string>"
}
'import requests
url = "https://api.bland.ai/v1/triage/issues/{id}/resources"
payload = {
"resource_type": "<string>",
"resource_id": "<string>"
}
headers = {
"authorization": "<authorization>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {authorization: '<authorization>', 'Content-Type': 'application/json'},
body: JSON.stringify({resource_type: '<string>', resource_id: '<string>'})
};
fetch('https://api.bland.ai/v1/triage/issues/{id}/resources', 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.bland.ai/v1/triage/issues/{id}/resources",
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([
'resource_type' => '<string>',
'resource_id' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"authorization: <authorization>"
],
]);
$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.bland.ai/v1/triage/issues/{id}/resources"
payload := strings.NewReader("{\n \"resource_type\": \"<string>\",\n \"resource_id\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("authorization", "<authorization>")
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.bland.ai/v1/triage/issues/{id}/resources")
.header("authorization", "<authorization>")
.header("Content-Type", "application/json")
.body("{\n \"resource_type\": \"<string>\",\n \"resource_id\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.bland.ai/v1/triage/issues/{id}/resources")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["authorization"] = '<authorization>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"resource_type\": \"<string>\",\n \"resource_id\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"data": {
"id": "1d8cec02-6b7c-43f9-9f1f-86d4f31b6d8a",
"issue_id": "9bbe5547-d5b1-4b83-9f80-87c4af7c6b34",
"org_id": "f5b40b9e-bc05-4b8a-9af1-d8f6a8a3a201",
"resource_type": "call",
"resource_id": "3e3af63d-0cc0-4525-b742-72a5367fd072",
"title": "Caller asked to be transferred to billing after the agent failed to verify their account.",
"status": "available",
"metadata": {
"created_at": "2026-04-30T14:11:08.000Z"
},
"attached_by_id": "75c5c7da-a5d6-4e26-a51e-1ae8ef2bfa4a",
"created_at": "2026-05-07T05:25:56.361Z"
},
"errors": null
}
Overview
Attaches a resource as evidence on an issue. Resources are what Norm reads during an investigation. Attaching the same resource twice is a no-op. For calls specifically, Attach Call is a shorthand that takes thecall_id directly.
Headers
Your API key for authentication.
Path Parameters
Internal UUID of the issue.
Body Parameters
Type of resource to attach. One of
call, sms_conversation, or file.Response
Returns201 Created with the new resource link. If the resource was already attached, returns the existing link with 200 OK.
Show Resource link fields
Show Resource link fields
Internal UUID of the resource link. Use this to detach with Remove Resource.
call, sms_conversation, or file.The original resource ID you attached.
Display title resolved from the resource itself. For calls this is typically a one-line summary of the conversation.
available if the underlying resource still exists and is readable, or unavailable if it has been deleted or is not accessible.Extra metadata snapshotted from the resource at attach time, for example the call’s
created_at.User ID of the caller that attached the resource.
ISO 8601 timestamp.
null on success. Returns 404 if the issue or the underlying resource cannot be found in your org.{
"data": {
"id": "1d8cec02-6b7c-43f9-9f1f-86d4f31b6d8a",
"issue_id": "9bbe5547-d5b1-4b83-9f80-87c4af7c6b34",
"org_id": "f5b40b9e-bc05-4b8a-9af1-d8f6a8a3a201",
"resource_type": "call",
"resource_id": "3e3af63d-0cc0-4525-b742-72a5367fd072",
"title": "Caller asked to be transferred to billing after the agent failed to verify their account.",
"status": "available",
"metadata": {
"created_at": "2026-04-30T14:11:08.000Z"
},
"attached_by_id": "75c5c7da-a5d6-4e26-a51e-1ae8ef2bfa4a",
"created_at": "2026-05-07T05:25:56.361Z"
},
"errors": null
}
Docs for agents: llms.txt
Was this page helpful?
⌘I