Reference
Queries
Every read the API answers, in alphabetical order, with what each takes and returns, the scope it needs and an example to send.
Generated from the API’s schema with every release, so it always matches the API it describes. Each entry shows the scope a key needs for it.
queryactiveEngagementAny key#
The engagement named by the X-Engagement-ID header. Null when the request acts as your own firm.
Example
{
activeEngagement {
id
approvalRecorded
authorisationRef
authorisedOn
effectiveFrom
effectiveTo
engagementId
grantedBy
client {
id
name
kind
}
agent {
id
name
kind
}
}
}queryamountOutstandingNeeds BILL_READ#
What is still owed across the whole portfolio, and how complete that figure is.
Example
{
amountOutstanding {
installmentCount
installmentsPaidPerRecords
installmentsWithUnknownPayment
known
withheldCount
}
}queryapiKeysSigned-in people only#
Your firm's API keys, the ones that work first. Always the firm's own, whichever client you are acting for. For people signed in to the app; a request made with a key is refused.
Example
{
apiKeys {
id
name
status
createdAt
expiresAt
lastUsedAt
prefix
revokedAt
}
}queryassessingJurisdictionsNeeds PARCEL_READ#
The units that assess this portfolio's parcels, where its appeals are filed, by state then name.
Example
{
assessingJurisdictions {
id
name
assesses
billDelivery
bills
fipsCode
installmentsPerYear
kind
}
}querybillNeeds BILL_READ#
The bill one of its installments belongs to. A bill has no id of its own, so pass the id of any of its installments. Null when the installment is not visible to you, which is also what one that does not exist returns.
Arguments
idID!requiredThe id of one of the bill's installments.
Example
query ($id: ID!) {
bill(id: $id) {
key
status
annualTotal
assessmentYear
billNumber
billType
chargesTotal
installmentsTotal
acceptedAutomatically {
at
reason
}
amountOutstanding {
installmentCount
installmentsPaidPerRecords
installmentsWithUnknownPayment
known
withheldCount
}
}
}querybillInboxNeeds BILL_READ#
The bills waiting on a decision (NEEDS_REVIEW or DISPUTED), the oldest arrival first and the undated last; or, with view DECIDED, the ones a person accepted or rejected, newest arrival first with the undated ahead of them. One record per bill. Needs PARCEL_READ as well as BILL_READ. A cursor belongs to the filter it was cut under.
Arguments
afterStringThe cursor to continue from: the endCursor of the page before.
beforeStringNot supported: lists page forward only, with first and after.
filterBillInboxFilterWhich bills. The waiting ones when omitted.
firstIntHow many records to return: 25 when omitted, at most 100.
lastIntNot supported: lists page forward only, with first and after.
Example
{
billInbox(first: 25) {
totalCount
pageInfo {
hasNextPage
endCursor
}
edges {
node {
key
status
annualTotal
assessmentYear
billNumber
}
}
}
}querycalendarFeedsNeeds PARCEL_READ#
The calendar feeds still in force over this portfolio, newest first. Revoked feeds are not listed.
Example
{
calendarFeeds {
id
createdAt
label
lastFetchedAt
revokedAt
createdBy {
id
name
email
}
}
}querycountiesInPortfolioNeeds PARCEL_READ#
Every unit that bills a parcel in the portfolio (a county, a township, a school district), with what is owed to each. Ordered by the amount owed, largest first, then by name. The rows are billing units of any level, under a name kept for compatibility.
Example
{
countiesInPortfolio {
parcelCount
jurisdiction {
id
name
assesses
billDelivery
bills
}
}
}querycoverageAny key#
Where bills can be fetched: by state and by county, with the reason where they cannot. The same for every caller.
Example
{
coverage {
countyTotals {
assessmentOnly
closed
covered
noPortal
notSurveyed
}
totals {
assessmentOnly
closed
covered
noPortal
notSurveyed
}
}
}querycoverageUnitAny key#
One unit by its code (US-CA-FIPS-06007), with its sites. Null when the registry does not hold it, and for a state.
Arguments
unitCodeString!requiredThe unit code, as Jurisdiction.unitCode has it.
Example
query ($unitCode: String!) {
coverageUnit(unitCode: $unitCode) {
name
status
assesses
bills
countyLevel
fips
level
state
portals {
status
discoveredOn
host
reason
url
}
}
}querydeadlineGenerationNeeds PARCEL_READ#
When the dates deadlines returns were last worked out, and whether a change saved since is waiting on it. Asked in the same request as deadlines, it answers for the set that request read.
Example
{
deadlineGeneration {
generatedAt
stale
}
}querydeadlinesNeeds PARCEL_READ#
Payment and appeal dates across the whole portfolio, soonest first. Dates that could not be worked out come last, with the reason, rather than being hidden. Give from and to for a large portfolio, which otherwise lists every date to come. A parcel with no bill yet has no appeal dates.
Arguments
fromDateThe first day to include. A date that could not be worked out is listed whatever the range.
toDateThe last day to include. A date that could not be worked out is listed whatever the range.
Example
{
deadlines {
id
acknowledgedAt
assessmentYear
generatedAt
kind
on
qualifier
source
parcel {
id
parcelNumber
status
useCode
}
jurisdiction {
id
name
assesses
billDelivery
bills
}
}
}queryfeedRunsNeeds BILL_READ#
The last nights of the feed for the client named by X-Engagement-ID, newest first. Empty without an engagement, or when no feed is set up for the firm.
Arguments
lastIntdefault 7How many nights: 7 when omitted.
Example
{
feedRuns {
id
deliveredTo
feedName
finishedAt
message
outcome
startedAt
}
}queryinboxSummaryNeeds BILL_READ#
The inbox in numbers: what arrived this week, what could not be read, and what waits. Needs PARCEL_READ as well as BILL_READ.
Example
{
inboxSummary {
beingChecked
disputed
failedExtractionsThisWeek
needsReview
receivedThisWeek
withheld
}
}queryingestionStatusNeeds BILL_READ#
What the nightly fetch did in each county the portfolio holds parcels in: which answered last night and which are failing. California counties only, for now. Needs PARCEL_READ as well as BILL_READ.
Example
{
ingestionStatus {
attempts24h
failures24h
lastAnsweredAt
lastAttemptAt
lastOutcome
lastSuccessAt
parcels
streak
jurisdiction {
id
name
assesses
billDelivery
bills
}
}
}queryjurisdictionsAny key#
Taxing units from the registry, which is the same for every caller, in state and name order: filter by state, by level, or search by name; at least one is required. At most first are returned (500 when omitted, up to 5,000), so narrow by level or search where a state holds more. An empty list means no unit matched.
Arguments
firstIntHow many to return at most: 500 when omitted, up to 5,000.
levelStringThe kind of unit, as Jurisdiction.level has it: county, city, town, township, school_district and so on.
searchStringPart of the name.
stateStringA two-letter state code.
Example
{
jurisdictions {
id
name
assesses
billDelivery
bills
fipsCode
installmentsPerYear
kind
}
}querylegalEntitiesNeeds PARCEL_READ#
The owners of record the portfolio holds parcels under, by name.
Example
{
legalEntities {
id
name
taxIdLast4
}
}querylegalEntitiesInPortfolioNeeds PARCEL_READ#
Every legal entity that holds a parcel in the portfolio, with how many, their assessed value and what is owed on their bills: the breakdown by owner. Ordered by amount owed, then assessed value, then name. An entity with no parcel is not listed.
Example
{
legalEntitiesInPortfolio {
assessedValue
assessedValueAsOf
parcelCount
legalEntity {
id
name
taxIdLast4
}
}
}querymyEngagementsAny key#
Every client engagement your firm holds, the ones in force first. Lapsed engagements are listed too, so a client is not mistaken for a deleted one; a request under one is refused.
Example
{
myEngagements {
id
approvalRecorded
authorisationRef
authorisedOn
effectiveFrom
effectiveTo
engagementId
grantedBy
client {
id
name
kind
}
agent {
id
name
kind
}
}
}querynodeAny key#
One record by its id, whatever its type. Null with a FORBIDDEN error when your key lacks the scope its type needs; null alone when it is not visible to you or names nothing.
Arguments
idID!requiredThe id, as any query returned it.
Example
query ($id: ID!) {
node(id: $id) {
__typename
id
}
}querynodesAny key#
Several records by id, in the order asked, with null in the place of each that is not visible to you, and a FORBIDDEN error when your key lacks the scope a type needs.
Arguments
ids[ID!]!requiredThe ids, as any query returned them.
Example
query ($ids: [ID!]!) {
nodes(ids: $ids) {
__typename
id
}
}queryparcelNeeds PARCEL_READ#
One parcel: by id, or by parcel number within the unit that assesses it. Pass either id, or parcelNumber with jurisdictionId; anything else is BAD_USER_INPUT. Null when the parcel is not visible to you, which is also what a parcel that does not exist returns.
Arguments
idIDThe parcel's id.
jurisdictionIdIDThe id of the unit that assesses the parcel. With parcelNumber.
parcelNumberStringAs the county writes it. With jurisdictionId.
Example
query ($id: ID) {
parcel(id: $id) {
id
parcelNumber
status
useCode
jurisdiction {
id
name
assesses
billDelivery
bills
}
situsAddress {
city
county
line1
line2
postalCode
}
}
}queryparcelsNeeds PARCEL_READ#
The parcels you can see, a page at a time: filter and order them, then page with first and after. A cursor belongs to the filter and order it was cut under.
Arguments
afterStringThe cursor to continue from: the endCursor of the page before.
beforeStringNot supported: lists page forward only, with first and after.
filterParcelFilterWhich parcels. All of them when omitted.
firstIntHow many records to return: 25 when omitted, at most 100.
lastIntNot supported: lists page forward only, with first and after.
orderByParcelOrderHow to order them. Assessed value, highest first, when omitted.
Example
{
parcels(first: 25) {
totalCount
pageInfo {
hasNextPage
endCursor
}
edges {
node {
id
parcelNumber
status
useCode
}
}
}
}queryportfolioSummaryNeeds REPORT_READ#
The portfolio in numbers, as it stands now: parcels, the units that bill them, assessed value by state, and what the open appeals might save. Needs PARCEL_READ as well as REPORT_READ.
Example
{
portfolioSummary {
assessedValueAsOf
jurisdictionCount
parcelCount
totalAssessedValue
appealUpside {
appealsWithoutRate
basisDecidedAppeals
modeled
openAppeals
realizedRatio
}
byState {
assessedValue
parcelCount
state
}
}
}queryreportCatalogAny key#
The reports that can be produced, with their columns, in the order the app shows them. The same for every caller.
Example
{
reportCatalog {
name
category
columns
description
formats
kind
scopes
}
}queryreportJobNeeds REPORT_READ#
One requested report, by id. Null when it is not visible to you.
Arguments
idID!requiredThe report job's id, as requestReport returned it.
Example
query ($id: ID!) {
reportJob(id: $id) {
id
name
status
byteSize
downloadUrl
error
filterDescription
finishedAt
requestedBy {
id
name
email
}
}
}queryreportJobsNeeds REPORT_READ#
Reports requested over this portfolio, newest first.
Arguments
firstIntdefault 20How many: 20 when omitted, at most 100.
Example
{
reportJobs {
id
name
status
byteSize
downloadUrl
error
filterDescription
finishedAt
requestedBy {
id
name
email
}
}
}queryruleReportsNeeds PARCEL_READ#
The reports filed about rules from this portfolio, newest first, up to 100, with each one's status.
Example
{
ruleReports {
id
status
assessmentYear
createdAt
evidenceUrl
problem
resolution
resolvedAt
jurisdiction {
id
name
assesses
billDelivery
bills
}
reportedBy {
id
name
email
}
}
}querysearchNeeds PARCEL_READ#
Search the portfolio for parcels, units and documents at once. Fewer than two characters returns three empty lists.
Arguments
firstIntdefault 8How many per list: 8 when omitted, at most 20.
queryString!requiredWhat to look for.
Example
query ($query: String!) {
search(query: $query) {
parcels {
id
parcelNumber
status
useCode
}
jurisdictions {
id
name
assesses
billDelivery
bills
}
}
}queryteamSigned-in people only#
The people of your own firm who can sign in, by name. For people signed in to the app; a request made with a key is refused.
Example
{
team {
id
name
email
tenant {
id
name
kind
}
}
}queryviewerAny key#
Who this request acts as: the signed-in person, or the service user the API key stands for.
Example
{
viewer {
id
name
email
tenant {
id
name
kind
}
}
}