Create Payor Inference
curl --request POST \
--url https://app.silnahealth.com/api/public/v1/payor_inference/ \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"provider_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"patient_document_file_ids": null,
"text": null,
"patient_id": null,
"individuals": null
}
'import requests
url = "https://app.silnahealth.com/api/public/v1/payor_inference/"
payload = {
"provider_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"patient_document_file_ids": None,
"text": None,
"patient_id": None,
"individuals": None
}
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({
provider_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
patient_document_file_ids: null,
text: null,
patient_id: null,
individuals: null
})
};
fetch('https://app.silnahealth.com/api/public/v1/payor_inference/', 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.silnahealth.com/api/public/v1/payor_inference/",
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([
'provider_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'patient_document_file_ids' => null,
'text' => null,
'patient_id' => null,
'individuals' => null
]),
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.silnahealth.com/api/public/v1/payor_inference/"
payload := strings.NewReader("{\n \"provider_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"patient_document_file_ids\": null,\n \"text\": null,\n \"patient_id\": null,\n \"individuals\": null\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.silnahealth.com/api/public/v1/payor_inference/")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"provider_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"patient_document_file_ids\": null,\n \"text\": null,\n \"patient_id\": null,\n \"individuals\": null\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.silnahealth.com/api/public/v1/payor_inference/")
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 \"provider_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"patient_document_file_ids\": null,\n \"text\": null,\n \"patient_id\": null,\n \"individuals\": null\n}"
response = http.request(request)
puts response.read_body{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}{
"message": "<string>"
}{
"message": "<string>",
"type": "AUTH_INVALID_REQUEST_HEADER"
}{
"message": "<string>"
}{
"message": "<string>"
}Payor Inference
Create Payor Inference
POST
/
public
/
v1
/
payor_inference
/
Create Payor Inference
curl --request POST \
--url https://app.silnahealth.com/api/public/v1/payor_inference/ \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"provider_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"patient_document_file_ids": null,
"text": null,
"patient_id": null,
"individuals": null
}
'import requests
url = "https://app.silnahealth.com/api/public/v1/payor_inference/"
payload = {
"provider_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"patient_document_file_ids": None,
"text": None,
"patient_id": None,
"individuals": None
}
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({
provider_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
patient_document_file_ids: null,
text: null,
patient_id: null,
individuals: null
})
};
fetch('https://app.silnahealth.com/api/public/v1/payor_inference/', 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.silnahealth.com/api/public/v1/payor_inference/",
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([
'provider_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'patient_document_file_ids' => null,
'text' => null,
'patient_id' => null,
'individuals' => null
]),
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.silnahealth.com/api/public/v1/payor_inference/"
payload := strings.NewReader("{\n \"provider_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"patient_document_file_ids\": null,\n \"text\": null,\n \"patient_id\": null,\n \"individuals\": null\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.silnahealth.com/api/public/v1/payor_inference/")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"provider_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"patient_document_file_ids\": null,\n \"text\": null,\n \"patient_id\": null,\n \"individuals\": null\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.silnahealth.com/api/public/v1/payor_inference/")
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 \"provider_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"patient_document_file_ids\": null,\n \"text\": null,\n \"patient_id\": null,\n \"individuals\": null\n}"
response = http.request(request)
puts response.read_body{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}{
"message": "<string>"
}{
"message": "<string>",
"type": "AUTH_INVALID_REQUEST_HEADER"
}{
"message": "<string>"
}{
"message": "<string>"
}Choosing a Strategy
Thestrategy field determines what processing steps Silna runs and what inputs are required.
See the Payor Inference Overview for a detailed explanation of each strategy.
| Strategy | Use When | Required Inputs | Confirmation | Speed |
|---|---|---|---|---|
BASE | You have an insurance card | patient_document_file_ids and/or text | Yes | Minutes |
NEAR_REALTIME | You need fast results from an insurance card | patient_document_file_ids and/or text | No | Seconds |
CONFIRMATION | You already have plan details (no document) | individuals | Yes | Seconds |
Previously,
BASE and NEAR_REALTIME behaved identically. BASE now includes a payor confirmation step and may take longer to complete.Document-Based Strategies (BASE and NEAR_REALTIME)
ForBASE and NEAR_REALTIME, upload insurance card images using the File Upload API
first, then pass the returned file IDs in patient_document_file_ids. You can also provide a text field with
insurance details as an alternative to — or alongside — document uploads.
{
"strategy": "BASE",
"provider_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"patient_id": "a1b2c3d4-0000-0000-0000-000000000001",
"patient_document_file_ids": [
"b2c3d4e5-0000-0000-0000-000000000001",
"b2c3d4e5-0000-0000-0000-000000000002"
]
}
BASE produces the highest-quality results because it confirms extracted plan details directly with the payor and returns
any corrections. NEAR_REALTIME is faster but does not include payor confirmation.
Confirmation Strategy (CONFIRMATION)
ForCONFIRMATION, you provide the plan details directly in the individuals array instead of uploading documents.
Silna submits these details to the payor for confirmation without any document processing.
{
"strategy": "CONFIRMATION",
"provider_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"patient_id": "a1b2c3d4-0000-0000-0000-000000000001",
"individuals": [
{
"plans": [
{
"payor_entity_id": "f5e6d7c8-0000-0000-0000-000000000010",
"member_number": "XYZ456",
"plan_order_number": 1
},
{
"payor_entity_id": "f5e6d7c8-0000-0000-0000-000000000020",
"member_number": "ABC789",
"plan_order_number": 2
}
]
}
]
}
CONFIRMATION Input Requirements
individualsis required. Each individual must have at least one plan with apayor_entity_id.patient_document_file_idsandtextare not supported — those inputs are only used withBASEandNEAR_REALTIME.- If
patient_idis provided, patient demographics are pulled from the patient record. - If
patient_idis not provided, each individual must includefirst_name,last_name, anddate_of_birth.
Polling for Results
This is an async endpoint. After creating a payor inference request, poll the GET Payor Inference endpoint untilstatus is
COMPLETED or FAILED.Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Body
application/json
Available options:
NEAR_REALTIME, BASE, CONFIRMATION Required provider identifier (for HIPAA compliance)
Optional list of document file IDs to process
Required array length:
1 - 10 elementsPayor Text
Required string length:
1 - 5000Optional patient identifier
Show child attributes
Show child attributes