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
string
required
Your API key for authentication.
Path Parameters
string
required
Internal UUID of the issue.
Body Parameters
string
required
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.
object
Show Resource link fields
Show Resource link fields
string
Internal UUID of the resource link. Use this to detach with Remove Resource.
string
string
string
call, sms_conversation, or file.string
The original resource ID you attached.
string
Display title resolved from the resource itself. For calls this is typically a one-line summary of the conversation.
string
available if the underlying resource still exists and is readable, or unavailable if it has been deleted or is not accessible.object | null
Extra metadata snapshotted from the resource at attach time, for example the call’s
created_at.string | null
User ID of the caller that attached the resource.
string
ISO 8601 timestamp.
null | array
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