Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Changelog — Enterprise API (v2026.19)
This release is a major expansion of the First Street Enterprise GraphQL API.
The feature surface roughly doubles: the schema introduces full Portfolio, Locality, Adaptation, Asset Valuation / Value Chain, Macroeconomic, Link Sharing, and AI Insights domains, alongside a new Hazard rollup peril and substantially expanded damage outputs (interruption loss, cash loss, operator loss) on Flood and Wind.
There are no removed types, queries, mutations, or enum values in this release. All listed deprecations are soft - the deprecated fields continue to function, but new code should adopt the replacements documented below.
Breaking changes
There are no hard breaking changes in this release. No types, fields, enum values, queries, or mutations were removed. No field types or required‑ness were changed.
A few notes on changes you may notice:
*_SCORE_*and*_HAZARD_*variants. Existing values still work.Deprecations
These items still work but should be migrated.
Climate factor scalars → granular
factorScoreOn every
AssetClimateExposure*type, the single integer*FactorandfactorScalefields are replaced byfactorScore(filterBy: AssetSortFilter): [FactorScore], which exposes score and scale broken down by SSP and year.AssetClimateExposureCold.coldFactor→factorScore.scoreAssetClimateExposureCold.factorScale→factorScore.scaleAssetClimateExposureDrought.droughtFactor/factorScale→factorScore.score/factorScore.scaleAssetClimateExposureFlood.floodFactor/factorScale→factorScore.score/factorScore.scaleAssetClimateExposureHeat.heatFactor/factorScale→factorScore.score/factorScore.scaleAssetClimateExposureWildfire.fireFactor/factorScale→factorScore.score/factorScore.scaleAssetClimateExposureWind.windFactor/factorScale→factorScore.score/factorScore.scaleAssetSortfactor enums →*_SCORE_*variantsThe following sort values are deprecated; use the
_SCORE_variants which sort onfactorScore.score:CLIMATE_EXPOSURE_FLOOD_FACTOR_ASC/_DESC→CLIMATE_EXPOSURE_FLOOD_FACTOR_SCORE_ASC/_DESCCLIMATE_EXPOSURE_FIRE_FACTOR_ASC/_DESC→CLIMATE_EXPOSURE_FIRE_FACTOR_SCORE_ASC/_DESCCLIMATE_EXPOSURE_WIND_FACTOR_ASC/_DESC→CLIMATE_EXPOSURE_WIND_FACTOR_SCORE_ASC/_DESCCLIMATE_EXPOSURE_HEAT_FACTOR_ASC/_DESC→CLIMATE_EXPOSURE_HEAT_FACTOR_SCORE_ASC/_DESCCLIMATE_EXPOSURE_COLD_FACTOR_ASC/_DESC→CLIMATE_EXPOSURE_COLD_FACTOR_SCORE_ASC/_DESCCLIMATE_EXPOSURE_DROUGHT_FACTOR_ASC/_DESC→CLIMATE_EXPOSURE_DROUGHT_FACTOR_SCORE_ASC/_DESCProject & query deprecations
Query.projects→ useQuery.projectsConnectionfor pagination, sort, and filter support.Query.projectJobs→ redundant; useQuery.projectJobsConnection.Query.projectAutocomplete→ marked WIP; do not depend on it.Mutation.deleteProject→ replaced byMutation.deleteProjectAsync, which returns aProjectJoband runs as a background job.Project.vintage: String!→ replaced byProject.vintageId: Int64(numeric for consistency).ProjectAssetAdaptation.relativeYear→ useholdPeriodinstead.Macroeconomic / company
Company.industryId→Company.industry.id(newIndustryobject).Company.sectorId→Company.sector.id(newSectorobject).@deprecated):econFactorClimate,econFactorScaleClimate,gdpChangeFactor,gdppcChangeFactor,medianAgeChangeFactor,nativeBornPctChangeFactor,populationChangeFactor,rppiChangeFactor,cppiChangeFactor,unemploymentChangeFactor.New features and additions
Adaptation (new domain)
Adaptation,AdaptationSummaryData,ModuleAdaptation,ModuleAdaptationSummary,ProjectAdaptationData,ProjectAdaptationSummaryData,ProjectAssetAdaptation,ProjectAssetAdaptationConnection,ProjectAssetAdaptationEdge,StagedAdaptation.AdaptationType(FLOOD_BARRIER_TO_1_FOOT … _8_FEET, FIRE_PROOFING, DEFENSIBLE_SPACE, WIND_DESIGN_STANDARD_LOW_TO_MEDIUM / _MEDIUM_TO_HIGH / _LOW_TO_HIGH, ROOF_TYPE_TO_METAL),ProjectAssetAdaptationSort.AdaptationsInput,ProjectAdaptationPlanItem,ProjectAssetAdaptationFilter,ProjectStagedAdaptationsInput,StagedAdaptationInput,UpdateProjectStagedAdaptationsInput,UpdateProjectStagedAdaptationsPlanInput,UpdateUserGroupStagedAdaptationsInput,DeleteUserGroupStagedAdaptationsInput.userGroupStagedAdaptations(placeId: String!): [StagedAdaptation]!,projectStagedAdaptations(input: ProjectStagedAdaptationsInput!): [StagedAdaptation]!.updateUserGroupStagedAdaptations,deleteUserGroupStagedAdaptations,updateProjectStagedAdaptations,updateProjectStagedAdaptationsPlan.Locality (new domain)
Locality,AssetLocality,ParentLocality,ModuleLocality,LocalityMacroeconomicData,ProjectLocalityData,ProjectLocalityExposure,ProjectLocalityExposureConnection,ProjectLocalityExposureEdge,ProjectLocalitiesPayload.AdministrativeLevel(ADMIN_0,ADMIN_1,ADMIN_2,METRO),ProjectLocalityExposureSort.LocalityFilter,LocalityExportInput,LocalityExportAssetsFilter,ProjectLocalitiesInput,ProjectLocalityExposureFilter.projectLocalities(input: ProjectLocalitiesInput!): ProjectLocalitiesPayload!.createLocalityMacroeconomicExport(input: LocalityExportInput!): ExportJob!.ProjectAssetFilteraddslocalityFilterandlocalityFiltersfields.AssetSortFilteradds anadminLevel: AdministrativeLevelfield.ProjectAssetadds alocality: AssetLocalityfield.Portfolio (new domain)
Portfolio,PortfolioContent,PortfolioContentConnection,PortfolioContentEdge,PortfolioFilterContent,PortfolioPathNode,PortfolioMap,PortfolioAssetDetails,PortfolioDashboardScore,PortfolioPerilScore,DirtySubportfolio,CopyPortfolioToNewParentPayload.PortfolioContentSort,PortfolioContentType,PortfolioStatus,PortfolioType.PortfolioInput,PortfolioContentsInput,CopyPortfolioToNewParentInput,DeletePortfolioFromParentInput,RefreshPortfolioInput,UpdatePortfolioAssetDetailsInput,UpdatePortfolioParentInput,DashboardScoreFilter.portfolio(input: PortfolioInput): Portfolio!,portfolioPath(projectId: Int64!): [PortfolioPathNode!]!.updatePortfolioAssetDetails,movePortfolio,removePortfolioFromParent,copyPortfolioToNewParent,movePortfolioAssetToNewParent,copyPortfolioAssetToNewParent,removePortfolioAssetFromParent,refreshPortfolio.Asset Valuation & Value Chain (new domain)
AssetValueChain,ValueChainData,ValueChainRevenueAtRisk,ValueChainRevenueRealized,RisksByValueChainData.ValueChainPosition,ProjectAssetClass.ProjectAssetFilteraddsvalueChainPosition: [ValueChainPosition!].ProjectAssetaddsvaluechain: AssetValueChain.Custom building values & staging
ProjectCustomBuildingValuesPayload,ProjectStagedCustomBuildingValuesPayload,UpdateProjectCustomBuildingValuesPayload,UpdateProjectStagedCustomBuildingValuesPayload.ProjectCustomBuildingValuesInput,UpdateProjectCustomBuildingValuesInput,UpdateProjectStagedCustomBuildingValuesInput,DeleteProjectStagedCustomBuildingValuesInput.projectCustomBuildingValues,projectStagedCustomBuildingValues.updateProjectCustomBuildingValues,updateProjectStagedCustomBuildingValues,deleteProjectStagedCustomBuildingValues.ProjectAssetaddsstagedBuilding: EnterpriseBuilding.Project lifecycle
ProjectsConnection,ProjectEdge,ProjectCloneJob(implementsProjectJob),ProjectClonePayload,DeleteProjectJob(implementsProjectJob),ProjectAutocompletePayload,ProjectAutocompleteResult,ProjectMaps.ProjectFilter,CompanyFilter,CompanySortFilter,ProjectCloneInput,ProjectAutocompleteInput,ProjectExportJobAssetFilters,AddProjectAssetInput,DeleteProjectAssetInput,UpdateREAParentInput.ProjectSort.projectsConnection,companiesConnection,projectAsset.deleteProjectAsync,addProjectAssetByPlaceID,deleteProjectAssetByPlaceID,createProjectClone,moveREAToNewParent,copyREAToNewParent,deleteREAFromParent.Projectgains:aiInsights,assetClass,assetCount,centroid,clonedFromProject,complexProperties,createdAt,maps,parentProjectId,portfolioAssetDetails,portfolioStatus,portfolioType,vintageId.ProjectStatusgains:CLONING,DELETING,DELETED.CreateProjectInputgainsparentProjectId.ProjectExportInputgainsprojectExportJobFilters: ProjectExportJobAssetFilters.RefreshProjectModuleInputgainsvintageId: Int64.ProjectExportJobTypegainsEQUITY_OVERVIEW,LOCALITY_MACROECONOMIC,FULL_PORTFOLIO.Hazard rollup peril (new)
AssetClimateExposureHazard,AssetHazardDamages,AssetHazardDamagesAAL,HazardExposureStatistics,LinearHazardExposureStatistics.AssetClimateExposuregains ahazard: AssetClimateExposureHazardfield aggregating all perils.AssetSortvalues:CLIMATE_EXPOSURE_HAZARD_FACTOR_SCORE_ASC/_DESC,CLIMATE_EXPOSURE_HAZARD_DAMAGE_AAL_*(ASC/DESC and_CASH_LOSS_*,_INTERRUPTION_*,_REPAIR_DAYS_*).Damage outputs expanded (Flood, Wind, Fire)
AssetFloodDamagesAssetadds:interruptionLoss: Int64,cashLoss: Int64,operatorLoss: Int64.AssetWindDamagesAssetadds:interruptionLoss: Int64,cashLoss: Int64,operatorLoss: Int64.New
AssetSortvalues for these dimensions:CLIMATE_EXPOSURE_FLOOD_CASH_LOSS_*,CLIMATE_EXPOSURE_FLOOD_INTERRUPTION_LOSS_*,CLIMATE_EXPOSURE_FLOOD_LOW_POINT_*,CLIMATE_EXPOSURE_FLOOD_DAMAGE_AAL_CASH_LOSS_*,CLIMATE_EXPOSURE_FLOOD_DAMAGE_AAL_INTERRUPTION_*,CLIMATE_EXPOSURE_FLOOD_DAMAGE_AAL_REPAIR_DAYS_*, plus the equivalentWIND_*andFIRE_*variants.New peril surfaces (Air, Hail) and exposure statistics
FloodExposureStatistics,FireExposureStatistics,WindExposureStatistics,HeatExposureStatistics,ColdExposureStatistics,DroughtExposureStatistics,HazardExposureStatistics,RegionalExposure, plusLinear*variants for each (LinearFloodExposureStatistics,LinearFireExposureStatistics,LinearWindExposureStatistics,LinearHeatExposureStatistics,LinearColdExposureStatistics,LinearDroughtExposureStatistics,LinearHazardExposureStatistics,LinearAssetAnalysisData).RegionalExposureInput.AssetSortvalues:CLIMATE_EXPOSURE_AIR_FACTOR_SCORE_ASC/_DESC,CLIMATE_EXPOSURE_HAIL_FACTOR_SCORE_ASC/_DESC.Macroeconomic (new domain)
MacroeconomicData,LocalityMacroeconomicData,ModuleMacroeconomic,EconFactorDistribution,PerilBucketDistribution,BucketStat.EconFactorDistributionFilter.AssetSortvalues: extensiveMETRO_MACROECONOMIC_*family covering GDP, GDPPC, population, gross income, price of living, and theirCHANGE_FACTOR_CLIMATE/CHANGE_FACTOR_CLIMATE_MARKETvariants (ASC/DESC for each).Equity / Company / Industry (new domain)
CompanyOverviewData,EquityScoreData,Industry,Sector,ModuleCompanyOverview,ModuleLinearAssetAnalysis,FactorScore.InvestmentStage.Company.industry: IndustryandCompany.sector: Sectorreplace the deprecatedindustryId/sectorIdstrings.Link sharing (new domain)
LinkShare,LinkShareEdge,LinkSharePayload,LinkSharesConnection,GenerateLinkSharePayload,UpdateLinkSharePayload.LinkSharesSort.LinkShareInput,GenerateLinkShareInput,UpdateLinkShareInput.linkShare(input: LinkShareInput!): LinkSharePayload!,linkSharesConnection(...).generateLinkShare,linkShare(linkId: String!): LinkShare,updateLinkShare.Viewed history (new)
ViewedHistoryItem,ViewedHistoryList.ViewedHistoryItemType,ViewedItemsSort.SaveViewHistoryInput,EntDeleteViewedHistoryInput.viewedHistoryList(sort: ViewedItemsSort): ViewedHistoryList.saveViewedHistoryItem,deleteViewedHistoryItem.AI Insights (new)
AIInsights,ModuleOverviewAI summary surfacing.AIInsightsStatus(GENERATING,GENERATED,FAILED,DIRTY).Project.aiInsights: AIInsights.User & user groups
UserGroup,UserSubgroup.DeleteUserDataInput.userGroup: UserGroup.deleteUserData(input: DeleteUserDataInput!): RequestStatus!.Geospatial primitives (new)
BoundingBox,Coordinate,Feature,Map,ComplexProperties.ComplexType,MapStatus,OccupancyType,AssetStatus.Time.Project asset additions
ProjectAssetgains:buildingMetadata: AssetBuildingMetadata,locality: AssetLocality,stagedBuilding: EnterpriseBuilding,valuechain: AssetValueChain,newlyAdded: Boolean,deleted: Boolean,createdAt: Date,geocodeQualityScore: Int.ProjectAssetFiltergains:localityFilter,localityFilters,locationValidated,valueChainPosition.Migration guide
1. Replace
Factorintegers withfactorScoreBefore
After
2. Replace
AssetSortfactor enums with_SCORE_variantsBefore
After
3. Paginate projects with
projectsConnectionBefore
After
4. Use
projectJobsConnectioninstead ofprojectJobsBefore
After
5. Switch to
deleteProjectAsyncBefore
After
The async version returns a
ProjectJob(specificallyDeleteProjectJob) that you can poll viaprojectJob(projectJobId:). The project entersProjectStatus.DELETINGand transitions toDELETEDwhen the job completes.6. Use
vintageIdinstead ofvintageBefore
After
vintageIdisInt64; update client types accordingly.7. Use
holdPeriodinstead ofrelativeYearon adaptationsBefore
After
8. Replace
Company.industryId/sectorIdwith the nested objectsBefore
{ company { industryId sectorId } }After
{ company { industry { id name } sector { id name } } }9. Drop obsolete macroeconomic factor fields
The following are now
@deprecatedwith reason "This parameter is obsolete." and should be removed from queries:econFactorClimate,econFactorScaleClimate,gdpChangeFactor,gdppcChangeFactor,medianAgeChangeFactor,nativeBornPctChangeFactor,populationChangeFactor,rppiChangeFactor,cppiChangeFactor,unemploymentChangeFactor. Use the newMacroeconomicData/LocalityMacroeconomicDatasurfaces and theMETRO_MACROECONOMIC_*sort enum variants instead.10. Avoid
projectAutocompleteIt is shipped but marked
@deprecated(reason: "WIP"). Do not depend on its shape; it is subject to change without further notice.