Skip to main content

SharpRevenue Tools — API Testing Guide

This guide walks through running real-time patient lookups against the SharpRevenue Tools API. It covers the products you can run, the canonical endpoints, and the deterministic mock data the test environment returns so you can build automated integration tests without needing real PHI.

Products

SharpRevenue exposes four product types, addressed by id in the productsToRun array on every request.

Product IDProductUse it when…
1EligibilityYou have full insurance information for the patient and want to verify active coverage.
2DemographicsYou want top-level credit-report data (address, gender, SSN). Used in Insurance Discovery flows.
3Coverage DiscoveryYou don't know what insurance the patient has — this fishes for it from supplied identifiers.
5MBI FinderYou have a patient's old Medicare member id and need their current MBI.

Note. A future product 4 (Prior Authorization) is in design but not currently functional. Don't include 4 in productsToRun today.

API surface

The full surface is documented in the API Reference. The handful of endpoints used most often during integration testing:

ActionEndpoint
Run a SharpRevenue requestPOST /api/SharpRevenue/v1/RunSharpRevenue
Re-check the status of a transactionPOST /api/SharpRevenue/v1/CheckTransactionStatus
Re-fetch a stored result by idGET /api/SharpRevenue/v1/GetEligibility?sharpRevenueRtEligibilityObjectId={id}

There are many additional endpoints for searching patients, managing clinics, and exporting CSV results. If your integration is an EMR-style system that already manages patients, most of the patient-management endpoints won't be relevant — focus on the request/result endpoints above. Reach out to ClaimRev support with questions about which endpoint fits your integration shape.

Identifying results

Most SharpRevenue API responses include a claimRevResultId property — this is the primary key for the result inside ClaimRev. Use it for status checks, re-fetching, and correlating across endpoints.

The response also includes mappedData.transactionId (e.g., VarnerHeathDEMO120250108095731294), which is the unique transaction number used by CheckTransactionStatus.

Run SharpRevenue

POST /api/SharpRevenue/v1/RunSharpRevenue
Content-Type: application/json
Authorization: Bearer <token>
{
"practiceName": "My DEMO Account",
"requestingSoftware": "Post Man",
"npi": "1234567890",
"practiceState": "OK",
"subscriberId": "string",
"patientFirstName": "Heath",
"patientLastName": "Varner",
"patientGender": "M",
"patientSsn": "778956541",
"patientState": "OK",
"patientDob": "2023-11-03",
"productsToRun": [1],
"payers": [
{
"isRevenueToolsPayerId": true,
"payerNumber": "00015",
"payerName": "BCBS of Indiana (Anthem)",
"subscriberNumber": "M45695321"
}
]
}

Most of the request body is housekeeping:

PropertyNotes
accountNumberAutomatically set if left blank.
requestingSoftwareFree-form — name your integration.
clientIdLegacy; can be left blank.
uniqueTransactionNumberUnique within your system. The server generates one if you leave it blank.
productsToRunArray of product ids (see table above).
isRevenueToolsPayerIdtrue if you're using SharpRevenue's internal payer ids. false if you're sending the same payer id you'd put on a claim — ClaimRev will look up the mapping for you. EMRs sending claims to ClaimRev typically have claim payer ids configured per patient and should use false.

The 271 result is returned synchronously in the response body. The response also embeds the raw 271 EDI alongside the parsed structured data, so you don't need a separate request to get the EDI bytes.

Re-check status

POST /api/SharpRevenue/v1/CheckTransactionStatus
Content-Type: application/json
Authorization: Bearer <token>
{
"accountNumber": "string",
"uniqueTransactionNumber": "string"
}

uniqueTransactionNumber is the value from mappedData.transactionId on the original RunSharpRevenue response. The response shape is the same as RunSharpRevenue.

Re-fetch by result id

If you saved the claimRevResultId from the original request, you can re-fetch the same result without making a new payer call:

GET /api/SharpRevenue/v1/GetEligibility?sharpRevenueRtEligibilityObjectId={claimRevResultId}
Authorization: Bearer <token>

This is a GET — no request body. The response shape matches RunSharpRevenue.

Mock data — Demographics & Self-Pay (product 2)

When testing against the demographics part of the service, the response largely mirrors what you sent. Behavior varies by the patient's last name:

Last name starts withMock behavior
BSSN is replaced with an arbitrary test value.
CDOB is replaced with an arbitrary value, plus arbitrary red flags and warnings.
DState is returned as KY.
EAn error is returned.
FName, address, SSN, and DOB are all returned as arbitrary values, yielding a low-confidence result.
Anything elseEchoes the request values unchanged.

Arbitrary landline and cell phone numbers are added to all non-error demographic responses.

Self-pay (credit) sub-behavior

The credit/self-pay portion is keyed off the first name:

First nameCredit behavior
Starts with AAcceptable credit + employment info returned.¹
Starts with BPoor credit + a past-due trade account.
Starts with CVarious credit info: employment, two trade accounts (one installment, one revolving), a collection account, and a public record.
Starts with anything elseThe second letter of the first name is used as above if it's an A, B, or C. So Daniel → acceptable credit + employment, Doris → no credit record. This lets you exercise the credit mock service without conflicting with the eligibility mock service.
OtherwiseNo credit information returned.

¹ Employment info from real vendors is sparse; the mock service mirrors that — not all fields will be populated.

Mock data — Eligibility & Insurance Discovery (products 1 and 3)

Eligibility mock behavior is driven by the subscriber's first name.

Test payer. Use payer number 00015 with payer name BCBS of Indiana (Anthem) and isRevenueToolsPayerId: true. If you want to test the claim-payer-id mapping path, use 00630 with isRevenueToolsPayerId: false.

First name patternMock behavior
Starts with HActive coverage if subscriberId is present, otherwise an AAA 72 validation (missing subscriber id).
Starts with INot Found with an AAA 42 validation (service temporarily unable to respond). To force a different AAA code, append a hyphen and the code — e.g., I-41 returns AAA 41.
Starts with JActive coverage with subscriber id 908080808RW.
Starts with K + last name = payer nameActive coverage with subscriber id 99999999.
Starts with K + last name ≠ payer nameNot Found.
Starts with L + last name = payer nameInactive coverage.
Starts with L + last name ≠ payer nameNot Found.
Starts with MActive coverage with a full payer address.
Starts with N + member id not ending in TReturns a corrected Medicare member id (substitutes a T for the last letter).
Starts with N + member id ending in TActive Medicare coverage.
Starts with OUnspecified coverage.
Starts with PActive coverage, but with arbitrary first/last name and DOB — yields a low-confidence record.
Starts with QActive commercial coverage with deductible info.
Anything elseNot Found.

These deterministic behaviors let you build a test suite that exercises every meaningful eligibility outcome without contacting a real payer.

Moving to production

The mock data above is for the test environment only. Once your integration is working against tests, switch to production credentials and run real patient data — the mock-name behaviors don't apply in production. Reach out to ClaimRev support to be moved over.