Cost Data API Reference
Welcome to the 1build Cost Data API reference guide!
This guide includes the complete set of GraphQL types, queries, mutations, and their parameters for searching and retrieving cost data from the 1build API.
GraphQL
The 1build API is a GraphQL based interface to our cost database. If you would like an introduction to using GraphQL, some good resources are:
If you need assistance or are having trouble implementing your API client, please reach out to 1build support at help@1build.com.
API Endpoints
# Production Server:
https://gateway-external.1build.com/
Headers
# API key. Must be included in all API calls.
1build-api-key: 1build_ext.aBcDeFgHi.AbCdEfGhIjKlMnOpQrStUvWxYz123456Getting Started
Authentication
Access to the API is authenticated by your API key which will need to be passed in the 1build-api-key HTTP header with each request. API keys are unique to your organization and they come in two types:
- EXTERNAL- for use with backend integrations
- EMBEDDED- for use with client-side integrations
Because the EMBEDDED key must be included in your client-side code it cannot be kept secret. For this reason you must configure referrers in your 1build organization preferences to match the domain name of the website hosting the code which will call the API. For example, if your application is hosted at https://constructionmagic.com/parts/lookup, you would put https://constructionmagic.com/ in your referrers list.
An EXTERNAL key does not require referrers to be configured. Please keep this key private to your organization.
If you need an API key or for help using one please contact help@1build.com.
Your first query
Typically you will use a GraphQL client to help make your queries for you however this is not required. You can make requests directly via HTTP using your language's prefered idioms. If you do want to use a client, there are many options to choose from.
All queries are POST requests to the API endpoint: https://gateway-external.1build.com.
To try out a request, a good place to start is with a sources query. This query will perform a search on the 1build cost database and return matching records.
Request Headers
POST https://gateway-external.1build.com/ HTTP/1.1
content-type: application/json
1build-api-key: 1build_ext.jD0bjzZS.bm7hWEnDb2OffSrTprL385eD9008bLBi
Note the API key is included in the 1build-api-key header and the request is made to the https://gateway-external.1build.com/ endpoint.
Query
query sources($input: SourceSearchInput!) {
    sources(input: $input) {
        nodes {
            id
            name
            calculatedUnitRateUsdCents
            laborRateUsdCents
            materialRateUsdCents
        }
    }
GraphQL lets the client define which fields of a type to return. In this case we request a subset of the full sources schema. Namely the paginated nodes field along with a few fields on each node returned.
Variables
{
    "input": {
        "state": "California",
        "county": "Los Angeles County",
        "searchTerm": "water filtration",
        "page": {
            "limit": 3
        }
    }
}
The sources query takes a SourceSearchInput type as an argument which requires the state, county and searchTerm fields. We are searching for "water filtration" systems in Los Angeles County, California.
The other fields are optional. We could have specified a categoryPath to search only within a certain category hierarchy such as "Plumbing, Rough-In". Categories can be explored using the categoryTreeItems query.
Since sources returns a paginated response we can specify how many results we want returned. We ask for 3 results.
Response
{
    "data": {
        "sources": {
            "nodes": [
                {
                    "id": "8514f9ba-23e6-41c0-914e-a47cb233320c",
                    "name": "1-Stage and Whole House Water Filtration System",
                    "calculatedUnitRateUsdCents": 31502,
                    "laborRateUsdCents": 2856,
                    "materialRateUsdCents": 31025
                },
                {
                    "id": "fd075a43-1c7c-48ef-b804-f6b8da31f2fe",
                    "name": "3-Stage Whole House 20\" Big Water Filtration System",
                    "calculatedUnitRateUsdCents": 52377,
                    "laborRateUsdCents": 2856,
                    "materialRateUsdCents": 51900
                },
                {
                    "id": "1949599e-2adb-475c-8de6-61b987770c78",
                    "name": "4-Stage 300,000 gal. Whole House Water Filtration System",
                    "calculatedUnitRateUsdCents": 48399,
                    "laborRateUsdCents": 2856,
                    "materialRateUsdCents": 47922
                }
            ]
        }
    }
}
The response comes back with the three requested results. These results are sorted by relevancy.
Note: All costs returned by the API are represented as integers in USD cents. To display this value to the end-user you will likely want to convert it into dollars by dividing by 100.
Congratulations! You are now ready to incorporate up-to-date localized cost data into your application.
Core Types
The most important types to understand when working with the 1build Cost Data API are Source and CategoryTreeItem.
Source
A Source is the basic informational element of our cost data API. It holds cost and procurement information for the product or service in question. Sources can represent many different types of items and are broken down by type into the following broad groups:
| SourceType | Description | 
|---|---|
| MATERIAL | A physical piece of construction material, i.e. "5/8" 4X12' Drywall" | 
| EQUIPMENT | A tool or machine, typically for rent, i.e. "15-17' Electric Scissor Lift (Daily Rental)" | 
| ASSEMBLY | A source composed of multiple nested sources of any type, i.e. "Flooring: Sheet Carpet" which includes the nested sources Texture Carpet" and "7/16" 8 lb. Density Carpet Padding" | 
| LABOR | The rate per unit time for a professional to perform a service, i.e. "Tile and Stone Setter" | 
| SCOPE | A scope of work which is billed out to a contractor, typically not hourly, i.e. "Testing - Soil" | 
Sources come with a lot of additional information which will indicate the name, description, images, price, location, division, etc. For the details of these fields see Source.
Sources are discovered by searching our indexed database for a searchTerm. This is done via the sources query. In addition to a searchTerm you can specify a categoryPath to search only for results in that category path.
CategoryTreeItem
All sources in the API are assigned to a category. This helps to limit the scope when searching for terms which may be common across categories. A category is represented by a CategoryTreeItem which are arranged in a hierarchy.
To discover and browse the category hierarchy make use of the categoryTreeItems query. This query returns a list of nodes and indicates if they have sub-categories below them. By passing a search term into this query you can restrict the results to those categories which have search results within them.
Recommended Usage
Our recommended approach to designing a user experience around the 1build Cost Data API is composed of a combination of searching and browsing which lets the user quickly narrow down their result set and pick a source which matches their needs.
The idea is to provide search results based on a search term and to allow the user to then optionally narrow down these results by browsing categories.
- Accept a search term from the user. Either explicitly via a search input box or implicitly based on the name of a pre-existing item.
- Perform a sourcesquery using thesearchTermfield to search all sources for the user's input. This returns the top results for that term.
- Display the results to the user. Show a detail view for the result if the user clicks on it.
- Simultaneously with the inital search, perform a categoryTreeItemsquery using the samesearchTermand an emptycategoryPathto get a list of top level categories which contain this term within their child hierarchy.
- Display the returned categories below the top search results and allow the user to select one.
- If a category is selected, perform another categoryTreeItemsquery with the category appended to thecategoryPath. This will return sub-categories which contain the search term.
- Repeat this navigation until the user clicks on a category with no sub-categories.
- If a category has no sub-categories (indicated by the hasSubCategoriesfield) then it will contain search results. Load these results via asourcesquery using the fullcategoryPathandsearchTerm.
- Display these results below the selected leaf category.
As an optional approach, you could implement the above process without an initial search term and let the user just browse categories to find their result. A categoryTreeItems query without a searchTerm will return all categories. The navigation of sub-categories can be implemented as described above. A sources query without a searchTerm will return all results in the given category (up to the requested page limit, 10 by default).
Note: There is no API billing charge for accessing the categoryTreeItems query, only for Source or NestedSource objects returned from the sources query.
Queries
              categoryTreeItems
            
            Description
Used to browse the category tree. Each category item has a property hasSubCategories. To list the sub-categories of a Category it's possible to use the categoryPath input. The 1build data is county-based, i.e. the API shows rates by state/county. It's possible to search categories by zipcode or coordinate (lat, lng), but these inputs are used to find the closest county. The used county for searching is available in the query response (check the DataLocation node)
Response
 Returns a CategoryTreeItems
                  
Arguments
| Name | Description | 
|---|---|
| input-CategoryPathSearchInput! | 
Example
Query
query categoryTreeItems($input: CategoryPathSearchInput!) {
  categoryTreeItems(input: $input) {
    nodes {
      id
      name
      hasSubCategories
    }
    pageInfo {
      hasNextPage
    }
    dataLocation {
      countyName
      stateName
    }
  }
}
Variables
{"input": CategoryPathSearchInput}
Response
{
  "data": {
    "categoryTreeItems": {
      "nodes": [CategoryTreeItem],
      "pageInfo": OffsetBasedPageInfo,
      "dataLocation": DataLocation
    }
  }
}
              sources
            
            Description
List sources per location and source type with an optional search term and category tree filter. The 1build data is county-based, i.e. the API shows rates by state/county. It's possible to search sources by zipcode or coordinate (lat, lng), but these inputs are used to find the closest county. The used county for searching is available in the query response (check the DataLocation node)
Response
 Returns a Sources
                  
Arguments
| Name | Description | 
|---|---|
| input-SourceSearchInput! | 
Example
Query
query sources($input: SourceSearchInput!) {
  sources(input: $input) {
    nodes {
      state
      county
      csiDivision
      csiDivisionNumber
      csiDivisionName
      csiSection
      csiTitle
      nahbDivision
      nahbDivisionDescription
      nahbCode
      nahbCodeDescription
      categoryPath
      properties {
        name
        value
        uom
        quantity
      }
      description
      imagesUrls
      nestedSources {
        parentId
        quantity
        seqNum
        formula
        id
        sourceType
        name
        uom
        inputUOM
        outputUOM
        materialRateUsdCents
        laborRateUsdCents
        burdenedLaborRateUsdCents
        productionRate
        calculatedUnitRateUsdCents
        imagesUrls
        description
        externalProductUrl
        csiDivision
        csiSection
        csiTitle
        stockQuantity
      }
      knownUoms {
        uom
        materialRateUsdCents
        laborRateUsdCents
        burdenedLaborRateUsdCents
        productionRate
        calculatedUnitRateUsdCents
      }
      id
      sourceType
      name
      uom
      inputUOM
      outputUOM
      materialRateUsdCents
      laborRateUsdCents
      burdenedLaborRateUsdCents
      laborSourceId
      laborName
      productionRate
      calculatedUnitRateUsdCents
      externalProductUrl
      stockQuantity
    }
    pageInfo {
      hasNextPage
    }
    dataLocation {
      countyName
      stateName
    }
    totalCount
  }
}
Variables
{"input": SourceSearchInput}
Response
{
  "data": {
    "sources": {
      "nodes": [Source],
      "pageInfo": OffsetBasedPageInfo,
      "dataLocation": DataLocation,
      "totalCount": 987
    }
  }
}
              sourcesBatch
            
            Description
Retrieve a batch of sources by id, type and location. The max batch size is 1000
Response
 Returns [Source!]
                  
Arguments
| Name | Description | 
|---|---|
| input-SourceBatchInput! | 
Example
Query
query sourcesBatch($input: SourceBatchInput!) {
  sourcesBatch(input: $input) {
    state
    county
    csiDivision
    csiDivisionNumber
    csiDivisionName
    csiSection
    csiTitle
    nahbDivision
    nahbDivisionDescription
    nahbCode
    nahbCodeDescription
    categoryPath
    properties {
      name
      value
      uom
      quantity
    }
    description
    imagesUrls
    nestedSources {
      parentId
      quantity
      seqNum
      formula
      id
      sourceType
      name
      uom
      inputUOM
      outputUOM
      materialRateUsdCents
      laborRateUsdCents
      burdenedLaborRateUsdCents
      productionRate
      calculatedUnitRateUsdCents
      imagesUrls
      description
      externalProductUrl
      csiDivision
      csiSection
      csiTitle
      stockQuantity
    }
    knownUoms {
      uom
      materialRateUsdCents
      laborRateUsdCents
      burdenedLaborRateUsdCents
      productionRate
      calculatedUnitRateUsdCents
    }
    id
    sourceType
    name
    uom
    inputUOM
    outputUOM
    materialRateUsdCents
    laborRateUsdCents
    burdenedLaborRateUsdCents
    laborSourceId
    laborName
    productionRate
    calculatedUnitRateUsdCents
    externalProductUrl
    stockQuantity
  }
}
Variables
{"input": SourceBatchInput}
Response
{
  "data": {
    "sourcesBatch": [
      {
        "state": "Colorado",
        "county": "Denver County",
        "csiDivision": "DIVISION09",
        "csiDivisionNumber": "09",
        "csiDivisionName": "Finishes",
        "csiSection": "02 23 20.10",
        "csiTitle": "Gypsum Plaster",
        "nahbDivision": "02000",
        "nahbDivisionDescription": "Excavation and Foundation",
        "nahbCode": "02100",
        "nahbCodeDescription": "Footings and Foundation",
        "categoryPath": ["Interiors"],
        "properties": [SourceProperty],
        "description": "4.5 gal. All Purpose Ready-Mixed Joint Compound is commonly used to fill in the gaps between pieces of drywall. The joint compound is mixed with water to create a paste-like substance that can be spread over the drywall using a putty knife. The joint compound will dry to a smooth, white finish that can be sanded down if necessary.",
        "imagesUrls": [
          "https://1b-production-product-images.s3.us-west-2.amazonaws.com/images/fe210500-76f7-4a46-9907-27b57db3b48e/0.png"
        ],
        "nestedSources": [NestedSource],
        "knownUoms": [KnownUom],
        "id": 4,
        "sourceType": "MATERIAL",
        "name": "Drywall: Walls 12' 1/2\" Regular Drywall",
        "uom": "LF",
        "inputUOM": "xyz789",
        "outputUOM": "abc123",
        "materialRateUsdCents": 2,
        "laborRateUsdCents": 2121,
        "burdenedLaborRateUsdCents": 3147,
        "laborSourceId": "363e5fa5-c2f1-45a7-a538-0ea40743c853",
        "laborName": "Drywall and Ceiling Tile Installer",
        "productionRate": 100,
        "calculatedUnitRateUsdCents": 33,
        "externalProductUrl": "xyz789",
        "stockQuantity": 123
      }
    ]
  }
}
              sourcesCounts
            
            Description
Return the counts of available sources for the query input.
Response
 Returns a SourcesCountPayload
                  
Arguments
| Name | Description | 
|---|---|
| input-SourceSearchInput! | 
Example
Query
query sourcesCounts($input: SourceSearchInput!) {
  sourcesCounts(input: $input) {
    totalCount
    counts {
      supplierName
      totalCount
      supplierLogoUrl
    }
  }
}
Variables
{"input": SourceSearchInput}
Response
{
  "data": {
    "sourcesCounts": {
      "totalCount": 987,
      "counts": [SourcesCount]
    }
  }
}
              uoms
            
            Description
Used to retrieve the list of all the supported units of measure that can be returned by the API.
Response
 Returns [UoM!]!
                  
Example
Query
query uoms {
  uoms {
    name
    description
    type
    definition
  }
}
Response
{
  "data": {
    "uoms": [
      {
        "name": "LF",
        "description": "Linear Feet",
        "type": "D1",
        "definition": "1 ft"
      }
    ]
  }
}
Types
Boolean
Description
The Boolean scalar type represents true or false.
Example
true
CategoryPathSearchInput
Fields
| Input Field | Description | 
|---|---|
| sourceType-SourceType | Type of Source to search | 
| state-state_String_minLength_1 | State for localized cost data | 
| county-county_String_minLength_1 | County for localized cost data | 
| coordinate-Coordinate | Term to search | 
| zipcode-String | |
| searchTerm-String | |
| categoryPath-[String] | Category path to search | 
| page-PageInfoInput | |
| sortBy-SortInfoInput | |
| filter-SourceFilterInput | 
Example
{
  "sourceType": "MATERIAL",
  "state": "Colorado",
  "county": "Denver County",
  "coordinate": Coordinate,
  "zipcode": "80123",
  "searchTerm": "5/8' 4X8' Type-X Drywall",
  "categoryPath": ["Drywall: Hang, Tape, Finish", "Gypsum Board", "Type X"],
  "page": PageInfoInput,
  "sortBy": SortInfoInput,
  "filter": SourceFilterInput
}
CategoryTreeItem
Description
Simple category tree item with id and name
Example
{
  "id": "Plumbing, Rough-In > ABS Pipe",
  "name": "Drywall: Hang, Tape, Finish",
  "hasSubCategories": true
}
CategoryTreeItems
Fields
| Field Name | Description | 
|---|---|
| nodes-[CategoryTreeItem!] | |
| pageInfo-OffsetBasedPageInfo! | |
| dataLocation-DataLocation | 
Example
{
  "nodes": [CategoryTreeItem],
  "pageInfo": OffsetBasedPageInfo,
  "dataLocation": DataLocation
}
Coordinate
DataLocation
Float
Description
The Float scalar type represents signed double-precision fractional values as specified by IEEE 754.
Example
123.45
ID
Description
The ID scalar type represents a unique identifier, often used to refetch an object or as key for a cache. The ID type appears in a JSON response as a String; however, it is not intended to be human-readable. When expected as an input type, any string (such as "4") or integer (such as 4) input value will be accepted as an ID.
Example
4
Int
Description
The Int scalar type represents non-fractional signed whole numeric values. Int can represent values between -(2^31) and 2^31 - 1.
Example
987
KnownUom
Description
Contains the calculated rates of a source when using for a Unit of measure. See also: Source.materialRateUsdCents, Source.laborRateUsdCents, Source.productionRate, Source.calculatedUnitRateUsdCents
Fields
| Field Name | Description | 
|---|---|
| uom-String! | Unit of Measure such as each, linear foot, square feet, etc. | 
| materialRateUsdCents-Int | The cost of one unit of measure of this material in USD cents. | 
| laborRateUsdCents-Int | The labor cost in USD cents. The labor cost is per hour for all source types, except Assemblies. For assemblies the labor cost is per unit. | 
| burdenedLaborRateUsdCents-Int | The burdened labor cost in USD cents. Burdened Labor Rate includes the hourly base rate for an employee in addition to added expenses like insurance, workers comp, and legally required benefits like social security | 
| productionRate-Float | The amount of unit that can be installed per hour. | 
| calculatedUnitRateUsdCents-Int! | The calculated unit rate in USD cents using the formula: Material rate + (Labor rate / Prod.rate). For assemblies the calculated cost is Material rate + Labor rate, because the Labor Rate is unit based (see laborRateUsdCents property). | 
Example
{
  "uom": "SF",
  "materialRateUsdCents": 40,
  "laborRateUsdCents": 1917,
  "burdenedLaborRateUsdCents": 2844,
  "productionRate": 12.5,
  "calculatedUnitRateUsdCents": 268
}
NestedSource
Description
Represents a source used to create another source like a material of an assembly. These will be returned on a source of type Assembly only when requested.
Fields
| Field Name | Description | 
|---|---|
| parentId-ID! | |
| quantity-Float | The amount of nested source used to build the parent source. | 
| seqNum-Int | Used to sort the nested sources of a parent source. | 
| formula-String | The formula is used to calculate the amount of nested source based on the parent's properties. Properties are referenced by the property name from the parent assemblies list of properties. Properties are designated by wrapping the name in curly braces i.e. {Property Name}. | 
| id-ID! | |
| sourceType-SourceType! | |
| name-String! | |
| uom-String! | |
| inputUOM-String | Deprecated in favor of UOM field | 
| outputUOM-String | Deprecated in favor of UOM field | 
| materialRateUsdCents-Int | |
| laborRateUsdCents-Int | |
| burdenedLaborRateUsdCents-Int | |
| productionRate-Float | |
| calculatedUnitRateUsdCents-Int! | |
| imagesUrls-[String!] | |
| description-String | |
| externalProductUrl-String | |
| csiDivision-String | |
| csiSection-String | |
| csiTitle-String | |
| stockQuantity-Int | 
Example
{
  "parentId": "4",
  "quantity": 123.45,
  "seqNum": 123,
  "formula": "({Wall Length}*{Wall Height}) + 1 LF",
  "id": 4,
  "sourceType": "MATERIAL",
  "name": "xyz789",
  "uom": "abc123",
  "inputUOM": "abc123",
  "outputUOM": "xyz789",
  "materialRateUsdCents": 987,
  "laborRateUsdCents": 123,
  "burdenedLaborRateUsdCents": 987,
  "productionRate": 123.45,
  "calculatedUnitRateUsdCents": 987,
  "imagesUrls": ["abc123"],
  "description": "abc123",
  "externalProductUrl": "xyz789",
  "csiDivision": "abc123",
  "csiSection": "xyz789",
  "csiTitle": "abc123",
  "stockQuantity": 987
}
Node
Fields
| Field Name | Description | 
|---|---|
| id-ID! | 
Possible Types
| Node Types | 
|---|
Example
{"id": 4}
OffsetBasedConnection
Fields
| Field Name | Description | 
|---|---|
| nodes-[Node!] | |
| pageInfo-OffsetBasedPageInfo! | 
Possible Types
| OffsetBasedConnection Types | 
|---|
Example
{
  "nodes": [Node],
  "pageInfo": OffsetBasedPageInfo
}
OffsetBasedPageInfo
Fields
| Field Name | Description | 
|---|---|
| hasNextPage-Boolean! | 
Example
{"hasNextPage": false}
PageInfoInput
Fields
| Input Field | Description | 
|---|---|
| offset-offset_Int_min_0 | |
| limit-limit_Int_min_1_max_1000 | 
Example
{
  "offset": offset_Int_min_0,
  "limit": limit_Int_min_1_max_1000
}
SortInfoInput
Fields
| Input Field | Description | 
|---|---|
| type-SortType | 
Example
{"type": "NAME"}
SortType
Values
| Enum Value | Description | 
|---|---|
| 
 | Sort by item name (The default) | 
| 
 | Sort by the match score (input filters vs item) | 
| 
 | Sort by item rate | 
Example
"NAME"
Source
Description
A source can represent a material, an assembly, etc. See the SourceType enum
Fields
| Field Name | Description | 
|---|---|
| state-String | |
| county-String | |
| csiDivision-String | |
| csiDivisionNumber-String | |
| csiDivisionName-String | |
| csiSection-String | |
| csiTitle-String | |
| nahbDivision-String | |
| nahbDivisionDescription-String | |
| nahbCode-String | |
| nahbCodeDescription-String | |
| categoryPath-[String] | |
| properties-[SourceProperty] | |
| description-String | Describes from what the source is made, how it can be used, what is included at the price, etc. | 
| imagesUrls-[String!] | A list of urls to the item's images. | 
| nestedSources-[NestedSource] | One source can be made of another sources like assemblies are made of a set of materials | 
| knownUoms-[KnownUom] | A list of unit of measures available to the source. Each item contains the calculated rates for the respective UOM | 
| id-ID! | |
| sourceType-SourceType! | |
| name-String! | |
| uom-String! | The Unit of measure of the item. | 
| inputUOM-String | Deprecated in favor of UOM field | 
| outputUOM-String | Deprecated in favor of UOM field | 
| materialRateUsdCents-Int | The material cost of one unit in USD cents | 
| laborRateUsdCents-Int | The labor cost in USD cents. The labor cost is per hour for all source types, except Assemblies. For assemblies the labor cost is per unit. | 
| burdenedLaborRateUsdCents-Int | The burdened labor cost in USD cents. Burdened Labor Rate includes the hourly base rate for an employee in addition to added expenses like insurance, workers comp, and legally required benefits like social security. | 
| laborSourceId-String | The source id of the labor from where the labor rate is taken. | 
| laborName-String | The name of the labor from where the labor rate is taken. | 
| productionRate-Float | A decimal number representing the amount of unit that can be installed per hour. | 
| calculatedUnitRateUsdCents-Int! | The calculated unit rate in USD cents using the formula: Material rate + (Labor rate / Prod.rate). For assemblies the calculated cost is Material rate + Labor rate, because the Labor Rate is unit based (see laborRateUsdCents property). | 
| externalProductUrl-String | The product URL in an external platform | 
| stockQuantity-Int | The number of items available for ordering at the specified store | 
Example
{
  "state": "Colorado",
  "county": "Denver County",
  "csiDivision": "DIVISION09",
  "csiDivisionNumber": "09",
  "csiDivisionName": "Finishes",
  "csiSection": "02 23 20.10",
  "csiTitle": "Gypsum Plaster",
  "nahbDivision": "02000",
  "nahbDivisionDescription": "Excavation and Foundation",
  "nahbCode": "02100",
  "nahbCodeDescription": "Footings and Foundation",
  "categoryPath": ["Interiors"],
  "properties": [SourceProperty],
  "description": "4.5 gal. All Purpose Ready-Mixed Joint Compound is commonly used to fill in the gaps between pieces of drywall. The joint compound is mixed with water to create a paste-like substance that can be spread over the drywall using a putty knife. The joint compound will dry to a smooth, white finish that can be sanded down if necessary.",
  "imagesUrls": [
    "https://1b-production-product-images.s3.us-west-2.amazonaws.com/images/fe210500-76f7-4a46-9907-27b57db3b48e/0.png"
  ],
  "nestedSources": [NestedSource],
  "knownUoms": [KnownUom],
  "id": "4",
  "sourceType": "MATERIAL",
  "name": "Drywall: Walls 12' 1/2\" Regular Drywall",
  "uom": "LF",
  "inputUOM": "xyz789",
  "outputUOM": "abc123",
  "materialRateUsdCents": 2,
  "laborRateUsdCents": 2121,
  "burdenedLaborRateUsdCents": 3147,
  "laborSourceId": "363e5fa5-c2f1-45a7-a538-0ea40743c853",
  "laborName": "Drywall and Ceiling Tile Installer",
  "productionRate": 100,
  "calculatedUnitRateUsdCents": 33,
  "externalProductUrl": "abc123",
  "stockQuantity": 123
}
SourceBatchInput
Fields
| Input Field | Description | 
|---|---|
| items-[SourceBatchInputItem!]! | |
| state-state_String_minLength_1 | |
| county-county_String_minLength_1 | |
| coordinate-Coordinate | |
| zipcode-String | 
Example
{
  "items": [SourceBatchInputItem],
  "state": "Colorado",
  "county": "Denver County",
  "coordinate": Coordinate,
  "zipcode": "80123"
}
SourceBatchInputItem
Fields
| Input Field | Description | 
|---|---|
| sourceId-ID! | 
Example
{"sourceId": 4}
SourceFilterInput
SourceProperty
Description
Represents a property of one Source. Samples: Wall Height, Stud Spacing, etc.
Example
{"name": "Wall Length", "value": 1, "uom": "LF", "quantity": true}
SourceSearchInput
Fields
| Input Field | Description | 
|---|---|
| sourceType-SourceType | |
| state-state_String_minLength_1 | |
| county-county_String_minLength_1 | |
| coordinate-Coordinate | |
| zipcode-String | |
| searchTerm-String | |
| categoryPath-[String] | |
| page-PageInfoInput | |
| sortBy-SortInfoInput | |
| filter-SourceFilterInput | 
Example
{
  "sourceType": "MATERIAL",
  "state": "Colorado",
  "county": "Denver County",
  "coordinate": Coordinate,
  "zipcode": "80123",
  "searchTerm": "drywall",
  "categoryPath": ["Interiors"],
  "page": PageInfoInput,
  "sortBy": SortInfoInput,
  "filter": SourceFilterInput
}
SourceType
Description
a
Values
| Enum Value | Description | 
|---|---|
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | 
Example
"MATERIAL"
Sources
Description
A paginated list of Source types
Fields
| Field Name | Description | 
|---|---|
| nodes-[Source!] | |
| pageInfo-OffsetBasedPageInfo! | |
| dataLocation-DataLocation | |
| totalCount-Int | 
Example
{
  "nodes": [Source],
  "pageInfo": OffsetBasedPageInfo,
  "dataLocation": DataLocation,
  "totalCount": 123
}
SourcesCount
Description
Response for sourcesCount
Example
{
  "supplierName": "xyz789",
  "totalCount": 987,
  "supplierLogoUrl": "abc123"
}
SourcesCountPayload
Description
Response for sourcesCount
Fields
| Field Name | Description | 
|---|---|
| totalCount-Int | TODO: Remove | 
| counts-[SourcesCount!]! | 
Example
{"totalCount": 123, "counts": [SourcesCount]}
String
Description
The String scalar type represents textual data, represented as UTF-8 character sequences. The String type is most often used by GraphQL to represent free-form human-readable text.
Example
"xyz789"
UoM
UoMType
Description
Represents a unit of measure
Values
| Enum Value | Description | 
|---|---|
| 
 | For example "EA" or "BOX" | 
| 
 | For example "IN" or "LF" | 
| 
 | For example "SQIN" or "SF" | 
| 
 | For example "CUIN" or "GAL" | 
| 
 | For example "LBS" or "OZ" | 
| 
 | For example "DY" or "MO" | 
Example
"ITEM"
county_String_minLength_1
Example
county_String_minLength_1
limit_Int_min_1_max_1000
Example
limit_Int_min_1_max_1000
offset_Int_min_0
Example
offset_Int_min_0
state_String_minLength_1
Example
state_String_minLength_1