Keystone Quote REST API

From KeystoneIntranet
Revision as of 00:56, 23 April 2020 by Pmorey (talk | contribs) (→‎Quote Product [DELETE])
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

Overview

The Keystone REST Server exposes a REST API which is used by Keystone Quoting to communicate with the Keystone Application Server.

Keystone Quoting is accessed from Keystone Cloud applications.

See:

Example URIs:

http://127.0.0.1:8211/rest/kqtapi1/connection

Connection Test API

ROOT: /rest/kqtapi1

connection

connection

tests connection with the server
{
  "kqtapi": {
    "request_status": {
      "status": "200",
      "msg": "Keystone Quote REST Server."
    }
  }
}

API v1

ROOT: /rest/kqtapi1


Quote Endpoints

Quote [GET]

Quote/{Id}

returns quote information for the specified Id (where Id is <session#>K<trans#>)
{
  "Quote": [
    {
      "Id": "161K1",
      "ProspId": "BLA100",
      "JobId": "RIVERFRONT",
      "BatchJobId": "RIVERFRONT",
      "InvoiceDesc": "RIVERFRONT",
      "SlsId": "DS",
      "JobClassId": "1",
      "ZoneId": "20",
      "TaxAuthId": "MA",
      "CustomerPO": "12345",
      "QuoteDate": "2009-02-11T00:00:00.000Z",
      "PurgeDate": "2009-05-11T00:00:00.000Z",
      "LastRevisedDate": "2009-02-11T00:00:00.000Z",
      "FollowUpDate": "2009-04-01T00:00:00.000Z",
      "ExpirationDate": "2009-05-11T00:00:00.000Z",
      "JobStartDate": "2009-06-01T00:00:00.000Z",
      "JobEndDate": "2009-06-30T00:00:00.000Z",
      "WonLostDate": "2009-02-11T00:00:00.000Z",
      "BookDate": "2009-02-11T00:00:00.000Z",
      "Status": "L", // (O)pen, (W)on, (L)ost, (C)losed
      "Potential": "1", 
      "Rating": "20",
      "ReasonId": "P", 
      "ReasonDesc": "Price",
      "Competitor": "Joe Schmoe Concrete",
      "Conditions": "Standard minimum load charges apply.\r\n",
      "ProspType": "C", // (C)ustomer, (P)rospect
      "Booked": false,
      "CompetitorBid": 31000,
      "GpsLat": 39.9950582,
      "GpsLong": -82.8542814,
      "GpsRadius": 0.048199685699016, 
      "QuoteSubTotal": 525.50,
      "QuoteTaxTotal": 27.24,
      "ShipTo1": "Ship To Address 1",
      "ShipTo2": "Ship To Address 2",
      "ShipTo3": "Ship To Address 3",
      "ShipTo4": "Ship To Address 4",
      "DelvInst1": "Delivery Instruction 1",
      "DelvInst2": "Delivery Instruction 2",
      "DelvInst3": "Delivery Instruction 3",
      "DelvInst4": "Delivery Instruction 4",
      "Products": [
        {
          "Id": "161K1K1",
          "ProdId": "4416-21",
          "Description": "4x4x16 Solid",
          "ProdUM": "EA",
          "QtyOrd": 60000,
          "UnitPrice": 0.415
        },
        {
          "Id": "161K1K2",
          "ProdId": "34-11",
          "Description": "3\/4\" Stone",
          "ProdUM": "TN",
          "QtyOrd": 800,
          "UnitPrice": 8.75
        }
      ],
      "Contacts": [
        {
          "Id": 37,
          "Name": "Don Tupak",
          "Title": "President",
          "Phone": "614-310-1234",
          "PhoneMobile": "614-310-2345",
          "Email": "Dtupak@anywhere.com",
          "EmailOption": "Y",  // (Y)es, (N)o, (C)c, (B)cc
          "ContactType": "C" // (C)ustomer, (P)rospect, (Q)uote
        },
        {
          "Id": 38,
          "Name": "Bill Cummins",
          "Title": "Vice President",
          "Phone": "614-310-5678",
          "PhoneMobile": "614-310-6789",
          "Email": "Bcummins@anywhere.com",
          "EmailOption": "C",  
          "ContactType": "Q" // (Q)uote
        }
      ]
    }
  ]
}

Quote [POST]

Quote

adds a new quote and returns the GET Quote result
Request Content:
{
  "Quote": [
    {
      "ProspId": "BLA100",
      "JobId": "RIVERFRONT",
      "BatchJobId": "RIVERFRONT",
      "InvoiceDesc": "RIVERFRONT",
      "SlsId": "DS",
      "JobClassId": "1",
      "ZoneId": "20",
      "TaxAuthId": "MA",
      "CustomerPO": "12345",
      "QuoteDate": "2009-02-11T00:00:00.000Z",
      "PurgeDate": "2009-05-11T00:00:00.000Z",
      "LastRevisedDate": "2009-02-11T00:00:00.000Z",
      "FollowUpDate": "2009-04-01T00:00:00.000Z",
      "ExpirationDate": "2009-05-11T00:00:00.000Z",
      "JobStartDate": "2009-06-01T00:00:00.000Z",
      "JobEndDate": "2009-06-30T00:00:00.000Z",
      "WonLostDate": "2009-02-11T00:00:00.000Z",
      "BookDate": "2009-02-11T00:00:00.000Z",
      "Status": "L", // (O)pen, (W)on, (L)ost, (C)losed
      "Potential": "1", 
      "Rating": "20",
      "ReasonId": "P", 
      "ReasonDesc": "Price",
      "Competitor": "Joe Schmoe Concrete",
      "Conditions": "Standard minimum load charges apply.\r\n",
      "ProspType": "C", // (C)ustomer, (P)rospect
      "Booked": false,
      "CompetitorBid": 31000,
      "GpsLat": 39.9950582,
      "GpsLong": -82.8542814,
      "GpsRadius": 0.048199685699016, 
      "ShipTo1": "Ship To Address 1",
      "ShipTo2": "Ship To Address 2",
      "ShipTo3": "Ship To Address 3",
      "ShipTo4": "Ship To Address 4",
      "DelvInst1": "Delivery Instruction 1",
      "DelvInst2": "Delivery Instruction 2",
      "DelvInst3": "Delivery Instruction 3",
      "DelvInst4": "Delivery Instruction 4",
      "Products": [
        {
          "ProdId": "4416-21",
          "Description": "4x4x16 Solid",
          "ProdUM": "EA",
          "QtyOrd": 60000,
          "UnitPrice": 0.415
        },
        {
          "ProdId": "34-11",
          "Description": "3\/4\" Stone",
          "ProdUM": "TN",
          "QtyOrd": 800,
          "UnitPrice": 8.75
        }
      ],
      "Contacts": [
        {
          "Name": "Don Tupak",
          "Title": "President",
          "Phone": "614-310-1234",
          "PhoneMobile": "614-310-2345",
          "Email": "Dtupak@anywhere.com",
          "EmailOption": "Y",  // (Y)es, (N)o, (C)c, (B)cc
          "ContactType": "C" // (C)ustomer, (P)rospect, (Q)uote
        },
        {
          "Name": "Bill Cummins",
          "Title": "Vice President",
          "Phone": "614-310-5678",
          "PhoneMobile": "614-310-6789",
          "Email": "Bcummins@anywhere.com",
          "EmailOption": "C",  
          "ContactType": "Q" // (Q)uote
        }
      ]
    }
  ]
}

Quote [PUT]

Quote/{Id}

updates an existing quote for the specified Quote Id (where Id is <session#>K<trans#>)
Request Content:
{
  "Quote": [
    {
      "ProspId": "BLA100",
      "JobId": "RIVERFRONT",
      "BatchJobId": "RIVERFRONT",
      "InvoiceDesc": "RIVERFRONT",
      "SlsId": "DS",
      "JobClassId": "1",
      "ZoneId": "20",
      "TaxAuthId": "MA",
      "CustomerPO": "12345",
      "QuoteDate": "2009-02-11T00:00:00.000Z",
      "PurgeDate": "2009-05-11T00:00:00.000Z",
      "LastRevisedDate": "2009-02-11T00:00:00.000Z",
      "FollowUpDate": "2009-04-01T00:00:00.000Z",
      "ExpirationDate": "2009-05-11T00:00:00.000Z",
      "JobStartDate": "2009-06-01T00:00:00.000Z",
      "JobEndDate": "2009-06-30T00:00:00.000Z",
      "WonLostDate": "2009-02-11T00:00:00.000Z",
      "BookDate": "2009-02-11T00:00:00.000Z",
      "Status": "L", // (O)pen, (W)on, (L)ost, (C)losed
      "Potential": "1", 
      "Rating": "20",
      "ReasonId": "P", 
      "ReasonDesc": "Price",
      "Competitor": "Joe Schmoe Concrete",
      "Conditions": "Standard minimum load charges apply.\r\n",
      "ProspType": "C", // (C)ustomer, (P)rospect
      "Booked": false,
      "CompetitorBid": 31000,
      "GpsLat": 39.9950582,
      "GpsLong": -82.8542814,
      "GpsRadius": 0.048199685699016, 
      "ShipTo1": "Ship To Address 1",
      "ShipTo2": "Ship To Address 2",
      "ShipTo3": "Ship To Address 3",
      "ShipTo4": "Ship To Address 4",
      "DelvInst1": "Delivery Instruction 1",
      "DelvInst2": "Delivery Instruction 2",
      "DelvInst3": "Delivery Instruction 3",
      "DelvInst4": "Delivery Instruction 4",
    }
  ]
}

Quote Product [GET]

Quote/{Id}/Products/{PId}

returns quote product information for the specified Quote Id (where Id is <session#>K<trans#>) and PId (where PId is <session#>K<trans#>K<line#>)
{
  "Products": [
    {
      "Id": "161K1K1",
      "ProdId": "4416-21",
      "Description": "4x4x16 Solid",
      "ProdUM": "EA",
      "QtyOrd": 60000,
      "UnitPrice": 0.415
    }
  ]
}

Quote Product [POST]

Quote/{Id}/Products

adds a new quote product and returns the GET Quote Product result
Request Content:
{
  "Products": [
    {
      "ProdId": "4416-21",
      "Description": "4x4x16 Solid",
      "ProdUM": "EA",
      "QtyOrd": 60000,
      "UnitPrice": 0.415
    }
  ]
}


Quote Product [PUT]

Quote/{Id}/Products/{PId}

updates quote product information for the specified Quote Id (where Id is <session#>K<trans#>) and PId (where PId is <session#>K<trans#>K<line#>)
Request Content:
{
  "Products": [
    {
      "ProdId": "4416-21",
      "Description": "4x4x16 Solid",
      "ProdUM": "EA",
      "QtyOrd": 60000,
      "UnitPrice": 0.415
    }
  ]
}

Quote Product [DELETE]

Quote/{Id}/Products/{PId}

deletes quote product information for the specified Quote Id (where Id is <session#>K<trans#>) and PId (where PId is <session#>K<trans#>K<line#>)

Quote Contact [GET]

Quote/{Id}/Contacts/{CId}

returns quote contact information for the specified Quote Id (where Id is <session#>K<trans#>) and CId (where CId is <reckey>)
{
  "Contacts": [
    {
      "Id": 37,
      "Name": "Don Tupak",
      "Title": "President",
      "Phone": "614-310-1234",
      "PhoneMobile": "614-310-2345",
      "Email": "Dtupak@anywhere.com",
      "EmailOption": "C",  
      "ContactType": "Q" // (Q)uote
    }
  ]
}

Quote Contact [POST]

Quote/{Id}/Contacts

adds a new quote contact and returns the GET Quote Contact result
Request Content:
{
  "Contacts": [
    {
      "Name": "Don Tupak",
      "Title": "President",
      "Phone": "614-310-1234",
      "PhoneMobile": "614-310-2345",
      "Email": "Dtupak@anywhere.com",
      "EmailOption": "C"
    }
  ]
}

Quote Contact [PUT]

Quote/{Id}/Contacts/{CId}

updates quote contact information for the specified Quote Id (where Id is <session#>K<trans#>) and CId (where CId is <reckey>)
Request Content:
{
  "Contacts": [
    {
      "Name": "Don Tupak",
      "Title": "President",
      "Phone": "614-310-1234",
      "PhoneMobile": "614-310-2345",
      "Email": "Dtupak@anywhere.com",
      "EmailOption": "C"
    }
  ]
}

Quote Contact [DELETE]

Quote/{Id}/Contacts/{CId}

deletes quote contact information for the specified Quote Id (where Id is <session#>K<trans#>) and CId (where CId is <reckey>)

QuoteCount

QuoteCount/{SlsId}
?prospid=xxx
?status=x
?booked=true|false
?begfupdate=yyyy-mm-dd
?endfupdate=yyyy-mm-dd
?begexpdate=yyyy-mm-dd
?endexpdate=yyyy-mm-dd
?begbookdate=yyyy-mm-dd
?endbookdate=yyyy-mm-dd
?begwonlostdate=yyyy-mm-dd
?endwonlostdate=yyyy-mm-dd

returns count of active, non-closed quotes
use prospid to include quotes for the specified prospect
use status to include quotes for the specified status ([O]pen, [C]losed, [W]on, [L]ost) (Keystone 3.2.8.3+)
use booked to include quotes that are booked/not booked (Keystone 3.2.8.3+)
use begfupdate to include quotes with no follow-up date or where the follow-up date >= begfupdate (Keystone 3.2.8.2+)
use both begfupdate and endfupdate to include quotes with no follow-up date or where the follow-up date is between begfupdate and endfupdate (Keystone 3.2.8.2+)
use begexpdate to include quotes with no expiration date or where the expiration date >= begexpdate (Keystone 3.2.8.1+)
use both begexpdate and endexpdate to include quotes that have an expiration date between begexpdate and endexpdate (Keystone 3.2.8.1+)
use begbookdate to include quotes with no book date or where the book date >= begbookdate (Keystone 3.2.8.4+)
use both begbookdate and endbookdate to include quotes that have a book date between begbookdate and endbookdate (Keystone 3.2.8.4+)
use begwonlostdate to include quotes with no won/lost date or where the won/lost date >= begwonlostdate (Keystone 3.2.8.4+)
use both begwonlostdate and endwonlostdate to include quotes that have a won/lost date between begwonlostdate and endwonlostdate (Keystone 3.2.8.4+)
{
  "QuoteCount": [
    {
      "Count": 24
    }
  ]
}

QuoteCountWonLost

QuoteCountWonLost/{SlsId}
?prospid=xxx
?begwonlostdate=yyyy-mm-dd
?endwonlostdate=yyyy-mm-dd

returns list of active quotes that have a status of Won or Lost
use prospid to include quotes for the specified prospect
use begwonlostdate to include quotes with no won/lost date or where the won/lost date >= begwonlostdate (Keystone 3.2.8.4+)
use both begwonlostdate and endwonlostdate to include quotes that have a won/lost date between begwonlostdate and endwonlostdate (Keystone 3.2.8.4+)
{
    "QuoteCountWonLost": [
        {
            "WonLost": "L",
            "WonLostMo": 2,
            "WonLostYr": 2009,
            "QuoteCount": 1,
            "QuoteTotal": 59500,
            "QuoteCost": 0
        },
        {
            "WonLost": "L",
            "WonLostMo": 3,
            "WonLostYr": 2009,
            "QuoteCount": 1,
            "QuoteTotal": 14750,
            "QuoteCost": 0
        },
        {
            "WonLost": "W",
            "WonLostMo": 1,
            "WonLostYr": 2009,
            "QuoteCount": 2,
            "QuoteTotal": 632707,
            "QuoteCost": 366489
        },
        {
            "WonLost": "W",
            "WonLostMo": 2,
            "WonLostYr": 2009,
            "QuoteCount": 1,
            "QuoteTotal": 30500,
            "QuoteCost": 0
        },
        {
            "WonLost": "W",
            "WonLostMo": 3,
            "WonLostYr": 2009,
            "QuoteCount": 5,
            "QuoteTotal": 616820,
            "QuoteCost": 0
        }
    ]
}

QuoteList

QuoteList/{SlsId}
?prospid=xxx
?status=x
?booked=true|false
?begfupdate=yyyy-mm-dd
?endfupdate=yyyy-mm-dd
?begexpdate=yyyy-mm-dd
?endexpdate=yyyy-mm-dd
?begbookdate=yyyy-mm-dd
?endbookdate=yyyy-mm-dd
?begwonlostdate=yyyy-mm-dd
?endwonlostdate=yyyy-mm-dd
?beglastreviseddate=yyyy-mm-dd
?endlastreviseddate=yyyy-mm-dd

returns list of active, non-closed quotes
use prospid to include quotes for the specified prospect
use status to include quotes for the specified status ([O]pen, [C]losed, [W]on, [L]ost) (Keystone 3.2.8.3+)
use booked to include quotes that are booked/not booked (Keystone 3.2.8.3+)
use begfupdate to include quotes with no follow-up date or where the follow-up date >= begfupdate (Keystone 3.2.8.2+)
use both begfupdate and endfupdate to include quotes with no follow-up date or where the follow-up date is between begfupdate and endfupdate (Keystone 3.2.8.2+)
use begexpdate to include quotes with no expiration date or where the expiration date >= begexpdate (Keystone 3.2.8.1+)
use both begexpdate and endexpdate to include quotes that have an expiration date between begexpdate and endexpdate (Keystone 3.2.8.1+)
use begbookdate to include quotes with no book date or where the book date >= begbookdate (Keystone 3.2.8.4+)
use both begbookdate and endbookdate to include quotes that have a book date between begbookdate and endbookdate (Keystone 3.2.8.4+)
use begwonlostdate to include quotes with no won/lost date or where the won/lost date >= begwonlostdate (Keystone 3.2.8.4+)
use both begwonlostdate and endwonlostdate to include quotes that have a won/lost date between begwonlostdate and endwonlostdate (Keystone 3.2.8.4+)
use beglastreviseddate to include quotes with no last revised date or where the last revised date >= beglastreviseddate (Keystone 3.6.6.5+)
use both beglastreviseddate and endlastreviseddate to include quotes that have a last revised date between beglastreviseddate and endlastreviseddate (Keystone 3.6.6.5+)
{
  "QuoteList": [
    {
      "ProspId": "ALLEN",
      "JobId": "1",
      "SlsId": "BA",
      "JobClassId": "SJ",
      "ZoneId": "10",
      "QuoteDate": "2010-02-11T00:00:00.000Z",
      "FollowUpDate": "2010-04-30T00:00:00.000Z",
      "ExpirationDate": "2011-03-18T00:00:00.000Z",
      "WonLostDate": "2010-02-28T00:00:00.000Z",
      "BookDate": "2010-02-28T00:00:00.000Z",
      "LastRevisedDate": "2010-02-11T00:00:00.000Z",
      "Status": "W", // Won
      "Booked": true,
      "Rating": "100",
      "Potential": "A",
      "ReasonId": "", // Reason Code if quote status = Lost
      "ReasonDesc": "", // Reason Desc if quote status = Lost
      "Id": "5748K1",
      "ProspType": "C" // Customer
    },
    {
      "ProspId": "ALLEN",
      "JobId": "TEST",
      "SlsId": "BA",
      "QuoteDate": "2013-10-11T00:00:00.000Z",
      "FollowUpDate": "2013-11-30T00:00:00.000Z",
      "ExpirationDate": "2014-10-15T00:00:00.000Z",
      "LastRevisedDate": "2013-10-11T00:00:00.000Z",
      "Status": "O", // Open
      "QuoteSubTotal": 79840,
      "Id": "6930K1",
      "ProspType": "C", // Customer
      "Booked": false
    },
    {
      "ProspId": "ALLEN",
      "JobId": "TEST 2",
      "SlsId": "BA",
      "QuoteDate": "2018-01-11T00:00:00.000Z",
      "FollowUpDate": "2018-02-28T00:00:00.000Z",
      "ExpirationDate": "2019-01-10T00:00:00.000Z",
      "LastRevisedDate": "2018-01-11T00:00:00.000Z",
      "Status": "O", // Open
      "QuoteSubTotal": 13107.6,
      "Id": "6998K1",
      "ProspType": "C", // Customer
      "Booked": false
    }
  ]
}

ApprovedQuoteList

ApprovedQuoteList/{UserId}

returns list of active, approved quotes for a user
{
  "ApprovedQuoteList": [
    {
      "ProspId": "ALLEN",
      "JobId": "1",
      "SlsId": "BA",
      "JobClassId": "SJ",
      "ZoneId": "10",
      "QuoteDate": "2010-02-11T00:00:00.000Z",
      "FollowUpDate": "2010-04-30T00:00:00.000Z",
      "ExpirationDate": "2011-03-18T00:00:00.000Z",
      "WonLostDate": "2010-02-28T00:00:00.000Z",
      "BookDate": "2010-02-28T00:00:00.000Z",
      "Status": "W", // Won
      "Booked": true,
      "Rating": "100",
      "Potential": "A",
      "ReasonId": "", // Reason Code if quote status = Lost
      "ReasonDesc": "", // Reason Desc if quote status = Lost
      "Id": "5748K1",
      "ProspType": "C" // Customer
    },
    {
      "ProspId": "ALLEN",
      "JobId": "TEST",
      "SlsId": "BA",
      "QuoteDate": "2013-10-11T00:00:00.000Z",
      "FollowUpDate": "2013-11-30T00:00:00.000Z",
      "ExpirationDate": "2014-10-15T00:00:00.000Z",
      "Status": "O", // Open
      "QuoteSubTotal": 79840,
      "Id": "6930K1",
      "ProspType": "C", // Customer
      "Booked": false
    },
    {
      "ProspId": "ALLEN",
      "JobId": "TEST 2",
      "SlsId": "BA",
      "QuoteDate": "2018-01-11T00:00:00.000Z",
      "FollowUpDate": "2018-02-28T00:00:00.000Z",
      "ExpirationDate": "2019-01-10T00:00:00.000Z",
      "Status": "O", // Open
      "QuoteSubTotal": 13107.6,
      "Id": "6998K1",
      "ProspType": "C", // Customer
      "Booked": false
    }
  ]
}

ReviseQuote [PUT]

ReviseQuote/{Id}

sets LastRevisedDate for the specified Quote Id to the current date (where Id is <session#>K<trans#>)

Prospect Endpoints

Prospect

Prospect/{Id}

returns all essential data for one customer/prospect
{
  "Prospect": [
    {
      "ProspId": "ALLEN",
      "Name": "Allen Construction",
      "Address1": "3454 Riverside Drive",
      "Address2": "PO Box 676",
      "City": "Springfield",
      "State": "MA",
      "Zip": "01108-0676",
      "Phone": "(413) 486-5555",
      "Fax": "(413) 486-5556",
      "Contact": "William Smith",
      "SlsId": "BA",
      "CustomerClassId": "CC",
      "StartDate": "2009-02-08T00:00:00.000Z",
      "ChargeCode": "Y",
      "TaxAuthId": "MA",
      "TaxCode": "Y",
      "Cod": "N",
      "CreditLimit": 0,
      "ArBalance": 203410.79,
      "CreditTermsId": "1",
      "PoRequired": "N",
      "ProspType": "C", // Customer
      "Contacts": [
        {
          "Id": 1,
          "Name": "Jay Anders",
          "Email": "Janders@anywhere.com",
          "EmailQuote": false
        },
        {
          "Id": 2,
          "Name": "Bob Anders",
          "Email": "Banders@anywhere.com",
          "EmailQuote": false
        }
      ]
    }
  ]
}

ProspectList

ProspectList

returns combined list of active customers and prospects
{
  "ProspectList": [
    {
      "ProspId": "ALLEN",
      "Name": "Allen Construction",
      "Address1": "3454 Riverside Drive",
      "Address2": "PO Box 676",
      "City": "Springfield",
      "State": "MA",
      "Zip": "01108-0676",
      "Phone": "(413) 486-5555",
      "SlsId": "BA",
      "CustomerClassId": "CC",
      "ProspType": "C" // Customer
    },
    {
      "ProspId": "BER100",
      "Name": "Berkshire Power",
      "Address1": "1295 Stockbridge Ave.",
      "City": "Pittsfield",
      "State": "MA",
      "Zip": "01201",
      "Phone": "(413) 499-2100",
      "SlsId": "JE",
      "CustomerClassId": "P",
      "ProspType": "C" // Customer
    },
    {
      "ProspId": "PIO100",
      "Name": "Pioneer Valley Homes",
      "Address1": "147 School St.",
      "City": "Hatfield",
      "State": "MA",
      "Zip": "01047",
      "Phone": "(413) 252-3492",
      "SlsId": "BA",
      "CustomerClassId": "GC",
      "ProspType": "P" // Prospect
    }
  ]
}

Lookup List Endpoints

CreditTermsList

CreditTermsList

returns list of active credit terms (defines due date and discount date)
{
  "CreditTermsList": [
    {
      "CreditTermsId": "1D",
      "Description": "DISC. EXPIRES 10 DAYS"
    },
    {
      "CreditTermsId": "1T",
      "Description": "DISC. EXPIRES ON 10TH"
    },
    {
      "CreditTermsId": "15",
      "Description": "DISC. EXPIRES 15 DAYS",
      "Notes": "Here are some notes for Disc Expires 15 Days"
    },
    {
      "CreditTermsId": "20",
      "Description": "DISC. EXPIRES 20 DAYS"
    },
    {
      "CreditTermsId": "1",
      "Description": "NET 30 DAYS",
      "Notes": "Here are some notes for Net 30"
    },
    {
      "CreditTermsId": "C",
      "Description": "Cash Only"
    }
  ]
}

SalespersonList

SalespersonList

returns list of active salespeople
{
  "SalespersonList": [
    {
      "SlsId": "JE",
      "Name": "Jim Evans"
    },
    {
      "SlsId": "BA",
      "Name": "Bob Archer",
      "Notes": "Top salesperson of the year 2016."
    },
    {
      "SlsId": "DS",
      "Name": "Doug Sheehan"
    },
    {
      "SlsId": "TC",
      "Name": "Tom Cross"
    },
    {
      "SlsId": "H",
      "Name": "House Account"
    }
  ]
}

ReasonList

ReasonList

returns list of active reasons a quote is won or lost
{
  "ReasonList": [
    {
      "ReasonId": "C",
      "Description": "Capacity (pouring)"
    },
    {
      "ReasonId": "D",
      "Description": "Delivery Radius"
    },
    {
      "ReasonId": "P",
      "Description": "Price",
      "Notes": "We beat the competition (or they beat us!)"
    }
  ]
}

CustomerClassList

CustomerClassList

returns list of active customer classes (indicates type of customer/prospect - e.g. contractor, government, etc.)
{
  "CustomerClassList": [
    {
      "CustomerClassId": "GC",
      "Description": "General Contractor"
    },
    {
      "CustomerClassId": "CC",
      "Description": "Commercial Contractor"
    },
    {
      "CustomerClassId": "G",
      "Description": "Government Agency",
      "Notes": "Must obtain a federal ID #."
    },
    {
      "CustomerClassId": "NP",
      "Description": "Non-Profit"
    },
    {
      "CustomerClassId": "XX",
      "Description": "Delinquent Accounts"
    },
    {
      "CustomerClassId": "L",
      "Description": "Landscaper"
    },
    {
      "CustomerClassId": "P",
      "Description": "Private Company\/Individual"
    },
    {
      "CustomerClassId": "C",
      "Description": "COD Customer"
    }
  ]
}

TaxAuthorityList

TaxAuthorityList

returns list of active tax authorities
{
  "TaxAuthorityList": [
    {
      "TaxAuthId": "1901",
      "Description": "Cle Elum"
    },
    {
      "TaxAuthId": "CT",
      "Description": "Connecticut Sales Tax"
    },
    {
      "TaxAuthId": "MA",
      "Description": "Massachusetts Sales Tax"
    },
    {
      "TaxAuthId": "NH",
      "Description": "New Hampshire"
    },
    {
      "TaxAuthId": "VT",
      "Description": "Vermont Sales Tax"
    }
  ]
}

ZoneList

ZoneList

returns list of active delivery zones
{
  "ZoneList": [
    {
      "ZoneId": "05",
      "Description": "05 Minutes"
    },
    {
      "ZoneId": "10",
      "Description": "10 Minutes"
    },
    {
      "ZoneId": "15",
      "Description": "15 Minutes"
    },
    {
      "ZoneId": "20",
      "Description": "20 Minutes"
    }
  ]
}

PlantList

PlantList

returns list of active plants
{
  "PlantList": [
    {
      "PlantId": "01",
      "Name": "GH Concrete Co., Inc.",
      "PlantTypeId": "D" // Dispatch - Concrete
    },
    {
      "PlantId": "02",
      "Name": "GH Concrete Co., Inc.",
      "PlantTypeId": "D"
    },
    {
      "PlantId": "11",
      "Name": "Springfield Sand & Gravel",
      "PlantTypeId": "A" // Aggregate
    },
    {
      "PlantId": "12",
      "Name": "Hartford Sand & Gravel Co.",
      "PlantTypeId": "A"
    },
    {
      "PlantId": "20",
      "Name": "ASPHALT PLANT",
      "PlantTypeId": "S" // Asphalt
    },
    {
      "PlantId": "21",
      "Name": "GH Concrete Co., Inc.",
      "PlantTypeId": "B" // Concrete
    }
  ]
}

UsageList

UsageList

returns list of active usage classes
{
  "UsageList": [
    {
      "UsageId": "BA",
      "Description": "BASEMENT"
    },
    {
      "UsageId": "BD",
      "Description": "BRIDGE DECK"
    },
    {
      "UsageId": "C",
      "Description": "CURBS"
    },
    {
      "UsageId": "F",
      "Description": "FOOTING"
    },
    {
      "UsageId": "S",
      "Description": "STEPS"
    },
    {
      "UsageId": "W",
      "Description": "WALLS"
    }
  ]
}

ProductList

ProductList
?PlantId=xxx
?ProdType=x
?IngType=x
?Sellable=true|false

returns list of active products
use PlantId to include products for the specified plant
use ProdType to include products of the specified type
use IngType to include products of the specified ingredient type
use Sellable to include products that are sellable/non-sellable (default = True)
{
  "ProductList": [
    {
      "ProdId": "10416-21",
      "Description1": "10x4x16 Solid",
      "PlantId": "21"
    },
    {
      "ProdId": "12416-21",
      "Description1": "12x4x16 Solid",
      "PlantId": "21"
    },
    {
      "ProdId": "2510-01",
      "Description1": "2500 PSI w\/ 57 Stone",
      "PlantId": "01"
    },
    {
      "ProdId": "2510-02",
      "Description1": "2500 PSI w\/ 57 Stone",
      "PlantId": "02"
    },
    {
      "ProdId": "2510-03",
      "Description1": "2500 PSI w\/ 57 Stone",
      "PlantId": "03"
    }
  ]
}

TaxExemptList

TaxExemptList

returns list of active tax exempt reasons
{
  "TaxExemptList": [
    {
      "ExemptId": "1",
      "Description": "Reseller"
    },
    {
      "ExemptId": "2",
      "Description": "Transportation"
    },
    {
      "ExemptId": "3",
      "Description": "Government"
    },
    {
      "ExemptId": "9",
      "Description": "Service Charge"
    }
  ]
}

PlantMixList

PlantMixList

returns list of plant mix types
{
  "PlantMixList": [
    {
      "PlantMixId": "D",
      "Description": "Dry"
    },
    {
      "PlantMixId": "W",
      "Description": "Wet"
    },
    {
      "PlantMixId": "",
      "Description": "<Default>"
    }
  ]
}

StatusList

StatusList

returns list of quote statuses
{
  "StatusList": [
    {
      "StatusId": "O",
      "Description": "Open"
    },
    {
      "StatusId": "W",
      "Description": "Won"
    },
    {
      "StatusId": "L",
      "Description": "Lost"
    },
    {
      "StatusId": "C",
      "Description": "Closed"
    }
  ]
}

ShowJobProdList

ShowJobProdList

returns list of show job products codes
{
  "ShowJobProdList": [
    {
      "ShowJobProdId": "0",
      "Description": "Active Plant Products"
    },
    {
      "ShowJobProdId": "1",
      "Description": "Quoted & Active Plant Products"
    },
    {
      "ShowJobProdId": "2",
      "Description": "Quoted Products Only"
    },
    {
      "ShowJobProdId": "3",
      "Description": "Quoted Products Only Line 1"
    },
    {
      "ShowJobProdId": "",
      "Description": "<Default>"
    }
  ]
}

ApprovalCodeList

ApprovalCodeList/{UserId}

returns list of active approval codes for a user
{
    "ApprovalCodeList": [
        {
            "ApprovalId": "100",
            "Description": "Code 100",
            "RoleId": "SLSPN"
        },
        {
            "ApprovalId": "205",
            "Description": "Code 205",
            "RoleId": "BOSS"
        },
        {
            "ApprovalId": "207",
            "Description": "Code 207",
            "RoleId": "BOSS"
        },
        {
            "ApprovalId": "500",
            "Description": "Code 500",
            "RoleId": "BOSS"
        }
    ]
}

JobClassList

JobClassList

returns list of active job classes
{
  "JobClassList": [
    {
      "JobClassId": "ST",
      "Description": "State Job"
    },
    {
      "JobClassId": "GC",
      "Description": "General Contractor Job"
    }
  ]
}

Action Endpoints

GetProductPrice

GetProductPrice/{Id}
?ProspId=xxx
?ZoneId=xxx
?TaxAuthId=xxx
?PlantId=xxx
?QtySold=xxx.xx

returns product price for the specified Id
ProspId specifies the prospect
ZoneId specifies the zone
TaxAuthId specifies the Tax Authority
PlantId specifies the Plant
QtySold specifies the quantity sold
{
    "GetProductPrice": [
        {
            "Source": "C",
            "UnitPrice": 89,
            "UnitPctDisc": "2%",
            "ProdUM": "CY",
            "Description": "2500 PSI w/ Pea (FA)",
            "TaxCode1": "Y",
            "TaxCode2": "Y",
            "TaxCode3": "Y"
        }
    ]
}