Send Message
curl --request POST \
--url https://api.sandbox.metriport.com/medical/v1/message \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"destination": "<string>",
"subject": "<string>",
"body": "<string>",
"attachments": [
"<string>"
],
"intendedRecipientNpi": [
"<string>"
]
}
'import requests
url = "https://api.sandbox.metriport.com/medical/v1/message"
payload = {
"destination": "<string>",
"subject": "<string>",
"body": "<string>",
"attachments": ["<string>"],
"intendedRecipientNpi": ["<string>"]
}
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({
destination: '<string>',
subject: '<string>',
body: JSON.stringify('<string>'),
attachments: ['<string>'],
intendedRecipientNpi: ['<string>']
})
};
fetch('https://api.sandbox.metriport.com/medical/v1/message', 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.sandbox.metriport.com/medical/v1/message",
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([
'destination' => '<string>',
'subject' => '<string>',
'body' => '<string>',
'attachments' => [
'<string>'
],
'intendedRecipientNpi' => [
'<string>'
]
]),
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://api.sandbox.metriport.com/medical/v1/message"
payload := strings.NewReader("{\n \"destination\": \"<string>\",\n \"subject\": \"<string>\",\n \"body\": \"<string>\",\n \"attachments\": [\n \"<string>\"\n ],\n \"intendedRecipientNpi\": [\n \"<string>\"\n ]\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://api.sandbox.metriport.com/medical/v1/message")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"destination\": \"<string>\",\n \"subject\": \"<string>\",\n \"body\": \"<string>\",\n \"attachments\": [\n \"<string>\"\n ],\n \"intendedRecipientNpi\": [\n \"<string>\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sandbox.metriport.com/medical/v1/message")
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 \"destination\": \"<string>\",\n \"subject\": \"<string>\",\n \"body\": \"<string>\",\n \"attachments\": [\n \"<string>\"\n ],\n \"intendedRecipientNpi\": [\n \"<string>\"\n ]\n}"
response = http.request(request)
puts response.read_bodyimport { MetriportMedicalApi } from "@metriport/api-sdk";
const metriport = new MetriportMedicalApi("YOUR_API_KEY");
const status = await metriport.sendMessage({
patientId: "11111111-1111-1111-1111-111111111111",
destination: "intake@cardio.direct.partner.com",
subject: "Referral - cardiology",
body: "Please review the attached referral for cardiology consultation.",
attachments: ["00000000-0000-0000-0000-000000000000"],
intendedRecipientNpi: ["1234567890"],
});
Message
Send Message
Send a message to another practitioner
POST
/
medical
/
v1
/
message
Send Message
curl --request POST \
--url https://api.sandbox.metriport.com/medical/v1/message \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"destination": "<string>",
"subject": "<string>",
"body": "<string>",
"attachments": [
"<string>"
],
"intendedRecipientNpi": [
"<string>"
]
}
'import requests
url = "https://api.sandbox.metriport.com/medical/v1/message"
payload = {
"destination": "<string>",
"subject": "<string>",
"body": "<string>",
"attachments": ["<string>"],
"intendedRecipientNpi": ["<string>"]
}
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({
destination: '<string>',
subject: '<string>',
body: JSON.stringify('<string>'),
attachments: ['<string>'],
intendedRecipientNpi: ['<string>']
})
};
fetch('https://api.sandbox.metriport.com/medical/v1/message', 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.sandbox.metriport.com/medical/v1/message",
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([
'destination' => '<string>',
'subject' => '<string>',
'body' => '<string>',
'attachments' => [
'<string>'
],
'intendedRecipientNpi' => [
'<string>'
]
]),
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://api.sandbox.metriport.com/medical/v1/message"
payload := strings.NewReader("{\n \"destination\": \"<string>\",\n \"subject\": \"<string>\",\n \"body\": \"<string>\",\n \"attachments\": [\n \"<string>\"\n ],\n \"intendedRecipientNpi\": [\n \"<string>\"\n ]\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://api.sandbox.metriport.com/medical/v1/message")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"destination\": \"<string>\",\n \"subject\": \"<string>\",\n \"body\": \"<string>\",\n \"attachments\": [\n \"<string>\"\n ],\n \"intendedRecipientNpi\": [\n \"<string>\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sandbox.metriport.com/medical/v1/message")
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 \"destination\": \"<string>\",\n \"subject\": \"<string>\",\n \"body\": \"<string>\",\n \"attachments\": [\n \"<string>\"\n ],\n \"intendedRecipientNpi\": [\n \"<string>\"\n ]\n}"
response = http.request(request)
puts response.read_bodyimport { MetriportMedicalApi } from "@metriport/api-sdk";
const metriport = new MetriportMedicalApi("YOUR_API_KEY");
const status = await metriport.sendMessage({
patientId: "11111111-1111-1111-1111-111111111111",
destination: "intake@cardio.direct.partner.com",
subject: "Referral - cardiology",
body: "Please review the attached referral for cardiology consultation.",
attachments: ["00000000-0000-0000-0000-000000000000"],
intendedRecipientNpi: ["1234567890"],
});
This endpoint is currently under construction. Please
reach out to support if you'd like to use it.
in-progress.
The id can be used to Get Message Status. When the recipient acknowledges receipt, or if delivery fails, a webhook request will be sent to your configured URL:
message.status: can be one ofcompletedorfailed, depending on the outcome of the operation.
See the Message Delivery
guide for
the explanation of the full flow.
Query Params
The ID of the Patient the message relates to.
Body
Where to deliver the message. Use Search
Destinations
to find a value, or pass one you already have. Can be an
OID, or an email address.
The subject of the message. Think of it as the subject
field in an email.
Plain-text content of the message. At least one of
body
or attachments is required.Document IDs that have already been uploaded to Metriport
to attach to the message. At least one of
body or
attachments is required.Optional NPIs of the intended recipients. Useful when
destination identifies an organization but the message
is intended for specific practitioners.{
"destination": "intake@cardio.direct.partner.com",
"subject": "Referral - cardiology",
"body": "Please review the attached referral for cardiology consultation.",
"attachments": [
"00000000-0000-0000-0000-000000000000",
"11111111-1111-1111-1111-111111111111"
],
"intendedRecipientNpi": ["1234567893"]
}
Response
The resulting FHIR
Communication
resource.
{
"communication": {
"resourceType": "Communication",
"id": "00000000-0000-0000-0000-000000000000",
"status": "in-progress",
"subject": {
"reference": "Patient/00000000-0000-0000-0000-000000000000"
},
"topic": {
"text": "Referral - cardiology"
},
"sender": {
"display": "Your Organization Name"
},
"recipient": [
{
"type": "Organization",
"display": "intake@cardio.direct.partner.com"
},
{
"type": "Practitioner",
"display": "1234567893"
}
],
"sent": "2026-06-16T18:40:00.000Z",
"payload": [
{
"contentReference": {
"reference": "DocumentReference/00000000-0000-0000-0000-000000000000"
}
}
],
"extension": [
{
"url": "https://public.metriport.com/fhir/StructureDefinition/data-source.json",
"valueCoding": {
"system": "https://public.metriport.com/fhir/StructureDefinition/data-source.json",
"code": "METRIPORT"
}
}
]
}
}
import { MetriportMedicalApi } from "@metriport/api-sdk";
const metriport = new MetriportMedicalApi("YOUR_API_KEY");
const status = await metriport.sendMessage({
patientId: "11111111-1111-1111-1111-111111111111",
destination: "intake@cardio.direct.partner.com",
subject: "Referral - cardiology",
body: "Please review the attached referral for cardiology consultation.",
attachments: ["00000000-0000-0000-0000-000000000000"],
intendedRecipientNpi: ["1234567890"],
});
Rate Limits
See limits and throttling⌘I

