# Command-line Tools Source: https://docs.pingintel.com/command-line-tools Ping offers Python-based command-line tools for interacting with the Ping API. They are Python-based, so once you have a Python environment set up, simply install the library: `pip install pingintel-api` and set it up per the [documentation](https://pypi.org/project/pingintel-api/). # Concepts & Identifiers Source: https://docs.pingintel.com/concepts-and-identifiers Shared terms and identifiers used across the Ping APIs This page defines the terms and identifiers that recur across the Ping APIs. For how these fit together when processing a document, see [How Ping Processes SOVs](/how-ping-processes-sovs). ## Common terms | Term | Meaning | | :------------------ | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **SOV** | Statement of Values. A spreadsheet listing insured locations and buildings with their values, construction details, and policy information. This is the input document you upload. | | **SUD** | SOV Update Data. A revision applied to an existing SOV, carrying its own ID derived from the parent SOV ID. See [How SUDs work](/how-ping-processes-sovs#how-sov-updates-suds-work). | | **`revision`** | Integer counting updates to an SOV. `0` is the original parse. Each SUD increments it. | | **`record_type`** | Distinguishes records in [List Historical SOVs](/ping-extraction/get-sov-data/list-historical-sovs). `ORIG` is a newly parsed SOV. Any other value (for example `SCRUB` or `API`) is a SUD. | | **`output_format`** | A file format generated from the Ping SOV, such as `JSON` or `AUDITOR`. Allowed values are gated by organization. Requests are case-insensitive. Discover the formats your account can use, and their canonical identifiers, with [List Available Output Formats](/ping-extraction/get-sov-data/list-available-output-formats). See [Output Formats](/output-formats) for the full reference. | | **Output** | A generated file for one SOV or SUD in one format. Each output has a `filename` and a `url` you download with your API token. Outputs serve different purposes depending on the format. See [Outputter types](#outputter-types). | | **Integrations** | Datasource codes, such as `PG` (Ping Geocoding) or `PH` (Ping Hazard), that enrich buildings with third-party data at parse or update time. Codes come from Ping.Data's [List Datasources](/ping-data/usage/list-datasources). See [Data Integrations](/integrations) for the attributes each source adds. | | **Job** | An asynchronous unit of work, such as a parse, an update, or an output generation. Start it with a POST, then poll its status endpoint until `request.status` is `COMPLETE` or `FAILED`. | ## Outputter types Ping produces many output formats, and your organization may have its own configured beyond the public set. The formats your account can request, with their canonical identifiers and labels, come from [List Available Output Formats](/ping-extraction/get-sov-data/list-available-output-formats). See [Output Formats](/output-formats) for the public reference. The categories below group those formats by what they are for. | Type | What it produces | Use it for | | :---------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------- | | **Computer-readable formats** | Structured data for machine consumption: JSON, account and location files for catastrophe models such as AIR and RMS, and alternative encodings. | Feeding SOV data into your own systems. This is the primary path for integrations. | | **Scrubbers** | Macro-enabled Excel workbooks (`.xlsm`) for reviewing and correcting the structured data Ping extracts. | Hands-on data entry and correction. A working artifact for getting the SOV right, not a final deliverable. | | **Modelers** | Macro-enabled Excel workbooks (`.xlsm`) that update an SOV in place at the account and location level and run catastrophe tasks. | Brokers and underwriters adjusting already-extracted data, rather than first-pass correction. | | **Auditor** | A read-only Excel workbook (`.xlsx`, no macros) with a summary view of the parsed data. | Reviewing scrubbing decisions without changing them. | | **Marketing SOVs** | Presentation-ready Excel workbooks (`.xlsx`, no macros) in a co-branded layout with an organization's colors and preferences. | Sharing an SOV externally in a polished format. | | **Partner import formats** | Exports that reshape Ping's data into the layout another system expects. | Handing SOV data to a carrier or downstream platform for direct import. | | **Other** | Additional formats such as PowerPoint summaries and partner-specific CSV layouts. | Specialized delivery needs outside the categories above. | Most of these formats, including organization-specific workbooks and partner exports, are configured per account. Call [List Available Output Formats](/ping-extraction/get-sov-data/list-available-output-formats) to see the complete set you can request. ## Identifiers Several identifiers move between requests as you work with the API. All of them are strings. Unless the shape is documented below, treat the value as opaque — store it and pass it back unchanged. | Identifier | Example | Where you get it | Where you use it | | :----------------- | :------------------------------------- | :-------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | SOV ID (`sovid`) | `s-pl-ping-21nyms3` | Returned by [Start SOV Parsing Job](/ping-extraction/parse-sovs/start-sov-parsing-job) | Status checks, output downloads, update jobs, and history lookups for that SOV. | | SUD ID (`sudid`) | `s-pl-ping-21nyms3-r001` | Returned by [Initiate SOV Update Job](/ping-extraction/update-sovs/initiate-sov-update-job) | Update status checks and output requests for that revision. Shape is the parent SOV ID plus `-r` and the zero-padded revision number. | | Ping ID (`pingid`) | `p-mk-tempo-esw5ab` | Returned by Ping.Vision's [Initiate New Submission](/ping-vision/create-submission/initiate-new-submission) | Ping.Vision submission endpoints and events. Present on Extraction history records when a submission is involved. | | `item_key` | `i-s-pl-ping-21nyms3!Sheet1!7` | `buildings[].item_key` in a JSON output | Identifies one building in an update CSV. Copy it verbatim from the output. | | Output request ID | `9f4d8c10-3b7e-4a52-bd91-c823f15e4d76` | `request.id` in the [Get Or Create SOV Output](/ping-extraction/get-sov-data/get-or-create-sov-output) response | Polling [Get/Check SOV Output Result](/ping-extraction/parse-sovs/getcheck-sov-output-result). Cached responses carry an `immediately-done-` prefix. Use `request.status`, not the prefix, to detect completion. | | `cursor_id` | — | List endpoints such as [List Historical SOVs](/ping-extraction/get-sov-data/list-historical-sovs) | Pass it back unchanged to fetch the next page. | | `client_ref` | your own value | You choose it | Supplied when starting a parse or update job, returned on history records. | `client_ref` is the one identifier you pick yourself. Pass a reference your system can map back, such as your own submission key, when calling [Start SOV Parsing Job](/ping-extraction/parse-sovs/start-sov-parsing-job) or [Initiate SOV Update Job](/ping-extraction/update-sovs/initiate-sov-update-job). [List Historical SOVs](/ping-extraction/get-sov-data/list-historical-sovs) returns it on every record, which makes it the supported way to reconcile Ping activity against your own records without storing a mapping of Ping IDs on your side. # How Ping Processes SOVs Source: https://docs.pingintel.com/how-ping-processes-sovs High-level behavior of SOV processing in **Ping.Extraction** **Ping.Extraction** turns a raw Statement of Values workbook into structured, normalized building data, then generates that data in the output formats your organization uses. This page explains the behavior behind that process: the lifecycle of a parsed SOV, the status values you poll, how updates (SUDs) behave, and how to regenerate outputs without re-uploading the source file. For the terms and identifiers used throughout, see [Concepts & Identifiers](/concepts-and-identifiers). For step-by-step API call sequences, see the workflows on the [Getting Started](/quickstart) page. ## How an input SOV becomes a Ping SOV Parsing is asynchronous. One request starts the job, and everything after the upload happens on Ping servers while you poll for completion. 1. **Upload.** Call [Start SOV Parsing Job](/ping-extraction/parse-sovs/start-sov-parsing-job) with the source file, a `document_type` of `SOV`, the `output_formats` you want generated, and any `integrations` to apply. The response returns the SOV ID immediately, before processing finishes. Save it. Every later request about this SOV uses it. 2. **Identification and parsing.** Ping identifies the document type, locates the building rows in the workbook, and maps the source columns onto standard Ping attributes. The [JSON Format Specification](/json-formats/top-level) describes the resulting structure, and [Buildings Attributes](/json-formats/buildings) covers the per-building fields. 3. **Enrichment.** Requested integrations add third-party data, such as geocoding results and hazard scores, to each building. 4. **Output generation.** Ping renders the normalized data into each requested format. Formats you skip here can still be generated later. See [Regenerating outputs](#regenerating-outputs). 5. **Completion.** Poll [Check SOV Parsing Status](/ping-extraction/parse-sovs/check-sov-parsing-status) until `request.status` is `COMPLETE` or `FAILED`. On success, `result.outputs` lists each generated file with a `url`. Download them with [Fetch Outputs of SOV Parsing Job](/ping-extraction/parse-sovs/fetch-outputs-of-sov-parsing-job). Two behaviors worth knowing up front. Submitting the same file twice creates two unrelated SOVs with two different IDs, so re-uploading is never the way to get fresh outputs from an already-parsed SOV. The `id` inside a JSON output behaves differently from the job IDs: it holds the parent SOV ID and keeps that value in every regenerated output, so updating an SOV does not change the `id` in its JSON. And the SOV ID is opaque. Its shape (`s-pl-ping-21nyms3`) is observable but not a contract, so store it as a string and pass it through unchanged. ## Status values across endpoints Every job moves through one lifecycle, but different endpoints encode it differently. Job status endpoints — [Check SOV Parsing Status](/ping-extraction/parse-sovs/check-sov-parsing-status) and [Check SOV Update Status](/ping-extraction/update-sovs/check-sov-update-status) — return full words in `request.status`. [List Historical SOVs](/ping-extraction/get-sov-data/list-historical-sovs) returns single-letter codes in `status`. The encodings map one to one: | Lifecycle state | Job endpoints (`request.status`) | History (`status`) | | :-------------- | :------------------------------- | :----------------- | | Pending | `PENDING` | `P` | | In progress | `IN_PROGRESS` | `I` | | Enriching | `ENRICHING` | `E` | | Re-enriching | `REENRICHING` | `R` | | Complete | `COMPLETE` | `C` | | Failed | `FAILED` | `F` | `COMPLETE` and `FAILED` are the only terminal states. Poll until you see one of them rather than matching the intermediate values, which can change as processing evolves. List Historical SOVs only returns records that have already reached `C` or `F`, and [Get/Check SOV Output Result](/ping-extraction/parse-sovs/getcheck-sov-output-result) reports only `PENDING`, `COMPLETE`, and `FAILED`. `result.status` is a separate axis. `request.status` tells you whether the job finished, and `result.status` tells you how it ended. Parse jobs report `SUCCESS`, `FAILED_TO_READ`, `PARTIAL_PARSE`, `FAILED_TO_PARSE`, or `FAILED_TO_PROCESS`. Update jobs report `SUCCESS`, `FAILED_TO_PARSE`, or `FAILED_TO_PROCESS`. On failure, `result.message` describes what went wrong. ## How SOV updates (SUDs) work A SUD (SOV Update Data) is a revision of an existing SOV. Create one when you have corrected building attributes, refreshed enrichments, or upstream data changes to apply, and you want regenerated outputs without re-uploading the original workbook. The [Update an SOV](/workflows/ping-extraction/update-sov) workflow walks through the call sequence: initiate the update against the parent `sovid`, upload one or more CSVs of revised attributes, then start the job. When you use a SUD, expect the following behavior: * **A SUD gets its own ID.** A SUD ID is the parent SOV ID plus `-r` and the zero-padded revision number. Revision 1 of `s-pl-ping-21nyms3` is `s-pl-ping-21nyms3-r001`, and revision 10 is `s-pl-ping-21nyms3-r010`. The suffix always matches the record's `revision` value. * **The parent SOV is preserved.** An update creates a new revision rather than rewriting the original. The `revision` counter starts at `0` for the original parse and increments with each SUD, and you can still request outputs for any earlier revision. See [Regenerating outputs](#regenerating-outputs). * **SUDs process like parse jobs.** The update runs asynchronously. Poll [Check SOV Update Status](/ping-extraction/update-sovs/check-sov-update-status) until `request.status` is `COMPLETE` or `FAILED`, then download the regenerated files from `result.outputs`. * **SUDs appear in account history.** [List Historical SOVs](/ping-extraction/get-sov-data/list-historical-sovs) returns SOVs and SUDs in one chronological stream. A `record_type` of `ORIG` marks an original SOV, and any other value (for example `SCRUB` or `API`) marks a SUD. * **Lineage is traceable.** [Get Historical SOV](/ping-extraction/get-sov-data/get-historical-sov) returns `original_sovid` and `previous_sovid`, which trace a SUD back through its revision chain to the original SOV. * **A SUD ID works where an SOV ID does for fetching outputs.** For example, [Get Or Create SOV Output](/ping-extraction/get-sov-data/get-or-create-sov-output) accepts either. When the path ID is a SUD ID, the `revision` parameter is ignored because the SUD already identifies one specific revision. ## Regenerating outputs A reoutput generates a new output file from an SOV that is already parsed. The source file is not re-uploaded and the SOV ID does not change. There are two ways to get one, and they answer different needs. **You need a format you didn't request at parse time, or a fresh copy of an existing file.** Call [Get Or Create SOV Output](/ping-extraction/get-sov-data/get-or-create-sov-output). If a matching output is already cached, the response returns it immediately with a `request.status` of `COMPLETE`. Otherwise generation starts and you poll [Get/Check SOV Output Result](/ping-extraction/parse-sovs/getcheck-sov-output-result) with the returned request ID. Set `overwrite_existing` to `true` to discard the cached file and force regeneration. Set `revision` to select which revision to read: `0` for the original parse, a positive integer for that revision number, or `-1` (the default) for the latest. The [Get or Create an SOV Output](/workflows/ping-extraction/get-or-create-output) workflow walks through this end to end. **You want the SOV reprocessed with Ping's current processing.** Initiate an update job with an `update_type` of `SCRUB`, as described in [Update an SOV](/workflows/ping-extraction/update-sov), then start it. Uploading a locations CSV is optional, so a `SCRUB` job can skip the add-locations step entirely. To refresh third-party data, pass `integrations` when starting the job. When `integrations` is omitted, your organization's workflow configuration determines whether default enrichments run. The result is a new SUD, so you get a new revision with regenerated outputs rather than a replacement file on the existing revision. The difference in one line: Get Or Create SOV Output renders existing parsed data into a file, while a `SCRUB` update reprocesses the data itself and creates a new revision. # Data Integrations Source: https://docs.pingintel.com/integrations Ping supports multiple third-party data integrations which can be accessed programmatically via API requests. To retrieve data from specific integrations, include the `sources` parameter in the request payload and provide a list of integration codes corresponding to the desired sources. ## Integrations * `PH - Ping Hazard` * `LB - Lightbox` * `PG - Ping Geocoding` * `LBG - Lightbox Geocoding` * *`full list coming soon...`* ## Base Output Attributes The following attributes are always present in responses and provide metadata about the request/response transaction: | **Data Element** | **Response Values** | **Description** | | :------------------------------- | :------------------------------------------------------ | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | is\_success
(`boolean`) |
ValuesTrue, False
| Indicates whether the data retrieval was successful or not. | | error\_message
(`text`) | | Message returned when a request fails. | | raw\_response
(`object`) | | The unprocessed response data from the datasource, preserved for debugging or advanced use cases. | | persist\_for
(`object`) | | Duration for which this result should be cached before requiring a fresh fetch. | | confidence
(`number`) |
Values0-100
| Confidence score indicating the reliability of the returned data for the given location. | | status\_code
(`number`) | | HTTP status code indicating the result of the request. See [https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Status](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Status) for reference. | | fetch\_time
(`number`) | | Time taken to retrieve the data, in seconds. | | is\_cache\_hit
(`boolean`) |
ValuesTrue, False
| Indicates whether the result was served from cache or freshly computed. | | worker\_name
(`text`) | | Identifier of the worker process that handled this request. | ## Ping Hazard **Code: PH** The following attributes will be available in the `external_data` key of the response. ### Response Metadata The following attributes describe the status, context, and quality of the hazard/risk data returned for the location. | **Data Element** | **Response Values** | **Description** | | :-------------------------------------------- | :------------------ | :--------------------------------------------------------------------------------------- | | consulted\_
datasources
(`object`) | | List of data source codes used to generate the hazard and risk outputs for the location. | | state
(`text`) | | The U.S. state where the location is found. | | county
(`text`) | | Name of the county where the property is located. | ### Flood Data The following attributes describe flood-related hazard exposure, proximity to the coast, FEMA flood classification, and surge modeling. | **Data Element** | **Response Values** | **Description** | | :-------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------ | :--------------------------------------------------------------------------------------------------------- | | fema\_flood\_zone\_
dfirm\_id
(`text`) | | FEMA Digital Flood Insurance Rate Map (DFIRM) panel identifier. | | fema\_flood\_zone\_
version\_id
(`text`) | | Version identifier representing the specific FEMA flood zone data. | | fema\_flood\_zone\_
version\_date
(`date`) | | Date of the FEMA flood zone data version used for this record. | | fema\_flood\_zone
(`text`) |
ValuesA, AE, A1–A30, AO, AR, A99, V, VE, V1–V30, B, C, D, X
| FEMA flood zone designation indicating the level of flood risk. | | fema\_flood\_zone\_
subtype
(`text`) | | Additional description on the features within the primary FEMA flood zone. | | slosh\_zone\_category
(`number`) |
Values1-5
| The SLOSH (Sea, Lake, and Overland Surges from Hurricanes) storm surge category assigned to this location. | | slosh\_zone\_value
(`number`) | | Estimated storm surge height in feet for the associated SLOSH category. | | distance\_to\_coast\_
miles
(`number`) | | Distance from the location to the coast, measured in miles. | | distance\_to\_coast\_
feet
(`number`) | | Distance from the location to the coast, measured in feet. | | distance\_to\_coast\_
closest\_point\_
longitude
(`number`) | | Longitude of the nearest point on the coast to the location. | | distance\_to\_coast\_
closest\_point\_
latitude
(`number`) | | Latitude of the nearest point on the coast to the location. | | distance\_to\_coast\_
connected\_lines
(`list[text]`) | | WKT LineString connecting the location to the nearest point on the coast. | ### Risk Data The following attributes provide grade, numeric and textual ratings, and monetary values for different risk categories. #### Composite | **Data Element** | **Response Values** | **Description** | | :----------------------------- | :------------------------------------------------------------------------------------------------------------------------------------ | :-------------------------------------------------------------------------------------------------------------------------------------- | | risk\_score
(`number`) |
Values0-100
| FEMA's National Risk Index (NRI) composite score for the location, a national percentile indicating relative risk from natural hazards. | | risk\_value
(`currency`) | | Expected annual loss in USD used to derive the risk\_score percentile. | | risk\_ratng
(`text`) |
ValuesNot Applicable, Very Low, Relatively Low, Relatively Moderate, Relatively High, Very High
| Overall risk rating label. | #### Avalanche | **Data Element** | **Response Values** | **Description** | | :----------------------------- | :------------------------------------------------------------------------------------------------------------------------------------ | :-------------------------------------------------------- | | avln\_riskv
(`currency`) | | Expected annual loss in USD for avalanche hazards. | | avln\_risks
(`number`) |
Values0-100
| Avalanche hazard risk score (national percentile, 0-100). | | avln\_riskr
(`text`) |
ValuesNot Applicable, Very Low, Relatively Low, Relatively Moderate, Relatively High, Very High
| Avalanche hazard risk rating label. | #### Coastal Flooding | **Data Element** | **Response Values** | **Description** | | :----------------------------- | :------------------------------------------------------------------------------------------------------------------------------------ | :------------------------------------------------------------ | | cfld\_riskv
(`currency`) | | Expected annual loss in USD for coastal flood hazards. | | cfld\_risks
(`number`) |
Values0-100
| Coastal flood hazard risk score (national percentile, 0-100). | | cfld\_riskr
(`text`) |
ValuesNot Applicable, Very Low, Relatively Low, Relatively Moderate, Relatively High, Very High
| Coastal flood hazard risk rating label. | #### Cold Wave | **Data Element** | **Response Values** | **Description** | | :----------------------------- | :------------------------------------------------------------------------------------------------------------------------------------ | :-------------------------------------------------------- | | cwav\_riskv
(`currency`) | | Expected annual loss in USD for cold wave hazards. | | cwav\_risks
(`number`) |
Values0-100
| Cold wave hazard risk score (national percentile, 0-100). | | cwav\_riskr
(`text`) |
ValuesNot Applicable, Very Low, Relatively Low, Relatively Moderate, Relatively High, Very High
| Cold wave hazard risk rating label. | #### Drought | **Data Element** | **Response Values** | **Description** | | :----------------------------- | :------------------------------------------------------------------------------------------------------------------------------------ | :------------------------------------------------------ | | drgt\_riskv
(`currency`) | | Expected annual loss in USD for drought hazards. | | drgt\_risks
(`number`) |
Values0-100
| Drought hazard risk score (national percentile, 0-100). | | drgt\_riskr
(`text`) |
ValuesNot Applicable, Very Low, Relatively Low, Relatively Moderate, Relatively High, Very High
| Drought hazard risk rating label. | #### Earthquake | **Data Element** | **Response Values** | **Description** | | :----------------------------- | :------------------------------------------------------------------------------------------------------------------------------------ | :--------------------------------------------------------- | | erqk\_riskv
(`currency`) | | Expected annual loss in USD for earthquake hazards. | | erqk\_risks
(`number`) |
Values0-100
| Earthquake hazard risk score (national percentile, 0-100). | | erqk\_riskr
(`text`) |
ValuesNot Applicable, Very Low, Relatively Low, Relatively Moderate, Relatively High, Very High
| Earthquake hazard risk rating label. | #### Hail | **Data Element** | **Response Values** | **Description** | | :----------------------------- | :------------------------------------------------------------------------------------------------------------------------------------ | :--------------------------------------------------- | | hail\_riskv
(`currency`) | | Expected annual loss in USD for hail hazards. | | hail\_risks
(`number`) |
Values0-100
| Hail hazard risk score (national percentile, 0-100). | | hail\_riskr
(`text`) |
ValuesNot Applicable, Very Low, Relatively Low, Relatively Moderate, Relatively High, Very High
| Hail hazard risk rating label. | #### Heat Wave | **Data Element** | **Response Values** | **Description** | | :----------------------------- | :------------------------------------------------------------------------------------------------------------------------------------ | :-------------------------------------------------------- | | hwav\_riskv
(`currency`) | | Expected annual loss in USD for heat wave hazards. | | hwav\_risks
(`number`) |
Values0-100
| Heat wave hazard risk score (national percentile, 0-100). | | hwav\_riskr
(`text`) |
ValuesNot Applicable, Very Low, Relatively Low, Relatively Moderate, Relatively High, Very High
| Heat wave hazard risk rating label. | #### Hurricane | **Data Element** | **Response Values** | **Description** | | :----------------------------- | :------------------------------------------------------------------------------------------------------------------------------------ | :-------------------------------------------------------- | | hrcn\_riskv
(`currency`) | | Expected annual loss in USD for hurricane hazards. | | hrcn\_risks
(`number`) |
Values0-100
| Hurricane hazard risk score (national percentile, 0-100). | | hrcn\_riskr
(`text`) |
ValuesNot Applicable, Very Low, Relatively Low, Relatively Moderate, Relatively High, Very High
| Hurricane hazard risk rating label. | #### Ice Storm | **Data Element** | **Response Values** | **Description** | | :----------------------------- | :------------------------------------------------------------------------------------------------------------------------------------ | :-------------------------------------------------------- | | istm\_riskv
(`currency`) | | Expected annual loss in USD for ice storm hazards. | | istm\_risks
(`number`) |
Values0-100
| Ice storm hazard risk score (national percentile, 0-100). | | istm\_riskr
(`text`) |
ValuesNot Applicable, Very Low, Relatively Low, Relatively Moderate, Relatively High, Very High
| Ice storm hazard risk rating label. | #### Landslide | **Data Element** | **Response Values** | **Description** | | :----------------------------- | :------------------------------------------------------------------------------------------------------------------------------------ | :-------------------------------------------------------- | | lnds\_riskv
(`currency`) | | Expected annual loss in USD for landslide hazards. | | lnds\_risks
(`number`) |
Values0-100
| Landslide hazard risk score (national percentile, 0-100). | | lnds\_riskr
(`text`) |
ValuesNot Applicable, Very Low, Relatively Low, Relatively Moderate, Relatively High, Very High
| Landslide hazard risk rating label. | #### Lightning | **Data Element** | **Response Values** | **Description** | | :----------------------------- | :------------------------------------------------------------------------------------------------------------------------------------ | :-------------------------------------------------------- | | ltng\_riskv
(`currency`) | | Expected annual loss in USD for lightning hazards. | | ltng\_risks
(`number`) |
Values0-100
| Lightning hazard risk score (national percentile, 0-100). | | ltng\_riskr
(`text`) |
ValuesNot Applicable, Very Low, Relatively Low, Relatively Moderate, Relatively High, Very High
| Lightning hazard risk rating label. | #### Riverine Flooding | **Data Element** | **Response Values** | **Description** | | :----------------------------- | :------------------------------------------------------------------------------------------------------------------------------------ | :------------------------------------------------------------- | | rfld\_riskv
(`currency`) | | Expected annual loss in USD for riverine flood hazards. | | rfld\_risks
(`number`) |
Values0-100
| Riverine flood hazard risk score (national percentile, 0-100). | | rfld\_riskr
(`text`) |
ValuesNot Applicable, Very Low, Relatively Low, Relatively Moderate, Relatively High, Very High
| Riverine flood hazard risk rating label. | #### Strong Wind | **Data Element** | **Response Values** | **Description** | | :----------------------------- | :------------------------------------------------------------------------------------------------------------------------------------ | :---------------------------------------------------------- | | swnd\_riskv
(`currency`) | | Expected annual loss in USD for strong wind hazards. | | swnd\_risks
(`number`) |
Values0-100
| Strong wind hazard risk score (national percentile, 0-100). | | swnd\_riskr
(`text`) |
ValuesNot Applicable, Very Low, Relatively Low, Relatively Moderate, Relatively High, Very High
| Strong wind hazard risk rating label. | #### Tornado | **Data Element** | **Response Values** | **Description** | | :----------------------------- | :------------------------------------------------------------------------------------------------------------------------------------ | :------------------------------------------------------ | | trnd\_riskv
(`currency`) | | Expected annual loss in USD for tornado hazards. | | trnd\_risks
(`number`) |
Values0-100
| Tornado hazard risk score (national percentile, 0-100). | | trnd\_riskr
(`text`) |
ValuesNot Applicable, Very Low, Relatively Low, Relatively Moderate, Relatively High, Very High
| Tornado hazard risk rating label. | #### Tsunami | **Data Element** | **Response Values** | **Description** | | :----------------------------- | :------------------------------------------------------------------------------------------------------------------------------------ | :------------------------------------------------------ | | tsun\_riskv
(`currency`) | | Expected annual loss in USD for tsunami hazards. | | tsun\_risks
(`number`) |
Values0-100
| Tsunami hazard risk score (national percentile, 0-100). | | tsun\_riskr
(`text`) |
ValuesNot Applicable, Very Low, Relatively Low, Relatively Moderate, Relatively High, Very High
| Tsunami hazard risk rating label. | #### Volcanic Activity | **Data Element** | **Response Values** | **Description** | | :----------------------------- | :------------------------------------------------------------------------------------------------------------------------------------ | :---------------------------------------------------------------- | | vlcn\_riskv
(`currency`) | | Expected annual loss in USD for volcanic activity hazards. | | vlcn\_risks
(`number`) |
Values0-100
| Volcanic activity hazard risk score (national percentile, 0-100). | | vlcn\_riskr
(`text`) |
ValuesNot Applicable, Very Low, Relatively Low, Relatively Moderate, Relatively High, Very High
| Volcanic activity hazard risk rating label. | #### Wildfire | **Data Element** | **Response Values** | **Description** | | :----------------------------- | :------------------------------------------------------------------------------------------------------------------------------------ | :------------------------------------------------------- | | wfir\_riskv
(`currency`) | | Expected annual loss in USD for wildfire hazards. | | wfir\_risks
(`number`) |
Values0-100
| Wildfire hazard risk score (national percentile, 0-100). | | wfir\_riskr
(`text`) |
ValuesNot Applicable, Very Low, Relatively Low, Relatively Moderate, Relatively High, Very High
| Wildfire hazard risk rating label. | #### Winter Weather | **Data Element** | **Response Values** | **Description** | | :--------------------------- | :------------------------------------------------------------------------------------------------------------------------------------ | :------------------------------------------------------------- | | wntw\_riskv
(`number`) | | Expected annual loss in USD for winter weather hazards. | | wntw\_risks
(`number`) |
Values0-100
| Winter weather hazard risk score (national percentile, 0-100). | | wntw\_riskr
(`text`) |
ValuesNot Applicable, Very Low, Relatively Low, Relatively Moderate, Relatively High, Very High
| Winter weather hazard risk rating label. | ### Fire Data The following attributes describe wildfire hazard, fire protection, and proximity to fire response infrastructure. | **Data Element** | **Response Values** | **Description** | | :-------------------------------------------------------------- | :----------------------------------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------- | | burn\_probability
(`percentage`) |
Values0.0-1.0
| Annual probability of a wildfire burning the location. | | aais\_classification
(`text`) |
ValuesP1, P2, P3, P4, U1, U2
| Fire protection classification code and description from the AAIS system (e.g., 'P1, PROTECTED 1' indicates highest protection level). | | ping\_fire\_protection\_
class
(`number`) |
Values1-10
| ISO/Ping Fire Protection Class (FPC) score; lower values indicate better fire protection. | | distance\_to\_fire\_
station\_feet
(`number`) | | Distance from the location to the nearest fire station, measured in feet. | | distance\_to\_fire\_
hydrant\_feet
(`number`) | | Distance from the location to the nearest fire hydrant, measured in feet. | | fire\_station\_point
(`text`) | | Geographic point representing the nearest fire station, in WKT format (e.g., POINT (longitude latitude)). | | fire\_station\_closest\_
point\_longitude
(`number`) | | Longitude of the closest fire station to the property location. | | fire\_station\_closest\_
point\_latitude
(`number`) | | Latitude of the closest fire station to the property location. | | fire\_station\_extra\_
data
(`object`) | | Extra data about the nearest fire station, including name, address, geographic coordinates, city, state, zip code, and whether it is staffed by volunteers. | | fire\_hydrant\_point
(`text`) | | Geographic point representing the nearest fire hydrant, in WKT format (e.g., POINT (longitude latitude)). | | fire\_hydrant\_closest\_
point\_longitude
(`number`) | | Longitude of the closest fire hydrant to the property location. | | fire\_hydrant\_closest\_
point\_latitude
(`number`) | | Latitude of the closest fire hydrant to the property location. | ### Crime Data The following attributes describe crime statistics and safety metrics for the location. | **Data Element** | **Response Values** | **Description** | | :----------------------------------- | :---------------------------------------------- | :---------------------------------------------------- | | total\_crime\_grade
(`text`) |
ValuesA-F
| Overall crime grade for the property area. | | murder\_grade
(`text`) |
ValuesA-F
| Crime grade for murder/homicide rate in the area. | | rape\_grade
(`text`) |
ValuesA-F
| Crime grade for rape/sexual assault rate in the area. | | robbery\_grade
(`text`) |
ValuesA-F
| Crime grade for robbery rate in the area. | | assault\_grade
(`text`) |
ValuesA-F
| Crime grade for aggravated assault rate in the area. | | burglary\_grade
(`text`) |
ValuesA-F
| Crime grade for burglary rate in the area. | | larceny\_grade
(`text`) |
ValuesA-F
| Crime grade for larceny/theft rate in the area. | | vehicle\_theft\_grade
(`text`) |
ValuesA-F
| Crime grade for motor vehicle theft rate in the area. | ### Florida Sinkhole Data The following attributes describe the proximity and characteristics of the nearest known sinkhole in Florida. | **Data Element** | **Response Values** | **Description** | | :------------------------------------------------------------------------ | :------------------ | :--------------------------------------------------------------------------------------------------------------------------------------------------------------- | | distance\_to\_florida\_
sinkhole\_feet
(`number`) | | Distance from the property to the nearest known Florida sinkhole, in feet. | | florida\_sinkhole\_
point
(`text`) | | Geographic point representing the nearest known sinkhole in Florida, in WKT format (e.g., POINT (longitude latitude)). | | florida\_sinkhole\_
closest\_point\_
longitude
(`number`) | | Longitude of the closest known sinkhole in Florida to the property location. | | florida\_sinkhole\_
closest\_point\_
latitude
(`number`) | | Latitude of the closest known sinkhole in Florida to the property location. | | florida\_sinkhole\_
extra\_data
(`object`) | | Extra data about the closest Florida sinkhole, including coordinates, event dates, geological characteristics, damage reports, and other sinkhole-specific data. | ### Elevation Data The following attributes describe the elevation and topographic characteristics of the location. | **Data Element** | **Response Values** | **Description** | | :---------------------------------- | :------------------ | :---------------------------------------------------------------------------------------------------------------- | | elevation\_meters
(`number`) | | Elevation of the location above sea level, in meters. | | resolution\_meters
(`number`) | | Size of each grid cell in the underlying risk data, in meters. Smaller values indicate higher spatial resolution. | ## Lightbox **Code: LB** The following attributes will be available in the `external_data` key of the response. | **Data Element** | **Response Values** | **Description** | | :----------------------------------------------------- | :------------------------------------------------------ | :----------------------------------------------------------------------------------------- | | length\_units
(`text`) | | Units used for linear measurements (e.g., 'm'). | | area\_units
(`text`) | | Units used to express area measurements (e.g., 'sqm'). | | occupancy\_type
(`text`) | | Type of occupancy (e.g., 'SINGLE FAMILY RESIDENTIAL'). | | land\_use\_category
(`text`) | | Use classification for the land (e.g., residential, commercial, agricultural). | | bldg\_year\_built
(`year`) | | The year the building was originally constructed. | | bldg\_year\_updated
(`year`) | | The most recent year in which the building was updated or modified. | | construction\_type
(`text`) | | Category of building construction (e.g., wood frame, masonry, steel). | | num\_stories
(`text`) | | Number of stories / floors in the building (as text). | | num\_buildings
(`text`) | | The number of distinct buildings on the property (as text). | | has\_basement
(`boolean`) |
ValuesTrue, False
| Whether the building has a basement (true / false). | | num\_stories\_below\_
gnd
(`number`) | | How many levels / floors are below ground (basement levels). | | num\_stories\_desc
(`text`) | | Description of the number of stories (e.g., '2+B'). | | bldg\_area
(`number`) | | The building's footprint / gross floor area (in area units). | | wall\_type
(`text`) | | Wall construction type (e.g., masonry, wood frame). | | roof\_covering
(`text`) | | Material used for the roof covering (e.g., 'ASPHALT'). | | roof\_covering\_code
(`text`) | | Code representing the roof covering material. (e.g., 'P') | | roof\_type
(`text`) | | The structural type of roof (e.g., gable, flat, hip). | | lot\_size
(`number`) | | Size of the land / parcel (in area units). | | assessed\_value\_total
(`currency`) | | Total assessed value of the property. | | assessed\_value\_land
(`currency`) | | Assessed value of the land portion of the property. | | assessed\_value\_
improvements
(`currency`) | | Assessed value of improvements (structures) on the property. | | assessed\_value\_year
(`year`) | | The year for which the assessed value applies. | | market\_value\_total
(`currency`) | | Market valuation of the property. | | market\_value\_land
(`currency`) | | Market value of the land portion of the property. | | market\_value\_
improvements
(`currency`) | | Market value of improvements (structures) on the property. | | market\_value\_year
(`year`) | | The year for which the market value is estimated. | | bedrooms
(`number`) | | Number of bedrooms. | | baths
(`number`) | | Number of bathrooms. | | ownership\_status\_
code
(`text`) | | Code for ownership status (e.g., 'CO'). | | ownership\_status\_
code\_desc
(`text`) | | Description corresponding to the ownership status code (e.g., 'COMPANY' or 'CORPORATION'). | | owner\_names
(`list[text]`) | | List of owner names. | | owner\_street
(`text`) | | Street address of the owner. | | owner\_city
(`text`) | | City of the property owner's address. | | owner\_state
(`text`) | | State in the owner's address. | | owner\_zip
(`text`) | | ZIP code of the owner's address. | | owner\_occupied
(`boolean`) |
ValuesTrue, False
| Whether the owner lives in the property (true / false). | | heating\_desc
(`text`) | | Description of the heating system (e.g., 'FORCED AIR UNIT'). | | heating\_code
(`text`) | | Code for the type of heating system installed. | | air\_conditioning\_
desc
(`text`) | | A textual description of the air conditioning type (e.g., 'Central / Forced air'). | | air\_conditioning\_
code
(`text`) | | A code representing the type of air conditioning installed (if any). | | valuation\_model\_
value
(`currency`) | | Valuation or predictive value of the property from LightBox's model. | | valuation\_model\_
value\_high
(`currency`) | | Upper bound of the modeled value (confidence interval). | | valuation\_model\_
value\_low
(`currency`) | | Lower bound of the modeled value (confidence interval). | | valuation\_model\_
value\_score
(`number`) |
Values0-100
| Score or confidence metric for the valuation model result. | | street
(`text`) | | Street address of the property. | | city
(`text`) | | The city or municipality where the property is located. | | state
(`text`) | | The U.S. state where the location is found. | | zip
(`text`) | | ZIP code of the property location. | | country
(`text`) | | Country where the property is located. | | latitude
(`number`) | | Latitude coordinate of the property. | | longitude
(`number`) | | Longitude coordinate of the property. | | transaction\_price\_
per\_area
(`currency`) | | The sale price of the property divided by its area. | | transaction\_value
(`currency`) | | The total dollar amount paid in the most recent recorded sale of the property. | | transaction\_date
(`date`) | | The official recorded date of the most recent property sale or transfer. | | h3
(`text`) | | H3 geospatial index of the property location. | ## Ping Geocoding **Code: PG** The following attributes will be available in the `location_data` key of the response. | **Data Element** | **Response Values** | **Description** | | :------------------------------------------------------------------ | :------------------------------------------------------ | :---------------------------------------------------------------------------------------------------------------------------- | | street\_number
(`text`) | | Street number component of the address. | | route
(`text`) | | Street name or route component of the address. | | location\_type
(`text`) | | Indicates how precisely the coordinates represent the actual address (e.g., 'ROOFTOP') | | latitude
(`number`) | | Latitude of the location. | | longitude
(`number`) | | Longitude of the location. | | formatted\_address
(`text`) | | Human-readable full address (e.g., '123 Main St, Miami, FL 33133'). | | address\_line\_1
(`text`) | | Primary street address line of the location (e.g., '123 Main St'). | | address\_line\_2
(`text`) | | Secondary address information of the location (e.g., Apt. 33) | | city
(`text`) | | City where the property is located (e.g., 'Miami'). | | postal\_code
(`text`) | | Postal code (e.g., ZIP code in the US). | | county
(`text`) | | County or equivalent region for the location (e.g., 'Miami-Dade'). | | state
(`text`) | | State abbreviation (e.g., 'MA'). | | country
(`text`) | | Country where the property is located (e.g., 'US'). | | precision
(`number`) |
Values0-100
| Precision score of the geocoding. | | state\_name
(`text`) | | Full state name. | | state\_code
(`text`) | | Alternate field for state abbreviation. | | country\_subdivision\_
name
(`text`) | | Full name of the state/province (e.g., 'Florida'). | | country\_subdivision\_
code
(`text`) | | Abbreviated code for the state/province (e.g., 'FL'). | | source\_desc
(`text`) | | Source system that provided the geocoded data. | | consulted\_
datasources
(`list[text]`) | | List of data source codes used to generate the address result. | | version
(`text`) | | Data source version identifier (e.g., '2.1'). | | candidate\_countries
(`list[text]`) | | | | match\_level
(`text`) | | Level of detail matched in the address (e.g., 'street\_imputed'). | | precision\_
confidences
(`object`) | | Map of precision scores to confidence values. | | match\_confidence
(`number`) |
Values0.0-1.0
| Confidence level of the address match (e.g., '0.57'). | | constructed\_address
(`text`) | | The fully assembled address string built from the individual address components. | | used\_point\_
coordinates\_from\_
input
(`boolean`) |
ValuesTrue, False
| Whether the geocoding result used latitude/longitude coordinates provided in the input rather than geocoding from an address. | ### Lightbox Geocoding **Code: LBG**
The following attributes will be available in the `location_data` key of the response. | **Data Element** | **Response Values** | **Description** | | :---------------------------------------------- | :----------------------------------------------------------------------------------------------------------------------------- | :----------------------------------------------------------------------------------------------------------- | | street\_number
(`text`) | | Street number component of the address. | | route
(`text`) | | Street name or route component of the address. | | location\_type
(`text`) | | Indicates how precisely the coordinates represent the actual address (e.g., 'ROOFTOP') | | latitude
(`number`) | | Latitude of the location. | | longitude
(`number`) | | Longitude of the location. | | formatted\_address
(`text`) | | Human-readable full address (e.g., '123 Main St, Miami, FL 33133'). | | address\_line\_1
(`text`) | | Primary street address line of the location (e.g., '123 Main St'). | | address\_line\_2
(`text`) | | Secondary address information of the location (e.g., Apt. 33) | | city
(`text`) | | City where the property is located (e.g., 'Miami'). | | postal\_code
(`text`) | | Postal code (e.g., ZIP code in the US). | | county
(`text`) | | County or equivalent region for the location (e.g., 'Miami-Dade'). | | state
(`text`) | | State abbreviation (e.g., 'MA'). | | country
(`text`) | | Country where the property is located (e.g., 'US'). | | precision
(`number`) |
Values0-100
| Precision score of the geocoding. | | state\_name
(`text`) | | Full state name. | | state\_code
(`text`) | | Alternate field for state abbreviation. | | country\_subdivision\_
name
(`text`) | | Full name of the state/province (e.g., 'Florida'). | | country\_subdivision\_
code
(`text`) | | Abbreviated code for the state/province (e.g., 'FL'). | | score
(`number`) | | Overall confidence score for the geocoding match. | | street\_number\_score
(`number`) | | Confidence score for the street number component match. | | route\_score
(`number`) | | Confidence score for the street name/route component match. | | address\_line\_1\_score
(`number`) | | Confidence score for the primary address line match. | | city\_score
(`number`) | | Confidence score for the city/locality component match. | | postal\_code\_score
(`number`) | | Confidence score for the postal code component match. | | address\_id
(`text`) | | Unique Lightbox identifier for the geocoded address. | | parcel\_id
(`text`) | | Unique Lightbox identifier for the parcel associated with the address. | | assessment\_id
(`text`) | | Unique Lightbox identifier for the tax assessment record associated with the address. | | structure\_id
(`text`) | | Unique Lightbox identifier for the structure/building at the address. | | precision\_code
(`number`) |
Values[Precision Code List](https://lightbox.document360.io/docs/geocode-precision-code)
| Lightbox precision code indicating the level of geocoding accuracy (lower values indicate higher precision). | # Introduction Source: https://docs.pingintel.com/introduction Ping API Documentation ## Welcome to Ping! Ping provides tools for the property insurance industry to streamline the underwriting process using modern AI and well-designed tooling. This guide provides information for developers to integrate Ping tools into their existing systems and gain visibility into the data they are creating. If you have any questions, please reach out to [support@pingintel.com](mailto:support@pingintel.com). ## APIs Each Ping product provides its own API. Extract insurance data from SOVs, ACORDs, and loss runs. Access geocoding and data from a wide variety of sources. Automate insurance workflows. ## Using AI tools with these docs Point your AI coding assistant or agent at [llms.txt](https://docs.pingintel.com/llms.txt) for an index of every page, or [llms-full.txt](https://docs.pingintel.com/llms-full.txt) for the full documentation in a single file. Feed either URL to the tool so it works from current, structured content instead of a general web crawl. # Buildings Attributes Source: https://docs.pingintel.com/json-formats/buildings ## Item Attributes Each attribute specifies a data type. The following types are used: * `text` arbitrary string value * `number` numeric value * `percentage` numeric value expressed as a percent * `currency` numeric monetary value * `boolean` true/false value * `date` calendar date (YYYY-MM-DD) * `year` four-digit value representing a year * `choices` value selected from a predefined list of options * `object` JSON-like key/value structure * `†` If an attribute's data type has a dagger (†) next to it, the attribute will actually contain a mapping containing one or more of the following attributes (if null, they are simply not included): ``` { "value": Cleaned-up data value. "confidence": 0.0 (lowest confidence) to 1.0 (highest confidence), indicating a reliability score for the element. "original": Cell value as originally read, before any scrubbing operations. "source": Provenance of the data. "units": Currency of value, if known. "comment": Human-readable information about the derivation of the value. } ``` ## **Base Attributes** **Essential metadata about the item, its source row, parsing context, and any attached custom or external data.** **`item_key`** (`text`) Uniquely identify each item globally. **`extra`** (`object`) Mapping containing labels/values of any additional unidentified but parsed data. **`custom_attrs`** (`object†`) Client Custom Attributes: Any custom client-specific attributes. **`building_counter`** (`number`) Incrementing counter to uniquely identify each item within the output. **`sheet_name`** (`text`) Excel Worksheet Name: Name of the original source worksheet. **`sheet_row_number`** (`number`) Excel Worksheet Row: Original source Excel row number. **`parsing_sheet_name`** (`text`) Actively Parsing Excel Worksheet Name: Name of the worksheet being parsed (from the scrubber/intermediate format, as opposed to the original source). Same as sheet\_name unless explicitly mapped from a Ping-generated scrubber sheet. **`parsing_sheet_row_number`** (`number`) Actively Parsing Excel Worksheet Row: Source Excel row number being parsed. Same as sheet\_row\_number unless explicitly mapped from a Ping-generated scrubber sheet. **`reliability`** (`object`) An estimate of the quality of scrubbing/mapping of several key categories. **`reliability_reason`** (`object`) Justification for assigned `reliability` when available. **`external_data`** (`object`) External Data: Key/object pairs of third-party enrichment as fetched from Ping Data. **`zones`** (`object`) Calculated zones for each peril. **`integration_results`** (`object`) Integration Results: Results of any external data sources: ABOUT\_TO\_REQUEST="A" NOT\_REQUESTED="N" LOCALLY\_CACHED="C" REQUESTED="R" LOCALLY\_CACHED\_FAILURE="G FAILED="F" SKIPPED="S" **`integration_messages`** (`object`) Integration Messages: Error messages provided by any external data sources. **`appurtenant_structure_of`** (`text†`) Identifies the primary or principal building to which an appurtenant (secondary or accessory) structure is related. **`ping_viewer_url`** (`text`) **`ping_pli_url`** (`text`) **`orig`** (`object`) Original Excel cell data for any relevant source cells. **`individual_values`** (`object`) Individual Values: If more than one value has been set for an attribute, each individually is included here (as well as aggregated into the regular attribute). ## **Area** **Attributes that provide information about the building’s area and its occupancy type and percentage.** **`const__bldg_area`** (`number†`) Building Area: Total building area representing the overall floor space of the structure. Guaranteed to be sqft. Available integrations: HH bldg\_area, LB bldg\_area, BV bldg\_area. **`const__bldg_area_unit`** (`text†`) Building Area Unit: The unit of measurement used for the building area (e.g., square feet, square meters). **`occupancy__bldg_area_pct_occupied`** (`percentage†`) Building Area Percent Occupied **`occupancy__bldg_area_pct_assisted_living`** (`percentage†`) % Assisted Living Occupancy **`occupancy__bldg_area_pct_senior`** (`percentage†`) % Senior Occupancy **`occupancy__bldg_area_pct_student`** (`percentage†`) % Student Occupancy **`occupancy__bldg_area_pct_subsidized`** (`percentage†`) Building Area Percent Subsidized ## **Construction** **Attributes that provide descriptive information about the building’s construction type, materials, and structural system.** **`const__desc`** (`text†`) Construction: Original SOV construction information. Available integrations: HH construction\_type, LB construction\_type. **`const__desc_ping`** (`choices†`) Ping Construction Description * `Automobiles - Automobiles` * `Bridges - Conventional - Continuous Bridges` * `Bridges - Conventional - Multiple Span Bridges` * `Bridges - Major Bridges` * `Chimneys - Concrete Chimneys` * `Chimneys - Masonry Chimneys` * `Chimneys - Steel Chimneys` * `Concrete - Pre-cast Concrete` * `Concrete - Pre-cast Concrete with Shear Wall` * `Concrete - Reinforced Concrete` * `Concrete - Reinforced Concrete MRF` * `Concrete - Reinforced Concrete MRF - Ductile` * `Concrete - Reinforced Concrete MRF - Non-Ductile` * `Concrete - Reinforced Concrete MRF with URM` * `Concrete - Reinforced Concrete Shear Wall (with MRF)` * `Concrete - Reinforced Concrete Shear Wall (without MRF)` * `Concrete - Tilt-Up` * `Dams - Concrete Dams` * `Dams - Earthfill Dams` * `Equipment - Electrical Equipment` * `Equipment - High Technology Equipment` * `Equipment - Mechanical Equipment` * `Equipment - Office Equipment` * `Equipment - Residential Equipment` * `Equipment - Trains, Trucks, Airplanes` * `Marine Cargo - Carpool` * `Marine Cargo - Dry Bulk Cargo` * `Marine Cargo - General and Containerized Cargo` * `Marine Cargo - General/Unknown` * `Marine Cargo - Heavy Cargo` * `Marine Cargo - Liquid Bulk Cargo` * `Marine Cargo - Refrigerated Cargo` * `Marine Craft (Boats and Yachts) - Pleasure Boats and Yachts` * `Marine Craft (Boats and Yachts) - Pleasure Boats and Yachts - Power Boats` * `Marine Craft (Boats and Yachts) - Pleasure Boats and Yachts - Sail Boats` * `Masonry - Adobe` * `Masonry - Joisted Masonry` * `Masonry - Masonry` * `Masonry - Reinforced Masonry` * `Masonry - Reinforced Masonry Shear Wall (with MRF)` * `Masonry - Reinforced Masonry Shear Wall (without MRF)` * `Masonry - Rubble Stone Masonry` * `Masonry - Unreinforced Masonry - Bearing Frame` * `Masonry - Unreinforced Masonry - Bearing Wall` * `Miscellaneous - Canals` * `Miscellaneous - Compressor Stations` * `Miscellaneous - Conveyor Systems` * `Miscellaneous - Cranes` * `Miscellaneous - Earth Retaining Structures` * `Miscellaneous - Marine Hull` * `Miscellaneous - Offshore Structures` * `Miscellaneous - Pumping Stations` * `Miscellaneous - Railway Property (not valid in the United states)` * `Miscellaneous - Transit Warehouse` * `Miscellaneous - Waterfront Structures` * `Mobile Homes - Mobile Home with Full Tie-Downs` * `Mobile Homes - Mobile Home with No Tie-Downs` * `Mobile Homes - Mobile Home with Partial Tie-Downs` * `Mobile Homes - Mobile Homes` * `Pavements - Highways` * `Pavements - Railroads` * `Pavements - Runways` * `Pipelines - At Grade Pipelines` * `Pipelines - Underground Pipelines` * `Special - Impact Resistance Glass` * `Special - Long Span` * `Special - Safety Glass` * `Special - Semi-Wind Resistive` * `Special - Unknown Glass` * `Special - Wind Resistive` * `Steel - Braced Steel Frame` * `Steel - Light Metal` * `Steel - Steel` * `Steel - Steel Frame with Concrete Shear Wall` * `Steel - Steel Frame with URM` * `Steel - Steel Long Span` * `Steel - Steel MRF` * `Steel - Steel MRF - Distributed` * `Steel - Steel MRF - Perimeter` * `Steel - Steel Reinforced Concrete` * `Storage Tanks - Elevated Liquid Tanks` * `Storage Tanks - Elevated Solid Tanks` * `Storage Tanks - On Ground Liquid Tanks` * `Storage Tanks - On Ground Solid Tanks` * `Storage Tanks - Underground Liquid Tanks` * `Storage Tanks - Underground Solid Tanks` * `Towers - Broadcast Towers` * `Towers - Electrical Transmission - Conventional` * `Towers - Electrical Transmission - Major` * `Towers - Observation Towers` * `Towers - Offshore Towers` * `Tunnels - Alluvium Tunnels` * `Tunnels - Cut and Cover Tunnels` * `Tunnels - Rock Tunnels` * `Unknown` * `Wood - Hale Construction (Indigenous Hawaii)` * `Wood - Heavy Timber` * `Wood - Light Wood Frame` * `Wood - Lightweight Cladding` * `Wood - Masonry Veneer` * `Wood - Wood Frame (Modern)` * `Masonry - Confined Masonry` * `Masonry - Cavity Double Brick` * `Equipment - Thermal Power Plant` * `Marine Assets - Marine Assets Automobiles` * `Marine Assets - Break Bulk Cargo` * `Marine Assets - Marine Assets Dry Bulk Cargo` * `Marine Assets - Marine Assets Liquid Bulk Cargo` * `Marine Assets - Consumables` * `Marine Assets - Temperature-Controlled Cargo` * `Marine Assets - Electronics Cargo` * `Marine Assets - Chemical Products` * `Marine Assets - Explosives Cargo` * `Marine Assets - General Cargo` * `Marine Assets - Heavy Industry Cargo` * `Marine Assets - Light Industry Cargo` * `Marine Assets - Petroleum Products` * `Marine Assets - Pharmaceuticals` * `Marine Assets - Project Cargos` * `Marine Assets - Livestock being shipped` * `General Specie - Statuettes, ornamental articles, fibers, arts and crafts, etc.` * `Fine Art & Collectibles - Paintings, frames, sculpture, etc.` * `Cash In Transit - Cash being transferred` * `Jewellers Block - Jewels, engravings and valuable metals and stones` * `Offshore Assets - Offshore Wind Turbines` * `Marine Cargo - Combustible - Carpool` * `Marine Cargo - Combustible - General and Containerized Cargo` * `Marine Cargo - Combustible - Heavy Cargo` * `Marine Cargo - Combustible - Refrigerated Cargo` * `Marine Cargo - Combustible - Dry Bulk Cargo` * `Marine Cargo - Combustible - Liquid Bulk Cargo` * `Marine Cargo - Unknown Marine Cargo - Combustible` * `Marine Cargo - Non-Combustible - Carpool` * `Marine Cargo - Non-Combustible - General and Containerized Cargo` * `Marine Cargo - Non-Combustible - Heavy Cargo` * `Marine Cargo - Non-Combustible - Refrigerated Cargo` * `Marine Cargo - Non-Combustible - Dry Bulk Cargo` * `Marine Cargo - Non-Combustible - Liquid Bulk Cargo` * `Marine Cargo - Unknown Marine Cargo - Non-Combustible` * `Offshore Assets - Unknown` * `Offshore Assets - Caisson` * `Offshore Assets - Compliant Tower` * `Offshore Assets - Fixed Jacket Platform` * `Offshore Assets - Jackup` * `Offshore Assets - Mini Tension Leg Platform (MTLP)` * `Offshore Assets - Drill Rig` * `Offshore Assets - Semi-Submersible Floating Production System` * `Offshore Assets - Drill Ship` * `Offshore Assets - SPAR Floating Production System` * `Offshore Assets - Submersible Production System` * `Offshore Assets - Underwater Production Units, Completion Units, and Templates` * `Offshore Assets - Tension Leg Platform` * `Offshore Assets - Well Protector` * `Bridges - Unknown Bridge (Non-Seismic or Seismic)` * `Bridges - Multi-Span - Simply Supported (Non-Seismic or Seismic) Concrete Bridge` * `Bridges - Multi-Span - Simply Supported (Non-Seismic or Seismic) Steel Bridge` * `Bridges - Single Span (Non-Seismic or Seismic) Bridge` * `Bridges - General - Concrete (Non-Seismic or Seismic) Bridge` * `Bridges - General - Steel (Non-Seismic or Seismic) Bridge` * `Bridges - Multi-Span - Continuous (Non-Seismic or Seismic) Concrete Bridge` * `Bridges - Multi-Span - Continuous (Non-Seismic or Seismic) Steel Bridge` * `Bridges - Major Bridge (Non-Seismic or Seismic)` * `Tunnels - Alluvium Tunnels (2000 series)` * `Tunnels - Alluvial Bored Tunnels` * `Tunnels - Rock Tunnels (2000 series)` * `Tunnels - Rock Bored Tunnels` * `Tunnels - Unknown Tunnel` * `Tunnels - Rock Cut and Cover Tunnels` * `Tunnels - Alluvial Cut and Cover Tunnels` * `Storage Tanks - Unknown Tanks` * `Storage Tanks - Underground Liquid Tanks (2000 series)` * `Storage Tanks - Underground Solid Tanks (2000 series)` * `Storage Tanks - On Ground Liquid Tanks (2000 series)` * `Storage Tanks - On Ground Steel Liquid Tanks` * `Storage Tanks - On Ground Concrete Liquid Tanks` * `Storage Tanks - On Ground Solid Tanks (2000 series)` * `Storage Tanks - On Ground Steel Solid Tanks` * `Storage Tanks - On Ground Concrete Solid Tanks` * `Storage Tanks - Elevated Liquid Tanks (2000 series)` * `Storage Tanks - Elevated Steel Liquid Tanks` * `Storage Tanks - Elevated Concrete Liquid Tanks (2000 series)` * `Storage Tanks - Elevated Solid Tanks (2000 series)` * `Storage Tanks - Elevated Steel Solid Tanks` * `Storage Tanks - Elevated Concrete Solid Tanks` * `Pipelines - Unknown Pipeline` * `Pipelines - General Underground Pipelines` * `Pipelines - Underground Cast Iron Pipelines` * `Pipelines - Underground Asbestos Cement Pipelines` * `Pipelines - Underground Concrete Pipelines` * `Pipelines - Underground PVC Pipelines` * `Pipelines - Underground Ductile Iron Pipelines` * `Pipelines - General At Grade Pipelines` * `Pipelines - At Grade Cast Iron Pipelines` * `Pipelines - At Grade Asbestos Cement Pipelines` * `Pipelines - At Grade Concrete Pipelines` * `Pipelines - At Grade PVC Pipelines` * `Pipelines - At Grade Ductile Iron Pipelines` **`const__category_ping`** (`text†`) Ping Construction Group: First part of const\_\_desc\_ping. **`const__desc_detail_ping`** (`text†`) Ping Construction Detail: Last part of const\_\_desc\_ping. **`const__code_iso`** (`choices†`) ISO Construction Code: The Insurance Services Office (ISO) Construction Code, which classifies a building’s structural type and fire-resistance characteristics. * `0: Unknown` * `1: Frame` * `2: Joisted Masonry` * `3: Non-Combustible` * `4: Masonry Non-Combustible` * `5: Modified Fire Resistive` * `6: Fire Resistive` * `7: Heavy Timber Joisted Masonry` * `8: Superior Non-Combustible` * `9: Superior Masonry Non-Combustible` **`const__code_atc`** (`choices†`) ATC Construction Code: The Applied Technology Council (ATC) Construction Code, which classifies structures by their construction type, materials, and structural system. * `0: Unknown` * `1: Wood Frame` * `2: Light Metal` * `3: Unreinforced Masonry Wall` * `4: URM Wall with Frame` * `5: RC Shear Wall with Frame` * `6: RC Shear Wall without Frame` * `7: RM Shear Wall` * `8: RM Shear Wall with Frame` * `9: Braced Steel Frame` * `10: Moment Steel Frame (Perimeter)` * `11: Moment Steel Frame (Distributed)` * `12: Ductile RC Frame (Distributed)` * `13: Non-Ductile RC Frame (Distributed)` * `14: Precast Concrete (Non Tilt-Up)` * `15: Long Span` * `16: Tilt-Up` * `17: Mobile Home` * `18: Specially Engineered Facility` * `19: Simple Span Bridges (<500 ft.)` * `20: Continuous Bridges (<500 ft.)` * `21: Bridges (>500 ft. spans)` * `22: Pipelines - Underground` * `23: Pipelines - At Grade` * `24: Concrete Dams` * `25: Earthfill and Rockfill Dams` * `26: Alluvium Tunnels` * `27: Rock Tunnels` * `28: Cut and Cover Tunnels` * `29: Storage Tanks - Underground Liquid` * `30: Storage Tanks - Underground Solid` * `31: Storage Tanks - On Ground Liquid` * `32: Storage Tanks - On Ground Solid` * `33: Storage Tanks - Elevated Liquid` * `34: Storage Tanks - Elevated Solid` * `35: Railroads` * `36: Highways` * `37: Runways` * `38: High Industrial Chimneys - Masonry` * `39: High Industrial Chimneys - Concrete` * `40: High Industrial Chimneys - Steel` * `41: Cranes` * `42: Conveyor Systems` * `43: Transmission Towers (< 100 ft.)` * `44: Transmission Towers (> 100 ft.)` * `45: Broadcast Towers` * `46: Observation Towers` * `47: Offshore Towers` * `48: Canals` * `49: Earth Retaining Structures` * `50: Waterfront Structures` * `51: Equipment - Residential` * `52: Equipment - Office` * `53: Equipment - Electrical` * `54: Equipment - Mechanical` * `55: Equipment - High tech. & lab.` * `56: Trains, Trucks, Airplanes` * `57: Petrochemical Facilities (for the Caribbean, Guam, and Indonesia only)` * `57A: Oil Refineries & Petrochemical Plants (for the Caribbean, Guam, and Indonesia only)` * `57B: Tank Farms (for the Caribbean, Guam, and Indonesia only)` * `57C: Pumping Stations (for the Caribbean, Guam, and Indonesia only)` * `57D: Pipelines (for the Caribbean, Guam, and Indonesia only)` * `58: Electric Power Systems (for the Caribbean, Guam, and Indonesia only)` * `58A: Transmission/Distribution Substations (for the Caribbean, Guam, and Indonesia only)` * `58B: Transmission/Distribution Lines (for the Caribbean, Guam, and Indonesia only)` * `58C: Fossil Fuel Plants (for the Caribbean, Guam, and Indonesia only)` * `58D: Cogeneration Plants (for the Caribbean, Guam, and Indonesia only)` * `58E: Hydroelectric Plants (for the Caribbean, Guam, and Indonesia only)` * `59: Natural Gas Facilities (for the Caribbean, Guam, and Indonesia only)` * `59A: Compressor Stations (for the Caribbean, Guam, and Indonesia only)` * `59B: Natural Gas Pipelines (for the Caribbean, Guam, and Indonesia only)` * `59C: Liquefied Natural Gas (for the Caribbean, Guam, and Indonesia only)` * `60: Port/Harbor Facilities (for the Caribbean, Guam, and Indonesia only)` * `60A: Waterfront Facilities (for the Caribbean, Guam, and Indonesia only)` * `60B: Crane/Cargo Handling (for the Caribbean, Guam, and Indonesia only)` * `60C: Fuel Facilities (for the Caribbean, Guam, and Indonesia only)` * `61: Heavy Industrial Facilities (for the Caribbean, Guam, and Indonesia only)` * `61A: Pulp & Paper (for the Caribbean, Guam, and Indonesia only)` * `61B: Steel Mill (for the Caribbean, Guam, and Indonesia only)` * `61C: Mining (for the Caribbean, Guam, and Indonesia only)` * `61D: Cement Mill (for the Caribbean, Guam, and Indonesia only)` * `62: Light Industrial Facilities (for the Caribbean, Guam, and Indonesia only)` * `62A: High Technology (for the Caribbean, Guam, and Indonesia only)` * `62B: Telecommunication (for the Caribbean, Guam, and Indonesia only)` * `71: Wood Frame Single Wall (Hawaii only)` * `72A: Wood Frame OSHPD SPC1` * `72B: Wood Frame OSHPD SPC2` * `72C: Wood Frame OSHPD SPC3` * `72D: Wood Frame OSHPD SPC4` * `72E: Wood Frame OSHPD SPC5` * `73A: Unreinforced Masonry Pre-1973 OSHPD SPC1` * `73B: Unreinforced Masonry Pre-1973 OSHPD SPC2` * `74A: Structural Masonry Pre-1973 OSHPD SPC1` * `74B: Structural Masonry Pre-1973 OSHPD SPC2` * `74C: Structural Masonry Pre-1973 OSHPD SPC3` * `74D: Structural Masonry 1974-1994 OSHPD SPC2` * `74E: Structural Masonry 1974-1994 OSHPD SPC3` * `74F: Structural Masonry Post-1995 OSHPD SPC3` * `75A: Reinforced Concrete Moment Resisting Frame Pre-1973 OSHPD SPC1` * `75B: Reinforced Concrete Moment Resisting Frame Pre-1973 OSHPD SPC2` * `75C: Reinforced Concrete Moment Resisting Frame 1974-1994 OSHPD SPC2` * `75D: Reinforced Concrete Moment Resisting Frame 1974-1994 OSHPD SPC3` * `75E: Reinforced Concrete Moment Resisting Frame 1974-1994 OSHPD SPC4` * `75F: Reinforced Concrete Moment Resisting Frame Post-1995 OSHPD SPC3` * `75G: Reinforced Concrete Moment Resisting Frame Post-1995 OSHPD SPC4` * `75H: Reinforced Concrete Moment Resisting Frame Post-1995 OSHPD SPC5` * `76A: RC MRF with Shear Walls Pre-1973 OSHPD SPC1` * `76B: RC MRF with Shear Walls Pre-1973 OSHPD SPC2` * `76C: RC MRF with Shear Walls 1974-1994 OSHPD SPC2` * `76D: RC MRF with Shear Walls 1974-1994 OSHPD SPC3` * `76E: RC MRF with Shear Walls 1974-1994 OSHPD SPC4` * `76F: RC MRF with Shear Walls Post-1995 OSHPD SPC3` * `76G: RC MRF with Shear Walls Post-1995 OSHPD SPC4` * `76H: RC MRF with Shear Walls Post-1995 OSHPD SPC5` * `77A: Reinforced Concrete Shear Wall Pre-1973 OSHPD SPC1` * `77B: Reinforced Concrete Shear Wall Pre-1973 OSHPD SPC2` * `77C: Reinforced Concrete Shear Wall 1974-1994 OSHPD SPC2` * `77D: Reinforced Concrete Shear Wall 1974-1994 OSHPD SPC3` * `77E: Reinforced Concrete Shear Wall 1974-1994 OSHPD SPC4` * `77F: Reinforced Concrete Shear Wall Post-1995 OSHPD SPC3` * `77G: Reinforced Concrete Shear Wall Post-1995 OSHPD SPC4` * `77H: Reinforced Concrete Shear Wall Post-1995 OSHPD SPC5` * `78A: Steel Moment Resisting Frame Pre-1973 OSHPD SPC1` * `78B: Steel Moment Resisting Frame Pre-1973 OSHPD SPC2` * `78C: Steel Moment Resisting Frame 1974-1994 OSHPD SPC2` * `78D: Steel Moment Resisting Frame 1974-1994 OSHPD SPC3` * `78E: Steel Moment Resisting Frame 1974-1994 OSHPD SPC4` * `78F: Steel Moment Resisting Frame Post-1995 OSHPD SPC3` * `78G: Steel Moment Resisting Frame Post-1995 OSHPD SPC4` * `78H: Steel Moment Resisting Frame Post-1995 OSHPD SPC5` * `79A: Braced Steel MRF Pre-1973 OSHPD SPC1` * `79B: Braced Steel MRF Pre-1973 OSHPD SPC2` * `79C: Braced Steel MRF 1974-1994 OSHPD SPC2` * `79D: Braced Steel MRF 1974-1994 OSHPD SPC3` * `79E: Braced Steel MRF OSHPD 1974-1994 SPC4` * `79F: Braced Steel MRF Post-1995 OSHPD SPC3` * `79G: Braced Steel MRF Post-1995 OSHPD SPC4` * `79H: Braced Steel MRF Post-1995 OSHPD SPC5` * `80: Reinforced Concrete Frame with Wood Frame in the Upper Floors` * `81: Steel Frame with Wood Frame in the Upper Floors` * `82: High Speed Railway` **`const__code_air`** (`choices†`) AIR Construction Code: The AIR Construction Code, a classification system provided by AIR (Applied Insurance Research) Worldwide to categorize buildings and structures by their construction materials and methods. * `100: Unknown` * `101: Wood - Wood Frame (Modern)` * `102: Wood - Light Wood Frame` * `103: Wood - Masonry Veneer` * `104: Wood - Heavy Timber` * `107: Wood - Lightweight Cladding` * `108: Wood - Hale Construction (Indigenous Hawaii)` * `111: Masonry - Masonry` * `112: Masonry - Adobe` * `113: Masonry - Rubble Stone Masonry` * `114: Masonry - Unreinforced Masonry - Bearing Wall` * `115: Masonry - Unreinforced Masonry - Bearing Frame` * `116: Masonry - Reinforced Masonry` * `117: Masonry - Reinforced Masonry Shear Wall (with MRF)` * `118: Masonry - Reinforced Masonry Shear Wall (without MRF)` * `119: Masonry - Joisted Masonry` * `120: Masonry - Confined Masonry` * `121: Masonry - Cavity Double Brick` * `131: Concrete - Reinforced Concrete` * `132: Concrete - Reinforced Concrete Shear Wall (with MRF)` * `133: Concrete - Reinforced Concrete Shear Wall (without MRF)` * `134: Concrete - Reinforced Concrete MRF - Ductile` * `135: Concrete - Reinforced Concrete MRF - Non-Ductile` * `136: Concrete - Tilt-Up` * `137: Concrete - Pre-cast Concrete` * `138: Concrete - Pre-cast Concrete with Shear Wall` * `139: Concrete - Reinforced Concrete MRF` * `140: Concrete - Reinforced Concrete MRF with URM` * `151: Steel - Steel` * `152: Steel - Light Metal` * `153: Steel - Braced Steel Frame` * `154: Steel - Steel MRF - Perimeter` * `155: Steel - Steel MRF - Distributed` * `156: Steel - Steel MRF` * `157: Steel - Steel Frame with URM` * `158: Steel - Steel Frame with Concrete Shear Wall` * `159: Steel - Steel Reinforced Concrete` * `160: Steel - Steel Long Span` * `181: Special - Long Span` * `182: Special - Semi-Wind Resistive` * `183: Special - Wind Resistive` * `185: Special - Unknown Glass` * `186: Special - Safety Glass` * `187: Special - Impact Resistance Glass` * `191: Mobile Homes - Mobile Homes` * `192: Mobile Homes - Mobile Home with No Tie-Downs` * `193: Mobile Homes - Mobile Home with Partial Tie-Downs` * `194: Mobile Homes - Mobile Home with Full Tie-Downs` * `201: Bridges - Conventional - Multiple Span Bridges` * `202: Bridges - Conventional - Continuous Bridges` * `203: Bridges - Major Bridges` * `204: Pavements - Railroads` * `205: Pavements - Highways` * `206: Pavements - Runways` * `211: Dams - Concrete Dams` * `212: Dams - Earthfill Dams` * `213: Tunnels - Alluvium Tunnels` * `214: Tunnels - Rock Tunnels` * `215: Tunnels - Cut and Cover Tunnels` * `221: Storage Tanks - Underground Liquid Tanks` * `222: Storage Tanks - Underground Solid Tanks` * `223: Storage Tanks - On Ground Liquid Tanks` * `224: Storage Tanks - On Ground Solid Tanks` * `225: Storage Tanks - Elevated Liquid Tanks` * `226: Storage Tanks - Elevated Solid Tanks` * `227: Pipelines - Underground Pipelines` * `228: Pipelines - At Grade Pipelines` * `231: Chimneys - Masonry Chimneys` * `232: Chimneys - Concrete Chimneys` * `233: Chimneys - Steel Chimneys` * `234: Towers - Electrical Transmission - Conventional` * `235: Towers - Electrical Transmission - Major` * `236: Towers - Broadcast Towers` * `237: Towers - Observation Towers` * `238: Towers - Offshore Towers` * `240: Offshore Assets - Offshore Wind Turbines` * `241: Equipment - Residential Equipment` * `242: Equipment - Office Equipment` * `243: Equipment - Electrical Equipment` * `244: Equipment - Mechanical Equipment` * `245: Equipment - High Technology Equipment` * `246: Equipment - Trains, Trucks, Airplanes` * `247: Equipment - Thermal Power Plant` * `250: Miscellaneous - Railway Property (not valid in the United states)` * `251: Miscellaneous - Pumping Stations` * `252: Miscellaneous - Compressor Stations` * `253: Miscellaneous - Cranes` * `254: Miscellaneous - Conveyor Systems` * `255: Miscellaneous - Canals` * `256: Miscellaneous - Earth Retaining Structures` * `257: Miscellaneous - Waterfront Structures` * `258: Miscellaneous - Offshore Structures` * `259: Miscellaneous - Transit Warehouse` * `260: Miscellaneous - Marine Hull` * `261: Automobiles - Automobiles` * `265: Marine Craft (Boats and Yachts) - Pleasure Boats and Yachts` * `266: Marine Craft (Boats and Yachts) - Pleasure Boats and Yachts - Power Boats` * `267: Marine Craft (Boats and Yachts) - Pleasure Boats and Yachts - Sail Boats` * `270: Marine Cargo - Carpool` * `271: Marine Cargo - General and Containerized Cargo` * `272: Marine Cargo - Heavy Cargo` * `273: Marine Cargo - Refrigerated Cargo` * `274: Marine Cargo - Dry Bulk Cargo` * `275: Marine Cargo - Liquid Bulk Cargo` * `276: Marine Cargo - General/Unknown` * `280: Marine Cargo - Combustible - Carpool` * `281: Marine Cargo - Combustible - General and Containerized Cargo` * `282: Marine Cargo - Combustible - Heavy Cargo` * `283: Marine Cargo - Combustible - Refrigerated Cargo` * `284: Marine Cargo - Combustible - Dry Bulk Cargo` * `285: Marine Cargo - Combustible - Liquid Bulk Cargo` * `286: Marine Cargo - Unknown Marine Cargo - Combustible` * `290: Marine Cargo - Non-Combustible - Carpool` * `291: Marine Cargo - Non-Combustible - General and Containerized Cargo` * `292: Marine Cargo - Non-Combustible - Heavy Cargo` * `293: Marine Cargo - Non-Combustible - Refrigerated Cargo` * `294: Marine Cargo - Non-Combustible - Dry Bulk Cargo` * `295: Marine Cargo - Non-Combustible - Liquid Bulk Cargo` * `296: Marine Cargo - Unknown Marine Cargo - Non-Combustible` * `800: Offshore Assets - Unknown` * `801: Offshore Assets - Caisson` * `802: Offshore Assets - Compliant Tower` * `803: Offshore Assets - Fixed Jacket Platform` * `804: Offshore Assets - Jackup` * `805: Offshore Assets - Mini Tension Leg Platform (MTLP)` * `806: Offshore Assets - Drill Rig` * `807: Offshore Assets - Semi-Submersible Floating Production System` * `808: Offshore Assets - Drill Ship` * `809: Offshore Assets - SPAR Floating Production System` * `810: Offshore Assets - Submersible Production System` * `811: Offshore Assets - Underwater Production Units, Completion Units, and Templates` * `812: Offshore Assets - Tension Leg Platform` * `813: Offshore Assets - Well Protector` * `2010: Bridges - Unknown Bridge (Non-Seismic or Seismic)` * `2011: Bridges - Multi-Span - Simply Supported (Non-Seismic or Seismic) Concrete Bridge` * `2012: Bridges - Multi-Span - Simply Supported (Non-Seismic or Seismic) Steel Bridge` * `2013: Bridges - Single Span (Non-Seismic or Seismic) Bridge` * `2015: Bridges - General - Concrete (Non-Seismic or Seismic) Bridge` * `2016: Bridges - General - Steel (Non-Seismic or Seismic) Bridge` * `2021: Bridges - Multi-Span - Continuous (Non-Seismic or Seismic) Concrete Bridge` * `2022: Bridges - Multi-Span - Continuous (Non-Seismic or Seismic) Steel Bridge` * `2031: Bridges - Major Bridge (Non-Seismic or Seismic)` * `2131: Tunnels - Alluvium Tunnels (2000 series)` * `2132: Tunnels - Alluvial Bored Tunnels` * `2141: Tunnels - Rock Tunnels (2000 series)` * `2142: Tunnels - Rock Bored Tunnels` * `2150: Tunnels - Unknown Tunnel` * `2151: Tunnels - Rock Cut and Cover Tunnels` * `2152: Tunnels - Alluvial Cut and Cover Tunnels` * `2210: Storage Tanks - Unknown Tanks` * `2211: Storage Tanks - Underground Liquid Tanks (2000 series)` * `2221: Storage Tanks - Underground Solid Tanks (2000 series)` * `2231: Storage Tanks - On Ground Liquid Tanks (2000 series)` * `2232: Storage Tanks - On Ground Steel Liquid Tanks` * `2233: Storage Tanks - On Ground Concrete Liquid Tanks` * `2241: Storage Tanks - On Ground Solid Tanks (2000 series)` * `2242: Storage Tanks - On Ground Steel Solid Tanks` * `2243: Storage Tanks - On Ground Concrete Solid Tanks` * `2251: Storage Tanks - Elevated Liquid Tanks (2000 series)` * `2252: Storage Tanks - Elevated Steel Liquid Tanks` * `2253: Storage Tanks - Elevated Concrete Liquid Tanks (2000 series)` * `2261: Storage Tanks - Elevated Solid Tanks (2000 series)` * `2262: Storage Tanks - Elevated Steel Solid Tanks` * `2263: Storage Tanks - Elevated Concrete Solid Tanks` * `2270: Pipelines - Unknown Pipeline` * `2271: Pipelines - General Underground Pipelines` * `2272: Pipelines - Underground Cast Iron Pipelines` * `2273: Pipelines - Underground Asbestos Cement Pipelines` * `2274: Pipelines - Underground Concrete Pipelines` * `2275: Pipelines - Underground PVC Pipelines` * `2276: Pipelines - Underground Ductile Iron Pipelines` * `2281: Pipelines - General At Grade Pipelines` * `2282: Pipelines - At Grade Cast Iron Pipelines` * `2283: Pipelines - At Grade Asbestos Cement Pipelines` * `2284: Pipelines - At Grade Concrete Pipelines` * `2285: Pipelines - At Grade PVC Pipelines` * `2286: Pipelines - At Grade Ductile Iron Pipelines` * `2701: Marine Assets - Marine Assets Automobiles` * `2702: Marine Assets - Break Bulk Cargo` * `2703: Marine Assets - Marine Assets Dry Bulk Cargo` * `2704: Marine Assets - Marine Assets Liquid Bulk Cargo` * `2705: Marine Assets - Consumables` * `2706: Marine Assets - Temperature-Controlled Cargo` * `2707: Marine Assets - Electronics Cargo` * `2708: Marine Assets - Chemical Products` * `2709: Marine Assets - Explosives Cargo` * `2710: Marine Assets - General Cargo` * `2711: Marine Assets - Heavy Industry Cargo` * `2712: Marine Assets - Light Industry Cargo` * `2713: Marine Assets - Petroleum Products` * `2714: Marine Assets - Pharmaceuticals` * `2715: Marine Assets - Project Cargos` * `2716: Marine Assets - Livestock being shipped` * `2717: General Specie - Statuettes, ornamental articles, fibers, arts and crafts, etc.` * `2718: Fine Art & Collectibles - Paintings, frames, sculpture, etc.` * `2719: Cash In Transit - Cash being transferred` * `2720: Jewellers Block - Jewels, engravings and valuable metals and stones` **`const__code_rms`** (`choices†`) RMS Construction Code: Specifies the RMS Construction Code which identifies the primary structural system and material used in the building as defined by RMS (Risk Management Solutions) exposure data standards. * `0: Unknown` * `1: Wood` * `1A: Light Wood Frame` * `1A1: Light Wood - Stud Walls` * `1A2: Light Wood - Post & Beam` * `1A3: Light Wood - Stud Walls with Brick Masonry Veneer` * `1A4: Light Wood with URM/Adobe Infill` * `1B: Heavy Timber` * `1B1: Heavy Timber - Frame` * `1B2: Heavy Timber - Frame with Unreinforced Masonry Infill` * `1C1: Timber frame with tiled roof` * `1C2: Timber frame with flat roof` * `1C3: Timber frame with thatch roof` * `2: Masonry` * `2A: Weak Masonry` * `2A1: Rubble Stone Masonry` * `2A2: Adobe` * `2A3: Reinforced Adobe` * `2B: Unreinforced Masonry` * `2B1: Unreinforced Cut Stone Masonry` * `2B2: Unreinforced Sold Brick Masonry` * `2B3: Unreinforced Concrete Block Masonry` * `2B4: Unreinforced Brick Cavity Wall` * `2B6: Bahareque` * `2B7: Unreinforced Solid Brick Masonry - With Rigid Diaphragms` * `2C: Structural Masonry` * `2C1: Reinforced Masonry` * `2C2: Confined Masonry` * `2C3: Confined Masonry with non-RC Slab` * `2C5: Reinforced Masonry with Wood or Metal Studs in the Upper Floors` * `2D: Factory Structure with Brick Columns` * `2D1: Masonry with steep tiled roof` * `2D2: Masonry with low slope tiled roof` * `2D3: Masonry with flat roof` * `2D4: Masonry with thatch roof` * `2E: Multi-story Brick Structure with RC Frames` * `3: Reinforced Concrete` * `3A: Cast-in-place Reinforced Concrete` * `3A1: Reinforced Concrete Moment Resisting Frame (RCMRF)` * `3A10: Reinforced Concrete Frame with Wood Frame in the Upper Floors` * `3A2: RCMRF with Shear Walls` * `3A23: Reinforced Concrete Shear Walls with Limited Ductility` * `3A3: RCMRF with Unreinforced Masonry Infill` * `3A4: Reinforced Concrete Shear Wall` * `3A5: Waffle or Flat Slab` * `3A6: Steel & Reinforced Concrete (SRC)Composite Frame` * `3A7: Concrete Piloti` * `3A8: Concrete Filled Tube (CFT)` * `3A9: Gravity Load Designed RC with Unreinforced Masonry Infill` * `3B: Precast Reinforced Concrete` * `3B1: Precast Moment Resisting Frame` * `3B2: Precast MRF with Shear Walls` * `3B3: Precast MRF with Unreinforced Masonry Infill` * `3B4: Tilt-up` * `3B5: Precast Panel Bearing Wall` * `3B6: Lift Slab` * `3C: Reinforced Concrete WITH WOOD OR METAL ROOF DECK` * `3C1: Reinforced Concrete with tiled roof` * `3C2: Reinforced Concrete with flat roof` * `3D: Factory Structure with RC Columns` * `4: Steel` * `4A: Steel Frame with Concrete Roof Deck` * `4A1: Steel Moment Resisting Frame (MRF)` * `4A2: Steel MRF with Shear Walls` * `4A3: Steel MRF with Unreinforced Masonry Infill` * `4A4: Concentrically Braced Steel Frame` * `4A5: Eccentrically Braced Steel Frame` * `4A6: Gravity Load Designed Steel with Unreinforced Masonry Infill` * `4A7: Steel Frame with Wood Frame in the Upper Floors` * `4B: Light Metal` * `4B1: Light Metal Frame` * `4B2: Light Metal Frame with Unreinforced Masonry Infill` * `4C: Steel Frame with Wood or Metal Roof Deck` * `4C1: Steel frame with tiled roof` * `4C2: Steel frame with flat roof` * `5: Manufactured & Mobile Home` * `5A: Manufactured/Mobile Home without Tie-Downs` * `5B: Manufactured/Mobile Home with Tie-Downs` * `6: Conventional Bridges (<500 ft spans) with Multiple Simple Spans` * `7: Conventional Bridges (<500 ft spans) with Continuous/Monolithic Spans` * `8: Major Bridges (>500 ft spans)` * `9: Underground Pipelines` * `10: Pipelines at Grade` * `11: Concrete Dams` * `12: Earthfill and Rockfill Dams` * `13: Alluvium Tunnels` * `14: Rock Tunnels` * `15: Cut & Cover Tunnels` * `16: Underground Liquid Storage Tanks` * `17: Underground Solid Storage Tanks` * `18: On Ground Liquid Storage Tanks` * `19: On Ground Solid Storage Tanks` * `20: Elevated Liquid Storage Tanks` * `21: Elevated Solid Storage Tanks` * `22: Railroad (Track and Bed)` * `23: Highways` * `24: Runways` * `25: High Industrial Masonry Chimneys` * `26: High Industrial Concrete Chimneys` * `27: High Industrial Steel Chimneys` * `28: Cranes` * `29: Conveyor Systems` * `30: Conventional (<100 ft) Electrical Transmission Line Towers` * `31: Major (>100 ft) Electrical Transmission Line Towers` * `32: Broadcast Towers` * `33: Observation Towers` * `34: Offshore Towers` * `35: Canals` * `36: Earth Retaining Structures (>20 ft High)` * `37: Waterfront Structures` * `38: Residential Equipment` * `39: Office Equipment` * `40: Electrical Equipment` * `41: Mechanical Equipment` * `42: High Technology Lab Equipment` * `43: Trains, Trucks, Airplanes` * `44: Automobiles-Personal` * `45: Automobiles - Dealers` * `46: Petrochemical Facilities (for the Caribbean, Guam, and Indonesia only)` * `46A: Petrochemical - Oil Refineries & Petrochemical Plants (for the Caribbean, Guam, and Indonesia only)` * `46B: Petrochemical - Tank Farms (for the Caribbean, Guam, and Indonesia only)` * `46C: Petrochemical - Pumping Stations (for the Caribbean, Guam, and Indonesia only)` * `46D: Petrochemical - Pipelines (for the Caribbean, Guam, and Indonesia only)` * `47: Electric Power Systems (for the Caribbean, Guam, and Indonesia only)` * `47A: Transmission/ Distribution Substations (for the Caribbean, Guam, and Indonesia only)` * `47B: Transmission/ Distribution Lines (for the Caribbean, Guam, and Indonesia only)` * `47C: Fossil Fuel Plants (for the Caribbean, Guam, and Indonesia only)` * `47D: Cogeneration Plants (for the Caribbean, Guam, and Indonesia only)` * `47E: Hydroelectric Plants (for the Caribbean, Guam, and Indonesia only)` * `48: Natural Gas Facilities (for the Caribbean, Guam, and Indonesia only)` * `48A: Natural Gas - Compressor Stations (for the Caribbean, Guam, and Indonesia only)` * `48B: Natural Gas - Pipelines (for the Caribbean, Guam, and Indonesia only)` * `48C: Natural Gas - Liquefied Natural Gas (for the Caribbean, Guam, and Indonesia only)` * `49: Port/Harbor Facilities (for the Caribbean, Guam, and Indonesia only)` * `49A: Natural Gas - Waterfront Facilities (for the Caribbean, Guam, and Indonesia only)` * `49B: Crane/Cargo Handling (for the Caribbean, Guam, and Indonesia only)` * `49C: Fuel Facilities (for the Caribbean, Guam, and Indonesia only)` * `50: Heavy Industrial Facilities` * `50A: Pulp & Paper (for the Caribbean, Guam, and Indonesia only)` * `50B: Steel Mill (for the Caribbean, Guam, and Indonesia only)` * `50C: Mining (for the Caribbean, Guam, and Indonesia only)` * `50D: Cement Mill (for the Caribbean, Guam, and Indonesia only)` * `51: Light Industrial Facilities (for the Caribbean, Guam, and Indonesia only)` * `51A: High Technology (for the Caribbean, Guam, and Indonesia only)` * `51B: Telecommunication (for the Caribbean, Guam, and Indonesia only)` * `52: MIXED (Greece only)` * `52A: Wood Frame Single Wall (Hawaii only)` * `52B: Wood Frame Double Wall (Hawaii only)` * `53: Golf Country Club` * `54: Boats, Inside a Building (Marina)` * `55: Boats, Moored, Less than 26 ft., Motor` * `56: Boats, Moored, Less than 26 ft., Sail` * `57: Boats, Moored, 26-60 ft., Motor` * `58: Boats, Moored, 26-60 ft., Sail` * `59: Boats, Moored, Greater than 60 ft., Motor` * `60: Boats, Moored, Greater than 60 ft., Sail` * `61: Floating Structures` * `62: Response Control System - General` * `62A: Response Control System - Concrete` * `62B: Response Control System - Steel` * `63: Aircraft, Small` * `64: Aircraft, Medium` * `65: Aircraft, Large` **`const__code_oed`** (`choices†`) * `5000: Unknown` * `5050: Wood, Wood frame` * `5051: Wood, Light wood frame` * `5052: Wood, Masonry veneer` * `5053: Wood, Heavy timber` * `5054: Wood, Okabe` * `5055: Wood, Shinkabe` * `5056: Wood, Lightweight Cladding` * `5057: Wood, Hawaii indigenous material` * `5100: Masonry, Masonry` * `5101: Masonry, Adobe` * `5102: Masonry, Rubble stone masonry` * `5103: Masonry, Unreinforced masonry bearing wall` * `5104: Masonry, Unreinforced masonry bearing frame` * `5105: Masonry, Reinforced masonry` * `5106: Masonry, Reinforced masonry shear wall with mrf` * `5107: Masonry, Reinforced masonry shear wall w/o mrf` * `5108: Masonry, Joisted masonry` * `5109: Masonry, Confined Masonry` * `5110: Masonry, Cavity Double Brick` * `5150: Concrete, Reinforced concrete` * `5151: Concrete, Reinforced concrete shear wall w/ mrf` * `5152: Concrete, Reinforced concrete shear wall w/o mrf` * `5153: Concrete, Reinforced concrete mrf ductile` * `5154: Concrete, Reinforced concrete mrf non-ductile` * `5155: Concrete, Tilt-up` * `5156: Concrete, Pre-cast concrete` * `5157: Concrete, Pre-cast concrete w/ shear wall` * `5158: Concrete, Reinforced concrete mrf` * `5159: Concrete, Reinforced concrete mrf with URM` * `5200: Steel, Steel` * `5201: Steel, Light metal` * `5202: Steel, Braced steel frame` * `5203: Steel, Steel mrf perimeter` * `5204: Steel, Steel mrf distributed` * `5205: Steel, Steel mrf` * `5206: Steel, Steel frame w/ URM` * `5207: Steel, Steel frame w/ concrete shear wall` * `5208: Steel, Steel reinforced concrete` * `5209: Steel, Steel long span` * `5251: Composite, FM - Fire res RC Apt. Masonry dwellings` * `5252: Composite, FT - Fire res non-apt dwl RC mas/stl` * `5253: Composite, FH - Dwellings other than FM, FT` * `5254: Composite, F1 - Fire res RC and masonry bldg` * `5255: Composite, F2 - Semi-fire res and steel bldg` * `5256: Composite, F3 - Buildings other than F1,F2` * `5257: Composite, A: Fire-resistive dwellings` * `5258: Composite, B: Semi-fire-resistive dwellings` * `5259: Composite, C: Slow-burning dwellings` * `5260: Composite, D: Dwelling other than A, B or C` * `5261: Composite, Sp: Fire-resistive concrete buildings` * `5262: Composite, 1: Fire-resistive buildings other` * `5263: Composite, 2: Semi-fire-resistive buildings` * `5264: Composite, 3: Slow-burning buildings` * `5265: Composite, 4: Other than Sp, 1, 2, or 3` * `5301: Special, Long-span` * `5302: Special, Semi-wind resistive` * `5303: Special, Wind resistive` * `5304: Special, Unknown glass` * `5305: Special, Safety glass` * `5306: Special, Impact resistance glass` * `5309: Special, Basement Flood Loss - High Value` * `5310: Special, Flood Resistance General` * `5350: Mobile Homes, Mobile Homes` * `5351: Mobile Homes, Mobile homes no tie down` * `5352: Mobile Homes, Mobile homes part tie down` * `5353: Mobile Homes, Mobile homes full tie down` * `5354: Mobile Homes, Double Wide` * `5400: Bridges, Unknown Bridge` * `5401: Bridges, Conventional multiple span bridges` * `5402: Bridges, Conventional continuous bridges` * `5403: Bridges, Major bridges` * `5404: Bridges, Multispan simply supported CONCRETE` * `5405: Bridges, Multispan simply supported STEEL` * `5406: Bridges, Single Span Bridge` * `5407: Bridges, General Concrete` * `5408: Bridges, General Steel` * `5409: Bridges, Multispan continuous CONCRETE` * `5410: Bridges, Multispan continuous STEEL` * `5451: Railways, General` * `5452: Highways, General` * `5453: Pavements, Runways` * `5454: Highways, Motorways` * `5455: Highways, Trunk road` * `5456: Highways, Primary roads` * `5457: Highways, Seconday roads` * `5458: Highways, Tertiary roads` * `5459: Highways, Unclassified roads` * `5460: Highways, Residential roads` * `5461: Highways, Service road` * `5463: Railways, light rail` * `5464: Railways, Monorail` * `5465: Railways, Standard gauge` * `5466: Railways, Subway` * `5467: Railways, Tram` * `5501: Dams, Concrete dams` * `5502: Dams, Earthfill dams` * `5503: Dam, General` * `5550: Tunnels, Unknown Tunnel` * `5551: Tunnels, Alluvium tunnels` * `5552: Tunnels, Rock tunnels` * `5553: Tunnels, Cut and cover tunnels` * `5554: Tunnels, Rock Cut and Cover Tunnels` * `5555: Tunnels, Alluvial Cut and Cover Tunnels` * `5556: Tunnels, Alluvial Bored Tunnels` * `5557: Tunnels, Rock Bored Tunnels` * `5600: Tanks, Unknown Tanks` * `5601: Tanks, Underground Liquid Tanks` * `5602: Tanks, Underground Solid Tanks` * `5603: Tanks, On Ground Liquid Tanks` * `5604: Tanks, On Ground Steel liquid Tanks` * `5605: Tanks, On Ground Concrete liquid Tanks` * `5606: Tanks, On Ground Solid Tanks` * `5607: Tanks, On Ground Steel solid Tanks` * `5608: Tanks, On Ground Concrete solid Tanks` * `5609: Tanks, Elevated Liquid Tanks` * `5610: Tanks, Elevated Steel liquid Tanks` * `5611: Tanks, Elevated Concrete liquid Tanks` * `5612: Tanks, Elevated Solid Tanks` * `5613: Tanks, Elevated Steel solid Tanks` * `5614: Tanks, Elevated Concrete solid Tanks` * `5650: Pipelines, Unknown Pipeline` * `5651: Pipelines, General Underground Pipelines` * `5652: Pipelines, Underground Cast Iron Pipelines` * `5653: Pipelines, Underground Asbestos Cement Pipelines` * `5654: Pipelines, Underground Concrete Pipelines` * `5655: Pipelines, Underground PVC Pipelines` * `5656: Pipelines, Underground Ductile Iron Pipelines` * `5657: Pipelines, General At Grade Pipelines` * `5658: Pipelines, At Grade Cast Iron Pipelines` * `5659: Pipelines, At Grade Asbestos Cement Pipelines` * `5660: Pipelines, At Grade Concrete Pipelines` * `5661: Pipelines, At Grade PVC Pipelines` * `5662: Pipelines, At Grade Ductile Iron Pipelines` * `5701: Chimneys, Masonry chimneys` * `5702: Chimneys, Concrete chimneys` * `5703: Chimneys, Steel chimneys` * `5751: Towers, Electrical transmission conventional` * `5752: Towers, Electrical transmission major` * `5753: Towers, Broadcast towers` * `5754: Towers, Observation towers` * `5755: Towers, Offshore towers` * `5756: Distribution Circuits` * `5801: Equipment, Residential equipment` * `5802: Equipment, Office equipment` * `5803: Equipment, Electrical equipment` * `5804: Equipment, Mechanical equipment` * `5805: Equipment, High-technology equipment` * `5806: Equipment, Trains, trucks, airplanes etc.` * `5807: Equipment, Thermal Power Plant` * `5850: Automobiles, Unknown HAZUS` * `5851: Automobiles, Personal` * `5852: Automobiles, Dealers` * `5853: Automobiles, 4 Wheeler` * `5854: Automobiles, 2 Wheeler` * `5855: Automobiles, G` * `5856: Motorcycles, Small` * `5857: Motorcycles, Large` * `5858: Automobiles, M1` * `5859: Buses, M2 + M3` * `5860: Automobiles, M1 Low cost` * `5861: Automobiles, M1 High cost` * `5862: Automobiles, M1 Large fleet` * `5863: Automobiles, M1 Mid-size fleet` * `5864: Automobiles, M1 Small fleet` * `5865: Cargo, N` * `5866: Trailers, O` * `5867: Tractor trailers, OT` * `5868: Mobile industrial machines, S` * `5869: Tractors, T` * `5870: Cars GEC, unknown GEC` * `5871: Cars GEC, Compact` * `5872: Cars GEC, Large` * `5873: Cars GEC, Mid-Size` * `5874: Cars GEC, Pick-Up & Trucks and SUV` * `5875: Cars GEC, Sub-Compact` * `5900: Marine Craft, Pleasure Boats & Yachts` * `5901: Marine Craft, Pleasure Boats & Yachts - Power Boats` * `5902: Marine Craft, Pleasure Boats & Yachts - Sail Boats` * `5951: Miscellaneous, Railway Property` * `5952: Miscellaneous, Pumping Station` * `5953: Miscellaneous, Compressor stations` * `5954: Miscellaneous, Cranes` * `5955: Miscellaneous, Conveyor systems` * `5956: Miscellaneous, Canals` * `5957: Miscellaneous, Earth retaining structures` * `5958: Miscellaneous, Waterfront structures` * `5959: Miscellaneous, Transit Warehouse` * `5960: Miscellaneous, Marine Hull` * `5961: Miscellaneous, Treatment plant` * `6000: Marine Cargo, Unknown / General` * `6051: Marine Cargo, Carpool` * `6052: Marine Cargo, General and Containerized Cargo` * `6053: Marine Cargo, Heavy Cargo` * `6054: Marine Cargo, Refrigerated Cargo` * `6055: Marine Cargo, Dry Bulk Cargo` * `6056: Marine Cargo, Liquid Bulk Cargo` * `6100: Marine Cargo, Combustible: Unknown Cargo` * `6101: Marine Cargo, Combustible: Carpool` * `6102: Marine Cargo, Combustible: General and Containerized` * `6103: Marine Cargo, Combustible: Heavy Cargo` * `6104: Marine Cargo, Combustible: Refrigerated Cargo` * `6105: Marine Cargo, Combustible: Dry Bulk Cargo` * `6106: Marine Cargo, Combustible: Liquid Bulk Cargo` * `6150: Marine Cargo, Non-Combustible: Unknown Cargo` * `6151: Marine Cargo, Non-Combustible: Carpool` * `6152: Marine Cargo, Non-Combustible: General and Container` * `6153: Marine Cargo, Non-Combustible: Heavy Cargo` * `6154: Marine Cargo, Non-Combustible: Refrigerated Cargo` * `6155: Marine Cargo, Non-Combustible: Dry Bulk Cargo` * `6156: Marine Cargo, Non-Combustible: Liquid Bulk Cargo` * `6200: Marine Cargo, Automobiles` * `6201: Marine Cargo, Break Bulk` * `6202: Marine Cargo, Dry Bulk` * `6203: Marine Cargo, Liquid Bulk` * `6204: Marine Cargo, Consumables` * `6205: Marine Cargo, Temperature-controlled` * `6206: Marine Cargo, Electronics` * `6207: Marine Cargo, Chemical Products` * `6208: Marine Cargo, Explosives` * `6209: Marine Cargo, General Cargo` * `6210: Marine Cargo, Heavy Industry` * `6211: Marine Cargo, Light Industry` * `6212: Marine Cargo, Petroleum Products` * `6213: Marine Cargo, Pharmaceuticals` * `6214: Marine Cargo, Project Cargo` * `6215: Marine Cargo, Livestock` * `6216: Marine Cargo, General Specie` * `6217: Marine Cargo, Fine Art & Collectibles` * `6218: Marine Cargo, Cash In Transit` * `6219: Marine Cargo, Jewelers Blocks` * `7000: Offshore, Unknown` * `7001: Offshore, Caisson` * `7002: Offshore, Compliant Tower` * `7003: Offshore, Fixed Jacket Platform` * `7004: Offshore, Jack-up` * `7005: Offshore, Mini Tension Leg Platform` * `7006: Offshore, Drill Rig` * `7007: Offshore, Semi Submersible Floating Production` * `7008: Offshore, Drill Ship` * `7009: Offshore, SPAR Floating Production System` * `7010: Offshore, Submersible Production System` * `7011: Offshore, Underwater Production Units, Completion` * `7012: Offshore, Tension Leg Platform` * `7013: Offshore, Well Protector` * `7014: Offshore Renewables - General` * `7015: Offshore Wind - General` * `7016: Offshore Wind - Turbine` * `7017: Offshore Wind - Cable - General` * `7018: Offshore Wind - Cable - Infield` * `7019: Offshore Wind - Cable - Export` * `7020: Offshore Wind - Cable - Transmission` * `7021: Offshore Wind - Cable - Interconnector` * `7022: Offshore Wind - Onshore Substation` * `7023: Offshore Wind - Offshore Substation` * `8000: Crops, Unknown crop` * `8010: Crops, Cereals, Unknown` * `8011: Crops, Cereals, Wheat` * `8012: Crops, Cereals, Maize` * `8013: Crops, Cereals, Rice` * `8014: Crops, Cereals, Sorghum` * `8015: Crops, Cereals, Barley` * `8016: Crops, Cereals, Rye` * `8017: Crops, Cereals, Oats` * `8018: Crops, Cereals, Millets` * `8019: Crops, Cereals, Other` * `8030: Crops, Vegetables and melons, Unknown` * `8031: Crops, Vegetables and melons, Leafy or stem vegetables` * `8032: Crops, Vegetables and melons, Fruit-bearing vegetables` * `8033: Crops, Vegetables and melons, Root, bulb, or tuberous vegetables` * `8034: Crops, Vegetables and melons, Mushrooms and truffles` * `8035: Crops, Vegetables and melons, Other` * `8050: Crops, Fruits and nuts, Unknown` * `8051: Crops, Fruits and nuts, Tropical and subtropical fruits` * `8052: Crops, Fruits and nuts, Citrus fruits` * `8053: Crops, Fruits and nuts, Grapes` * `8054: Crops, Fruits and nuts, Berries` * `8055: Crops, Fruits and nuts, Pome fruits and stone fruits` * `8056: Crops, Fruits and nuts, Nuts` * `8057: Crops, Fruits and nuts, Other` * `8070: Crops, Oilseed crops, Unknown` * `8071: Crops, Oilseed crops, Soya beans` * `8072: Crops, Oilseed crops, Groundnuts` * `8073: Crops, Oilseed crops, Other` * `8090: Crops, Root/tuber crops with high starch or inulin content, Unknown` * `8091: Crops, Root/tuber crops with high starch or inulin content, Potatoes` * `8092: Crops, Root/tuber crops with high starch or inulin content, Sweet potatoes` * `8093: Crops, Root/tuber crops with high starch or inulin content, Cassava Yams` * `8094: Crops, Root/tuber crops with high starch or inulin content, Other` * `8100: Crops, Beverage and spice crops, Unknown` * `8101: Crops, Beverage and spice crops, Beverage crops` * `8102: Crops, Beverage and spice crops, Spice crops` * `8103: Crops, Beverage and spice crops, Other` * `8110: Crops, Leguminous crops, Unknown` * `8111: Crops, Leguminous crops, Beans` * `8112: Crops, Leguminous crops, Broad beans` * `8113: Crops, Leguminous crops, Chick peas` * `8114: Crops, Leguminous crops, Cow peas` * `8115: Crops, Leguminous crops, Lentils` * `8116: Crops, Leguminous crops, Lupins` * `8117: Crops, Leguminous crops, Peas` * `8118: Crops, Leguminous crops, Pigeon peas` * `8119: Crops, Leguminous crops, Leguminous crops` * `8120: Crops, Leguminous crops, Other` * `8130: Crops, Sugar crops, Unknown` * `8131: Crops, Sugar crops, Sugar beet` * `8132: Crops, Sugar crops, Sugar cane` * `8133: Crops, Sugar crops, Sweet sorghum` * `8134: Crops, Sugar crops, Other` * `8140: Crops, Other crops, Grasses and other fodder crops` * `8141: Crops, Other crops, Fibre crops` * `8142: Crops, Other crops, Medicinal, aromatic, pesticidal, or similar crops` * `8143: Crops, Other crops, Rubber` * `8144: Crops, Other crops, Flower crops` * `8145: Crops, Other crops, Tobacco` * `8146: Crops, Other crops, Other` * `8300: Livestock, Unknown livestock` * `8301: Livestock, Large ruminants, Cattle` * `8302: Livestock, Large ruminants, Buffaloes` * `8303: Livestock, Large ruminants, Yaks` * `8304: Livestock, Small ruminants, Sheep` * `8305: Livestock, Small ruminants, Goats` * `8306: Livestock, Pigs or swines, ` * `8307: Livestock, Equines, Horses` * `8308: Livestock, Equines, Mules and hinnies` * `8309: Livestock, Equines, Asses` * `8310: Livestock, Equines, Other (e.g. zebras)` * `8311: Livestock, Camels and camelids, Camels` * `8312: Livestock, Camels and camelids, Llamas and alpacas` * `8313: Livestock, Poultry, Chickens` * `8314: Livestock, Poultry, Ducks` * `8315: Livestock, Poultry, Geese` * `8316: Livestock, Poultry, Turkeys` * `8317: Livestock, Poultry, Guinea fowls` * `8318: Livestock, Poultry, Pigeons` * `8319: Livestock, Poultry, Other` * `8320: Livestock, Other animals, Deer, elk, reindeer` * `8321: Livestock, Other animals, Fur-bearing animals such as foxes and minks` * `8322: Livestock, Other animals, Dogs and cats` * `8323: Livestock, Other animals, Rabbits and hares` * `8324: Livestock, Other animals, Other (e.g. emus, ostriches, elephants)` * `8325: Livestock, Insects, Bees` * `8326: Livestock, Insects, Silkworms` * `8327: Livestock, Insects, Other worms or insects` * `8400: Forestry, Unknown` * `8401: Forestry, Closed forest, Mainly evergreen forest` * `8402: Forestry, Closed forest, Mainly deciduous forest` * `8403: Forestry, Closed forest, Extremely xeromorphic forest` * `8404: Forestry, Woodland, Mainly evergreen woodland` * `8405: Forestry, Woodland, Mainly deciduous woodland` * `8406: Forestry, Woodland, Extremely xeromorphic woodland` * `8407: Forestry, Scrub, Mainly evergreen scrub` * `8408: Forestry, Scrub, Mainly deciduous scrub` * `8409: Forestry, Scrub, Extremely xeromorphic (subdesert) shrubland` * `8410: Forestry, Dwarf-scrub and related communities, Mainly evergreen dwarf-scrub` * `8411: Forestry, Dwarf-scrub and related communities, Mainly deciduous scrub` * `8412: Forestry, Dwarf-scrub and related communities, Extremely xeromorphic dwarf-shrubland` * `8413: Forestry, Dwarf-scrub and related communities, Tundra` * `8414: Forestry, Dwarf-scrub and related communities, Mossy bog formations with dwarf-shrub` * `8415: Forestry, Herbaceous vegetation, Tall graminoid vegetation` * `8416: Forestry, Herbaceous vegetation, Medium tall grassland` * `8417: Forestry, Herbaceous vegetation, Short grassland` * `8418: Forestry, Herbaceous vegetation, Forb vegetation` * `8419: Forestry, Herbaceous vegetation, Hydromorphic fresh-water vegetation` * `8420: Forestry, Spruce` * `8421: Forestry, Birch` * `8422: Forestry, Pine` **`const__code_rms_ifm`** (`number†`) RMS IFM Construction Code. These codes are country-specific with collisions across countries. **`const__code_for_rms`** (`choices†`) Construction Code For RMS: RMS allows multiple construction schemes. This attribute provides the most applicable scheme and code, across RMS, ATC, and ISO schemes for use in RMS. * `ATC-0: Unknown` * `ATC-1: Wood Frame` * `ATC-2: Light Metal` * `ATC-3: Unreinforced Masonry Wall` * `ATC-4: URM Wall with Frame` * `ATC-5: RC Shear Wall with Frame` * `ATC-6: RC Shear Wall without Frame` * `ATC-7: RM Shear Wall` * `ATC-8: RM Shear Wall with Frame` * `ATC-9: Braced Steel Frame` * `ATC-10: Moment Steel Frame (Perimeter)` * `ATC-11: Moment Steel Frame (Distributed)` * `ATC-12: Ductile RC Frame (Distributed)` * `ATC-13: Non-Ductile RC Frame (Distributed)` * `ATC-14: Precast Concrete (Non Tilt-Up)` * `ATC-15: Long Span` * `ATC-16: Tilt-Up` * `ATC-17: Mobile Home` * `ATC-18: Specially Engineered Facility` * `ATC-19: Simple Span Bridges (<500 ft.)` * `ATC-20: Continuous Bridges (<500 ft.)` * `ATC-21: Bridges (>500 ft. spans)` * `ATC-22: Pipelines - Underground` * `ATC-23: Pipelines - At Grade` * `ATC-24: Concrete Dams` * `ATC-25: Earthfill and Rockfill Dams` * `ATC-26: Alluvium Tunnels` * `ATC-27: Rock Tunnels` * `ATC-28: Cut and Cover Tunnels` * `ATC-29: Storage Tanks - Underground Liquid` * `ATC-30: Storage Tanks - Underground Solid` * `ATC-31: Storage Tanks - On Ground Liquid` * `ATC-32: Storage Tanks - On Ground Solid` * `ATC-33: Storage Tanks - Elevated Liquid` * `ATC-34: Storage Tanks - Elevated Solid` * `ATC-35: Railroads` * `ATC-36: Highways` * `ATC-37: Runways` * `ATC-38: High Industrial Chimneys - Masonry` * `ATC-39: High Industrial Chimneys - Concrete` * `ATC-40: High Industrial Chimneys - Steel` * `ATC-41: Cranes` * `ATC-42: Conveyor Systems` * `ATC-43: Transmission Towers (< 100 ft.)` * `ATC-44: Transmission Towers (> 100 ft.)` * `ATC-45: Broadcast Towers` * `ATC-46: Observation Towers` * `ATC-47: Offshore Towers` * `ATC-48: Canals` * `ATC-49: Earth Retaining Structures` * `ATC-50: Waterfront Structures` * `ATC-51: Equipment - Residential` * `ATC-52: Equipment - Office` * `ATC-53: Equipment - Electrical` * `ATC-54: Equipment - Mechanical` * `ATC-55: Equipment - High tech. & lab.` * `ATC-56: Trains, Trucks, Airplanes` * `ATC-57: Petrochemical Facilities (for the Caribbean, Guam, and Indonesia only)` * `ATC-57A: Oil Refineries & Petrochemical Plants (for the Caribbean, Guam, and Indonesia only)` * `ATC-57B: Tank Farms (for the Caribbean, Guam, and Indonesia only)` * `ATC-57C: Pumping Stations (for the Caribbean, Guam, and Indonesia only)` * `ATC-57D: Pipelines (for the Caribbean, Guam, and Indonesia only)` * `ATC-58: Electric Power Systems (for the Caribbean, Guam, and Indonesia only)` * `ATC-58A: Transmission/Distribution Substations (for the Caribbean, Guam, and Indonesia only)` * `ATC-58B: Transmission/Distribution Lines (for the Caribbean, Guam, and Indonesia only)` * `ATC-58C: Fossil Fuel Plants (for the Caribbean, Guam, and Indonesia only)` * `ATC-58D: Cogeneration Plants (for the Caribbean, Guam, and Indonesia only)` * `ATC-58E: Hydroelectric Plants (for the Caribbean, Guam, and Indonesia only)` * `ATC-59: Natural Gas Facilities (for the Caribbean, Guam, and Indonesia only)` * `ATC-59A: Compressor Stations (for the Caribbean, Guam, and Indonesia only)` * `ATC-59B: Natural Gas Pipelines (for the Caribbean, Guam, and Indonesia only)` * `ATC-59C: Liquefied Natural Gas (for the Caribbean, Guam, and Indonesia only)` * `ATC-60: Port/Harbor Facilities (for the Caribbean, Guam, and Indonesia only)` * `ATC-60A: Waterfront Facilities (for the Caribbean, Guam, and Indonesia only)` * `ATC-60B: Crane/Cargo Handling (for the Caribbean, Guam, and Indonesia only)` * `ATC-60C: Fuel Facilities (for the Caribbean, Guam, and Indonesia only)` * `ATC-61: Heavy Industrial Facilities (for the Caribbean, Guam, and Indonesia only)` * `ATC-61A: Pulp & Paper (for the Caribbean, Guam, and Indonesia only)` * `ATC-61B: Steel Mill (for the Caribbean, Guam, and Indonesia only)` * `ATC-61C: Mining (for the Caribbean, Guam, and Indonesia only)` * `ATC-61D: Cement Mill (for the Caribbean, Guam, and Indonesia only)` * `ATC-62: Light Industrial Facilities (for the Caribbean, Guam, and Indonesia only)` * `ATC-62A: High Technology (for the Caribbean, Guam, and Indonesia only)` * `ATC-62B: Telecommunication (for the Caribbean, Guam, and Indonesia only)` * `ATC-71: Wood Frame Single Wall (Hawaii only)` * `ATC-72A: Wood Frame OSHPD SPC1` * `ATC-72B: Wood Frame OSHPD SPC2` * `ATC-72C: Wood Frame OSHPD SPC3` * `ATC-72D: Wood Frame OSHPD SPC4` * `ATC-72E: Wood Frame OSHPD SPC5` * `ATC-73A: Unreinforced Masonry Pre-1973 OSHPD SPC1` * `ATC-73B: Unreinforced Masonry Pre-1973 OSHPD SPC2` * `ATC-74A: Structural Masonry Pre-1973 OSHPD SPC1` * `ATC-74B: Structural Masonry Pre-1973 OSHPD SPC2` * `ATC-74C: Structural Masonry Pre-1973 OSHPD SPC3` * `ATC-74D: Structural Masonry 1974-1994 OSHPD SPC2` * `ATC-74E: Structural Masonry 1974-1994 OSHPD SPC3` * `ATC-74F: Structural Masonry Post-1995 OSHPD SPC3` * `ATC-75A: Reinforced Concrete Moment Resisting Frame Pre-1973 OSHPD SPC1` * `ATC-75B: Reinforced Concrete Moment Resisting Frame Pre-1973 OSHPD SPC2` * `ATC-75C: Reinforced Concrete Moment Resisting Frame 1974-1994 OSHPD SPC2` * `ATC-75D: Reinforced Concrete Moment Resisting Frame 1974-1994 OSHPD SPC3` * `ATC-75E: Reinforced Concrete Moment Resisting Frame 1974-1994 OSHPD SPC4` * `ATC-75F: Reinforced Concrete Moment Resisting Frame Post-1995 OSHPD SPC3` * `ATC-75G: Reinforced Concrete Moment Resisting Frame Post-1995 OSHPD SPC4` * `ATC-75H: Reinforced Concrete Moment Resisting Frame Post-1995 OSHPD SPC5` * `ATC-76A: RC MRF with Shear Walls Pre-1973 OSHPD SPC1` * `ATC-76B: RC MRF with Shear Walls Pre-1973 OSHPD SPC2` * `ATC-76C: RC MRF with Shear Walls 1974-1994 OSHPD SPC2` * `ATC-76D: RC MRF with Shear Walls 1974-1994 OSHPD SPC3` * `ATC-76E: RC MRF with Shear Walls 1974-1994 OSHPD SPC4` * `ATC-76F: RC MRF with Shear Walls Post-1995 OSHPD SPC3` * `ATC-76G: RC MRF with Shear Walls Post-1995 OSHPD SPC4` * `ATC-76H: RC MRF with Shear Walls Post-1995 OSHPD SPC5` * `ATC-77A: Reinforced Concrete Shear Wall Pre-1973 OSHPD SPC1` * `ATC-77B: Reinforced Concrete Shear Wall Pre-1973 OSHPD SPC2` * `ATC-77C: Reinforced Concrete Shear Wall 1974-1994 OSHPD SPC2` * `ATC-77D: Reinforced Concrete Shear Wall 1974-1994 OSHPD SPC3` * `ATC-77E: Reinforced Concrete Shear Wall 1974-1994 OSHPD SPC4` * `ATC-77F: Reinforced Concrete Shear Wall Post-1995 OSHPD SPC3` * `ATC-77G: Reinforced Concrete Shear Wall Post-1995 OSHPD SPC4` * `ATC-77H: Reinforced Concrete Shear Wall Post-1995 OSHPD SPC5` * `ATC-78A: Steel Moment Resisting Frame Pre-1973 OSHPD SPC1` * `ATC-78B: Steel Moment Resisting Frame Pre-1973 OSHPD SPC2` * `ATC-78C: Steel Moment Resisting Frame 1974-1994 OSHPD SPC2` * `ATC-78D: Steel Moment Resisting Frame 1974-1994 OSHPD SPC3` * `ATC-78E: Steel Moment Resisting Frame 1974-1994 OSHPD SPC4` * `ATC-78F: Steel Moment Resisting Frame Post-1995 OSHPD SPC3` * `ATC-78G: Steel Moment Resisting Frame Post-1995 OSHPD SPC4` * `ATC-78H: Steel Moment Resisting Frame Post-1995 OSHPD SPC5` * `ATC-79A: Braced Steel MRF Pre-1973 OSHPD SPC1` * `ATC-79B: Braced Steel MRF Pre-1973 OSHPD SPC2` * `ATC-79C: Braced Steel MRF 1974-1994 OSHPD SPC2` * `ATC-79D: Braced Steel MRF 1974-1994 OSHPD SPC3` * `ATC-79E: Braced Steel MRF OSHPD 1974-1994 SPC4` * `ATC-79F: Braced Steel MRF Post-1995 OSHPD SPC3` * `ATC-79G: Braced Steel MRF Post-1995 OSHPD SPC4` * `ATC-79H: Braced Steel MRF Post-1995 OSHPD SPC5` * `ATC-80: Reinforced Concrete Frame with Wood Frame in the Upper Floors` * `ATC-81: Steel Frame with Wood Frame in the Upper Floors` * `ATC-82: High Speed Railway` * `RMS-0: Unknown` * `RMS-1: Wood` * `RMS-1A: Light Wood Frame` * `RMS-1A1: Light Wood - Stud Walls` * `RMS-1A2: Light Wood - Post & Beam` * `RMS-1A3: Light Wood - Stud Walls with Brick Masonry Veneer` * `RMS-1A4: Light Wood with URM/Adobe Infill` * `RMS-1B: Heavy Timber` * `RMS-1B1: Heavy Timber - Frame` * `RMS-1B2: Heavy Timber - Frame with Unreinforced Masonry Infill` * `RMS-1C1: Timber frame with tiled roof` * `RMS-1C2: Timber frame with flat roof` * `RMS-1C3: Timber frame with thatch roof` * `RMS-2: Masonry` * `RMS-2A: Weak Masonry` * `RMS-2A1: Rubble Stone Masonry` * `RMS-2A2: Adobe` * `RMS-2A3: Reinforced Adobe` * `RMS-2B: Unreinforced Masonry` * `RMS-2B1: Unreinforced Cut Stone Masonry` * `RMS-2B2: Unreinforced Sold Brick Masonry` * `RMS-2B3: Unreinforced Concrete Block Masonry` * `RMS-2B4: Unreinforced Brick Cavity Wall` * `RMS-2B6: Bahareque` * `RMS-2B7: Unreinforced Solid Brick Masonry - With Rigid Diaphragms` * `RMS-2C: Structural Masonry` * `RMS-2C1: Reinforced Masonry` * `RMS-2C2: Confined Masonry` * `RMS-2C3: Confined Masonry with non-RC Slab` * `RMS-2C5: Reinforced Masonry with Wood or Metal Studs in the Upper Floors` * `RMS-2D: Factory Structure with Brick Columns` * `RMS-2D1: Masonry with steep tiled roof` * `RMS-2D2: Masonry with low slope tiled roof` * `RMS-2D3: Masonry with flat roof` * `RMS-2D4: Masonry with thatch roof` * `RMS-2E: Multi-story Brick Structure with RC Frames` * `RMS-3: Reinforced Concrete` * `RMS-3A: Cast-in-place Reinforced Concrete` * `RMS-3A1: Reinforced Concrete Moment Resisting Frame (RCMRF)` * `RMS-3A10: Reinforced Concrete Frame with Wood Frame in the Upper Floors` * `RMS-3A2: RCMRF with Shear Walls` * `RMS-3A23: Reinforced Concrete Shear Walls with Limited Ductility` * `RMS-3A3: RCMRF with Unreinforced Masonry Infill` * `RMS-3A4: Reinforced Concrete Shear Wall` * `RMS-3A5: Waffle or Flat Slab` * `RMS-3A6: Steel & Reinforced Concrete (SRC)Composite Frame` * `RMS-3A7: Concrete Piloti` * `RMS-3A8: Concrete Filled Tube (CFT)` * `RMS-3A9: Gravity Load Designed RC with Unreinforced Masonry Infill` * `RMS-3B: Precast Reinforced Concrete` * `RMS-3B1: Precast Moment Resisting Frame` * `RMS-3B2: Precast MRF with Shear Walls` * `RMS-3B3: Precast MRF with Unreinforced Masonry Infill` * `RMS-3B4: Tilt-up` * `RMS-3B5: Precast Panel Bearing Wall` * `RMS-3B6: Lift Slab` * `RMS-3C: Reinforced Concrete WITH WOOD OR METAL ROOF DECK` * `RMS-3C1: Reinforced Concrete with tiled roof` * `RMS-3C2: Reinforced Concrete with flat roof` * `RMS-3D: Factory Structure with RC Columns` * `RMS-4: Steel` * `RMS-4A: Steel Frame with Concrete Roof Deck` * `RMS-4A1: Steel Moment Resisting Frame (MRF)` * `RMS-4A2: Steel MRF with Shear Walls` * `RMS-4A3: Steel MRF with Unreinforced Masonry Infill` * `RMS-4A4: Concentrically Braced Steel Frame` * `RMS-4A5: Eccentrically Braced Steel Frame` * `RMS-4A6: Gravity Load Designed Steel with Unreinforced Masonry Infill` * `RMS-4A7: Steel Frame with Wood Frame in the Upper Floors` * `RMS-4B: Light Metal` * `RMS-4B1: Light Metal Frame` * `RMS-4B2: Light Metal Frame with Unreinforced Masonry Infill` * `RMS-4C: Steel Frame with Wood or Metal Roof Deck` * `RMS-4C1: Steel frame with tiled roof` * `RMS-4C2: Steel frame with flat roof` * `RMS-5: Manufactured & Mobile Home` * `RMS-5A: Manufactured/Mobile Home without Tie-Downs` * `RMS-5B: Manufactured/Mobile Home with Tie-Downs` * `RMS-6: Conventional Bridges (<500 ft spans) with Multiple Simple Spans` * `RMS-7: Conventional Bridges (<500 ft spans) with Continuous/Monolithic Spans` * `RMS-8: Major Bridges (>500 ft spans)` * `RMS-9: Underground Pipelines` * `RMS-10: Pipelines at Grade` * `RMS-11: Concrete Dams` * `RMS-12: Earthfill and Rockfill Dams` * `RMS-13: Alluvium Tunnels` * `RMS-14: Rock Tunnels` * `RMS-15: Cut & Cover Tunnels` * `RMS-16: Underground Liquid Storage Tanks` * `RMS-17: Underground Solid Storage Tanks` * `RMS-18: On Ground Liquid Storage Tanks` * `RMS-19: On Ground Solid Storage Tanks` * `RMS-20: Elevated Liquid Storage Tanks` * `RMS-21: Elevated Solid Storage Tanks` * `RMS-22: Railroad (Track and Bed)` * `RMS-23: Highways` * `RMS-24: Runways` * `RMS-25: High Industrial Masonry Chimneys` * `RMS-26: High Industrial Concrete Chimneys` * `RMS-27: High Industrial Steel Chimneys` * `RMS-28: Cranes` * `RMS-29: Conveyor Systems` * `RMS-30: Conventional (<100 ft) Electrical Transmission Line Towers` * `RMS-31: Major (>100 ft) Electrical Transmission Line Towers` * `RMS-32: Broadcast Towers` * `RMS-33: Observation Towers` * `RMS-34: Offshore Towers` * `RMS-35: Canals` * `RMS-36: Earth Retaining Structures (>20 ft High)` * `RMS-37: Waterfront Structures` * `RMS-38: Residential Equipment` * `RMS-39: Office Equipment` * `RMS-40: Electrical Equipment` * `RMS-41: Mechanical Equipment` * `RMS-42: High Technology Lab Equipment` * `RMS-43: Trains, Trucks, Airplanes` * `RMS-44: Automobiles-Personal` * `RMS-45: Automobiles - Dealers` * `RMS-46: Petrochemical Facilities (for the Caribbean, Guam, and Indonesia only)` * `RMS-46A: Petrochemical - Oil Refineries & Petrochemical Plants (for the Caribbean, Guam, and Indonesia only)` * `RMS-46B: Petrochemical - Tank Farms (for the Caribbean, Guam, and Indonesia only)` * `RMS-46C: Petrochemical - Pumping Stations (for the Caribbean, Guam, and Indonesia only)` * `RMS-46D: Petrochemical - Pipelines (for the Caribbean, Guam, and Indonesia only)` * `RMS-47: Electric Power Systems (for the Caribbean, Guam, and Indonesia only)` * `RMS-47A: Transmission/ Distribution Substations (for the Caribbean, Guam, and Indonesia only)` * `RMS-47B: Transmission/ Distribution Lines (for the Caribbean, Guam, and Indonesia only)` * `RMS-47C: Fossil Fuel Plants (for the Caribbean, Guam, and Indonesia only)` * `RMS-47D: Cogeneration Plants (for the Caribbean, Guam, and Indonesia only)` * `RMS-47E: Hydroelectric Plants (for the Caribbean, Guam, and Indonesia only)` * `RMS-48: Natural Gas Facilities (for the Caribbean, Guam, and Indonesia only)` * `RMS-48A: Natural Gas - Compressor Stations (for the Caribbean, Guam, and Indonesia only)` * `RMS-48B: Natural Gas - Pipelines (for the Caribbean, Guam, and Indonesia only)` * `RMS-48C: Natural Gas - Liquefied Natural Gas (for the Caribbean, Guam, and Indonesia only)` * `RMS-49: Port/Harbor Facilities (for the Caribbean, Guam, and Indonesia only)` * `RMS-49A: Natural Gas - Waterfront Facilities (for the Caribbean, Guam, and Indonesia only)` * `RMS-49B: Crane/Cargo Handling (for the Caribbean, Guam, and Indonesia only)` * `RMS-49C: Fuel Facilities (for the Caribbean, Guam, and Indonesia only)` * `RMS-50: Heavy Industrial Facilities` * `RMS-50A: Pulp & Paper (for the Caribbean, Guam, and Indonesia only)` * `RMS-50B: Steel Mill (for the Caribbean, Guam, and Indonesia only)` * `RMS-50C: Mining (for the Caribbean, Guam, and Indonesia only)` * `RMS-50D: Cement Mill (for the Caribbean, Guam, and Indonesia only)` * `RMS-51: Light Industrial Facilities (for the Caribbean, Guam, and Indonesia only)` * `RMS-51A: High Technology (for the Caribbean, Guam, and Indonesia only)` * `RMS-51B: Telecommunication (for the Caribbean, Guam, and Indonesia only)` * `RMS-52: MIXED (Greece only)` * `RMS-52A: Wood Frame Single Wall (Hawaii only)` * `RMS-52B: Wood Frame Double Wall (Hawaii only)` * `RMS-53: Golf Country Club` * `RMS-54: Boats, Inside a Building (Marina)` * `RMS-55: Boats, Moored, Less than 26 ft., Motor` * `RMS-56: Boats, Moored, Less than 26 ft., Sail` * `RMS-57: Boats, Moored, 26-60 ft., Motor` * `RMS-58: Boats, Moored, 26-60 ft., Sail` * `RMS-59: Boats, Moored, Greater than 60 ft., Motor` * `RMS-60: Boats, Moored, Greater than 60 ft., Sail` * `RMS-61: Floating Structures` * `RMS-62: Response Control System - General` * `RMS-62A: Response Control System - Concrete` * `RMS-62B: Response Control System - Steel` * `RMS-63: Aircraft, Small` * `RMS-64: Aircraft, Medium` * `RMS-65: Aircraft, Large` * `FIRE-0: Unknown` * `FIRE-1: Frame` * `FIRE-2: Joisted Masonry` * `FIRE-3: Non-Combustible` * `FIRE-4: Masonry Non-Combustible` * `FIRE-5: Modified Fire Resistive` * `FIRE-6: Fire Resistive` * `FIRE-7: Heavy Timber Joisted Masonry` * `FIRE-8: Superior Non-Combustible` * `FIRE-9: Superior Masonry Non-Combustible` * `RMS IND-0` * `RMS IND-1` * `RMS IND-2` * `RMS IND-3` * `RMS IND-4` * `RMS IND-5` * `RMS IND-6` * `RMS IND-7` * `RMS IND-8` * `RMS IND-9` * `RMS IND-10` **`const__desc_iso`** (`text†`) Provides the ISO (Insurance Services Office) construction class description for the building. **`const__desc_atc`** (`text†`) Provides the ATC (Applied Technology Council) construction class description for the building. **`const__desc_air`** (`text†`) AIR Construction Description: Provides the AIR (Applied Insurance Research) construction class description **`const__desc_rms`** (`text†`) RMS Construction Description: Provides the RMS (Risk Management Solutions) construction class description for the building. **`const__desc_oed`** (`text†`) OED Construction Description **`const__desc_rms_ifm`** (`text†`) Provides the RMS IFM construction class description for the building. **`const__iso_protection_class`** (`number†`) ISO Protection Class **`const__plumbing_type`** (`text†`) Type of Plumbing **`const__scheme`** (`text†`) Construction Code Scheme **`const__wiring_type`** (`text†`) Wiring Type **`const__breakers_or_fuses`** (`text†`) Breakers or Fuses **`const__breakers_type`** (`text†`) Circuit Breaker Type **`const__fire_desc_ping`** (`text†`) Classifies a building’s structural type and fire-resistance characteristics. ## **Description** **Attributes that provide descriptive information about the property or its geolocation.** **`location_group`** (`number†`) Identify campuses or other sets of buildings that should be treated as 'together'. This is used to help guide occupancy mapping of ambiguous sub-buildings. **`location_group_item`** (`number†`) Individual buildings within a location\_group. Numbered (or renumbered) sequentially within a location\_group. **`location_code`** (`text†`) Location Code **`location_number`** (`number†`) Location Number **`building_number`** (`number†`) Building Number **`naics_code`** (`text†`) NAICS Code: Specifies the North American Industry Classification System (NAICS) code identifying the building’s primary business or industry type. **`sic_code`** (`text†`) SIC Code: Specifies the Standard Industrial Classification (SIC) code identifying the building’s primary business or industry type. **`bldg_name`** (`text†`) Building Name **`insured__business_name`** (`text†`) Insured Business Name **`insured__name`** (`text†`) Insured's Name **`insured__street`** (`text†`) Insured Street **`insured__city`** (`text†`) Insured City **`insured__state`** (`text†`) Insured State **`insured__zip`** (`text†`) Insured Zip **`insured__county`** (`text†`) Insured County **`ownership_status`** (`text†`) Ownership Status: Information about whether the property is owned, leased, etc. ## **Exposure** **Attributes that provide descriptive information about the property’s risk exposure to disasters.** **`slosh_zone`** (`text†`) Indicates the storm surge risk zone classification. Available integrations: PSZ category. **`wind_tier`** (`text†`) Wind Tier **`aig_wind_tier`** (`text†`) **`eq_zone`** (`text†`) Earthquake (EQ) Zone **`eq_sub_zone`** (`text†`) Earthquake (EQ) Sub Zone **`fema_flood_zone`** (`text†`) FEMA Flood Zone: Available integrations: PFF fema\_flood\_zone, HH fema\_flood\_zone, LBFZ zone. **`fema_wildfire`** (`text†`) Available integrations: FNRI wfir\_riskr. **`distance_to_coast`** (`number†`) Distance to Coast **`is_within_1000ft_saltwater`** (`boolean†`) Is Within 1000 ft of Saltwater ## **Features** **Attributes that provide descriptive information about features of the building or property.** **`const__bars_on_windows`** (`boolean†`) Bars on Windows (Y/ N) **`const__perimeter_fence`** (`boolean†`) Perimeter Fence **`const__entry_gates`** (`boolean†`) Entry Gates **`const__car_ports`** (`boolean†`) Carports **`const__tennis_courts`** (`boolean†`) Tennis Courts **`const__club_house`** (`boolean†`) Club House **`const__fitness_room`** (`boolean†`) Exercise Room **`const__playground`** (`boolean†`) Playground **`const__has_lake_or_pond`** (`boolean†`) Lake or Pond **`const__num_pools`** (`number†`) Number of Pools **`const__pool_fence_height`** (`number†`) Pool Fence Height **`const__pool_fence_type`** (`text†`) Pool Fence Type **`const__self_locking_pool_gate`** (`text†`) Self-Locking Pool Gate **`const__pool_depth_markers`** (`boolean†`) Pool Depth Markers **`const__pool_rules_posted`** (`boolean†`) Pool Rules Posted **`const__pool_lifesaving_equipment`** (`boolean†`) Lifesaving Equipment **`const__pool_diving_boards`** (`boolean†`) Diving Boards or Platforms **`const__num_buildings`** (`number†`) Number of Buildings: Available integrations: HH num\_buildings, BV num\_buildings, LB num\_buildings. **`const__num_stories`** (`number†`) Number of Stories: Available integrations: HH num\_stories, LB num\_stories, CA num\_stories. **`const__num_stories_below_gnd`** (`number†`) Number of Stories Below Ground: Available integrations: HH num\_stories\_below\_gnd, LB num\_stories\_below\_gnd. **`const__basement`** (`text†`) Basement: Available integrations: HH has\_basement, Q basement. **`const__has_basement`** (`boolean†`) Has Basement: Available integrations: HH has\_basement. **`const__num_units`** (`number†`) Number of Units: Available integrations: LBP num\_units. **`const__num_units_beds`** (`number†`) Number of Beds **`const__num_units_rooms`** (`number†`) Number of Rooms **`const__num_elevators`** (`number†`) Number of Elevators **`const__external_combustible_panel`** (`boolean†`) External Combustible Panel **`const__internal_combustible_panel`** (`boolean†`) Internal Combustible Panel ## **Limit** **Attributes that provide descriptive information about the property’s insurance coverage limits.** **`limits__orig_limits`** (`dict_currency†`) Individual/Original SOV Limits: Mapping containing each limit as found in the original SOV. See subclass\_mapping for translating these to limit categories. **`limits__building_limit`** (`currency†`) Building Limit: Part of limits\_\_building\_limit. Components limits\_\_builders\_risk\_hard\_costs + limits\_\_building\_limit + limits\_\_tenant\_improvement\_and\_betterments\_limit. **`limits__building_value`** (`currency†`) Building Value **`limits__building_value_type`** (`text†`) Building Valuation Type: System for creating/calculating the building value. Common values include RC (Replacement Cost) and AC (Actual Cost). **`limits__bpp_limit`** (`currency†`) Business Personal Property (BPP) Limit: Part of limits\_\_total\_limit. Components limits\_\_contents\_limit + limits\_\_edp\_limit + limits\_\_equipment\_limit + limits\_\_fine\_art\_limit + limits\_\_furniture\_and\_fixtures\_limit + limits\_\_inventory\_limit + limits\_\_property\_of\_others\_limit + limits\_\_vehicle\_limit. **`limits__bpp_value`** (`currency†`) Business Personal Property (BPP) Value **`limits__contents_limit`** (`currency†`) Contents Limit: Part of limits\_\_bpp\_limit. **`limits__vehicle_limit`** (`currency†`) Vehicle Limit: Part of limits\_\_bpp\_limit. **`limits__edp_limit`** (`currency†`) Electronic Data Processing Limit (EDP): Part of limits\_\_bpp\_limit. **`limits__equipment_limit`** (`currency†`) Equipment Limit: Part of limits\_\_bpp\_limit. **`limits__fine_art_limit`** (`currency†`) Fine Art Limit: Part of limits\_\_bpp\_limit. **`limits__furniture_and_fixtures_limit`** (`currency†`) Furniture and Fixtures Limit: Part of limits\_\_bpp\_limit. **`limits__inventory_limit`** (`currency†`) Inventory Limit: Part of limits\_\_bpp\_limit. **`limits__property_of_others_limit`** (`currency†`) Personal Property of Others Limit: Part of limits\_\_bpp\_limit. **`limits__tenant_improvement_and_betterments_limit`** (`currency†`) Tenant Improvements and Betterments Limit: Part of limits\_\_building\_limit. **`limits__builders_risk_hard_costs`** (`currency†`) Builder's Risk Hard Costs: Part of limits\_\_building\_limit. **`limits__builders_risk_soft_costs`** (`currency†`) Builder's Risk Soft Costs: Part of limits\_\_bi\_limit. **`limits__signs_limit`** (`currency†`) Signs Limit: Part of limits\_\_signs\_limit. Components limits\_\_billboards\_limit + limits\_\_signs\_limit. **`limits__billboards_limit`** (`currency†`) Billboards Limit: Part of limits\_\_signs\_limit. **`limits__bpp_excl_inventory_and_equipment`** (`currency†`) BPP Excl Inventory and Equipment Limit: BPP excluding inventory and equipment. **`limits__bpp_excl_equipment`** (`currency†`) BPP Excl Equipment Limit: BPP excluding equipment. **`limits__bpp_value_excl_equipment`** (`currency†`) BPP Value Excl Equipment Limit/Value: BPP Value excluding equipment value. **`limits__bpp_excl_inventory`** (`currency†`) BPP Excl Inventory Limit: BPP excluding inventory. **`limits__signs_and_other_limit`** (`currency†`) Signs and Other Limits **`limits__other_limit`** (`currency†`) Other Limit: Part of limits\_\_other\_limit. Components limits\_\_other\_limit. **`limits__total_rp_and_bpp`** (`currency†`) Total Real Property & BPP: Sum of building and BPP limits. Part of limits\_\_total\_limit. **`limits__total_limit`** (`currency†`) Total Limit: TIV, or, the sum of all limits. Should equal building\_limit+bpp\_limit+bi\_limit+signs\_limit+other\_limit. Components limits\_\_bpp\_limit + limits\_\_total\_rp\_and\_bpp. **`limits__total_value`** (`currency†`) The sum of all values (potentially different than the insured limit). Should equal building\_value+bpp\_value+bi\_limit+signs\_limit+other\_limit. **`limits__building_deductible`** (`currency†`) Building Deductible **`limits__bpp_deductible`** (`currency†`) Business Personal Property (BPP) Deductible **`limits__bi_limit`** (`currency†`) Business Interruption Limit: Part of limits\_\_bi\_limit. Components limits\_\_aicow\_limit + limits\_\_bi\_extra\_expense\_limit + limits\_\_bi\_limit + limits\_\_builders\_risk\_soft\_costs + limits\_\_gross\_profit\_limit + limits\_\_payroll\_limit + limits\_\_rent\_limit. **`limits__bi_period`** (`text†`) Business Interruption Period: Business Interruption (BI) period as found in the original SOV. `units` may be set to hours, days, months, or years. **`limits__bi_period_days`** (`number†`) Business Interruption (BI) period normalized to days. This is the `bi_period` converted to days. **`limits__bi_waiting_period`** (`text†`) Business Interruption Waiting Period **`limits__bi_waiting_period_hours`** (`number†`) **`limits__bi_extra_expense_limit`** (`currency†`) Extra Expense Limit: Part of limits\_\_bi\_limit. **`limits__payroll_limit`** (`currency†`) Payroll Limit: Part of limits\_\_bi\_limit. **`limits__rent_limit`** (`currency†`) Rent Limit: Part of limits\_\_bi\_limit. **`limits__gross_profit_limit`** (`currency†`) Gross Profit Limit: Part of limits\_\_bi\_limit. **`limits__aicow_limit`** (`currency†`) Additional Increased Cost Of Working: Part of limits\_\_bi\_limit. **`limits__insurance_to_value`** (`currency†`) \$ per Sq Ft **`currency`** (`text†`) Currency: If there is a currency unit column, this will contain it. However, typically you should use the `units` property. **`limits__homeowners_cvg_a_limit`** (`currency†`) Homeowners Coverage A **`limits__homeowners_cvg_b_limit`** (`currency†`) Homeowners Coverage B **`limits__homeowners_cvg_c_limit`** (`currency†`) Homeowners Coverage C **`limits__homeowners_cvg_d_limit`** (`currency†`) Homeowners Coverage D **`premium`** (`currency†`) Premium: Collection of all premiums so they don't end up counted as limits. ## **Location** **Attributes that provide descriptive information about the property’s geocoded location.** **`cresta_code`** (`text†`) CRESTA Code: Catastrophe Risk Evaluation and Standardizing Target Accumulations (CRESTA) Code **`cresta_name`** (`text†`) CRESTA Name **`address_number`** (`text†`) Address Number **`route`** (`text†`) Route: Street without address\_number **`street`** (`text†`) Street: route + address number (e.g., 123 Main St) **`street_type`** (`text†`) Street Type: e.g. St., Ave., Bldv., etc... **`address_line_2`** (`text†`) Address Line 2: Unit, Apt, etc. **`city`** (`text†`) City **`state`** (`text†`) State/Province **`zip`** (`text†`) Postal Code **`county`** (`text†`) County **`county_fips_code`** (`text†`) Specifies the county’s Federal Information Processing Standards (FIPS) code. **`country`** (`text†`) Country **`country_subdivision`** (`text†`) Country Subdivision: ISO 3166-2 code of the first-level administrative division of the country. **`country_subdivision_name`** (`text†`) Country Subdivision Name: Name of the first-level administrative division of the country, per ISO 3166-2. **`full_address`** (`text†`) Full Address: Formatted complete address, as cleaned/geocoded as possible. (e.g., 123 Main St, Washington, DC 20001, US) \[DEPRECATED]**`bldg_street_descriptor`** (`text†`) Building Street Descriptor: Formatted complete address, as cleaned/geocoded as possible. (e.g., 123 Main St, Washington, DC 20001, US). **`latitude`** (`number†`) Latitude **`longitude`** (`number†`) Longitude \[DEPRECATED]**`fema_flood_map_link`** (`text†`) FEMA Flood Map URL for `latitude` and `longitude`. \[DEPRECATED]**`google_maps_link`** (`text†`) Google Maps URL for `latitude` and `longitude`. \[DEPRECATED]**`google_earth_maps_link`** (`text†`) Google Earth Maps URL for `latitude` and `longitude`. **`geocoding_disagreement`** (`number†`) Geocoding Disagreement (meters) **`confident_geocoding_disagreement`** (`number†`) Geocoding Disagreement (m): Disagreement of high-reliability geocode results. **`orig_sov_geocoding_disagreement`** (`number†`) Geocoding Disagreement from supplied original SOV data (meters) \[DEPRECATED]**`ping_geo__google_maps_link`** (`text†`) Google Maps URL for the latitude and longitude computed by Ping Geocoding **`ping_geo__precision`** (`number†`) Numeric representation of the match level of Ping Geocoding with ascending confidence ranging from 0 to 100. \[DEPRECATED]**`ping_geo__match_level`** (`text†`) Indicates the confidence and granularity of a location match derived from Ping Geocoding. Each level corresponds to a specific score range that reflects how precisely an input was matched to a known location. \[DEPRECATED]**`google__google_maps_link`** (`text†`) Google Maps URL for the latitude and longitude computed by Google Geocoding. \[DEPRECATED]**`google__google_earth_maps_link`** (`text†`) Google Earth URL for the latitude and longitude computed by Google Geocoding. \[DEPRECATED]**`google__precision`** (`number†`) Numeric representation of the match level of Google Geocoding with ascending confidence ranging from 0 to 100. ## **Notes** **Attributes that provide additional information about the property and the insurance policy.** **`merged_rows`** (`object†`) Merged Constituent Building Risks: Mapping container the constituent rows that were merged into this entry **`notes`** (`text†`) Notes **`effective_date`** (`date†`) Effective Date **`expiration_date`** (`date†`) Expiration Date **`clearance_flag`** (`text†`) Clearance Flag: Set to true if cleared. ## **Occupancy** **Attributes that provide descriptive information about the property and its primary use or function.** **`occupancy__type_desc`** (`text†`) Occupancy Type Description: Available integrations: HH occupancy\_type, LB occupancy\_type. **`occupancy__nature_of_account`** (`text†`) **`occupancy__desc_ping`** (`choices†`) Ping Occupancy * `Commercial - Entertainment and Recreation` * `Commercial - General Commercial` * `Commercial - Golf Courses` * `Commercial - Health Care Services` * `Commercial - Parking` * `Commercial - Personal and Repair Services` * `Commercial - Professional, Technical, and Business Services` * `Commercial - Retail Trade` * `Commercial - Wholesale Trade` * `Education - Primary and Secondary Schools` * `Education - Universities, Colleges, and Technical Schools` * `Government - Government - Emergency Services` * `Government - Government - General Services` * `Industrial - Chemical Processing` * `Industrial - Construction` * `Industrial - Food and Drug Processing` * `Industrial - General Industrial` * `Industrial - Heavy Fabrication and Assembly` * `Industrial - High-Technology` * `Industrial - Light Fabrication and Assembly` * `Industrial - Metal and Minerals Processing` * `Industrial - Mining` * `Industrial - Petroleum` * `Industrial Facility - Apparel and Finished Products from Fabrics` * `Industrial Facility - Automotive Manufacturing` * `Industrial Facility - Biological Products (Except Diagnostic) Medicinals/Botanicals/Biomedical` * `Industrial Facility - Cement Plants/Cement Mills` * `Industrial Facility - Chemical Processing - General` * `Industrial Facility - Chlorine Plants` * `Industrial Facility - Chlorohydrin Plants` * `Industrial Facility - Coal Mining` * `Industrial Facility - Computer Storage Devices` * `Industrial Facility - Electric Substations` * `Industrial Facility - Electron Tubes` * `Industrial Facility - Electronic and Other Electrical Equipment (Except Computer Equipment)` * `Industrial Facility - Electronic Computer Devices` * `Industrial Facility - Fabricated Metal Products` * `Industrial Facility - Fertilizer Plants` * `Industrial Facility - Food and Drug Processing - General` * `Industrial Facility - Food and Kindred Products` * `Industrial Facility - Furniture and Fixtures` * `Industrial Facility - Gas Processing Systems - General` * `Industrial Facility - General Building/Construction Contractors` * `Industrial Facility - Heavy Constructions` * `Industrial Facility - Heavy Fabrication and Assembly - General` * `Industrial Facility - High-Technology - General` * `Industrial Facility - Hydro-Electric Power Systems - General` * `Industrial Facility - Industrial and Commercial Machinery and Equipment` * `Industrial Facility - Leather and Leather Products` * `Industrial Facility - Light Fabrication and Assembly - General` * `Industrial Facility - Light Hydrocarbon or Aromatics Plants` * `Industrial Facility - Lumber and Wood Products (Except Furniture)` * `Industrial Facility - Measuring, Analyzing, and Controlling Instruments` * `Industrial Facility - Metal and Minerals Processing - General` * `Industrial Facility - Metal Mining` * `Industrial Facility - Mining - General` * `Industrial Facility - Mining Operations` * `Industrial Facility - Mining/Quarrying - Non-Metallic Mineral (Except Fuels)` * `Industrial Facility - Miscellaneous Manufacturing Industries` * `Industrial Facility - Oil Refinery Systems - General` * `Industrial Facility - Other Chemical and Allied Products` * `Industrial Facility - Pharmaceutical Plants` * `Industrial Facility - Photographic, Medical, and Optical Goods` * `Industrial Facility - Plastics Plants` * `Industrial Facility - Potable Water Systems - General` * `Industrial Facility - Primary Metal Industry` * `Industrial Facility - Print/Publishing and Allied Industries` * `Industrial Facility - Printed Circuit Boards` * `Industrial Facility - Pulp/Paper and Allied Products Manufacturing` * `Industrial Facility - Rubber and Miscellaneous Plastics Products` * `Industrial Facility - Semi-Conductor and Related Devices` * `Industrial Facility - Smelters` * `Industrial Facility - Special Trade Contractors` * `Industrial Facility - Steel Mills` * `Industrial Facility - Stone/Clay/Glass/Ceramics Products` * `Industrial Facility - Textile Mill Products` * `Industrial Facility - Thermo-Electric Power Systems - General` * `Industrial Facility - Tire Manufacturers` * `Industrial Facility - Tobacco Products` * `Industrial Facility - Transportation Equipment Assembly` * `Industrial Facility - Unknown Industrial Facility` * `Industrial Facility - Vinyl Plants` * `Industrial Facility - Waste Water Treatment Systems - General` * `Industrial Facility - Watches and Clocks` * `Industrial Facility - Wineries` * `Mercantile - Automotive Repair Shops and Car Washes` * `Mercantile - Gasoline Stations` * `Miscellaneous - Agriculture` * `Miscellaneous - Communication` * `Miscellaneous - Construction/Erection Risks` * `Miscellaneous - Flood Control` * `Religion and Non-Profit - Churches` * `Religion and Non-Profit - Religion and Non-Profit` * `Residential - Apartments/Condominiums` * `Residential - General Residential` * `Residential - Group Institutional Housing` * `Residential - Permanent Dwelling: Multi-Family` * `Residential - Permanent Dwelling: Single-Family` * `Residential - Temporary Lodging` * `Restaurants - Restaurants` * `Transportation - Air` * `Transportation - Aircraft Hangars` * `Transportation - Aircraft at Ramps or Boarding Gates` * `Transportation - Highway` * `Transportation - Railroad` * `Transportation - Sea and Inland Waterways` * `Unknown` * `Utilities - Electrical Utilities` * `Utilities - Natural Gas` * `Utilities - Sanitary Sewer` * `Utilities - Telephone and Telegraph` * `Utilities - Water Utilities` * `Residential - Terraced Housing` * `Industrial Facility - Nuclear Power Systems - General` * `Industrial Facility - Communication Systems - General` * `Industrial Facility - Agriculture Systems - General` * `Industrial Facility - Business Systems - General` * `Industrial Facility - Port Systems` * `Industrial Facility - Ferry Systems` * `Industrial Facility - Airport Systems - General` * `Offshore - Unknown` * `Offshore - Oil Production Only` * `Offshore - Gas Production Only` * `Offshore - No Production` * `Offshore - Oil and Gas Production` * `Offshore - Drilling` * `Offshore - Workover` * `Offshore - Ready Stacked` * `Offshore - Waiting on Location` * `Offshore - Pipelines` * `Miscellaneous - Designated Facilities / Vaults` * `Miscellaneous - Silo` * `Miscellaneous - Liquid Tanks` * `Miscellaneous - Gas Tanks` * `Miscellaneous - Inside Warehouse At Port` * `Miscellaneous - Containerized Inside Warehouse` * `Miscellaneous - Containerized Stacked Outside` * `Miscellaneous - Open Lot or Stockpiled Outside` * `Miscellaneous - At Destination in Warehouse` * `Miscellaneous - At Destination Retail` * `Miscellaneous - Museums, Institutions, Public Buildings` * `Miscellaneous - Retail & Private Buildings` * `Miscellaneous - Greenhouses` * `Miscellaneous - Forestry` * `Residential - Construction/Erection Risks` * `Commercial - Construction/Erection Risks` * `Industrial - Construction/Erection Risks` * `Commercial - Inland Transit Cargo` * `Residential - Damageable Land` **`occupancy__category_ping`** (`text†`) Ping Occupancy Group: First part of occupancy\_\_desc\_ping. **`occupancy__detail_ping`** (`text†`) Ping Occupancy Detail: Last part of occupancy\_\_desc\_ping. **`occupancy__code_atc`** (`choices†`) ATC Occupancy Code * `0: Unknown` * `1: Permanent Dwelling (single-family housing)` * `2: Permanent Dwelling (multi-family housing)` * `3: Temporary Lodging` * `4: Group Institutional Housing` * `5: Retail Trade` * `6: Wholesale Trade` * `7: Personal and Repair Services` * `8: Professional, Technical and Business Services` * `9: Health Care Service` * `10: Entertainment and Recreation` * `11: Parking` * `12: Heavy Fabrication and Assembly` * `13: Light Fabrication and Assembly` * `14: Food and Drugs Processing` * `15: Chemicals Processing` * `16: Metal and Minerals Processing` * `17: High Technology` * `18: Construction` * `19: Petroleum` * `20: Agriculture` * `21: Mining` * `22: Religion and Nonprofit` * `23: General Services` * `24: Emergency Response Services` * `25: Education` * `26: Highway` * `27: Railroad` * `28: Air` * `29: Sea/Water` * `30: Electrical` * `31: Water` * `32: Sanitary Sewer` * `33: Natural Gas` * `34: Telephone & Telegraph` * `35: Communication (Radio and TV)` * `36: Flood Control` * `37: General Commercial` * `38: General Industrial` * `39: Miscellaneous` * `40: Mortgage-backed Dwelling (Puerto Rico only)/General Residential` * `41: Homeowner` * `42: Multi-Family Dwelling - Homeowners Association` * `43: Multi-Family Dwelling - Condominium Unit Owner` * `44: Gasoline Service Station` * `47: Restaurants` * `48: Casinos` * `49: Acute Care Services Hospitals` * `50: OSHPD Acute Care Services Hospitals (California ONLY)` * `51: Hotels - Large` * `52: Hotels - Small and Medium` * `53: Rental - General Commercial` * `54: Colleges and Universities` * `60: Dwelling (Residential Mortgage Policy)` **`occupancy__code_air`** (`choices†`) AIR Occupancy Code * `300: Unknown` * `301: General Residential` * `302: Permanent Dwelling: Single-Family` * `303: Permanent Dwelling: Multi-Family` * `304: Temporary Lodging` * `305: Group Institutional Housing` * `306: Apartments/Condominiums` * `307: Terraced Housing` * `311: General Commercial` * `312: Retail Trade` * `313: Wholesale Trade` * `314: Personal and Repair Services` * `315: Professional, Technical, and Business Services` * `316: Health Care Services` * `317: Entertainment and Recreation` * `318: Parking` * `319: Golf Courses` * `321: General Industrial` * `322: Heavy Fabrication and Assembly` * `323: Light Fabrication and Assembly` * `324: Food and Drug Processing` * `325: Chemical Processing` * `326: Metal and Minerals Processing` * `327: High-Technology` * `328: Construction` * `329: Petroleum` * `330: Mining` * `331: Restaurants` * `335: Gasoline Stations` * `336: Automotive Repair Shops and Car Washes` * `341: Religion and Non-Profit` * `342: Churches` * `343: Government - General Services` * `344: Government - Emergency Services` * `345: Universities, Colleges, and Technical Schools` * `346: Primary and Secondary Schools` * `351: Highway` * `352: Railroad` * `353: Air` * `354: Sea and Inland Waterways` * `355: Aircraft Hangars` * `356: Aircraft at Ramps or Boarding Gates` * `361: Electrical Utilities` * `362: Water Utilities` * `363: Sanitary Sewer` * `364: Natural Gas` * `365: Telephone and Telegraph` * `366: Inland Transit Cargo` * `367: Damageable Land` * `371: Communication` * `372: Flood Control` * `373: Agriculture` * `374: Greenhouses` * `375: Forestry` * `381: Miscellaneous Construction/Erection Risks` * `382: Residential Construction/Erection Risks` * `383: Commercial Construction/Erection Risks` * `384: Industrial Construction/Erection Risks` * `400: Unknown Industrial Facility` * `401: Heavy Fabrication and Assembly - General` * `402: Automotive Manufacturing` * `403: Fabricated Metal Products` * `404: Industrial and Commercial Machinery and Equipment` * `405: Transportation Equipment Assembly` * `406: Pulp/Paper and Allied Products Manufacturing` * `407: Textile Mill Products` * `408: Lumber and Wood Products (Except Furniture)` * `409: Stone/Clay/Glass/Ceramics Products` * `414: Light Fabrication and Assembly - General` * `415: Furniture and Fixtures` * `416: Apparel and Finished Products from Fabrics` * `417: Print/Publishing and Allied Industries` * `418: Rubber and Miscellaneous Plastics Products` * `419: Leather and Leather Products` * `420: Electronic and Other Electrical Equipment (Except Computer Equipment)` * `421: Measuring, Analyzing, and Controlling Instruments` * `422: Photographic, Medical, and Optical Goods` * `423: Watches and Clocks` * `424: Miscellaneous Manufacturing Industries` * `425: Tire Manufacturers` * `429: Food and Drug Processing - General` * `430: Food and Kindred Products` * `431: Tobacco Products` * `432: Pharmaceutical Plants` * `433: Biological Products (Except Diagnostic) Medicinals/Botanicals/Biomedical` * `434: Wineries` * `438: Chemical Processing - General` * `439: Chlorine Plants` * `440: Vinyl Plants` * `441: Light Hydrocarbon or Aromatics Plants` * `442: Plastics Plants` * `443: Chlorohydrin Plants` * `444: Fertilizer Plants` * `445: Cement Plants/Cement Mills` * `446: Other Chemical and Allied Products` * `449: Metal and Minerals Processing - General` * `450: Primary Metal Industry` * `451: Steel Mills` * `452: Smelters` * `455: High-Technology - General` * `456: Semi-Conductor and Related Devices` * `457: Electronic Computer Devices` * `458: Computer Storage Devices` * `459: Electron Tubes` * `460: Printed Circuit Boards` * `463: General Building/Construction Contractors` * `464: Heavy Constructions` * `465: Special Trade Contractors` * `470: Mining - General` * `471: Mining Operations` * `472: Metal Mining` * `473: Coal Mining` * `474: Mining/Quarrying - Non-Metallic Mineral (Except Fuels)` * `475: Oil Refinery Systems - General` * `476: Hydro-Electric Power Systems - General` * `477: Thermo-Electric Power Systems - General` * `478: Nuclear Power Systems - General` * `479: Electric Substations` * `480: Potable Water Systems - General` * `481: Waste Water Treatment Systems - General` * `482: Gas Processing Systems - General` * `483: Communication Systems - General` * `484: Agriculture Systems - General` * `485: Business Systems - General` * `486: Port Systems` * `487: Ferry Systems` * `488: Airport Systems - General` * `900: Unknown Offshore` * `901: Oil Production Only` * `902: Gas Production Only` * `903: No Production` * `904: Oil and Gas Production` * `905: Drilling` * `906: Workover` * `907: Ready Stacked` * `908: Waiting on Location` * `909: Pipelines` * `1001: Designated Facilities / Vaults` * `1002: Silo` * `1003: Liquid Tanks` * `1004: Gas Tanks` * `1005: Inside Warehouse At Port` * `1006: Containerized Inside Warehouse` * `1007: Containerized Stacked Outside` * `1008: Open Lot or Stockpiled Outside` * `1009: At Destination in Warehouse` * `1010: At Destination Retail` * `1011: Museums, Institutions, Public Buildings` * `1012: Retail & Private Buildings` **`occupancy__code_rms_ifm`** (`choices†`) RMS IFM Occupancy Code * `0: Unknown` * `1001: Heavy Industrial - Mining` * `1011: Heavy Industrial - Cement` * `1021: Heavy Industrial - Steel` * `1031: Heavy Industrial - Pulp & Paper` * `1041: Heavy Industrial - Glass` * `1051: Heavy Industrial - General` * `2001: Chemical Processing - Primarily Outdoor` * `2011: Chemical Processing - Primarily Indoor` * `3001: Light Industrial - Electronics` * `3011: Light Industrial - Pharmaceutical` * `3021: Light Industrial - Biomedical` * `3031: Light Industrial - Semiconductor` * `3041: Light Industrial - General Assembly` * `3051: Light Industrial - General Manufacturing` * `3061: Light Industrial - Technological Risk` * `4001: Petrochemical - Refineries` * `4011: Petrochemical - Pipelines` * `4021: Petrochemical - Pipelines Below Ground` * `4031: Petrochemical - Tank Farms` * `5001: Electric Power Generation - Fossil Fuel (Small)` * `5002: Electric Power Generation - Fossil Fuel (Mid)` * `5003: Electric Power Generation - Fossil Fuel (Large)` * `5011: Electric Power Generation - Hydroelectric` * `5021: Electric Power Generation - Co-Generation (Small)` * `5022: Electric Power Generation - Co-Generation (Mid)` * `5023: Electric Power Generation - Co-Generation (Large)` * `5031: Electric Power Generation - Gas Power (Small)` * `5032: Electric Power Generation - Gas Power (Mid)` * `5033: Electric Power Generation - Gas Power (Large)` * `6001: Electric Power - T&D` * `6011: Electric Power - Substations (Small)` * `6012: Electric Power - Substations (Mid)` * `6013: Electric Power - Substations (Large)` * `6021: Electric Power - Nuclear Power Plant` * `6031: Electric Power - Wind Farms (Small)` * `6032: Electric Power - Wind Farms (Mid)` * `6033: Electric Power - Wind Farms (Large)` * `6041: Electric Power - Solar Farms (Small)` * `6042: Electric Power - Solar Farms (Mid)` * `6043: Electric Power - Solar Farms (Large)` * `7001: Natural Gas` * `7011: Food & Beverage` * `7021: Data Processing/ Telecommunications` * `7031: Communications` * `7041: Ports & Harbors` * `7051: Dams, Reservoirs Only` * `7061: Water/Sewage Treatment Plants` * `7071: Outdoor Mechanical` * `7081: Airport (Small)` * `7082: Airport (Mid)` * `7083: Airport (Large)` **`occupancy__code_oed`** (`choices†`) OED Occupancy Code * `1000: Unknown` * `1050: Residential, General residential` * `1051: Residential, Permanent dwelling: single-family` * `1052: Residential, Permanent dwelling: multi-family` * `1053: Residential, Temporary lodging` * `1054: Residential, Group institutional housing` * `1055: Residential, Apartment/Condo` * `1056: Residential, Mid-Terraced Housing` * `1057: Residential, Renter` * `1058: Residential Apartment/Condo Asso, Common Areas` * `1070: Residential, detached house` * `1071: Residential, semi-detached house` * `1072: Residential, end-terrace house` * `1073: Residential, bungalow` * `1100: Commercial, General commercial` * `1101: Commercial, Retail trade` * `1102: Commercial, Wholesale trade` * `1103: Commercial, Personal and repair services` * `1104: Commercial, Professional, technical and business` * `1105: Commercial, Health care services - General` * `1106: Commercial, Hospital` * `1107: Commercial, Nursing Home` * `1108: Commercial, Entertainment and recreation - General` * `1109: Commercial, Amusement park` * `1110: Commercial, Cinema, concert hall, theatre` * `1111: Commercial, Stadium, arena` * `1112: Commercial, Temporary exhibition facility or circus` * `1113: Commercial, Parking` * `1114: Commercial, Golf Courses` * `1115: Commercial, Hotel - Small & Medium` * `1116: Commercial, Hotel - Large` * `1117: Commercial, Casino` * `1118: Commercial, Floating Casino` * `1119: Commercial, Restaurant, cafe, bar, pub, club, tavern, discotheque` * `1120: Commercial, Gasoline Station` * `1121: Commercial, Automotive repair services and carwash` * `1122: Commercial, Warehouse` * `1123: Commercial, Communication` * `1124: Commercial - Railway Buildings` * `1125: Commercial, Banks` * `1150: Industrial, General industrial` * `1151: Industrial, Heavy fabrication and assembly` * `1152: Industrial, Light fabrication and assembly` * `1153: Industrial, Food and drug processing` * `1154: Industrial, Chemical processing` * `1155: Industrial, Metal and minerals processing` * `1156: Industrial, High technology` * `1157: Industrial, Construction` * `1158: Industrial, Petroleum` * `1159: Industrial, Mining` * `1200: Religion and Nonprofit, Religion and nonprofit` * `1201: Religion and Nonprofit, Church` * `1210: Government, General services` * `1211: Government, Museum` * `1212: Government, Convention centre` * `1213: Government, Exhibition hall` * `1214: Government, Library` * `1215: Government, Prison / jail` * `1220: Government, Emergency services` * `1230: Education, Universities, colleges and technical schools` * `1231: Education, Primary and secondary schools` * `1250: Transportation, Highway` * `1251: Transportation, Railroad` * `1252: Transportation, Air` * `1253: Transportation, Sea and inland waterways` * `1254: Transportation, Aircraft Hangars` * `1255: Transportation, Aircrafts at ramps or boarding gates` * `1256: Transportation, General` * `1260: Auto, General` * `1300: Utilities, Electrical` * `1301: Utilities, Water` * `1302: Utilities, Sanitary sewer` * `1303: Utilities, Natural gas` * `1304: Utilities, Telephone and telegraph` * `1305: Utilities, General` * `1350: Flood control` * `1351: Agriculture` * `1352: Green House` * `1353: Forestry, General` * `1360: Agriculture, Crops` * `1370: Agriculture, Livestock` * `1400: Marine Cargo, General / Unknown` * `1401: Marine Cargo, Designated Facilities / Vaults` * `1402: Marine Cargo, Silo` * `1403: Marine Cargo, Liquid Tanks` * `1404: Marine Cargo, Gas Tanks` * `1405: Marine Cargo, Inside Warehouse at Port` * `1406: Marine Cargo, Containerized Inside Warehouse` * `1407: Marine Cargo, Containerized Stacked Outside` * `1408: Marine Cargo, Open Lot or Stockpiled Outside` * `1409: Marine Cargo, At Destination in Warehouse` * `1410: Marine Cargo, At Destination Retail` * `1411: Marine Cargo, Museums, Institutions, Public Buildings` * `1412: Marine Cargo, Retail & Private Buildings` * `2000: Industrial Facilities Model, IFM: Unknown` * `2050: Industrial Facilities Model, IFM: Heavy Fabrication and Assembly - General` * `2051: Industrial Facilities Model, IFM: Automotive Manufacturing` * `2052: Industrial Facilities Model, IFM: Fabricated Metal Products` * `2053: Industrial Facilities Model, IFM: Industrial and commercial machinery and equipment` * `2054: Industrial Facilities Model, IFM: Transportation Equipment Assembly` * `2055: Industrial Facilities Model, IFM: Pulp/Paper and Allied Products Manufacturing` * `2056: Industrial Facilities Model, IFM: Textile Mill Product` * `2057: Industrial Facilities Model, IFM: Lumber and wood products (excluding furniture)` * `2058: Industrial Facilities Model, IFM: Stone/Clay/Glass/Ceramics products` * `2100: Industrial Facilities Model, IFM: Light Fabrication and Assembly - General` * `2101: Industrial Facilities Model, IFM: Furniture and Fixtures` * `2102: Industrial Facilities Model, IFM: Apparel and finished products from fabrics` * `2103: Industrial Facilities Model, IFM: Print/Publishing and allied industry` * `2104: Industrial Facilities Model, IFM: Rubber and miscellaneous plastics products` * `2105: Industrial Facilities Model, IFM: Leather and Leather products` * `2106: Industrial Facilities Model, IFM: Electronic and other electrical equipment (except computer equipment)` * `2107: Industrial Facilities Model, IFM: Measuring analyzing and controlling instruments` * `2108: Industrial Facilities Model, IFM: Photographic medical and optical goods` * `2109: Industrial Facilities Model, IFM: Watches and clocks` * `2110: Industrial Facilities Model, IFM: Miscellaneous Light Manufacturing Industries` * `2111: Industrial Facilities Model, IFM: Tire manufacturers` * `2150: Industrial Facilities Model, IFM: Food and Drug Processing- General` * `2151: Industrial Facilities Model, IFM: Food and kindred products` * `2152: Industrial Facilities Model, IFM: Tobacco products` * `2153: Industrial Facilities Model, IFM: Pharmaceutical plants` * `2154: Industrial Facilities Model, IFM: Biological Products(except diagnostic) - Medicinals/Botanical/Biomedical` * `2155: Industrial Facilities Model, IFM: Wineries` * `2200: Industrial Facilities Model, IFM: Chemical Processing - General` * `2201: Industrial Facilities Model, IFM: Chlorine plants ` * `2202: Industrial Facilities Model, IFM: Vinyl plants` * `2203: Industrial Facilities Model, IFM: Light hydrocarbon or aromatics plants` * `2204: Industrial Facilities Model, IFM: Plastics plants` * `2205: Industrial Facilities Model, IFM: Chlorhydrin plants` * `2206: Industrial Facilities Model, IFM: Fertilizer plants` * `2207: Industrial Facilities Model, IFM: Cement plants/Cement Mills` * `2208: Industrial Facilities Model, IFM: Other Chemical and Allied Products` * `2250: Industrial Facilities Model, IFM: Metal and Minerals Processing- General` * `2251: Industrial Facilities Model, IFM: Primary metal industry` * `2252: Industrial Facilities Model, IFM: Steel Mills` * `2253: Industrial Facilities Model, IFM: Smelters` * `2300: Industrial Facilities Model, IFM: High Technology - General` * `2301: Industrial Facilities Model, IFM: Semi-conductor and related devices` * `2302: Industrial Facilities Model, IFM: Electronic computer devices` * `2303: Industrial Facilities Model, IFM: Computer storage devices` * `2304: Industrial Facilities Model, IFM: Electron tubes` * `2305: Industrial Facilities Model, IFM: Printed circuit boards` * `2350: Industrial Facilities Model, IFM: General building/ construction contractors` * `2351: Industrial Facilities Model, IFM: Heavy Constructions` * `2352: Industrial Facilities Model, IFM: Special Trade Contractors` * `2400: Industrial Facilities Model, IFM: Mining - General` * `2401: Industrial Facilities Model, IFM: Mining operations` * `2402: Industrial Facilities Model, IFM: Metal mining` * `2403: Industrial Facilities Model, IFM: Coal mining` * `2404: Industrial Facilities Model, IFM: Mining /Quarrying - Non-metallic mineral (except fuels)` * `2450: Industrial Facilities Model, IFM: Oil Refinery Systems - General` * `2460: Industrial Facilities Model, IFM: Oil Production Systems - General` * `2461: Industrial Facilities Model, IFM: Oil Production Systems - Oil field wells` * `2470: Industrial Facilities Model, IFM: Oil Transmission Systems - General` * `2500: Industrial Facilities Model, IFM: Hydro-Electric Power Systems- General` * `2505: Industrial Facilities Model, IFM: Geothermal Power Systems- General` * `2510: Industrial Facilities Model, IFM: Thermo-Electric Power Systems- General` * `2515: Industrial Facilities Model, IFM: Tidal Power Systems- General` * `2520: Industrial Facilities Model, IFM: Nuclear Power Systems All- General` * `2521: Industrial Facilities Model, IFM: other Nuclear Facilities` * `2530: Industrial Facilities Model, IFM: Electric Substation - General` * `2531: Industrial Facilities Model, IFM: Electric Transmission Lines - General` * `2541: Industrial Facilities Model, IFM: Solar panel plant` * `2542: Industrial Facilities Model, IFM: Wind plant` * `2543: Industrial Facilities Model, IFM: Biomass plant` * `2550: Industrial Facilities Model, IFM: Potable water Systems- General` * `2560: Industrial Facilities Model, IFM: Waste water treatment Systems- General` * `2600: Industrial Facilities Model, IFM: Gas Processing Systems - General` * `2610: Industrial Facilities Model, IFM: Gas Production Systems - General` * `2611: Industrial Facilities Model, IFM: Gas Production Systems - Gas field wells` * `2612: Industrial Facilities Model, IFM: Gas Production Systems - Gas Processing Plant` * `2613: Industrial Facilities Model, IFM: Gas Production Systems -Underground gas storage facilities` * `2620: Industrial Facilities Model, IFM: Gas Transmission Systems - General` * `2650: Industrial Facilities Model, IFM Communication Systems -General` * `2651: Industrial Facilities Model, IFM: Transmission Systems - Other/Unknown` * `2700: Agriculture Systems - General` * `2750: Industrial Facilities Model, IFM: Bus Systems - General` * `2760: Industrial Facilities Model, IFM: Port Systems` * `2770: Industrial Facilities Model, IFM: Ferry Systems` * `2780: Industrial Facilities Model, IFM: Airport Systems - General` * `3000: Offshore, Unknown` * `3001: Offshore, Oil production only` * `3002: Offshore, Gas production only` * `3003: Offshore, No production` * `3004: Offshore, Oil and gas production` * `3005: Offshore, Drilling` * `3006: Offshore, Workover` * `3007: Offshore, Ready stacked` * `3008: Offshore, Waiting on location` * `3009: Offshore, Pipelines` * `3010: Barge, support vessel, seismic vessel` * `3011: Buoy (single point mooring - SPM, catenary anchor leg mooring - CALM)` * `3012: Crane barge or pipelay vessel` * `3013: Drill ship` * `3014: Floating liquefied natural gas (LNG), gas to liquid (GTL) vessel` * `3015: Floating, production, storage and off-loading vessel (FPSO)` * `3016: Floating, storage and off-loading vessel (FSO)` * `3017: Offshore complex (bridge linked fixed steel structures)` * `3018: Offshore concrete gravity based structure` * `3019: Offshore fixed steel structure` * `3020: Other floating production systems` * `3021: Self elevating jack-up with independent legs` * `3022: Self elevating jack-up with mat base` * `3023: Semi submersible drilling rig` * `3024: Semi submersible production platform` * `3025: Spar or tension leg platform` * `3026: Subsea equipment: deep (> 200m and <= 1500m)` * `3027: Subsea equipment: shallow (< 200 m)` * `3028: Subsea equipment: ultra deep ( > 1500m)` * `3029: Offshore pipeline: deep (> 200m and <= 1500m)` * `3030: Offshore pipeline: shallow (<= 200m)` * `3031: Offshore pipeline: ultra deep ( > 1500m)` * `3032: Offshore renewables - general` * `3033: Offshore Wind` * `3034: Offshore Tidal` * `3035: Offshore Ocean Wave` * `3036: Floating Solar PV` **`occupancy__code_euro`** (`text†`) EURO Occupancy Code **`occupancy__code_for_rms`** (`choices†`) Occupancy Code For RMS * `ATC-0: Unknown (ATC)` * `ATC-1: Permanent Dwelling (single-family housing) (ATC)` * `ATC-2: Permanent Dwelling (multi-family housing) (ATC)` * `ATC-3: Temporary Lodging (ATC)` * `ATC-4: Group Institutional Housing (ATC)` * `ATC-5: Retail Trade (ATC)` * `ATC-6: Wholesale Trade (ATC)` * `ATC-7: Personal and Repair Services (ATC)` * `ATC-8: Professional, Technical and Business Services (ATC)` * `ATC-9: Health Care Service (ATC)` * `ATC-10: Entertainment and Recreation (ATC)` * `ATC-11: Parking (ATC)` * `ATC-12: Heavy Fabrication and Assembly (ATC)` * `ATC-13: Light Fabrication and Assembly (ATC)` * `ATC-14: Food and Drugs Processing (ATC)` * `ATC-15: Chemicals Processing (ATC)` * `ATC-16: Metal and Minerals Processing (ATC)` * `ATC-17: High Technology (ATC)` * `ATC-18: Construction (ATC)` * `ATC-19: Petroleum (ATC)` * `ATC-20: Agriculture (ATC)` * `ATC-21: Mining (ATC)` * `ATC-22: Religion and Nonprofit (ATC)` * `ATC-23: General Services (ATC)` * `ATC-24: Emergency Response Services (ATC)` * `ATC-25: Education (ATC)` * `ATC-26: Highway (ATC)` * `ATC-27: Railroad (ATC)` * `ATC-28: Air (ATC)` * `ATC-29: Sea/Water (ATC)` * `ATC-30: Electrical (ATC)` * `ATC-31: Water (ATC)` * `ATC-32: Sanitary Sewer (ATC)` * `ATC-33: Natural Gas (ATC)` * `ATC-34: Telephone & Telegraph (ATC)` * `ATC-35: Communication (Radio and TV) (ATC)` * `ATC-36: Flood Control (ATC)` * `ATC-37: General Commercial (ATC)` * `ATC-38: General Industrial (ATC)` * `ATC-39: Miscellaneous (ATC)` * `ATC-40: Mortgage-backed Dwelling (Puerto Rico only)/General Residential (ATC)` * `ATC-41: Homeowner (ATC)` * `ATC-42: Multi-Family Dwelling - Homeowners Association (ATC)` * `ATC-43: Multi-Family Dwelling - Condominium Unit Owner (ATC)` * `ATC-44: Gasoline Service Station (ATC)` * `ATC-47: Restaurants (ATC)` * `ATC-48: Casinos (ATC)` * `ATC-49: Acute Care Services Hospitals (ATC)` * `ATC-50: OSHPD Acute Care Services Hospitals (California ONLY) (ATC)` * `ATC-51: Hotels - Large (ATC)` * `ATC-52: Hotels - Small and Medium (ATC)` * `ATC-53: Rental - General Commercial (ATC)` * `ATC-54: Colleges and Universities (ATC)` * `ATC-60: Dwelling (Residential Mortgage Policy) (ATC)` * `RMS IND-0: Unknown (RMS IND)` * `RMS IND-1001: Heavy Industrial - Mining (RMS IND)` * `RMS IND-1011: Heavy Industrial - Cement (RMS IND)` * `RMS IND-1021: Heavy Industrial - Steel (RMS IND)` * `RMS IND-1031: Heavy Industrial - Pulp & Paper (RMS IND)` * `RMS IND-1041: Heavy Industrial - Glass (RMS IND)` * `RMS IND-1051: Heavy Industrial - General (RMS IND)` * `RMS IND-2001: Chemical Processing - Primarily Outdoor (RMS IND)` * `RMS IND-2011: Chemical Processing - Primarily Indoor (RMS IND)` * `RMS IND-3001: Light Industrial - Electronics (RMS IND)` * `RMS IND-3011: Light Industrial - Pharmaceutical (RMS IND)` * `RMS IND-3021: Light Industrial - Biomedical (RMS IND)` * `RMS IND-3031: Light Industrial - Semiconductor (RMS IND)` * `RMS IND-3041: Light Industrial - General Assembly (RMS IND)` * `RMS IND-3051: Light Industrial - General Manufacturing (RMS IND)` * `RMS IND-3061: Light Industrial - Technological Risk (RMS IND)` * `RMS IND-4001: Petrochemical - Refineries (RMS IND)` * `RMS IND-4011: Petrochemical - Pipelines (RMS IND)` * `RMS IND-4021: Petrochemical - Pipelines Below Ground (RMS IND)` * `RMS IND-4031: Petrochemical - Tank Farms (RMS IND)` * `RMS IND-5001: Electric Power Generation - Fossil Fuel (Small) (RMS IND)` * `RMS IND-5002: Electric Power Generation - Fossil Fuel (Mid) (RMS IND)` * `RMS IND-5003: Electric Power Generation - Fossil Fuel (Large) (RMS IND)` * `RMS IND-5011: Electric Power Generation - Hydroelectric (RMS IND)` * `RMS IND-5021: Electric Power Generation - Co-Generation (Small) (RMS IND)` * `RMS IND-5022: Electric Power Generation - Co-Generation (Mid) (RMS IND)` * `RMS IND-5023: Electric Power Generation - Co-Generation (Large) (RMS IND)` * `RMS IND-5031: Electric Power Generation - Gas Power (Small) (RMS IND)` * `RMS IND-5032: Electric Power Generation - Gas Power (Mid) (RMS IND)` * `RMS IND-5033: Electric Power Generation - Gas Power (Large) (RMS IND)` * `RMS IND-6001: Electric Power - T&D (RMS IND)` * `RMS IND-6011: Electric Power - Substations (Small) (RMS IND)` * `RMS IND-6012: Electric Power - Substations (Mid) (RMS IND)` * `RMS IND-6013: Electric Power - Substations (Large) (RMS IND)` * `RMS IND-6021: Electric Power - Nuclear Power Plant (RMS IND)` * `RMS IND-6031: Electric Power - Wind Farms (Small) (RMS IND)` * `RMS IND-6032: Electric Power - Wind Farms (Mid) (RMS IND)` * `RMS IND-6033: Electric Power - Wind Farms (Large) (RMS IND)` * `RMS IND-6041: Electric Power - Solar Farms (Small) (RMS IND)` * `RMS IND-6042: Electric Power - Solar Farms (Mid) (RMS IND)` * `RMS IND-6043: Electric Power - Solar Farms (Large) (RMS IND)` * `RMS IND-7001: Natural Gas (RMS IND)` * `RMS IND-7011: Food & Beverage (RMS IND)` * `RMS IND-7021: Data Processing/ Telecommunications (RMS IND)` * `RMS IND-7031: Communications (RMS IND)` * `RMS IND-7041: Ports & Harbors (RMS IND)` * `RMS IND-7051: Dams, Reservoirs Only (RMS IND)` * `RMS IND-7061: Water/Sewage Treatment Plants (RMS IND)` * `RMS IND-7071: Outdoor Mechanical (RMS IND)` * `RMS IND-7081: Airport (Small) (RMS IND)` * `RMS IND-7082: Airport (Mid) (RMS IND)` * `RMS IND-7083: Airport (Large) (RMS IND)` * `EURO-0: Unknown (EURO)` * `EURO-1: Residential - Single-Occupancy (EURO)` * `EURO-2: Residential - Multi-Occupancy (EURO)` * `EURO-3: Residential - General (EURO)` * `EURO-4: Residential - Detached House (EURO)` * `EURO-5: Residential - Semi-Detached House (EURO)` * `EURO-6: Residential - Terraced House (EURO)` * `EURO-7: Residential - Bungalow (EURO)` * `EURO-8: Residential - Summer House (EURO)` * `EURO-9: Mobile Homes (EURO)` * `EURO-10: Commercial - General (EURO)` * `EURO-11: Commercial - Office (EURO)` * `EURO-12: Commercial - Retail (EURO)` * `EURO-13: Commercial - Hotel (EURO)` * `EURO-14: Commercial -Warehouse (EURO)` * `EURO-15: Commercial -Transmission & Distribution Lines (EURO)` * `EURO-16: Industrial - General (EURO)` * `EURO-17: Agricultural - General (EURO)` * `EURO-18: Greenhouse (EURO)` * `EURO-19: Forests (EURO)` * `EURO-20: Aquaculture (EURO)` * `EURO-21: Auto - Personal (EURO)` * `EURO-22: Boats - Small Marine (EURO)` * `EURO-23: Municipal Lines (EURO)` * `EURO-24: Municipal Residential (for United Kingdom earthquake, windstorm,and flood modeling only) (EURO)` * `EURO-25: Municipal Non-Residential (for United Kingdom earthquake, windstorm,and flood modeling only) (EURO)` * `EURO-26: Agriculture - Glass house, Venlo non-NEN (26) (EURO)` * `EURO-27: Agriculture - Glass house, Venlo non-NEN (27) (EURO)` * `EURO-28: Agriculture -Glasshouse, Wide roof NEN (28) (EURO)` * `EURO-29: Agriculture -Glasshouse, Wide roof NEN (29) (EURO)` **`occupancy__desc_atc`** (`text†`) ATC Occupancy Description **`occupancy__desc_oed`** (`text†`) OED Occupancy Description **`occupancy__desc_air`** (`text†`) AIR Occupancy Description: Available integrations: HH occupancy\_type, LB occupancy\_type. **`occupancy__desc_rms_ifm`** (`text†`) RMS IFM Occupancy Description **`occupancy__desc_euro`** (`text†`) EURO Occupancy Description **`occupancy__scheme`** (`text†`) Occupancy Code Scheme **`occupancy__business_class`** (`number†`) Business Classification **`occupancy__lro`** (`text†`) LRO ## **Protection** **Attributes that provide descriptive information about the risk prevention facilities of a property.** **`protect__onsite_guard`** (`boolean†`) Onsite Guard Service **`protect__fire_walls`** (`text†`) Fire Walls **`protect__burglar_alarm_type`** (`text†`) Burglar Alarm Type **`protect__fire_alarm_type`** (`text†`) Fire Alarm Type **`protect__pct_sprinklered`** (`percentage†`) Percent Sprinklered **`protect__sprinklers`** (`boolean†`) Sprinklers **`protect__sprinkler_central_or_local`** (`text†`) **`protect__sprinkler_type`** (`text†`) Sprinkler Type **`protect__smoke_detectors`** (`boolean†`) Smoke Detectors **`protect__smoke_detectors_locations`** (`text†`) Smoke Detectors in All Sleeping Areas and Halls **`protect__smoke_and_co_detectors_status`** (`text†`) Smoke / Carbon Monoxide Detectors Operational (Y/N) **`protect__fire_hydrants`** (`boolean†`) Fire Hydrants **`protect__fire_extinguishers`** (`boolean†`) Fire Extinguishers ## **Roof** **Attributes that provide descriptive information about the property’s roof construction specifications.** **`const__roof_anchorage`** (`text†`) Roof Anchorage: Roof wind anchorage type. **`const__roof_covering`** (`text†`) Roof Covering: Available integrations: HH roof\_covering, CA roof\_covering, LB roof\_covering. **`const__roof_framing`** (`text†`) Roof Deck/Framing: Available integrations: LB roof\_framing. **`const__roof_shape`** (`text†`) Roof Shape: Available integrations: HH roof\_shape, LB roof\_shape. **`const__roof_type`** (`text†`) Roof Type: Available integrations: HH roof\_type, LB roof\_type, CA roof\_geometry. **`const__roof_pitch`** (`text†`) Roof Pitch: Available integrations: LB roof\_pitch. **`const__roof_covering_attachment`** (`text†`) Roof Covering Attachment **`const__roof_deck_attachment`** (`text†`) Roof Deck Attachment **`const__roof_deck_ping`** (`choices†`) Ping Roof Deck (Ping's Taxonomy) * `Unknown/Default` * `Concrete` * `Heavy Timber` * `Insulated Steel` * `Light Metal` * `Light Steel` * `Metal` * `Metal Deck with Concrete` * `Metal Deck with Insulation Board` * `Metal Sheathing` * `Particle Board / OSB` * `Plywood` * `Pre-Cast Concrete Slabs` * `Reinforced Concrete Slabs (Cast-In-Place)` * `Steel` * `Wood` **`const__roof_frame_ping`** (`choices†`) Ping Roof Frame (Ping's Taxonomy) * `Unknown/Default` * `Concrete` * `Heavy Steel Frame` * `Light Steel Frame` * `Light/Heavy Steel` * `Light Steel Purlin` * `Poured/Cast-in-place concrete` * `Steel` * `Wood Frame` **`const__roof_shape_ping`** (`choices†`) Ping Roof Shape (Ping's Taxonomy) **`const__roof_covering_ping`** (`choices†`) Ping Roof Covering (Ping's Taxonomy) **`const__roof_pitch_ping`** (`choices†`) Ping Roof Pitch (Ping's Taxonomy) **`const__roof_anchorage_ping`** (`choices†`) Ping Roof Anchorage (Ping's Taxonomy) **`const__roof_deck_attachment_ping`** (`choices†`) Ping Roof Deck Attachment (Ping's Taxonomy) **`const__has_gravel_ping`** (`choices†`) Has Gravel (Ping's Taxonomy): Indicates whether the roof has gravel, only used for mapping to RMS * `Unknown/Default` * `Yes` * `No` **`const__has_gutters_ping`** (`choices†`) Has Gutters (Ping's Taxonomy): Indicates whether the roof has gutters, only used for mapping to RMS * `Unknown/Default` * `Yes` * `No` **`air__roof_anchorage`** (`choices†`) AIR Roof Anchorage * `0: Unknown/default` * `1: Hurricane Ties` * `2: Nails/Screws` * `3: Anchor bolts` * `4: Gravity/friction` * `5: Adhesive epoxy` * `6: Structurally Connected` * `7: Clips` **`air__roof_attached_structure`** (`choices†`) AIR Roof Attached Structure * `0: Unknown/default` * `1: Chimneys` * `2: A/C Units` * `3: Skylights` * `4: Parapet Walls` * `5: Overhang/Rake (8-36 in.)` * `6: Dormers` * `7: Other` * `8: No Attached Structures` * `9: Overhang/Rake (< 8 in.)` * `10: Overhang/Rake (> 36 in.)` * `11: Waterproof membrane/fabric` * `12: Secondary water resistance - Yes` * `13: Secondary water resistance - No` **`air__roof_covering`** (`choices†`) AIR Roof Covering: Available integrations: HH roof\_covering, CA roof\_covering, LB roof\_covering. * `0: Unknown (Default)` * `1: Asphalt Shingles` * `2: Wooden Shingles` * `3: Clay / Concrete Tiles` * `4: Light Metal Panels` * `5: Slate` * `6: Built-up Roof with Gravel` * `7: Single Ply Membrane` * `8: Standing Seam Metal Roof` * `9: Built-up Roof without Gravel` * `10: Single Ply Membrane - Ballasted` * `11: Hurricane Wind-Rated Roof Coverings` **`air__roof_covering_attachment`** (`choices†`) AIR Roof Covering Attachment * `0: Unknown (Default)` * `1: Screws` * `2: Nails / Staples` * `3: Adhesive / Epoxy` * `4: Mortar` **`air__roof_deck`** (`choices†`) AIR Roof Deck * `0: Unknown (Default)` * `1: Plywood` * `2: Wood Planks` * `3: Particle Board / OSB` * `4: Metal Deck with Insulation Board` * `5: Metal Deck with Concrete` * `6: Pre-Cast Concrete Slabs` * `7: Reinforced Concrete Slabs` * `8: Light Metal` **`air__roof_deck_attachment`** (`choices†`) AIR Roof Deck Attachment * `0: Unknown (Default)` * `1: Screws / Bolts` * `2: Nails` * `3: Adhesive / Epoxy` * `4: Structurally Connected` * `5: 6d Nails @ 6 spacing, 12 on center` * `6: 8d Nails @ 6 spacing, 12 on center` * `7: 8d Nails @ 6 spacing, 6 on center` **`air__roof_geometry`** (`choices†`) AIR Roof Geometry * `0: Unknown/default` * `1: Flat` * `2: Gable end without bracing` * `3: Hip` * `4: Complex` * `5: Stepped` * `6: Shed` * `7: Mansard` * `8: Gable end with bracing` * `9: Pyramid` * `10: Gambrel` **`air__roof_hail_impact_resist`** (`choices†`) AIR Roof Hail Impact Resistance * `0: Unknown/Non-impact-resistant` * `1: Impact-resistant A` * `2: Impact-resistant B` * `3: Impact-resistant C` * `4: Impact-resistant D` **`air__roof_pitch`** (`choices†`) AIR Roof Pitch: Available integrations: LB roof\_pitch. * `0: Unknown (Default)` * `1: Low (Less than 10 degrees)` * `2: Medium (10-30 degrees)` * `3: High (More than 30 degrees)` **`amrisc__roof_anchorage`** (`choices†`) AMRISC Roof Anchorage: Input from AMRISC only. * `100-Unknown` * `101-Toe Nailing / no anchorage` * `102-Clips (Average Strength)` * `103-Single Wraps (Above Average Strength)` * `104-Double Wraps (High Strength)` * `105-Structural` **`amrisc__roof_covering`** (`choices†`) AMRISC Roof Covering: Input from AMRISC only. Available integrations: HH roof\_covering, CA roof\_covering, LB roof\_covering. * `100-Unknown` * `101-Metal Sheathing w/ Exposed Fasteners (Lap Seam)` * `102-Metal Sheathing w/ Concealed Fasteners (Standing-seam)` * `103-Built-up roof NO gravel WITH presence of gutters` * `104-Built-up roof NO gravel WITHOUT presence of gutters` * `105-Built-up roof WITH gravel WITH presence of gutters` * `106-Built-up roof WITH gravel WITHOUT presence of gutters` * `107-Single Ply Membrane WITH presence of gutters` * `108-Single Ply Membrane WITHOUT presence of gutters` * `109-Concrete/Clay Tiles` * `110-Wood Shakes` * `111-Normal Shingle (55 mph)` * `112-Normal Shingle (55 mph) with 2ndry Water Resistance` * `113-Shingle rated for high wind speeds (>=110 mph)` * `114-Shingle rated for high wind speeds (>=110 mph) with 2ndry Water Resistance` **`amrisc__roof_framing`** (`choices†`) AMRISC Roof Framing: Input from AMRISC only. Available integrations: LB roof\_framing. * `100-Unknown` * `101-Poured Reinforced Conc` * `102-Precast Concrete` * `103-Heavy St Fr w/ Conc Deck` * `104-Heavy St Fr w/ Insulated Steel Deck` * `105-Heavy St Fr w/Metal Sheathing` * `106-Light St Fr w/ Metal Sheathing` * `107-Light/Heavy Steel with Wood Deck` * `108-Wood Frame` * `109-Heavy Timber` **`amrisc__roof_shape`** (`choices†`) AMRISC Roof Shape: Input from AMRISC only. Available integrations: HH roof\_shape, LB roof\_shape. * `100-Unknown` * `101-Flat roof WITH parapets` * `102-Flat roof WITHOUT parapets` * `103-Hip roof low slope (<10 deg)` * `104-Hip roof med slope (10 deg to 26.5 deg)` * `105-Hip roof high slope (>26.5 deg)` * `106-Gable roof low slope (<10 deg)` * `107-Gable roof med slope (10 deg to 26.5 deg)` * `108-Gable roof high slope (>26.5 deg)` * `109-Braced Gable low slope (<10 deg)` * `110-Braced Gable med slope (10 deg to 26.5 deg)` * `111-Braced Gable high slope (>26.5 deg)` **`amrisc__acic_roof_covering`** (`text†`) AMRISC ACIC Roof Covering: Input from AMRISC only. **`amrisc__acic_roof_shape`** (`text†`) AMRISC ACIC Roof Shape: Input from AMRISC only. **`amrisc__acic_roof_deck_attachment`** (`text†`) AMRISC ACIC Roof Deck Attachment: Input from AMRISC only. **`amrisc__acic_roof_anchorage`** (`text†`) AMRISC ACIC Roof Wall Attachment: Input from AMRISC only. ## **Secondary Mod** **Attributes that provide additional information about the property’s exposure risk.** **`const__wall_siding_ping`** (`choices†`) Ping Wall Siding (Ping's Taxonomy) * `Unknown/Default` * `Aluminium / Vinyl Siding` * `Asbestos` * `Clapboards` * `Concrete` * `EIFS` * `Fiber Cement (Board)` * `Impact Rated Glazing` * `Light Metal` * `Log` * `Metal Sheathing` * `No-Cladding (Exposed Structure)` * `Non-Impact Gazing (Gravel Debris Risk)` * `Non-Impact Gazing (No Gravel Debris Risk)` * `Steel` * `Stone Panels (Real Stone)` * `Stone Veneer` * `Stucco` * `Tile` * `Veneer Brick / Masonry` * `Wood Shingles / Shakes` * `Wood Siding (General)` **`const__wall_type_ping`** (`choices†`) Ping Wall Type (Ping's Taxonomy) * `Brick/unreinforced masonry` * `Cast-in-place concrete` * `Gypsum board` * `Masonry` * `Metal panels` * `Particle board/OSB` * `Plywood` * `Pre-cast concrete elements` * `Reinforced masonry` * `Unknown/Default` * `Wood planks` * `Steel` **`const__foundation_type_ping`** (`choices†`) Ping Foundation Type (Ping's Taxonomy) * `Basement` * `Concrete Basement` * `Concrete Foundation` * `Crawl Space - Cripple Wall` * `Crawl Space - General` * `Crawl Space - Masonry` * `Crawl Space - Raised (Wood)` * `Engineered` * `Footing` * `Masonry Basement` * `Masonry Wall` * `No Basement` * `Non-Engineered` * `Pile` * `Post & Pier` * `Slab - Concrete` * `Slab - General` * `Slab - Mat / Slab` * `Slab / Mat Foundation` * `Unknown/Default` **`const__frame_to_foundation_connection_ping`** (`choices†`) Ping Frame to Foundation Connection (Ping's Taxonomy) * `Unknown/Default` * `Adhesive / Epoxy` * `Bolted` * `Gravity / Friction` * `Hurricane Ties` * `Nails / Screws` * `Structurally Connected` * `Unbolted` **`const__construction_quality_ping`** (`choices†`) Ping Construction Quality (Ping's Taxonomy) * `Average` * `Certified Design & Construction` * `Certified of Occupancy` * `Excellent` * `Fortified Bronze Option 1` * `Fortified Bronze Option 2` * `Fortified for Safer Living` * `Fortified Gold Option 1` * `Fortified Gold Option 2` * `Fortified Silver Option 1` * `Fortified Silver Option 2` * `Good` * `Poor / Deterioration` * `Unknown/Default` **`const__building_condition_ping`** (`choices†`) Ping Building Condition (Ping's Taxonomy) * `Average` * `Good` * `Poor` * `Unknown/Default` **`const__construction_quality`** (`text†`) Construction Quality **`const__building_condition`** (`text†`) Building Condition **`const__window_protection`** (`text†`) Window Protection **`const__tree_exposure`** (`text†`) Tree Exposure **`const__building_shape`** (`text†`) Building Shape **`const__wall_type`** (`text†`) Wall Type: Description of materials used for external walls. Available integrations: LB wall\_type. **`const__wall_siding`** (`text†`) Wall Siding: Description of cladding materials used for weather, wind, and rain protection of the external walls. Available integrations: LB wall\_siding. **`const__eifs`** (`boolean†`) EIFS: Indicates whether the building exterior uses an Exterior Insulation and Finish System (EIFS). **`const__frame_to_foundation_connection`** (`text†`) Frame to Foundation Connection **`const__foundation_type`** (`text†`) Building Foundation Type **`const__base_flood_elevation`** (`number†`) Base Flood Elevation **`const__lowest_floor_elevation`** (`text†`) Lowest Floor Elevation **`const__wind_pool_eligible`** (`boolean†`) Wind Pool Eligible: Input from AMRISC only. **`const__tall_one_story`** (`text†`) Indicates the height classification of a tall single-story building. **`const__torsion`** (`text†`) Torsion **`const__soft_story`** (`text†`) Soft Story **`const__special_construction`** (`text†`) Special Construction **`const__retrofit`** (`text†`) Retrofit Measures: Description of any seismic retrofit measures. A properly retrofitted structure can resist earthquakes even though the original structural form had weaknesses. **`const__short_column`** (`text†`) Short Column **`const__ornamentation`** (`text†`) Ornamentation **`const__water_heater`** (`text†`) Water Heater **`const__redundancy`** (`text†`) Redundancy: Whether there are multiple lateral load-resisting elements (frames or shear walls) in the building at this location. Redundancy provides additional reinforcement against earthquake damage. **`const__equipment_bracing`** (`text†`) Equipment Bracing **`const__seal_of_approval`** (`text†`) Seal of Approval **`const__roof_hail_impact_resist`** (`text†`) Roof Hail Impact Resist **`const__chimney`** (`text†`) Chimney **`const__glass_type`** (`text†`) Glass type **`const__glass_percentage`** (`text†`) Glass Percentage **`const__exterior_doors`** (`text†`) Exterior Doors **`const__building_exterior_opening`** (`text†`) Building Exterior Opening **`const__brick_veneer`** (`text†`) Brick Veneer **`const__internal_partition`** (`text†`) Internal Partition **`const__welding`** (`text†`) Welding **`const__transition_in_source_type`** (`text†`) Transition in Source Type **`const__multi_story_hall_type`** (`text†`) Multi Story Hall Type **`const__lattice_type`** (`text†`) Lattice Type **`const__is_value_type`** (`text†`) Is Value Type **`const__column_basement_type`** (`text†`) Column Basement Type **`const__cold_formed_tube`** (`text†`) Cold Formed Tube **`const__wall_attached_structure`** (`text†`) Wall Attached Structure **`const__appurtenant_structures`** (`text†`) Appurtenant Structures **`const__pounding`** (`text†`) Pounding: Distance from the building at this location to the closest structure, which, if not adequate, can cause the two structures to collide during earthquake shaking. **`const__small_debris`** (`text†`) Small Debris **`const__large_missile`** (`text†`) Large Missile **`const__terrain_roughness`** (`text†`) Terrain Roughness **`const__project_phase_code`** (`text†`) Project Phase Code **`const__structural_irregularity`** (`text†`) Structural Irregularity **`const__basement_finish_type`** (`text†`) Basement Finish Type **`const__tank`** (`text†`) Tank **`const__wet_floodproofing`** (`text†`) Wet Floddproofing **`const__firm_compliance`** (`text†`) Firm Compliance **`const__content_vulnerability`** (`text†`) Content Vulnerability **`const__base_isolation`** (`text†`) Base Isolation **`const__setbacks_overhangs`** (`text†`) Setbacks Overhangs **`const__fatigue_maintenance`** (`text†`) Fatigue / Maintenance **`const__roof_parapet`** (`text†`) Roof Parapets **`const__roof_maintenance`** (`text†`) Roof Maintenance: Well-maintained roofs tend to hold up better under high wind conditions. **`const__cripple_walls`** (`text†`) Cripple Walls **`const__anchoring`** (`text†`) EQ Anchoring: EM roof purlin anchoring. **`const__urm_retrofit`** (`text†`) Unreinforced masonry (URM) Retrofit **`const__structural_upgrade`** (`text†`) Structural Upgrade **`const__eqsl_susceptibility`** (`text†`) Sprinkler Leakage Susceptibility **`const__design_code`** (`text†`) Design Code **`const__commercial_appurtenant_structures`** (`text†`) Commercial Appurtenant Structures **`const__residential_appurtenant_structures`** (`text†`) Residential Appurtenant Structures **`const__roof_equipment_hurricane_bracing`** (`text†`) Roof Equipment Hurricane Bracing **`const__ground_level_equipment`** (`text†`) Ground Level Equipment **`const__opening_protection`** (`text†`) Opening Protection **`const__content_grade`** (`text†`) Content Grade **`const__flashing_coping_quality`** (`text†`) Flashing and Coping Quality **`const__mfd_subcategory`** (`text†`) Manufactured (MFD) subcategory **`air__adjacent_building_height`** (`number†`) AIR Adjacent Building Height **`air__appurtenant_structures`** (`choices†`) AIR Appurtenant Structures * `0: Unknown/default` * `1: Detached garage` * `2: Pool enclosures` * `3: Shed` * `4: Masonry boundary wall` * `5: Other fence` * `6: No appurtenant structures` * `7: No pool enclosures` **`air__attached_structures`** (`choices†`) AIR Attached Structures * `0: Unknown/default` * `1: Carports/Canopies/Porches` * `2: Single Door Garages` * `3: Double Door Garages` * `4: Reinforced Single Door Garages` * `5: Reinforced Double Door Garages` * `6: Screened Porches/Glass Patio Doors` * `7: Balcony` * `8: No attached wall structures` **`air__basement_level_count`** (`number†`) AIR Basement Level Count **`air__basement_finish_type`** (`choices†`) AIR Basement Finish Type * `0: Unknown/default` * `1: Unfinished basement` * `2: Finished basement` **`air__base_flood_elevation`** (`number†`) AIR Base Flood Elevation **`air__base_flood_elevation_unit`** (`text†`) AIR Base Flood Elevation Unit: Water elevation (in feet) for a 100-year flood at the building at this location, as defined by FEMA. **`air__brick_veneer`** (`choices†`) AIR Brick Veneer * `0: Unknown/default` * `1: More than 90%` * `2: 20 - 50%` * `3: 0 - 20%` **`air__building_condition`** (`choices†`) AIR Building Condition * `0: Unknown/default` * `1: Average` * `2: Good` * `3: Poor` **`air__building_exterior_opening`** (`choices†`) AIR Building Exterior Opening * `0: Unknown/default` * `1: Less than 50% of wall open` * `2: More than 50% of wall open` **`air__building_shape`** (`choices†`) AIR Building Shape * `0: Unknown/default` * `1: Square` * `2: Rectangle` * `3: Circular` * `4: L-shaped` * `5: T-shaped` * `6: U-shaped` * `7: H-shaped` * `8: Complex` **`air__chimney`** (`choices†`) AIR Chimney * `0: Unknown/default` * `1: No` * `2: Yes, height <= 2 ft.` * `3: Yes, height <= 5 ft.` * `4: Yes, height > 5 ft.` **`air__cold_formed_tube`** (`choices†`) AIR Cold Formed Tube * `0: Unknown/default` * `1: No` * `2: Yes` **`air__column_basement_type`** (`choices†`) AIR Column Basement Type * `0: Unknown/default` * `1: Mixed` * `2: Non-Embedded` * `3: Embedded` **`air__content_vulnerability`** (`choices†`) AIR Content Vulnerability * `0: Unknown/default` * `1: Low` * `2: Moderate` * `3: High` * `4: Very High` **`air__custom_elevation_unit`** (`text†`) AIR Custom Elevation Unit: Specifies the unit of measurement for the AIR custom elevation value. **`air__custom_elevation`** (`number†`) AIR Custom Elevation: Indicates the AIR custom elevation of the structure above a reference level. **`air__equipment_bracing`** (`choices†`) AIR Equipment Bracing * `0: Unknown/default` * `1: Well-Braced` * `2: Average Bracing` * `3: Unbraced` **`air__exterior_doors`** (`choices†`) AIR Exterior Doors * `0: Unknown/default` * `1: Single width Doors` * `2: Double width Doors` * `3: Reinforced single width doors` * `4: Reinforced double width doors` * `5: Sliding doors` * `6: Reinforced sliding doors` **`air__firm_compliance`** (`choices†`) AIR FIRM Compliance * `0: Unknown/default` * `1: No` * `2: Yes` **`air__first_floor_height`** (`number†`) AIR First Floor Height **`air__first_floor_height_unit`** (`text†`) AIR First Floor Height Unit **`air__foundation_connection`** (`choices†`) AIR Foundation Connection * `0: Unknown (Default)` * `1: Hurricane Ties` * `2: Nails / Screws` * `3: Anchor Bolts` * `4: Gravity / Friction` * `5: Adhesive Epoxy` * `6: Structurally connected` **`air__foundation_type`** (`choices†`) AIR Foundation Type * `0: Unknown/default` * `1: Masonry basement` * `2: Concrete basement` * `3: Masonry wall` * `4: Crawl space cripple wall` * `5: Crawl space masonry` * `6: Post & pier` * `7: Footing` * `8: Mat / slab` * `9: Pile` * `10: No basement` * `11: Engineering foundation` * `12: Crawlspace - raised (wood)` **`air__glass_percentage`** (`choices†`) AIR Glass Percentage * `0: Unknown/default` * `1: Less than 5%` * `2: Between 5% and 20%` * `3: Between 20% and 60%` * `4: Greater than 60%` **`air__glass_type`** (`choices†`) AIR Glass Type * `0: Unknown/default` * `1: Annealed` * `2: Tempered` * `3: Heat strengthened` * `4: Laminated` * `5: Insulating glass units` **`air__ibhs_certified`** (`choices†`) AIR IBHS Certified * `0: Unknown/default` * `1: Fortified Home (IBHS) Bronze Option 1` * `2: Fortified Home (IBHS) Bronze Option 2` * `3: Fortified Home (IBHS) Silver Option 1` * `4: Fortified Home (IBHS) Silver Option 2` * `5: Fortified Home (IBHS) Gold Option 1` * `6: Fortified Home (IBHS) Gold Option 2` * `7: Fortified for Safer Living (IBHS)` **`air__internal_partition`** (`choices†`) AIR Internal Partition * `0: Unknown/default` * `1: Wood` * `2: Gypsum boards` * `3: Plastered masonry` * `4: Brick` * `5: Other` **`air__is_value_type`** (`choices†`) AIR IS Value Type * `0: Unknown/default` * `1: Less than 0.3` * `2: 0.3 - 0.45` * `3: 0.45 - 0.55` * `4: 0.55 - 0.65` * `5: 0.65 - 0.75` * `6: 0.75 - 0.85` * `7: 0.85 - 1.0` * `8: 1.0 - 1.25` * `9: Greater than 1.2` **`air__large_missile`** (`choices†`) AIR Large Missile * `0: Unknown/default` * `1: No` * `2: Yes` **`air__lattice_type`** (`choices†`) AIR Lattice Type * `0: Unknown/default` * `1: Full Web` * `2: Grid` * `3: Lattice` **`air__multi_story_hall_type`** (`choices†`) AIR Multi Story Hall Type * `0: Unknown/default` * `1: No` * `2: Yes` **`air__ornamentation`** (`choices†`) AIR Ornamentation * `0: Unknown/default` * `1: None` * `2: Average` * `3: Extensive` **`air__pounding`** (`choices†`) AIR Pounding: Distance from the building at this location to the closest structure, which, if not adequate, can cause the two structures to collide during earthquake shaking. * `0: Unknown/default` * `1: 0-0.25 m` * `2: 0.25-0.5 m` * `3: 0.5-1.0 m` * `4: 1.0-2.0 m` * `5: >2.0 m` **`air__project_completion`** (`percentage†`) AIR Project Completion **`air__project_phase_code`** (`choices†`) AIR Project Phase Code * `0: No Builder’s Risk` * `1: Phase 1` * `2: Phase 2` * `3: Phase 3` * `4: Phase 4` * `5: Average Project Loss` * `6: Worst Loss` **`air__redundancy`** (`choices†`) AIR Redundancy * `0: Unknown/default` * `1: No` * `2: Yes` **`air__retrofit`** (`choices†`) AIR Retrofit: Description of any seismic retrofit measures. A properly retrofitted structure can resist earthquakes even though the original structural form had weaknesses. * `0: Unknown/default` * `1: Bracing of cripple walls` * `2: Bracing of parapets` * `3: Bracing of soft-story` * `4: Foundation anchorage (bolting)` * `5: Glass/window strengthening` * `6: Tilt Up` * `7: General` **`air__seal_of_approval`** (`choices†`) AIR Seal Of Approval * `0: Unknown/default` * `1: Fully Engineered Structure` * `2: Partially Engineered Structure` * `3: Minimally Engineered Structure` **`air__service_equipment_protection`** (`choices†`) AIR Service Equipment Protection * `0: Unknown/default` * `1: Unprotected` * `2: Low Protection for flood` * `3: Medium Protection for flood` * `4: High Protection for flood` **`air__short_column`** (`choices†`) AIR Short Column * `0: Unknown/default` * `1: No` * `2: Yes` **`air__small_debris`** (`choices†`) AIR Small Debris * `0: Unknown/default` * `1: No` * `2: Yes` **`air__soft_story`** (`choices†`) AIR Soft Story * `0: Unknown/default` * `1: No` * `2: Yes` **`air__special_construction`** (`choices†`) AIR Special Construction * `0: Unknown/default` * `1: Base isolation` * `2: Visco-elastic dampers` * `3: Other energy dissipaters` **`air__sprinkler_type`** (`choices†`) AIR Sprinkler Type * `Unknown` * `Wet` * `Dry` **`air__structural_irregularity`** (`choices†`) AIR Structural Irregularity * `0: Unknown/default` * `1: Vertical Offset` * `2: Non-uniform Floor Area` * `3: Discontinuous Shear Wall` * `4: Heavy floor` **`air__tall_one_story`** (`choices†`) AIR Tall One Story * `0: Unknown/default` * `1: <= 20 ft` * `2: > 20 ft` * `3: > 40 ft` **`air__tank`** (`choices†`) AIR Tank: Indicate whether there are rooftop tanks on adjacent higher buildings, for EQ. * `0: Unknown/default` * `1: No` * `2: Yes` **`air__terrain_roughness`** (`choices†`) AIR Terrain Roughness * `0: Unknown/default` * `1: Large city centers` * `2: Urban and suburban areas, wooded areas` * `3: Open terrain with scattered obstruct` * `4: Flat, unobstructed areas` **`air__torsion`** (`choices†`) AIR Torsion * `0: Unknown/default` * `1: Symmetric` * `2: Asymmetric` * `3: Corner building` **`air__transition_in_source_type`** (`choices†`) AIR Transition In Src Type * `0: Unknown/default` * `1: Smooth` * `2: Non-Smooth` **`air__tree_exposure`** (`choices†`) AIR Tree Exposure * `0: Unknown/default` * `1: No` * `2: Yes` **`air__wall_siding`** (`choices†`) AIR Wall Siding: Available integrations: LB wall\_siding. * `0: Unknown/default` * `1: Veneer brick/masonry` * `2: Wood shingles` * `3: Clapboards` * `4: Aluminum/vinyl siding` * `5: Stone panels` * `6: Exterior insulation finishing system` * `7: Stucco` **`air__wall_type`** (`choices†`) AIR Wall Type: Available integrations: LB wall\_type. * `0: Unknown/default` * `1: Brick/unreinforced masonry` * `2: Reinforced masonry` * `3: Plywood` * `4: Wood planks` * `5: Particle board/OSB` * `6: Metal panels` * `7: Pre-cast concrete elements` * `8: Cast-in-place concrete` * `9: Gypsum board` **`air__water_heater`** (`choices†`) AIR Water Heater * `0: Unknown/default` * `1: Braced` * `2: Unbraced` **`air__wet_floodproofing`** (`choices†`) AIR Wet Floodproofing * `0: Unknown/default` * `1: Unprotected` * `2: Low Protection, wet floodproofed by one foot` * `3: Medium Protection, wet floodproofed by three feet` * `4: High Protection, wet floodproofed by over three feet` **`air__welding`** (`choices†`) AIR Welding Detail * `0: Unknown/default` * `1: On-Site` * `2: In-House` **`air__window_protection`** (`choices†`) AIR Window Protection * `0: Unknown/default` * `1: No protection` * `2: Non-engineered shutters` * `3: Engineered shutters` **`amrisc__basement`** (`choices†`) AMRISC Basement: Input from AMRISC only. Available integrations: HH has\_basement, Q basement. * `100-Unknown` * `101-No basement` * `102-Basement WITH Flood Protection` * `103-Basement WITHOUT Flood Protection` * `104-Basement with unknown flood protection` **`amrisc__frame_to_foundation_connection`** (`choices†`) AMRISC Building Frame to Foundation Connection: Input from AMRISC only. * `100-Unknown` * `101-Bolted` * `102-Unbolted` **`amrisc__building_foundation`** (`choices†`) AMRISC Building Foundation: Input from AMRISC only. * `1-Engineered` * `2-Non-Engineered` **`amrisc__building_maintenance`** (`choices†`) AMRISC Building Maintenance: Input from AMRISC only. * `1-Maint Enforced` * `2-No Maintenance` **`amrisc__construction_quality`** (`choices†`) AMRISC Construction Quality: Input from AMRISC only. * `100-Unknown` * `101-Certified Design & Construction` * `102-Obvious Signs of Deterioration or Distress` * `103-Certificate of Occupancy` **`amrisc__property_type`** (`choices†`) AMRISC Property Type: Input from AMRISC only. * `Building` * `Eqpt` * `Pool/Spa` * `Outdoor Prop` * `Other Structures` **`amrisc__wind_pool_eligible`** (`boolean†`) AMRISC Wind Pool Eligible: Input from AMRISC only. **`amrisc__wall_siding`** (`choices†`) AMRISC Wall Cladding: Input from AMRISC only. Available integrations: LB wall\_siding. * `100-Unknown` * `101-Brick Veneer` * `102-Metal Sheathing` * `103-Wood` * `104-EIFS` * `105-Unreinforced Masonry` * `106-Reinforced Masonry` * `107-Precast Concrete` * `108-Cast-in-Place Concrete` * `109-Impact Rated Glass` * `110-Non-Impact Glass WITH gravel roof or gravel on adjacent Bldg<1000 ft.` * `111-Non-Impact Glass WITHOUT gravel roof or gravel on adjacent Bldg<1000 ft.` * `112-Aluminum/Vinyl Siding` * `113-Cementitous Hardboard Siding` * `114-Stucco` **`amrisc__acic_location`** (`text†`) AMRISC ACIC Location: Input from AMRISC only. **`amrisc__acic_bcegs`** (`text†`) AMRISC ACIC BCEGS: Input from AMRISC only. **`amrisc__acic_terrain`** (`text†`) AMRISC ACIC Terrain: Input from AMRISC only. **`amrisc__acic_group_two_construction`** (`text†`) AMRISC ACIC Group 2 Construction: Input from AMRISC only. **`amrisc__acic_occupancy`** (`text†`) AMRISC ACIC Occupancy: Input from AMRISC only. **`amrisc__acic_occupancy_mercantile_class`** (`text†`) AMRISC ACIC Occupancy Mercantile Class: Input from AMRISC only. **`amrisc__acic_ec_zone`** (`text†`) AMRISC ACIC EC Zone: Input from AMRISC only. **`amrisc__acic_opening_protection`** (`text†`) AMRISC ACIC Opening Protection: Indicates the type of opening protection for doors and windows. Input from AMRISC only. **`amrisc__acic_secondary_water_resistance`** (`boolean†`) AMRISC ACIC Secondary Water Resistance: Input from AMRISC only. **`amrisc__acic_wind_hail_deductible_requested`** (`number†`) AMRISC ACIC Wind/hail Deductible Requested: Input from AMRISC only. **`amrisc__acic_fbc_wind_speed`** (`text†`) AMRISC ACIC FBC Wind Speed: Specifies the Florida Building Code (FBC) wind speed applicable to the property. Input from AMRISC only. **`amrisc__acic_fbc_wind_design`** (`text†`) AMRISC ACIC FBC Wind Design: Specifies the Florida Building Code (FBC) wind design standard applied. Input from AMRISC only. **`amrisc__acic_design_exposure`** (`text†`) AMRISC ACIC Design Exposure: Input from AMRISC only. **`amrisc__acic_aop_deductible_requested`** (`number†`) AMRISC ACIC AOP Deductible Requested: Specifies the requested all-other-perils (AOP) deductible. Input from AMRISC only. **`amrisc__acic_building_valuation`** (`choices†`) AMRISC ACIC Building Valuation: Input from AMRISC only. * `RCV` * `ACV` **`amrisc__acic_sprinklers_iso_approved`** (`boolean†`) AMRISC ACIC Sprinklers ISO Approved?: Input from AMRISC only. **`amrisc__em_cladding_type`** (`choices†`) AMRISC EM Cladding Type: Input from AMRISC only. * `100-Unknown` * `101-Glass` * `102-Precast` * `103-Unreinforced Masonry` **`amrisc__em_cripple_walls`** (`choices†`) AMRISC EM Cripple Walls: Input from AMRISC only. * `100-Unknown` * `101-No Cripple walls` * `102-Braced Cripple walls` * `103-Unbraced Cripple walls` **`amrisc__em_equipment_bracing`** (`choices†`) AMRISC EM Equipment Bracing: Input from AMRISC only. * `100-Unknown` * `101-Generally Well Braced` * `102-Somewhat Braced` * `103-Generally Unbraced` **`amrisc__em_frame_bolted`** (`choices†`) AMRISC EM Frame Bolted: Input from AMRISC only. * `100-Unknown` * `101-Bolted` * `102-Unbolted` **`amrisc__em_pounding`** (`choices†`) AMRISC EM Pounding: Input from AMRISC only. * `100-Unknown` * `101-No` * `102-Yes` **`amrisc__em_purlin_anchoring`** (`choices†`) AMRISC EM Purlin Anchoring: Input from AMRISC only. * `100-Unknown` * `101-Purlins Properly Anchored (tilt-up)` * `102-Purlins Not Properly Anchored (tilt-up)` **`amrisc__em_soft_story`** (`choices†`) AMRISC EM Soft Story: Input from AMRISC only. * `100-Unknown` * `101-No` * `102-Yes` **`amrisc__em_unreinforced_masonry_retrofit`** (`choices†`) AMRISC EM Unreinforced Masonry Retrofit: Input from AMRISC only. * `100-Unknown` * `101-No` * `102-Yes` **`amrisc__em_year_upgrade`** (`year†`) AMRISC EM Year Upgrade: Input from AMRISC only. **`rms__areaunit`** (`choices†`) RMS Area Unit * `2: sqft` * `4: sqm` **`rms__eq_sl_coverage`** (`choices†`) RMS Earthquake Sprinkler Leakage Coverage Flag: This is the EQSL coverage flag. If the flag is set to No (default) no EQSL coverage is provided to the location and no EQSL loss will be calculated at the particular location. * `0: No` * `1: Yes` **`rms__eq_shape_configuration`** (`choices†`) RMS EQ Shape Configuration: Configurations can be regular (square, rectangular, circular) or irregular (L-shape, T-shape, triangular). Irregular buildings tend to twist in addition to shaking laterally. Damage often occurs at the corners between different wings of a building. * `0: Unknown` * `1: Regular` * `2: Irregular` **`rms__eq_soft_story`** (`choices†`) RMS EQ Soft Story * `0: Unknown` * `1: No` * `2: Yes` **`rms__eq_setbacks_overhangs`** (`choices†`) RMS EQ Setbacks Overhangs * `0: Unknown` * `1: No` * `2: Yes` **`rms__eq_cladding_type`** (`choices†`) RMS EQ Cladding Type * `0: Unknown` * `1: Glass` * `2: Precast Concrete` * `3: Unreinforced Masonry` **`rms__eq_bldg_exterior`** (`choices†`) RMS EQ Building Exterior: For shear wall buildings, the 50% rule refers to the area of a building's exterior wall surface that consists of window and door openings. Buildings with more than 50% of the wall open are evaluated as having less seismic resistance. * `0: Unknown` * `1: Less than 50% Wall Open` * `2: More than 50% Wall Open` **`rms__eq_short_column`** (`choices†`) RMS EQ Short Column * `0: Unknown` * `1: No` * `2: Yes` **`rms__eq_urm_chimney`** (`choices†`) RMS EQ URM Chimney * `0: Unknown` * `1: No` * `2: Yes` **`rms__eq_urm_partition`** (`choices†`) RMS EQ URM Partition: Secondary modifier that indicates whether unreinforced masonry (brick or hollow clay tile) walls/partitions are present. Unreinforced masonry walls and partitions can have a significant impact on a building’s damageability. Their collapse can contribute significantly to the overall structural damage. In seismic zone 4 in California, they are not allowed in post-1934 construction. * `0: Unknown` * `1: No` * `2: Yes` **`rms__eq_ornamentation`** (`choices†`) RMS EQ Ornamentation * `0: Unknown` * `1: Little or none` * `2: Average` * `3: Extensive` **`rms__eq_equipment`** (`choices†`) RMS EQ Equipment Bracing * `0: Unknown` * `1: Generally well-braced` * `2: Somewhat braced` * `3: Generally unbraced` **`rms__eq_construction_quality`** (`choices†`) RMS EQ Construction Quality * `0: Unknown` * `1: Good` * `2: Average` * `3: Poor` **`rms__eq_fatigue_maintenance`** (`choices†`) RMS EQ Fatigue / Maintenance * `0: Unknown` * `1: No signs` * `2: Few signs` * `3: Obvious signs` **`rms__eq_pounding`** (`choices†`) RMS EQ Pounding * `0: Unknown` * `1: No - bldg is > 3 in. per story away from adjacent` * `2: Yes - bldg is < 3 in. per story away from adjacent` **`rms__eq_engineered_foundation`** (`choices†`) RMS EQ Engineered Foundation * `0: Unknown` * `1: Yes` * `2: No` **`rms__eq_cripple_walls`** (`choices†`) RMS EQ Cripple Walls * `0: Unknown` * `1: No Cripple Walls` * `2: Braced Cripple Walls` * `3: Unbraced Cripple Walls` **`rms__eq_frame_bolted`** (`choices†`) RMS EQ Frame Bolted * `0: Unknown` * `1: Bolted` * `2: Unbolted` **`rms__eq_anchoring`** (`choices†`) RMS EQ Anchoring: In older tilt-up structures, connections between the tilt-up walls and the roof framing system were designed inadequately for earthquake resistance. The failure of these connections can be prevented by the addition of special anchors. * `0: Unknown` * `1: Properly Anchored` * `2: Not Properly Anchored` **`rms__eq_urm_retrofit`** (`choices†`) RMS EQ URM Retrofit: Several jurisdictions in California U.S.G.S. seismic zone 4 have instituted mandatory seismic retrofit programs for unreinforced masonry buildings. * `0: Unknown` * `1: No` * `2: Yes` **`rms__eq_structural_upgrade`** (`choices†`) RMS EQ Structural Upgrade * `0: Unknown` * `1: No` * `2: Yes` **`rms__eq_sprinkler_type`** (`choices†`) RMS EQ Sprinkler Type * `0: Unknown` * `1: Wet` * `2: Dry` **`rms__eq_sl_susceptibility`** (`choices†`) RMS EQ SL Susceptibility * `0: Unknown` * `1: No` * `2: Yes` **`rms__eq_base_isolation`** (`choices†`) RMS EQ Base Isolation * `0: Unknown` * `1: No` * `2: Yes` **`rms__eq_content_grade`** (`choices†`) RMS EQ Content Grade: This field is a rating of the fragility of the contents and is relevant for earthquake due to the nature of the hazard (e.g., potential for building collapse). It is based on the ISO Contents Rate Grade. * `0: Unknown damageable` * `1: Highly damageable (e.g., glassware, fine art)` * `2: Moderately damageable (e.g., computers)` * `3: Damageable (e.g, general office furniture)` * `4: Slightly damageable (e.g., rugs, tires)` **`rms__eq__equipment_support_maintenance`** (`choices†`) * `0: Unknown` * `1: No Signs of Fatigue / Good Maintenance` * `2: Few Signs of Fatigue / Avg. Maintenance` * `3: Obvious Fatigue / Poor Maintenance` **`rms__eq_redundancy`** (`choices†`) RMS EQ Redundancy: Redundancy refers to having multiple lateral load resisting elements (frames or shear walls) in a building. Redundancy is a desirable feature because of one structural system fails during an earthquake, another system is present to resist the lateral earthquake forces, thus avoiding catastrophic collapse. * `0: Unknown` * `1: Some redundancy` * `2: Little or no redundancy` **`rms__eq_tank`** (`choices†`) RMS EQ Tank: Rooftop tanks on adjoining, higher buildings are a falling hazard during an earthquake. * `0: Unknown` * `1: No` * `2: Yes` **`rms__eq_torsion`** (`choices†`) RMS EQ Torsion: The geometry of the lateral load resisting system. Asymmetry can aggravate damage by inducing twisting, torsion, and differential motion in the building. Some of the most common occurrences of asymmetry are in frame buildings with a stiff elevator core that is placed asymmetrically. * `0: Unknown` * `1: No` * `2: Yes` **`rms__flood_protection`** (`choices†`) RMS Flood Protection: Damage due to flood can be reduced if flood protection or proofing measures are implemented. * `0: Unknown` * `1: FloodProt1` * `2: FloodProt2` * `3: FloodProt3` * `4: FloodProt4` * `5: FloodProt5` * `6: FloodProt6` * `7: FloodProt7` **`rms__flood_missile`** (`choices†`) RMS Flood Missile: Buildings may receive damage from exposure to flood- carried missiles such as uprooted trees, branches, and sand. * `0: Unknown` * `1: No potential flood-driven missiles` * `2: Flood-carried missiles, unknown size (the location is close to a wooded area or a beach where potential flood-driven missiles are present)` * `3: Flood-carried missiles, small size (for Europe flood only)` * `4: Flood-carried missiles, large size (for Europe flood only)` * `5: Flood-carried pollution (oil, etc.) (for Europe flood only)` **`rms__ws_design_code`** (`choices†`) RMS WS Design Code: The design/building code that is adopted is a good indication of the quality of design and whether the structure has been designed to withstand wind loads. * `0: Wind + Surge` * `1: Wind Only` * `2: Surge Only` **`rms__ws_basement`** (`choices†`) RMS WS Basement * `0: Unknown` * `1: No Basement` * `2: Basement w/ Flood Protection` * `3: Basement w/out Flood Protection` * `4: Basement w/unknown Flood Protection` **`rms__ws_frame_foundation_connection`** (`choices†`) RMS WS Frame-Foundation Connection * `0: Unknown` * `1: Bolted` * `2: Unbolted` **`rms__ws_construction_quality`** (`choices†`) RMS WS Construction Quality * `0: Unknown` * `1: Obvious signs of deterioration or distress` * `2: Fortified for Existing Homes, Bronze, Option 1` * `3: Fortified for Existing Homes, Bronze, Option 2` * `4: Fortified for Existing Homes, Silver, Option 1` * `5: Fortified for Existing Homes, Silver, Option 2` * `6: Fortified for Existing Homes, Gold, Option 1` * `7: Fortified for Existing Homes, Gold, Option 2` * `8: Fortified for Safer Living - [Post 2001]` * `9: Certified design & construction` **`rms__ws_roof_geometry`** (`choices†`) RMS WS Roof Geometry * `0: Unknown` * `1: Flat roof with parapets` * `2: Flat roof without parapets` * `3: Hip roof with slope less than or equal to 6:12 (26.5 degrees)` * `4: Hip roof with slope greater than 6:12 (26.5 degrees)` * `5: Gable roof with slope less than or equal to 6:12 (26.5 degrees)` * `6: Gable roof with slope greater than 6:12 (26.5 degrees)` * `7: Braced gable roof with slope less than or equal to 6:12 (26.5 degrees)` * `8: Braced gable roof with slope greater than 6:12 (26.5 degrees)` **`rms__ws_roof_covering`** (`choices†`) RMS WS Roof Covering * `0: Unknown` * `1: Metal sheathing with exposed fasteners` * `2: Metal sheathing with concealed fasteners` * `3: Built-up roof or single-ply membrane roof with the presence of gutters` * `4: Built-up roof or single-ply membrane roof without the presence of gutters` * `5: Concrete/clay tiles` * `6: Wood shakes` * `7: Normal shingle (55 mph)` * `8: Normal shingle (55 mph) with Secondary Water Resistance (SWR)` * `9: Shingle rated for high wind speeds (110 mph)` * `10: Shingle rated for high wind speeds (110 mph) with Secondary Water Resistance (SWR)` * `16: Concrete Roof` **`rms__ws_roof_anchor`** (`choices†`) RMS WS Roof Anchor * `0: Unknown` * `1: Toe nailing / No anchorage` * `2: Clips` * `3: Single wraps` * `4: Double wraps` * `5: Structural` **`rms__ws_roof_age`** (`choices†`) RMS WS Roof Age / Condition * `0: Unknown` * `1: 0-5 years` * `2: 6-10 years` * `3: 11 years or more` * `4: Obvious signs of deterioration and distress` **`rms__ws_roof_parapet`** (`choices†`) RMS WS Roof Parapets/Chimney * `0: Unknown` * `1: Presence of parapets` * `2: No parapets` **`rms__ws_cladding_type`** (`choices†`) RMS WS Cladding Type * `0: Unknown` * `1: Brick Veneer` * `2: Metal Sheathing` * `3: Wood` * `4: EIFS` * `5: Impact Rated Glazing` * `6: Glazing not designed for impact with gravel rooftop within 1000 ft` * `7: Glazing not designed for impact without gravel rooftop within 1000 ft` * `8: Vinyl Siding` * `9: Stucco` * `10: None` **`rms__ws_sheathing_attachment`** (`choices†`) RMS WS Roof Sheathing Attachment * `0: Unknown` * `1: Batten decking / Skipped sheathing` * `2: 6d Nails - Any nail schedule` * `3: 8d Nails - Minimum nail schedule` * `4: 8d Nails - High wind nail schedule` * `5: 10d Nails - High wind nail schedule` * `6: Dimensional lumber / Tongue & groove decking with a minimum of 2 nails per board` **`rms__ws_commercial_appurtenant_structures`** (`choices†`) RMS WS Commercial Appurtenant Structures * `0: Unknown` * `1: Large Signs` * `2: Extensive Ornamentation` * `3: None` * `4: Roof-mounted ballasted PV array` * `5: Roof-mounted mechanically attached PV array` * `6: Large Signs and roof-mounted ballasted PV array` * `7: Large Signs and roof-mounted mechanically attached PV array` * `8: Extensive Ornamentation and roof-mounted ballasted PV array` * `9: Extensive Ornamentation and roof-mounted mechanically attached PV array` **`rms__ws_residential_appurtenant_structures`** (`choices†`) RMS WS Residential Appurtenant Structures * `0: Unknown` * `1: None` * `2: Fences / Carport` * `3: Attached screen enclosure / Lanai` * `4: Detached screen enclosure / Lanai` * `5: Roof-mounted ballasted PV array` * `6: Roof-mounted mechanically attached PV array` * `7: Fences / Carport and roof-mounted ballasted PV array` * `8: Fences / Carport and roof-mounted mechanically attached PV array` * `9: Attached screen enclosure and roof-mounted ballasted PV array` * `10: Attached screen enclosure and roof-mounted mechanically attached PV array` * `11: Detached screen enclosure and roof-mounted ballasted PV array` * `12: Detached screen enclosure and roof-mounted mechanically attached PV array` **`rms__ws_roof_equipment_hurricane_bracing`** (`choices†`) RMS WS Roof Equipment Hurricane Bracing * `0: Unknown` * `1: Properly installed with adequate anchorage` * `2: Obvious signs of deficiencies in the installation` **`rms__ws_roof_maintenance`** (`choices†`) RMS WS Roof Maintenance: Well-maintained roofs tend to hold up better under high wind conditions. * `0: Unknown` * `1: Building Maintenance Enforced` * `2: No Building Maintenance` **`rms__ws_ground_level_equipment`** (`choices†`) RMS WS Ground-Level Equipment * `0: Unknown` * `1: None` * `2: Generally Protected (the systems are located 5 ft above ground and/or have waterproof coverings)` * `3: Generally Unprotected (the systems are not elevated or do not have coverings)` **`rms__ws_mechanical_equipment_side`** (`choices†`) RMS WS Mechanical/Electrical Equipment (Side of Building) * `0: Unknown` * `1: None` * `2: Generally Braced (Metal Braces or Straps)` * `3: Generally Not Braced` **`rms__ws_opening_protection`** (`choices†`) RMS WS Opening Protection * `0: Unknown` * `1: All openings designed for large missiles` * `2: All openings designed for medium missiles` * `3: All openings designed for small missiles` * `4: All glazed openings designed for large missiles` * `5: All glazed openings designed for medium missiles` * `6: All glazed openings designed for small missiles` * `7: All glazed openings covered with plywood/oriented strand board (OSB)` * `8: At least one glazed exterior opening does not have windborne debris` * `9: No glazed exterior openings have wind-borne debris protection` **`rms__ws_content_grade`** (`choices†`) RMS WS Content Grade * `1: Highly damageable (e.g., unprotected contents made of materials that are highly susceptible to wind and/or water damage (such as paper-based products), or extended power outages (such as contents that require refrigeration)` * `2: Moderately damageable (e.g., computers)` * `3: Damageable (e.g., general office furniture)` * `4: Slightly damageable (e.g., highly protected contents, such as jewelry and fine art, or contents composed of water tolerant material such as stone or rubber` **`rms__ws_flashing_coping_quality`** (`choices†`) RMS WS Flashing and Coping Quality * `0: Unknown` * `1: Compliant with ES1` * `2: Not compliant with ES1` **`rms__ws_mfd_subcategory`** (`choices†`) RMS WS MFD Subcategory * `0: Unknown` * `1: Townhouse/Row House` * `2: Apartment` * `3: Condominium` * `4: Other` **`rms__ws_missile`** (`choices†`) RMS WS Missile * `0: Unknown` * `1: None` * `2: Small airborne missiles, e.g., gravel, foliage (structure is within 100 ft. of missiles)` * `3: Protective foliage` * `4: Gravel ballast present` * `5: Potential severe missile exposure (trees within striking distance of structure)` * `6: Isolated large trees` **`rms__ws_floor_type`** (`choices†`) RMS WS Floor Type: For flood analyses, RiskLink uses these modifiers for Germany flood locations only. For flood peril in other countries, these fields are used for informational purposes only. * `0: Unknown` * `1: Wood` * `2: Masonry/RC floor` **`rms__ws_resistance_doors`** (`choices†`) RMS WS Resistance Doors: Doors with poor wind resistance can expose interior building components and contents to more wind and water hazards than openings with good wind resistance. * `0: Unknown` * `1: Designed for wind pressure and impact resistance` * `2: Designed for wind pressure only` * `3: Not designed for wind protection (e.g. flexible doors, thin doors, doors poorly attached to frame)` * `4: No Door (TO Only)` **`rms__ws_roof_framing_type`** (`choices†`) RMS WS Roof Framing Type: The type of framing material for the roof affects the ability of the roof to stay attached to a building under high wind conditions. * `0: Unknown` * `1: Poured/Cast-in-place concrete` * `2: Precast concrete` * `3: Heavy steel frames` * `4: Light gauge steel purlin` * `5: Wood purlin` **`rms__ws_content_vulnerability`** (`choices†`) RMS WS Content Vulnerability: These levels are functions of the quantity of contents that are susceptible to wind-damage. * `0: Unknown` * `1: Low (the structure contains few contents damageable by wind, e.g., sturdy, heavy, or bolted components)` * `2: Average (the structure contains a typical amount of contents damageable by wind, e.g., residential units)` * `3: High (the structure contains an inordinate amount of contents susceptible to be spoiled by high winds, e.g., retail china/crystal shops)` * `4: Very high (the structure contents will almost always be damaged by wind)` **`rms__ws_content_vulnerability_flood`** (`choices†`) RMS WS Content Vulnerability Due to Water: These levels are functions of the quantity of contents that are susceptible to water damage. * `0: Unknown` * `1: Low (the structure contains few contents damageable by water)` * `2: Average (the structure contains a typical amount of contents damageable by water, e.g., residential units)` * `3: High (the structure contains an inordinate amount of contents susceptible to be spoiled by water, e.g., perishable foodstuffs in restaurants, grocery stores)` * `4: Very high (the structure contents will almost always be damaged by water)` **`oed__roof_covering`** (`choices†`) Available integrations: HH roof\_covering, CA roof\_covering, LB roof\_covering. * `0: Unknown / default` * `1: Asphalt shingles` * `2: Wooden shingles` * `3: Clay/concrete tiles` * `4: Light metal panels` * `5: Slate` * `6: Built-up roof with gravel` * `7: Single ply membrane` * `8: Standing seam metal roofs` * `9: Built-up roof without gravel` * `10: Single ply membrane ballasted` * `11: Hurricane Wind-Rated Roof Coverings` * `12: Composition (Fiberglass, Asphalt, etc)` * `13: Asbestos shakes` * `14: Copper` * `15: Concrete (not tile)` * `16: Reinforced concrete` * `18: Plastic` * `19: Fiberglass` * `20: Steel` * `21: Plywood` * `22: Rubber` * `23: Tin` * `24: Aluminium` * `25: Foam` * `26: Thatch` * `27: Felt` * `28: Zinc` **`oed__roof_geometry`** (`choices†`) * `0: Unknown / default` * `1: Flat` * `2: Gable end without bracing` * `3: Hip` * `4: Complex` * `5: Stepped` * `6: Shed` * `7: Mansard` * `8: Gable end with bracing` * `9: Pyramid` * `10: Gambrel` * `11: Butterfly` * `12: Saltbox` **`oed__roof_pitch`** (`choices†`) Available integrations: LB roof\_pitch. * `0: Unknown / default` * `1: Low (Less than 10 degrees)` * `2: Medium (10-30 degrees)` * `3: High (More than 30 degrees)` **`oed__roof_frame`** (`choices†`) * `0: Unknown` * `1: Reinforced Concrete` * `2: Steel` * `3: Light Metal` * `4: Wood` **`oed__roof_deck`** (`choices†`) * `0: Unknown / default` * `1: Plywood` * `2: Wood planks` * `3: Particle board / OSB` * `4: Metal deck with insulation board` * `5: Metal deck with concrete` * `6: Pre-cast concrete slabs` * `7: Reinforced concrete slabs` * `8: Light metal` **`oed__roof_deck_attachment`** (`choices†`) * `0: Unknown / default` * `1: Screws / bolts` * `2: Nails` * `3: Adhesive / epoxy` * `4: Structurally connected` * `5: 6d nails @ 6 spacing, 12 on center` * `6: 8d nails @ 6 spacing, 12 on center` * `7: 8d nails @ 6 spacing, 6 on center` **`oed__roof_anchorage`** (`choices†`) * `0: Unknown / default` * `1: Hurricane Ties` * `2: Nails / Screws` * `3: Anchor bolts` * `4: Gravity / friction` * `5: Adhesive epoxy` * `6: Structurally Connected` * `7: Clips` * `8: Double wraps` * `9: Single wraps` **`oed__wall_siding`** (`choices†`) Available integrations: LB wall\_siding. * `0: Unknown / default` * `1: Veneer brick / masonry` * `2: Wood shingles / shakes` * `3: Clapboards` * `4: Aluminium / vinyl siding` * `5: Stone panels (real stone)` * `6: Exterior insulation finishing system (EIFS)` * `7: Stucco` * `8: Asbestos` * `9: Log` * `10: Stone Veneer` * `11: Steel` * `12: Light metal` * `13: Tile` * `14: Concrete` * `15: Fiber cement (Board)` * `16: Wood siding` * `17: Gypsum Board` **`oed__foundation_type`** (`choices†`) * `0: Unknown / default` * `1: Masonry basement` * `2: Concrete basement` * `3: Masonry wall` * `4: Crawl space cripple wall` * `5: Crawl space masonry` * `6: Post & pier` * `7: Footing` * `8: Mat / slab` * `9: Pile` * `10: No basement` * `11: Engineering foundation` * `12: Crawlspace - raised (wood)` * `13: Monopile (offshore)` * `14: Jacket on Caisson (SBJ) (Offshore)` * `15: Jacket (offshore)` * `16: Jacket on Pin Piles (JPP)` * `17: Gravity-based (offshore)` * `18: Floating: spar (offshore)` * `19: Floating: Semisubmersible (offshore)` * `20: Floating: Tension-LegPlatform (offshore)` **`oed__frame_to_foundation_connection`** (`choices†`) * `0: Unknown / default` * `1: Hurricane ties` * `2: Nails / Screws` * `3: Anchor Bolts` * `4: Gravity / Friction` * `5: Adhesive / Epoxy` * `6: Structurally Connected` **`oed__construction_quality`** (`choices†`) * `0: Unknown / default` * `1: Fortified Home (IBHS) Bronze Option 1` * `2: Fortified Home (IBHS) Bronze Option 2` * `3: Fortified Home (IBHS) Silver Option 1` * `4: Fortified Home (IBHS) Silver Option 2` * `5: Fortified Home (IBHS) Gold Option 1` * `6: Fortified Home (IBHS) Gold Option 2` * `7: Fortified for Safer Living (IBHS)` * `8: High` * `9: Medium` * `10: Low` **`oed__building_condition`** (`choices†`) * `0: Unknown / default` * `1: Average` * `2: Good` * `3: Poor` ## **Unknown** **Additional attributes that provide information about the property.** **`const__under_renovation`** (`boolean†`) Property Under Renovation **`const__deferred_maintanance`** (`boolean†`) Any Deferred Maintanance? **`const__graffiti`** (`boolean†`) Graffiti Present? ## **Year Built** **Attributes that provide information about when components of the building were constructed.** **`const__bldg_year_built`** (`year†`) Building Year Built: Available integrations: HH bldg\_year\_built, LB bldg\_year\_built. **`const__bldg_age`** (`number†`) Building Age ## **Year Updated** **Attributes that provide information about when components of the building were last updated.** **`const__bldg_year_updated`** (`year†`) Building Year Updated: Available integrations: LB bldg\_year\_updated. **`const__roof_age`** (`number†`) Roof Age (years) **`const__roof_year_updated`** (`year†`) Roof Year Updated **`const__wiring_year_updated`** (`year†`) Wiring Year Updated **`const__plumbing_year_updated`** (`year†`) Plumbing Year Updated **`const__hvac_year_updated`** (`year†`) HVAC Year Updated # Computed Policy Terms Attributes Source: https://docs.pingintel.com/json-formats/computed-policy-terms ## Item Attributes Each attribute specifies a data type. The following types are used: * `text` arbitrary string value * `number` numeric value * `percentage` numeric value expressed as a percent * `currency` numeric monetary value * `boolean` true/false value * `date` calendar date (YYYY-MM-DD) * `year` four-digit value representing a year * `choices` value selected from a predefined list of options * `object` JSON-like key/value structure * `†` If an attribute's data type has a dagger (†) next to it, the attribute will actually contain a mapping containing one or more of the following attributes (if null, they are simply not included): ``` { "value": Cleaned-up data value. "confidence": 0.0 (lowest confidence) to 1.0 (highest confidence), indicating a reliability score for the element. "original": Cell value as originally read, before any scrubbing operations. "source": Provenance of the data. "units": Currency of value, if known. "comment": Human-readable information about the derivation of the value. } ``` ## **Computed Policy Terms** **Metadata that accompanies the computed policy terms distinct from the detailed Layer, Peril, and Zone term structures within policy terms.** **`outputter_name`** (`text†`) Name of the outputter settings used. **`inception_date`** (`date†`) The policy start date. **`expiration_date`** (`date†`) Expiration Date: The policy end date. See [Peril Terms](/json-formats/peril-terms), [Layer Terms](/json-formats/layer-terms), and [Zone Terms](/json-formats/zone-terms) for information regarding specific policy term attributes. # Layer Terms Attributes Source: https://docs.pingintel.com/json-formats/layer-terms ## Item Attributes Each attribute specifies a data type. The following types are used: * `text` arbitrary string value * `number` numeric value * `percentage` numeric value expressed as a percent * `currency` numeric monetary value * `boolean` true/false value * `date` calendar date (YYYY-MM-DD) * `year` four-digit value representing a year * `choices` value selected from a predefined list of options * `object` JSON-like key/value structure * `†` If an attribute's data type has a dagger (†) next to it, the attribute will actually contain a mapping containing one or more of the following attributes (if null, they are simply not included): ``` { "value": Cleaned-up data value. "confidence": 0.0 (lowest confidence) to 1.0 (highest confidence), indicating a reliability score for the element. "original": Cell value as originally read, before any scrubbing operations. "source": Provenance of the data. "units": Currency of value, if known. "comment": Human-readable information about the derivation of the value. } ``` ## **Layer Terms** **Defines the financial structure of the insurance program across layers, including limits, participation, attachments, and premiums.** **`name`** (`text†`) Identifier or label for the layer. **`participation`** (`percentage†`) Portion of the layer the insured participates in (e.g., 1 = 100%). **`limit`** (`currency†`) Limit of liability for the layer. **`attachment`** (`currency†`) Attachment point at which the layer begins to respond. **`premium`** (`currency†`) Premium: Premium associated with the layer (may be blank if not provided). # Perils Terms Attributes Source: https://docs.pingintel.com/json-formats/peril-terms ## Item Attributes Each attribute specifies a data type. The following types are used: * `text` arbitrary string value * `number` numeric value * `percentage` numeric value expressed as a percent * `currency` numeric monetary value * `boolean` true/false value * `date` calendar date (YYYY-MM-DD) * `year` four-digit value representing a year * `choices` value selected from a predefined list of options * `object` JSON-like key/value structure * `†` If an attribute's data type has a dagger (†) next to it, the attribute will actually contain a mapping containing one or more of the following attributes (if null, they are simply not included): ``` { "value": Cleaned-up data value. "confidence": 0.0 (lowest confidence) to 1.0 (highest confidence), indicating a reliability score for the element. "original": Cell value as originally read, before any scrubbing operations. "source": Provenance of the data. "units": Currency of value, if known. "comment": Human-readable information about the derivation of the value. } ``` ## **Peril Terms** **Defines all policy terms that apply at the peril level.** **`subperil_types_`** (`list_text†`) List of subperils included within this peril. **`group`** (`text†`) Identifies the grouping of sub-perils. **`sublimit`** (`currency†`) Sublimit applicable to the peril. **`min_deductible`** (`currency†`) Minimum deductible for the peril. **`max_deductible`** (`currency†`) Maximum deductible for the peril. **`blanket_deductible`** (`currency†`) Blanket deductible applied across locations for the peril. **`location_deductible_type`** (`text†`) Specifies how the location-level deductible is applied. **`location_deductible`** (`currency†`) Deductible applied at the location level. **`bi_days_deductible`** (`currency†`) Business interruption deductible, expressed in days. # Top-Level Attributes Source: https://docs.pingintel.com/json-formats/top-level This document lists all top-level attributes that are (or can be) generated into a JSON output file for SOV documents. ## Top-level Attributes **`id`** Globally-unique identifier. Notes: If the same file is sent in twice, it will get two different IDs. Updates to a file will retain the same ID. **`source_filename`** Name of the file that this data came from. **`num_buildings`** Number of items found. **`extra_data`** Document-level additional key/value data fields. (client specific, optional) **`uw_rules`** Evaluated underwriting rules, if any. See [Underwriting Rules Format](/json-formats/uw-rules) (client specific, optional) **`policy_terms`** The list of supplied policy terms. See the [Perils Terms Format](/json-formats/peril-terms), [Layer Terms Format](/json-formats/layer-terms), and [Zone Terms Format](/json-formats/zone-terms) pages for details. **`computed_policy_terms`** The list of computed policy terms. See [Computed Policy Terms Format](/json-formats/computed-policy-terms) page for details. **`buildings`** The list of building items. See [Buildings Format](/json-formats/buildings) page for details. # Underwriting Rules Attributes Source: https://docs.pingintel.com/json-formats/uw-rules ## Item Attributes Each attribute specifies a data type. The following types are used: * `text` arbitrary string value * `number` numeric value * `percentage` numeric value expressed as a percent * `currency` numeric monetary value * `boolean` true/false value * `date` calendar date (YYYY-MM-DD) * `year` four-digit value representing a year * `choices` value selected from a predefined list of options * `object` JSON-like key/value structure * `†` If an attribute's data type has a dagger (†) next to it, the attribute will actually contain a mapping containing one or more of the following attributes (if null, they are simply not included): ``` { "value": Cleaned-up data value. "confidence": 0.0 (lowest confidence) to 1.0 (highest confidence), indicating a reliability score for the element. "original": Cell value as originally read, before any scrubbing operations. "source": Provenance of the data. "units": Currency of value, if known. "comment": Human-readable information about the derivation of the value. } ``` ## **Underwriting Rules** **Attributes that define custom underwriting rules and the outcome of their evaluation.** **`rule`** (`text†`) The name or description of the underwriting rule evaluated. **`result`** (`choices†`) The outcome of the rule evaluation. # Zone Terms Attributes Source: https://docs.pingintel.com/json-formats/zone-terms ## Item Attributes Each attribute specifies a data type. The following types are used: * `text` arbitrary string value * `number` numeric value * `percentage` numeric value expressed as a percent * `currency` numeric monetary value * `boolean` true/false value * `date` calendar date (YYYY-MM-DD) * `year` four-digit value representing a year * `choices` value selected from a predefined list of options * `object` JSON-like key/value structure * `†` If an attribute's data type has a dagger (†) next to it, the attribute will actually contain a mapping containing one or more of the following attributes (if null, they are simply not included): ``` { "value": Cleaned-up data value. "confidence": 0.0 (lowest confidence) to 1.0 (highest confidence), indicating a reliability score for the element. "original": Cell value as originally read, before any scrubbing operations. "source": Provenance of the data. "units": Currency of value, if known. "comment": Human-readable information about the derivation of the value. } ``` ## **Zone Terms** **Defines any policy terms that apply based on zone classifications.** **`peril_class`** (`object†`) The peril class to which the zone terms apply. **`zone`** (`object†`) The name or identifier of the zone (e.g., “NewMadrid”). **`sublimit`** (`currency†`) Sublimit applied to this peril class within the specified zone. **`location_deductible_type`** (`text†`) Specifies how the location-level deductible is applied. **`location_deductible`** (`currency†`) Deductible applied at the location level. **`min_deductible`** (`currency†`) Minimum deductible for the zone. **`max_deductible`** (`currency†`) Maximum deductible for the zone. **`is_excluded`** (`boolean†`) Indicates whether this peril class is excluded for the specified zone. # Output Formats Source: https://docs.pingintel.com/output-formats The output formats Ping.Extraction can generate from a parsed SOV An output is a file generated from a parsed SOV. Each output is produced in one **output format**. The same parsed data can be generated in as many formats as your organization has enabled, from structured JSON to Excel workbooks to catastrophe-model import files. This page covers how to request formats, how to discover which ones your account can use, and the formats available to every account. For where outputs fit in the processing lifecycle, see [How Ping Processes SOVs](/how-ping-processes-sovs). ## Requesting output formats Request formats at parse time or any time afterward. * **At parse time**, pass `output_formats` (a list of one or more) to [Start SOV Parsing Job](/ping-extraction/parse-sovs/start-sov-parsing-job). Each requested format is generated as part of the job. * **After parsing**, request a single format with [Get Or Create SOV Output](/ping-extraction/get-sov-data/get-or-create-sov-output), or pass `output_formats` to [Start SOV Update Job](/ping-extraction/update-sovs/start-sov-update-job) when generating a new revision. See [Regenerating outputs](/how-ping-processes-sovs#regenerating-outputs). Format identifiers are case-insensitive on input. Use the exact `output_format` value returned by [List Available Output Formats](/ping-extraction/get-sov-data/list-available-output-formats) as the canonical spelling. Requesting a format your organization has not enabled returns a `400` whose message lists the formats you may request. ## Discovering available formats The set of formats available to you is configured per organization, so [List Available Output Formats](/ping-extraction/get-sov-data/list-available-output-formats) is the authoritative source for what you can request. Scope the lookup with one of `sovid`, `division_uuid`, or `team_uuid`. When none is supplied, the endpoint uses your default team and division. Precedence is `sovid` > `division_uuid` > `team_uuid` > user default. Each item in the response describes one format: | Field | Meaning | | :----------------- | :----------------------------------------------------------------------------------------------------------------------------- | | `output_format` | The value to pass when requesting this format. | | `label` | The human-readable label that appears on the generated output. | | `output_extension` | The file extension the output uses. Can be null. | | `is_public` | `true` for the public formats listed below, available to every account. `false` for other formats configured for your account. | The formats below have `is_public` set to `true` and are available to every account. Your account may also return formats with `is_public` set to `false`, such as org-specific workbooks. Call the endpoint to see your full set. ## Formats available to every account ### Structured data | `output_format` | Label | File type | Use it for | | :-------------- | :-------- | :-------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `JSON` | JSON | JSON | The normalized SOV as structured data. This is the primary machine-readable output and the one most integrations consume. The [JSON Format Specification](/json-formats/top-level) documents its structure. | | `DEBUGJSON` | DEBUGJSON | JSON | A verbose variant of the JSON output that adds diagnostic parsing detail. Use it when you need to inspect how the source was interpreted. | ### Excel workbooks | `output_format` | Label | File type | Use it for | | :-------------- | :----------- | :------------ | :----------------------------------------------------------------------------------------------- | | `AUDITOR` | Ping SOV | Excel (.xlsx) | A review-oriented workbook with a summary sheet, for checking the parsed data before you use it. | | `AIRSCRUBBER` | Ping SOV | Excel (.xlsm) | A workbook of the scrubbed SOV with AIR construction and occupancy coding. | | `RMSSCRUBBER` | RMS Scrubber | Excel (.xlsm) | The same workbook with RMS construction and occupancy coding. | | `CATSCRUBBER` | Ping SOV | Excel (.xlsm) | A workbook combining AIR and RMS coding in one file. | | `AIRModeler` | AIR Modeler | Excel (.xlsm) | A workbook laid out for AIR modeling. | | `RMSModeler` | RMS Modeler | Excel (.xlsm) | A workbook laid out for RMS modeling. | ### CSV exports | `output_format` | Label | File type | Use it for | | :------------------- | :---------------------------- | :-------- | :-------------------------------------------------------------- | | `AIRPolicy` | AIR Policy CSV | CSV | Policy-level rows formatted for AIR catastrophe-model import. | | `AIRLocation` | AIR Location CSV | CSV | Location-level rows formatted for AIR catastrophe-model import. | | `RMSPolicy` | RMS Policy CSV | CSV | Policy-level rows formatted for RMS catastrophe-model import. | | `RMSLocation` | RMS Location CSV | CSV | Location-level rows formatted for RMS catastrophe-model import. | | `OEDPolicy` | OED Policy CSV | CSV | Policy-level rows in the Open Exposure Data (OED) standard. | | `OEDLocation` | OED Location CSV | CSV | Location-level rows in the Open Exposure Data (OED) standard. | | `RMSAccountResults` | RMS Analysis Account Results | CSV | Account-level results from RMS analysis. | | `RMSLocationResults` | RMS Analysis Location Results | CSV | Location-level results from RMS analysis. | | `CDR` | CDR CSV | CSV | Lloyd's Core Data Record (CDR) format. | Several Excel workbooks share the label `Ping SOV`. The `output_format` value, not the label, is what distinguishes them when you request a file. ## Formats specific to your organization Your organization may have additional formats configured for its workflow, such as custom workbook layouts or partner-specific exports. These appear in [List Available Output Formats](/ping-extraction/get-sov-data/list-available-output-formats) with `is_public` set to `false`, and you request them the same way as any other format. Because they are configured per organization, the endpoint is the only reliable way to see the complete set available to your account. ## How formats appear in responses A completed job lists its generated files under `result.outputs`. Each entry carries a `filename`, a `url` to download from, and a `description` with the format's human-readable label. Request and download flows are covered in [Process an SOV](/workflows/ping-extraction/parse-sov) and [Get or Create an SOV Output](/workflows/ping-extraction/get-or-create-output). # Check Bulk Enhance Job Status Source: https://docs.pingintel.com/ping-data/bulk-enhance/check-bulk-enhance-job-status https://data-api-staging.sovfixer.com/api/schema/?format=json get /api/v1/bulk_enhance/{id} Check the status of a data request. Returns status, and, when complete, provides links to the requested data. # Fetch Bulk Enhance Job Result Data Source: https://docs.pingintel.com/ping-data/bulk-enhance/fetch-bulk-enhance-job-result-data https://data-api-staging.sovfixer.com/api/schema/?format=json get /api/v1/bulk_enhance/{id}/output/{filename} Download outputs of a bulk enhance request. For documentation of the contents of the file, see the reponse to the [enhance location](#tag/api/operation/api_v1_enhance_location) endpoint. # Start Bulk Enhance Job Source: https://docs.pingintel.com/ping-data/bulk-enhance/start-bulk-enhance-job https://data-api-staging.sovfixer.com/api/schema/?format=json post /api/v1/bulk_enhance Enhance a list of locations with additional data. # Enhance Location Source: https://docs.pingintel.com/ping-data/enhance/enhance-location https://data-api-staging.sovfixer.com/api/schema/?format=json get /api/v1/enhance Request data from multiple sources for a single location, synchronously. # Get Datasource Source: https://docs.pingintel.com/ping-data/usage/get-datasource https://data-api-staging.sovfixer.com/api/schema/?format=json get /api/v1/datasources/{code} Returns a datasource configuration for the requested datasource code. # Get Source Access Policy Source: https://docs.pingintel.com/ping-data/usage/get-source-access-policy https://data-api-staging.sovfixer.com/api/schema/?format=json get /api/v1/limits Returns the effective source access policy for a user or organization. The policy has two facets: 1. **`allowlist`** — which sources may be called at all. `mode` is `restricted` (only the listed `sources` are callable) or `unrestricted` (no gate). For user-scope queries the allowlist cascades: `User.allowed_sources` wins if set, otherwise `Organization.allowed_sources` applies; `source` tells you which level the allowlist came from. 2. **`sources`** — per-source quota state. Only sources with at least one cap appear here. For user-scope queries, caps stack: when both user and org cap a source, the **lower** cap wins per window. Windows are calendar-aligned in UTC: `daily` since 00:00 UTC today; `monthly` since 00:00 UTC on the 1st of the current month. To decide if `N` locations of source `X` may be called: (1) if `allowlist.mode == 'restricted'` and `X` not in `allowlist.sources`, denied; (2) if `sources[X].remaining[window] < N` for any window, denied; otherwise allowed. # Get Usage Source: https://docs.pingintel.com/ping-data/usage/get-usage https://data-api-staging.sovfixer.com/api/schema/?format=json get /api/v1/usage Returns API credit usage over a time range, broken down by data source and time bucket. Each bucket contains a `counts` map of `source -> locations_reserved + locations_used` — credits tied up (reserved in-flight or consumed) in that interval. The `total` key in `counts` (and in `totals`) carries the cross-source aggregate. Granularity is chosen automatically based on the requested time range: `5m` for the last day, `1h` for the last 31 days, `1d` for longer ranges. # List Datasources Source: https://docs.pingintel.com/ping-data/usage/list-datasources https://data-api-staging.sovfixer.com/api/schema/?format=json get /api/v1/datasources Returns datasource configurations the user has access to. # Fetch Building Source: https://docs.pingintel.com/ping-extraction/get-sov-data/fetch-building https://api-staging.sovfixer.com/api/schema/?format=json get /api/v1/building/{item_key} Retrieve a specific building. # Get Historical SOV Source: https://docs.pingintel.com/ping-extraction/get-sov-data/get-historical-sov https://api-staging.sovfixer.com/api/schema/?format=json get /api/v1/sov/history/{id} Retrieve details and output files for a specific SOV or SOV Update Data (SUD). Pass the `id` returned by List Historical SOVs. The response includes output `url` values you can use to download each generated file. # Get Or Create SOV Output Source: https://docs.pingintel.com/ping-extraction/get-sov-data/get-or-create-sov-output https://api-staging.sovfixer.com/api/schema/?format=json post /api/v1/sov/{id}/get_or_create_output If an output file is already available, it will be returned. If not, a new output file will be generated and an id will be provided to check the status. # Get Public Shareable URL Source: https://docs.pingintel.com/ping-extraction/get-sov-data/get-public-shareable-url https://api-staging.sovfixer.com/api/schema/?format=json get /api/v1/pli/policy/{id}/get_public_shareable_url Returns a publicly shareable URL for the map associated with the provided `sovid` or `pingid`. # List Available Output Formats Source: https://docs.pingintel.com/ping-extraction/get-sov-data/list-available-output-formats https://api-staging.sovfixer.com/api/schema/?format=json get /api/v1/output_formats Returns the list of output formats available for the given context. Provide one of `sovid`, `division_uuid`, or `team_uuid` to scope the results; if none are provided, the requesting user's default team/division is used. Precedence: sovid > division_uuid > team_uuid > user default. # List Historical SOVs Source: https://docs.pingintel.com/ping-extraction/get-sov-data/list-historical-sovs https://api-staging.sovfixer.com/api/schema/?format=json get /api/v1/sov/history List completed and failed SOVs and SOV Update Data (SUD) in chronological order. Supply `start` to begin at a specific timestamp. Pass the returned `cursor_id` in each subsequent request to page through results. Intended for periodic polling to stay current with all processed submissions. # List SOV Activity Source: https://docs.pingintel.com/ping-extraction/get-sov-data/list-sov-activity https://api-staging.sovfixer.com/api/schema/?format=json get /api/v1/sov/activity Fetch a list of the most recent SOV Fixer activity. If desired, the returned `fields` can be configured and the responses can be filtered by `status`, `origin`, etc. # Check SOV Parsing Status Source: https://docs.pingintel.com/ping-extraction/parse-sovs/check-sov-parsing-status https://api-staging.sovfixer.com/api/schema/?format=json get /api/v1/sov/{id} Check the status of a SOV parsing request. Returns status of the parsing job, and, when complete, provides links to the output documents. # Fetch Outputs of SOV Parsing Job Source: https://docs.pingintel.com/ping-extraction/parse-sovs/fetch-outputs-of-sov-parsing-job https://api-staging.sovfixer.com/api/schema/?format=json get /api/v1/sov/{id}/output/{filename} # Get/Check SOV Output Result Source: https://docs.pingintel.com/ping-extraction/parse-sovs/getcheck-sov-output-result https://api-staging.sovfixer.com/api/schema/?format=json get /api/v1/sov/get_or_create_output/{id} Get the status of a SOV output request, and the result if it is complete. # Start SOV Parsing Job Source: https://docs.pingintel.com/ping-extraction/parse-sovs/start-sov-parsing-job https://api-staging.sovfixer.com/api/schema/?format=json post /api/v1/sov Submit an Excel file to be parsed as an SOV. # Download a generated Ping.Location report PDF Source: https://docs.pingintel.com/ping-extraction/pinglocation/download-a-generated-pinglocation-report-pdf https://api-staging.sovfixer.com/api/schema/?format=json get /api/v1/location/file/{filename} Streams the Ping.Location report PDF from S3. Use the `filename` returned by `GET /api/v1/location/report` once status is `SUCCESS`. # Generate a Ping.Location report (PDF) Source: https://docs.pingintel.com/ping-extraction/pinglocation/generate-a-pinglocation-report-pdf https://api-staging.sovfixer.com/api/schema/?format=json post /api/v1/location/report Requests a PDF report for a building. Only `sovid` is required — all other fields are optional. Returns **202** when generation is queued. Poll `GET /api/v1/location/report` with `task_id` until `status` is `SUCCESS`, then download from `GET /api/v1/location/file/{filename}`. Provide `layer` to include a risk overlay in the map (e.g. `ping-flood`). When `layer` is set, the map is captured via server-side browser rendering. # Poll Ping.Location report generation status Source: https://docs.pingintel.com/ping-extraction/pinglocation/poll-pinglocation-report-generation-status https://api-staging.sovfixer.com/api/schema/?format=json get /api/v1/location/report Returns the current status of a report generation task. Pass the `task_id` and/or `document_id` returned by the POST endpoint. When `status` is `SUCCESS`, `filename` contains the name to pass to `GET /api/v1/location/file/{filename}`. # Add Building Source: https://docs.pingintel.com/ping-extraction/update-sovs/add-building https://api-staging.sovfixer.com/api/schema/?format=json post /api/v1/sov/{id}/add_building Adds a building as an annotation to an existing SOV. # Add Locations to SOV Update Job Source: https://docs.pingintel.com/ping-extraction/update-sovs/add-locations-to-sov-update-job https://api-staging.sovfixer.com/api/schema/?format=json post /api/v1/sov/update/{id}/add_locations # Check SOV Update Status Source: https://docs.pingintel.com/ping-extraction/update-sovs/check-sov-update-status https://api-staging.sovfixer.com/api/schema/?format=json get /api/v1/sov/update/{id} # Create New Submission Source: https://docs.pingintel.com/ping-extraction/update-sovs/create-new-submission https://api-staging.sovfixer.com/api/schema/?format=json post /api/v1/submission Create a new, empty submission instance. Then, populate via add_locations then /start. # Initiate SOV Update Job Source: https://docs.pingintel.com/ping-extraction/update-sovs/initiate-sov-update-job https://api-staging.sovfixer.com/api/schema/?format=json post /api/v1/sov/{sovid}/initiate_update Updates an SOV, it should be followed by some `/sov/update/{id}/add_locations` calls followed by `/sov/update/{id}/start.` # Start SOV Update Job Source: https://docs.pingintel.com/ping-extraction/update-sovs/start-sov-update-job https://api-staging.sovfixer.com/api/schema/?format=json post /api/v1/sov/update/{id}/start # Acc/Loc File Status Source: https://docs.pingintel.com/ping-vision/cat-modeling/accloc-file-status https://vision.staging.pingintel.com/api/schema/?format=json get /api/v1/submission/{pingid}/cat/acc-loc-files/{uuid} **⚠️ Under active development — subject to change.** Returns the current status of an acc/loc file generation job and download URLs for completed files. # Export Modeling Options Source: https://docs.pingintel.com/ping-vision/cat-modeling/export-modeling-options https://vision.staging.pingintel.com/api/schema/?format=json get /api/v1/submission/{pingid}/cat/modeling-options/export **⚠️ Under active development — subject to change.** Returns all modeling options for the submission. Each entry includes the full coverage option (with peril and zone terms) and the layers selected for modeling. # Generate Acc/Loc Files Source: https://docs.pingintel.com/ping-vision/cat-modeling/generate-accloc-files https://vision.staging.pingintel.com/api/schema/?format=json post /api/v1/submission/{pingid}/cat/acc-loc-files **⚠️ Under active development — subject to change.** Kicks off an asynchronous job to generate files. Poll the Acc/Loc File Status endpoint to check progress and retrieve download URLs. # Initiate New Submission Source: https://docs.pingintel.com/ping-vision/create-submission/initiate-new-submission https://vision.staging.pingintel.com/api/schema/?format=json post /api/v1/submission Initiate a new submission for processing. Supports sending in one or multiple documents at once, or a single .eml file. # Download Submission Document Source: https://docs.pingintel.com/ping-vision/get-submission-data/download-submission-document https://vision.staging.pingintel.com/api/schema/?format=json get /api/v1/submission/{id}/document/{filename} Download submission document specified by `filename`. # Get Or Create Submission Output Source: https://docs.pingintel.com/ping-vision/get-submission-data/get-or-create-submission-output https://vision.staging.pingintel.com/api/schema/?format=json post /api/v1/submission/{id}/get_or_create_output If an output file is already available, it will be returned. If not, a new output file will be generated and an id will be provided to check the status. # Get/Check Submission Output Result Source: https://docs.pingintel.com/ping-vision/get-submission-data/getcheck-submission-output-result https://vision.staging.pingintel.com/api/schema/?format=json get /api/v1/submission/get_or_create_output/{id} Get the status of a submission output request, and the result if it is complete. # List Recent Submission Activity Source: https://docs.pingintel.com/ping-vision/get-submission-data/list-recent-submission-activity https://vision.staging.pingintel.com/api/schema/?format=json get /api/v1/submission Fetch a list of the most recent submission activity. If desired, the returned `fields` can be configured and the responses can be filtered by `status`, `origin`, etc. # List Submission Events Source: https://docs.pingintel.com/ping-vision/get-submission-data/list-submission-events https://vision.staging.pingintel.com/api/schema/?format=json get /api/v1/submission-events List submission events since a `start` time or since the last `cursor_id`, in ascending time order, filtered by team, division, or pingid. Intended primarily for system-to-system periodic polling to stay up-to-date with all events, to keep systems in sync. Events include status changes (event_type=SSC), various job stages like Results Received (SFRR), etc. One or more of `division_id`, `team_id`, or `pingid` must be provided. # Get Current User Info Source: https://docs.pingintel.com/ping-vision/miscellaneous/get-current-user-info https://vision.staging.pingintel.com/api/schema/?format=json get /api/v1/me Get current user info and permissions for the authenticated user. # Get Sitewide User Settings Source: https://docs.pingintel.com/ping-vision/miscellaneous/get-sitewide-user-settings https://vision.staging.pingintel.com/api/schema/?format=json get /api/v1/settings Get PingVision API settings for the authenticated user. # List Submission Statuses Source: https://docs.pingintel.com/ping-vision/miscellaneous/list-submission-statuses https://vision.staging.pingintel.com/api/schema/?format=json get /api/v1/submission-status List all submission statuses available for a given division. # Action Submission(s) Source: https://docs.pingintel.com/ping-vision/update-submission/action-submissions https://vision.staging.pingintel.com/api/schema/?format=json post /api/v1/submission/bulkupdate Provide a list of changes to transition ("change_status") or assign ("claim") one or multiple submissions. # Attach Document to Submission Source: https://docs.pingintel.com/ping-vision/update-submission/attach-document-to-submission https://vision.staging.pingintel.com/api/schema/?format=json post /api/v1/submission/{id}/document Upload an additional document to attach to a submission. # Change Submission Status Source: https://docs.pingintel.com/ping-vision/update-submission/change-submission-status https://vision.staging.pingintel.com/api/schema/?format=json patch /api/v1/submission/{id}/change_status Change the workflow status of a submission. # Parse Documents via Ping.Extraction Source: https://docs.pingintel.com/ping-vision/update-submission/parse-documents-via-pingextraction https://vision.staging.pingintel.com/api/schema/?format=json post /api/v1/submission/{id}/sovfixer-parse Send attached documents to Ping.Extraction for parsing. # Store Additional Data on Submission Source: https://docs.pingintel.com/ping-vision/update-submission/store-additional-data-on-submission https://vision.staging.pingintel.com/api/schema/?format=json post /api/v1/submission/{id}/add_data_items Store arbitrary custom tags on the submission. This is useful for storing additional information that is not part of the standard submission data structure. # Transfer Document from FTP to Submission Source: https://docs.pingintel.com/ping-vision/update-submission/transfer-document-from-ftp-to-submission https://vision.staging.pingintel.com/api/schema/?format=json post /api/v1/submission/{id}/transfer-from-ftp # Transfer Document to FTP Source: https://docs.pingintel.com/ping-vision/update-submission/transfer-document-to-ftp https://vision.staging.pingintel.com/api/schema/?format=json post /api/v1/submission/{id}/transfer-to-ftp # Update Submission Details Source: https://docs.pingintel.com/ping-vision/update-submission/update-submission-details https://vision.staging.pingintel.com/api/schema/?format=json patch /api/v1/submission/{id} Update properties of the submission. If you want to change the claimant or the workflow status, use v1/submission/bulkupdate instead. # Update Submission Document Details Source: https://docs.pingintel.com/ping-vision/update-submission/update-submission-document-details https://vision.staging.pingintel.com/api/schema/?format=json patch /api/v1/submission/{id}/document/{filename} Update details of a submission document, such as renaming, changing type, or archiving. # Add Permission for User Source: https://docs.pingintel.com/ping-vision/user-memberships/add-permission-for-user https://vision.staging.pingintel.com/api/schema/?format=json post /api/v1/memberships Create a new user membership. Supply exactly one of company_uuid, division_uuid, or team_uuid, along with the desired membership_type (defaults to 'member'). **Identifying the user** — supply exactly one of: - `user_id`: integer PK of an existing user who already shares a team with the caller. Used when the caller has already discovered the user via the membership list endpoint. - `user_email`: email of the user to add. The view does a case-insensitive lookup; if no match, a new inactive user is created. Optionally include `first_name` and `last_name` to populate the new user record (ignored if the user already exists). Note: `user_email`, `first_name`, and `last_name` are consumed by the view before reaching the serializer. They do not appear as serializer input fields. # List User Memberships Source: https://docs.pingintel.com/ping-vision/user-memberships/list-user-memberships https://vision.staging.pingintel.com/api/schema/?format=json get /api/v1/memberships List all company, division, or user memberships for the authenticated user. Memberships at the company level will be inherited by division and teams, and memberships at the division level will be interited by teams. # List User Teams Source: https://docs.pingintel.com/ping-vision/user-memberships/list-user-teams https://vision.staging.pingintel.com/api/schema/?format=json get /api/v1/user/teams/ Retrieve a list of teams associated with the authenticated user, whether the user is a member directly or a member of the team's division or company. # Remove User Permission Source: https://docs.pingintel.com/ping-vision/user-memberships/remove-user-permission https://vision.staging.pingintel.com/api/schema/?format=json delete /api/v1/memberships/{uuid} Delete a user membership by ID. # Getting Started Source: https://docs.pingintel.com/quickstart Get started with Ping APIs ## Which API do I use? **Ping.Extraction** is a standalone product that performs automated processing and structuring of insurance documents. **Ping.Data** is another standalone product that collects data, handles geocoding, and manages AI interaction for small or large batch requests. **Ping.Vision** manages submission workflows, part of which is invoking **Ping.Extraction** when appropriate. **Ping.Vision** requires customization to meet your organizational workflow needs and then manages the use of **Ping.Extraction** and **Ping.Data**. All of these products are available for direct use. However, most use cases will interface with only one of them directly, as that product will handle any required integrations. ## How do I authenticate? Authentication tokens for **Ping.Vision** and **Ping.Extraction** can be generated here: [https://auth.pingintel.com/account/api\_keys/](https://auth.pingintel.com/account/api_keys/). The same token works in both production and staging environments. Other APIs currently use different tokens. Please [contact support](/support) to request authentication tokens for those APIs. ## Common workflows Each workflow page walks through a full API call sequence with runnable code. New to SOV processing? Start with [How Ping Processes SOVs](/how-ping-processes-sovs) for the behavior behind these calls, and [Concepts & Identifiers](/concepts-and-identifiers) for the terms they use. ### Ping.Extraction * [Process an SOV](/workflows/ping-extraction/parse-sov) — parse a new workbook for the first time and download the generated outputs. * [Get or Create an SOV Output](/workflows/ping-extraction/get-or-create-output) — request an additional format, or regenerate an output, from an already-parsed SOV. * [Update an SOV](/workflows/ping-extraction/update-sov) — apply corrected building attributes to a parsed SOV, or trigger a `SCRUB` reoutput. * [Monitor SOV Activity](/workflows/ping-extraction/monitor-sov-activity) — track every SOV and SUD processed across your account with a single cursor-paginated poll. * [Build an SOV Pipeline](/workflows/ping-extraction/build-sov-pipeline) — submit jobs, apply updates, and download outputs from one long-running polling loop. ### Ping.Data * [Enhance One Location](/workflows/ping-data/enhance-location) — request data from multiple sources for a single location synchronously. * [Enhance Multiple Locations](/workflows/ping-data/bulk-enhance) — submit a batch of locations and poll for the enriched results. ### Ping.Vision * [Send and Track SOV Submission](/workflows/ping-vision/send-and-track-submission) — manage submission intake, which invokes **Ping.Extraction** on your behalf. * [How to: Integrate an External System (Clear and Triage)](/workflows/ping-vision/clear-and-triage) — drive an end-to-end clearance flow and react to submission status transitions. # Contact Us Source: https://docs.pingintel.com/support If you need additional support or have questions or comments about the API, please contact us at [support@pingintel.com](mailto:support@pingintel.com). If you would like to speak with the sales team or request a demonstration of our products, please use the [Contact](https://pingintel.com/contact/) form. # Enhance Multiple Locations Source: https://docs.pingintel.com/workflows/ping-data/bulk-enhance Example workflow for submitting a Bulk Enhance request via the **Ping.Data** API Below describes an example workflow of API calls that can be made in order to submit a Bulk Enhance request and retrieve results using the **Ping.Data** API. Reach for this workflow when one of the following is true: * You have many addresses to enrich at once and want a single batch job rather than one HTTP call per address. * You want asynchronous processing: submit once, poll for completion, and download a single output file containing all results. * You want to mix data sources (e.g., Ping Geocoding `PG`, Ping Hazard `PH`) across a batch, optionally overriding sources on a per-location basis. For a single address where you want enriched data returned synchronously in the HTTP response, use [Enhance One Location](/workflows/ping-data/enhance-location) instead. The following is a specific example. More options are documented in the Bulk Enhance pages linked below under **Ping.Data**. The code blocks allow the user to select from Python or cURL (via terminal) use cases. The sample Python script is available for download at the bottom of the page. Try filling in the blanks (e.g., \{id}) to go through the workflow using cURL! ### 1. Start Bulk Enhance Job The first API call to make is [Start Bulk Enhance Job](/ping-data/bulk-enhance/start-bulk-enhance-job). This endpoint allows a user to submit a batch of locations to **Ping** for enhancement. `sources` accepts datasource codes (e.g., `PG`, `PH`) from [List Datasources](/ping-data/usage/list-datasources), which returns the datasources your account has access to along with each one's input requirements and geographic coverage. **Example code:** ```python enhance_multiple_locations.py lines icon='python' theme={null} import time from pathlib import Path import requests import os # authentication token that allows you to make requests to the API API_KEY = os.environ.get('PING_DATA_AUTH_TOKEN') headers = {"Authorization": f"Token {API_KEY}"} # example batch payload (simple two-location example) payload = { "locations": [ { "id": "item-1", "address": "123 main st, miami, fl", "sources": ["PG", "PH"], }, { "id": "item-2", "address": "456 elm st, los angeles, ca", "sources": ["PG", "PH"], } ], "sources": ["PG", "PH"], } API_BASE = "https://data-api.sovfixer.com/api/v1" # 1. API URL for Start Bulk Enhance Job: https://data-api.sovfixer.com/api/v1/bulk_enhance start_job_url = f"{API_BASE}/bulk_enhance" # API response start_job_response = requests.post(start_job_url, json=payload, headers=headers) # check response status and record the job ID if start_job_response.status_code in (200, 201): jobid = start_job_response.json()["id"] print(start_job_response.json()) else: raise RuntimeError ## ... ``` ```shell cURL output icon='square-terminal' theme={null} curl --request POST \ --url https://data-api.sovfixer.com/api/v1/bulk_enhance \ --header 'Authorization: Token ' \ --header 'Content-Type: application/json' \ --data '{ "locations": [ { "id": "item-1", "address": "123 main st, miami, fl", "sources": ["PG", "PH"] }, { "id": "item-2", "address": "456 elm st, los angeles, ca", "sources": ["PG", "PH"] } ], "sources": ["PG", "PH"] }' ``` **Example response:** ```python Python output lines icon='python' theme={null} {'id': '3c90c3cc-0d44-4b50-8888-8dd25736052a', 'message': 'OK'} ``` ```shell cURL output icon='square-terminal' theme={null} { "id": "3c90c3cc-0d44-4b50-8888-8dd25736052a", "message": "OK" } ``` ### 2. Check Bulk Enhance Job Status The second API call to make is [Check Bulk Enhance Job Status](/ping-data/bulk-enhance/check-bulk-enhance-job-status). This endpoint allows a user to check the status of a previously submitted Bulk Enhance job using the `id` returned from the first step. The user should poll this endpoint until the job status is either `COMPLETE` or `FAILED`. **Example code:** ```python enhance_multiple_locations.py lines icon='python' theme={null} ## ... # 2. API URL for Check Bulk Enhance Job Status: https://data-api.sovfixer.com/api/v1/bulk_enhance/{id} check_job_url = f"{API_BASE}/bulk_enhance/{jobid}" check_job_response = requests.get(check_job_url, headers=headers) # ensure response is in a good state assert check_job_response.status_code in (200, 201) check_job_json = check_job_response.json() # Poll every three seconds for job completion while check_job_json.get("request", {}).get("status") not in ("COMPLETE", "FAILED"): print(check_job_json) print("Waiting 3 seconds to request again...") time.sleep(3) check_job_response = requests.get(check_job_url, headers=headers) # ensure response is in a good state assert check_job_response.status_code in (200, 201) check_job_json = check_job_response.json() print(check_job_json) # record filenames and urls of the processed outputs outputs = [] for output in check_job_json.get("result", {}).get("outputs", []): outputs.append( { "filename": output.get("filename"), "url": output.get("url") } ) ## ... ``` ```shell cURL icon='square-terminal' theme={null} curl --request GET \ --url https://data-api.sovfixer.com/api/v1/bulk_enhance/{id} \ --header 'Authorization: Token ' ``` **Example (truncated) response:** ```python Python output lines icon='python' theme={null} {'request': {'completed_at': '2026-02-02T19:18:52.624Z', 'num_canceled': 0, 'num_completed': 2, 'num_problems': 2, 'num_requested': 2, 'progress_started_at': '2026-02-02T19:18:49.264Z', 'requested_at': '2026-02-02T19:18:48.842Z', 'status': 'COMPLETE'}, 'result': {'message': 'Success.', 'outputs': [{'description': 'Data file 1', 'filename': 'output-data-3c90c3cc-0d44-4b50-8888-8dd25736052a.json', 'url': 'https://data-api.sovfixer.com/api/v1/bulk_enhance/3c90c3cc-0d44-4b50-8888-8dd25736052a/output/output-data-3c90c3cc-0d44-4b50-8888-8dd25736052a.json'}], 'sources': [{'avg_fetch_duration': 0.121, 'max_fetch_duration': 0.152, 'min_fetch_duration': 0.09, 'num_fails': 0, 'num_fetched': 2, 'num_successes': 2, 'source': 'PG', 'total_fetch_duration': 0.242}, {'avg_fetch_duration': 0.0795, 'max_fetch_duration': 0.08, 'min_fetch_duration': 0.079, 'num_fails': 0, 'num_fetched': 2, 'num_successes': 2, 'source': 'PGPRE', 'total_fetch_duration': 0.159}, {'avg_fetch_duration': None, 'max_fetch_duration': None, 'min_fetch_duration': None, 'num_fails': 0, 'num_fetched': 2, 'num_successes': 2, 'source': 'PH', 'total_fetch_duration': 0.0}], 'status': 'SUCCESS', 'total_processing_time': 3.782 } } ``` ```shell cURL output icon='square-terminal' theme={null} { "request":{ "status":"COMPLETE", "requested_at":"2026-02-02T19:18:48.842Z", "progress_started_at":"2026-02-02T19:18:49.264Z", "num_requested":2, "num_completed":2, "num_problems":2, "num_canceled":0, "completed_at":"2026-02-02T19:18:52.624Z" }, "result":{ "status":"SUCCESS", "message":"Success.", "total_processing_time":3.782, "outputs":[ { "url":"https://data-api.sovfixer.com/api/v1/bulk_enhance/3c90c3cc-0d44-4b50-8888-8dd25736052a/output/output-data-3c90c3cc-0d44-4b50-8888-8dd25736052a.json", "filename":"output-data-3c90c3cc-0d44-4b50-8888-8dd25736052a.json", "description":"Data file 1" } ], "sources":[ { "source":"PG", "num_fetched":2, "num_successes":2, "num_fails":0, "min_fetch_duration":0.09, "avg_fetch_duration":0.121, "max_fetch_duration":0.152, "total_fetch_duration":0.242 }, { "source":"PGPRE", "num_fetched":2, "num_successes":2, "num_fails":0, "min_fetch_duration":0.079, "avg_fetch_duration":0.0795, "max_fetch_duration":0.08, "total_fetch_duration":0.159 }, { "source":"PH", "num_fetched":2, "num_successes":2, "num_fails":0, "min_fetch_duration":null, "avg_fetch_duration":null, "max_fetch_duration":null, "total_fetch_duration":0.0 }, ] } } ``` ### 3. Fetch Bulk Enhance Job Result Data The third API call is [Fetch Bulk Enhance Job Result Data](/ping-data/bulk-enhance/fetch-bulk-enhance-job-result-data). This endpoint allows a user to download the resultant file for a completed Bulk Enhance job using the `id` and `filename` returned from the previous step. **Example code:** ```python enhance_multiple_locations.py lines icon='python' theme={null} ## ... # 3. API URL for Fetch Bulk Enhance Job Result Data: https://data-api.sovfixer.com/api/v1/bulk_enhance/{id}/output/{filename} for output in outputs: fetch_outputs_response = requests.get(output["url"], headers=headers) # ensure response is in a good state assert fetch_outputs_response.status_code in (200, 201) print(f"saving {output['filename']}") # save to workflow_example_results directory out_dir = Path("workflow_example_results") out_dir.mkdir(exist_ok=True) with open(out_dir / output["filename"], "wb") as outfile: outfile.write(fetch_outputs_response.content) print(f"saved {output['filename']}") ``` ```shell cURL output icon='square-terminal' theme={null} curl --request GET \ --url "https://data-api.sovfixer.com/api/v1/bulk_enhance/{id}/output/{filename}" \ --header 'Authorization: Token ' \ --output {filename} ``` **Example response:** ```python Python output lines icon='python' theme={null} saving bulk_enhance_3c90c3cc-results.json saved bulk_enhance_3c90c3cc-results.json ``` ```shell cURL output icon='square-terminal' theme={null} # your download information may vary % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 22619 100 22619 0 0 13859 0 0:00:01 0:00:01 --:--:-- 13859 ``` ### Python Demo Download a ready-to-run Python demo of this workflow here:                                   Download Python Script here ```python enhance_multiple_locations.py lines icon='python' theme={null} import time from pathlib import Path import requests import os # authentication token that allows you to make requests to the API API_KEY = os.environ.get('PING_DATA_AUTH_TOKEN') headers = {"Authorization": f"Token {API_KEY}"} # example batch payload (simple two-location example) payload = { "locations": [ { "id": "item-1", "address": "123 main st, miami, fl", "sources": ["PG", "PH"], }, { "id": "item-2", "address": "456 elm st, los angeles, ca", "sources": ["PG", "PH"], } ], "sources": ["PG", "PH"], } API_BASE = "https://data-api.sovfixer.com/api/v1" # 1. API URL for Start Bulk Enhance Job: https://data-api.sovfixer.com/api/v1/bulk_enhance start_job_url = f"{API_BASE}/bulk_enhance" # API response start_job_response = requests.post(start_job_url, json=payload, headers=headers) # check response status and record the job ID if start_job_response.status_code in (200, 201): jobid = start_job_response.json()["id"] print(start_job_response.json()) else: raise RuntimeError ## ... # 2. API URL for Check Bulk Enhance Job Status: https://data-api.sovfixer.com/api/v1/bulk_enhance/{id} check_job_url = f"{API_BASE}/bulk_enhance/{jobid}" check_job_response = requests.get(check_job_url, headers=headers) # ensure response is in a good state assert check_job_response.status_code in (200, 201) check_job_json = check_job_response.json() # Poll every three seconds for job completion while check_job_json.get("request", {}).get("status") not in ("COMPLETE", "FAILED"): print(check_job_json) print("Waiting 3 seconds to request again...") time.sleep(3) check_job_response = requests.get(check_job_url, headers=headers) # ensure response is in a good state assert check_job_response.status_code in (200, 201) check_job_json = check_job_response.json() print(check_job_json) # record filenames and urls of the processed outputs outputs = [] for output in check_job_json.get("result", {}).get("outputs", []): outputs.append( { "filename": output.get("filename"), "url": output.get("url") } ) ## ... # 3. API URL for Fetch Bulk Enhance Job Result Data: https://data-api.sovfixer.com/api/v1/bulk_enhance/{id}/output/{filename} for output in outputs: fetch_outputs_response = requests.get(output["url"], headers=headers) # ensure response is in a good state assert fetch_outputs_response.status_code in (200, 201) print(f"saving {output['filename']}") # save JSON outputs as JSON, others as binary out_dir = Path("workflow_example_results") out_dir.mkdir(exist_ok=True) with open(out_dir / output["filename"], "wb") as outfile: outfile.write(fetch_outputs_response.content) print(f"saved {output['filename']}") ``` # Enhance One Location Source: https://docs.pingintel.com/workflows/ping-data/enhance-location Example for enhancing a single location via the **Ping.Data** API This page demonstrates calling the [Enhance Location](/ping-data/enhance/enhance-location) endpoint to enrich a single address with **Ping.Data**. Reach for this workflow when one of the following is true: * You have a single address and want enriched data returned synchronously in one HTTP call. * You're powering an interactive use case such as a form lookup, address validation, or on-demand enrichment. * You don't want to manage a polling loop or download a result file. For batches of more than a handful of addresses, use [Enhance Multiple Locations](/workflows/ping-data/bulk-enhance) instead. The bulk endpoint accepts an array of locations in one request and produces a single downloadable output file. The examples show a simple GET-based call (query parameters) and a minimal Python script you can run locally. `sources` accepts datasource codes (e.g., `PG`, `PH`) from [List Datasources](/ping-data/usage/list-datasources), which returns the datasources your account has access to along with each one's input requirements and geographic coverage. The code blocks allow the user to select from Python or cURL (via terminal) use cases. The sample Python script is available for download at the bottom of the page. Try filling in the blanks (e.g., \{id}) to `Enhance Location` using cURL! ### 1. Enhance a Single Location **Example code:** ```python enhance_location.py lines icon='python' theme={null} import requests import json from pathlib import Path import os # authentication token that allows you to make requests to the API API_KEY = os.environ.get('PING_DATA_AUTH_TOKEN') headers = {"Authorization": f"Token {API_KEY}"} # single-address example params = { "address": "1600 pennsylvania ave nw washington dc 20500", "sources": ["PG", "PH"] } API_BASE = "https://data-api.sovfixer.com/api/v1" url = f"{API_BASE}/enhance" # 1. API URL for Enhance Location: https://data-api.sovfixer.com/api/v1/enhance enhance_location_response = requests.get(url, headers=headers, params=params) # check response status if enhance_location_response.status_code not in (200, 201): print("Error:", enhance_location_response.status_code, enhance_location_response.text) raise Exception("Error enhancing location") data = enhance_location_response.json() print(json.dumps(data, indent=4)) ``` ```shell cURL output icon='square-terminal' theme={null} curl --request GET \ --url 'https://data-api.sovfixer.com/api/v1/enhance?sources=PG&sources=PH&address=1600%20pennsylvania%20ave%20nw%20washington%20dc%2020500' \ --header "Authorization: Token " ``` **Example response (truncated):** ```python enhance_location.py lines icon='python' theme={null} {'id': 'e92a9bbe-007b-11f1-bb2a-0242ac11000a', 'location_data': { 'PG': {'address_line_1': '1600 Pennsylvania Ave NW', 'address_line_2': '', 'city': 'Washington', ... ``` ```shell cURL output icon='square-terminal' theme={null} { "id": "e92a9bbe-007b-11f1-bb2a-0242ac11000a", "location_data": { "PGPRE": { "is_success": true, "error_message": null, "confidence": 50, "status_code": 200, ... ``` ### Python Demo Download a ready-to-run Python demo of this workflow here:                                   Download Python Script here # Build an SOV Pipeline Source: https://docs.pingintel.com/workflows/ping-extraction/build-sov-pipeline End-to-end example workflow: submit SOVs, monitor processing, and fetch outputs via the **Ping.Extraction** API This page describes an end-to-end integration workflow with **Ping.Extraction**. You submit SOV parsing jobs, submit an update against a job once it completes, monitor processing through cursor-paginated history polling, group revisions by submission, and download outputs when Ping HITL marks a revision data-ready. **Reach for this workflow when:** * You are building a service that both submits SOVs and reacts to their results, and you want one polling loop to drive new work and track its outcomes. * You need to follow each submission's full lineage, from the original parse through every later revision, grouped under one submission. * You apply corrections back to a SOV as part of the same integration that submitted it, and want the resulting update tracked alongside everything else. * You want a single long-running process to coordinate submission, update, and download, rather than separate scripts for each stage. To track activity across an account without submitting any work of your own, see [Monitor SOV Activity](/workflows/ping-extraction/monitor-sov-activity). The code blocks let you choose between Python and cURL. A runnable Python script is available for download at the bottom of the page. Try filling in the blanks (e.g., `{id}`) to go through the workflow using cURL. This workflow demonstrates how to: * Submit SOV parsing jobs via [Start SOV Parsing Job](/ping-extraction/parse-sovs/start-sov-parsing-job). * Submit an update (SUD) against a completed job via [Initiate SOV Update Job](/ping-extraction/update-sovs/initiate-sov-update-job), [Add Locations to SOV Update Job](/ping-extraction/update-sovs/add-locations-to-sov-update-job), and [Start SOV Update Job](/ping-extraction/update-sovs/start-sov-update-job). * Poll [List Historical SOVs](/ping-extraction/get-sov-data/list-historical-sovs) to track every new revision. * Group revisions by submission to follow each submission's full lineage. * Detect data-ready revisions and download their outputs via [Get Or Create SOV Output](/ping-extraction/get-sov-data/get-or-create-sov-output). For an update job on its own, with status polling and direct output download instead of history polling, see [Update an SOV](/workflows/ping-extraction/update-sov). ### 1. Submit a Parsing Job USER ACTION Upload an Excel workbook to start an SOV parsing job. Save the returned `id`. Later history polls will surface this submission's revisions as Ping processes it. See [Process an SOV](/workflows/ping-extraction/parse-sov) for a focused walk-through of this endpoint. **Example code:** ```python build_sov_pipeline.py lines icon='python' theme={null} payload = { "document_type": "SOV", "output_formats": ["json"], "integrations": ["PG"], } with SAMPLE_FILE.open("rb") as fh: files = {"file": (SAMPLE_FILE.name, fh)} response = requests.post( START_JOB_URL, data=payload, files=files, headers=headers ) response.raise_for_status() job_id = response.json()["id"] ``` ```shell cURL output icon='square-terminal' theme={null} curl --request POST \ --url "https://api.sovfixer.com/api/v1/sov" \ --header "Authorization: Token " \ --header "Content-Type: multipart/form-data" \ --form "document_type=SOV" \ --form "output_formats=JSON" \ --form "integrations=PG" \ --form "file=@parse_sov_testfile.xlsx" ``` **Example response:** ```json JSON output lines icon='json' theme={null} { "id": "s-no-ping-hggcsk", "message": "OK" } ``` ### 2. Ping Processes the Submission PING Ping parses the workbook and creates an original SOV record with `record_type` set to `ORIG`. Ping HITL operators then advance the submission through additional revisions, each appearing in the history feed with its own `record_type`: * `ORIG` — original SOV from the initial parse. * `SCRUB`, `AIR`, `RMS`, `RMS_ANALYSIS`, `API` — output-format-specific revisions, each producing a downloadable artifact. * `COMPLETE` — scrubbing complete. * `READY_FOR_REVIEW` — awaiting HITL review. * `PINGREADY` — Ping has marked the data ready for the consumer. * `PRECERTIFIED` — clone pre-certified. * `MODELING_FILES_CREATED` — modeling files generated. Each record reports readiness in its `is_data_ready` field. `PINGREADY` and `PRECERTIFIED` revisions are always data-ready, and other revisions can become ready too. Step 5 watches `is_data_ready` rather than matching specific `record_type` values, so it catches every ready revision. ### 3. Poll History and Track Submissions USER ACTION Poll [List Historical SOVs](/ping-extraction/get-sov-data/list-historical-sovs) for new revisions. Group them by submission so you can follow each submission's full lineage. Records carry both a `pingid` (linking to a Ping.Vision submission when present) and a `sovid`. Fall back to `sovid` when `pingid` is `null` so every record gets grouped. See [Monitor SOV Activity](/workflows/ping-extraction/monitor-sov-activity) for a focused walk-through of the polling and cursor mechanics. `status` uses single-letter codes: `C` for complete and `F` for failed. **Example code:** ```python build_sov_pipeline.py lines icon='python' theme={null} @dataclass(frozen=True) class PingRevision: id: str revision: int record_type: str is_data_ready: bool = False @dataclass class PingSubmission: pingid: str revisions: set[PingRevision] = field(default_factory=set) def add_revision( self, record_type: str, revision: int, id: str, is_data_ready: bool ): self.revisions.add( PingRevision( record_type=record_type, revision=revision, id=id, is_data_ready=is_data_ready, ) ) last_cursor_id = None start = datetime.now(timezone.utc).strftime("%Y%m%d%H%M%S") submissions: dict[str, PingSubmission] = {} while True: params = {"cursor_id": last_cursor_id, "start": start, "page_size": 10} response = requests.get(HISTORICAL_SOVS_URL, headers=headers, params=params) response.raise_for_status() data = response.json() # Advance the cursor for the next poll. Keep the prior cursor if an empty # page omits or nulls cursor_id, so we resume after the last record we saw # rather than replaying from `start`. last_cursor_id = data.get("cursor_id") or last_cursor_id for record in data["results"]: submission_key = record["pingid"] or record["sovid"] if submission_key not in submissions: submissions[submission_key] = PingSubmission(pingid=submission_key) submissions[submission_key].add_revision( record_type=record["record_type"], revision=record.get("revision"), id=record["id"], is_data_ready=bool(record.get("is_data_ready")), ) ``` ```shell cURL output icon='square-terminal' theme={null} # First poll: scope by start. curl --request GET \ --header "Authorization: Token " \ --url "https://api.sovfixer.com/api/v1/sov/history?start=20260526000000&page_size=10" # Subsequent polls: pass the cursor_id from the previous response. curl --request GET \ --header "Authorization: Token " \ --url "https://api.sovfixer.com/api/v1/sov/history?cursor_id={cursor_id}&page_size=10" ``` **Example response:** ```json JSON output lines icon='json' theme={null} { "cursor_id": "s-lo-ping-zk9q2x", "results": [ { "client_ref": null, "completed_time": "2026-03-24T13:46:04.165482Z", "id": "s-lo-ping-9xkw3m", "incremental": false, "is_data_ready": false, "pingid": "p-lo-ping-7bk2qd", "record_type": "ORIG", "revision": 0, "sovid": "s-lo-ping-9xkw3m", "status": "C" }, { "client_ref": null, "completed_time": "2026-03-24T14:02:17.831204Z", "id": "s-lo-ping-4j2qhr", "incremental": false, "is_data_ready": false, "pingid": "p-lo-ping-x4m9rs", "record_type": "ORIG", "revision": 0, "sovid": "s-lo-ping-4j2qhr", "status": "F" }, { "client_ref": null, "completed_time": "2026-03-24T14:18:45.092716Z", "id": "s-lo-ping-vt7n6c", "incremental": false, "is_data_ready": false, "pingid": "p-lo-ping-q8w3ze", "record_type": "ORIG", "revision": 0, "sovid": "s-lo-ping-vt7n6c", "status": "C" }, {"...": "..."} ] } ``` ### 4. Submit an Update from the Poll Loop USER ACTION An SOV must finish parsing before it can be updated. When the first `ORIG` record for one of the SOVs this script submitted arrives complete (`status` `C`), drive one update against its `sovid`. The demo tracks its own job IDs in `submitted_job_ids` so it updates a SOV it created rather than any unrelated record that happens to appear in the feed. The update runs three calls in order: [Initiate SOV Update Job](/ping-extraction/update-sovs/initiate-sov-update-job) opens the job, [Add Locations to SOV Update Job](/ping-extraction/update-sovs/add-locations-to-sov-update-job) uploads the revised building attributes, and [Start SOV Update Job](/ping-extraction/update-sovs/start-sov-update-job) begins processing. A SUD reuses its parent's `sovid` and `pingid`, so its revisions group under the same submission and surface in the same history feed. They arrive with an `id` like `s-lo-ping-9xkw3m-r001`, an incremented `revision`, and a `record_type` of `API`, the default when the update job does not set an `update_type`. See [Update an SOV](/workflows/ping-extraction/update-sov) for a focused walk-through of these three endpoints, the `update_type` values, status polling, and direct output download. The rows in your locations CSV must reference buildings present in the parent SOV, by `item_key` or by `sheet_name` plus `sheet_row_number`. Submit the update once. The flag in the demo guards against re-firing on later polls. **Example code:** ```python build_sov_pipeline.py lines icon='python' theme={null} def submit_sud(sovid: str) -> str: # Open an update job tied to the parent SOV. resp = requests.post(f"{BASE_URL}/sov/{sovid}/initiate_update", headers=headers) resp.raise_for_status() update_id = resp.json()["id"] # Upload the revised building attributes. with LOCATIONS_CSV.open("rb") as fh: files = {"file": (LOCATIONS_CSV.name, fh)} resp = requests.post( f"{BASE_URL}/sov/update/{update_id}/add_locations", files=files, headers=headers, ) resp.raise_for_status() # Start processing. extra_data is optional but drives the output filename. resp = requests.post( f"{BASE_URL}/sov/update/{update_id}/start", headers=headers, json={"extra_data": {"insured_name": "Acme Corp"}, "output_formats": ["json"]}, ) resp.raise_for_status() return update_id ``` ```shell cURL output icon='square-terminal' theme={null} # 1. Open the update job tied to the parent sovid. curl --request POST \ --url "https://api.sovfixer.com/api/v1/sov/{sovid}/initiate_update" \ --header "Authorization: Token " # 2. Upload the revised building attributes. curl --request POST \ --url "https://api.sovfixer.com/api/v1/sov/update/{update_id}/add_locations" \ --header "Authorization: Token " \ --form "file=@corrections.csv" # 3. Start processing. curl --request POST \ --url "https://api.sovfixer.com/api/v1/sov/update/{update_id}/start" \ --header "Authorization: Token " \ --header "Content-Type: application/json" \ --data '{"extra_data": {"insured_name": "Acme Corp"}, "output_formats": ["json"]}' ``` **Example response (initiate):** ```json JSON output lines icon='json' theme={null} { "message": "OK", "id": "s-lo-ping-9xkw3m-r001" } ``` A later history poll surfaces the SUD as its own record. It shares the parent's `sovid` and `pingid`, so the loop in step 3 groups it under the same submission without printing a new one. **Example history record (SUD):** ```json JSON output lines icon='json' theme={null} { "client_ref": null, "completed_time": "2026-03-24T15:01:12.402918Z", "id": "s-lo-ping-9xkw3m-r001", "incremental": false, "is_data_ready": false, "pingid": "p-lo-ping-7bk2qd", "record_type": "API", "revision": 1, "sovid": "s-lo-ping-9xkw3m", "status": "C" } ``` ### 5. Fetch Outputs When Data Is Ready USER ACTION When a revision arrives with `is_data_ready` set to `true`, request its output via `POST /sov/{id}/get_or_create_output`. Pass `revision: -1` in the body to request the latest revision's output regardless of which specific record id you provide. The response carries the output's status, download URL, and filename. When `request.status` is `COMPLETE`, fetch the file from `result.url` and write it to disk. Output generation is asynchronous, so a data-ready revision does not mean its output file exists yet. The demo queues these records in `pending_downloads` and retries each one on later polls until `request.status` reaches `COMPLETE` or `FAILED`, rather than blocking the poll loop on a single file. A failed SUD never appears in the history feed, so polling alone would not tell you an update failed. The demo tracks the update it submitted through [Check SOV Update Status](/ping-extraction/update-sovs/check-sov-update-status) until that job reaches `COMPLETE` or `FAILED`. On `COMPLETE`, it queues the update's own output for download. Passing the SUD id to Get or Create Output returns that revision's output directly, so the `revision` field does not apply. **Example code:** ```python build_sov_pipeline.py lines icon='python' theme={null} def fetch_output(record_id: str) -> bool: # `revision: -1` requests the most recent revision's output for this submission. payload = {"output_format": "json", "revision": -1, "overwrite_existing": False} response = requests.post( f"{BASE_URL}/sov/{record_id}/get_or_create_output", headers=headers, json=payload, ) response.raise_for_status() data = response.json() status = data["request"]["status"] if status == "FAILED": return True if status != "COMPLETE": return False file_response = requests.get(data["result"]["url"], headers=headers) file_response.raise_for_status() output_path = OUTPUT_DIR / data["result"]["scrubbed_filename"] output_path.write_bytes(file_response.content) return True ``` ```shell cURL output icon='square-terminal' theme={null} # Request the latest output for a record. curl --request POST \ --url "https://api.sovfixer.com/api/v1/sov/{id}/get_or_create_output" \ --header "Authorization: Token " \ --header "Content-Type: application/json" \ --data '{"output_format": "json", "revision": -1, "overwrite_existing": false}' # Then download the file from result.url. curl --request GET \ --header "Authorization: Token " \ --url "{result.url}" \ --output "{result.scrubbed_filename}" ``` **Example response:** ```json JSON output lines icon='json' theme={null} { "request": { "status": "COMPLETE" }, "result": { "url": "https://api.sovfixer.com/api/v1/sov/s-lo-ping-fd2acv/output/example_sov.debug.json", "scrubbed_filename": "example_sov.debug.json" } } ``` ### Python Demo A runnable script that submits an initial batch of parsing jobs, submits one update against the first job that completes, polls the history endpoint, groups revisions by submission, and downloads outputs when Ping HITL marks a revision data-ready. Set `SOVFIXER_AUTH_TOKEN`, place `parse_sov_testfile.xlsx` and `corrections.csv` in the working directory, then run with `python build_sov_pipeline.py`.       Download Python Script **|||** Download Example SOV **|||** Download corrections.csv ```python build_sov_pipeline.py lines icon='python' theme={null} """ Ping.Extraction SOV pipeline demo: submit parsing jobs, poll /sov/history for revisions, fire one SOV update (SUD), download data-ready outputs. Set SOVFIXER_AUTH_TOKEN, then run with `python build_sov_pipeline.py`. """ import os import time from dataclasses import dataclass, field from datetime import datetime, timezone from pathlib import Path import requests @dataclass(frozen=True) class PingRevision: id: str revision: int record_type: str is_data_ready: bool = False @dataclass class PingSubmission: pingid: str revisions: set[PingRevision] = field(default_factory=set) def add_revision( self, record_type: str, revision: int, id: str, is_data_ready: bool ): self.revisions.add( PingRevision( record_type=record_type, revision=revision, id=id, is_data_ready=is_data_ready, ) ) # Auth token. Generate one at https://auth.pingintel.com/account/api_keys/ API_KEY = os.environ.get("SOVFIXER_AUTH_TOKEN") if not API_KEY: raise SystemExit("SOVFIXER_AUTH_TOKEN is not set") BASE_URL = "https://api.sovfixer.com/api/v1" HISTORICAL_SOVS_URL = f"{BASE_URL}/sov/history" START_JOB_URL = f"{BASE_URL}/sov" headers = {"Authorization": f"Token {API_KEY}"} # File to upload when submitting parsing jobs. SAMPLE_FILE = Path("parse_sov_testfile.xlsx") # Corrections CSV uploaded when submitting the SOV update. Its rows must # reference buildings present in SAMPLE_FILE (by item_key, or sheet_name plus # sheet_row_number), since the update targets a SOV parsed from that file. LOCATIONS_CSV = Path("corrections.csv") # Where downloaded outputs land. OUTPUT_DIR = Path("workflow_example_results") POLL_SECONDS = 30 def submit_job() -> str: """Submit one SOV parsing job and return its ID.""" payload = { "document_type": "SOV", "output_formats": ["json"], "integrations": ["PG"], } with SAMPLE_FILE.open("rb") as fh: files = {"file": (SAMPLE_FILE.name, fh)} response = requests.post( START_JOB_URL, data=payload, files=files, headers=headers ) response.raise_for_status() job_id = response.json()["id"] print(f"Submitted parsing job: {job_id}") return job_id def submit_sud(sovid: str) -> str: """Update a parsed SOV: open the job, upload locations, start processing. The resulting SUD revisions group under the parent sovid in the history feed.""" # Open an update job tied to the parent SOV. resp = requests.post(f"{BASE_URL}/sov/{sovid}/initiate_update", headers=headers) resp.raise_for_status() update_id = resp.json()["id"] # Upload the revised building attributes. with LOCATIONS_CSV.open("rb") as fh: files = {"file": (LOCATIONS_CSV.name, fh)} resp = requests.post( f"{BASE_URL}/sov/update/{update_id}/add_locations", files=files, headers=headers, ) resp.raise_for_status() # Start processing. extra_data is optional but drives the output filename. resp = requests.post( f"{BASE_URL}/sov/update/{update_id}/start", headers=headers, json={"extra_data": {"insured_name": "Acme Corp"}, "output_formats": ["json"]}, ) resp.raise_for_status() print(f"Submitted SOV update (SUD): {update_id}") return update_id def check_sud_status(update_id: str) -> str: """Return the SUD's current status. A failed SUD only surfaces here, never in the history feed, so this is the only place a failure is detected.""" response = requests.get(f"{BASE_URL}/sov/update/{update_id}", headers=headers) response.raise_for_status() data = response.json() status = data["request"]["status"] if status == "FAILED": result = data.get("result", {}) print( f" ! SUD {update_id} FAILED: " f"{result.get('status')}: {result.get('message')}" ) elif status == "COMPLETE": print(f" SUD {update_id} complete.") return status def fetch_output(record_id: str) -> bool: """Download the latest output for a record. Return True when done with it. False means not ready yet, retry next poll. Output generation is async.""" # `revision: -1` requests the most recent revision's output for this submission. payload = {"output_format": "json", "revision": -1, "overwrite_existing": False} print(f" Fetching output for {record_id}...") response = requests.post( f"{BASE_URL}/sov/{record_id}/get_or_create_output", headers=headers, json=payload, ) response.raise_for_status() data = response.json() status = data["request"]["status"] if status == "FAILED": print(f" ! Output generation for {record_id} failed, giving up on it.") return True if status != "COMPLETE": print( f" Output for {record_id} not ready yet (status={status}), " f"will retry next poll." ) return False file_response = requests.get(data["result"]["url"], headers=headers) file_response.raise_for_status() output_path = OUTPUT_DIR / data["result"]["scrubbed_filename"] output_path.write_bytes(file_response.content) print(f" Saved {output_path}") return True # Used to recognize our own SOVs in the history feed. submitted_job_ids: set = set() # Capture the start time before submitting so the first poll catches every # job in the batch. start = datetime.now(timezone.utc).strftime("%Y%m%d%H%M%S") # Submit an initial batch so the poll loop has activity to observe from the start. OUTPUT_DIR.mkdir(exist_ok=True) print("Submitting initial batch of jobs...") for _ in range(3): submitted_job_ids.add(submit_job()) # Cursor is None on the first poll. Subsequent polls pass the value returned # by the previous response to fetch only records added since. last_cursor_id = None # Group revisions by submission. A record's pingid links it to a Ping.Vision # submission. Fall back to sovid for standalone records. The demo only prints # from this. It models the state a real integration would keep and act on, # e.g. to drive work from each submission's latest data-ready revision. submissions: dict[str, PingSubmission] = {} # Data-ready records whose outputs haven't been downloaded yet. pending_downloads: set[str] = set() # Fire exactly one SOV update, the first time one of our parsing jobs completes. sud_submitted = False sud_update_id = None poll_count = 0 while True: poll_count += 1 params = {"cursor_id": last_cursor_id, "start": start, "page_size": 10} response = requests.get(HISTORICAL_SOVS_URL, headers=headers, params=params) response.raise_for_status() data = response.json() # Advance the cursor for the next poll. Keep the prior cursor if an empty # page omits or nulls cursor_id, so we resume after the last record we saw # rather than replaying from `start`. last_cursor_id = data.get("cursor_id") or last_cursor_id print(f"Poll #{poll_count}: fetched {len(data['results'])} record(s)") for record in data["results"]: submission_key = record["pingid"] or record["sovid"] if submission_key not in submissions: submissions[submission_key] = PingSubmission(pingid=submission_key) print(f"--- New submission: {submission_key} ---") submissions[submission_key].add_revision( record_type=record["record_type"], revision=record.get("revision"), id=record["id"], is_data_ready=bool(record.get("is_data_ready")), ) kind = "SOV" if record["record_type"] == "ORIG" else "SUD" state = "complete" if record.get("status") == "C" else "failed" print(f" + {kind} {record['record_type']} ({state}): {record['id']}") if record.get("status") == "F": print(f" ! {record['id']} failed, skipping update and download") continue # Update the first completed ORIG SOV submitted if ( not sud_submitted and record["record_type"] == "ORIG" and record["sovid"] in submitted_job_ids ): print( f" First of our SOVs complete, submitting an update " f"for {record['sovid']}" ) sud_update_id = submit_sud(record["sovid"]) sud_submitted = True # The feed flags each record's data as ready to download via # is_data_ready. Queue ready records, revisit the rest next poll. if record.get("is_data_ready"): pending_downloads.add(record["id"]) else: print( f" Not data-ready yet, awaiting Ping HITL " f"certification: {record['id']}" ) # Try queued downloads. Anything not ready stays queued for the next poll. for record_id in list(pending_downloads): if fetch_output(record_id): pending_downloads.discard(record_id) # Track our SUD to a terminal state. On completion, queue its own output # for download. A failed SUD only surfaces here, never in the feed. if sud_update_id: sud_status = check_sud_status(sud_update_id) if sud_status == "COMPLETE": pending_downloads.add(sud_update_id) sud_update_id = None elif sud_status == "FAILED": sud_update_id = None print( f"Tracking {len(submissions)} submission(s), " f"polling again in {POLL_SECONDS}s..." ) time.sleep(POLL_SECONDS) ``` # Get or Create an SOV Output Source: https://docs.pingintel.com/workflows/ping-extraction/get-or-create-output Example workflow for requesting an additional output format from an existing SOV via the **Ping.Extraction** API Below describes an example workflow of API calls that can be made in order to retrieve an output for an SOV that has already been parsed. Reach for this workflow when one of the following is true: * You need an output format that was not requested at parse time. The original [Start SOV Parsing Job](/ping-extraction/parse-sovs/start-sov-parsing-job) call accepts an `output_formats` list. Any format you did not include there will not exist until you request it here. * You want to regenerate an existing output. Pass `overwrite_existing` as `true` to discard the cached file and produce a fresh one. * You want to fetch an output for a specific revision of the SOV. Pass `revision` to target a specific revision: `0` for the initial SOV, a positive integer for that revision number, or `-1` (the default) for the latest. Use this workflow instead of re-submitting the source file to [Start SOV Parsing Job](/ping-extraction/parse-sovs/start-sov-parsing-job): the SOV is already parsed, and this endpoint reuses that work. It returns a cached output immediately if one is available. Otherwise, it starts a new generation job and returns a request ID to poll. This workflow uses two distinct IDs in two different shapes. Keep them separate: * **SOV ID** — the ID of the parsed SOV (or SOV Update), returned by the original parsing job (e.g., `s-no-ping-hggcsk`). Pass this in the path of the POST. * **Output request ID** — a UUID returned in the POST response under `request.id` (e.g., `9f4d8c10-3b7e-4a52-bd91-c823f15e4d76`). Pass this in the path of the GET when polling. When the output is already cached, the request ID carries an `immediately-done-` prefix (for example, `immediately-done-7b3c1a04-2d6e-4f95-bf18-a08e25c4d731`). Treat the ID as opaque — use `request.status` to determine completion rather than parsing the prefix. The sample Python script is available for download at the bottom of the page. Try filling in the blanks (e.g., \{sovid}, \{request\_id}) to go through the workflow using cURL! ### 1. Request the SOV Output The first API call to make is [Get Or Create SOV Output](/ping-extraction/get-sov-data/get-or-create-sov-output). Supply the SOV ID in the path and the desired `output_format` in the request body. If a matching output is already cached, the response returns `request.status` of `COMPLETE` and the result is available immediately — skip step 2 and go to step 3. Otherwise, the response returns a pending status and an `id` you will use to poll. `output_format` accepts either lowercase or uppercase. If the supplied format is not enabled for your organization, the response is a `400` with a `message` listing the formats you may request. To discover the allowed values up front, call [List Available Output Formats](/ping-extraction/get-sov-data/list-available-output-formats). Set `overwrite_existing` to `true` to force regeneration even when a cached output exists. Set `revision` to select a specific SOV revision. `-1` (the default) selects the latest revision and `0` selects the initial SOV. A positive integer selects that revision by number. If the SOV has no revision with that number, the response is a `404` with `{"detail": "Not found."}`. Revision is ignored when the path ID is a SUD ID. E.g., `https://api.sovfixer.com/api/v1/sov/s-no-ping-hggcsk/get_or_create_output` **Example code:** ```python get_or_create_output.py lines icon='python' theme={null} import time import requests import os # authentication token that allows you to make requests to the API API_KEY = os.environ.get("SOVFIXER_AUTH_TOKEN") headers = {"Authorization": f"Token {API_KEY}"} # SOV ID from a previously completed parsing job sovid = "s-no-ping-hggcsk" # request options payload = { # which output format do you want? e.g., json, auditor "output_format": "json", # latest revision (-1) or initial SOV (0) "revision": -1, # set to true to regenerate even if a cached output already exists "overwrite_existing": False, } # 1. API URL for Get Or Create SOV Output: https://api.sovfixer.com/api/v1/sov/{sovid}/get_or_create_output start_url = f"https://api.sovfixer.com/api/v1/sov/{sovid}/get_or_create_output" start_response = requests.post(start_url, json=payload, headers=headers) assert start_response.status_code in (200, 201) start_json = start_response.json() # the request.id is the polling ID for step 2 — it is NOT the SOV ID request_id = start_json["request"]["id"] status = start_json["request"]["status"] ## ... ``` ```shell cURL output icon='square-terminal' theme={null} curl --request POST \ --url "https://api.sovfixer.com/api/v1/sov/{sovid}/get_or_create_output" \ --header "Authorization: Token " \ --header "Content-Type: application/json" \ --data '{ "output_format": "json", "revision": -1, "overwrite_existing": false }' ``` **Example response (cached output already available):** ```python Python output lines icon='python' theme={null} { "request": { "id": "immediately-done-7b3c1a04-2d6e-4f95-bf18-a08e25c4d731", "status": "COMPLETE" }, "result": { "label": "JSON", "output_format": "JSON", "scrubbed_filename": "parse_sov_testfile.json", "url": "https://api.sovfixer.com/api/v1/sov/s-no-ping-hggcsk/output/parse_sov_testfile.json" } } ``` ```shell cURL output icon='square-terminal' theme={null} { "request": { "id": "immediately-done-7b3c1a04-2d6e-4f95-bf18-a08e25c4d731", "status": "COMPLETE" }, "result": { "label": "JSON", "output_format": "JSON", "scrubbed_filename": "parse_sov_testfile.json", "url": "https://api.sovfixer.com/api/v1/sov/s-no-ping-hggcsk/output/parse_sov_testfile.json" } } ``` **Example response (generation started):** ```python Python output lines icon='python' theme={null} { "request": { "id": "9f4d8c10-3b7e-4a52-bd91-c823f15e4d76", "status": "PENDING" } } ``` ```shell cURL output icon='square-terminal' theme={null} { "request": { "id": "9f4d8c10-3b7e-4a52-bd91-c823f15e4d76", "status": "PENDING" } } ``` ### 2. Poll the SOV Output Request The second API call to make is [Get/Check SOV Output Result](/ping-extraction/parse-sovs/getcheck-sov-output-result). Skip this step if step 1 already returned `COMPLETE`. Otherwise, pass the `request.id` from step 1 in the path and poll until `request.status` is `COMPLETE` or `FAILED`. When the status is `COMPLETE`, `result` contains `label`, `output_format`, `scrubbed_filename`, and `url`. When the status is `FAILED`, `result.message` contains a description of the error. E.g., `https://api.sovfixer.com/api/v1/sov/get_or_create_output/9f4d8c10-3b7e-4a52-bd91-c823f15e4d76` **Example code:** ```python get_or_create_output.py lines icon='python' theme={null} ## ... # 2. API URL for Get/Check SOV Output Result: https://api.sovfixer.com/api/v1/sov/get_or_create_output/{request_id} check_url = f"https://api.sovfixer.com/api/v1/sov/get_or_create_output/{request_id}" check_json = start_json # Poll every three seconds for output generation while check_json["request"]["status"] not in ("COMPLETE", "FAILED"): print(check_json) print("Waiting 3 seconds to request again...") time.sleep(3) check_response = requests.get(check_url, headers=headers) assert check_response.status_code in (200, 201) check_json = check_response.json() print(check_json) assert check_json["request"]["status"] != "FAILED", "Output generation failed" result = check_json["result"] ## ... ``` ```shell cURL output icon='square-terminal' theme={null} curl --request GET \ --url "https://api.sovfixer.com/api/v1/sov/get_or_create_output/{request_id}" \ --header "Authorization: Token " ``` **Example response:** ```python Python output lines icon='python' theme={null} { "request": { "status": "COMPLETE" }, "result": { "label": "JSON", "output_format": "JSON", "scrubbed_filename": "parse_sov_testfile.json", "url": "https://api.sovfixer.com/api/v1/sov/s-no-ping-hggcsk/output/parse_sov_testfile.json" } } ``` ```shell cURL output icon='square-terminal' theme={null} { "request": { "status": "COMPLETE" }, "result": { "label": "JSON", "output_format": "JSON", "scrubbed_filename": "parse_sov_testfile.json", "url": "https://api.sovfixer.com/api/v1/sov/s-no-ping-hggcsk/output/parse_sov_testfile.json" } } ``` ### 3. Download the Output Download the file directly from the `result.url` returned by the completed request. Save the response body as binary. The URL serves the file in its native format (e.g., JSON, XLSX). **Example code:** ```python get_or_create_output.py lines icon='python' theme={null} ## ... # 3. Download the output from result.url download_response = requests.get(result["url"], headers=headers) assert download_response.status_code in (200, 201) output_path = f"workflow_example_results/{result['scrubbed_filename']}" os.makedirs(os.path.dirname(output_path), exist_ok=True) with open(output_path, "wb") as outfile: outfile.write(download_response.content) print(f"saved {result['scrubbed_filename']}") ``` ```shell cURL output icon='square-terminal' theme={null} curl --request GET \ --url "" \ --header "Authorization: Token " \ --output "" ``` **Example response:** ```python Python output lines icon='python' theme={null} saved parse_sov_testfile.json ``` ```shell cURL output icon='square-terminal' theme={null} # file written to parse_sov_testfile.json ``` ### Python Demo                                  Download Python Script here ```python get_or_create_sov_output.py lines icon='python' theme={null} """Demo: request and download an output for an existing SOV. Two IDs are involved. Keep them separate: - SOVID: identifies the parsed SOV, passed in the POST path. - request_id: returned by the POST under request.id, used to poll the GET. """ import os import time import requests BASE_URL = "https://api.sovfixer.com/api/v1" SOVID = "s-no-ping-hggcsk" # SOV ID from a previously completed parsing job OUTPUT_FORMAT = "json" # desired output format, e.g., json or auditor POLL_SECONDS = 3 API_KEY = os.environ.get("SOVFIXER_AUTH_TOKEN") headers = {"Authorization": f"Token {API_KEY}"} # 1. Request the output. If a cached output is available the response # returns COMPLETE immediately. Otherwise, generation begins and we # receive a request.id to poll. start_url = f"{BASE_URL}/sov/{SOVID}/get_or_create_output" payload = {"output_format": OUTPUT_FORMAT, "revision": -1, "overwrite_existing": False} start_json = requests.post(start_url, json=payload, headers=headers).json() request_id = start_json["request"]["id"] # 2. Poll until the output is ready. request_id is the polling ID — not SOVID. check_url = f"{BASE_URL}/sov/get_or_create_output/{request_id}" check_json = start_json while check_json["request"]["status"] not in ("COMPLETE", "FAILED"): time.sleep(POLL_SECONDS) check_json = requests.get(check_url, headers=headers).json() if check_json["request"]["status"] == "FAILED": raise RuntimeError(f"Output generation failed: {check_json}") # 3. Download the file. result.url serves the output in its native format, # so write the response body as binary. result = check_json["result"] download = requests.get(result["url"], headers=headers) os.makedirs("workflow_example_results", exist_ok=True) with open(f"workflow_example_results/{result['scrubbed_filename']}", "wb") as f: f.write(download.content) print(f"saved {result['scrubbed_filename']}") ``` # Monitor SOV Activity Source: https://docs.pingintel.com/workflows/ping-extraction/monitor-sov-activity Example workflow for tracking every new SOV and SOV Update across an account via the **Ping.Extraction** API This example describes an integration that tracks every SOV processed or updated in **Ping.Extraction**. The workflow described polls a single cursor-paginated endpoint which supplies all completed or failed items. This workflow only observes activity. To submit parsing jobs and updates from the same loop that tracks them, see [Build an SOV Pipeline](/workflows/ping-extraction/build-sov-pipeline). This cursor-based approach is preferred over callbacks, because: * the client system doesn't need to expose any endpoints to the public internet. * authentication is one-way * if a problem or outage occurs on either side, recovering the lost messages is simple: just back the cursor up and reprocess the missed section as desired. * the client only needs to poll a single endpoint, at any desired frequency (5 seconds or 5 days!), rather than tracking multiple in-flight requests to observe transactional status The code blocks let you choose between Python and cURL. A runnable Python script is available for download at the bottom of the page. Try filling in the blanks (e.g., `{id}`) to go through the workflow using cURL. This workflow demonstrates how to: * Poll [List Historical SOVs](/ping-extraction/get-sov-data/list-historical-sovs) for new activity using a cursor. * Distinguish SOVs from updates (SUDs, for SOV Update Data) in the response. * Fetch full details using [Get Historical SOV](/ping-extraction/get-sov-data/get-historical-sov). ### 1. Poll List Historical SOVs Poll [List Historical SOVs](/ping-extraction/get-sov-data/list-historical-sovs) to retrieve a chronological list of SOVs and SUDs processed by the system. The endpoint is cursor-paginated: pass the `cursor_id` returned by the previous response to fetch only records added since the last poll. Treat the cursor as opaque — pass it through unchanged rather than parsing it. Save each returned `id` if you plan to fetch full details in step 2. Each result includes a `record_type`. `ORIG` indicates a newly parsed SOV. Any other value indicates a later revision (an SUD). The accompanying `revision` field is `0` for the original record and increments with each update. `status` uses single-letter codes: `C` for complete and `F` for failed. **Example code:** ```python monitor_sov_activity.py lines icon='python' theme={null} import os import time from dataclasses import dataclass from datetime import datetime, timedelta, timezone from pprint import pprint import requests @dataclass(frozen=True) class HistoryItem: id: str revision: int record_type: str is_data_ready: bool = False # Auth token; generate one at https://auth.pingintel.com/account/api_keys/ API_KEY = os.environ.get("SOVFIXER_AUTH_TOKEN") BASE_URL = "https://api.sovfixer.com/api/v1" HISTORICAL_SOVS_URL = f"{BASE_URL}/sov/history" headers = {"Authorization": f"Token {API_KEY}"} # `start` isn't required. leaving it out/passing null starts at the beginning of time. start = (datetime.now(timezone.utc) - timedelta(days=7)).strftime("%Y%m%d%H%M%S") # `cursor` is None on the first poll; subsequent polls pass the value returned # by the previous response to fetch only records added since. last_cursor_id = None # Track revisions already reported, keyed by id. Storing the full HistoryItem # models the state a real integration would keep, e.g. to compare revisions # as they land. ids_seen: dict[str, HistoryItem] = {} def process_record(record): """Perform storage, actions, logging, etc. here.""" # `record_type` "ORIG" is an original SOV. Any other value indicates a # later revision (SUD). kind = "SOV" if record["record_type"] == "ORIG" else "SUD" print(f"--- New {kind} ---") pprint(record) while True: params = {"cursor_id": last_cursor_id, "start": start, "page_size": 50} response = requests.get(HISTORICAL_SOVS_URL, headers=headers, params=params) response.raise_for_status() data = response.json() # Advance the cursor for the next poll. Keep the prior cursor if an empty # page omits or nulls cursor_id, so we resume after the last record we saw # rather than replaying from `start`. last_cursor_id = data.get("cursor_id") or last_cursor_id for record in data["results"]: if record["id"] in ids_seen: continue ids_seen[record["id"]] = HistoryItem( id=record["id"], revision=record.get("revision"), record_type=record["record_type"], is_data_ready=bool(record.get("is_data_ready")), ) process_record(record) print("Waiting 30 seconds to poll again...") time.sleep(30) ``` ```shell cURL output icon='square-terminal' theme={null} # First poll: scope by start. curl --request GET \ --header "Authorization: Token " \ --url "https://api.sovfixer.com/api/v1/sov/history?start=20260526000000&page_size=50" # Subsequent polls: pass the cursor_id from the previous response. curl --request GET \ --header "Authorization: Token " \ --url "https://api.sovfixer.com/api/v1/sov/history?cursor_id={cursor_id}&page_size=50" ``` **Example response:** ```json JSON output lines icon='json' theme={null} { "cursor_id": "s-lo-ping-zk9q2x", "results": [ { "client_ref": null, "completed_time": "2026-03-24T13:46:04.165482Z", "id": "s-lo-ping-9xkw3m", "incremental": false, "is_data_ready": false, "pingid": null, "record_type": "ORIG", "revision": 0, "sovid": "s-lo-ping-9xkw3m", "status": "C" }, { "client_ref": null, "completed_time": "2026-03-24T14:02:17.831204Z", "id": "s-lo-ping-4j2qhr", "incremental": false, "is_data_ready": false, "pingid": null, "record_type": "ORIG", "revision": 0, "sovid": "s-lo-ping-4j2qhr", "status": "F" }, { "client_ref": null, "completed_time": "2026-03-24T14:18:45.092716Z", "id": "s-lo-ping-vt7n6c", "incremental": false, "is_data_ready": false, "pingid": null, "record_type": "ORIG", "revision": 0, "sovid": "s-lo-ping-vt7n6c", "status": "C" }, { "...": "..." } ] } ``` ### 2. Get Historical SOV Details From inside the step 1 loop, call [Get Historical SOV](/ping-extraction/get-sov-data/get-historical-sov) with a record's `id` to retrieve its full processing details. The payload is wrapped under `result` and includes the source filename, row count, submission metadata, lineage fields (`original_sovid` and `previous_sovid` for tracing SUDs back to their parent SOV), and an `outputs[]` array with a download URL for each generated artifact. The demo script calls this for failed records (`status` `F`) to surface the `error_message`. E.g., `https://api.sovfixer.com/api/v1/sov/history/s-lo-ping-fd2acv` **Example code:** ```python monitor_sov_activity.py lines icon='python' theme={null} details = requests.get(f"{HISTORICAL_SOVS_URL}/{record['id']}", headers=headers) details.raise_for_status() print("details:") pprint(details.json()) ``` ```shell cURL output icon='square-terminal' theme={null} curl --request GET \ --header "Authorization: Token " \ --url "https://api.sovfixer.com/api/v1/sov/history/{id}" ``` **Example response:** ```json JSON output lines icon='json' theme={null} { "result": { "sovid": "s-lo-ping-fd2acv", "status": "C", "document_type": "SOV", "filename": "example_sov.xlsx", "sheet_name": "Sheet1", "num_rows": 311, "created_time": "2026-03-25T19:53:27.180Z", "completed_time": "2026-03-25T19:54:06.303Z", "original_sovid": null, "previous_sovid": null, "client_ref": null, "error_message": null, "from_email": null, "to_email": null, "subject": null, "organization_name": "Acme Insurance", "team_name": "Acme Insurance", "outputs": [ { "completed_time": "2026-03-25T19:54:01.507Z", "label": "DEBUGJSON", "output_format": "DEBUGJSON", "scrubbed_filename": "example_sov.debug.json", "url": "https://api.sovfixer.com/api/v1/sov/s-lo-ping-fd2acv/output/example_sov.debug.json" } ], "...": "..." } } ``` ### Python Demo A minimal runnable script that polls the history endpoint and prints each new SOV and SUD as it appears. Set `SOVFIXER_AUTH_TOKEN` and run with `python monitor_sov_activity.py`.                                  Download Python Script here ```python monitor_sov_activity.py lines icon='python' theme={null} import os import time from dataclasses import dataclass from datetime import datetime, timedelta, timezone from pprint import pprint import requests @dataclass(frozen=True) class HistoryItem: id: str revision: int record_type: str is_data_ready: bool = False # Auth token; generate one at https://auth.pingintel.com/account/api_keys/ API_KEY = os.environ.get("SOVFIXER_AUTH_TOKEN") BASE_URL = "https://api.sovfixer.com/api/v1" HISTORICAL_SOVS_URL = f"{BASE_URL}/sov/history" headers = {"Authorization": f"Token {API_KEY}"} # `start` isn't required. leaving it out/passing null starts at the beginning of time. start = (datetime.now(timezone.utc) - timedelta(days=7)).strftime("%Y%m%d%H%M%S") # `cursor` is None on the first poll; subsequent polls pass the value returned # by the previous response to fetch only records added since. last_cursor_id = None # Track revisions already reported, keyed by id. Storing the full HistoryItem # models the state a real integration would keep, e.g. to compare revisions # as they land. ids_seen: dict[str, HistoryItem] = {} def process_record(record): """Perform storage, actions, logging, etc. here.""" # `record_type` "ORIG" is an original SOV. Any other value indicates a # later revision (SUD). kind = "SOV" if record["record_type"] == "ORIG" else "SUD" print(f"--- New {kind} ---") pprint(record) # Fetch full details for failed records to surface the error_message. if record.get("status") == "F": details = requests.get(f"{HISTORICAL_SOVS_URL}/{record['id']}", headers=headers) details.raise_for_status() print("details:") pprint(details.json()) while True: params = {"cursor_id": last_cursor_id, "start": start, "page_size": 50} response = requests.get(HISTORICAL_SOVS_URL, headers=headers, params=params) response.raise_for_status() data = response.json() # Advance the cursor for the next poll. Keep the prior cursor if an empty # page omits or nulls cursor_id, so we resume after the last record we saw # rather than replaying from `start`. last_cursor_id = data.get("cursor_id") or last_cursor_id for record in data["results"]: if record["id"] in ids_seen: continue ids_seen[record["id"]] = HistoryItem( id=record["id"], revision=record.get("revision"), record_type=record["record_type"], is_data_ready=bool(record.get("is_data_ready")), ) process_record(record) print("Waiting 30 seconds to poll again...") time.sleep(30) ``` # Process an SOV Source: https://docs.pingintel.com/workflows/ping-extraction/parse-sov Example workflow for submitting an SOV via the **Ping.Extraction** API Below describes an example workflow of API calls that can be made in order to process an SOV and retrieve results using the **Ping.Extraction** API. Reach for this workflow when one of the following is true: * You have a new Excel SOV that needs to be parsed for the first time. * You need structured building data — addresses, limits, construction details, custom columns — extracted from the workbook. * You want to request one or more output formats up front (e.g., `json`, `auditor`) and have them generated in a single job. * You want third-party data integrations (e.g., Ping Geocoding `PG`, Ping Hazard `PH`) applied at parse time so they appear in the output. If the SOV is already parsed and you only need a different output format or a regenerated copy, use [Get or Create an SOV Output](/workflows/ping-extraction/get-or-create-output) instead — it reuses the parsed result rather than re-parsing the source file. If the SOV is already parsed and you need to update building attributes or regenerate outputs with revised data, see [Update an SOV](/workflows/ping-extraction/update-sov). The following is a specific example, there are more options available to the user that are documented in the Parse SOVs pages under **Ping.Extraction**. The code blocks allow the user to select from Python or cURL (via terminal) use cases. If you have already parsed an SOV and need to apply corrections or refresh enrichments, see [Update an SOV](/workflows/ping-extraction/update-sov) instead. The sample SOV and Python script are both available for download at the bottom of the page. Try filling in the blanks (e.g., \{id}) to go through the workflow using cURL! ### 1. Start SOV Parsing Job The first API call to make is [Start SOV Parsing Job](/ping-extraction/parse-sovs/start-sov-parsing-job). This endpoint allows the user to submit an Excel file to **Ping** servers to be parsed as an SOV. To see which `output_formats` your organization can request, call [List Available Output Formats](/ping-extraction/get-sov-data/list-available-output-formats). The `integrations` field accepts datasource codes (e.g., `PG`, `PH`) from [List Datasources](/ping-data/usage/list-datasources), which returns the datasources your account has access to. Supplying a format or integration not enabled for your organization causes the request to fail. **Example code:** ```python parse_sov.py lines icon='python' theme={null} import time from pathlib import Path import requests import os # authentication token that allows you to make requests to the API API_KEY=os.environ.get('SOVFIXER_AUTH_TOKEN') headers = {"Authorization": f"Token {API_KEY}"} # file being submitted file_path = Path("parse_sov_testfile.xlsx") files = {"file": ("parse_sov_testfile.xlsx", open(file_path, "rb"))} # request options payload = { # what kind of document is being processed? SOV "document_type": "SOV", # how should the file be outputted? json, auditor "output_formats": ["json", "auditor"], # what data integrations should be used? Ping Geocoding, Ping Hazard "integrations": ["PG", "PH"] } # 1. API URL for Start SOV Parsing Job: https://api.sovfixer.com/api/v1/sov start_job_url = f"https://api.sovfixer.com/api/v1/sov" # API response start_job_response = requests.post(start_job_url, data=payload, files=files, headers=headers) # check response status and record the SOV ID if start_job_response.status_code in (200, 201): sovid = start_job_response.json()["id"] else: raise RuntimeError ## ... ``` ```shell cURL output icon='square-terminal' theme={null} curl --request POST \ --url "https://api.sovfixer.com/api/v1/sov" \ --header "Authorization: Token " \ --header "Content-Type: multipart/form-data" \ --form "document_type=SOV" \ --form "output_formats=JSON" \ --form "output_formats=AUDITOR" \ --form 'integrations=PH' \ --form 'integrations=PG' \ --form "file=@parse_sov_testfile.xlsx" ``` **Example response:** ```python Python output lines icon='python' theme={null} {'id': 's-pl-ping-21nyms3', 'message': 'OK'} ``` ```shell cURL output icon='square-terminal' theme={null} { "message": "OK", "id": "s-pl-ping-21nyms3" } ``` ### 2. Check SOV Parsing Status The second API call to make is [Check SOV Parsing Job](/ping-extraction/parse-sovs/check-sov-parsing-status). This endpoint allows the user to check the status of the SOV parsing job by providing the SOV ID generated in step 1 into the API path parameter. E.g., `https://api.sovfixer.com/api/v1/sov/s-pl-ping-21nyms3` **Example code:** ```python parse_sov.py lines icon='python' theme={null} ## ... # 2. API URL for Check SOV Parsing Job: https://api.sovfixer.com/api/v1/sov/{id} check_job_url = f"https://api.sovfixer.com/api/v1/sov/{sovid}" check_job_response = requests.get(check_job_url, headers=headers) # ensure response is in a good state assert check_job_response.status_code in (200, 201) check_job_json = check_job_response.json() # Poll every three seconds for job completion while check_job_json["request"]["status"] not in ("COMPLETE", "FAILED"): print(check_job_json) print("Waiting 3 seconds to request again...") time.sleep(3) check_job_response = requests.get(check_job_url, headers=headers) # ensure response is in a good state assert check_job_response.status_code in (200, 201) check_job_json = check_job_response.json() print(check_job_json) assert check_job_json["request"]["status"] != "FAILED", "SOV parsing job failed" # record filenames and urls of the processed SOV outputs outputs = [] for output in check_job_json["result"]["outputs"]: outputs.append( { "filename": output["filename"], "url": output["url"] } ) ## ... ``` ```shell cURL output icon='square-terminal' theme={null} curl --request GET \ --url https://api.sovfixer.com/api/v1/sov/{id} \ --header 'Authorization: Token ' ``` **Example response:** ```python Python output lines icon='python' theme={null} { "request":{ "completed_at":"2026-01-13T17: 00: 05.982Z", "last_health_check_time":"2026-01-13T17: 00: 06.498Z", "last_health_status":"Processing completed, storing internal artifacts.", "pct_complete":100, "progress_started_at":"2026-01-13T16: 59: 59.443Z", "requested_at":"2026-01-13T16: 59: 58.841Z", "status":"COMPLETE" }, "result":{ "inputs":[ { "filename":"parse_sov_testfile.xlsx", "identified_document_type":"SOV", "status":"SUCCESS", "status_message":"Parsed.", "url":"https://api.sovfixer.com/api/v1/sov/s-pl-ping-21nyms3/input/parse_sov_testfile.xlsx" } ], "message":"Success.", "outputs":[ { "description":"JSON", "filename":"parse_sov_testfile.json", "url":"https://api.sovfixer.com/api/v1/sov/s-pl-ping-21nyms3/output/parse_sov_testfile.json" }, { "url":"https://api.sovfixer.com/api/v1/sov/s-pl-ping-21nyms3/output/parse_sov_testfile-Auditor.xlsx", "filename":"parse_sov_testfile-Auditor.xlsx", "description":"Ping SOV" } ], "status":"SUCCESS" } } ``` ```shell cURL output icon='square-terminal' theme={null} { "request":{ "status":"COMPLETE", "requested_at":"2026-01-13T16:36:39.015Z", "progress_started_at":"2026-01-13T16:36:39.415Z", "completed_at":"2026-01-13T16:36:45.922Z", "pct_complete":100, "last_health_status":"Processing completed, storing internal artifacts.", "last_health_check_time":"2026-01-13T16:36:46.351Z" }, "result":{ "status":"SUCCESS", "message":"Success.", "inputs":[ { "url":"https://api.sovfixer.com/api/v1/sov/s-pl-ping-21nyms3/input/parse_sov_testfile.xlsx", "status":"SUCCESS", "filename":"parse_sov_testfile.xlsx", "status_message":"Parsed.", "identified_document_type":"SOV" } ], "outputs":[ { "url":"https://api.sovfixer.com/api/v1/sov/s-pl-ping-21nyms3/output/parse_sov_testfile.json", "filename":"parse_sov_testfile.json", "description":"JSON" }, { "url":"https://api.sovfixer.com/api/v1/sov/s-pl-ping-21nyms3/output/parse_sov_testfile-Auditor.xlsx", "filename":"parse_sov_testfile-Auditor.xlsx", "description":"Ping SOV" } ] } } ``` ### 3. Fetch Outputs of SOV Parsing Job The third API call to make is [Fetch Outputs of SOV Parsing Job](/ping-extraction/parse-sovs/fetch-outputs-of-sov-parsing-job). This endpoint allows the user to receive the contents of the completed SOV parsing job by providing the SOV ID generated in step 1 and the output filename generated in step 2 into the API path parameter. E.g., `https://api.sovfixer.com/api/v1/sov/s-pl-ping-21nyms3/output/parse_sov_testfile.json` **Example code:** ```python parse_sov.py lines icon='python' theme={null} ## ... # 3. API URL for Fetch Outputs of SOV Parsing Job: https://api.sovfixer.com/api/v1/sov/{id}/output/{filename} for output in outputs: fetch_outputs_response = requests.get(output["url"], headers=headers) # ensure response is in a good state assert fetch_outputs_response.status_code in (200, 201) print(f"saving {output['filename']}") output_path = f"workflow_example_results/{output['filename']}" os.makedirs(os.path.dirname(output_path), exist_ok=True) with open(output_path, "wb") as outfile: outfile.write(fetch_outputs_response.content) print(f"saved {output['filename']}") ``` ```shell cURL output icon='square-terminal' theme={null} # get .json file curl --request GET \ --url "https://api.sovfixer.com/api/v1/sov/{id}/output/parse_sov_testfile.json" \ --header "Authorization: Token " \ --output parse_sov_testfile.json \ && jq . parse_sov_testfile.json | head -n 4 # get .xlsx file curl --request GET \ --url "https://api.sovfixer.com/api/v1/sov/{id}/output/parse_sov_testfile-Auditor.xlsx" \ --header "Authorization: Token " \ --output parse_sov_testfile-Auditor.xlsx ``` **Example response:** ```python Python output lines icon='python' theme={null} saving parse_sov_testfile.json 'id': 's-pl-ping-3yskss' 'source_filename': 'parse_sov_testfile.xlsx' 'num_buildings': 311 saved parse_sov_testfile.json saving parse_sov_testfile-Auditor.xlsx saved parse_sov_testfile-Auditor.xlsx ``` ```shell cURL output icon='square-terminal' theme={null} { "id": "s-pl-ping-21nyms3", "source_filename": "parse_sov_testfile.xlsx", "num_buildings": 311, # ... ``` ### Python Demo                      Download Python Script here **|||** Download Example SOV here ```python parse_sov.py lines icon='python' theme={null} import json import time from pathlib import Path import requests import os # authentication token that allows you to make requests to the API API_KEY=os.environ.get('SOVFIXER_AUTH_TOKEN') headers = {"Authorization": f"Token {API_KEY}"} # file being submitted file_path = Path("parse_sov_testfile.xlsx") files = {"file": ("parse_sov_testfile.xlsx", open(file_path, "rb"))} # request options payload = { # what kind of document is being processed? SOV "document_type": "SOV", # how should the file be outputted? json, auditor "output_formats": ["json", "auditor"], # what data integrations should be used? Ping Geocoding, Ping Hazard "integrations": ["PG", "PH"] } # 1. API URL for Start SOV Parsing Job: https://api.sovfixer.com/api/v1/sov start_job_url = f"https://api.sovfixer.com/api/v1/sov" # API response start_job_response = requests.post(start_job_url, data=payload, files=files, headers=headers) # check response status and record the SOV ID if start_job_response.ok is True: sovid = start_job_response.json()["id"] else: raise ValueError ## ... # 2. API URL for Check SOV Parsing Job: https://api.sovfixer.com/api/v1/sov/{id} check_job_url = f"https://api.sovfixer.com/api/v1/sov/{sovid}" check_job_response = requests.get(check_job_url, headers=headers).json() # Poll every three seconds for job completion while check_job_response["request"]["status"] not in ("COMPLETE", "FAILED"): print(check_job_response) print("Waiting 3 seconds to request again...") time.sleep(3) check_job_response = requests.get(check_job_url, headers=headers).json() print(check_job_response) if check_job_response["request"]["status"] == "FAILED": raise NotImplementedError # record the outputteds filename of the processed SOV output_filenames = [] for output in check_job_response["result"]["outputs"]: output_filenames.append(output["filename"]) ## ... # 3. API URL for Fetch Outputs of SOV Parsing Job: https://api.sovfixer.com/api/v1/sov/{id}/output/{filename} for output_filename in output_filenames: fetch_outputs_url = f"https://api.sovfixer.com/api/v1/sov/{sovid}/output/{output_filename}" fetch_outputs_response = requests.get(fetch_outputs_url, headers=headers) print(f"saving {output_filename}") if output_filename.endswith("json"): with open(f"workflow_example_results/{output_filename}", "w") as outfile: json.dump(fetch_outputs_response.json(), outfile, indent=4) for k, v in list(fetch_outputs_response.json().items())[:4]: print(f"{k!r}: {v!r}") elif output_filename.endswith("xlsx"): with open(f"workflow_example_results/{output_filename}", "wb") as outfile: outfile.write(fetch_outputs_response.content) else: NotImplementedError print(f"saved {output_filename}") ``` # Update an SOV Source: https://docs.pingintel.com/workflows/ping-extraction/update-sov Example workflow for updating an existing SOV via the **Ping.Extraction** API Update an existing SOV by uploading a CSV of revised building attributes, starting the update job, and downloading the regenerated outputs. The workflow calls four endpoints in sequence: [initiate an update job](/ping-extraction/update-sovs/initiate-sov-update-job), [upload one or more location CSV files](/ping-extraction/update-sovs/add-locations-to-sov-update-job), [start processing](/ping-extraction/update-sovs/start-sov-update-job), and [poll for completion](/ping-extraction/update-sovs/check-sov-update-status). **Reach for this workflow when:** * You have corrected or revised building attributes for an existing SOV and need regenerated outputs. * You want to trigger a scrubber reoutput (`SCRUB`) without re-uploading the original source file. * You need to refresh third-party data enrichments on a subset of buildings. * You are building a pipeline that applies upstream data changes back to a processed SOV. This workflow assumes the source file has already been parsed and you have a `sovid` from that earlier job. If you need to parse a new SOV for the first time, see [Process an SOV](/workflows/ping-extraction/parse-sov) instead. To run an update as one stage of a larger loop that also submits parsing jobs and tracks every revision through history polling, see [Build an SOV Pipeline](/workflows/ping-extraction/build-sov-pipeline). ### 0. Preamble Set up authentication before starting the workflow. **update\_sov.py** ```python theme={null} import os import time import requests API_KEY = os.environ.get("SOVFIXER_AUTH_TOKEN") headers = {"Authorization": f"Token {API_KEY}"} sovid = "s-no-ping-hggcsk" ``` ### 1. Initiate SOV Update Job The first API call to make is [Initiate SOV Update Job](/ping-extraction/update-sovs/initiate-sov-update-job). This endpoint creates an update job tied to an existing SOV. Supply the `sovid` path parameter. `update_type` is optional and defaults to `API` if omitted. Pass `SCRUB` to trigger a scrubber reoutput. You can also pass an optional `callback_url` for webhook delivery and a `client_ref` for your own records. Save the returned `id`. Every subsequent call in this workflow uses it. The linked reference page enumerates all available `update_type` values. `POST /api/v1/sov/{sovid}/initiate_update` ```python update_sov.py lines icon='python' theme={null} resp = requests.post( f"https://api.sovfixer.com/api/v1/sov/{sovid}/initiate_update", headers=headers, ) print(resp.json()) resp.raise_for_status() update_id = resp.json()["id"] ``` ```shell cURL icon='square-terminal' theme={null} curl --request POST \ --url https://api.sovfixer.com/api/v1/sov/{sovid}/initiate_update \ --header 'Authorization: Token ' \ --header 'Content-Type: application/json' \ ``` Example response: ```json theme={null} { "message": "OK", "id": "s-no-ping-hggcsk-r001" } ``` ### 2. Add Locations to SOV Update Job The second API call to make is [Add Locations to SOV Update Job](/ping-extraction/update-sovs/add-locations-to-sov-update-job). Upload a CSV containing the building attributes you want to update. Each row must identify the target building using `item_key` or both `sheet_name` and `sheet_row_number`. Call this endpoint before starting the job, and repeat it to upload locations in batches. For a `SCRUB` reoutput with no data changes, skip this step and start the job directly. `POST /api/v1/sov/update/{update_id}/add_locations` ```python update_sov.py lines icon='python' theme={null} with open("corrections.csv", "rb") as f: resp = requests.post( f"https://api.sovfixer.com/api/v1/sov/update/{update_id}/add_locations", files={"file": ("corrections.csv", f)}, headers=headers, ) print(resp.json()) resp.raise_for_status() ``` ```shell cURL icon='square-terminal' theme={null} curl --request POST \ --url https://api.sovfixer.com/api/v1/sov/update/{update_id}/add_locations \ --header 'Authorization: Token ' \ --form file='@corrections.csv' ``` Example response: ```json theme={null} { "message": "OK" } ``` Example response (400 — invalid CSV attribute): ```json theme={null} { "file": "sheet_row_numbah: unknown attribute" } ``` Example response (409 — job is no longer pending): ```json theme={null} { "message": "rejected locations file as SUD not pending" } ``` ### 3. Start SOV Update Job The third API call to make is [Start SOV Update Job](/ping-extraction/update-sovs/start-sov-update-job). Once all locations are uploaded, start the job. `extra_data` is optional and defaults to an empty object, but its values drive the output filename — pass fields like `insured_name` when you have them. Specify the output formats you want generated. To see which `output_formats` your organization can request, call [List Available Output Formats](/ping-extraction/get-sov-data/list-available-output-formats). The job processes asynchronously, and the response confirms it has been queued. `POST /api/v1/sov/update/{update_id}/start` ```python update_sov.py lines icon='python' theme={null} resp = requests.post( f"https://api.sovfixer.com/api/v1/sov/update/{update_id}/start", json={ "extra_data": {"insured_name": "Acme Corp"}, "output_formats": ["json"], }, headers=headers, ) print(resp.json()) resp.raise_for_status() ``` ```shell cURL icon='square-terminal' theme={null} curl --request POST \ --url https://api.sovfixer.com/api/v1/sov/update/{update_id}/start \ --header 'Authorization: Token ' \ --header 'Content-Type: application/json' \ --data '{"extra_data": {"insured_name": "Acme Corp"}, "output_formats": ["json"]}' ``` Example response: ```json theme={null} { "message": "OK" } ``` ### 4. Check SOV Update Status The fourth API call to make is [Check SOV Update Status](/ping-extraction/update-sovs/check-sov-update-status). Poll this endpoint until `request.status` is `COMPLETE` or `FAILED`. The `result` key is absent from the response until the job completes. When complete, `result.outputs` lists the generated files available for download. `GET /api/v1/sov/update/{update_id}` ```python update_sov.py lines icon='python' theme={null} status_url = f"https://api.sovfixer.com/api/v1/sov/update/{update_id}" response_json = requests.get(status_url, headers=headers).json() while response_json["request"]["status"] not in ("COMPLETE", "FAILED"): print(response_json) print("Waiting 3 seconds to request again...") time.sleep(3) response_json = requests.get(status_url, headers=headers).json() print(response_json) outputs = response_json.get("result", {}).get("outputs", []) ``` ```shell cURL icon='square-terminal' theme={null} curl --request GET \ --url https://api.sovfixer.com/api/v1/sov/update/{update_id} \ --header 'Authorization: Token ' ``` Example response (in progress): ```json theme={null} { "request": { "request_uuid": "019e7b2ac9137c5d8e32dd64ef953b21", "status": "IN_PROGRESS", "completed_at": null, "pct_complete": 30, "last_health_status": "Priming enrichment cache.", "last_health_check_time": "2026-06-03T22:15:57.590Z", "sudid": "s-no-ping-hggcsk-r001", "record_type": "SCRUB" } } ``` Example response (complete): ```json theme={null} { "request": { "request_uuid": "019e7b2ac9137c5d8e32dd64ef953b21", "status": "COMPLETE", "completed_at": "2026-06-03T22:16:01.393Z", "pct_complete": 100, "last_health_status": "Processing completed, storing internal artifacts.", "last_health_check_time": "2026-06-03T22:16:01.398Z", "sudid": "s-no-ping-hggcsk-r001", "record_type": "SCRUB" }, "result": { "status": "SUCCESS", "message": "Success.", "outputs": [ { "description": "JSON", "filename": "Acme Corp 2026-06.json", "url": "https://api.sovfixer.com/api/v1/sov/s-no-ping-hggcsk-r001/output/Acme%20Corp%202026-06.json" } ] } } ``` `result` is absent until `request.status` reaches `COMPLETE` or `FAILED`. On failure, `result.status` is `FAILED_TO_PARSE` or `FAILED_TO_PROCESS`, and `result.message` describes the error. Example response (failed): ```json theme={null} { "request": { "request_uuid": "019e7b2ac9137c5d8e32dd64ef953b21", "status": "FAILED", "completed_at": "2026-06-03T22:16:01.393Z", "pct_complete": 100, "last_health_status": "Processing failed.", "last_health_check_time": "2026-06-03T22:16:01.398Z", "sudid": "s-no-ping-hggcsk-r001", "record_type": "SCRUB" }, "result": { "status": "FAILED_TO_PROCESS", "message": "" } } ``` ### 5. Fetch Outputs Download each file listed in `result.outputs`. Use the `filename` to name the saved file locally. ```python update_sov.py lines icon='python' theme={null} for out in outputs: print(f"saving {out['filename']}") r = requests.get(out["url"], headers=headers) r.raise_for_status() with open(out["filename"], "wb") as f: f.write(r.content) print(f"saved {out['filename']}") ``` ```shell cURL icon='square-terminal' theme={null} curl --request GET \ --url '' \ --header 'Authorization: Token ' \ --output '' ``` ### Python Demo A runnable script that initiates the update job, uploads `corrections.csv`, starts processing, polls for completion, and downloads each generated output. Set `SOVFIXER_AUTH_TOKEN` and place `corrections.csv` in the working directory, then run with `python update_sov.py`.                  Download Python Script here ||| Download corrections.csv here ```python update_sov.py lines icon='python' theme={null} import os import time import requests API_KEY = os.environ.get("SOVFIXER_AUTH_TOKEN") BASE_URL = "https://api.sovfixer.com/api/v1" SOVID = "s-no-ping-hggcsk" LOCATIONS_CSV = "corrections.csv" EXTRA_DATA = {"insured_name": "Acme Corp"} # policy-level fields to carry into output OUTPUT_FORMATS = ["json"] POLL_SECONDS = 3 headers = {"Authorization": f"Token {API_KEY}"} # 1. Initiate the update job resp = requests.post( f"{BASE_URL}/sov/{SOVID}/initiate_update", headers=headers, ) print(resp.json()) resp.raise_for_status() UPDATE_ID = resp.json()["id"] print("initiated update job:", UPDATE_ID) # 2. Add locations from CSV with open(LOCATIONS_CSV, "rb") as f: resp = requests.post( f"{BASE_URL}/sov/update/{UPDATE_ID}/add_locations", files={"file": (LOCATIONS_CSV, f)}, headers=headers, ) print(resp.json()) resp.raise_for_status() # 3. Start the job. extra_data is optional but drives the output filename resp = requests.post( f"{BASE_URL}/sov/update/{UPDATE_ID}/start", json={"extra_data": EXTRA_DATA, "output_formats": OUTPUT_FORMATS}, headers=headers, ) print(resp.json()) resp.raise_for_status() # 4. Poll until the job reaches a terminal state status_url = f"{BASE_URL}/sov/update/{UPDATE_ID}" response_json = requests.get(status_url, headers=headers).json() while response_json["request"]["status"] not in ("COMPLETE", "FAILED"): print(response_json) print("Waiting 3 seconds to request again...") time.sleep(POLL_SECONDS) response_json = requests.get(status_url, headers=headers).json() print(response_json) print("final status:", response_json["request"]["status"]) # 5. Download outputs for out in response_json.get("result", {}).get("outputs", []): print(f"saving {out['filename']}") r = requests.get(out["url"], headers=headers) r.raise_for_status() with open(out["filename"], "wb") as f: f.write(r.content) print(f"saved {out['filename']}") ``` # How to: Integrate an External System Source: https://docs.pingintel.com/workflows/ping-vision/clear-and-triage Example workflow for processing a submission via the **Ping.Vision** API This page describes an end-to-end clearance workflow using the **Ping.Vision** API. Code examples are available in Python and cURL. The complete Python script is available for download at the bottom of the page. Reach for this workflow when one of the following is true: * You're integrating an existing underwriting or clearance system with Ping.Vision end-to-end, not just pushing submissions in. * You need Ping to clear submissions against appetite and underwriting rules, and your system needs to react to the resulting status transitions. * You want preliminary Ping.Maps and data analytics available before the submission is accepted. * You need final data correction and enrichment to run after acceptance and feed back into your system. For a simpler "submit a file and download the outputs" use case without clearance or status-driven branching, use [Send and Track SOV Submission](/workflows/ping-vision/send-and-track-submission) instead. This is a complete, working example demonstrating how an existing system can be integrated with Ping to use Ping for: 1. Submission 2. Preliminary Ping.Maps and data analytics 3. Clearance against appetite and underwriting rules 4. Acceptance, triggering final data correction and enrichment **Understanding the Workflow Architecture** Each step is labeled as: * USER ACTION: Operations initiated by a broker, underwriter, or clearance team * PING: Operations handled by Ping's team or automated backend processes **Note**: In production, event polling (Step 3) runs as a background process watching **all** submissions for your team/division. This demo filters to a single submission for clarity. ### 0. Preamble Import necessary libraries, set up authentication, and define helper functions for API calls and console output formatting. ```python clear_and_triage.py lines icon='python' theme={null} import argparse import os import threading import time from datetime import datetime, timezone from pathlib import Path import requests # How often to poll for status changes (in seconds) POLL_INTERVAL = 15 # Shared state dictionary for tracking submission statuses across threads # Maps pingid -> current status UUID db: dict[str, str] = {} def color_text(text: str, color: str) -> str: """ Wrap *text* in ANSI escape codes so it renders in the given *color* when printed to a terminal. Supported colors: "red", "yellow", "green". If an unsupported color is passed the text is returned unmodified. """ colors = {"red": "\033[31m", "yellow": "\033[33m", "green": "\033[32m"} if color not in colors: return text reset = "\033[0m" return f"{colors[color]}{text}{reset}" def authenticate(api_url: str, auth_token: str) -> dict: """ Authenticate to the Ping.Vision API and return the necessary headers and base URL. """ if auth_token is None: auth_token = os.environ.get("PINGVISION_AUTH_TOKEN_LOCAL") if not auth_token: raise RuntimeError("No auth token provided. Set PINGVISION_AUTH_TOKEN_LOCAL or pass --auth-token") base_url = api_url.rstrip("/") if not base_url.endswith("/api/v1"): base_url = f"{base_url}/api/v1" headers = {"Authorization": f"Token {auth_token}"} return headers, base_url ``` ### 1. List User Teams Retrieve your team configuration including `team_uuid`, `division_uuid`, and workflow `statuses`. Use [List User Teams](/ping-vision/user-memberships/list-user-teams) to get team info and [List Submission Statuses](/ping-vision/miscellaneous/list-submission-statuses) to map status names to UUIDs. **Example code:** ```python clear_and_triage.py lines icon='python' theme={null} def get_team(base_url: str, headers: dict, company_name: str, team_name: str) -> dict: """ Look up a Ping.Vision team by its company and team display names. This calls the Ping.Vision list_teams endpoint and searches for an exact match on both company_name and team_name. Use it early in your workflow to obtain the team_uuid and division_uuid you'll need for submission creation and status lookups. If the team is not found, all available teams are printed to the console to help you identify the correct names, and a RuntimeError is raised. """ list_teams_url = f"{base_url}/user/teams/" response = requests.get(list_teams_url, headers=headers) if response.status_code not in (200, 201): raise RuntimeError(f"Failed to list teams: {response.status_code}") teams = response.json() for team in teams: if team["company_name"] == company_name and team["team_name"] == team_name: return team print("Available teams:") for team in teams: print(f" * {team['company_name']} / {team['team_name']} ({team['team_uuid']})") raise RuntimeError(f"Team not found: {company_name} / {team_name}") def get_statuses(base_url: str, headers: dict, division_uuid: str) -> dict[str, str]: """ Retrieve the workflow statuses configured for a division and return as a name->uuid mapping. This calls the list_submission_statuses endpoint to get all available workflow statuses (e.g., "Received", "Pending Clearance", "Cleared", "Data Entry", etc.). Returns a dict mapping status names to their UUIDs for easy lookup when transitioning submissions between stages. """ statuses_url = f"{base_url}/submission-status" params = {"division": division_uuid} response = requests.get(statuses_url, params=params, headers=headers) if response.status_code not in (200, 201): raise RuntimeError(f"Failed to list statuses: {response.status_code}") statuses = response.json() return {s["name"]: s["uuid"] for s in statuses} ``` ```shell cURL output icon='square-terminal' theme={null} curl --request GET \ --url "https://vision.pingintel.com/api/v1/user/teams/" \ --header "Authorization: Token " ``` **Example response** *(truncated)*: ```json JSON output lines icon='json' theme={null} [ { "division_uuid": "12345678-abc1-cde2-efg3-123456789abcd", "team_uuid": "9876543-abc1-cde2-efg3-123456789abcd", "team_name": "Ping Intel", "statuses": [ { "name": "Received", "uuid": "019c6d26-4468-7b89-8328-d840dc9b5e3b", "...": "..." }, { "name": "Cleared", "uuid": "019c6d26-4e1b-7c89-ab12-d840dc9b5e3c", "...": "..." }, { "name": "Data Entry", "uuid": "019c6d26-4e21-784d-bd26-9d7d70991d91", "...": "..." }, { "name": "Underwriting", "uuid": "019c6d26-4e24-73d5-a2f0-ac50f422ba51", "...": "..." }, "..." ], "...": "..." } ] ``` ### 2. Create Submission USER ACTION Upload a submission (e.g., email with SOV attachment) using [Initiate New Submission](/ping-vision/create-submission/initiate-new-submission). This kicks off the automated intake and clearance workflow. **Example code:** ```python clear_and_triage.py lines icon='python' theme={null} def create_submission( base_url: str, headers: dict, team_uuid: str, file_path: str, insured_name: str = "Acme Corp", client_ref: str = None, ) -> str: """ Upload files to create a new submission. Returns the pingid of the created submission. """ with open(file_path, "rb") as eml_file: files = [("files", (Path(file_path).name, eml_file))] payload = { "team_uuid": team_uuid, "insured_name": insured_name, } if client_ref: payload["client_ref"] = client_ref create_submission_url = f"{base_url}/submission" response = requests.post(create_submission_url, data=payload, files=files, headers=headers) if response.status_code not in (200, 201): raise RuntimeError(f"Failed to create submission: {response.status_code}") return response.json()["id"] ``` ```shell cURL output icon='square-terminal' theme={null} curl --request POST \ --url "https://vision.pingintel.com/api/v1/submission" \ --header "Authorization: Token " \ --header "Content-Type: multipart/form-data" \ --form "files=@demo_email.eml" \ --form "team_uuid=" \ --form "client_ref=my_salesforce_id" \ --form "insured_name=Acme Corp" ``` **Example response:** ```json JSON output lines icon='json' theme={null} { "id": "p-mk-tempo-esw5ab", "message": "OK", "url": "http://vision.pingintel.com/submission/i/p-mk-tempo-esw5ab" } ``` ### 3. Poll for Status Changes via List Submission Events USER ACTION Poll [List Submission Events](/ping-vision/get-submission-data/list-submission-events) to watch for `SSC` (status change) events and track submission progress through the workflow. **Production Architecture**: This polling typically runs as a background process watching **all** submissions for your team/division. This demo filters to a single `pingid` for clarity. **Example code:** ```python clear_and_triage.py lines icon='python' theme={null} # ============================================================================= # Background Event Monitor (USER ACTION) # ============================================================================= # Poll for submission status changes. In production, this polling typically # runs as a background process watching ALL submissions for your team/division. # This demo filters to a single pingid for clarity and to show clear # cause-and-effect in the console output. # ============================================================================= def poll_submission_events( base_url: str, headers: dict, team_uuid: str, pingid: str, earliest_allowed_time: datetime, ): """ Background polling loop that watches for submission status-change events. This function is meant to be run in a daemon thread. It calls the list_submission_events endpoint every POLL_INTERVAL seconds and updates the shared *db* dict with the latest status UUID for the pingid it sees. Status-change events are printed to the console as they arrive so you can observe the submission progressing through the workflow in real time. Note: This demo polls for a single pingid for clarity. In production, you would omit the pingid filter and track all submissions, potentially routing events to different handlers or queues based on the submission's pingid. """ submission_events_url = f"{base_url}/submission-events" last_cursor_id = None while True: time.sleep(POLL_INTERVAL) try: events_params = { "pingid": pingid, # (pingid filter typically omitted) "start": earliest_allowed_time.strftime("%Y%m%d%H%M%S"), "page_size": 50, "team": team_uuid, # as needed. can filter by division, team, or nothing if you want 'everything'. } if last_cursor_id: events_params["cursor_id"] = last_cursor_id response = requests.get(submission_events_url, params=events_params, headers=headers) if response.status_code not in (200, 201): print(color_text(f"Error polling events: {response.status_code}", "red")) continue events_json = response.json() last_cursor_id = events_json.get("cursor_id") or last_cursor_id for event in events_json.get("results", []): if event.get("event_type") == "SSC": # Submission Status Change new_status = event.get("new_value", "") db[pingid] = new_status print( color_text(f"Status change: {event.get('message', '')}", "green"), event.get("old_value", ""), "->", new_status, ) except Exception as e: print(color_text(f"Error in event polling: {e}", "red")) ``` ```shell cURL output icon='square-terminal' theme={null} curl --request GET \ --url "https://vision.pingintel.com/api/v1/submission-events?pingid={id}&start=20260220000000&page_size=50&team={team_uuid}&division={division_uuid}" \ --header "Authorization: Token " ``` **Example response** *(truncated)*: ```json JSON output lines icon='json' theme={null} { "cursor_id": "019c7d25-8290-7e4b-a094-1c880f73c534", "results": [ { "event_type": "SSC", "message": "Submission status was changed from Initializing to Pending Clearance", "new_value": "019c6d26-4e1d-7b8a-bad1-c05ed808dc4d", "pingid": "p-mk-tempo-esw5ab", "...": "..." } "...", ] } ``` ### 4. Change Submission Status PING Advance the submission through workflow stages using [Change Submission Status](/ping-vision/update-submission/change-submission-status). The clearance team reviews for conflicts, then advances to "Cleared" and "Data Entry". **Example code:** ```python clear_and_triage.py lines icon='python' theme={null} def change_status(base_url: str, headers: dict, pingid: str, new_status_uuid: str): """ Change the workflow status of a submission. Calls the change_status endpoint to transition the submission to a new workflow stage. Use this to programmatically advance submissions through clearance, data entry, underwriting, etc. """ change_status_url = f"{base_url}/submission/{pingid}/change_status" response = requests.patch( change_status_url, json={"workflow_status_uuid": new_status_uuid}, headers=headers, ) if response.status_code not in (200, 201): raise RuntimeError(f"Failed to change status: {response.status_code}") ``` ```shell cURL output icon='square-terminal' theme={null} # Transition to "Cleared" curl --request PATCH \ --url "https://vision.pingintel.com/api/v1/submission/{id}/change_status" \ --header "Authorization: Token " \ --header "Content-Type: application/json" \ --data '{"workflow_status_uuid": ""}' # Transition to "Data Entry" curl --request PATCH \ --url "https://vision.pingintel.com/api/v1/submission/{id}/change_status" \ --header "Authorization: Token " \ --header "Content-Type: application/json" \ --data '{"workflow_status_uuid": ""}' ``` **Example response:** ```json JSON output lines icon='json' theme={null} { "status": "success" } ``` ### 5. Ping Prepares Data for Underwriting PING Once in Data Entry, Ping's AI and human-in-the-loop process immediately begins perfecting the SOV data by reviewing and correcting the extracted data, and finally certifying the submission. This triggers the transition to "Underwriting" status. **Demo Script Note**: The Python demo script below simplifies this step for staging/testing by using [Update Submission](/ping-vision/update-submission/update-submission-details) to set `is_building_data_ready=True` and auto-advance to Underwriting. In production, Ping's certification process handles this transition. **Example code (demo only):** ```python clear_and_triage.py lines icon='python' theme={null} def update_submission(base_url: str, headers: dict, pingid: str, attr_to_update: str, value): """ Update an attribute of the submission. This calls the Update Submission Details endpoint to modify attributes of a submission. In this demo, we use it to set is_building_data_ready=True to simulate Ping's certification step. In production, Ping's backend would set this automatically when certification completes. """ update_submission_url = f"{base_url}/submission/{pingid}" response = requests.patch( update_submission_url, json={attr_to_update: value}, headers=headers, ) if response.status_code not in (200, 201): raise RuntimeError(f"Failed to update submission: {response.status_code}") # [DEMO ONLY] Mark building data as ready to trigger RUN_OUTPUTTERS # In production, this is set automatically when Ping completes correcting the data update_submission(BASE_URL, headers, pingid, attr_to_update="is_building_data_ready", value=True) ``` ```shell cURL output icon='square-terminal' theme={null} # [DEMO ONLY] Mark building data as ready curl --request PATCH \ --url "https://vision.pingintel.com/api/v1/submission/{id}" \ --header "Authorization: Token " \ --header "Content-Type: application/json" \ --data '{"is_building_data_ready": true}' ``` ### 6. Wait for Underwriting Status USER ACTION Poll [List Submission Events](/ping-vision/get-submission-data/list-submission-events) to watch for the submission to move to "Underwriting" status after Ping completes certification. **Example code:** ```python clear_and_triage.py lines icon='python' theme={null} def wait_for_status( pingid: str, desired_status: str, status_uuids: dict[str, str], timeout: int = 600, ): """ Block until the submission identified by *pingid* reaches *desired_status*. This polls the shared *db* dict (populated by poll_submission_events) and compares the current status UUID against the UUID of *desired_status*. Progress is printed to the console every 6 seconds. """ desired_status_uuid = status_uuids.get(desired_status) start = time.time() while time.time() - start < timeout: status_uuid = db.get(pingid) if status_uuid == desired_status_uuid: print(color_text(f"Status for {pingid} reached: {desired_status}", "green")) return current_status_name = next((k for k, v in status_uuids.items() if v == status_uuid), "unknown") print( f"Waiting for {pingid} to reach {color_text(desired_status, 'green')} " f"(current: {color_text(current_status_name, 'yellow')})" ) time.sleep(6) raise TimeoutError(f"Timed out waiting for {pingid} to reach '{desired_status}' after {timeout}s") # Usage: wait for human certification to complete wait_for_status(pingid, "Underwriting", status_uuids) ``` ```shell cURL output icon='square-terminal' theme={null} # Poll until status changes to "Underwriting" curl --request GET \ --url "https://vision.pingintel.com/api/v1/submission-events?pingid={id}&start=20260220000000&page_size=50" \ --header "Authorization: Token " ``` **Example response** *(truncated)*: ```json JSON output lines icon='json' theme={null} { "cursor_id": "019c7d3e-dd84-74f1-a7a1-cc41ee75ad8e", "results": [ { "event_type": "SSC", "message": "Submission status was changed from Data Entry to Underwriting", "pingid": "p-mk-tempo-esw5ab", "...": "..." }, "...", ] } ``` ### 7. Listen for Outputters Complete Event to Download Latest Outputs USER ACTION Using the same event polling from Step 3, listen for `OC` (Outputters Complete) events via [List Submission Events](/ping-vision/get-submission-data/list-submission-events). When Ping finishes generating output files, an `OC` event is emitted containing download URLs for the final outputs. The event metadata includes the `submission_status` at the time of completion, which informs on how to handle the outputs. **Example code:** ```python clear_and_triage.py lines icon='python' theme={null} # ============================================================================= # Background Event Monitor for Outputters Complete (USER ACTION) # ============================================================================= # Poll for OC (Outputters Complete) events. Uses the same polling pattern as # Step 3 but listens for a different event type. In production, both SSC and # OC handlers would live in a single polling loop. # ============================================================================= def poll_for_outputters_complete( base_url: str, headers: dict, team_uuid: str, earliest_allowed_time: datetime, ): """ Background polling loop that watches for Outputters Complete events. This function is meant to be run in a daemon thread. It calls the list_submission_events endpoint every POLL_INTERVAL seconds and handles OC events by downloading the generated output files. The event metadata includes the submission_status at the time of completion, which informs on how to process the outputs: - "Data Entry": fetch scores for the submission - "Underwriting": download the final output documents """ submission_events_url = f"{base_url}/submission-events" last_cursor_id = None while True: time.sleep(POLL_INTERVAL) try: events_params = { "start": earliest_allowed_time.strftime("%Y%m%d%H%M%S"), "page_size": 50, "team": team_uuid, } if last_cursor_id: events_params["cursor_id"] = last_cursor_id response = requests.get(submission_events_url, params=events_params, headers=headers) if response.status_code not in (200, 201): print(color_text(f"Error polling events: {response.status_code}", "red")) continue events_json = response.json() last_cursor_id = events_json.get("cursor_id") or last_cursor_id for event in events_json.get("results", []): event_type = event.get("event_type") event_pingid = event.get("pingid") if event_type == "OC": # Outputters Complete metadata = event.get("metadata", {}) outputs = metadata.get("outputs", []) submission_status = metadata.get("submission_status", "") sudid = metadata.get("sudid", "") print( color_text(f"Outputters complete: {event.get('message', '')}", "green"), ) if submission_status in ["Underwriting"]: print(color_text(f"Downloading {len(outputs)} output(s) for {sudid=} ...", "yellow")) for output in outputs: output_format = output.get("output_format") scrubbed_filename = output.get("scrubbed_filename") output_path = f"{sudid}_{scrubbed_filename}" url = output.get("url") print(f" Downloading {output_format}: {scrubbed_filename} from {color_text(url, 'blue')}") download_document( headers=headers, url=url, output_path=output_path, ) except Exception as e: print(color_text(f"Error in event polling: {e}", "red")) ``` ```shell cURL output icon='square-terminal' theme={null} # Poll for OC (Outputters Complete) events curl --request GET \ --url "https://vision.pingintel.com/api/v1/submission-events?start=20260220000000&page_size=50&team={team_uuid}" \ --header "Authorization: Token " ``` **Example response** *(truncated)*: ```json JSON output lines icon='json' theme={null} { "cursor_id": "019c7d3e-dd84-74f1-a7a1-cc41ee75ad8e", "results": [ { "uuid": "019d73c0-2a2e-766f-bdfb-45a9bea7c213", "created_time": "2026-04-09T19:37:46.798287Z", "event_type": "OC", "message": "Outputters complete", "pingid": "p-mk-tempo-esw5ab", "division_uuid": "12345678-abc1-cde2-efg3-123456789abcd", "new_value": null, "old_value": null, "user_id": 13, "metadata": { "job_id": "93af186e-344b-11f1-91fb-922cce342ed8", "submission_status": "Underwriting", "sudid": "019c7d3e-0001-7abc-9000-abcdef123456", "outputs": [ { "label": "Ping SOV", "output_format": "AirModeler", "scrubbed_filename": "Acme Corp 2026-02-AirModeler.xlsm", "url": "https://vision.pingintel.com/api/v1/sov/019c7d3e-0001-7abc-9000-abcdef123456/output/Acme%20Corp%202026-02-AirModeler.xlsm" }, { "label": "JSON", "output_format": "JSON", "scrubbed_filename": "Acme Corp 2026-02.json", "url": "https://vision.pingintel.com/api/v1/sov/019c7d3e-0001-7abc-9000-abcdef123456/output/Acme%20Corp%202026-02.json" } ] } }, "...", ] } ``` ### 8. Download Final Output Documents USER ACTION Downloads are handled automatically by the `OC` event handler in Step 7. When the event poller receives an Outputters Complete event, it extracts the download URLs from the event metadata and saves each output file locally. **Example code:** ```python clear_and_triage.py lines icon='python' theme={null} def download_document( headers: dict, url: str, output_path: str, ): """ Download a document from a submission. Fetches the document content and writes it to *output_path*. """ response = requests.get(url, headers=headers) if response.status_code not in (200, 201): raise RuntimeError(f"Failed to download {output_path}: {response.status_code}") os.makedirs(os.path.dirname(output_path) or ".", exist_ok=True) with open(output_path, "wb") as f: f.write(response.content) ``` ```shell cURL output icon='square-terminal' theme={null} # Download using the URL from the OC event metadata: curl --request GET \ --url "https://vision.pingintel.com/api/v1/sov/{sudid}/output/{filename}" \ --header "Authorization: Token " \ --output "{filename}" ``` **Example response:** ```python Python output lines icon='python' theme={null} Downloading AirModeler: Acme Corp 2026-02-AirModeler.xlsm from https://vision.pingintel.com/api/v1/sov/019c7d3e-0001-7abc-9000-abcdef123456/output/Acme%20Corp%202026-02-AirModeler.xlsm Downloading JSON: Acme Corp 2026-02.json from https://vision.pingintel.com/api/v1/sov/019c7d3e-0001-7abc-9000-abcdef123456/output/Acme%20Corp%202026-02.json ``` ```shell cURL output icon='square-terminal' theme={null} # Files downloaded to current directory: # - Acme Corp 2026-02-AirModeler.xlsm # - Acme Corp 2026-02.json ``` ### Python Demo                  Download Python Script here ||| Download Example Email here ```python clear_and_triage_api.py lines icon='python' theme={null} """ Ping.Vision Clearance & Triage Workflow — Raw API Example This script demonstrates an end-to-end clearance workflow using direct HTTP requests to the Ping.Vision API. It uploads a submission (.eml file), monitors status changes via polling, programmatically advances the submission through clearance stages, waits for human certification, and finally downloads the finished SOV Fixer outputs. This is the "raw requests" version of pingvision_clear_and_triage.py, intended to show exactly what HTTP calls are being made without the abstraction of the pingintel_api client library. Prerequisites: - A valid Ping.Vision API auth token set in PINGVISION_AUTH_TOKEN_LOCAL environment variable - Network access to the Ping.Vision instance at the configured BASE_URL - An .eml file containing the submission you want to process Usage: python clear_and_triage_api.py --eml /path/to/submission.eml --company "Acme Corp" --team "Acme Corp" python clear_and_triage_api.py --eml demo_email.eml --company "Ping Intel" --team "Ping Intel" --api-url "http://localhost:8002" """ import argparse import os import threading import time from datetime import datetime, timezone from pathlib import Path import requests # How often to poll for status changes (in seconds) POLL_INTERVAL = 15 # Shared state dictionary for tracking submission statuses across threads # Maps pingid -> current status UUID db: dict[str, str] = {} def color*text(text: str, color: str) -> str: """ Wrap \_text* in ANSI escape codes so it renders in the given _color_ when printed to a terminal. Supported colors: "red", "yellow", "green". If an unsupported color is passed the text is returned unmodified. """ colors = {"red": "\033[31m", "yellow": "\033[33m", "green": "\033[32m"} if color not in colors: return text reset = "\033[0m" return f"{colors[color]}{text}{reset}" def authenticate(api_url: str, auth_token: str) -> dict: """ Authenticate to the Ping.Vision API and return the necessary headers and base URL. """ if auth_token is None: auth_token = os.environ.get("PINGVISION_AUTH_TOKEN_LOCAL") if not auth_token: raise RuntimeError("No auth token provided. Set PINGVISION_AUTH_TOKEN_LOCAL or pass --auth-token") base_url = api_url.rstrip("/") if not base_url.endswith("/api/v1"): base_url = f"{base_url}/api/v1" headers = {"Authorization": f"Token {auth_token}"} return headers, base_url def get_team(base_url: str, headers: dict, company_name: str, team_name: str) -> dict: """ Look up a Ping.Vision team by its company and team display names. This calls the Ping.Vision list_teams endpoint and searches for an exact match on both company_name and team_name. Use it early in your workflow to obtain the team_uuid and division_uuid you'll need for submission creation and status lookups. If the team is not found, all available teams are printed to the console to help you identify the correct names, and a RuntimeError is raised. """ list_teams_url = f"{base_url}/user/teams/" response = requests.get(list_teams_url, headers=headers) if response.status_code not in (200, 201): raise RuntimeError(f"Failed to list teams: {response.status_code}") teams = response.json() for team in teams: if team["company_name"] == company_name and team["team_name"] == team_name: return team print("Available teams:") for team in teams: print(f" * {team['company_name']} / {team['team_name']} ({team['team_uuid']})") raise RuntimeError(f"Team not found: {company_name} / {team_name}") def get_statuses(base_url: str, headers: dict, division_uuid: str) -> dict[str, str]: """ Retrieve the workflow statuses configured for a division and return as a name->uuid mapping. This calls the list_submission_statuses endpoint to get all available workflow statuses (e.g., "Received", "Pending Clearance", "Cleared", "Data Entry", etc.). Returns a dict mapping status names to their UUIDs for easy lookup when transitioning submissions between stages. """ statuses_url = f"{base_url}/submission-status" params = {"division": division_uuid} response = requests.get(statuses_url, params=params, headers=headers) if response.status_code not in (200, 201): raise RuntimeError(f"Failed to list statuses: {response.status_code}") statuses = response.json() return {s["name"]: s["uuid"] for s in statuses} def create_submission( base_url: str, headers: dict, team_uuid: str, file_path: str, insured_name: str = "Acme Corp", client_ref: str = None, ) -> str: """ Upload files to create a new submission. Returns the pingid of the created submission. """ with open(file_path, "rb") as eml_file: files = [("files", (Path(file_path).name, eml_file))] payload = { "team_uuid": team_uuid, "insured_name": insured_name, } if client_ref: payload["client_ref"] = client_ref create_submission_url = f"{base_url}/submission" response = requests.post(create_submission_url, data=payload, files=files, headers=headers) if response.status_code not in (200, 201): raise RuntimeError(f"Failed to create submission: {response.status_code}") return response.json()["id"] # ============================================================================= # Background Event Monitor (USER ACTION) # ============================================================================= # Poll for submission status changes. In production, this polling typically # runs as a background process watching ALL submissions for your team/division. # This demo filters to a single pingid for clarity and to show clear # cause-and-effect in the console output. # ============================================================================= def poll_submission_events( base_url: str, headers: dict, team_uuid: str, earliest_allowed_time: datetime, ): """ Background polling loop that watches for submission events. This function is meant to be run in a daemon thread. It calls the list_submission_events endpoint every POLL_INTERVAL seconds and handles: - SSC (Submission Status Change): updates the shared *db* dict with the latest status UUID for each pingid. - OC (Outputters Complete): downloads output files when they are ready. Events are printed to the console as they arrive so you can observe submissions progressing through the workflow in real time. """ submission_events_url = f"{base_url}/submission-events" last_cursor_id = None while True: time.sleep(POLL_INTERVAL) try: events_params = { "start": earliest_allowed_time.strftime("%Y%m%d%H%M%S"), "page_size": 50, "team": team_uuid, } if last_cursor_id: events_params["cursor_id"] = last_cursor_id response = requests.get(submission_events_url, params=events_params, headers=headers) if response.status_code not in (200, 201): print(color_text(f"Error polling events: {response.status_code}", "red")) continue events_json = response.json() last_cursor_id = events_json.get("cursor_id") or last_cursor_id for event in events_json.get("results", []): event_type = event.get("event_type") event_pingid = event.get("pingid") if event_type == "SSC": # Submission Status Change new_status = event.get("new_value", "") db[event_pingid] = new_status print( color_text(f"Status change: {event.get('message', '')}", "green"), event.get("old_value", ""), "->", new_status, ) elif event_type == "OC": # Outputters Complete metadata = event.get("metadata", {}) outputs = metadata.get("outputs", []) submission_status = metadata.get("submission_status", "") sudid = metadata.get("sudid", "") print( color_text(f"Outputters complete: {event.get('message', '')}", "green"), ) if submission_status in ["Underwriting"]: print(color_text(f"Downloading {len(outputs)} output(s) for {sudid=} ...", "yellow")) for output in outputs: output_format = output.get("output_format") scrubbed_filename = output.get("scrubbed_filename") output_path = f"{sudid}_{scrubbed_filename}" url = output.get("url") print(f" Downloading {output_format}: {scrubbed_filename} from {color_text(url, 'blue')}") download_document( headers=headers, url=url, output_path=output_path, ) except Exception as e: print(color_text(f"Error in event polling: {e}", "red")) def wait*for_status( pingid: str, desired_status: str, status_uuids: dict[str, str], timeout: int = 600, ): """ Block until the submission identified by \_pingid* reaches _desired_status_. This polls the shared *db* dict (populated by poll_submission_events) and compares the current status UUID against the UUID of *desired_status*. Progress is printed to the console every 6 seconds. """ desired_status_uuid = status_uuids.get(desired_status) start = time.time() while time.time() - start < timeout: status_uuid = db.get(pingid) if status_uuid == desired_status_uuid: print(color_text(f"Status for {pingid} reached: {desired_status}", "green")) return current_status_name = next((k for k, v in status_uuids.items() if v == status_uuid), "unknown") print( f"Waiting for {pingid} to reach {color_text(desired_status, 'green')} " f"(current: {color_text(current_status_name, 'yellow')})" ) time.sleep(6) raise TimeoutError(f"Timed out waiting for {pingid} to reach '{desired_status}' after {timeout}s") def change_status(base_url: str, headers: dict, pingid: str, new_status_uuid: str): """ Change the workflow status of a submission. Calls the change_status endpoint to transition the submission to a new workflow stage. Use this to programmatically advance submissions through clearance, data entry, underwriting, etc. """ change_status_url = f"{base_url}/submission/{pingid}/change_status" response = requests.patch( change_status_url, json={"workflow_status_uuid": new_status_uuid}, headers=headers, ) if response.status_code not in (200, 201): raise RuntimeError(f"Failed to change status: {response.status_code}") def update_submission(base_url: str, headers: dict, pingid: str, attr_to_update: str, value): """ Update a property of the submission. This is a critical step in the clearance workflow. When is_building_data_ready is set to True, it signals that: - The SOV data has been parsed and validated - Addresses have been geocoded - Third-party enrichment data has been attached - The submission is ready for underwriting review In production, this flag is typically set automatically by Ping's certification process after a human reviewer has verified the data quality. For demo/testing purposes, this can be set programmatically to advance the workflow. This triggers the RUN_OUTPUTTERS job which generates the final output files. """ update_submission_url = f"{base_url}/submission/{pingid}" response = requests.patch( update_submission_url, json={attr_to_update: value}, headers=headers, ) if response.status_code not in (200, 201): raise RuntimeError(f"Failed to update submission: {response.status_code}") def download*document( headers: dict, url: str, output_path: str, ): """ Download a document from a submission. Fetches the document content and writes it to \_output_path*. """ response = requests.get(url, headers=headers) if response.status_code not in (200, 201): raise RuntimeError(f"Failed to download {output_path}: {response.status_code}") os.makedirs(os.path.dirname(output_path) or ".", exist_ok=True) with open(output_path, "wb") as f: f.write(response.content) def run_clearance_workflow( \*, eml_path: str, company_name: str, team_name: str, api_url: str = "http://localhost:8002/api/v1", auth_token: str | None = None, ) -> str: """ Execute the full clearance workflow for a single .eml submission. This is the main entry point. It performs the following steps: 1. Resolves the team and division from Ping.Vision. 2. Uploads the .eml file as a new submission (USER ACTION). 3. Starts a background thread to monitor events — SSC and OC (USER ACTION). 4. Waits for "Pending Clearance", advances to "Cleared" and "Data Entry" (PING). 5. Ping prepares data for underwriting (PING - demo simplifies via Update Submission API). 6. Waits for "Underwriting" status (USER ACTION polling). 7-8. Background poller listens for OC events and downloads outputs automatically. Returns the pingid of the created submission. """ # Setup API authentication and base URL headers, base_url = authenticate(api_url, auth_token) # ========================================================================== # Step 1: Get Team and Statuses # ========================================================================== print(color_text("Step 1: Looking up team and workflow statuses...", "yellow")) team = get_team(base_url, headers, company_name, team_name) team_uuid = team["team_uuid"] division_uuid = team["division_uuid"] print(f" Team: {team['team_name']} ({team_uuid})") status_uuids = get_statuses(base_url, headers, division_uuid) print(f" Found {len(status_uuids)} workflow statuses") # ========================================================================== # Step 2: Create Submission # ========================================================================== # USER ACTION: A broker or underwriter uploads a submission (e.g., an email # with SOV attachment) to Ping.Vision for processing. This kicks off the # automated intake and clearance workflow. # ========================================================================== print(color_text("\nStep 2: Creating submission...", "yellow")) pingid = create_submission(base_url, headers, team_uuid, eml_path) print(color_text(f" Created submission: {pingid}", "green")) # ========================================================================== # Step 3: Start Background Event Polling # ========================================================================== # USER ACTION: Start polling for submission events to track status changes. # In production, this typically runs as a background process watching all # submissions for your team/division. # ========================================================================== print(color_text("\nStep 3: Starting background event polling...", "yellow")) earliest_allowed_time = datetime.now(timezone.utc) threading.Thread( target=poll_submission_events, args=( base_url, headers, team_uuid, earliest_allowed_time, ), name="event_poller", daemon=True, ).start() # ========================================================================== # Step 4: Wait for Pending Clearance, then Advance to Data Entry # ========================================================================== # PING: The clearance team reviews the submission for conflicts (e.g., # incumbent carriers, duplicate submissions). If cleared, they advance # through "Cleared" to "Data Entry" where Ping's AI processing begins. # ========================================================================== print(color_text("\nStep 4: Waiting for Pending Clearance status...", "yellow")) wait_for_status(pingid, "Pending Clearance", status_uuids) print(color_text("\n Advancing to Cleared...", "yellow")) change_status(base_url, headers, pingid, status_uuids["Cleared"]) wait_for_status(pingid, "Cleared", status_uuids) print(color_text("\n Advancing to Data Entry...", "yellow")) change_status(base_url, headers, pingid, status_uuids["Data Entry"]) wait_for_status(pingid, "Data Entry", status_uuids) # ========================================================================== # Step 5: Ping Corrects Data for Underwriting # ========================================================================== # PING: Ping's AI and human-in-the-loop process downloads the scrubber, # reviews/corrects the extracted data, and certifies the submission. # This triggers the transition to Underwriting. # # For the sake of this demo script, we simplify this step: # - Only do this in staging, not production # - Uses Update Submission API with is_building_data_ready=True # ========================================================================== print(color_text("\nStep 5: Ping corrects data...", "yellow")) print(color_text(" (In production: Ping's team corrects the data)", "red")) # [DEMO] Auto-advance to Underwriting and mark data as ready # In production, this is triggered by Ping's certification process print(color_text(" [DEMO] Auto-advancing to Underwriting...", "yellow")) change_status(base_url, headers, pingid, status_uuids["Underwriting"]) # Mark building data as ready - this triggers the RUN_OUTPUTTERS job # In production, this flag is set when Ping's certification is complete print(color_text(" [DEMO] Marking building data as ready...", "yellow")) update_submission(base_url, headers, pingid, to_update="is_building_data_ready", value=True) # ========================================================================== # Step 6: Wait for Underwriting Status # ========================================================================== # USER ACTION: Poll submission events to watch for the transition to # "Underwriting" status after Ping completes certification. # ========================================================================== wait_for_status(pingid, "Underwriting", status_uuids) # ========================================================================== # Step 7 & 8: Listen for Outputters Complete and Download Outputs # ========================================================================== # The background event poller (Step 3) handles OC (Outputters Complete) # events automatically — when outputs are ready, it downloads them. # No additional action needed here. The poller thread runs until the # process exits. # ========================================================================== print(color_text("\nSteps 7-8: Waiting for OC events (handled by background poller)...", "yellow")) print(color_text(" Output downloads will appear as OC events arrive.", "green")) # Keep the main thread alive so the daemon poller can continue processing while True: time.sleep(60) print(color_text(f"\n✓ Workflow complete for submission {pingid}", "green")) return pingid if **name** == "**main**": parser = argparse.ArgumentParser( description="Run Ping.Vision clearance workflow using raw HTTP requests", formatter_class=argparse.RawDescriptionHelpFormatter, epilog=""" Examples: python clear_and_triage_api.py --eml demo_email.eml --company "Ping Intel" --team "Ping Intel" python clear_and_triage_api.py --eml submission.eml --company "Acme" --team "Acme" --api-url "http://localhost:8002" """, ) parser.add_argument("--eml", required=True, help="Path to .eml file to submit") parser.add_argument("--company", required=True, help="Company name in Ping.Vision") parser.add_argument("--team", required=True, help="Team name in Ping.Vision") parser.add_argument( "--api-url", default="http://localhost:8002", help="Ping.Vision API base URL (default: localhost:8002)", ) parser.add_argument( "--auth-token", default=None, help="API auth token (default: PINGVISION_AUTH_TOKEN_LOCAL env var)", ) args = parser.parse_args() try: pingid = run_clearance_workflow( eml_path=args.eml, company_name=args.company, team_name=args.team, api_url=args.api_url, auth_token=args.auth_token, ) except KeyboardInterrupt: print(color_text("\nWorkflow interrupted by user", "yellow")) except Exception as e: print(color_text(f"\nError: {e}", "red")) raise ``` ``` ``` # Send and Track SOV Submission Source: https://docs.pingintel.com/workflows/ping-vision/send-and-track-submission Example workflow for submitting and tracking an SOV via the **Ping.Vision** API This page describes an example workflow of API calls that can be made to send and track an SOV submission using the **Ping.Vision** API. Reach for this workflow when one of the following is true: * You want to push a submission — an email with an SOV attachment, or the SOV file directly — into Ping.Vision and watch it advance through the workflow. * You need to listen for status-change events and download the generated output documents once processing completes. * You're building a minimal, single-submission integration before adding clearance, triage, or status-driven branching logic on your side. For a full integration where Ping clears submissions against appetite and underwriting rules and your system reacts to those status transitions, see [How to: Integrate an External System](/workflows/ping-vision/clear-and-triage). It builds on this workflow with the additional event handling and decision points a production integration needs. The following is a specific example. There are more options available to the user that are documented in the Ping Vision pages under **Ping.Vision**. The code blocks allow the user to select from Python or cURL (via terminal) use cases. The Python script is available for download at the bottom of the page. Try filling in the blanks (e.g., \{id}) to go through the workflow using cURL! This workflow demonstrates how to: * Create a submission * Poll for job completion * Download the final output documents ### 1. List User Teams The first API call to make is [List User Teams](/ping-vision/user-memberships/list-user-teams). This endpoint returns the teams associated with your user account, including the `team_uuid`, `division_uuid`, and available workflow `statuses` for each team. **Example code:** ```python send_and_track_submission.py lines icon='python' theme={null} import os import time from pathlib import Path import requests from pingintel_api.pingvision import types as t POLL_INTERVAL = 10 # seconds def color_text(text: str, color: str) -> str: """Wrap text in ANSI color codes for terminal output.""" colors = {"red": "\033[31m", "yellow": "\033[33m", "green": "\033[32m"} if color not in colors: return text reset = "\033[0m" return f"{colors[color]}{text}{reset}" # Configuration API_KEY = os.environ.get("PINGVISION_AUTH_TOKEN") BASE_URL = "https://vision.pingintel.com/api/v1" headers = {"Authorization": f"Token {API_KEY}"} # File to submit file_path = Path("demo_email.eml") files = [("files", (file_path.name, open(file_path, "rb")))] ## ... # 1. List User Teams # https://docs.pingintel.com/ping-vision/user-memberships/list-user-teams list_teams_url = f"{BASE_URL}/user/teams/" list_teams_response = requests.get(list_teams_url, headers=headers) if list_teams_response.status_code not in (200, 201): raise RuntimeError(f"Failed to list teams: {list_teams_response.status_code}") teams = list_teams_response.json() # select team by team_uuid or division_uuid team = teams[0] team_uuid = team["team_uuid"] # Unique identifier for the team division_uuid = team["division_uuid"] # Division within the team # Build a mapping of workflow status names to UUIDs for later use status_uuids = {s["name"]: s["uuid"] for s in team.get("statuses", [])} ## ... ``` ```shell cURL output icon='square-terminal' theme={null} curl --request GET \ --url "https://vision.pingintel.com/api/v1/user/teams/" \ --header "Authorization: Token " ``` **Example response:** ```json JSON output lines icon='json' theme={null} [ { "company_name": "Ping Intel", "company_short_name": "PING", "company_uuid": "12345678-abc1-cde2-efg3-123456789abc", "division_name": "Ping Intel", "division_uuid": "12345678-abc1-cde2-efg3-123456789abcd", "id": 1, "membership_type": "admin", "statuses": [ { "category": "Received", "color": "#06A77C", "division_uuid": "12345678-abc1-cde2-efg3-123456789abcd", "iconName": "PlaceholderPing", "id": 1001, "is_valid_for_user_transition": false, "name": "Received", "uuid": "019c6d26-4468-7b89-8328-d840dc9b5e3b" }, { "category": "Initializing", "color": "#8239FC", "division_uuid": "12345678-abc1-cde2-efg3-123456789abcd", "iconName": "PlaceholderPing", "id": 1002, "is_valid_for_user_transition": false, "name": "Initializing", "uuid": "019c6d26-4471-7e1f-a9b3-12acce3b0ba5" }, "..." ], "team_name": "Ping Intel", "team_uuid": "9876543-abc1-cde2-efg3-123456789abcd" }, "..." ] ``` ### 2. Create Submission The second API call to make is [Initiate New Submission](/ping-vision/create-submission/initiate-new-submission). This endpoint allows the user to upload files to create a new submission for processing. **Example code:** ```python send_and_track_submission.py lines icon='python' theme={null} ## ... # Step 2. Create Submission # https://docs.pingintel.com/ping-vision/create-submission/initiate-new-submission payload = { "client_ref": "my_salesforce_id", # Optional: your external reference ID "insured_name": "Acme Corp", # Optional: name of the insured party "team_uuid": team_uuid, # Required: which team should receive this submission } create_submission_url = f"{BASE_URL}/submission" create_submission_response = requests.post(create_submission_url, data=payload, files=files, headers=headers) if create_submission_response.status_code not in (200, 201): raise RuntimeError(f"Failed to create submission: {create_submission_response.status_code}") submission_id = create_submission_response.json()["id"] print(f"Created submission: {color_text(submission_id, 'green')}") ## ... ``` ```shell cURL output icon='square-terminal' theme={null} curl --request POST \ --url "https://vision.pingintel.com/api/v1/submission" \ --header "Authorization: Token " \ --header "Content-Type: multipart/form-data" \ --form "files=@demo_email.eml" \ --form "team_uuid=" \ --form "client_ref=my_salesforce_id" \ --form "insured_name=Acme Corp" ``` **Example response:** ```json JSON output lines icon='json' theme={null} { "id": "p-mk-ourke-esw5ab", "message": "OK", "url": "http://vision.pingintel.com/submission/i/p-mk-ourke-esw5ab" } ``` ### 3. Poll for Job Completion After submission, poll [List Recent Submission Activity](/ping-vision/get-submission-data/list-recent-submission-activity) to monitor job progress. Ping Vision processes the document through multiple jobs: * **SOVFIXER**: Parses and validates the SOV data, geocodes addresses, enriches with third-party data * **RUN\_OUTPUTTERS**: Generates final output files in configured formats **Example code:** ```python send_and_track_submission.py lines icon='python' theme={null} ## ... # Step 3. Poll for Job Completion submission_activity_url = f"{BASE_URL}/submission" print(color_text("Polling for jobs to complete...", "yellow")) # track completed jobs completed_jobs = set() while True: # Query for the specific submission by ID activity_params = { "id": submission_id, "page_size": 1, "team_uuid": team_uuid, "division_uuid": division_uuid, } activity_response = requests.get(submission_activity_url, params=activity_params, headers=headers) if activity_response.status_code not in (200, 201): print(color_text(f"Error checking activity: {activity_response.status_code}", "red")) time.sleep(POLL_INTERVAL) continue results = activity_response.json().get("results", []) if not results: print(color_text("Waiting for submission data...", "yellow")) time.sleep(POLL_INTERVAL) continue submission = results[0] jobs = submission.get("jobs", []) # Display progress for each job for j in jobs: job_id = j.get("job_id") job_type = j.get("job_type", "UNKNOWN") # e.g., "SOVFIXER", "RUN_OUTPUTTERS" pct = j.get("processing_pct_complete", 0) status = j.get("processing_status", "?") message = j.get("processing_last_message", "") # Human-readable status message if status == "C" and job_id not in completed_jobs: # job completed print(color_text(f"✓ {job_type}: {pct:.0f}% - {message}", "green")) completed_jobs.add(job_id) elif status != "C" and job_id not in completed_jobs: # job still in progress print(color_text(f"⋯ {job_type}: {pct:.0f}% - {message}", "yellow")) # Check if the final outputters job is complete outputters_job = next((j for j in jobs if j.get("job_type") == "RUN_OUTPUTTERS"), None) if outputters_job and outputters_job.get("processing_pct_complete") == 100: print(color_text("Final outputs ready for download.", "green")) break time.sleep(POLL_INTERVAL) ## ... ``` ```shell cURL output icon='square-terminal' theme={null} # Poll until jobs complete curl --request GET \ --url "https://vision.pingintel.com/api/v1/submission?id={id}&page_size=1&team_uuid={team_uuid}&division_uuid={division_uuid}" \ --header "Authorization: Token " ``` **Example response:** ```json JSON output lines icon='json' theme={null} { "cursor_id": "p-mk-ourke-esw5ab", "has_remaining": false, "results": [ { "actions": { "claim": true, "download_documents": true, "view_map": true }, "automated_processing_failed": false, "automated_processing_failed_reason": null, "...": "...", "documents": [ { "actions": ["download", "archive"], "archived_on": null, "archived_reason": null, "created_time": "2026-02-20T22:21:22.216034Z", "document_type": "MSG", "filename": "demo_email.eml", "id": 625, "is_archived": false, "label": "MSG", "preview_url": null, "url": "http://vision.pingintel.com/api/v1/submission/p-mk-ourke-esw5ab/document/demo_email.eml" }, { "actions": ["download", "archive"], "document_type": "SOVFIXER_OUTPUT", "output_format": "PingCertifiedSOV", "label": "Ping.Certified Marketing SOV", "filename": "Ping Marketing SOV - Acme Corp.xlsx", "is_archived": false, "url": "http://vision.pingintel.com/api/v1/submission/p-mk-ourke-esw5ab/document/Ping%20Marketing%20SOV%20-%20Acme%20Corp.xlsx" }, { "actions": ["download", "archive"], "document_type": "SOVFIXER_OUTPUT", "output_format": "JSON", "label": "JSON", "filename": "parse_sov_testfile-20260220222216.json", "is_archived": false, "url": "http://vision.pingintel.com/api/v1/submission/p-mk-ourke-esw5ab/document/parse_sov_testfile-20260220222216.json" }, "..." ], "jobs": [ { "created_time": "2026-02-20T22:21:26.655911Z", "filenames": ["parse_sov_testfile.xlsx", "Email - 02-20-2026.content.html"], "job_id": "7f3444de-0eaa-11f1-ba93-befce6b35b80", "job_type": "SOVFIXER", "job_type_details": { "job_type_label": "Ping.Extraction", "sovfixer_request_type": null, "sovfixer_result_message": null, "sovfixer_result_status": null, "sovfixer_sovid": "s-mk-ourke-g1bnkd" }, "processing_last_message": "Processing complete.", "processing_pct_complete": 100.0, "processing_status": "C", "sovid": "s-mk-ourke-g1bnkd", "updated_time": "2026-02-20T22:22:16.102475Z", "user_id": 28 }, { "job_id": "8a4555ef-1fbb-22g2-cb94-cgadf7c46c91", "job_type": "RUN_OUTPUTTERS", "processing_last_message": "Processing complete.", "processing_pct_complete": 100.0, "processing_status": "C" } ], "...": "..." } ] } ``` ### 4. Download Final Output Documents The final API call to make is [Download Submission Document](/ping-vision/get-submission-data/download-submission-document). This endpoint allows the user to download the processed output documents by providing the submission ID and the document filename. Once processing is complete, the submission contains the generated output documents. Every Ping.Extraction output carries a `document_type` of `SOVFIXER_OUTPUT`. Read each document's `output_format` to tell the formats apart: * **`PingCertifiedSOV`** (or another Excel format): the scrubbed and normalized SOV workbook. * **`JSON`**: machine-readable JSON with all extracted and enriched data. Match on both attributes: `document_type == "SOVFIXER_OUTPUT"` selects the Ping.Extraction outputs, and `output_format` picks the specific files you want. E.g., `https://vision.pingintel.com/api/v1/submission/p-mk-ourke-esw5ab/document/parse_sov_testfile-20260220222216.json` **Example code:** ```python send_and_track_submission.py lines icon='python' theme={null} ## ... # Step 4. Download Final Output Documents # https://docs.pingintel.com/ping-vision/get-submission-data/download-submission-document os.makedirs("workflow_example_results", exist_ok=True) wanted_formats = {"PingCertifiedSOV", "JSON"} for doc in submission.get("documents", []): doc_type = doc.get("document_type", "") output_format = doc.get("output_format", "") filename = doc.get("filename", "") # Download only the final output files you asked for if ( doc_type == "SOVFIXER_OUTPUT" and output_format in wanted_formats and not doc.get("is_archived", False) ): download_url = f"{BASE_URL}/submission/{submission_id}/document/{filename}" download_response = requests.get(download_url, headers=headers) if download_response.status_code not in (200, 201): raise RuntimeError(f"Failed to download {filename}: {download_response.status_code}") # Save with submission ID prefix to avoid filename collisions output_path = f"workflow_example_results/{submission_id}_{filename}" with open(output_path, "wb") as outfile: outfile.write(download_response.content) print(color_text(f"Saved {output_format}: {output_path}", "green")) print(color_text(f"\nWorkflow complete for submission {submission_id}", "green")) ## ``` ```shell cURL output icon='square-terminal' theme={null} # For each document with document_type "SOVFIXER_OUTPUT" and an output_format you want: curl --request GET \ --url "https://vision.pingintel.com/api/v1/submission/{id}/document/{filename}" \ --header "Authorization: Token " \ --output "{filename}" ``` **Example response:** ```python Python output lines icon='python' theme={null} Saved PingCertifiedSOV: workflow_example_results/p-mk-ourke-esw5ab_Ping Marketing SOV - Acme Corp.xlsx Saved JSON: workflow_example_results/p-mk-ourke-esw5ab_parse_sov_testfile-20260220222216.json Workflow complete for submission p-mk-ourke-esw5ab ``` ```shell cURL output icon='square-terminal' theme={null} # Files downloaded to current directory: # - Ping Marketing SOV - Acme Corp.xlsx # - parse_sov_testfile-20260220222216.json ``` ### Python Demo                  Download Python Script here ||| Download Example Email here ```python send_and_track_submission.py lines icon='python' theme={null} import os import time from pathlib import Path import requests from pingintel_api.pingvision import types as t POLL_INTERVAL = 10 # seconds def color_text(text: str, color: str) -> str: """Wrap text in ANSI color codes for terminal output.""" colors = {"red": "\033[31m", "yellow": "\033[33m", "green": "\033[32m"} if color not in colors: return text reset = "\033[0m" return f"{colors[color]}{text}{reset}" # Configuration API_KEY = os.environ.get("PINGVISION_AUTH_TOKEN") BASE_URL = "https://vision.pingintel.com/api/v1" headers = {"Authorization": f"Token {API_KEY}"} # File to submit file_path = Path("demo_email.eml") files = [("files", (file_path.name, open(file_path, "rb")))] ## ... # 1. List User Teams # https://docs.pingintel.com/ping-vision/user-memberships/list-user-teams list_teams_url = f"{BASE_URL}/user/teams/" list_teams_response = requests.get(list_teams_url, headers=headers) if list_teams_response.status_code not in (200, 201): raise RuntimeError(f"Failed to list teams: {list_teams_response.status_code}") teams = list_teams_response.json() # select team by team_uuid or division_uuid team = teams[0] team_uuid = team["team_uuid"] # Unique identifier for the team division_uuid = team["division_uuid"] # Division within the team # Build a mapping of workflow status names to UUIDs for later use status_uuids = {s["name"]: s["uuid"] for s in team.get("statuses", [])} ## ... # Step 2. Create Submission # https://docs.pingintel.com/ping-vision/create-submission/initiate-new-submission payload = { "client_ref": "my_salesforce_id", # Optional: your external reference ID "insured_name": "Acme Corp", # Optional: name of the insured party "team_uuid": team_uuid, # Required: which team should receive this submission } create_submission_url = f"{BASE_URL}/submission" create_submission_response = requests.post(create_submission_url, data=payload, files=files, headers=headers) if create_submission_response.status_code not in (200, 201): raise RuntimeError(f"Failed to create submission: {create_submission_response.status_code}") submission_id = create_submission_response.json()["id"] print(f"Created submission: {color_text(submission_id, 'green')}") ## ... # Step 3. Poll for Job Completion submission_activity_url = f"{BASE_URL}/submission" print(color_text("Polling for jobs to complete...", "yellow")) # track completed jobs completed_jobs = set() while True: # Query for the specific submission by ID activity_params = { "id": submission_id, "page_size": 1, "team_uuid": team_uuid, "division_uuid": division_uuid, } activity_response = requests.get(submission_activity_url, params=activity_params, headers=headers) if activity_response.status_code not in (200, 201): print(color_text(f"Error checking activity: {activity_response.status_code}", "red")) time.sleep(POLL_INTERVAL) continue results = activity_response.json().get("results", []) if not results: print(color_text("Waiting for submission data...", "yellow")) time.sleep(POLL_INTERVAL) continue submission = results[0] jobs = submission.get("jobs", []) # Display progress for each job for j in jobs: job_id = j.get("job_id") job_type = j.get("job_type", "UNKNOWN") # e.g., "SOVFIXER", "RUN_OUTPUTTERS" pct = j.get("processing_pct_complete", 0) status = j.get("processing_status", "?") message = j.get("processing_last_message", "") # Human-readable status message if status == "C" and job_id not in completed_jobs: # job completed print(color_text(f"✓ {job_type}: {pct:.0f}% - {message}", "green")) completed_jobs.add(job_id) elif status != "C" and job_id not in completed_jobs: # job still in progress print(color_text(f"⋯ {job_type}: {pct:.0f}% - {message}", "yellow")) # Check if the final outputters job is complete outputters_job = next((j for j in jobs if j.get("job_type") == "RUN_OUTPUTTERS"), None) if outputters_job and outputters_job.get("processing_pct_complete") == 100: print(color_text("Final outputs ready for download.", "green")) break time.sleep(POLL_INTERVAL) ## ... # Step 4. Download Final Output Documents # https://docs.pingintel.com/ping-vision/get-submission-data/download-submission-document os.makedirs("workflow_example_results", exist_ok=True) wanted_formats = {"PingCertifiedSOV", "JSON"} for doc in submission.get("documents", []): doc_type = doc.get("document_type", "") output_format = doc.get("output_format", "") filename = doc.get("filename", "") # Download only the final output files you asked for if ( doc_type == "SOVFIXER_OUTPUT" and output_format in wanted_formats and not doc.get("is_archived", False) ): download_url = f"{BASE_URL}/submission/{submission_id}/document/{filename}" download_response = requests.get(download_url, headers=headers) if download_response.status_code not in (200, 201): raise RuntimeError(f"Failed to download {filename}: {download_response.status_code}") # Save with submission ID prefix to avoid filename collisions output_path = f"workflow_example_results/{submission_id}_{filename}" with open(output_path, "wb") as outfile: outfile.write(download_response.content) print(color_text(f"Saved {output_format}: {output_path}", "green")) print(color_text(f"\nWorkflow complete for submission {submission_id}", "green")) ## ```