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.


Contact

1build Support

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.AbCdEfGhIjKlMnOpQrStUvWxYz123456

Getting 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.

  1. 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.
  2. Perform a sources query using the searchTerm field to search all sources for the user's input. This returns the top results for that term.
  3. Display the results to the user. Show a detail view for the result if the user clicks on it.
  4. Simultaneously with the inital search, perform a categoryTreeItems query using the same searchTerm and an empty categoryPath to get a list of top level categories which contain this term within their child hierarchy.
  5. Display the returned categories below the top search results and allow the user to select one.
  6. If a category is selected, perform another categoryTreeItems query with the category appended to the categoryPath. This will return sub-categories which contain the search term.
  7. Repeat this navigation until the user clicks on a category with no sub-categories.
  8. If a category has no sub-categories (indicated by the hasSubCategories field) then it will contain search results. Load these results via a sources query using the full categoryPath and searchTerm.
  9. 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": 123,
      "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.

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

Fields
Field Name Description
id - ID!
name - String!
hasSubCategories - Boolean! True if subCategories exist and have search results
Example
{
  "id": "Plumbing, Rough-In > ABS Pipe",
  "name": "Drywall: Hang, Tape, Finish",
  "hasSubCategories": false
}

CategoryTreeItems

Fields
Field Name Description
nodes - [CategoryTreeItem!]
pageInfo - OffsetBasedPageInfo!
dataLocation - DataLocation
Example
{
  "nodes": [CategoryTreeItem],
  "pageInfo": OffsetBasedPageInfo,
  "dataLocation": DataLocation
}

Coordinate

Description

Represents a longitude / latitude coordinate

Fields
Input Field Description
lng - Float!
lat - Float!
Example
{"lng": -104.97, "lat": 39.72}

DataLocation

Description

The 1build data is county-based, and the DataLocation node shows the county used for searching.

Fields
Field Name Description
countyName - String
stateName - String
Example
{
  "countyName": "xyz789",
  "stateName": "xyz789"
}

Float

Description

The Float scalar type represents signed double-precision fractional values as specified by IEEE 754.

Example
987.65

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": 987.65,
  "seqNum": 123,
  "formula": "({Wall Length}*{Wall Height}) + 1 LF",
  "id": 4,
  "sourceType": "MATERIAL",
  "name": "xyz789",
  "uom": "xyz789",
  "inputUOM": "xyz789",
  "outputUOM": "xyz789",
  "materialRateUsdCents": 987,
  "laborRateUsdCents": 987,
  "burdenedLaborRateUsdCents": 123,
  "productionRate": 123.45,
  "calculatedUnitRateUsdCents": 123,
  "imagesUrls": ["abc123"],
  "description": "abc123",
  "externalProductUrl": "xyz789",
  "csiDivision": "abc123",
  "csiSection": "xyz789",
  "csiTitle": "xyz789",
  "stockQuantity": 123
}

Node

Fields
Field Name Description
id - ID!
Possible Types
Node Types

CategoryTreeItem

Source

NestedSource

Example
{"id": "4"}

OffsetBasedConnection

Fields
Field Name Description
nodes - [Node!]
pageInfo - OffsetBasedPageInfo!
Possible Types
OffsetBasedConnection Types

CategoryTreeItems

Sources

Example
{
  "nodes": [Node],
  "pageInfo": OffsetBasedPageInfo
}

OffsetBasedPageInfo

Fields
Field Name Description
hasNextPage - Boolean!
Example
{"hasNextPage": true}

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

NAME

Sort by item name (The default)

MATCH_SCORE

Sort by the match score (input filters vs item)

RATE

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": "xyz789",
  "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": 987
}

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

Fields
Input Field Description
rateUsdCentsLte - Int
rateUsdCentsGte - Int
supplier - String
Example
{
  "rateUsdCentsLte": 987,
  "rateUsdCentsGte": 987,
  "supplier": "xyz789"
}

SourceProperty

Description

Represents a property of one Source. Samples: Wall Height, Stud Spacing, etc.

Fields
Field Name Description
name - String!
value - Float
uom - String!
quantity - Boolean Boolean indicating if this property is used as the quantity value for the Source.
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

MATERIAL

SCOPE

EQUIPMENT

ASSEMBLY

LABOR

GENERAL_CONDITIONS

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": 987
}

SourcesCount

Description

Response for sourcesCount

Fields
Field Name Description
supplierName - String The name of the supplier which the totalCount refers to
totalCount - Int The total number of sources for this supplier
supplierLogoUrl - String Supplier logo URL
Example
{
  "supplierName": "abc123",
  "totalCount": 987,
  "supplierLogoUrl": "xyz789"
}

SourcesCountPayload

Description

Response for sourcesCount

Fields
Field Name Description
totalCount - Int TODO: Remove
counts - [SourcesCount!]!
Example
{"totalCount": 987, "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

Fields
Field Name Description
name - String!
description - String!
type - UoMType!
definition - String!
Example
{"name": "LF", "description": "Linear Feet", "type": "D1", "definition": "1 ft"}

UoMType

Description

Represents a unit of measure

Values
Enum Value Description

ITEM

For example "EA" or "BOX"

D1

For example "IN" or "LF"

D2

For example "SQIN" or "SF"

D3

For example "CUIN" or "GAL"

MASS

For example "LBS" or "OZ"

TIME

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