X12 277CA Health Care Claim Acknowledgment

The 277CA (005010X214) is the claim acknowledgment a payer or clearinghouse returns after receiving 837 claims. It reports, claim by claim, whether each one was accepted into adjudication or rejected at the front-end edits.

It is a hierarchy of information source, information receiver, billing provider and patient. Each claim is reported in loop 2200D with an STC status and the payer's claim control number.

At a glance

Standard
X12 HIPAA
Implementation guide
005010X214
Functional group
HN (GS01)
Sent by
Payer or clearinghouse to submitter
Responses
999
ediFabric .NET template
TS277A in EdiFabric.Templates.Hipaa
OpenEDI definition
View 277CA in the spec library

277CA structure

The full X12 277CA layout from its OpenEDI definition, the same model ediFabric uses to parse, validate and generate it: 13 loops and 38 segment positions, in file order. Loops are shaded and their segments indented; Max use is how many times a segment or loop may repeat.

Segment / loop Name Usage Max use
STTransaction Set HeaderRequired1
BHTBeginning of Hierarchical TransactionRequired1
Loop 2000AInformation Source LevelRequired1
HLInformation Source LevelRequired1
Loop 2100AInformation Source NameRequired1
NM1Information Source NameRequired1
Loop 2200ATransmission Receipt Control IdentifierRequired1
TRNTransmission Receipt Control IdentifierRequired1
DTPInformation Source Receipt DateRequired1
DTPInformation Source Process DateRequired1
Loop 2000BInformation Receiver LevelRequired1
HLInformation Receiver LevelRequired1
Loop 2100BInformation Receiver NameRequired1
NM1Information Receiver NameRequired1
Loop 2200BInformation Receiver Application Trace IdentifierRequired1
TRNInformation Receiver Application Trace IdentifierRequired1
STCInformation Receiver Status InformationRequired>1
QTYTotal Accepted QuantitySituational1
QTYTotal Rejected QuantitySituational1
AMTTotal Accepted AmountSituational1
AMTTotal Rejected AmountSituational1
Loop 2000CBilling Provider of Service LevelSituational>1
HLBilling Provider of Service LevelRequired1
Loop 2100CBilling Provider NameRequired1
NM1Billing Provider NameRequired1
Loop 2200CProvider of Service Information Trace IdentifierSituational1
TRNProvider of Service Information Trace IdentifierRequired1
STCBilling Provider Status InformationSituational>1
REFProvider Secondary IdentifierSituational3
QTYTotal Accepted QuantitySituational1
QTYTotal Rejected QuantitySituational1
AMTTotal Accepted AmountSituational1
AMTTotal Rejected AmountSituational1
Loop 2000DPatient LevelSituational>1
HLPatient LevelRequired1
Loop 2100DPatient NameRequired1
NM1Patient NameRequired1
Loop 2200DClaim Status Tracking NumberRequired>1
TRNClaim Status Tracking NumberRequired1
STCClaim Level Status InformationRequired>1
REFPayer Claim Control NumberSituational1
REFClaim Identifier for Transmission IntermediariesSituational1
REFInstitutional Bill Type IdentificationSituational1
DTPClaim Level Service DateRequired1
Loop 2220DService Line InformationSituational>1
SVCService Line InformationRequired1
STCService Line Level Status InformationRequired>1
REFService Line Item IdentificationRequired1
REFPharmacy Prescription NumberSituational1
DTPService Line DateRequired1
SETransaction Set TrailerRequired1

Usage follows the 005010X214 implementation guide: Required segments must be sent, Situational ones only when the guide's condition applies. Trading partners often add their own rules in companion guides - ediFabric templates can be adjusted to match. Open the element-level definition in the EdiNation spec library.

Sample 277CA file

An acknowledgment that accepts one professional claim into adjudication. Paste it into EdiNation to see every element named and validated.

ISA*00*          *00*          *ZZ*RECEIVERID     *ZZ*SUBMITTERID    *260929*1200*^*00501*000000002*0*T*:~
GS*HN*RECEIVERID*SUBMITTERID*20260929*1200*2*X*005010X214~
ST*277*0001*005010X214~
BHT*0085*08*277X2140001*20260929*1200*TH~
HL*1**20*1~
NM1*PR*2*KEY INSURANCE COMPANY*****PI*999996666~
TRN*1*0091182~
DTP*050*D8*20260929~
DTP*009*D8*20260929~
HL*2*1*21*1~
NM1*41*2*PREMIER BILLING SERVICE*****46*TGJ23~
TRN*2*244579~
STC*A1:19:PR*20260929*WQ*100~
QTY*90*1~
AMT*YU*100~
HL*3*2*19*1~
NM1*85*2*BEN KILDARE SERVICE*****XX*9876543210~
HL*4*3*PT~
NM1*QC*1*SMITH*TED****MI*000221111A~
TRN*2*26463774~
STC*A2:20:PR*20260929*WQ*100~
REF*1K*2026272000001~
DTP*472*RD8*20260920-20260920~
SE*22*0001~
GE*1*2~
IEA*1*000000002~

The same 277CA as JSON

ediFabric turns every loop, segment and element into a named field. This is the transaction from the sample, in the JSON that ediFabric Native and Cloud return and accept.

{
  "ST": {
    "TransactionSetIdentifierCode_01": "277",
    "TransactionSetControlNumber_02": "0001",
    "ImplementationConventionPreference_03": "005010X214"
  },
  "BHT_BeginningOfHierarchicalTransaction": {
    "HierarchicalStructureCode_01": "0085",
    "TransactionSetPurposeCode_02": "08",
    "SubmitterTransactionIdentifier_03": "277X2140001",
    "TransactionSetCreationDate_04": "20260929",
    "TransactionSetCreationTime_05": "1200",
    "TransactionTypeCode_06": "TH"
  },
  "Loop2000A": {
    "HL_InformationSourceLevel": {
      "HierarchicalIDNumber_01": "1",
      "HierarchicalLevelCode_03": "20",
      "HierarchicalChildCode_04": "1"
    },
    "Loop2100A": {
      "NM1_InformationSourceName": {
        "EntityIdentifierCode_01": "PR",
        "EntityTypeQualifier_02": "2",
        "ResponseContactLastorOrganizationName_03": "KEY INSURANCE COMPANY",
        "IdentificationCodeQualifier_08": "PI",
        "ResponseContactIdentifier_09": "999996666"
      }
    },
    "Loop2200A": {
      "TRN_TransmissionReceiptControlIdentifier": {
        "TraceTypeCode_01": "1",
        "CurrentTransactionTraceNumber_02": "0091182"
      },
      "DTP_InformationSourceReceiptDate": {
        "DateTimeQualifier_01": "050",
        "DateTimePeriodFormatQualifier_02": "D8",
        "DateTimePeriod_03": "20260929"
      },
      "DTP_InformationSourceProcessDate": {
        "DateTimeQualifier_01": "009",
        "DateTimePeriodFormatQualifier_02": "D8",
        "DateTimePeriod_03": "20260929"
      }
    },
    "Loop2000B": {
      "HL_InformationReceiverLevel": {
        "HierarchicalIDNumber_01": "2",
        "HierarchicalParentIDNumber_02": "1",
        "HierarchicalLevelCode_03": "21",
        "HierarchicalChildCode_04": "1"
      },
      "Loop2100B": {
        "NM1_InformationReceiverName": {
          "EntityIdentifierCode_01": "41",
          "EntityTypeQualifier_02": "2",
          "ResponseContactLastorOrganizationName_03": "PREMIER BILLING SERVICE",
          "IdentificationCodeQualifier_08": "46",
          "ResponseContactIdentifier_09": "TGJ23"
        }
      },
      "Loop2200B": {
        "TRN_InformationReceiverApplicationTraceIdentifier": {
          "TraceTypeCode_01": "2",
          "CurrentTransactionTraceNumber_02": "244579"
        },
        "STC_InformationReceiverStatusInformation": [
          {
            "HealthCareClaimStatus_01": {
              "HealthCareClaimStatusCategoryCode_01": "A1",
              "StatusCode_02": "19",
              "EntityIdentifierCode_03": "PR"
            },
            "Date_02": "20260929",
            "ActionCode_03": "WQ",
            "TotalSubmittedChargesForUnitWork_04": "100"
          }
        ],
        "QTY_TotalAcceptedQuantity": {
          "QuantityQualifier_01": "90",
          "AmbulancePatientCount_02": "1"
        },
        "AMT_TotalAcceptedAmount": {
          "AmountQualifierCode_01": "YU",
          "TotalClaimChargeAmount_02": "100"
        }
      },
      "Loop2000C": [
        {
          "HL_BillingProviderOfServiceLevel": {
            "HierarchicalIDNumber_01": "3",
            "HierarchicalParentIDNumber_02": "2",
            "HierarchicalLevelCode_03": "19",
            "HierarchicalChildCode_04": "1"
          },
          "Loop2100C": {
            "NM1_BillingProviderName": {
              "EntityIdentifierCode_01": "85",
              "EntityTypeQualifier_02": "2",
              "ResponseContactLastorOrganizationName_03": "BEN KILDARE SERVICE",
              "IdentificationCodeQualifier_08": "XX",
              "ResponseContactIdentifier_09": "9876543210"
            }
          },
          "Loop2000D": [
            {
              "HL_PatientLevel": {
                "HierarchicalIDNumber_01": "4",
                "HierarchicalParentIDNumber_02": "3",
                "HierarchicalLevelCode_03": "PT"
              },
              "Loop2100D": {
                "NM1_PatientName": {
                  "EntityIdentifierCode_01": "QC",
                  "EntityTypeQualifier_02": "1",
                  "ResponseContactLastorOrganizationName_03": "SMITH",
                  "ResponseContactFirstName_04": "TED",
                  "IdentificationCodeQualifier_08": "MI",
                  "ResponseContactIdentifier_09": "000221111A"
                }
              },
              "Loop2200D": [
                {
                  "TRN_ClaimStatusTrackingNumber": {
                    "TraceTypeCode_01": "2",
                    "CurrentTransactionTraceNumber_02": "26463774"
                  },
                  "STC_ClaimLevelStatusInformation": [
                    {
                      "HealthCareClaimStatus_01": {
                        "HealthCareClaimStatusCategoryCode_01": "A2",
                        "StatusCode_02": "20",
                        "EntityIdentifierCode_03": "PR"
                      },
                      "Date_02": "20260929",
                      "ActionCode_03": "WQ",
                      "TotalSubmittedChargesForUnitWork_04": "100"
                    }
                  ],
                  "REF_PayerClaimControlNumber": {
                    "ReferenceIdentificationQualifier_01": "1K",
                    "MemberGrouporPolicyNumber_02": "2026272000001"
                  },
                  "DTP_ClaimLevelServiceDate": {
                    "DateTimeQualifier_01": "472",
                    "DateTimePeriodFormatQualifier_02": "RD8",
                    "DateTimePeriod_03": "20260920-20260920"
                  }
                }
              ]
            }
          ]
        }
      ]
    }
  },
  "SE": {
    "NumberofIncludedSegments_01": "22",
    "TransactionSetControlNumber_02": "0001"
  }
}

Parse and validate a 277CA file

Read the file into typed objects with ediFabric .NET, convert it to JSON in process with the ediFabric Native bindings for Python, Java and C, or post it to the ediFabric Cloud REST API from any language.

using EdiFabric.Templates.Hipaa5010;

License.SetSerial("YOUR_SERIAL_KEY");

using (var stream = File.OpenRead(@"C:\edi\277CA.txt"))
using (var reader = new X12Reader(stream, "EdiFabric.Templates.Hipaa"))
{
    var items = await reader.ReadToEndAsync();
    foreach (var transaction in items.OfType<TS277A>())
    {
        if (transaction.IsValid(out MessageErrorContext errors))
            Console.WriteLine($"{transaction.ST.TransactionSetControlNumber_02} is valid");
        else
            Console.WriteLine(string.Join(Environment.NewLine, errors.Flatten()));
    }
}
import json
import edifabric_x12 as ef

serial = "YOUR_SERIAL_KEY"
ef.load_library()
ef.set_serial(serial)
ef.set_map(json.dumps({"default": serial, "maps": {}}))

edi = open("277CA.txt", "rb").read()
output, offset = ef.parse(edi, ef.ParseMode.JSON_VALIDATE)
transactions = output[:offset]
report = json.loads(output[offset:])
print(report["errors_count"])
import com.edifabric.nativex12.EdiFabricX12;
import com.edifabric.nativex12.ParseMode;
import com.edifabric.nativex12.ParseResult;

String serial = "YOUR_SERIAL_KEY";
EdiFabricX12.loadLibrary();
EdiFabricX12.setSerial(serial);
EdiFabricX12.setMap("{\"default\":\"" + serial + "\",\"maps\":{}}");

String edi = Files.readString(Path.of("277CA.txt"));
ParseResult result = EdiFabricX12.parse(edi, ParseMode.JSON_VALIDATE);
System.out.println(result.getTransactions());
System.out.println(result.getReport());
#include "edifabric_x12.h"

const char *serial = "YOUR_SERIAL_KEY";
ef_parse_result result;

if (ef_load_library(NULL) != 0)
    return 1;
ef_set_serial(serial);
ef_set_map("{\"default\":\"YOUR_SERIAL_KEY\",\"maps\":{}}");

char *edi = read_file("277CA.txt", NULL);   /* helper in example_all_functions.c */
if (ef_parse(edi, EF_PARSE_JSON_VALIDATE, NULL, &result) == 0) {
    /* transactions = output[0 .. offset), report = output[offset .. length) */
    fwrite(result.output.data, 1, (size_t)result.output.length, stdout);
    ef_free(result.output.data);
}
curl -X POST 'https://api.edination.com/v2/x12/read' \
-H 'Ocp-Apim-Subscription-Key: YOUR_SERIAL_KEY' \
-H 'Content-Type: application/octet-stream' \
--data-binary '@277CA.txt'

Generate a 277CA file

Populate a TS277A object in .NET, or pass JSON in the shape shown above to ediFabric Native or ediFabric Cloud, and get a valid 277CA file back.

using EdiFabric.Templates.Hipaa5010;

License.SetSerial("YOUR_SERIAL_KEY");

var transaction = new TS277A();

//  Claim acknowledgment transaction set header
transaction.ST = new ST();
transaction.ST.TransactionSetIdentifierCode_01 = "277";
transaction.ST.TransactionSetControlNumber_02 = "0001";
transaction.ST.ImplementationConventionPreference_03 = "005010X214";

//  Information source acknowledgment created on September 29, 2026
transaction.BHT_BeginningOfHierarchicalTransaction = new BHT_BeginningOfHierarchicalTransaction_5();
transaction.BHT_BeginningOfHierarchicalTransaction.HierarchicalStructureCode_01 = "0085";
transaction.BHT_BeginningOfHierarchicalTransaction.TransactionSetPurposeCode_02 = "08";
transaction.BHT_BeginningOfHierarchicalTransaction.SubmitterTransactionIdentifier_03 = "277X2140001";
transaction.BHT_BeginningOfHierarchicalTransaction.TransactionSetCreationDate_04 = "20260929";
transaction.BHT_BeginningOfHierarchicalTransaction.TransactionSetCreationTime_05 = "1200";
transaction.BHT_BeginningOfHierarchicalTransaction.TransactionTypeCode_06 = "TH";

//  Begin 2000A Loop INFORMATION SOURCE LEVEL
transaction.Loop2000A = new List<Loop_2000A_277A>();
var loop2000A = new Loop_2000A_277A();
loop2000A.HL_InformationSourceLevel = new HL_BillingProviderHierarchicalLevel();
loop2000A.HL_InformationSourceLevel.HierarchicalIDNumber_01 = "1";
loop2000A.HL_InformationSourceLevel.HierarchicalLevelCode_03 = "20";
loop2000A.HL_InformationSourceLevel.HierarchicalChildCode_04 = "1";
transaction.Loop2000A.Add(loop2000A);

// ... set the remaining loops and segments the same way

// SegmentBuilders is in the Common project of the example repository
using (var stream = new MemoryStream())
{
    using (var writer = new X12Writer(stream))
    {
        writer.Write(SegmentBuilders.BuildIsa("1"));
        writer.Write(SegmentBuilders.BuildGs("1", "SENDER1", "RECEIVER1", "005010X214"));
        writer.Write(transaction);
    }
    Console.WriteLine(Encoding.UTF8.GetString(stream.ToArray()));
}
import json
import edifabric_x12 as ef

serial = "YOUR_SERIAL_KEY"
ef.load_library()
ef.set_serial(serial)
ef.set_map(json.dumps({"default": serial, "maps": {}}))

# the transactions JSON returned by ef.parse, edited or produced by your application
transactions = open("277CA.json", "rb").read()
edi = ef.build(transactions, postfix="\r\n")
print(edi)
import com.edifabric.nativex12.EdiFabricX12;

String serial = "YOUR_SERIAL_KEY";
EdiFabricX12.loadLibrary();
EdiFabricX12.setSerial(serial);
EdiFabricX12.setMap("{\"default\":\"" + serial + "\",\"maps\":{}}");

// the transactions JSON returned by parse, edited or produced by your application
String transactions = Files.readString(Path.of("277CA.json"));
String edi = EdiFabricX12.build(transactions, "\r\n");
System.out.println(edi);
#include "edifabric_x12.h"

ef_buffer edi;

if (ef_load_library(NULL) != 0)
    return 1;
ef_set_serial("YOUR_SERIAL_KEY");
ef_set_map("{\"default\":\"YOUR_SERIAL_KEY\",\"maps\":{}}");

/* the transactions JSON returned by ef_parse, edited or produced by your application */
char *transactions = read_file("277CA.json", NULL);
if (ef_build(transactions, "\r\n", &edi) == 0) {
    fwrite(edi.data, 1, (size_t)edi.length, stdout);
    ef_free(edi.data);
}
# the JSON returned by /read, edited or produced by your application
curl -X POST 'https://api.edination.com/v2/x12/write' \
-H 'Ocp-Apim-Subscription-Key: YOUR_SERIAL_KEY' \
-H 'Content-Type: application/json' \
--data-binary '@277CA.json' \
-o '277CA.txt'

277CA questions

What is the difference between the 999 and the 277CA?

The 999 reports whether the 837 file is structurally valid against the implementation guide. The 277CA comes after and reports business-level acceptance or rejection of each claim.

How do I read the claim status in a 277CA?

STC01 is a composite of category code, status code and entity. Category A1 is an acknowledgment of receipt, A2 acceptance into adjudication, A3 returned as unprocessable, A7 rejected for invalid information.

Is the 277CA the same as the 277 claim status response?

No. Both use ST*277, but the 277CA (005010X214) acknowledges submitted claims, while the 277 (005010X212) answers a 276 status request.

How do I parse and generate X12 277CA files in .NET, Python, Java and C?

In .NET, install EdiFabric and EdiFabric.Templates.Hipaa, read the file with X12Reader into TS277A objects and write them back with X12Writer. From Python, Java or C, use ediFabric Native, which converts 277CA files to JSON and JSON back to X12 inside your process. From any other language, post the file to the ediFabric Cloud REST API.

Related transactions

Parse your first 277CA in five minutes

The Community plan is free forever and needs no credit card. It includes ediFabric .NET, Native and Cloud.