> ## Documentation index
> Fetch the complete index at: /llms.txt
> Use it to discover every page before exploring further.

# Types

> Every type a query or mutation reaches: objects, inputs, enums, unions, interfaces and scalars.

## Objects

### ActivityEvent

`object`

One line of a parcel's activity trail: what happened, when, and who did it. Every change made through the app or the API writes one, and so does every fetch.

Fields:

- `actor` ([`User`](/docs/types.md#user)): The person who acted. Null when retrieve-IQ acted on its own, as for a nightly fetch.
- `at` ([`DateTime!`](/docs/types.md#datetime)): When it happened.
- `id` (`ID!`): The id of this record. Not a Node id: node does not accept it.
- `payload` ([`JSON`](/docs/types.md#json)): The details as structured data. The shape depends on the event.
- `summary` (`String!`): The event in one sentence.

### Address

`object`

The property's street address, as the county publishes it. Every field may be null; a county's record is not always complete.

Fields:

- `city` (`String`): The city.
- `county` (`String`): The county, where the county publishes it.
- `line1` (`String`): The street address.
- `line2` (`String`): A suite or unit, where there is one.
- `postalCode` (`String`): The ZIP code.
- `state` (`String`): The two-letter state code.

### ApiKey

`object`, implements `Node`, signed-in people only

One of your firm's API keys. Its secret was shown once, when it was created; only its first characters are kept, to tell it apart.

Fields:

- `createdAt` ([`DateTime!`](/docs/types.md#datetime)): When it was created.
- `expiresAt` ([`DateTime`](/docs/types.md#datetime)): When it stops working. Null for a key with no last day.
- `id` (`ID!`): The id: opaque, stable, and what node, nodes and every argument that takes an id accept.
- `lastUsedAt` ([`DateTime`](/docs/types.md#datetime)): When it was last used, to the minute. Null until it has been.
- `name` (`String!`): What it is for, as named when it was created.
- `prefix` (`String!`): riq_ and the next eight characters of the secret, to tell keys apart.
- `revokedAt` ([`DateTime`](/docs/types.md#datetime)): When it was revoked. Null while it stands.
- `scopes` ([`[Scope!]!`](/docs/types.md#scope)): What the key may do, within what the firm itself may do.
- `status` ([`ApiKeyStatus!`](/docs/types.md#apikeystatus)): Whether it works.

### ApiKeyCreated

`object`

A new key and its secret, which this is the only chance to see.

Fields:

- `apiKey` ([`ApiKey!`](/docs/types.md#apikey)): The key.
- `secret` (`String!`): The secret, shown once and never stored. Put it where your system will read it now.

### Appeal

`object`, implements `Node`, needs `PARCEL_READ`

An appeal of one assessment year, recorded and tracked: open, filed, decided or withdrawn, and changed in place while it is open or filed (updateAppeal). Its evidence is the APPEAL_EVIDENCE_PACK report, for one appeal or several. Hearings are not tracked.

Fields:

- `assessedValue` ([`Money`](/docs/types.md#money)): The value as first certified for the year. Null when no assessment is held for it.
- `assessmentYear` (`Int!`): The year of the assessed value under appeal.
- `createdAt` ([`DateTime!`](/docs/types.md#datetime)): When it was recorded.
- `deadlineOn` ([`Date`](/docs/types.md#date)): The last day to file. Null where the unit sets it from an event whose date is not on record; deadlineReason says why.
- `deadlineReason` (`String`): Why deadlineOn is null, in words. Null when there is a date.
- `deadlineSource` (`String`): rule, when the date came from the unit's filing window; user, when a person entered it.
- `decidedOn` ([`Date`](/docs/types.md#date)): When it was decided. Null until it is.
- `decidedValue` ([`Money`](/docs/types.md#money)): The value the board set. Null until decided.
- `filedOn` ([`Date`](/docs/types.md#date)): When it was filed. Null until it is.
- `id` (`ID!`): The id: opaque, stable, and what node, nodes and every argument that takes an id accept.
- `note` (`String`): A note for whoever reads the appeal next.
- `openedBy` ([`User`](/docs/types.md#user)): The person who recorded it.
- `parcel` ([`Parcel!`](/docs/types.md#parcel)): The parcel under appeal.
- `payableYear` (`Int!`): The year the bill on that value falls due.
- `requestedValue` ([`Money`](/docs/types.md#money)): The value the appeal asks for. Null when none was recorded.
- `ruleDeadlineOn` ([`Date`](/docs/types.md#date)): When the unit's rules say the window closes, whatever date the appeal holds (updateAppeal with deadlineFromRule puts it back); null where the rules give no exact date.
- `savings` ([`Money`](/docs/types.md#money)): The tax saved, as entered from the corrected bill. Null means not yet known, never zero.
- `status` ([`AppealStatus!`](/docs/types.md#appealstatus)): Where the appeal stands.
- `valueReduction` ([`Money`](/docs/types.md#money)): The assessed value minus the decided value; negative when the board raised it. Null until decided, or without an assessment.
- `version` (`Int!`): Moves on every change to the appeal. updateAppeal, updateAppealStatus and recordAppealOutcome take the version their caller read as expectedVersion, and are refused with CONFLICT when it has moved.

### AppealRequirement

`object`

What an appeal filing needs beyond its dates, with the provision that states it and the source it comes from; a requirement nobody sourced is absent, never guessed. Each one is looked up through the unit, its parent and its state, the nearest answering.

Fields:

- `citation` (`String`): The provision, as the source numbers it.
- `code` (`String!`): The requirement's stable key within its unit.
- `effectiveFromYear` (`Int!`): The first assessment year it governs.
- `effectiveToYear` (`Int`): The last assessment year it governs; null while it still does.
- `history` ([`[RequirementVersion!]!`](/docs/types.md#requirementversion)): Earlier versions of it, newest first. Empty for one that never changed.
- `jurisdiction` ([`Jurisdiction!`](/docs/types.md#jurisdiction)): The unit that holds the requirement.
- `recordedAt` ([`DateTime!`](/docs/types.md#datetime)): When this version was written.
- `requirement` (`String!`): The requirement in a sentence or two.
- `source` (`String!`): Where it comes from.
- `sourceUrl` (`String`): A link to the source itself, where one exists.
- `topic` ([`AppealRequirementTopic!`](/docs/types.md#appealrequirementtopic)): What part of the filing it is about.
- `verifiedAt` ([`Date`](/docs/types.md#date)): When a person last confirmed it; null means nobody has.
- `verifiedBy` (`String`): Who confirmed it.
- `version` (`Int!`): How many times it has changed, counting from 1.

### AppealRule

`object`

The appeal filing window for one assessment year, from the unit's own rules, then its parent's, then the state's. opensOn and closesOn are the rules as recorded (a fixed day, an event plus a number of days, an nth weekday, or the later or the earlier of two); the dates are what they yield for the year; reason says in words why the close has no date. What a filing needs beyond its dates (the board, the form, an agent's authorization) is Jurisdiction.appealRequirements, and the source behind each rule is Jurisdiction.rules.

Fields:

- `closesOn` (`String`): The closing rule as recorded. Null when none is recorded, or the unit sets the date each year.
- `closesOnDate` (`String`): The last day to file, YYYY-MM-DD. Null when the rule does not yield a date; never guessed.
- `opensOn` (`String`): The opening rule as recorded. Null when none is recorded, or the unit sets the date each year.
- `opensOnDate` (`String`): The first day to file, YYYY-MM-DD. Null when the rule does not yield a date.
- `qualifier` (`String`): exact, or no_earlier_than or no_later_than when one side of a later-of or earlier-of rule is an event whose date is not on record: a bound, not the deadline.
- `reason` (`String`): Why closesOnDate is null, in plain words.
- `resolvedFrom` ([`Jurisdiction`](/docs/types.md#jurisdiction)): The unit whose rule answered: the unit itself, its parent, or the state.
- `source` (`String`): Where the closing rule came from: the statute or the unit's own notice.
- `verifiedAt` (`String`): When a person last confirmed the closing rule. Null means not yet verified.

### AppealUpside

`object`

An estimate of what the open appeals could save, never a promise: over open and filed appeals, the reduction requested times the share of it your decided appeals achieved, times each parcel's effective tax rate. An appeal missing one of those inputs is left out of the sum and counted.

Fields:

- `appealsWithoutRate` (`Int!`): Open appeals left out for want of an assessed value, a requested value or a billed year to take a rate from.
- `basisDecidedAppeals` (`Int!`): Decided appeals the achieved share was learned from.
- `modeled` ([`Money`](/docs/types.md#money)): The estimate. Null with no decided appeals to learn from, or nothing to sum.
- `openAppeals` (`Int!`): Appeals at OPEN or FILED.
- `realizedRatio` (`Float`): Achieved reduction over requested reduction, across decided appeals.

### Assessment

`object`, implements `Node`, needs `PARCEL_READ`

A parcel's assessed value for one year, as the assessing unit certified it.

Fields:

- `assessmentYear` (`Int!`): The year the value was set, which an appeal contests.
- `certifiedOn` ([`Date`](/docs/types.md#date)): When the unit certified the value, where known.
- `id` (`ID!`): The id: opaque, stable, and what node, nodes and every argument that takes an id accept.
- `improvementValue` ([`Money!`](/docs/types.md#money)): The assessed value of the buildings and other improvements.
- `landValue` ([`Money!`](/docs/types.md#money)): The assessed value of the land.
- `payableYear` (`Int!`): The year the bill on this value falls due: the same year in most states, the year after in some (Cook County, Illinois).
- `revision` (`Int!`): Zero today for every assessment: a value read again replaces the figure on the same revision. Higher revisions are reserved for a correction recorded as one.
- `totalValue` ([`Money!`](/docs/types.md#money)): Land plus improvements.

### AutomaticAcceptance

`object`

How a bill was accepted without a person: read exactly from the county, every check passed, not a $0 bill, and close to last year's.

Fields:

- `at` ([`DateTime!`](/docs/types.md#datetime)): When the nightly fetch accepted it.
- `reason` (`String!`): Why, in words for the customer.

### BillConnection

`object`

A page of bills.

Fields:

- `edges` ([`[BillConnectionEdge!]!`](/docs/types.md#billconnectionedge)): The page's records, each with the cursor that continues from it.
- `pageInfo` ([`PageInfo!`](/docs/types.md#pageinfo)): Whether more follows, and the cursor to continue from.
- `totalCount` (`Int!`): Bills matching the filter, across every page.

### BillConnectionEdge

`object`

One bill on a page.

Fields:

- `cursor` (`String!`): Pass this as after to continue from this record.
- `node` ([`TaxBill!`](/docs/types.md#taxbill)): The record.

### BillEntryPayload

`object`

What entering a bill did: its outcome, a sentence saying what happened, and the installments of the bill stored.

Fields:

- `installments` ([`[TaxBillInstallment!]!`](/docs/types.md#taxbillinstallment)): The installments of the bill stored, in order. Empty unless the outcome is STORED.
- `message` (`String!`): What happened, in a sentence the person reads.
- `outcome` ([`BillEntryOutcome!`](/docs/types.md#billentryoutcome)): Whether a bill was stored, kept as evidence only, or already on file.

### BillingLevelCount

`object`

How many units of one level send a property tax bill of their own.

Fields:

- `count` (`Int!`): How many units of that level send a bill.
- `level` (`String!`): The kind of unit: county, city, town, township, school_district and so on.

### BillReviewPayload

`object`

What a review did. bill is the bill as it stands after it, with the version a next call sends back. notVisible lists the installment ids it did not act on: not visible to you, or not at a status the action moves from; the API does not say which. A bill that changed after you read it is not a payload but a CONFLICT error, and nothing is written. If the response also carries an error, the whole request was undone and nothing changed.

Fields:

- `bill` ([`TaxBill`](/docs/types.md#taxbill)): The bill after the review. Null when none of the installments named was visible.
- `notVisible` (`[ID!]!`): The installment ids the review could not act on. Empty when it acted on every one.

### CalendarFeed

`object`, implements `Node`, needs `PARCEL_READ`

A subscribable calendar (iCal) of the portfolio's dates. Its URL carries a secret and is shown once, when the feed is created; revoking the feed keeps this record and ends the URL.

Fields:

- `createdAt` ([`DateTime!`](/docs/types.md#datetime)): When it was created.
- `createdBy` ([`User`](/docs/types.md#user)): The person who created it.
- `id` (`ID!`): The id: opaque, stable, and what node, nodes and every argument that takes an id accept.
- `label` (`String!`): Where it is used, as named when it was created.
- `lastFetchedAt` ([`DateTime`](/docs/types.md#datetime)): When a calendar app last read it. Null until one has.
- `revokedAt` ([`DateTime`](/docs/types.md#datetime)): When it was revoked. Null while it is in force.

### CalendarFeedCreated

`object`

A new feed and, this once, the URL that carries its secret.

Fields:

- `feed` ([`CalendarFeed!`](/docs/types.md#calendarfeed)): The feed.
- `url` (`String!`): Subscribe to this in Outlook, Google Calendar or Apple Calendar. It is not shown again.

### CountyIngestionStatus

`object`

What the nightly fetch did in one county: the newest outcome, when the county last answered (with a bill, or with NOT_FOUND), the current run of failures, and the last day's attempts.

Fields:

- `attempts24h` (`Int!`): Attempts in the last 24 hours.
- `failures24h` (`Int!`): Of those, how many failed.
- `jurisdiction` ([`Jurisdiction!`](/docs/types.md#jurisdiction)): The county.
- `lastAnsweredAt` ([`DateTime`](/docs/types.md#datetime)): When the county last answered, with a bill or with NOT_FOUND.
- `lastAttemptAt` ([`DateTime`](/docs/types.md#datetime)): When a fetch was last attempted there.
- `lastOutcome` ([`IngestOutcome`](/docs/types.md#ingestoutcome)): How the newest attempt ended.
- `lastSuccessAt` ([`DateTime`](/docs/types.md#datetime)): When a bill was last fetched there.
- `parcels` (`Int!`): Parcels of the portfolio in the county.
- `streak` (`Int!`): How many attempts in a row have failed, counting back from the newest. Zero when the county answered last.

### CountyOutstanding

`object`

One unit that bills a parcel in the portfolio (a county, a township, a school district), and what is owed to it. The rows are billing units of any level, under a name kept for compatibility.

Fields:

- `amountOutstanding` ([`OutstandingTotal!`](/docs/types.md#outstandingtotal)): What is owed to this unit, and how complete that figure is. Needs BILL_READ.
- `jurisdiction` ([`Jurisdiction!`](/docs/types.md#jurisdiction)): The unit that bills, which need not be the unit that assesses the parcel.
- `parcelCount` (`Int!`): Distinct parcels this unit bills. A parcel billed by three units counts once in each.

### Coverage

`object`

Where bills can be fetched, by state and by county, from the registry of taxing units and their sites.

Fields:

- `counties` ([`[CoverageUnit!]!`](/docs/types.md#coverageunit)): Every unit with a county FIPS code, for a county map: the county-level units, Alaska's census areas and the regions that stand for counties where the county does not govern (Connecticut, Massachusetts, Rhode Island).
- `countyTotals` ([`CoverageCounts!`](/docs/types.md#coveragecounts)): The county-level units only, which is the headline figure: counties, parishes, independent cities and Alaska's boroughs.
- `states` ([`[StateCoverage!]!`](/docs/types.md#statecoverage)): By state, in code order.
- `totals` ([`CoverageCounts!`](/docs/types.md#coveragecounts)): Every registered unit in the country.
- `units` ([`[CoverageUnit!]!`](/docs/types.md#coverageunit)): The named units, of any level; a code the registry does not hold is left out. At most 500 at a time.
  - `unitCodes` (`[String!]!`, required): Unit codes, as Jurisdiction.unitCode has them.

### CoverageCounts

`object`

Units counted by coverage status. The statuses add up to units.

Fields:

- `assessmentOnly` (`Int!`): At ASSESSMENT_ONLY.
- `closed` (`Int!`): At CLOSED.
- `covered` (`Int!`): At COVERED.
- `noPortal` (`Int!`): At NO_PORTAL.
- `notSurveyed` (`Int!`): At NOT_SURVEYED.
- `other` (`Int!`): At OTHER.
- `portalFound` (`Int!`): At PORTAL_FOUND.
- `readerReady` (`Int!`): At READER_READY.
- `retired` (`Int!`): At RETIRED.
- `units` (`Int!`): All of them.

### CoverageUnit

`object`

One taxing unit and whether its bills can be fetched.

Fields:

- `assesses` (`Boolean!`): Whether the unit sets assessed values.
- `bills` (`Boolean!`): Whether the unit sends a property tax bill of its own.
- `countyLevel` (`Boolean!`): A county, parish, independent city or one of Alaska's boroughs: the units the headline figure counts.
- `fips` (`String`): The five-digit county FIPS code, for a county or its equivalent.
- `level` (`String!`): The kind of unit: county, city, town, township, school_district and so on.
- `name` (`String!`): As the unit names itself.
- `portals` ([`[Portal!]!`](/docs/types.md#portal)): Every site recorded for the unit, the one that decided the status first.
- `state` (`String!`): The two-letter state code.
- `status` ([`CoverageStatus!`](/docs/types.md#coveragestatus)): Whether the unit's bills can be fetched.
- `unitCode` (`String!`): The code of the unit, as Jurisdiction.unitCode has it.
- `vendor` (`String`): The software behind the site that decided the status.

### Deadline

`object`, implements `Node`

A payment or appeal date, worked out from a bill or from the unit's rules and saved, so that a change to it is traced and a person can acknowledge it. The saved dates are brought up to date when someone who may read bills reads them after the portfolio, a bill or a rule changed; a date that moved keeps a trace of the one it replaced, and starts unacknowledged.

Fields:

- `acknowledgedAt` ([`DateTime`](/docs/types.md#datetime)): When a person acknowledged this date; null until then, and again once the date moves.
- `acknowledgedBy` ([`User`](/docs/types.md#user)): The person who acknowledged it.
- `assessmentYear` (`Int!`): The assessment year the date belongs to.
- `exposure` ([`Money`](/docs/types.md#money)): What is at stake: the balance still owed, for a payment date. Null when the balance is unknown, and for an appeal date; never read a null as zero. The dates are read with PARCEL_READ; the balance is bill data. Needs BILL_READ.
- `generatedAt` ([`DateTime!`](/docs/types.md#datetime)): When this date was worked out.
- `id` (`ID!`): The id: opaque, stable, and what node, nodes and every argument that takes an id accept.
- `jurisdiction` ([`Jurisdiction!`](/docs/types.md#jurisdiction)): For a payment date: the unit the bill is owed to. For an appeal date: the unit that assesses the parcel and hears the appeal, or, for the unit's own window, the unit itself.
- `kind` ([`DeadlineKind!`](/docs/types.md#deadlinekind)): What the date is.
- `on` ([`Date`](/docs/types.md#date)): The date. Null when the rule could not be evaluated; unevaluableReason says why.
- `paidPerRecords` (`Boolean!`): True for a payment date whose installment the county publishes no payment figure for and the customer's own records show paid in full: the date stays, marked, since the county has not confirmed it. Bill data, as exposure is. Needs BILL_READ.
- `parcel` ([`Parcel`](/docs/types.md#parcel)): The parcel the date belongs to. Null for a date that belongs to the unit rather than to a parcel: the unit's own appeal window, which stands whichever parcels it assesses.
- `qualifier` (`String`): For an appeal date: exact, or no_earlier_than or no_later_than when one side of a later-of or earlier-of rule is an event whose date is not on record. A bound, not the deadline.
- `resolvedFrom` ([`Jurisdiction`](/docs/types.md#jurisdiction)): For an appeal date: the unit whose rule answered (the unit, its parent, or the state).
- `source` (`String!`): BILL for a payment date read off a bill; JURISDICTION_RULE for an appeal window from the assessing unit's rules.
- `supersedes` ([`DeadlineChange`](/docs/types.md#deadlinechange)): The date or reason this one replaced, when it moved; null for a date that never changed.
- `taxAccount` ([`TaxAccount`](/docs/types.md#taxaccount)): For a payment date: the account the bill belongs to. Null for an appeal date, which belongs to the parcel however many units bill it.
- `unevaluableReason` (`String`): Why there is no date, in words.

### DeadlineChange

`object`

What a saved date replaced when it moved: the date or the reason it had before, which explains a change a subscribed calendar shows.

Fields:

- `on` ([`Date`](/docs/types.md#date)): The date it had before; null when it had none.
- `unevaluableReason` (`String`): Why it had no date before, when it had none.

### DeadlineGeneration

`object`

When the saved dates were last worked out from the bills and rules, and whether a change since is waiting on it.

Fields:

- `generatedAt` ([`DateTime`](/docs/types.md#datetime)): When the dates were last generated. Null before the first time: the portfolio has no dates yet.
- `stale` (`Boolean!`): A change saved since generatedAt (a bill, a correction, a payment, a parcel, a night's fetch, or a rule or notice date the appeal windows are worked out from) is not in the dates yet. They are regenerated when someone who may read bills next opens them; a reader who may not reads them as they stand.

### Document

`object`, implements `Node`, needs `BILL_READ`

A file held as evidence: the page a county served when the bill was fetched. The bytes are fetched from contentPath, not through GraphQL.

Fields:

- `byteSize` (`Int`): Its size in bytes, where known.
- `contentPath` (`String!`): GET this path, with the same Authorization and X-Engagement-ID headers, to read the bytes. HTML from a county is served in a sandbox.
- `extractions` ([`[Extraction!]!`](/docs/types.md#extraction)): Every reading of the document.
- `fileRemovedAt` ([`DateTime`](/docs/types.md#datetime)): When the file was removed, seven years after it arrived, whether a person uploaded it or it was read from a county site. Null while it is kept. What was read from it stays, and so does the record that it was removed.
- `filename` (`String!`): The name it was fetched or uploaded under.
- `hasBill` (`Boolean!`): Whether a bill was read from this document, by the product or entered by hand. A tax bill without one is evidence a person may enter by hand (enterBill).
- `id` (`ID!`): The id: opaque, stable, and what node, nodes and every argument that takes an id accept.
- `kind` ([`DocumentKind!`](/docs/types.md#documentkind)): What the document is.
- `mediaType` (`String`): What the file is, as recognised from its bytes when it arrived; null for a document kept from before that was recorded.
- `pageCount` (`Int`): Its page count, for a PDF.
- `parcel` ([`Parcel!`](/docs/types.md#parcel)): The parcel the document belongs to.
- `receivedAt` ([`DateTime!`](/docs/types.md#datetime)): When it arrived.
- `receivedVia` (`String!`): How it arrived: portal for a page read from the unit's site, upload for a file a person added. email and sftp are reserved.
- `sourceUrl` (`String`): The county page it was fetched from. Null for an upload.
- `uploadedBy` ([`User`](/docs/types.md#user)): The person who uploaded it; null for a document read from the unit's site.

### DocumentLink

`object`

A link that opens one document's bytes without a header, until expiresAt. Re-authorized when opened: an engagement that ended in between opens nothing.

Fields:

- `expiresAt` ([`DateTime!`](/docs/types.md#datetime)): When the link stops opening: five minutes after it was made.
- `path` (`String!`): Where the document opens, on this API's host. It holds the link's secret.

### DocumentUploadLink

`object`

Where to send the bytes: PUT them to uploadPath with the same bearer token, once, before expiresAt. Shown once.

Fields:

- `expiresAt` ([`DateTime!`](/docs/types.md#datetime)): When the link stops taking the bytes: fifteen minutes after it was made.
- `maxBytes` (`Int!`): The largest file this environment takes.
- `method` (`String!`): The HTTP method to send them with: PUT.
- `uploadPath` (`String!`): Where to send the bytes, on this API's host. It holds the link's secret, so it is shown once.

### Engagement

`object`, implements `Node`

A firm's permission to work on a client's portfolio: which scopes, from when, and until when. Name one on a request with the X-Engagement-ID header.

Fields:

- `agent` ([`Tenant!`](/docs/types.md#tenant)): The firm that works on it.
- `approvalRecorded` (`Boolean!`): Whether authorisedOn, authorisationRef and grantedBy are all on record. False means the engagement was approved before approvals were recorded.
- `authorisationRef` (`String`): Where the written approval is kept: a reference, never the document.
- `authorisedOn` ([`Date`](/docs/types.md#date)): The day the client gave its written approval; null on an engagement approved before approvals were recorded.
- `client` ([`Tenant!`](/docs/types.md#tenant)): The client whose portfolio it is.
- `effectiveFrom` ([`Date!`](/docs/types.md#date)): The first day the engagement is in force.
- `effectiveTo` ([`Date`](/docs/types.md#date)): The last day the engagement is in force. Null for one with no end date.
- `engagementId` (`ID!`): The value to send in the X-Engagement-ID header. Not the same as id.
- `grantedBy` (`String`): Who at the client gave the approval, as written on it.
- `id` (`ID!`): The id: opaque, stable, and what node, nodes and every argument that takes an id accept.
- `live` (`Boolean!`): Whether the engagement is in force today: not revoked, begun and not yet ended. One that has lapsed or been revoked is still listed, so the client is not mistaken for a deleted one, but a request under it is refused with FORBIDDEN.
- `revokedAt` ([`DateTime`](/docs/types.md#datetime)): When it was revoked; null while it stands. A revoked engagement is not live whatever its dates say.
- `revokedReason` (`String`): Why it was revoked, as recorded when it was.
- `scopes` ([`[Scope!]!`](/docs/types.md#scope)): What the firm may do for this client. A key may do what both its own scopes and the engagement's allow.

### ExtractedField

`object`

One figure a reading took: which figure it is, the text as printed, and where it was printed when that was recorded.

Fields:

- `bbox` (`[Float!]`): Where on that page: [left, top, right, bottom] as fractions of the page's width and height, from its top-left corner.
- `confidence` (`Float`): Null when the reading is exact: a county's own text read by its reader, or a person's entry. A number in [0, 1] only from a model.
- `elementId` (`String`): The element of the county's HTML page it was read from.
- `key` (`String!`): Which figure it is, as a path: "totalBilled", "installments.amountDue", "lineItems.amount".
- `ordinal` (`Int!`): Which one, for a figure that repeats: an installment's number, a charge's place from 1.
- `page` (`Int`): The page it was printed on, from 1, for a PDF.
- `value` (`String!`): The figure as printed, or as the person entered it.

### Extraction

`object`, implements `Node`, needs `BILL_READ`

One reading of a document: who or what read it and when, whether it could be believed and why not, and the figures it took with where each was printed. A document keeps all its readings, oldest first; a correction is the next one.

Fields:

- `createdAt` ([`DateTime!`](/docs/types.md#datetime)): When the reading was made.
- `createdBy` ([`User`](/docs/types.md#user)): The person, for a reading a person made; null for one the product made.
- `engine` (`String`): A short code for the program that read the document; null for a reading a person made.
- `error` (`String`): Why the reading could not be believed, when it could not.
- `fields` ([`[ExtractedField!]!`](/docs/types.md#extractedfield)): The figures it took, each with where it was printed.
- `id` (`ID!`): The id: opaque, stable, and what node, nodes and every argument that takes an id accept.
- `pages` ([`[PageSize!]`](/docs/types.md#pagesize)): The size of each page it read, for a PDF, so each figure can be shown where it was printed.
- `reviewedAt` ([`DateTime`](/docs/types.md#datetime)): When a person confirmed the reading.
- `reviewedBy` ([`User`](/docs/types.md#user)): The person who confirmed it.
- `state` ([`ExtractionState!`](/docs/types.md#extractionstate)): How far the reading has got.
- `version` (`Int!`): Its place among the document's readings, oldest first.

### FeedRun

`object`

One night of the feed for one client: its fetch, the files produced and delivered, and how it went. Read under the client's engagement.

Fields:

- `deliveredTo` (`String`): Where the files went: an SFTP host, an S3 bucket or a folder.
- `feedName` (`String!`): The feed, as named in its setup.
- `finishedAt` ([`DateTime`](/docs/types.md#datetime)): When it finished. Null while it runs.
- `id` (`ID!`): The id of this record. Not a Node id: node does not accept it.
- `message` (`String`): What happened, in words, when something did.
- `outcome` ([`FeedOutcome!`](/docs/types.md#feedoutcome)): How it ended.
- `startedAt` ([`DateTime!`](/docs/types.md#datetime)): When the night started.

### InboxSummary

`object`

The inbox in numbers: what arrived this week, what could not be read, and what waits, by status.

Fields:

- `beingChecked` (`Int!`): Bills retrieve-IQ is checking before you act on them (TaxBill.retrieveIqCheck). They are not in the queue.
- `disputed` (`Int!`): Waiting bills with an installment flagged for the client, which makes the bill DISPUTED.
- `failedExtractionsThisWeek` (`Int!`): Of this week's pages, how many could not be read: nothing was taken from them, and each needs a look.
- `needsReview` (`Int!`): Waiting bills at NEEDS_REVIEW.
- `receivedThisWeek` (`Int!`): Bill pages and files received in the last seven days.
- `withheld` (`Int!`): Waiting bills an ERROR check stands against.

### Jurisdiction

`object`, implements `Node`

A taxing unit: a county, a city, a township, a school district, a special district, or a state. A unit may assess property, bill it, or both. The same registry for every caller.

Fields:

- `appealRequirements` ([`[AppealRequirement!]!`](/docs/types.md#appealrequirement)): What an appeal filed here for that assessment year needs beyond its dates: the form, the agent's authorization, what the application says, where it goes. Empty when nothing is recorded.
  - `assessmentYear` (`Int!`, required): The assessment year the appeal is about.
- `appealRule` ([`AppealRule!`](/docs/types.md#appealrule)): The appeal filing window for an assessment year, from the unit's own rules, then its parent's, then the state's.
  - `assessmentYear` (`Int!`, required): The assessment year the window belongs to.
- `assesses` (`Boolean!`): Whether this unit sets assessed values and hears appeals.
- `billDelivery` ([`BillDelivery!`](/docs/types.md#billdelivery)): How the unit makes its bill available.
- `bills` (`Boolean!`): Whether this unit sends a property tax bill of its own.
- `fipsCode` (`String`): The five-digit county FIPS code, for a county or its equivalent.
- `id` (`ID!`): The id: opaque, stable, and what node, nodes and every argument that takes an id accept.
- `installmentsPerYear` (`Int!`): How many installments the unit splits its annual bill into.
- `kind` (`String!`): The office that collects the tax, as the unit names it: "Treasurer-tax collector".
- `level` (`String!`): What the unit is: state, county, independent_city, city, town, township, village, borough, parish, school_district, special_district or region. A state holds statewide defaults and neither assesses nor bills.
- `name` (`String!`): As the unit names itself: "Los Angeles County".
- `parcelCount` (`Int!`): How many parcels of the portfolio this unit assesses or bills, which is what ParcelFilter.jurisdictionIds returns for it. Not the number of parcels in the unit.
- `rules` ([`[JurisdictionRule!]!`](/docs/types.md#jurisdictionrule)): Every kind of dated rule for an assessment year, in the order a filing season runs, each with the evidence behind it. A kind nobody recorded is listed as NOT_RECORDED, never left out.
  - `assessmentYear` (`Int!`, required): The assessment year to work the rules out for.
- `state` (`String!`): The two-letter state code.
- `unitCode` (`String!`): A stable code for the unit: US-CA-FIPS-06007 for a county with a Census code, US-CA-STATE for a state, a code of the state's own scheme for a unit below the county.

### JurisdictionRule

`object`

One kind of rule for one assessment year, worked out exactly as the deadlines are: from the unit's own rules, then its parent's, then the state's, the covering rule with the latest first year winning within a unit, the weekend rule applied. date is never invented: status says why there is none, and reason says it in words. row is the stored rule that answered, with its source; rows is every rule of this kind the unit, its parent and its state hold, so the answer is seen beside the rules it took over from.

Fields:

- `assessmentYear` (`Int!`): The assessment year it was worked out for.
- `date` (`String`): YYYY-MM-DD, after the weekend rule; null unless status is DATED or BOUND.
- `kind` ([`RuleKind!`](/docs/types.md#rulekind)): Which dated rule it is.
- `qualifier` (`String`): exact, or no_earlier_than / no_later_than for a BOUND date.
- `reason` (`String`): Why there is no date, in plain words.
- `resolvedFrom` ([`Jurisdiction`](/docs/types.md#jurisdiction)): The unit whose row answered.
- `row` ([`RuleRow`](/docs/types.md#rulerow)): The stored rule that answered; null when none is recorded.
- `rows` ([`[RuleRow!]!`](/docs/types.md#rulerow)): Every stored rule of this kind the unit, its parent and its state hold, the one that answered among them.
- `status` ([`RuleStatus!`](/docs/types.md#rulestatus)): Whether there is a date, and if not, why not.
- `unadjustedDate` (`String`): The date the rule itself names, when the weekend rule moved it (a Saturday, Sunday or federal holiday); null when nothing moved.

### LegalEntity

`object`, implements `Node`, needs `PARCEL_READ`

An owner of record: the company or other entity the parcels are held under.

Fields:

- `id` (`ID!`): The id: opaque, stable, and what node, nodes and every argument that takes an id accept.
- `name` (`String!`): The name on the roll.
- `taxIdLast4` (`String`): The last four digits of the tax identification number on file, or null when none is. The whole number is never returned.

### LegalEntityHolding

`object`

One owner of record in the portfolio and what it holds: the breakdown by owner beside the one by billing unit. Its parcels, their assessed value counted the overview's way (the newest assessment of each active parcel), and what is owed on their bills.

Fields:

- `amountOutstanding` ([`OutstandingTotal!`](/docs/types.md#outstandingtotal)): What is owed on the bills of the entity's parcels, counted as amountOutstanding counts: unknown and withheld installments set aside and said. Needs BILL_READ.
- `assessedValue` ([`Money!`](/docs/types.md#money)): The newest assessment of each of the entity's active parcels, summed: the same rule as PortfolioSummary.totalAssessedValue, so the entities add up to it. "0.00" when none is assessed.
- `assessedValueAsOf` (`Int`): The newest assessment year behind that figure. Null when none of its parcels is assessed.
- `legalEntity` ([`LegalEntity!`](/docs/types.md#legalentity)): The owner of record.
- `parcelCount` (`Int!`): Every parcel filed to the entity, whatever its status: what the parcel list filtered by the entity shows.

### LegalEntityPayload

`object`

The owner of record after the change.

Fields:

- `legalEntity` ([`LegalEntity!`](/docs/types.md#legalentity)): As it stands now, with the last four digits of its number.

### OutstandingTotal

`object`

A balance and how complete it is. A single number would claim more than is known: a county that publishes no payment figures adds nothing to the sum, and leaving that out silently would understate what is owed.

Fields:

- `installmentCount` (`Int!`): How many installments the figure covers. Zero means no bills are held, which is not the same as owing nothing.
- `installmentsPaidPerRecords` (`Int!`): Of the installments with no published payment, how many the customer's own records show paid in full. Said beside the figure, never added into it: the county has not confirmed them.
- `installmentsWithUnknownPayment` (`Int!`): Installments left out because the county publishes no payment figure for them.
- `known` ([`Money!`](/docs/types.md#money)): The sum over the installments whose payment figure the county reports.
- `withheldCount` (`Int!`): Installments left out because a check stands against their bill: pending review, neither settled nor unknown.

### PageInfo

`object`

Where a page sits in its list: whether more follows, and the cursor to continue from.

Fields:

- `endCursor` (`String`): The last record's cursor: pass it as after for the next page.
- `hasNextPage` (`Boolean!`): Whether another page follows this one.
- `hasPreviousPage` (`Boolean!`): Whether a page precedes this one.
- `startCursor` (`String`): The first record's cursor.

### PageSize

`object`

The size of a page a reading read, in points (a point is 1/72 of an inch).

Fields:

- `height` (`Float!`): Its height in points.
- `width` (`Float!`): Its width in points.

### Parcel

`object`, implements `Node`, needs `PARCEL_READ`

A property in the portfolio: its number and address, the unit that assesses it, the units that bill it, and its assessments, bills, dates and appeals.

Fields:

- `activity` ([`[ActivityEvent!]!`](/docs/types.md#activityevent)): The parcel's activity trail, newest first.
  - `first` (`Int`, default 20): How many events: 20 when omitted, at most 50.
- `amountOutstanding` ([`OutstandingTotal!`](/docs/types.md#outstandingtotal)): What is still owed on this parcel, and how complete that figure is. Needs BILL_READ.
- `appeals` ([`[Appeal!]!`](/docs/types.md#appeal)): Every appeal recorded on the parcel, newest year first.
- `assessments` ([`[Assessment!]!`](/docs/types.md#assessment)): The assessments on record, newest year first.
  - `last` (`Int`, default 6): How many years: 6 when omitted, at most 12.
- `bills` ([`[TaxBill!]!`](/docs/types.md#taxbill)): The parcel's bills, newest year first. Needs BILL_READ.
  - `last` (`Int`, default 6): How many bills: 6 when omitted, at most 24.
- `currentAssessment` ([`Assessment`](/docs/types.md#assessment)): The newest assessment on record. Null until one is held.
- `deadlines` ([`[Deadline!]!`](/docs/types.md#deadline)): The parcel's payment and appeal dates: one per installment, and the appeal window of the newest year that has a bill. A parcel with no bill yet has no appeal dates.
- `documents` ([`[Document!]!`](/docs/types.md#document)): Every document held for this parcel, newest first. Needs BILL_READ.
  - `kind` ([`DocumentKind`](/docs/types.md#documentkind)): Only documents of this kind.
- `id` (`ID!`): The id: opaque, stable, and what node, nodes and every argument that takes an id accept.
- `jurisdiction` ([`Jurisdiction!`](/docs/types.md#jurisdiction)): The unit that assesses the parcel and hears its appeals. The units that bill it are on taxAccounts.
- `legalEntity` ([`LegalEntity!`](/docs/types.md#legalentity)): The owner of record the parcel is held under.
- `nextPayment` ([`Deadline`](/docs/types.md#deadline)): The soonest payment date that costs money if ignored: a penalty date already passed with a balance known to be owed, otherwise the earliest penalty or due date from today on. A passed date whose payment the county does not publish is not returned. Null when nothing is owed or coming.
- `parcelNumber` (`String!`): As the county writes it: the APN in California.
- `situsAddress` ([`Address!`](/docs/types.md#address)): The property's street address.
- `status` ([`ParcelStatus!`](/docs/types.md#parcelstatus)): Where the parcel stands in the portfolio.
- `taxAccounts` ([`[TaxAccount!]!`](/docs/types.md#taxaccount)): The units that bill this property and the numbers they know it by: active first, then oldest first. Empty for a parcel whose billing units are not yet known.
- `useCode` (`String`): The county's use code for the property, where it publishes one.

### ParcelCandidate

`object`

A parcel offered for a number or an address that matched none exactly: the same number in another county or held twice, the same digits without the leading zeros a spreadsheet drops, a check digit or suffix, an address that agrees. Taken only by a person, never by itself.

Fields:

- `parcel` ([`Parcel!`](/docs/types.md#parcel)): The parcel offered.
- `reasons` (`[String!]!`): Why it was offered, in words.
- `score` (`Float!`): In [0, 1], to order the candidates; it decides nothing.

### ParcelConnection

`object`

A page of parcels.

Fields:

- `edges` ([`[ParcelConnectionEdge!]!`](/docs/types.md#parcelconnectionedge)): The page's records, each with the cursor that continues from it.
- `pageInfo` ([`PageInfo!`](/docs/types.md#pageinfo)): Whether more follows, and the cursor to continue from.
- `totalCount` (`Int!`): Parcels matching the filter, across every page.

### ParcelConnectionEdge

`object`

One parcel on a page.

Fields:

- `cursor` (`String!`): Pass this as after to continue from this record.
- `node` ([`Parcel!`](/docs/types.md#parcel)): The record.

### ParcelImportPayload

`object`

What the import did.

Fields:

- `created` (`Int!`): Parcels added.
- `dryRun` (`Boolean!`): True when nothing was written.
- `existing` (`Int!`): Rows whose parcel was already held; nothing changed for them.
- `legalEntity` ([`LegalEntity`](/docs/types.md#legalentity)): The owner of record the parcels were held under. Null on a dry run.
- `rejected` ([`[ParcelImportRejection!]!`](/docs/types.md#parcelimportrejection)): Rows that were not imported, with the reason for each.

### ParcelImportRejection

`object`

A row that was not imported, and why.

Fields:

- `index` (`Int!`): Which row: zero-based, into the rows given.
- `reason` (`String!`): Why it was rejected, in words.

### PaymentImportPayload

`object`

What a list of payments did: how many rows were recorded, how many were already on record, and which were refused.

Fields:

- `alreadyRecorded` (`Int!`): Rows that named an observation already on record; nothing was written for them.
- `dryRun` (`Boolean!`): True when nothing was written.
- `recorded` (`Int!`): Rows recorded; on a dry run, the rows that would be.
- `rejected` ([`[PaymentImportRejection!]!`](/docs/types.md#paymentimportrejection)): Rows that could not be recorded, by index in the input, with the reason.

### PaymentImportRejection

`object`

A row that could not be recorded, and why.

Fields:

- `candidates` ([`[ParcelCandidate!]!`](/docs/types.md#parcelcandidate)): When the row's number matched no parcel exactly, or more than one: the parcels it may mean, strongest first, for a person to choose by sending the row again with parcelId.
- `index` (`Int!`): Its place in the rows sent, from 0.
- `reason` (`String!`): Why it was refused, in words.

### PaymentObservation

`object`

One entry in the customer's own payment records for an installment: kept beside the county's published figure, never merged into it. Append-only; a wrong entry is reversed by an adjustment.

Fields:

- `amount` ([`Money!`](/docs/types.md#money)): Positive for a payment or a refund; signed for an adjustment.
- `effectiveDate` ([`Date!`](/docs/types.md#date)): The day the money moved.
- `id` (`ID!`): The entry, for telling one from another. Not a Node id.
- `kind` ([`PaymentKind!`](/docs/types.md#paymentkind)): A payment, a refund or an adjustment.
- `note` (`String`): A note recorded with it.
- `recordedAt` ([`DateTime!`](/docs/types.md#datetime)): When it was recorded.
- `recordedBy` ([`User`](/docs/types.md#user)): The person who recorded it, or who sent the list it came in with.
- `reference` (`String`): A check number, a confirmation, a ledger line.
- `source` ([`PaymentSource!`](/docs/types.md#paymentsource)): Whether a person recorded it or a list brought it in.

### Portal

`object`

One of a unit's sites for bills, or the recorded reason there is none.

Fields:

- `discoveredOn` ([`Date`](/docs/types.md#date)): When the site was first recorded.
- `host` (`String`): The site's host name.
- `ready` (`Boolean!`): Supported and waiting only for a final live check.
- `reason` ([`UnreachableReason`](/docs/types.md#unreachablereason)): Why it cannot be fetched from, when it cannot.
- `status` ([`PortalStatus!`](/docs/types.md#portalstatus)): Its standing.
- `url` (`String`): Where bills are looked up. Null when there is no site.
- `vendor` (`String`): The software the site runs, by name.
- `verifiedOn` ([`Date`](/docs/types.md#date)): When a bill was last fetched from it in a live check.

### PortfolioSummary

`object`

The portfolio in numbers: how many parcels, how many units bill them, what they are assessed at, and what the open appeals might save.

Fields:

- `appealUpside` ([`AppealUpside!`](/docs/types.md#appealupside)): An estimate of what the open appeals could save.
- `assessedValueAsOf` (`Int`): The newest assessment year behind that figure. Null when nothing is assessed.
- `byState` ([`[StateRollup!]!`](/docs/types.md#staterollup)): The same, by state.
- `jurisdictionCount` (`Int!`): Distinct units that bill a parcel in the portfolio: the number of rows countiesInPortfolio returns. A Pennsylvania parcel counts three.
- `parcelCount` (`Int!`): Parcels in the portfolio.
- `totalAssessedValue` ([`Money!`](/docs/types.md#money)): The total of the newest assessed values.

### RecordPaymentPayload

`object`

The installment the payment was recorded against, as it stands after it.

Fields:

- `installment` ([`TaxBillInstallment!`](/docs/types.md#taxbillinstallment)): The installment, with its payment records.
- `recorded` (`Boolean!`): False when the same observation was already on record.

### ReportCatalogEntry

`object`

One report that can be produced, and the formats it comes in.

Fields:

- `category` ([`ReportCategory!`](/docs/types.md#reportcategory)): Which group it belongs to.
- `columns` (`[String!]!`): The column headers, in order.
- `description` (`String!`): What it contains.
- `formats` ([`[ReportFormat!]!`](/docs/types.md#reportformat)): The formats it can be produced in; requestReport refuses any other.
- `kind` ([`ReportKind!`](/docs/types.md#reportkind)): The value to request it by.
- `name` (`String!`): Its name, as the app shows it.
- `scopes` ([`[Scope!]!`](/docs/types.md#scope)): The scopes the report reads with, needed beside REPORT_READ to request it: a key or an engagement without one of them is refused, and a report already queued fails if its access loses one before it runs.

### ReportJob

`object`, implements `Node`, needs `REPORT_READ`

A report that was requested: queued, running, done (with a download), failed (with the reason in words), or expired (the file has been removed; request it again).

Fields:

- `byteSize` (`Int`): The size of the file in bytes, once done.
- `downloadUrl` (`String`): GET this path, with the same Authorization and X-Engagement-ID headers, to save the file. Only while DONE; null otherwise.
- `error` (`String`): Why it failed, in a sentence: the access it was requested under ended or does not cover the report, or it could not be produced and should be requested again. Quote the job id when you ask retrieve-IQ about it.
- `filterDescription` (`String!`): Which parcels the report covers, in words: a county, an owner or an appeal by its name where you may read it.
- `finishedAt` ([`DateTime`](/docs/types.md#datetime)): When it finished, done or failed. Null before that.
- `format` ([`ReportFormat!`](/docs/types.md#reportformat)): The file format asked for.
- `id` (`ID!`): The id: opaque, stable, and what node, nodes and every argument that takes an id accept.
- `kind` ([`ReportKind!`](/docs/types.md#reportkind)): Which report.
- `name` (`String!`): The report's name.
- `requestedAt` ([`DateTime!`](/docs/types.md#datetime)): When it was requested.
- `requestedBy` ([`User`](/docs/types.md#user)): Who requested it.
- `rowCount` (`Int`): How many rows the report holds, once done.
- `status` ([`ReportJobStatus!`](/docs/types.md#reportjobstatus)): Where the report is.

### RequirementVersion

`object`

An earlier version of a filing requirement, as it stood before a change replaced it.

Fields:

- `citation` (`String`): The provision it cited then.
- `recordedAt` ([`DateTime!`](/docs/types.md#datetime)): When this version was written.
- `requirement` (`String!`): The requirement as it read then.
- `source` (`String!`): Where it came from then.
- `sourceUrl` (`String`): A link to that source, where one existed.
- `supersededAt` ([`DateTime!`](/docs/types.md#datetime)): When the next version replaced it.
- `verifiedAt` ([`Date`](/docs/types.md#date)): When a person had last confirmed it; null meant nobody had.
- `verifiedBy` (`String`): Who had confirmed it.
- `version` (`Int!`): Which version it was, counting from 1.

### ResolveValidationPayload

`object`

The resolved check, and the bill after it.

Fields:

- `bill` ([`TaxBill`](/docs/types.md#taxbill)): The bill after the resolution, no longer withheld if this was the last check standing.
- `validation` ([`Validation!`](/docs/types.md#validation)): The check, now resolved.

### RetrieveIqCheck

`object`

retrieve-IQ is checking this bill against the county before anyone acts on it. Accepting, flagging and rejecting it are refused until the check is done.

Fields:

- `note` (`String`): The words of whoever reported it, or retrieve-IQ's.
- `reason` ([`RetrieveIqCheckReason!`](/docs/types.md#retrieveiqcheckreason)): Why retrieve-IQ is checking it.
- `since` ([`DateTime!`](/docs/types.md#datetime)): When retrieve-IQ began checking it.

### RuleReport

`object`, implements `Node`, needs `PARCEL_READ`

A person's report that a rule or a filing requirement is wrong, filed from the rules screen. shown is what the product said when it was filed, as the server read it then.

Fields:

- `assessmentYear` (`Int!`): The assessment year it is about.
- `createdAt` ([`DateTime!`](/docs/types.md#datetime)): When it was filed.
- `evidenceUrl` (`String`): Where they saw the right value, if they said.
- `id` (`ID!`): The id: opaque, stable, and what node, nodes and every argument that takes an id accept.
- `jurisdiction` ([`Jurisdiction!`](/docs/types.md#jurisdiction)): The unit whose rule the report is about.
- `problem` (`String!`): What the person said is wrong.
- `reportedBy` ([`User`](/docs/types.md#user)): The person who filed it.
- `resolution` (`String`): What the people who maintain the rules found.
- `resolvedAt` ([`DateTime`](/docs/types.md#datetime)): When it was answered; null while it is open.
- `ruleVersion` (`Int`): The version of the rule row the report was filed against; null when no row was recorded.
- `shown` ([`JSON!`](/docs/types.md#json)): The rule or requirement as the product showed it at filing: expression, date, status, source, version.
- `status` ([`RuleReportStatus!`](/docs/types.md#rulereportstatus)): Where it stands.
- `subject` ([`RuleReportSubject!`](/docs/types.md#rulereportsubject)): What it is about.
- `suggested` (`String`): What they said it should be, if they said.

### RuleRow

`object`

One stored rule: a unit, a kind and the assessment years it governs (never payable years: an appeal contests an assessment), with where it came from and who confirmed it. version counts its changes; history holds every earlier version.

Fields:

- `answers` (`Boolean!`): Whether this is the row that answers for the year asked about.
- `effectiveFromYear` (`Int!`): The first assessment year the row governs.
- `effectiveToYear` (`Int`): The last assessment year it governs; null while it still does.
- `expression` (`String`): The rule as written (07-02, 11-30+1y, assessment_notice + 30d, 4th tuesday of may, later_of(a, b)). Null means confirmed to be set locally each year.
- `history` ([`[RuleVersion!]!`](/docs/types.md#ruleversion)): Earlier versions of this row, newest first. Empty for a row that never changed.
- `jurisdiction` ([`Jurisdiction!`](/docs/types.md#jurisdiction)): The unit that holds the row: the unit itself, its parent, or the state.
- `kind` ([`RuleKind!`](/docs/types.md#rulekind)): Which dated rule it is.
- `note` (`String`): A note on the rule from the people who maintain the rules.
- `recordedAt` ([`DateTime!`](/docs/types.md#datetime)): When this version was written.
- `source` (`String!`): Where the rule came from, as the dataset names it.
- `sourceUrl` (`String`): A link to the source itself, where one exists.
- `verifiedAt` ([`Date`](/docs/types.md#date)): When a person last confirmed the row against its source; null means nobody has.
- `verifiedBy` (`String`): Who confirmed it.
- `version` (`Int!`): How many times the row has changed, counting from 1.
- `weekendRule` ([`WeekendRule!`](/docs/types.md#weekendrule)): What happens to a date on a weekend or a holiday.

### RuleVersion

`object`

An earlier version of a stored rule, as it stood before a change replaced it. The change may be the rule, its source, or a person confirming it.

Fields:

- `effectiveToYear` (`Int`): The last assessment year it governed then; null meant it still did.
- `expression` (`String`): The rule as it was written then; null meant set locally each year.
- `note` (`String`): Its note then.
- `recordedAt` ([`DateTime!`](/docs/types.md#datetime)): When this version was written.
- `source` (`String!`): Where the rule came from then.
- `sourceUrl` (`String`): A link to that source, where one existed.
- `supersededAt` ([`DateTime!`](/docs/types.md#datetime)): When the next version replaced it.
- `verifiedAt` ([`Date`](/docs/types.md#date)): When a person had last confirmed it against its source; null meant nobody had.
- `verifiedBy` (`String`): Who had confirmed it.
- `version` (`Int!`): Which version it was, counting from 1.
- `weekendRule` ([`WeekendRule!`](/docs/types.md#weekendrule)): What it did with a date on a weekend or a holiday.

### SearchResults

`object`

Three answers to one search: parcels by number or address, units you hold property in, and documents by filename.

Fields:

- `documents` ([`[Document!]!`](/docs/types.md#document)): Documents whose filename matches. Empty, not an error, for a key without BILL_READ.
- `jurisdictions` ([`[Jurisdiction!]!`](/docs/types.md#jurisdiction)): Units whose name matches and that the portfolio holds parcels in. Needs PARCEL_READ.
- `parcels` ([`[Parcel!]!`](/docs/types.md#parcel)): Parcels whose number or address matches. Needs PARCEL_READ.

### StateCoverage

`object`

One state's (or DC's) units by coverage status.

Fields:

- `billers` ([`[BillingLevelCount!]!`](/docs/types.md#billinglevelcount)): The units that send a bill of their own, by level, most first. In Connecticut these are towns and cities, not counties.
- `counts` ([`CoverageCounts!`](/docs/types.md#coveragecounts)): Every unit in the state.
- `countyCounts` ([`CoverageCounts!`](/docs/types.md#coveragecounts)): The county-level units only: counties, parishes, independent cities and Alaska's boroughs.
- `name` (`String!`): The state's name.
- `state` (`String!`): The two-letter code.

### StateRollup

`object`

The portfolio in one state.

Fields:

- `assessedValue` ([`Money!`](/docs/types.md#money)): The total of their newest assessed values.
- `parcelCount` (`Int!`): Parcels in the state.
- `state` (`String!`): The two-letter state code.

### TaxAccount

`object`, implements `Node`, needs `PARCEL_READ`

One billing relationship on a parcel: the unit that sends a bill and the number it knows the property by. A California parcel has one, under its county; a Pennsylvania parcel has three, for its county, township and school district. Bills belong to accounts; assessments and appeals belong to the parcel.

Fields:

- `accountNumber` (`String!`): The unit's own identifier for the property: the APN in California, block and lot in New Jersey, the control number in Pennsylvania, the SBL in New York.
- `createdAt` ([`DateTime!`](/docs/types.md#datetime)): When the account was recorded.
- `id` (`ID!`): The id: opaque, stable, and what node, nodes and every argument that takes an id accept.
- `jurisdiction` ([`Jurisdiction!`](/docs/types.md#jurisdiction)): The unit that bills the property under this account.
- `origin` (`String!`): How the account came to be known: parcel (created with the parcel, for the unit that assesses it), import, api, fetch (a county record named the other units that bill the property), reference (the registry of taxing units), or a value beginning backfill for accounts recorded before origins were kept.
- `parcel` ([`Parcel!`](/docs/types.md#parcel)): The parcel the account is on.
- `status` ([`TaxAccountStatus!`](/docs/types.md#taxaccountstatus)): Whether the unit still bills the property under this account.

### TaxBill

`object`, needs `BILL_READ`

A bill as a taxpayer means it: one account's charges for one year, one bill type and one bill number, from the unit that sent it. Its installments are what reviews act on, and each has an id; the bill itself has a key.

Fields:

- `acceptedAutomatically` ([`AutomaticAcceptance`](/docs/types.md#automaticacceptance)): Set when the nightly fetch accepted this bill without a person, with the reason. Null when a person accepted it or it is not accepted.
- `amountOutstanding` ([`OutstandingTotal`](/docs/types.md#outstandingtotal)): What is still owed on the bill, and how complete that figure is. Null while the bill is withheld, as totalBilled is.
- `annualTotal` ([`Money`](/docs/types.md#money)): The annual total as the county stated it: the figure the charges and the installments are checked against. Null where the county printed none, and while withheld.
- `assessmentYear` (`Int!`): The year of the assessed value the bill is based on.
- `billNumber` (`String`): The county's own bill number. Null where the county publishes none.
- `billType` ([`BillType!`](/docs/types.md#billtype)): Which roll the bill is on.
- `charges` ([`[TaxCharge!]!`](/docs/types.md#taxcharge)): The county's charges for the year, which belong to the bill and not to one installment. They add up to chargesTotal.
- `chargesTotal` ([`Money`](/docs/types.md#money)): The charges summed: what the year is made of. Null while withheld.
- `installments` ([`[TaxBillInstallment!]!`](/docs/types.md#taxbillinstallment)): The bill's installments, first first.
- `installmentsTotal` ([`Money`](/docs/types.md#money)): The installments summed: what is owed and when, as the county split the year, which may carry penalty a county folded into an installment (penaltyIncluded). Null while withheld.
- `key` (`ID!`): Tells the bills of one parcel apart, each revision its own. Opaque and stable across requests; not an id that node or bill accepts.
- `paidPerRecords` ([`Money`](/docs/types.md#money)): What the customer's own records say was paid on the whole bill: the sum over its installments. Null when no installment has anything on record.
- `parcel` ([`Parcel!`](/docs/types.md#parcel)): The parcel the bill is for.
- `payableYear` (`Int!`): The year the bill falls due.
- `penaltyIncluded` ([`Money`](/docs/types.md#money)): Penalty a county folded into an installment's amount (penaltyBasis INCLUDED_IN_AMOUNT_DUE), summed over the installments. Already inside installmentsTotal and the balance, and never added again. Null when no installment carries one.
- `retrieveIqCheck` ([`RetrieveIqCheck`](/docs/types.md#retrieveiqcheck)): Set while retrieve-IQ is checking this bill before the customer acts on it. Null otherwise.
- `revision` (`Int!`): Zero for the bill as the unit first issued it. When the unit re-issues it with other charges (on a page that lists none, another total), or a person corrects a reading, the new figures are the next revision, waiting for review under a key of its own; the revision they replace is kept as evidence, SUPERSEDED or REJECTED, and counted nowhere. A change that leaves the charges as they were (a payment posted, interest grown, a date printed) updates the same revision.
- `sourceDocument` ([`Document`](/docs/types.md#document)): The county page or uploaded file the bill was read from.
- `status` ([`BillStatus!`](/docs/types.md#billstatus)): The bill's review status, taken from its installments: the one most in need of attention speaks for the bill. Never a payment status: amountOutstanding and paidPerRecords say what is known of payment.
- `taxAccount` ([`TaxAccount!`](/docs/types.md#taxaccount)): The account the bill was sent under: which unit sent it, and the number it knows the property by.
- `totalBilled` ([`Money`](/docs/types.md#money)): The sum of the installments, the same figure as installmentsTotal. Null, never "0.00", while the bill is withheld: the installments still show their figures, this does not add them up.
- `validations` ([`[Validation!]!`](/docs/types.md#validation)): Every check run against this bill, across its installments: those still standing first, then warnings, then the ones a person or a later run settled.
- `version` (`Int!`): Moves whenever anything about this bill changes: a decision, a figure, a date, a charge, its stated total. Every review mutation takes the version its caller read as expectedVersion, and is refused with CONFLICT when it has moved. Not the revision.
- `withheld` (`Boolean!`): True while an unresolved ERROR check stands against the bill. A withheld bill's figures are shown on its installments for the reviewer and left out of every total until a person resolves the check or rejects the bill.
- `withheldReason` (`String`): The codes of the checks that stand, comma separated, while withheld. Null otherwise.

### TaxBillInstallment

`object`, implements `Node`, needs `BILL_READ`

One installment of a bill: what is payable, when, and what is left. Reviews act on installments, so each has an id of its own.

Fields:

- `amountDue` ([`Money!`](/docs/types.md#money)): What the county asks for this installment.
- `amountOutstanding` ([`Money`](/docs/types.md#money)): What is left to pay. Null when the payment figure or the penalty convention is unknown; never read a null as zero.
- `amountPaid` ([`Money`](/docs/types.md#money)): What the county reports paid. Null when the county publishes no payment figure (Los Angeles and Orange do not), which is not the same as zero.
- `delinquentAfter` ([`Date`](/docs/types.md#date)): The last day to pay before a penalty is added, which is the date the county warns taxpayers about.
- `dueDate` ([`Date!`](/docs/types.md#date)): The date the installment falls due by statute (November 1 and February 1 in California). Not the last day to pay.
- `id` (`ID!`): The id: opaque, stable, and what node, nodes and every argument that takes an id accept.
- `installmentLabel` (`String!`): As the county labels it: "1st", "2nd", "Annual".
- `installmentNo` (`Int`): Its position on the bill, 1 for the first. Null where the bill does not number it.
- `paidPerRecords` ([`Money`](/docs/types.md#money)): What the customer's own records say was paid on this installment: payments less refunds, adjustments signed. Null when nothing is on record, which is not a paid figure of zero. Shown beside amountPaid, the county's figure, never in its place.
- `paymentKnown` (`Boolean!`): Whether the county publishes a payment figure for this installment.
- `payments` ([`[PaymentObservation!]!`](/docs/types.md#paymentobservation)): The customer's own payment records for this installment, oldest first.
- `penalty` ([`Money`](/docs/types.md#money)): The penalty the county adds after delinquentAfter, where it publishes one.
- `penaltyBasis` ([`PenaltyBasis`](/docs/types.md#penaltybasis)): Whether amountDue already includes the penalty or the penalty is added to it. Null where the county does not say.
- `status` ([`BillStatus!`](/docs/types.md#billstatus)): The installment's review status. Never a payment status: amountPaid and paymentKnown carry the county's word, paidPerRecords the customer's own records.
- `withheld` (`Boolean!`): True for every installment of a withheld bill (TaxBill.withheld).

### TaxCharge

`object`

One line on the county's bill. The lines describe the whole year, not any one installment.

Fields:

- `agencyPhone` (`String`): That agency's phone number, where the county prints it.
- `amount` ([`Money!`](/docs/types.md#money)): The amount of the line for the year.
- `chargeType` ([`ChargeType`](/docs/types.md#chargetype)): What kind of charge it is. Null where the county does not say; never guessed.
- `description` (`String!`): The line as the county prints it.
- `id` (`ID!`): The id of this record. Not a Node id: node does not accept it.
- `levyingAgency` (`String`): The agency the charge is levied for, where the county names it.
- `rate` (`String`): The rate the county prints for the line, where it prints one.

### Tenant

`object`, implements `Node`

An organisation: a firm that works for taxpayers, or a taxpayer whose parcels are held.

Fields:

- `id` (`ID!`): The id: opaque, stable, and what node, nodes and every argument that takes an id accept.
- `kind` (`String!`): agent_firm, a firm that works for taxpayers under engagements, or taxpayer, an organisation that holds property of its own.
- `name` (`String!`): The organisation's name.

### UpsertParcelPayload

`object`

The parcel, and whether this call added it.

Fields:

- `created` (`Boolean!`): False when the parcel was already held; nothing changed.
- `parcel` ([`Parcel!`](/docs/types.md#parcel)): The parcel, as held now.

### User

`object`, implements `Node`

A person at a firm, or the service user an API key acts as.

Fields:

- `email` (`String!`): The person's email address.
- `id` (`ID!`): The id: opaque, stable, and what node, nodes and every argument that takes an id accept.
- `name` (`String!`): The person's name, or the key's name for a service user.
- `tenant` ([`Tenant!`](/docs/types.md#tenant)): The firm the person belongs to, never the client being acted for.

### Validation

`object`, implements `Node`, needs `BILL_READ`

One check run against one bill: what it expected, what it found, and whether a person resolved it or a later run cleared it, with everything that happened to it since. An unresolved, uncleared ERROR withholds the bill.

Fields:

- `clearedAt` ([`DateTime`](/docs/types.md#datetime)): When a later run of the check passed. The check stays as history.
- `code` (`String!`): Which check it is, as a stable code: apn_mismatch, year_over_year_jump and so on.
- `createdAt` ([`DateTime!`](/docs/types.md#datetime)): When the check first made the finding.
- `expected` (`String`): What the check expected to find.
- `history` ([`[ValidationEvent!]!`](/docs/types.md#validationevent)): Everything that happened to this check, oldest first: found, changed, resolved (who and why), reopened, cleared, found again.
- `id` (`ID!`): The id: opaque, stable, and what node, nodes and every argument that takes an id accept.
- `installment` ([`TaxBillInstallment!`](/docs/types.md#taxbillinstallment)): The installment the check ran against.
- `message` (`String!`): The finding, in words.
- `observed` (`String`): What it found.
- `resolutionNote` (`String`): The words of the resolution that stands now; null when none stands. Every resolution's words stay in history.
- `resolvedAt` ([`DateTime`](/docs/types.md#datetime)): When a person accepted the discrepancy; null while no resolution stands.
- `resolvedBy` ([`User`](/docs/types.md#user)): The person who accepted it.
- `ruleVersion` (`String`): The version of the checks that made the finding; null for a finding made before versions were recorded.
- `severity` ([`Severity!`](/docs/types.md#severity)): How much the finding matters.

### ValidationEvent

`object`, needs `BILL_READ`

One thing that happened to a check, with the check's severity and figures at that moment. Kept for good: a resolution a later run set aside stays here with its person and words.

Fields:

- `at` ([`DateTime!`](/docs/types.md#datetime)): When it happened.
- `by` ([`User`](/docs/types.md#user)): The person, for RESOLVED; null for everything else.
- `expected` (`String`): What the check expected to find at that moment.
- `kind` ([`ValidationEventKind!`](/docs/types.md#validationeventkind)): What happened.
- `note` (`String`): Their words, for RESOLVED.
- `observed` (`String`): What it found at that moment.
- `reconstructed` (`Boolean!`): Pieced together from the check and the activity trail when the history began, not written as it happened: its figures are the check's as they stood then.
- `ruleVersion` (`String`): The version of the checks that ran; null where it was not recorded.
- `severity` ([`Severity!`](/docs/types.md#severity)): The check's severity at that moment.

## Inputs

### AddressInput

`input`

The property's street address as you know it. Every field optional. A fetch fills in a blank street line from the unit's record and changes nothing you gave.

Fields:

- `city` (`String`): The city.
- `line1` (`String`): The street address.
- `line2` (`String`): A suite or unit, where there is one.
- `postalCode` (`String`): The ZIP code.
- `state` (`String`): The two-letter state code. The county's state when omitted.

### BillCorrectionInput

`input`

A reading corrected by hand: the installments to change, and the charges when they were misread too. The installments must add up to the charges, or the correction is refused.

Fields:

- `charges` ([`[ChargeCorrectionInput!]`](/docs/types.md#chargecorrectioninput)): Replaces the reading's charges when given; left out, they carry over.
- `installments` ([`[InstallmentCorrectionInput!]!`](/docs/types.md#installmentcorrectioninput), required): The installments to change, each by its id.

### BillEntryInput

`input`

A bill entered by hand from its page: its year and type, its installments and the charges it lists. The installments must add up to the charges, or the entry is refused.

Fields:

- `assessmentYear` (`Int!`, required): The year of the assessed value the bill is based on.
- `billNumber` (`String`): The county's own number for the bill, when it prints one.
- `billType` ([`BillType!`](/docs/types.md#billtype), required): Which kind of bill it is.
- `charges` ([`[ChargeCorrectionInput!]!`](/docs/types.md#chargecorrectioninput), required): The charges it lists for the year.
- `installments` ([`[BillEntryInstallmentInput!]!`](/docs/types.md#billentryinstallmentinput), required): Its installments, as it prints them.

### BillEntryInstallmentInput

`input`

One installment as the bill prints it.

Fields:

- `amountDue` ([`Money!`](/docs/types.md#money), required): What the bill asks for it.
- `delinquentAfter` ([`Date`](/docs/types.md#date)): The date after which the county adds a penalty, when the bill prints one.
- `dueDate` ([`Date!`](/docs/types.md#date), required): When it is due.
- `installmentNo` (`Int!`, required): Its number on the bill, from 1.

### BillInboxFilter

`input`

Which bills the inbox lists.

Fields:

- `jurisdictionIds` (`[ID!]`): Bills sent by any of these units. Narrower than ParcelFilter.jurisdictionIds: filtering by a school district returns that district's bills, not the county's and the township's for the same parcel.
- `search` (`String`): Bills whose parcel number, street address, city or county bill number contains this text.
- `view` ([`BillInboxView`](/docs/types.md#billinboxview)): WAITING when omitted.
- `withheldOnly` (`Boolean`): Only bills an ERROR check stands against.

### ChargeCorrectionInput

`input`

One charge as the bill prints it.

Fields:

- `amount` ([`Money!`](/docs/types.md#money), required): What the bill charges for it.
- `chargeType` ([`ChargeType`](/docs/types.md#chargetype)): What kind of charge it is, if you know.
- `description` (`String!`, required): The charge as the bill names it: "General levy", "Flood control".

### InstallmentCorrectionInput

`input`

One installment of the bill with the figures to change. A field left out keeps what the reading had.

Fields:

- `amountDue` ([`Money`](/docs/types.md#money)): What the county asks for it.
- `amountPaid` ([`Money`](/docs/types.md#money)): Null when the county publishes no payment figure.
- `delinquentAfter` ([`Date`](/docs/types.md#date)): The date after which the county adds a penalty, when the bill prints one.
- `dueDate` ([`Date`](/docs/types.md#date)): When it is due.
- `installmentId` (`ID!`, required): The installment, as the bill lists it.

### ParcelFilter

`input`

Which parcels to list. Every condition given must hold.

Fields:

- `assessedValueMin` ([`Money`](/docs/types.md#money)): Parcels whose current total assessed value is at least this.
- `hasOpenAppeal` (`Boolean`): True: parcels with an appeal at OPEN or FILED; false: parcels without one.
- `jurisdictionIds` (`[ID!]`): Parcels assessed by, or billed by, any of these units.
- `legalEntityIds` (`[ID!]`): Parcels held under any of these owners of record.
- `search` (`String`): Parcels whose number or address contains this text.
- `states` (`[String!]`): Parcels in any of these states, by two-letter code.
- `status` ([`ParcelStatus`](/docs/types.md#parcelstatus)): Parcels at this status.

### ParcelImportInput

`input`

A whole spreadsheet at once, under one owner of record: an existing one by id, or one found or created by name. Every row is checked before anything is written, and the accepted rows land together; dryRun checks and writes nothing.

Fields:

- `dryRun` (`Boolean`, default false): True to check the rows and write nothing.
- `legalEntityId` (`ID`): An existing owner of record, by id. Either this or legalEntityName.
- `legalEntityName` (`String`): An owner of record by name, found or created. Either this or legalEntityId.
- `rows` ([`[ParcelImportRowInput!]!`](/docs/types.md#parcelimportrowinput), required): The rows, at most 500.

### ParcelImportRowInput

`input`

One row of a parcel spreadsheet: the county and the parcel number, and optionally the state, the street address, city and ZIP code. A row that names no state is California's.

Fields:

- `city` (`String`): The city.
- `county` (`String!`, required): The county by name, as people write it.
- `parcelNumber` (`String!`, required): As the county writes it.
- `situsLine1` (`String`): The street address.
- `state` (`String`): The county's two-letter state. California when left out.
- `zip` (`String`): The ZIP code.

### ParcelInput

`input`

One parcel to add. Name the unit that assesses it by jurisdictionId, or name its county, with the state outside California; exactly one of the two.

Fields:

- `county` (`String`): The county by name, as people write it: "Los Angeles", with or without "County", "Orleans Parish", "Richmond city".
- `jurisdictionId` (`ID`): The id of the unit that assesses the parcel, from jurisdictions.
- `legalEntityId` (`ID!`, required): The owner of record to hold it under, from legalEntities.
- `parcelNumber` (`String!`, required): As the county writes it.
- `situs` ([`AddressInput`](/docs/types.md#addressinput)): The street address, if known.
- `state` (`String`): The county's two-letter state, when the county is named. California when left out.
- `useCode` (`String`): The county's use code, if known.

### ParcelOrder

`input`

How to order the parcel list.

Fields:

- `direction` ([`OrderDirection!`](/docs/types.md#orderdirection), required): Which way.
- `field` ([`ParcelOrderField!`](/docs/types.md#parcelorderfield), required): What to order by.

### PaymentImportInput

`input`

A whole list of payments at once. Every row is checked, the good ones land as one transaction, and a row already recorded is counted, not recorded twice; dryRun checks and writes nothing.

Fields:

- `dryRun` (`Boolean`): True to check every row and write nothing.
- `rows` ([`[PaymentImportRowInput!]!`](/docs/types.md#paymentimportrowinput), required): The payments, one a row.

### PaymentImportRowInput

`input`

A row of a payment spreadsheet: which parcel (by number, with the county when the number is held in more than one), which year and installment, how much and when.

Fields:

- `amount` ([`Money!`](/docs/types.md#money), required): How much: positive for a payment or a refund, signed for an adjustment.
- `assessmentYear` (`Int!`, required): The assessment year of the bill paid.
- `county` (`String`): The county by name. Needed only when the portfolio holds that parcel number in more than one county.
- `installmentNo` (`Int!`, required): Which installment of that bill, from 1.
- `kind` ([`PaymentKind`](/docs/types.md#paymentkind)): PAYMENT when left out.
- `paidOn` ([`Date!`](/docs/types.md#date), required): The day the money moved.
- `parcelId` (`ID`): A person's choice of parcel for a row whose number did not match one exactly, usually from the candidates a check offered. The import's trail records the row, the number it gave, the parcel chosen and how the two numbers relate.
- `parcelNumber` (`String!`, required): As the county writes it.
- `reference` (`String`): A check number, a confirmation, a ledger line.
- `state` (`String`): The county's two-letter state; California when left out.

### ReportFilter

`input`

Which parcels the report covers: the conditions of ParcelFilter apart from assessedValueMin, with status as text, or named appeals. Omitted, the whole portfolio.

Fields:

- `appealIds` (`[ID!]`): Only these appeals and the parcels they are on: the evidence pack for one appeal is APPEAL_EVIDENCE_PACK with one id here. Each must be an appeal you can read; at most 200.
- `hasOpenAppeal` (`Boolean`): True: parcels with an appeal at OPEN or FILED; false: parcels without one.
- `jurisdictionIds` (`[ID!]`): Parcels assessed by, or billed by, any of these units.
- `legalEntityIds` (`[ID!]`): Parcels held under any of these owners of record.
- `search` (`String`): Parcels whose number or address contains this text.
- `states` (`[String!]`): Parcels in any of these states, by two-letter code.
- `status` (`String`): Parcels at this status: a ParcelStatus value, such as ACTIVE.

### ReportRuleInput

`input`

What is wrong with a rule or a requirement, in your words. The server records what the screen showed for that rule and year itself.

Fields:

- `assessmentYear` (`Int!`, required): The assessment year the rule was shown for.
- `evidenceUrl` (`String`): Where you saw the right value: an http or https link.
- `jurisdictionId` (`ID!`, required): The unit whose rule is wrong (a Jurisdiction id).
- `problem` (`String!`, required): What is wrong, up to 2,000 characters.
- `requirementCode` (`String`): For a REQUIREMENT: its code, as appealRequirements gives it.
- `subject` ([`RuleReportSubject!`](/docs/types.md#rulereportsubject), required): What is wrong: one kind of dated rule, or a requirement.
- `suggested` (`String`): What it should say, if you know: up to 500 characters.

### StartDocumentUploadInput

`input`

What is about to be uploaded: the link is bound to these, and the bytes must agree with them.

Fields:

- `byteSize` (`Int!`, required): Its exact size in bytes.
- `filename` (`String!`, required): Its name, with its extension: .pdf, .csv or .xlsx.
- `kind` ([`DocumentKind!`](/docs/types.md#documentkind), required): What the document is, as it will be filed on the parcel.
- `parcelId` (`ID!`, required): The parcel the document belongs to.

## Enums

### ApiKeyStatus

`enum`

Whether a key works.

Values:

- `ACTIVE`: It works.
- `EXPIRED`: Its last day has passed.
- `REVOKED`: A person ended it. The record stays.

### AppealAction

`enum`

The moves updateAppealStatus makes. A decision is recorded with recordAppealOutcome instead.

Values:

- `FILE`: Mark it filed, with the date.
- `REOPEN`: Reopen a withdrawn appeal.
- `WITHDRAW`: Withdraw it.

### AppealRequirementTopic

`enum`

What part of a filing a requirement is about.

Values:

- `AGENT`: Filing for the owner.
- `BOARD`: Who hears the appeal and where it is filed.
- `CONTENT`: What the application must state.
- `FILING`: When a filing counts as on time.
- `FORM`: The application.
- `OTHER_DEADLINE`: Filing periods the dated rules do not cover, such as a supplemental assessment's.
- `SIGNATURE`: How it is signed.

### AppealStatus

`enum`

Where an appeal stands.

Values:

- `DECIDED`: Decided; the outcome is recorded. Final.
- `FILED`: Filed with the board, awaiting a decision.
- `OPEN`: Recorded, not yet filed.
- `WITHDRAWN`: Withdrawn before a decision. It can be reopened.

### BillDelivery

`enum`

How a unit makes its bill available.

Values:

- `EMAIL`: Sent by email. Reserved: no unit is recorded with it yet.
- `MAILED_PDF`: Mailed on paper. Reserved: no unit is recorded with it yet.
- `NONE`: No bill: the unit publishes none online, or sends none of its own.
- `PORTAL_SCRAPE`: Published on the unit's own website, where it is fetched every night.
- `SFTP_FEED`: Delivered as a file feed. Reserved: no unit is recorded with it yet.
- `UPLOAD`: Supplied by the firm as a file. Reserved: no unit is recorded with it yet.

### BillEntryOutcome

`enum`

What became of a bill entered by hand.

Values:

- `DUPLICATE`: The same bill is already on file; nothing new was stored.
- `EVIDENCE_ONLY`: Kept as the person entered it, and not a bill: a check found something wrong (the message says what).
- `STORED`: A bill waiting in the inbox for review.

### BillInboxView

`enum`

Which bills the inbox lists.

Values:

- `DECIDED`: Bills a person accepted or rejected, the newest arrival first, so a decision can be found again.
- `WAITING`: Bills still waiting on a decision (NEEDS_REVIEW or DISPUTED), the oldest arrival first. The default.

### BillStatus

`enum`

Where a bill's reading stands in review, and nothing about payment. Every fetched bill starts at NEEDS_REVIEW. What the county publishes about payment is on each installment (amountPaid, paymentKnown, amountOutstanding), with paymentKnown false where it publishes none; what the customer's own records say is beside it (payments, paidPerRecords). Neither moves the status, and the status moves neither.

Values:

- `CLOSED`: Never returned.
- `DISPUTED`: Flagged for the client, with a note.
- `INGESTED`: Reserved: every bill arrives at NEEDS_REVIEW today.
- `NEEDS_REVIEW`: Waiting for a person's decision: where every fetched, uploaded or corrected reading lands.
- `PAID`: Never returned.
- `REJECTED`: Rejected by a reviewer as a wrong reading of the bill. Final, and left out of every total and date: a later fetch does not reopen it.
- `SUPERSEDED`: A revision the county replaced with a newer one, kept as evidence. Left out of every total and date.
- `VALIDATED`: Accepted by a reviewer.

### BillType

`enum`

Which roll a bill is on, as the county classifies it.

Values:

- `ESCAPE`: A bill for value that escaped assessment in an earlier year.
- `REDEMPTION`: A bill to redeem earlier years' unpaid taxes.
- `SECURED`: The annual bill on real property.
- `SUPPLEMENTAL`: A bill for a change in value part way through the year, after a sale or new construction.
- `UNSECURED`: A bill on property that is not land or buildings, such as equipment, fixtures or a boat.

### ChargeType

`enum`

What kind of charge a line on the bill is, where the county says.

Values:

- `AD_VALOREM`: Tax on the assessed value at the general rate.
- `DIRECT_CHARGE`: A flat charge from a district or agency, not based on value.
- `FEE`: A fee added to the bill.
- `PENALTY_AND_COST`: Penalties and costs added for late payment.
- `SPECIAL_ASSESSMENT`: A charge for a local improvement, levied on the parcels that benefit from it.
- `VOTER_APPROVED_DEBT`: Tax to repay bonds the voters approved.

### CoverageStatus

`enum`

Whether a unit's bills can be fetched, from the best of its sites. Earlier values take precedence.

Values:

- `ASSESSMENT_ONLY`: The unit sends no bill of its own.
- `CLOSED`: The unit's site does not allow automated access, so its bills cannot be fetched. The reason is recorded.
- `COVERED`: Bills are fetched from the unit's own site every night.
- `NOT_SURVEYED`: Not surveyed yet.
- `NO_PORTAL`: The unit publishes no bill online.
- `OTHER`: A site that publishes a balance but no bill document, or an image-only bill.
- `PORTAL_FOUND`: The unit publishes bills online; support for its site is not built yet.
- `READER_READY`: The unit's site is supported and waits for a final live check.
- `RETIRED`: The unit's site was retired.

### DeadlineKind

`enum`

What a date is.

Values:

- `APPEAL_CLOSE`: The last day an appeal of the year can be filed.
- `APPEAL_OPEN`: The first day an appeal of the year can be filed.
- `PAYMENT_DELINQUENT`: The last day to pay an installment before a penalty is added.
- `PAYMENT_DUE`: The date an installment falls due.

### DocumentKind

`enum`

What a document is.

Values:

- `APPEAL_DECISION`: A decision on an appeal.
- `ASSESSMENT_NOTICE`: A notice of assessed value.
- `CORRESPONDENCE`: A letter or other correspondence about the parcel.
- `RECEIPT`: A payment receipt.
- `TAX_BILL`: A tax bill, as the county published it or as it was uploaded.

### ExtractionState

`enum`

How far the reading of a document has got.

Values:

- `CONFIRMED`: Read and confirmed by a person. Reserved: not produced today.
- `EXTRACTED`: Read; its figures are on the bill.
- `FAILED`: Could not be read; the document needs a look.
- `MATCH_FAILED`: Read, but what it says could not be matched to a parcel. Reserved: not produced today.
- `OCR_RUNNING`: Being read. Reserved: not produced today.
- `QUEUED`: Waiting to be read. Reserved: not produced today.

### FeedOutcome

`enum`

How one night of the feed ended.

Values:

- `DELIVERY_FAILED`: The files were produced but could not be delivered.
- `EXPORT_FAILED`: The files could not be produced.
- `PARTIAL`: The files were produced and delivered, but some parcels could not be fetched that night.
- `RUNNING`: Still running.
- `SUCCESS`: The client's fetch finished without an error, and the files were produced and delivered.
- `SWEEP_FAILED`: The night's fetch failed before any file was produced.

### IngestOutcome

`enum`

How one attempt to fetch a bill from a county ended.

Values:

- `BLOCKED`: The county's site refused the request.
- `ERROR`: The attempt failed for another reason.
- `NOT_FOUND`: The county answered and had no bill for the parcel.
- `PARSE_ERROR`: The county answered with a page that could not be read.
- `SUCCESS`: A bill was fetched.
- `TIMEOUT`: The county's site did not answer in time.

### OrderDirection

`enum`

Which way to order.

Values:

- `ASC`: Lowest, earliest or A first.
- `DESC`: Highest, latest or Z first.

### ParcelOrderField

`enum`

What to order the parcel list by.

Values:

- `ASSESSED_VALUE`: The current assessment's total value.
- `JURISDICTION`: The name of the unit that assesses the parcel.
- `NEXT_DUE_DATE`: The next payment date.
- `PARCEL_NUMBER`: The parcel number, as text.

### ParcelStatus

`enum`

Where a parcel stands in the portfolio.

Values:

- `ACTIVE`: Held and tracked. The status every parcel starts in.
- `DISPOSED`: Sold or otherwise no longer held; kept for its history.
- `EXEMPT`: Exempt from property tax.
- `PENDING_ASSESSMENT`: Held, with an assessment still to come.

### PaymentKind

`enum`

What an entry in the customer's own payment records is.

Values:

- `ADJUSTMENT`: A signed correction of an earlier entry, the way a wrong entry is reversed.
- `PAYMENT`: Money paid to the unit.
- `REFUND`: Money the unit paid back.

### PaymentSource

`enum`

How an entry in the payment records was made.

Values:

- `CUSTOMER_IMPORT`: It came in with a list of payments (importPayments).
- `MANUAL`: A person recorded it, one at a time (recordPayment).

### PenaltyBasis

`enum`

How the county states a penalty against the amount due.

Values:

- `ADDED_TO_AMOUNT_DUE`: The penalty is added on top of the amount due once the date passes.
- `INCLUDED_IN_AMOUNT_DUE`: The amount due already includes the penalty.

### PortalStatus

`enum`

The standing of one of a unit's sites.

Values:

- `ASSESSMENT_ONLY`: The unit sends no bill of its own.
- `CANDIDATE`: Known, and not yet checked.
- `COVERED`: Bills are fetched from it.
- `COVERED_AMOUNT_ONLY`: A balance is fetched from it; the site publishes no bill document.
- `COVERED_NEEDS_EXTRACTOR`: Bills are fetched from it as images, which are read on request.
- `NO_PORTAL`: The unit publishes no bill online.
- `RETIRED`: The site was retired.
- `UNREACHABLE`: Automated access is not possible; reason says why.

### ReportCategory

`enum`

How the reports are grouped.

Values:

- `ACCOUNTING`: Figures for the books.
- `APPEALS`: Appeals and their outcomes.
- `COMPLIANCE`: Dates, bills and what stands against them.
- `PORTFOLIO`: What is held and what it is worth.

### ReportFormat

`enum`

The file a report is produced as. Every report comes as CSV, XLSX and PDF; reportCatalog lists the formats of each.

Values:

- `CSV`: Comma-separated text, one header row.
- `PDF`: A PDF for reading and printing.
- `XLSX`: An Excel workbook.
- `ZIP`: The appeal evidence pack alone: the pack as a PDF and a CSV, with the documents it lists beside them, one folder per appeal, and an index of what is there and what is not.

### ReportJobStatus

`enum`

Where a requested report is.

Values:

- `DONE`: Ready: downloadUrl fetches the file.
- `EXPIRED`: The file has been removed. Request the report again.
- `FAILED`: Could not be produced; error says why.
- `QUEUED`: Waiting to be produced.
- `RUNNING`: Being produced.

### ReportKind

`enum`

The reports that can be produced. reportCatalog describes each one and lists its columns.

Values:

- `APPEAL_EVIDENCE_PACK`: For each appeal: what was asked against what and where it stands, the certified value and its revisions, the original documents and how each was read and reviewed, every reading of the year’s bills, the corrections, the checks and who accepted each, and the trail with the person and the firm, as the records hold them. A trail too long to carry whole ends with a line saying where it was cut and how much is not in the pack.
- `APPEAL_OUTCOMES_AND_SAVINGS`: Every appeal on record: the certified value, what was asked, what was decided, the reduction realised against the reduction requested, and the tax saved where known.
- `ASSESSED_VALUE_ROLL_FORWARD`: Every parcel's newest two assessment years side by side: the change, the change as a percentage, and a flag at 10% or more.
- `BILL_INGESTION_AUDIT`: Every installment we hold, which unit billed it, where its page came from, how it was read and by whom it was reviewed, and how many checks stand against it.
- `DEADLINE_EXPOSURE_REGISTER`: Every payment and appeal date in the next 120 days with the balance at stake, or why the balance is not known, the undated windows last with their reason. The jurisdiction column is the unit the date belongs to: the one that sent the bill for a payment, the one that hears the appeal for a window.
- `TAX_LIABILITY_FORECAST`: Next year's installments per parcel and billing unit, projected from the newest assessed value at the effective rate the last billed year paid to that unit, split the way that year was split.

### RetrieveIqCheckReason

`enum`

Why retrieve-IQ is checking a bill before the customer acts on it.

Values:

- `CHECK_FAILED`: A check on the reading failed (the figures do not add up, the parcel differs, a total moved tenfold).
- `READER_PAUSED`: This county's reader is paused after a wrong bill in retrieve-IQ's hand-checked sample.
- `REPORTED`: Someone reported this automatically accepted bill as wrong.
- `ZERO_TOTAL`: A $0 bill, which is never accepted automatically.

### RuleKind

`enum`

Which dated rule: the appeal window, the notice of value, the informal review, or the valuation date.

Values:

- `APPEAL_CLOSE`: The last day of the regular appeal filing window.
- `APPEAL_OPEN`: The first day of the regular appeal filing window.
- `ASSESSMENT_DATE`: The valuation date the assessment is made as of.
- `INFORMAL_REVIEW_CLOSE`: The last day to ask the assessor for an informal review.
- `NOTICE_EXPECTED`: When the assessor mails the notice of value.

### RuleReportStatus

`enum`

Where a report stands with the people who maintain the rules.

Values:

- `DECLINED`: They checked and the rule stands; resolution says why.
- `FIXED`: The rule was corrected.
- `OPEN`: Waiting for the people who maintain the rules.

### RuleReportSubject

`enum`

What the report is about: one kind of dated rule, or a filing requirement.

Values:

- `APPEAL_CLOSE`: The day the appeal window closes.
- `APPEAL_OPEN`: The day the appeal window opens.
- `ASSESSMENT_DATE`: The valuation date.
- `INFORMAL_REVIEW_CLOSE`: The last day to ask for an informal review.
- `NOTICE_EXPECTED`: When the notice of value is mailed.
- `REQUIREMENT`: A filing requirement, named by its code.

### RuleStatus

`enum`

Whether a rule gives a date for the year, and if not, why not. Only DATED and BOUND carry a date, and neither is ever invented.

Values:

- `AWAITING_EVENT`: The rule counts from an event (a notice mailed, a roll published) whose date is not on record yet.
- `BOUND`: One side of a later-of or earlier-of rule is an event whose date is not on record, so the date is a floor or a ceiling, not the deadline.
- `DATED`: The rule gives this date.
- `NOT_RECORDED`: No rule of this kind is recorded for the unit, its parent or its state.
- `SET_LOCALLY`: The date is set locally each year, and this year has not been recorded.
- `UNREADABLE`: A rule is recorded but cannot be worked out, or names a day that is not on the calendar.

### Scope

`enum`

What a key or an engagement may do. A write scope does not include the matching read scope.

Values:

- `ADMIN`: Manage the firm itself. Held by people in the app, never by a key.
- `APPEAL_WRITE`: Record appeals and update them.
- `BILL_READ`: Read tax bills, the checks run against them, the documents behind them and the nightly fetch status.
- `BILL_REVIEW`: Accept, flag and reject bills, resolve their checks, and take a decision back.
- `PARCEL_READ`: Read parcels, their assessments, the units that assess and bill them, deadlines and calendar feeds.
- `PARCEL_WRITE`: Add and import parcels.
- `REPORT_READ`: Request and download reports, and read the portfolio summary.

### Severity

`enum`

How much a check's finding matters.

Values:

- `ERROR`: Withholds the bill: it cannot be accepted until a person resolves the check or a later run clears it.
- `INFO`: For information; nothing to do.
- `WARNING`: Worth a look; the bill can still be accepted.

### TaxAccountStatus

`enum`

Whether the unit still bills the property under this account.

Values:

- `ACTIVE`: The unit still bills the property under this number.
- `CLOSED`: It no longer does; the bills already held stay.

### UnreachableReason

`enum`

Why a site cannot be fetched from.

Values:

- `BOT_BLOCK_HEADFUL_FAILS`: The site blocks automated visitors, even a full browser.
- `CAPTCHA`: The site asks every visitor to prove they are a person before it shows a bill.
- `DATACENTER_IP_CHALLENGED`: The site challenges visitors from data centres.
- `LOGIN_WALL`: The site requires an account.
- `OFFLINE`: The site was offline when checked.
- `PAYWALL`: The site charges per lookup.
- `ROBOTS_DISALLOW`: The site's published rules for automated visitors do not allow it.
- `TERMS_FORBID`: The unit's own terms do not allow automated access.

### ValidationEventKind

`enum`

What happened to a check.

Values:

- `CHANGED`: A later run of the standing check found other figures.
- `CLEARED`: A later run passed.
- `FOUND`: The check first made the finding.
- `FOUND_AGAIN`: The check made the finding again after it had passed.
- `REOPENED`: A later run found other figures than the ones accepted, so the resolution no longer covers them.
- `RESOLVED`: A person accepted the discrepancy.

### WeekendRule

`enum`

What happens to a date that falls on a weekend or a holiday.

Values:

- `NEXT_BUSINESS_DAY`: A date on a Saturday, Sunday or federal holiday moves to the next business day. State holidays are not counted, so a date can show one business day early, the safe direction.
- `NONE`: The date stands whatever day it falls on.

## Interfaces

### Node

`interface`

Anything with an id of its own. Any Node can be fetched again by that id with node or nodes.

Fields:

- `id` (`ID!`): The id: opaque, stable, and what node, nodes and every argument that takes an id accept.

## Scalars

### Date

`scalar`

A calendar date, YYYY-MM-DD. No time, no timezone.

### DateTime

`scalar`

An instant, ISO 8601 in UTC.

### JSON

`scalar`

Arbitrary JSON, passed through untouched.

### Money

`scalar`

A monetary amount in major units with two decimals, e.g. "71486.32". USD implied.
