Skip to main content

For Developers - What's in our exports

Here you'll find details about what's included in exports.

The following sections and tables below describe the fields provided in the combined JSON export of report data. There are also columns indicating whether the field is included in CSV exports and what the field name is, if different from the JSON one. We highly recommend the JSON report for importing over the CSV because it contains a richer set of data and relationships including data about the job.

Example

{
"description": "A generic export of all report data for a WinBidPro job for use in third-party software.",
"reportVersion": "1.0",
"app": "WinBidPro 16",
"appVersion": "16.9.3.0",
"job": "GDS Estimating - San Diego Campus",
"isMetric": false,
"createdAt": "2024-10-03T23:27:27.7334765Z",
"jobId": "66fd5ee770508d4e0c7fda89",
"parts": [], // see Final Parts Export below
"glass": [] // see Final Glass Export below
}

Final Glass Export

Available Fields

The glass required for the job may be exported to a CSV format delimited by commas or included in the "glass":{} field of the json report.

The fields available are specified in the following table:

FieldDescriptionExported to CSVCSV Export Field (if different)
ProductIdA unique id to the product in WinBidPro's DB.
DescriptionA user entered description of the product. Note: It should be unique but WinBidPro does not currently validate the uniqueness within a job.
QuantityThe number of units required for the job.
ProductLabelA short label used to identify the product on drawings. A user entered field.
TypeMust be one of ["Tempered", "Annealed", "Miscellaneous", "Spandrel", "Laminated", "Heat Tempered"].
NumberOfPanes1 for single, 2 for double glazed, 3 for triple.
ThicknessThe overall thickness of the unit including insulating and laminating layers. Note: the program sometimes refers to it as "Makeup".
GlassMaterialThicknessThickness of the lites only, not including insulating and laminating layers. Used to roughly estimate weight of the unit. For example 1/4 over 1/4 insulated unit of 1" thickness would have a value of 0.5
WidthThe width of the lite of glass. If IsSpecialShape is 'TRUE', this is the width of a rectangular bounding box fit tightly around the upright lite of glass.
img
HeightThe height of the lite of glass. If IsSpecialShape is 'TRUE', this is the height of a rectangular bounding box fit tightly around the upright lite of glass. See the image included for Width.
BlockWidthThe width in inches rounded up to the nearest even inch.Block Width
BlockHeightThe height in inches rounded up to the nearest even inch.Block Height
AreaThe real area in sqft.
BlockAreaThe block area in sqft.Blk Area
MinimumBlockAreaThe minimum block area charged for a glass product in square feet. This affects price only and does not limit the glass size. May be 0.
IsRectangulartrue or false. False for any instances that are a custom shape. NOTE: csv exports flip this boolean with an 'Is Special Shape' header and values are upper case TRUE and FALSE, but it is best to be case insensitive.Is Special Shape
PricePerSquareUnitPrice of the product per square foot. The user typically enters this as provided by the supplier, but may be 0 if not entered.Price / sqft
TotalPriceByBlockThe total price using Block area. BlockPrice * QuantityTotal Price (Block Area)
SupplierPurely descriptive, entered by the user. May be useful for grouping and ordering. May be empty/null.Glass Supplier
ColorPurely descriptive, entered by the user. No impact on price. It is sometimes used for filtering in WinBidPro
ContourA base64 encoded DXF file of a precise drawing of the custom glass shape. This field will only be included if the IsRecatangular field is false. NOTE: There is a lot of useless header data in these files currently. We plan to strip this file down to a more minimal template

Example

{
"productId": "629694badc6c8148f89739dd",
"description": "Evergreen / Clear - 1/4 / 1/4 Tempered",
"quantity": 2,
"productLabel": "EvCl-T",
"type": "Tempered",
"thickness": 0.5,
"numberOfPanes": 2,
"glassMaterialThickness": 0.5,
"width": 10.5,
"height": 64.0625,
"blockWidth": 12.0,
"blockHeight": 66.0,
"area": 4.671875,
"blockArea": 5.5,
"minimumBlockArea": 3.0,
"isRectangular": true,
"pricePerSquareUnit": 0.0,
"blockPrice": 0.00,
"totalPriceByBlock": 0.00,
"supplier": null,
"color": "Green"
}

Final Parts Export

The parts required for the job may be exported to a CSV format delimited by commas or included in the "parts":{} field of the json report.

Available Fields

FieldDescriptionExportedCSV Export Field (if different)
UnitsNeededThe number of units, not packages, required for the job. This will be in a count or in feet depending on the Handling field. See the Package and Unit Handling section below.Units Needed
FullPartNumberA unique string including non-alphanumeric characters such has - or /. The user may change this by removing or adding non-alphanumeric characters only. Best for display but not lookups. (eg. E9-1001/13)Display Part Number
PartNumberThe base part number, stripped of non-alphanumeric characters. This is helpful for part lookups when manufacturers are inconsistent with the formatting. (eg. E9100113). NOTE: for OBE this is their "Item #". We will be working out a solution soon to include their part #.Part Number
FinishSuffixThe suffix code, usually but not limited to 1-4 characters, appended to the PartNumber or DisplayPartNumber to indicate the finish of the product. OBE also indicates custom stock lengths in a suffix.Finish Suffix
FinishNameThe name of the finish. Note that users can rename finishes or add their own.Finish Name
DescriptionThe part description
TypeA short string to help filter or describe the use of the part at a glance. Purely descriptive and makes no change to how the part is handled/processed by WinBidPro (eg. "Water Dam", "Gasket", "Extrusion", etc.) May be user defined.Part Type
HandlingMust be one of ["Count", "Measure", "Optimize"]. See the Package and Unit Handling section below.
LengthLength, in inches, for parts with Measure or Optimize handlings. For example, a 500' roll would be a value of 6000 (inches). May be a floating point number. For Count parts this will be 0 or null. (empty for csv exports).
PackagesToOrderThe number of packages required to fulfill the units needed. We always round up to whole packages.Packages To Order
UnitsPerPackageAn integer, always greater than 0. For Count and Optimize parts, this is the number of units per package. For example, users may enter it as a 4 pack of 24' stocks of aluminum--thus the value would be 4. For Measure parts, this is the number of Rolls or similar. For example, a user may purchase a 3 pack of 250' rolls of gasket at a discounted priceUnits/Package
PackagePriceThe base price per package of the part. Note: see also MultiplierPackage Price
UnitPricePrice per unit or foot of the part depending on the handlingUnit Price
MultiplierMultipliers are used by manufacturers to offer discounts and also to raise base prices. Always greater than 0. Maybe be greater than 1. The real price is PackagePrice * Multiplier.
TotalByPackageThe total price of the line item if purchasing whole packages when unit quantity is less than a package amount.Total (by Package)
TotalByUnitThe total price of the line item if prorating the partial packages.Total (by Unit)
WeightNot required by WinBidPro, this can help users consider shipping costs. Will be 0 or greater.Package Weight
TotalWeightThe total weight calculated by WeightPerPackage * PackagesToOrderTotal Weight
howCreatedIndicates how the line item was created. One of [Generated, Modified, Added]. Generated means WinBidPro determined the units needed. Modified means the user adjusted the units needed from what WinBidPro generated. Added means a user added the item themselves.
{
"unitsNeeded": 267.0,
"fullPartNumber": "E3-0037",
"partNumber": "E30037",
"finishSuffix": null,
"finishName": "Mill-None",
"description": "THERMAL ISOLATOR CLIP",
"type": "Hardware",
"handling": "Count",
"length": null,
"packagesToOrder": 3,
"unitsPerPackage": 100,
"packagePrice": 29.7,
"unitPrice": 0.297,
"multiplier": 1.0,
"totalByPackage": 89.1,
"totalByUnit": 79.30,
"packageWeight": 0.0,
"totalWeight": 0.0,
"howCreated": "Generated"
}

Package and Unit Handling

The Handling field of a part determines what type of units we are dealing with in the UnitsNeeded field. There are 3 possible handlings in WinBidPro

1. The Count Handling

Count parts are typically hardware parts such as screws or hinges, things you count and do not measure. The UnitsNeeded is a simple count of how many are needed. PackagesToOrder = Ceiling(UnitsNeeded / UnitsPerPackage)

Example

User needs 401 screws. They come in boxes of 200. In this case the data could be represented in JSON like { ... UnitsNeeded: 401, Length: 0, UnitsPerPackage: 200, PackagesToOrder: 3 ... }.

2. The Measure Handling

Measure parts have a length. For example gasket material sold in rolls of 500'. For these line items, the UnitsNeeded are in feet and PackagesToOrder = Ceiling(UnitsNeeded / (Length * UnitsPerPackage)).

Example

User needs 751' of a gasket part. The part is sold in 250' rolls. Rolls are sold individually. In this case the data could be represented in JSON like { ... UnitsNeeded: 751, Length: 3000, UnitsPerPackage: 1, PackagesToOrder: 4 ... }.

3. The Optimize Handling

Optimize parts are treated like Count parts. The one difference is they have a length which is often displayed in inches to the user. For these parts, our optimizer has determined how many stocks to order so UnitsNeeded is again a simple count. PackagesToOrder = Ceiling(UnitsNeeded / UnitsPerPackage)

For these parts, Length tells us the length of stock to order. It's often ~24' but may be a custom length specified by the user for a custom order from the manufacturer.

Example

User needs 3 stocks of an extrusion. The part is sold in 24'1" stocks. The stocks are sold individually. In this case the data could be represented as JSON like { ... UnitsNeeded: 3, Length: 289, UnitsPerPackage: 1, PackagesToOrder: 3 ... }.