curl --request GET \
--url https://api.eka.care/abdm/nhcx/v1/policies/{policyId}/procedures/{procedureCode} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.eka.care/abdm/nhcx/v1/policies/{policyId}/procedures/{procedureCode}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.eka.care/abdm/nhcx/v1/policies/{policyId}/procedures/{procedureCode}', 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.eka.care/abdm/nhcx/v1/policies/{policyId}/procedures/{procedureCode}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.eka.care/abdm/nhcx/v1/policies/{policyId}/procedures/{procedureCode}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.eka.care/abdm/nhcx/v1/policies/{policyId}/procedures/{procedureCode}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.eka.care/abdm/nhcx/v1/policies/{policyId}/procedures/{procedureCode}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"claim_amount": 123,
"code": "<string>",
"costs": [
{
"amount": 123,
"currency": "<string>",
"qualifier_code": "<string>",
"qualifier_display": "<string>",
"type": "<string>"
}
],
"discharge_stages": "<string>",
"document_ids": [
"<string>"
],
"flags": [
"<string>"
],
"is_unspecified": true,
"mandatory_doc_details": [
{
"category": "<string>",
"category_code": "<string>",
"code": "<string>",
"display": "<string>",
"doc_type_id": "<string>",
"mand_code": "<string>"
}
],
"mandatory_docs": [
"<string>"
],
"maximum_cycles_allowed": 123,
"maximum_implants_allowed": 123,
"maximum_stratification_allowed": 123,
"name": "<string>",
"parent_procedure": "<string>",
"parent_procedures": [
"<string>"
],
"quantity_allowed": 123,
"questionnaire_ids": [
"<string>"
],
"speciality_codes": [
"<string>"
],
"standalone": true,
"stg_forms": [
"<string>"
],
"type": "<string>"
}{
"error": "<string>",
"issues": [
"<string>"
],
"updated_at": "<string>"
}{
"error": "<string>",
"issues": [
"<string>"
],
"updated_at": "<string>"
}Get Procedure
Full catalogue detail for a procedure: flags, costs, caps, mandatory documents and questionnaires. Check a feature’s flag before reading its cap; payers publish non-zero caps on procedures where the feature is off.
curl --request GET \
--url https://api.eka.care/abdm/nhcx/v1/policies/{policyId}/procedures/{procedureCode} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.eka.care/abdm/nhcx/v1/policies/{policyId}/procedures/{procedureCode}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.eka.care/abdm/nhcx/v1/policies/{policyId}/procedures/{procedureCode}', 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.eka.care/abdm/nhcx/v1/policies/{policyId}/procedures/{procedureCode}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.eka.care/abdm/nhcx/v1/policies/{policyId}/procedures/{procedureCode}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.eka.care/abdm/nhcx/v1/policies/{policyId}/procedures/{procedureCode}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.eka.care/abdm/nhcx/v1/policies/{policyId}/procedures/{procedureCode}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"claim_amount": 123,
"code": "<string>",
"costs": [
{
"amount": 123,
"currency": "<string>",
"qualifier_code": "<string>",
"qualifier_display": "<string>",
"type": "<string>"
}
],
"discharge_stages": "<string>",
"document_ids": [
"<string>"
],
"flags": [
"<string>"
],
"is_unspecified": true,
"mandatory_doc_details": [
{
"category": "<string>",
"category_code": "<string>",
"code": "<string>",
"display": "<string>",
"doc_type_id": "<string>",
"mand_code": "<string>"
}
],
"mandatory_docs": [
"<string>"
],
"maximum_cycles_allowed": 123,
"maximum_implants_allowed": 123,
"maximum_stratification_allowed": 123,
"name": "<string>",
"parent_procedure": "<string>",
"parent_procedures": [
"<string>"
],
"quantity_allowed": 123,
"questionnaire_ids": [
"<string>"
],
"speciality_codes": [
"<string>"
],
"standalone": true,
"stg_forms": [
"<string>"
],
"type": "<string>"
}{
"error": "<string>",
"issues": [
"<string>"
],
"updated_at": "<string>"
}{
"error": "<string>",
"issues": [
"<string>"
],
"updated_at": "<string>"
}Authorizations
The API requires a Bearer token (JWT) for authentication.
Headers
Eka User ID (OID)
Partner User ID
Partner HIP ID
Path Parameters
policy_id from Search Policies or Policy Discovery Status
x >= 0Procedure code from List Procedures
Response
OK
ClaimAmount / MandatoryDocs / STGForms are populated by GetProcedure's join step (not stored directly on the Dynamo item) so existing consumers keep working unchanged: ClaimAmount mirrors the "Procedure" cost line (or the first cost line if none is typed "Procedure"); MandatoryDocs/STGForms are the joined documents' MAND codes / STG display strings. MandatoryDocDetails is the same join's full document records (category/code/display) keyed off MandCode, added so callers that need the richer metadata (e.g. enrichPreAuthItems filling CategoryDisplay/DocDisplay) don't need a second CatalogStore call — it is additive and safe to ignore.
Show child attributes
Show child attributes
Marks an "Unspecified Surgical Package" (code "U100"). Derived from the code at read time (not stored), so the FE knows to render the free-text name + amount fields: these packages have no catalog price (ClaimAmount is the 9999999 sentinel) and the provider must supply both. Such an item also cannot be clubbed with other procedures — see unspecified_procedure.go.
Show child attributes
Show child attributes
The procedure an IMPLANT line attaches to (implant caps/flags live on that parent, not on the implant); DischargeStages is the LAMA/DAMA stage list. Both mirror NormProcedure — see the notes there.
The four numeric Claim-Condition caps, mirroring NormProcedure's — see the note there for why they are not omitempty (0 is a real value) and why callers must gate on the matching Flags entry before reading a cap.
Standalone / ParentProcedures are read-time conveniences for the FE's payer-enforced standalone/parent-procedure validations: Standalone surfaces the Flags entry as a bool; ParentProcedures splits ParentProcedure's comma list ("NA" normalised away). Derived in joinProcedureDocuments, not stored.
Was this page helpful?

