NAV
JavaScript Ruby Python Go cURL

Quoter API Reference v0.1.0

Scroll down for code samples, example requests and responses. Select a language for code samples from the tabs above or the mobile navigation menu.

Welcome to Quoter's API Documentation. Our API is under active development, so check back often for updates!

If you are interested in API functionality not yet available, please let us know as it will help us prioritize our API roadmap.

The Quoter API follows the standard RESTful JSON API design. For each resource type, we support the following endpoints:

Base URLs:

Authentication

The Quoter API uses OAuth 2.0 Client Credentials Flow for authentication:

  1. Generate your OAuth Client ID and Secret for your Quoter account in Account > API Keys. You must be an Account Owner to have access.
  2. Send a request to POST /auth/oauth/authorize with the request body containing your client_id, secret, and grant_type: client_credentials to obtain an access_token and a refresh_token. See the Authorization documentation for a more detailed example.
  3. To perform an authenticated request, send the access_token value as a bearer token via the request header: "Authorization: Bearer {access_token}".
  4. The access_token is valid for 1 hour. To obtain a new access and refresh token pair, send a request to POST /auth/refresh with the request body containing your refresh_token. The refresh_token is valid for 24 hours. See the Authorization documentation for a more detailed example.

Errors

In case of errors (4XX or 5XX HTTP status codes), the API returns an error response body with a key , title , and detail indicating what went wrong.

For example, an authorization error will return a status of 401 with the response:

{
    "errors": [
        {
            "key": "ERR_AUTHORIZATION_TOKEN_INVALID",
            "title": "Unauthorized",
            "detail": "Authorization token is invalid"
        }
    ]
}

HTTP Response Codes

The Quoter API uses conventional HTTP response codes to indicate whether an API request succeeded or failed.

HTTP Code Meaning
200 Success -- Your request was successfully processed; the result is included in the response body. For POST requests.
204 No Content -- You request was successfully processed; call a GET to retrieve the updated results. For PATCH/DELETE requests.
400 Bad Request -- Your request is invalid.
401 Unauthorized -- Your API credentials are invalid.
403 Forbidden -- You do not have permission to access the requested resource.
404 Not Found -- The specified resource could not be found.
422 Unprocessable Entity -- The request format is incorrect. See error content for details.
429 Too Many Requests -- You've reached your rate limit. Try again later.
500 Internal Server Error -- We had a problem with our server. Try again later or contact support.

Pagination

List endpoints support pagination via the page and limit query string parameters.

For example, if you want to request the first 10 records, you might perform the request GET https://api.quoter.com/v1/items?page=1&limit=10, then to request the next 10 records, GET https://api.quoter.com/v1/items?page=2&limit=10.

By default, list endpoints support a limit value of up to 100 records. Some endpoints may support different limit values for performance, which will be documented separately.

List endpoint response bodies will always contain a data member, which contains an array of the requested resources, and a has_more member, which is a boolean value indicating whether there is more data in subsequent pages.

Partial Updates (PATCH)

The Quoter API's resource update (PATCH) endpoints follow the standard HTTP PATCH conventions, meaning that partial/sparse updates may be performed on a record. In other words, for PATCH endpoints, you only need to send the request fields that you wish to update, instead of the entire resource.

If a field is omitted from the request body, or a null value is sent when updating a resource, the resource's existing value will be retained.

To clear/remove a field from a resource, send the empty value for the field's corresponding type:

Field Type Empty Value
array []
boolean false
number 0
string ""

Rate Limiting

To ensure performance stability of the API for all users, Quoter enforces a rate limit of 5 requests per second.

Requests that exceed this limit will receive a 429: Too many requests error response.

Response Fields

Nearly all API endpoints support a fields query string parameter, which allows you to specify which return field(s) you would like to receive in the response body. We recommend only requesting return fields that you require for optimal performance.

For example, if you want to retrieve only the ID and name of an Item, you could perform the request GET https://api.quoter.com/v1/items?fields=id,name.

Authorization

Authorize an Access and Refresh Token.

Code samples

const inputBody = '{
  "client_id": "cid_asdf1234",
  "client_secret": "topsecret",
  "grant_type": "client_credentials"
}';
const headers = {
  'Content-Type':'application/json',
  'Accept':'application/json'
};

fetch('https://api.quoter.com/v1/auth/oauth/authorize',
{
  method: 'POST',
  body: inputBody,
  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

require 'rest-client'
require 'json'

headers = {
  'Content-Type' => 'application/json',
  'Accept' => 'application/json'
}

result = RestClient.post 'https://api.quoter.com/v1/auth/oauth/authorize',
  params: {
  }, headers: headers

p JSON.parse(result)

import requests
headers = {
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

r = requests.post('https://api.quoter.com/v1/auth/oauth/authorize', headers = headers)

print(r.json())

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Content-Type": []string{"application/json"},
        "Accept": []string{"application/json"},
    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("POST", "https://api.quoter.com/v1/auth/oauth/authorize", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}

# You can also use wget
curl -X POST https://api.quoter.com/v1/auth/oauth/authorize \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json'

POST /auth/oauth/authorize

Authenticates the client and issues an access and refresh token pair to authorize API requests.

Body parameter

{
  "client_id": "cid_asdf1234",
  "client_secret": "topsecret",
  "grant_type": "client_credentials"
}

Parameters

Name In Type Required Description
body body AuthorizationRequest true none

Example responses

200 Response

{
  "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c",
  "refresh_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkphbmUgRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.cMErWtEf7DxCXJl8C9q0L7ttkm-Ex54UWHsOCMGbtUc"
}

Responses

Status Meaning Description Schema
200 OK Authorization successful. AuthorizationResponse
401 Unauthorized Authorization invalid. ErrorResponse
422 Unprocessable Entity Validation error in request. ErrorResponse

Refresh Access and Refresh Tokens.

Code samples


const headers = {
  'Accept':'application/json',
  'Authorization':'Bearer: refresh_token'
};

fetch('https://api.quoter.com/v1/auth/refresh',
{
  method: 'POST',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json',
  'Authorization' => 'Bearer: refresh_token'
}

result = RestClient.post 'https://api.quoter.com/v1/auth/refresh',
  params: {
  }, headers: headers

p JSON.parse(result)

import requests
headers = {
  'Accept': 'application/json',
  'Authorization': 'Bearer: refresh_token'
}

r = requests.post('https://api.quoter.com/v1/auth/refresh', headers = headers)

print(r.json())

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Accept": []string{"application/json"},
        "Authorization": []string{"Bearer: refresh_token"},
    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("POST", "https://api.quoter.com/v1/auth/refresh", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}

# You can also use wget
curl -X POST https://api.quoter.com/v1/auth/refresh \
  -H 'Accept: application/json' \
  -H 'Authorization: Bearer: refresh_token'

POST /auth/refresh

Exchanges a valid refresh token for a new access and refresh token pair without requiring user credentials again.

Parameters

Name In Type Required Description
Authorization header string true Bearer: refresh_token

Example responses

200 Response

{
  "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c",
  "refresh_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkphbmUgRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.cMErWtEf7DxCXJl8C9q0L7ttkm-Ex54UWHsOCMGbtUc"
}

Responses

Status Meaning Description Schema
200 OK Authorization successful. AuthorizationResponse
401 Unauthorized Authorization invalid. ErrorResponse

Categories

List Categories

Code samples


const headers = {
  'Accept':'application/json',
  'Authorization':'Bearer: access_token'
};

fetch('https://api.quoter.com/v1/categories',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json',
  'Authorization' => 'Bearer: access_token'
}

result = RestClient.get 'https://api.quoter.com/v1/categories',
  params: {
  }, headers: headers

p JSON.parse(result)

import requests
headers = {
  'Accept': 'application/json',
  'Authorization': 'Bearer: access_token'
}

r = requests.get('https://api.quoter.com/v1/categories', headers = headers)

print(r.json())

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Accept": []string{"application/json"},
        "Authorization": []string{"Bearer: access_token"},
    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("GET", "https://api.quoter.com/v1/categories", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}

# You can also use wget
curl -X GET https://api.quoter.com/v1/categories \
  -H 'Accept: application/json' \
  -H 'Authorization: Bearer: access_token'

GET /categories

Retrieves a list of all item-related categories in the system.

Parameters

Name In Type Required Description
fields query string false One or more response fields, separated by commas.
filter[parent_category_id] query string false Filter records by those associated with parent_category_id.
sort_by query string false One or more sort fields, separated by commas.
Authorization header string true Bearer: access_token
filter[created_at] query string false Filter by created_at.
filter[modified_at] query string false Filter by modified_at.
filter[name] query string false Filter by name.
limit query integer false Limit the number of records to return. Limit ranges from 1 to 100, and defaults to 100.
page query integer false Pagination record offset. Page starts at 1.

Detailed descriptions

filter[parent_category_id]: Filter records by those associated with parent_category_id.

Operators: eq

Examples - filter[parent_category_id]=eq:cat_123

filter[created_at]: Filter by created_at.

Operators: gt, lt

Examples - filter[created_at]=gt:2023-01-01T00:00:00Z - filter[created_at]=lt:2025-01-01T00:00:00Z

filter[modified_at]: Filter by modified_at.

Operators: gt, lt

Examples - filter[modified_at]=gt:2023-01-01T00:00:00Z - filter[modified_at]=lt:2025-01-01T00:00:00Z

filter[name]: Filter by name.

Operators: eq, cont

Examples - filter[name]=eq:abba - filter[name]=cont:ab

Enumerated Values

Parameter Value
fields created_at
fields id
fields modified_at
fields name
fields parent_category_id
fields parent_category
sort_by -created_at
sort_by -id
sort_by -modified_at
sort_by -name
sort_by +created_at
sort_by +id
sort_by +modified_at
sort_by +name

Example responses

200 Response

{
  "data": [
    {
      "created_at": "2019-08-24T14:15:22Z",
      "id": "cat_1jAEZdbtkbLFBAU1Tt0ouKpiBUe",
      "modified_at": "2019-08-24T14:15:22Z",
      "name": "SSDs",
      "parent_category": "Storage Devices",
      "parent_category_id": "cat_1jAEZdbtkbLFBAU1Tt0ouKpiBUe"
    }
  ],
  "has_more": false,
  "total_count": 1
}

Responses

Status Meaning Description Schema
200 OK Categories found. CategoryList
401 Unauthorized Authorization invalid. ErrorResponse
404 Not Found Record not found. ErrorResponse
422 Unprocessable Entity Validation error in request. ErrorResponse

Create Category

Code samples

const inputBody = '{
  "name": "SSDs",
  "parent_category": "Storage Devices",
  "parent_category_id": "cat_1jAEZdbtkbLFBAU1Tt0ouKpiBUe"
}';
const headers = {
  'Content-Type':'application/json',
  'Accept':'application/json',
  'Authorization':'Bearer: access_token'
};

fetch('https://api.quoter.com/v1/categories',
{
  method: 'POST',
  body: inputBody,
  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

require 'rest-client'
require 'json'

headers = {
  'Content-Type' => 'application/json',
  'Accept' => 'application/json',
  'Authorization' => 'Bearer: access_token'
}

result = RestClient.post 'https://api.quoter.com/v1/categories',
  params: {
  }, headers: headers

p JSON.parse(result)

import requests
headers = {
  'Content-Type': 'application/json',
  'Accept': 'application/json',
  'Authorization': 'Bearer: access_token'
}

r = requests.post('https://api.quoter.com/v1/categories', headers = headers)

print(r.json())

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Content-Type": []string{"application/json"},
        "Accept": []string{"application/json"},
        "Authorization": []string{"Bearer: access_token"},
    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("POST", "https://api.quoter.com/v1/categories", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}

# You can also use wget
curl -X POST https://api.quoter.com/v1/categories \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  -H 'Authorization: Bearer: access_token'

POST /categories

Adds a new category to help organize related items.

Body parameter

{
  "name": "SSDs",
  "parent_category": "Storage Devices",
  "parent_category_id": "cat_1jAEZdbtkbLFBAU1Tt0ouKpiBUe"
}

Parameters

Name In Type Required Description
fields query string false One or more response fields, separated by commas.
Authorization header string true Bearer: access_token
body body CategoryCreateRequest true Request body to create a Category.

Enumerated Values

Parameter Value
fields created_at
fields id
fields modified_at
fields name
fields parent_category_id
fields parent_category

Example responses

200 Response

{
  "created_at": "2019-08-24T14:15:22Z",
  "id": "cat_1jAEZdbtkbLFBAU1Tt0ouKpiBUe",
  "modified_at": "2019-08-24T14:15:22Z",
  "name": "SSDs",
  "parent_category": "Storage Devices",
  "parent_category_id": "cat_1jAEZdbtkbLFBAU1Tt0ouKpiBUe"
}

Responses

Status Meaning Description Schema
200 OK Category created. Category
401 Unauthorized Authorization invalid. ErrorResponse
404 Not Found Record not found. ErrorResponse
422 Unprocessable Entity Validation error in request. ErrorResponse

Delete Category

Code samples


const headers = {
  'Accept':'application/json',
  'Authorization':'Bearer: access_token'
};

fetch('https://api.quoter.com/v1/categories/{id}',
{
  method: 'DELETE',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json',
  'Authorization' => 'Bearer: access_token'
}

result = RestClient.delete 'https://api.quoter.com/v1/categories/{id}',
  params: {
  }, headers: headers

p JSON.parse(result)

import requests
headers = {
  'Accept': 'application/json',
  'Authorization': 'Bearer: access_token'
}

r = requests.delete('https://api.quoter.com/v1/categories/{id}', headers = headers)

print(r.json())

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Accept": []string{"application/json"},
        "Authorization": []string{"Bearer: access_token"},
    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("DELETE", "https://api.quoter.com/v1/categories/{id}", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}

# You can also use wget
curl -X DELETE https://api.quoter.com/v1/categories/{id} \
  -H 'Accept: application/json' \
  -H 'Authorization: Bearer: access_token'

DELETE /categories/{id}

Removes a specified item category.

Parameters

Name In Type Required Description
Authorization header string true Bearer: access_token
id path string true Category ID

Example responses

401 Response

{
  "errors": [
    {
      "detail": "Pagination page requested too high.",
      "status": 400,
      "title": "Bad Request"
    }
  ]
}

Responses

Status Meaning Description Schema
204 No Content Record deleted. None
401 Unauthorized Authorization invalid. ErrorResponse
404 Not Found Record not found. ErrorResponse
422 Unprocessable Entity Validation error in request. ErrorResponse

Fetch Category

Code samples


const headers = {
  'Accept':'application/json',
  'Authorization':'Bearer: access_token'
};

fetch('https://api.quoter.com/v1/categories/{id}',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json',
  'Authorization' => 'Bearer: access_token'
}

result = RestClient.get 'https://api.quoter.com/v1/categories/{id}',
  params: {
  }, headers: headers

p JSON.parse(result)

import requests
headers = {
  'Accept': 'application/json',
  'Authorization': 'Bearer: access_token'
}

r = requests.get('https://api.quoter.com/v1/categories/{id}', headers = headers)

print(r.json())

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Accept": []string{"application/json"},
        "Authorization": []string{"Bearer: access_token"},
    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("GET", "https://api.quoter.com/v1/categories/{id}", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}

# You can also use wget
curl -X GET https://api.quoter.com/v1/categories/{id} \
  -H 'Accept: application/json' \
  -H 'Authorization: Bearer: access_token'

GET /categories/{id}

Retrieves detailed information about a specific item category.

Parameters

Name In Type Required Description
Authorization header string true Bearer: access_token
id path string true Category ID
fields query string false One or more response fields, separated by commas.

Enumerated Values

Parameter Value
fields created_at
fields id
fields modified_at
fields name
fields parent_category_id
fields parent_category

Example responses

200 Response

{
  "created_at": "2019-08-24T14:15:22Z",
  "id": "cat_1jAEZdbtkbLFBAU1Tt0ouKpiBUe",
  "modified_at": "2019-08-24T14:15:22Z",
  "name": "SSDs",
  "parent_category": "Storage Devices",
  "parent_category_id": "cat_1jAEZdbtkbLFBAU1Tt0ouKpiBUe"
}

Responses

Status Meaning Description Schema
200 OK Category found. Category
401 Unauthorized Authorization invalid. ErrorResponse
404 Not Found Record not found. ErrorResponse
422 Unprocessable Entity Validation error in request. ErrorResponse

Update Category

Code samples

const inputBody = '{
  "name": "SSDs",
  "parent_category": "Storage Devices",
  "parent_category_id": "cat_1jAEZdbtkbLFBAU1Tt0ouKpiBUe"
}';
const headers = {
  'Content-Type':'application/json',
  'Accept':'application/json',
  'Authorization':'Bearer: access_token'
};

fetch('https://api.quoter.com/v1/categories/{id}',
{
  method: 'PATCH',
  body: inputBody,
  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

require 'rest-client'
require 'json'

headers = {
  'Content-Type' => 'application/json',
  'Accept' => 'application/json',
  'Authorization' => 'Bearer: access_token'
}

result = RestClient.patch 'https://api.quoter.com/v1/categories/{id}',
  params: {
  }, headers: headers

p JSON.parse(result)

import requests
headers = {
  'Content-Type': 'application/json',
  'Accept': 'application/json',
  'Authorization': 'Bearer: access_token'
}

r = requests.patch('https://api.quoter.com/v1/categories/{id}', headers = headers)

print(r.json())

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Content-Type": []string{"application/json"},
        "Accept": []string{"application/json"},
        "Authorization": []string{"Bearer: access_token"},
    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("PATCH", "https://api.quoter.com/v1/categories/{id}", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}

# You can also use wget
curl -X PATCH https://api.quoter.com/v1/categories/{id} \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  -H 'Authorization: Bearer: access_token'

PATCH /categories/{id}

Modifies an existing item category’s attributes.

Body parameter

{
  "name": "SSDs",
  "parent_category": "Storage Devices",
  "parent_category_id": "cat_1jAEZdbtkbLFBAU1Tt0ouKpiBUe"
}

Parameters

Name In Type Required Description
Authorization header string true Bearer: access_token
id path string true Category ID
fields query string false One or more response fields, separated by commas.
body body CategoryUpdateRequest true Request body to update a Category.

Enumerated Values

Parameter Value
fields created_at
fields id
fields modified_at
fields name
fields parent_category_id
fields parent_category

Example responses

200 Response

{
  "created_at": "2019-08-24T14:15:22Z",
  "id": "cat_1jAEZdbtkbLFBAU1Tt0ouKpiBUe",
  "modified_at": "2019-08-24T14:15:22Z",
  "name": "SSDs",
  "parent_category": "Storage Devices",
  "parent_category_id": "cat_1jAEZdbtkbLFBAU1Tt0ouKpiBUe"
}

Responses

Status Meaning Description Schema
200 OK Category updated. Category
401 Unauthorized Authorization invalid. ErrorResponse
404 Not Found Record not found. ErrorResponse
422 Unprocessable Entity Validation error in request. ErrorResponse

Contacts

List Contacts

Code samples


const headers = {
  'Accept':'application/json',
  'Authorization':'Bearer: access_token'
};

fetch('https://api.quoter.com/v1/contacts',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json',
  'Authorization' => 'Bearer: access_token'
}

result = RestClient.get 'https://api.quoter.com/v1/contacts',
  params: {
  }, headers: headers

p JSON.parse(result)

import requests
headers = {
  'Accept': 'application/json',
  'Authorization': 'Bearer: access_token'
}

r = requests.get('https://api.quoter.com/v1/contacts', headers = headers)

print(r.json())

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Accept": []string{"application/json"},
        "Authorization": []string{"Bearer: access_token"},
    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("GET", "https://api.quoter.com/v1/contacts", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}

# You can also use wget
curl -X GET https://api.quoter.com/v1/contacts \
  -H 'Accept: application/json' \
  -H 'Authorization: Bearer: access_token'

GET /contacts

Retrieves a list of contacts (referred to as People in the UI), typically customers or associated users.

Parameters

Name In Type Required Description
Authorization header string true Bearer: access_token
fields query string false One or more response fields, separated by commas.
sort_by query string false One or more sort fields, separated by commas.
filter[address] query string false Filter by address.
filter[city] query string false Filter by city.
filter[country] query string false Filter by country.
filter[created_at] query string false Filter by created_at.
filter[email] query string false Filter records by those associated with email.
filter[first_name] query string false Filter records by those associated with first_name.
filter[last_name] query string false Filter records by those associated with last_name.
filter[organization] query string false Filter records by those associated with organization.
filter[phone] query string false Filter records by those associated with phone.
filter[postal_code] query string false Filter by postal_code.
filter[region] query string false Filter by region.
filter[sp_contact_id] query string false Filter records by those sp_contact_id is contained in the comma separated list.
filter[modified_at] query string false Filter by modified_at.
limit query integer false Limit the number of records to return. Limit ranges from 1 to 100, and defaults to 100.
page query integer false Pagination record offset. Page starts at 1.

Detailed descriptions

filter[address]: Filter by address.

Filter records by those associated with billing_address.

Operators: eq, cont

Examples - filter[address]=eq:value - filter[address]=cont:value

filter[city]: Filter by city.

Filter records by those associated with billing_city.

Operators: eq, cont

Examples - filter[city]=eq:value - filter[city]=cont:value

filter[country]: Filter by country.

Filter records by those associated with billing_country_iso.

Operators: eq

Examples - filter[country]=eq:US

filter[created_at]: Filter by created_at.

Operators: gt, lt

Examples - filter[created_at]=gt:2023-01-01T00:00:00Z - filter[created_at]=lt:2025-01-01T00:00:00Z

filter[email]: Filter records by those associated with email.

Operators: eq, cont

Examples - filter[email]=eq:value - filter[email]=cont:value

filter[first_name]: Filter records by those associated with first_name.

Operators: eq, cont

Examples - filter[first_name]=eq:value - filter[first_name]=cont:value

filter[last_name]: Filter records by those associated with last_name.

Operators: eq, cont

Examples - filter[last_name]=eq:value - filter[last_name]=cont:value

filter[organization]: Filter records by those associated with organization.

Operators: eq, cont

Examples - filter[organization]=eq:value - filter[organization]=cont:value

filter[phone]: Filter records by those associated with phone.

Operators: eq, cont

Examples - filter[phone]=eq:value - filter[phone]=cont:value

filter[postal_code]: Filter by postal_code.

Filter records by those associated by billing_postal_code.

Operators: eq, cont

Examples - filter[postal_code]=eq:value - filter[postal_code]=cont:value

filter[region]: Filter by region.

Filter records by those associated with billing_region_iso.

Operators: eq

Examples - filter[region]=eq:CA

filter[sp_contact_id]: Filter records by those sp_contact_id is contained in the comma separated list.

Operators: in

Examples - filter[sp_contact_id]=in:31708daa-f0e7-47e0-a72a-6c1ff5d3d873,1e7de223-5cfb-4a41-a81b-1c1521a07c22

filter[modified_at]: Filter by modified_at.

Operators: gt, lt

Examples - filter[modified_at]=gt:2023-01-01T00:00:00Z - filter[modified_at]=lt:2025-01-01T00:00:00Z

Enumerated Values

Parameter Value
fields billing_address
fields billing_address2
fields billing_city
fields billing_country_iso
fields billing_postal_code
fields billing_region_iso
fields created_at
fields email
fields first_name
fields id
fields last_name
fields mobile_phone
fields modified_at
fields organization
fields shipping_address
fields shipping_address2
fields shipping_city
fields shipping_country_iso
fields shipping_email
fields shipping_first_name
fields shipping_label
fields shipping_last_name
fields shipping_organization
fields shipping_phone
fields shipping_postal_code
fields shipping_region_iso
fields title
fields website
fields work_phone
sort_by -created_at
sort_by -id
sort_by -modified_at
sort_by -first_name
sort_by -last_name
sort_by +created_at
sort_by +id
sort_by +modified_at
sort_by +first_name
sort_by +last_name

Example responses

200 Response

{
  "data": [
    {
      "billing_address": "1021 W Hastings St",
      "billing_address2": "#3200",
      "billing_city": "Vancouver",
      "billing_country_iso": "CA",
      "billing_postal_code": "V5P-523",
      "billing_region_iso": "BC",
      "created_at": "string",
      "email": "contact@quoter.com",
      "first_name": "John",
      "id": "cont_OcThl0ega2lTV4afll6qFrMDMBYyu",
      "last_name": "Doe",
      "mobile_phone": "(604) 539-5319",
      "modified_at": "date-time",
      "organization": "Quoter",
      "shipping_address": "1021 W Hastings St",
      "shipping_address2": "#3200",
      "shipping_city": "Vancouver",
      "shipping_country_iso": "CA",
      "shipping_email": "contact@quoter.com",
      "shipping_first_name": "John",
      "shipping_label": "label",
      "shipping_last_name": "C/O John Doe",
      "shipping_organization": "Quoter",
      "shipping_phone": "(604) 539-5319",
      "shipping_postal_code": "V5P-523",
      "shipping_region_iso": "BC",
      "title": "Mr.",
      "website": "quoter.com",
      "work_phone": "(604) 539-5319"
    }
  ],
  "has_more": false,
  "total_count": 1
}

Responses

Status Meaning Description Schema
200 OK Contacts found. ContactList
401 Unauthorized Authorization invalid. ErrorResponse
404 Not Found Record not found. ErrorResponse
422 Unprocessable Entity Validation error in request. ErrorResponse

Create Contact

Code samples

const inputBody = '{
  "billing_address": "1021 W Hastings St",
  "billing_address2": "#3200",
  "billing_city": "Vancouver",
  "billing_country_iso": "CA",
  "billing_postal_code": "V5P-523",
  "billing_region_iso": "BC",
  "email": "contact@quoter.com",
  "first_name": "John",
  "last_name": "Doe",
  "mobile_phone": "(604) 539-5319",
  "organization": "Quoter",
  "shipping_address": "1021 W Hastings St",
  "shipping_address2": "#3200",
  "shipping_city": "Vancouver",
  "shipping_country_iso": "CA",
  "shipping_email": "contact@quoter.com",
  "shipping_first_name": "John",
  "shipping_label": "label",
  "shipping_last_name": "C/O John Doe",
  "shipping_organization": "Quoter",
  "shipping_phone": "(604) 539-5319",
  "shipping_postal_code": "V5P-523",
  "shipping_region_iso": "BC",
  "sp_client_id": "49b84642-c1f6-43b1-914a-d37988e50f41",
  "sp_contact_id": "a56f8961-82f8-4de8-949f-d3e06b7200c1",
  "title": "Mr.",
  "website": "quoter.com",
  "work_phone": "(604) 539-5319"
}';
const headers = {
  'Content-Type':'application/json',
  'Accept':'application/json',
  'Authorization':'Bearer: access_token'
};

fetch('https://api.quoter.com/v1/contacts',
{
  method: 'POST',
  body: inputBody,
  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

require 'rest-client'
require 'json'

headers = {
  'Content-Type' => 'application/json',
  'Accept' => 'application/json',
  'Authorization' => 'Bearer: access_token'
}

result = RestClient.post 'https://api.quoter.com/v1/contacts',
  params: {
  }, headers: headers

p JSON.parse(result)

import requests
headers = {
  'Content-Type': 'application/json',
  'Accept': 'application/json',
  'Authorization': 'Bearer: access_token'
}

r = requests.post('https://api.quoter.com/v1/contacts', headers = headers)

print(r.json())

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Content-Type": []string{"application/json"},
        "Accept": []string{"application/json"},
        "Authorization": []string{"Bearer: access_token"},
    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("POST", "https://api.quoter.com/v1/contacts", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}

# You can also use wget
curl -X POST https://api.quoter.com/v1/contacts \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  -H 'Authorization: Bearer: access_token'

POST /contacts

Adds a new contact (referred to as Person in the UI) to the system.

Body parameter

{
  "billing_address": "1021 W Hastings St",
  "billing_address2": "#3200",
  "billing_city": "Vancouver",
  "billing_country_iso": "CA",
  "billing_postal_code": "V5P-523",
  "billing_region_iso": "BC",
  "email": "contact@quoter.com",
  "first_name": "John",
  "last_name": "Doe",
  "mobile_phone": "(604) 539-5319",
  "organization": "Quoter",
  "shipping_address": "1021 W Hastings St",
  "shipping_address2": "#3200",
  "shipping_city": "Vancouver",
  "shipping_country_iso": "CA",
  "shipping_email": "contact@quoter.com",
  "shipping_first_name": "John",
  "shipping_label": "label",
  "shipping_last_name": "C/O John Doe",
  "shipping_organization": "Quoter",
  "shipping_phone": "(604) 539-5319",
  "shipping_postal_code": "V5P-523",
  "shipping_region_iso": "BC",
  "sp_client_id": "49b84642-c1f6-43b1-914a-d37988e50f41",
  "sp_contact_id": "a56f8961-82f8-4de8-949f-d3e06b7200c1",
  "title": "Mr.",
  "website": "quoter.com",
  "work_phone": "(604) 539-5319"
}

Parameters

Name In Type Required Description
fields query string false One or more response fields, separated by commas.
Authorization header string true Bearer: access_token
body body ContactCreateRequest true Request body to create a Contact.

Enumerated Values

Parameter Value
fields billing_address
fields billing_address2
fields billing_city
fields billing_country_iso
fields billing_postal_code
fields billing_region_iso
fields created_at
fields email
fields first_name
fields id
fields last_name
fields mobile_phone
fields modified_at
fields organization
fields shipping_address
fields shipping_address2
fields shipping_city
fields shipping_country_iso
fields shipping_email
fields shipping_first_name
fields shipping_label
fields shipping_last_name
fields shipping_organization
fields shipping_phone
fields shipping_postal_code
fields shipping_region_iso
fields title
fields website
fields work_phone

Example responses

200 Response

{
  "billing_address": "1021 W Hastings St",
  "billing_address2": "#3200",
  "billing_city": "Vancouver",
  "billing_country_iso": "CA",
  "billing_postal_code": "V5P-523",
  "billing_region_iso": "BC",
  "created_at": "string",
  "email": "contact@quoter.com",
  "first_name": "John",
  "id": "cont_OcThl0ega2lTV4afll6qFrMDMBYyu",
  "last_name": "Doe",
  "mobile_phone": "(604) 539-5319",
  "modified_at": "date-time",
  "organization": "Quoter",
  "shipping_address": "1021 W Hastings St",
  "shipping_address2": "#3200",
  "shipping_city": "Vancouver",
  "shipping_country_iso": "CA",
  "shipping_email": "contact@quoter.com",
  "shipping_first_name": "John",
  "shipping_label": "label",
  "shipping_last_name": "C/O John Doe",
  "shipping_organization": "Quoter",
  "shipping_phone": "(604) 539-5319",
  "shipping_postal_code": "V5P-523",
  "shipping_region_iso": "BC",
  "title": "Mr.",
  "website": "quoter.com",
  "work_phone": "(604) 539-5319"
}

Responses

Status Meaning Description Schema
200 OK Contact created. Contact
401 Unauthorized Authorization invalid. ErrorResponse
404 Not Found Record not found. ErrorResponse
422 Unprocessable Entity Validation error in request. ErrorResponse

Fetch Contact

Code samples


const headers = {
  'Accept':'application/json',
  'Authorization':'Bearer: access_token'
};

fetch('https://api.quoter.com/v1/contacts/{id}',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json',
  'Authorization' => 'Bearer: access_token'
}

result = RestClient.get 'https://api.quoter.com/v1/contacts/{id}',
  params: {
  }, headers: headers

p JSON.parse(result)

import requests
headers = {
  'Accept': 'application/json',
  'Authorization': 'Bearer: access_token'
}

r = requests.get('https://api.quoter.com/v1/contacts/{id}', headers = headers)

print(r.json())

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Accept": []string{"application/json"},
        "Authorization": []string{"Bearer: access_token"},
    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("GET", "https://api.quoter.com/v1/contacts/{id}", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}

# You can also use wget
curl -X GET https://api.quoter.com/v1/contacts/{id} \
  -H 'Accept: application/json' \
  -H 'Authorization: Bearer: access_token'

GET /contacts/{id}

Retrieves detailed information about a specific contact.

Parameters

Name In Type Required Description
Authorization header string true Bearer: access_token
id path string true Contact ID
fields query string false One or more response fields, separated by commas.

Enumerated Values

Parameter Value
fields billing_address
fields billing_address2
fields billing_city
fields billing_country_iso
fields billing_postal_code
fields billing_region_iso
fields created_at
fields email
fields first_name
fields id
fields last_name
fields mobile_phone
fields modified_at
fields organization
fields shipping_address
fields shipping_address2
fields shipping_city
fields shipping_country_iso
fields shipping_email
fields shipping_first_name
fields shipping_label
fields shipping_last_name
fields shipping_organization
fields shipping_phone
fields shipping_postal_code
fields shipping_region_iso
fields title
fields website
fields work_phone

Example responses

200 Response

{
  "billing_address": "1021 W Hastings St",
  "billing_address2": "#3200",
  "billing_city": "Vancouver",
  "billing_country_iso": "CA",
  "billing_postal_code": "V5P-523",
  "billing_region_iso": "BC",
  "created_at": "string",
  "email": "contact@quoter.com",
  "first_name": "John",
  "id": "cont_OcThl0ega2lTV4afll6qFrMDMBYyu",
  "last_name": "Doe",
  "mobile_phone": "(604) 539-5319",
  "modified_at": "date-time",
  "organization": "Quoter",
  "shipping_address": "1021 W Hastings St",
  "shipping_address2": "#3200",
  "shipping_city": "Vancouver",
  "shipping_country_iso": "CA",
  "shipping_email": "contact@quoter.com",
  "shipping_first_name": "John",
  "shipping_label": "label",
  "shipping_last_name": "C/O John Doe",
  "shipping_organization": "Quoter",
  "shipping_phone": "(604) 539-5319",
  "shipping_postal_code": "V5P-523",
  "shipping_region_iso": "BC",
  "title": "Mr.",
  "website": "quoter.com",
  "work_phone": "(604) 539-5319"
}

Responses

Status Meaning Description Schema
200 OK Contact found. Contact
401 Unauthorized Authorization invalid. ErrorResponse
404 Not Found Record not found. ErrorResponse
422 Unprocessable Entity Validation error in request. ErrorResponse

Update Contact

Code samples

const inputBody = '{
  "billing_address": "1021 W Hastings St",
  "billing_address2": "#3200",
  "billing_city": "Vancouver",
  "billing_country_iso": "CA",
  "billing_postal_code": "V5P-523",
  "billing_region_iso": "BC",
  "email": "contact@quoter.com",
  "first_name": "John",
  "last_name": "Doe",
  "mobile_phone": "(604) 539-5319",
  "organization": "Quoter",
  "shipping_address": "1021 W Hastings St",
  "shipping_address2": "#3200",
  "shipping_city": "Vancouver",
  "shipping_country_iso": "CA",
  "shipping_email": "contact@quoter.com",
  "shipping_first_name": "John",
  "shipping_label": "label",
  "shipping_last_name": "C/O John Doe",
  "shipping_organization": "Quoter",
  "shipping_phone": "(604) 539-5319",
  "shipping_postal_code": "V5P-523",
  "shipping_region_iso": "BC",
  "title": "Mr.",
  "website": "quoter.com",
  "work_phone": "(604) 539-5319"
}';
const headers = {
  'Content-Type':'application/json',
  'Accept':'application/json',
  'Authorization':'Bearer: access_token'
};

fetch('https://api.quoter.com/v1/contacts/{id}',
{
  method: 'PATCH',
  body: inputBody,
  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

require 'rest-client'
require 'json'

headers = {
  'Content-Type' => 'application/json',
  'Accept' => 'application/json',
  'Authorization' => 'Bearer: access_token'
}

result = RestClient.patch 'https://api.quoter.com/v1/contacts/{id}',
  params: {
  }, headers: headers

p JSON.parse(result)

import requests
headers = {
  'Content-Type': 'application/json',
  'Accept': 'application/json',
  'Authorization': 'Bearer: access_token'
}

r = requests.patch('https://api.quoter.com/v1/contacts/{id}', headers = headers)

print(r.json())

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Content-Type": []string{"application/json"},
        "Accept": []string{"application/json"},
        "Authorization": []string{"Bearer: access_token"},
    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("PATCH", "https://api.quoter.com/v1/contacts/{id}", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}

# You can also use wget
curl -X PATCH https://api.quoter.com/v1/contacts/{id} \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  -H 'Authorization: Bearer: access_token'

PATCH /contacts/{id}

Modifies an existing contact’s details.

Body parameter

{
  "billing_address": "1021 W Hastings St",
  "billing_address2": "#3200",
  "billing_city": "Vancouver",
  "billing_country_iso": "CA",
  "billing_postal_code": "V5P-523",
  "billing_region_iso": "BC",
  "email": "contact@quoter.com",
  "first_name": "John",
  "last_name": "Doe",
  "mobile_phone": "(604) 539-5319",
  "organization": "Quoter",
  "shipping_address": "1021 W Hastings St",
  "shipping_address2": "#3200",
  "shipping_city": "Vancouver",
  "shipping_country_iso": "CA",
  "shipping_email": "contact@quoter.com",
  "shipping_first_name": "John",
  "shipping_label": "label",
  "shipping_last_name": "C/O John Doe",
  "shipping_organization": "Quoter",
  "shipping_phone": "(604) 539-5319",
  "shipping_postal_code": "V5P-523",
  "shipping_region_iso": "BC",
  "title": "Mr.",
  "website": "quoter.com",
  "work_phone": "(604) 539-5319"
}

Parameters

Name In Type Required Description
Authorization header string true Bearer: access_token
id path string true Contact ID
fields query string false One or more response fields, separated by commas.
body body ContactUpdateRequest true Request body to update a Contact.

Enumerated Values

Parameter Value
fields billing_address
fields billing_address2
fields billing_city
fields billing_country_iso
fields billing_postal_code
fields billing_region_iso
fields created_at
fields email
fields first_name
fields id
fields last_name
fields mobile_phone
fields modified_at
fields organization
fields shipping_address
fields shipping_address2
fields shipping_city
fields shipping_country_iso
fields shipping_email
fields shipping_first_name
fields shipping_label
fields shipping_last_name
fields shipping_organization
fields shipping_phone
fields shipping_postal_code
fields shipping_region_iso
fields title
fields website
fields work_phone

Example responses

200 Response

{
  "billing_address": "1021 W Hastings St",
  "billing_address2": "#3200",
  "billing_city": "Vancouver",
  "billing_country_iso": "CA",
  "billing_postal_code": "V5P-523",
  "billing_region_iso": "BC",
  "created_at": "string",
  "email": "contact@quoter.com",
  "first_name": "John",
  "id": "cont_OcThl0ega2lTV4afll6qFrMDMBYyu",
  "last_name": "Doe",
  "mobile_phone": "(604) 539-5319",
  "modified_at": "date-time",
  "organization": "Quoter",
  "shipping_address": "1021 W Hastings St",
  "shipping_address2": "#3200",
  "shipping_city": "Vancouver",
  "shipping_country_iso": "CA",
  "shipping_email": "contact@quoter.com",
  "shipping_first_name": "John",
  "shipping_label": "label",
  "shipping_last_name": "C/O John Doe",
  "shipping_organization": "Quoter",
  "shipping_phone": "(604) 539-5319",
  "shipping_postal_code": "V5P-523",
  "shipping_region_iso": "BC",
  "title": "Mr.",
  "website": "quoter.com",
  "work_phone": "(604) 539-5319"
}

Responses

Status Meaning Description Schema
200 OK Contact found. Contact
401 Unauthorized Authorization invalid. ErrorResponse
404 Not Found Record not found. ErrorResponse
422 Unprocessable Entity Validation error in request. ErrorResponse

Data Feed Suppliers

List Supplier Items

Code samples


const headers = {
  'Accept':'application/json',
  'Authorization':'Bearer: access_token'
};

fetch('https://api.quoter.com/v1/datafeeds/supplier_items?mpns=string',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json',
  'Authorization' => 'Bearer: access_token'
}

result = RestClient.get 'https://api.quoter.com/v1/datafeeds/supplier_items',
  params: {
  'mpns' => 'array[string]'
}, headers: headers

p JSON.parse(result)

import requests
headers = {
  'Accept': 'application/json',
  'Authorization': 'Bearer: access_token'
}

r = requests.get('https://api.quoter.com/v1/datafeeds/supplier_items', params={
  'mpns': [
  "string"
]
}, headers = headers)

print(r.json())

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Accept": []string{"application/json"},
        "Authorization": []string{"Bearer: access_token"},
    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("GET", "https://api.quoter.com/v1/datafeeds/supplier_items", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}

# You can also use wget
curl -X GET https://api.quoter.com/v1/datafeeds/supplier_items?mpns=string \
  -H 'Accept: application/json' \
  -H 'Authorization: Bearer: access_token'

GET /datafeeds/supplier_items

Retrieves supplier item data for specified MPNs from suppliers configured through SupplierSync. Results exclude native distributor integrations and are limited to SupplierSync sources. Note that other supplier-related endpoints (e.g., ListSuppliers, CreateSupplier) interact with a separate supplier object and do not affect supplier items.

Parameters

Name In Type Required Description
Authorization header string true Bearer: access_token
mpns query array[string] true Query records by MPNs.
limit query integer false Limit the number of records to return. Limit ranges from 1 to 100, and defaults to 100.
page query integer false Pagination record offset. Page starts at 1.

Example responses

200 Response

{
  "data": [
    {
      "category": "Networking",
      "id": "sitm_2tdpIVSQAR8jy5nILOG9QBJYBdF",
      "mpn": "AW30004",
      "name": "Example Name",
      "price_amount_decimal": "1202",
      "semantic_item_id": "smitm_2tUylOc8T55BoUDtwLMbTY4Sj1x",
      "sku": "UP16C236ZZNEAA",
      "supplier_default_taxable": true,
      "supplier_id": "supp_2tUykybikauznOTjgNzGPq0KFkz",
      "supplier_name": "Example Name",
      "taxable": true,
      "warehouses": [
        {
          "id": "itmw_2tdpIbLafl0Big0WPgsTbVt1BFa",
          "name": "Warehouse1",
          "quantity": "20"
        }
      ],
      "weight_decimal": "1000"
    }
  ],
  "has_more": false,
  "total_count": 1
}

Responses

Status Meaning Description Schema
200 OK Supplier Items found. DatafeedsSupplierItemList
401 Unauthorized Authorization invalid. ErrorResponse
404 Not Found Record not found. ErrorResponse
422 Unprocessable Entity Validation error in request. ErrorResponse

List Suppliers

Code samples


const headers = {
  'Accept':'application/json',
  'Authorization':'Bearer: access_token'
};

fetch('https://api.quoter.com/v1/datafeeds/suppliers',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json',
  'Authorization' => 'Bearer: access_token'
}

result = RestClient.get 'https://api.quoter.com/v1/datafeeds/suppliers',
  params: {
  }, headers: headers

p JSON.parse(result)

import requests
headers = {
  'Accept': 'application/json',
  'Authorization': 'Bearer: access_token'
}

r = requests.get('https://api.quoter.com/v1/datafeeds/suppliers', headers = headers)

print(r.json())

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Accept": []string{"application/json"},
        "Authorization": []string{"Bearer: access_token"},
    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("GET", "https://api.quoter.com/v1/datafeeds/suppliers", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}

# You can also use wget
curl -X GET https://api.quoter.com/v1/datafeeds/suppliers \
  -H 'Accept: application/json' \
  -H 'Authorization: Bearer: access_token'

GET /datafeeds/suppliers

Retrieves a list of suppliers configured through SupplierSync.

Parameters

Name In Type Required Description
Authorization header string true Bearer: access_token
sort_by query string false One or more sort fields, separated by commas.
limit query integer false Limit the number of records to return. Limit ranges from 1 to 100, and defaults to 100.
page query integer false Pagination record offset. Page starts at 1.

Enumerated Values

Parameter Value
sort_by -created_at
sort_by -modified_at
sort_by created_at
sort_by modified_at

Example responses

200 Response

{
  "data": [
    {
      "created_at": "2019-08-24T14:15:22Z",
      "default_taxable": true,
      "field_mapping": {
        "category_name": "csvheader4",
        "manufacturer": "csvheader3",
        "mpn": "csvheader1",
        "name": "csvheader2",
        "price": "csvheader6",
        "supplier_sku": "csvheader5",
        "taxable": "csvheader8",
        "warehouses": [
          {
            "name": "wh1",
            "quantity": "wh1_qty"
          }
        ],
        "weight": "csvheader7"
      },
      "id": "supp_2uBmQcMgHinlJgyv4or3dCKwWIb",
      "modified_at": "2019-08-24T14:15:22Z",
      "name": "Example Supplier",
      "url": "https://example.com"
    }
  ],
  "has_more": false,
  "total_count": 1
}

Responses

Status Meaning Description Schema
200 OK Suppliers found. DatafeedsSupplierList
401 Unauthorized Authorization invalid. ErrorResponse
404 Not Found Record not found. ErrorResponse
422 Unprocessable Entity Validation error in request. ErrorResponse

Item Group Item Assignments

List Item Group Item Assignments

Code samples


const headers = {
  'Accept':'application/json',
  'Authorization':'Bearer: access_token'
};

fetch('https://api.quoter.com/v1/item_group_item_assignments',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json',
  'Authorization' => 'Bearer: access_token'
}

result = RestClient.get 'https://api.quoter.com/v1/item_group_item_assignments',
  params: {
  }, headers: headers

p JSON.parse(result)

import requests
headers = {
  'Accept': 'application/json',
  'Authorization': 'Bearer: access_token'
}

r = requests.get('https://api.quoter.com/v1/item_group_item_assignments', headers = headers)

print(r.json())

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Accept": []string{"application/json"},
        "Authorization": []string{"Bearer: access_token"},
    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("GET", "https://api.quoter.com/v1/item_group_item_assignments", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}

# You can also use wget
curl -X GET https://api.quoter.com/v1/item_group_item_assignments \
  -H 'Accept: application/json' \
  -H 'Authorization: Bearer: access_token'

GET /item_group_item_assignments

Returns all item-to-item group assignments, indicating how items are grouped.

Parameters

Name In Type Required Description
Authorization header string true Bearer: access_token
filter[item_group_id] query string false Filter records by those associated with item_group_id.
filter[item_id] query string false Filter records by those associated with item_id.
fields query string false One or more response fields, separated by commas.
sort_by query string false One or more sort fields, separated by commas.
filter[created_at] query string false Filter by created_at.
filter[modified_at] query string false Filter by modified_at.
limit query integer false Limit the number of records to return. Limit ranges from 1 to 100, and defaults to 100.
page query integer false Pagination record offset. Page starts at 1.

Detailed descriptions

filter[item_group_id]: Filter records by those associated with item_group_id.

Operators: eq

Examples - filter[item_group_id]=eq:group_123

filter[item_id]: Filter records by those associated with item_id.

Operators: eq

Examples - filter[item_id]=eq:item_123

filter[created_at]: Filter by created_at.

Operators: gt, lt

Examples - filter[created_at]=gt:2023-01-01T00:00:00Z - filter[created_at]=lt:2025-01-01T00:00:00Z

filter[modified_at]: Filter by modified_at.

Operators: gt, lt

Examples - filter[modified_at]=gt:2023-01-01T00:00:00Z - filter[modified_at]=lt:2025-01-01T00:00:00Z

Enumerated Values

Parameter Value
fields created_at
fields id
fields item_group_id
fields item_id
fields modified_at
sort_by -created_at
sort_by -modified_at
sort_by -id
sort_by +created_at
sort_by +modified_at
sort_by +id

Example responses

200 Response

{
  "data": [
    {
      "created_at": "2019-08-24T14:15:22Z",
      "id": "igia_1lylwamEQiFCXsDnDl3M4xQsJiH",
      "item_group_id": "igrp_1lqyMI1VF074qctA1lpvhFK3PuY",
      "item_id": "item_OcThl0eqYyTVQzll6qFrMDMBYyu",
      "modified_at": "2019-08-24T14:15:22Z"
    }
  ],
  "has_more": false,
  "total_count": 1
}

Responses

Status Meaning Description Schema
200 OK Item Group Item Assignments found. ItemGroupItemAssignmentList
401 Unauthorized Authorization invalid. ErrorResponse
404 Not Found Record not found. ErrorResponse
422 Unprocessable Entity Validation error in request. ErrorResponse

Create Item Group Item Assignment

Code samples

const inputBody = '{
  "item_group_id": "igrp_1lqyMI1VF074qctA1lpvhFK3PuY",
  "item_id": "item_OcThl0eqYyTVQzll6qFrMDMBYyu"
}';
const headers = {
  'Content-Type':'application/json',
  'Accept':'application/json',
  'Authorization':'Bearer: access_token'
};

fetch('https://api.quoter.com/v1/item_group_item_assignments',
{
  method: 'POST',
  body: inputBody,
  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

require 'rest-client'
require 'json'

headers = {
  'Content-Type' => 'application/json',
  'Accept' => 'application/json',
  'Authorization' => 'Bearer: access_token'
}

result = RestClient.post 'https://api.quoter.com/v1/item_group_item_assignments',
  params: {
  }, headers: headers

p JSON.parse(result)

import requests
headers = {
  'Content-Type': 'application/json',
  'Accept': 'application/json',
  'Authorization': 'Bearer: access_token'
}

r = requests.post('https://api.quoter.com/v1/item_group_item_assignments', headers = headers)

print(r.json())

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Content-Type": []string{"application/json"},
        "Accept": []string{"application/json"},
        "Authorization": []string{"Bearer: access_token"},
    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("POST", "https://api.quoter.com/v1/item_group_item_assignments", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}

# You can also use wget
curl -X POST https://api.quoter.com/v1/item_group_item_assignments \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  -H 'Authorization: Bearer: access_token'

POST /item_group_item_assignments

Assigns an item to a specific item group.

Body parameter

{
  "item_group_id": "igrp_1lqyMI1VF074qctA1lpvhFK3PuY",
  "item_id": "item_OcThl0eqYyTVQzll6qFrMDMBYyu"
}

Parameters

Name In Type Required Description
Authorization header string true Bearer: access_token
fields query string false One or more response fields, separated by commas.
body body ItemGroupItemAssignmentCreateRequest true Request body to create an Item Group Item Assignment.

Enumerated Values

Parameter Value
fields created_at
fields id
fields item_group_id
fields item_id
fields modified_at

Example responses

200 Response

{
  "created_at": "2019-08-24T14:15:22Z",
  "id": "igia_1lylwamEQiFCXsDnDl3M4xQsJiH",
  "item_group_id": "igrp_1lqyMI1VF074qctA1lpvhFK3PuY",
  "item_id": "item_OcThl0eqYyTVQzll6qFrMDMBYyu",
  "modified_at": "2019-08-24T14:15:22Z"
}

Responses

Status Meaning Description Schema
200 OK Item Group Item Assignment created. ItemGroupItemAssignment
401 Unauthorized Authorization invalid. ErrorResponse
404 Not Found Record not found. ErrorResponse
422 Unprocessable Entity Validation error in request. ErrorResponse

Delete Item Group Item Assignment

Code samples


const headers = {
  'Accept':'application/json',
  'Authorization':'Bearer: access_token'
};

fetch('https://api.quoter.com/v1/item_group_item_assignments/{id}',
{
  method: 'DELETE',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json',
  'Authorization' => 'Bearer: access_token'
}

result = RestClient.delete 'https://api.quoter.com/v1/item_group_item_assignments/{id}',
  params: {
  }, headers: headers

p JSON.parse(result)

import requests
headers = {
  'Accept': 'application/json',
  'Authorization': 'Bearer: access_token'
}

r = requests.delete('https://api.quoter.com/v1/item_group_item_assignments/{id}', headers = headers)

print(r.json())

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Accept": []string{"application/json"},
        "Authorization": []string{"Bearer: access_token"},
    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("DELETE", "https://api.quoter.com/v1/item_group_item_assignments/{id}", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}

# You can also use wget
curl -X DELETE https://api.quoter.com/v1/item_group_item_assignments/{id} \
  -H 'Accept: application/json' \
  -H 'Authorization: Bearer: access_token'

DELETE /item_group_item_assignments/{id}

Removes an item from a specific item group.

Parameters

Name In Type Required Description
Authorization header string true Bearer: access_token
id path string true Item Group Item Assignment ID

Example responses

401 Response

{
  "errors": [
    {
      "detail": "Pagination page requested too high.",
      "status": 400,
      "title": "Bad Request"
    }
  ]
}

Responses

Status Meaning Description Schema
204 No Content Record deleted. None
401 Unauthorized Authorization invalid. ErrorResponse
404 Not Found Record not found. ErrorResponse
422 Unprocessable Entity Validation error in request. ErrorResponse

Fetch Item Group Item Assignment

Code samples


const headers = {
  'Accept':'application/json',
  'Authorization':'Bearer: access_token'
};

fetch('https://api.quoter.com/v1/item_group_item_assignments/{id}',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json',
  'Authorization' => 'Bearer: access_token'
}

result = RestClient.get 'https://api.quoter.com/v1/item_group_item_assignments/{id}',
  params: {
  }, headers: headers

p JSON.parse(result)

import requests
headers = {
  'Accept': 'application/json',
  'Authorization': 'Bearer: access_token'
}

r = requests.get('https://api.quoter.com/v1/item_group_item_assignments/{id}', headers = headers)

print(r.json())

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Accept": []string{"application/json"},
        "Authorization": []string{"Bearer: access_token"},
    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("GET", "https://api.quoter.com/v1/item_group_item_assignments/{id}", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}

# You can also use wget
curl -X GET https://api.quoter.com/v1/item_group_item_assignments/{id} \
  -H 'Accept: application/json' \
  -H 'Authorization: Bearer: access_token'

GET /item_group_item_assignments/{id}

Retrieves the details of a specific item-to-group assignment.

Parameters

Name In Type Required Description
Authorization header string true Bearer: access_token
id path string true Item Group Item Assignment ID
fields query string false One or more response fields, separated by commas.

Enumerated Values

Parameter Value
fields created_at
fields id
fields item_group_id
fields item_id
fields modified_at

Example responses

200 Response

{
  "created_at": "2019-08-24T14:15:22Z",
  "id": "igia_1lylwamEQiFCXsDnDl3M4xQsJiH",
  "item_group_id": "igrp_1lqyMI1VF074qctA1lpvhFK3PuY",
  "item_id": "item_OcThl0eqYyTVQzll6qFrMDMBYyu",
  "modified_at": "2019-08-24T14:15:22Z"
}

Responses

Status Meaning Description Schema
200 OK Item Group Item Assignment found. ItemGroupItemAssignment
401 Unauthorized Authorization invalid. ErrorResponse
404 Not Found Record not found. ErrorResponse
422 Unprocessable Entity Validation error in request. ErrorResponse

Item Groups

List Item Groups

Code samples


const headers = {
  'Accept':'application/json',
  'Authorization':'Bearer: access_token'
};

fetch('https://api.quoter.com/v1/item_groups',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json',
  'Authorization' => 'Bearer: access_token'
}

result = RestClient.get 'https://api.quoter.com/v1/item_groups',
  params: {
  }, headers: headers

p JSON.parse(result)

import requests
headers = {
  'Accept': 'application/json',
  'Authorization': 'Bearer: access_token'
}

r = requests.get('https://api.quoter.com/v1/item_groups', headers = headers)

print(r.json())

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Accept": []string{"application/json"},
        "Authorization": []string{"Bearer: access_token"},
    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("GET", "https://api.quoter.com/v1/item_groups", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}

# You can also use wget
curl -X GET https://api.quoter.com/v1/item_groups \
  -H 'Accept: application/json' \
  -H 'Authorization: Bearer: access_token'

GET /item_groups

Retrieves a list of item groups which are used to limit subsets of items to resellers or business units.

Parameters

Name In Type Required Description
Authorization header string true Bearer: access_token
fields query string false One or more response fields, separated by commas.
sort_by query string false One or more sort fields, separated by commas.
filter[created_at] query string false Filter by created_at.
filter[modified_at] query string false Filter by modified_at.
filter[name] query string false Filter by name.
limit query integer false Limit the number of records to return. Limit ranges from 1 to 100, and defaults to 100.
page query integer false Pagination record offset. Page starts at 1.

Detailed descriptions

filter[created_at]: Filter by created_at.

Operators: gt, lt

Examples - filter[created_at]=gt:2023-01-01T00:00:00Z - filter[created_at]=lt:2025-01-01T00:00:00Z

filter[modified_at]: Filter by modified_at.

Operators: gt, lt

Examples - filter[modified_at]=gt:2023-01-01T00:00:00Z - filter[modified_at]=lt:2025-01-01T00:00:00Z

filter[name]: Filter by name.

Operators: eq, cont

Examples - filter[name]=eq:abba - filter[name]=cont:ab

Enumerated Values

Parameter Value
fields created_at
fields id
fields modified_at
fields name
sort_by -created_at
sort_by -id
sort_by -modified_at
sort_by -name
sort_by +created_at
sort_by +id
sort_by +modified_at
sort_by +name

Example responses

200 Response

{
  "data": [
    {
      "created_at": "2019-08-24T14:15:22Z",
      "id": "igrp_1jAEZdbtkbLFBAU1Tt0ouKpiBUe",
      "modified_at": "2019-08-24T14:15:22Z",
      "name": "West Coast"
    }
  ],
  "has_more": false,
  "total_count": 1
}

Responses

Status Meaning Description Schema
200 OK Item Groups found. ItemGroupList
401 Unauthorized Authorization invalid. ErrorResponse
404 Not Found Record not found. ErrorResponse
422 Unprocessable Entity Validation error in request. ErrorResponse

Create Item Group

Code samples

const inputBody = '{
  "name": "West Coast"
}';
const headers = {
  'Content-Type':'application/json',
  'Accept':'application/json',
  'Authorization':'Bearer: access_token'
};

fetch('https://api.quoter.com/v1/item_groups',
{
  method: 'POST',
  body: inputBody,
  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

require 'rest-client'
require 'json'

headers = {
  'Content-Type' => 'application/json',
  'Accept' => 'application/json',
  'Authorization' => 'Bearer: access_token'
}

result = RestClient.post 'https://api.quoter.com/v1/item_groups',
  params: {
  }, headers: headers

p JSON.parse(result)

import requests
headers = {
  'Content-Type': 'application/json',
  'Accept': 'application/json',
  'Authorization': 'Bearer: access_token'
}

r = requests.post('https://api.quoter.com/v1/item_groups', headers = headers)

print(r.json())

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Content-Type": []string{"application/json"},
        "Accept": []string{"application/json"},
        "Authorization": []string{"Bearer: access_token"},
    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("POST", "https://api.quoter.com/v1/item_groups", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}

# You can also use wget
curl -X POST https://api.quoter.com/v1/item_groups \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  -H 'Authorization: Bearer: access_token'

POST /item_groups

Creates a new item group.

Body parameter

{
  "name": "West Coast"
}

Parameters

Name In Type Required Description
Authorization header string true Bearer: access_token
fields query string false One or more response fields, separated by commas.
body body ItemGroupCreateRequest true Request body to create a Item Group.

Enumerated Values

Parameter Value
fields created_at
fields id
fields modified_at
fields name

Example responses

200 Response

{
  "created_at": "2019-08-24T14:15:22Z",
  "id": "igrp_1jAEZdbtkbLFBAU1Tt0ouKpiBUe",
  "modified_at": "2019-08-24T14:15:22Z",
  "name": "West Coast"
}

Responses

Status Meaning Description Schema
200 OK Item Group created. ItemGroup
401 Unauthorized Authorization invalid. ErrorResponse
404 Not Found Record not found. ErrorResponse
422 Unprocessable Entity Validation error in request. ErrorResponse

Delete Item Group

Code samples


const headers = {
  'Accept':'application/json',
  'Authorization':'Bearer: access_token'
};

fetch('https://api.quoter.com/v1/item_groups/{id}',
{
  method: 'DELETE',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json',
  'Authorization' => 'Bearer: access_token'
}

result = RestClient.delete 'https://api.quoter.com/v1/item_groups/{id}',
  params: {
  }, headers: headers

p JSON.parse(result)

import requests
headers = {
  'Accept': 'application/json',
  'Authorization': 'Bearer: access_token'
}

r = requests.delete('https://api.quoter.com/v1/item_groups/{id}', headers = headers)

print(r.json())

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Accept": []string{"application/json"},
        "Authorization": []string{"Bearer: access_token"},
    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("DELETE", "https://api.quoter.com/v1/item_groups/{id}", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}

# You can also use wget
curl -X DELETE https://api.quoter.com/v1/item_groups/{id} \
  -H 'Accept: application/json' \
  -H 'Authorization: Bearer: access_token'

DELETE /item_groups/{id}

Removes a specific item group.

Parameters

Name In Type Required Description
Authorization header string true Bearer: access_token
id path string true Item Group ID

Example responses

401 Response

{
  "errors": [
    {
      "detail": "Pagination page requested too high.",
      "status": 400,
      "title": "Bad Request"
    }
  ]
}

Responses

Status Meaning Description Schema
204 No Content Record deleted. None
401 Unauthorized Authorization invalid. ErrorResponse
404 Not Found Record not found. ErrorResponse
422 Unprocessable Entity Validation error in request. ErrorResponse

Fetch Item Group

Code samples


const headers = {
  'Accept':'application/json',
  'Authorization':'Bearer: access_token'
};

fetch('https://api.quoter.com/v1/item_groups/{id}',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json',
  'Authorization' => 'Bearer: access_token'
}

result = RestClient.get 'https://api.quoter.com/v1/item_groups/{id}',
  params: {
  }, headers: headers

p JSON.parse(result)

import requests
headers = {
  'Accept': 'application/json',
  'Authorization': 'Bearer: access_token'
}

r = requests.get('https://api.quoter.com/v1/item_groups/{id}', headers = headers)

print(r.json())

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Accept": []string{"application/json"},
        "Authorization": []string{"Bearer: access_token"},
    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("GET", "https://api.quoter.com/v1/item_groups/{id}", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}

# You can also use wget
curl -X GET https://api.quoter.com/v1/item_groups/{id} \
  -H 'Accept: application/json' \
  -H 'Authorization: Bearer: access_token'

GET /item_groups/{id}

Retrieves details of a single item group.

Parameters

Name In Type Required Description
Authorization header string true Bearer: access_token
id path string true Item Group ID
fields query string false One or more response fields, separated by commas.

Enumerated Values

Parameter Value
fields created_at
fields id
fields modified_at
fields name

Example responses

200 Response

{
  "created_at": "2019-08-24T14:15:22Z",
  "id": "igrp_1jAEZdbtkbLFBAU1Tt0ouKpiBUe",
  "modified_at": "2019-08-24T14:15:22Z",
  "name": "West Coast"
}

Responses

Status Meaning Description Schema
200 OK Item Group found. ItemGroup
401 Unauthorized Authorization invalid. ErrorResponse
404 Not Found Record not found. ErrorResponse
422 Unprocessable Entity Validation error in request. ErrorResponse

Update Item Group

Code samples

const inputBody = '{
  "name": "West Coast"
}';
const headers = {
  'Content-Type':'application/json',
  'Accept':'application/json',
  'Authorization':'Bearer: access_token'
};

fetch('https://api.quoter.com/v1/item_groups/{id}',
{
  method: 'PATCH',
  body: inputBody,
  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

require 'rest-client'
require 'json'

headers = {
  'Content-Type' => 'application/json',
  'Accept' => 'application/json',
  'Authorization' => 'Bearer: access_token'
}

result = RestClient.patch 'https://api.quoter.com/v1/item_groups/{id}',
  params: {
  }, headers: headers

p JSON.parse(result)

import requests
headers = {
  'Content-Type': 'application/json',
  'Accept': 'application/json',
  'Authorization': 'Bearer: access_token'
}

r = requests.patch('https://api.quoter.com/v1/item_groups/{id}', headers = headers)

print(r.json())

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Content-Type": []string{"application/json"},
        "Accept": []string{"application/json"},
        "Authorization": []string{"Bearer: access_token"},
    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("PATCH", "https://api.quoter.com/v1/item_groups/{id}", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}

# You can also use wget
curl -X PATCH https://api.quoter.com/v1/item_groups/{id} \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  -H 'Authorization: Bearer: access_token'

PATCH /item_groups/{id}

Updates the name or configuration of an item group.

Body parameter

{
  "name": "West Coast"
}

Parameters

Name In Type Required Description
Authorization header string true Bearer: access_token
id path string true Item Group ID
fields query string false One or more response fields, separated by commas.
body body ItemGroupUpdateRequest true Request body to update a Item Group.

Enumerated Values

Parameter Value
fields created_at
fields id
fields modified_at
fields name

Example responses

200 Response

{
  "created_at": "2019-08-24T14:15:22Z",
  "id": "igrp_1jAEZdbtkbLFBAU1Tt0ouKpiBUe",
  "modified_at": "2019-08-24T14:15:22Z",
  "name": "West Coast"
}

Responses

Status Meaning Description Schema
200 OK Item Group found. ItemGroup
401 Unauthorized Authorization invalid. ErrorResponse
404 Not Found Record not found. ErrorResponse
422 Unprocessable Entity Validation error in request. ErrorResponse

Item Option Values

List Item Option Values

Code samples


const headers = {
  'Accept':'application/json',
  'Authorization':'Bearer: access_token'
};

fetch('https://api.quoter.com/v1/item_option_values',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json',
  'Authorization' => 'Bearer: access_token'
}

result = RestClient.get 'https://api.quoter.com/v1/item_option_values',
  params: {
  }, headers: headers

p JSON.parse(result)

import requests
headers = {
  'Accept': 'application/json',
  'Authorization': 'Bearer: access_token'
}

r = requests.get('https://api.quoter.com/v1/item_option_values', headers = headers)

print(r.json())

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Accept": []string{"application/json"},
        "Authorization": []string{"Bearer: access_token"},
    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("GET", "https://api.quoter.com/v1/item_option_values", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}

# You can also use wget
curl -X GET https://api.quoter.com/v1/item_option_values \
  -H 'Accept: application/json' \
  -H 'Authorization: Bearer: access_token'

GET /item_option_values

Lists all values associated with item options.

Parameters

Name In Type Required Description
Authorization header string true Bearer: access_token
fields query string false One or more response fields, separated by commas.
sort_by query string false One or more sort fields, separated by commas.
filter[created_at] query string false Filter by created_at.
filter[modified_at] query string false Filter by modified_at.
filter[name] query string false Filter by name.
limit query integer false Limit the number of records to return. Limit ranges from 1 to 100, and defaults to 100.
page query integer false Pagination record offset. Page starts at 1.

Detailed descriptions

filter[created_at]: Filter by created_at.

Operators: gt, lt

Examples - filter[created_at]=gt:2023-01-01T00:00:00Z - filter[created_at]=lt:2025-01-01T00:00:00Z

filter[modified_at]: Filter by modified_at.

Operators: gt, lt

Examples - filter[modified_at]=gt:2023-01-01T00:00:00Z - filter[modified_at]=lt:2025-01-01T00:00:00Z

filter[name]: Filter by name.

Operators: eq, cont

Examples - filter[name]=eq:abba - filter[name]=cont:ab

Enumerated Values

Parameter Value
fields code
fields cost_decimal
fields cost_type
fields created_at
fields id
fields item_id
fields item_option_id
fields modified_at
fields name
fields price_decimal
fields pricing_scheme
fields sort_order
sort_by -created_at
sort_by -id
sort_by -modified_at
sort_by -name
sort_by -sort_order
sort_by +created_at
sort_by +id
sort_by +modified_at
sort_by +name
sort_by +sort_order

Example responses

200 Response

{
  "data": [
    {
      "code": "MPN123",
      "cost_decimal": "50.50",
      "cost_type": "amount",
      "created_at": "2019-08-24T14:15:22Z",
      "id": "iov_1jAEZdbtkbLFBAU1Tt0ouKpiBUe",
      "item_id": "item_1jAEZdbtkbLFBAU1Tt0ouKpiBUe",
      "item_option_id": "iopt_1jAEZdbtkbLFBAU1Tt0ouKpiBUe",
      "modified_at": "2019-08-24T14:15:22Z",
      "name": "1TB",
      "price_decimal": "50.50",
      "pricing_scheme": "amount"
    }
  ],
  "has_more": false,
  "total_count": 1
}

Responses

Status Meaning Description Schema
200 OK Item Option Values found. ItemOptionValueList
401 Unauthorized Authorization invalid. ErrorResponse
404 Not Found Record not found. ErrorResponse
422 Unprocessable Entity Validation error in request. ErrorResponse

Create Item Option Value

Code samples

const inputBody = '{
  "code": "MPN123",
  "cost_decimal": "50.50",
  "cost_type": "amount",
  "item_option_id": "iopt_1jAEZdbtkbLFBAU1Tt0ouKpiBUe",
  "name": "1TB",
  "price_decimal": "50.50",
  "pricing_scheme": "amount",
  "sort_order": 1
}';
const headers = {
  'Content-Type':'application/json',
  'Accept':'application/json',
  'Authorization':'Bearer: access_token'
};

fetch('https://api.quoter.com/v1/item_option_values',
{
  method: 'POST',
  body: inputBody,
  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

require 'rest-client'
require 'json'

headers = {
  'Content-Type' => 'application/json',
  'Accept' => 'application/json',
  'Authorization' => 'Bearer: access_token'
}

result = RestClient.post 'https://api.quoter.com/v1/item_option_values',
  params: {
  }, headers: headers

p JSON.parse(result)

import requests
headers = {
  'Content-Type': 'application/json',
  'Accept': 'application/json',
  'Authorization': 'Bearer: access_token'
}

r = requests.post('https://api.quoter.com/v1/item_option_values', headers = headers)

print(r.json())

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Content-Type": []string{"application/json"},
        "Accept": []string{"application/json"},
        "Authorization": []string{"Bearer: access_token"},
    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("POST", "https://api.quoter.com/v1/item_option_values", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}

# You can also use wget
curl -X POST https://api.quoter.com/v1/item_option_values \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  -H 'Authorization: Bearer: access_token'

POST /item_option_values

Adds a new option value for a specific item option.

Body parameter

{
  "code": "MPN123",
  "cost_decimal": "50.50",
  "cost_type": "amount",
  "item_option_id": "iopt_1jAEZdbtkbLFBAU1Tt0ouKpiBUe",
  "name": "1TB",
  "price_decimal": "50.50",
  "pricing_scheme": "amount",
  "sort_order": 1
}

Parameters

Name In Type Required Description
Authorization header string true Bearer: access_token
fields query string false One or more response fields, separated by commas.
body body ItemOptionValueCreateRequest true Request body to create an Item Option Value.

Enumerated Values

Parameter Value
fields code
fields cost_decimal
fields cost_type
fields created_at
fields id
fields item_id
fields item_option_id
fields modified_at
fields name
fields price_decimal
fields pricing_scheme
fields sort_order

Example responses

200 Response

{
  "code": "MPN123",
  "cost_decimal": "50.50",
  "cost_type": "amount",
  "created_at": "2019-08-24T14:15:22Z",
  "id": "iov_1jAEZdbtkbLFBAU1Tt0ouKpiBUe",
  "item_id": "item_1jAEZdbtkbLFBAU1Tt0ouKpiBUe",
  "item_option_id": "iopt_1jAEZdbtkbLFBAU1Tt0ouKpiBUe",
  "modified_at": "2019-08-24T14:15:22Z",
  "name": "1TB",
  "price_decimal": "50.50",
  "pricing_scheme": "amount"
}

Responses

Status Meaning Description Schema
200 OK Item Option Value created. ItemOptionValue
401 Unauthorized Authorization invalid. ErrorResponse
404 Not Found Record not found. ErrorResponse
422 Unprocessable Entity Validation error in request. ErrorResponse

Delete Item Option Value

Code samples


const headers = {
  'Accept':'application/json',
  'Authorization':'Bearer: access_token'
};

fetch('https://api.quoter.com/v1/item_option_values/{id}',
{
  method: 'DELETE',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json',
  'Authorization' => 'Bearer: access_token'
}

result = RestClient.delete 'https://api.quoter.com/v1/item_option_values/{id}',
  params: {
  }, headers: headers

p JSON.parse(result)

import requests
headers = {
  'Accept': 'application/json',
  'Authorization': 'Bearer: access_token'
}

r = requests.delete('https://api.quoter.com/v1/item_option_values/{id}', headers = headers)

print(r.json())

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Accept": []string{"application/json"},
        "Authorization": []string{"Bearer: access_token"},
    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("DELETE", "https://api.quoter.com/v1/item_option_values/{id}", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}

# You can also use wget
curl -X DELETE https://api.quoter.com/v1/item_option_values/{id} \
  -H 'Accept: application/json' \
  -H 'Authorization: Bearer: access_token'

DELETE /item_option_values/{id}

Removes a specific item option value.

Parameters

Name In Type Required Description
Authorization header string true Bearer: access_token
id path string true Item Option Value ID

Example responses

401 Response

{
  "errors": [
    {
      "detail": "Pagination page requested too high.",
      "status": 400,
      "title": "Bad Request"
    }
  ]
}

Responses

Status Meaning Description Schema
204 No Content Record deleted. None
401 Unauthorized Authorization invalid. ErrorResponse
404 Not Found Record not found. ErrorResponse
422 Unprocessable Entity Validation error in request. ErrorResponse

Fetch Item Option Value

Code samples


const headers = {
  'Accept':'application/json',
  'Authorization':'Bearer: access_token'
};

fetch('https://api.quoter.com/v1/item_option_values/{id}',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json',
  'Authorization' => 'Bearer: access_token'
}

result = RestClient.get 'https://api.quoter.com/v1/item_option_values/{id}',
  params: {
  }, headers: headers

p JSON.parse(result)

import requests
headers = {
  'Accept': 'application/json',
  'Authorization': 'Bearer: access_token'
}

r = requests.get('https://api.quoter.com/v1/item_option_values/{id}', headers = headers)

print(r.json())

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Accept": []string{"application/json"},
        "Authorization": []string{"Bearer: access_token"},
    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("GET", "https://api.quoter.com/v1/item_option_values/{id}", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}

# You can also use wget
curl -X GET https://api.quoter.com/v1/item_option_values/{id} \
  -H 'Accept: application/json' \
  -H 'Authorization: Bearer: access_token'

GET /item_option_values/{id}

Retrieves detailed information about an item option value.

Parameters

Name In Type Required Description
Authorization header string true Bearer: access_token
id path string true Item Option Value ID
fields query string false One or more response fields, separated by commas.

Enumerated Values

Parameter Value
fields code
fields cost_decimal
fields cost_type
fields created_at
fields id
fields item_id
fields item_option_id
fields modified_at
fields name
fields price_decimal
fields pricing_scheme
fields sort_order

Example responses

200 Response

{
  "code": "MPN123",
  "cost_decimal": "50.50",
  "cost_type": "amount",
  "created_at": "2019-08-24T14:15:22Z",
  "id": "iov_1jAEZdbtkbLFBAU1Tt0ouKpiBUe",
  "item_id": "item_1jAEZdbtkbLFBAU1Tt0ouKpiBUe",
  "item_option_id": "iopt_1jAEZdbtkbLFBAU1Tt0ouKpiBUe",
  "modified_at": "2019-08-24T14:15:22Z",
  "name": "1TB",
  "price_decimal": "50.50",
  "pricing_scheme": "amount"
}

Responses

Status Meaning Description Schema
200 OK Item Option Value found. ItemOptionValue
401 Unauthorized Authorization invalid. ErrorResponse
404 Not Found Record not found. ErrorResponse
422 Unprocessable Entity Validation error in request. ErrorResponse

Update Item Option Value

Code samples

const inputBody = '{
  "code": "MPN123",
  "cost_decimal": "50.50",
  "cost_type": "amount",
  "name": "1TB",
  "price_decimal": "50.50",
  "pricing_scheme": "amount",
  "sort_order": 1
}';
const headers = {
  'Content-Type':'application/json',
  'Accept':'application/json',
  'Authorization':'Bearer: access_token'
};

fetch('https://api.quoter.com/v1/item_option_values/{id}',
{
  method: 'PATCH',
  body: inputBody,
  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

require 'rest-client'
require 'json'

headers = {
  'Content-Type' => 'application/json',
  'Accept' => 'application/json',
  'Authorization' => 'Bearer: access_token'
}

result = RestClient.patch 'https://api.quoter.com/v1/item_option_values/{id}',
  params: {
  }, headers: headers

p JSON.parse(result)

import requests
headers = {
  'Content-Type': 'application/json',
  'Accept': 'application/json',
  'Authorization': 'Bearer: access_token'
}

r = requests.patch('https://api.quoter.com/v1/item_option_values/{id}', headers = headers)

print(r.json())

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Content-Type": []string{"application/json"},
        "Accept": []string{"application/json"},
        "Authorization": []string{"Bearer: access_token"},
    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("PATCH", "https://api.quoter.com/v1/item_option_values/{id}", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}

# You can also use wget
curl -X PATCH https://api.quoter.com/v1/item_option_values/{id} \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  -H 'Authorization: Bearer: access_token'

PATCH /item_option_values/{id}

Modifies an existing item option value.

Body parameter

{
  "code": "MPN123",
  "cost_decimal": "50.50",
  "cost_type": "amount",
  "name": "1TB",
  "price_decimal": "50.50",
  "pricing_scheme": "amount",
  "sort_order": 1
}

Parameters

Name In Type Required Description
Authorization header string true Bearer: access_token
id path string true Item Option Value ID
fields query string false One or more response fields, separated by commas.
body body ItemOptionValueUpdateRequest true Request body to update an Item Option Value.

Enumerated Values

Parameter Value
fields code
fields cost_decimal
fields cost_type
fields created_at
fields id
fields item_id
fields item_option_id
fields modified_at
fields name
fields price_decimal
fields pricing_scheme
fields sort_order

Example responses

200 Response

{
  "code": "MPN123",
  "cost_decimal": "50.50",
  "cost_type": "amount",
  "created_at": "2019-08-24T14:15:22Z",
  "id": "iov_1jAEZdbtkbLFBAU1Tt0ouKpiBUe",
  "item_id": "item_1jAEZdbtkbLFBAU1Tt0ouKpiBUe",
  "item_option_id": "iopt_1jAEZdbtkbLFBAU1Tt0ouKpiBUe",
  "modified_at": "2019-08-24T14:15:22Z",
  "name": "1TB",
  "price_decimal": "50.50",
  "pricing_scheme": "amount"
}

Responses

Status Meaning Description Schema
200 OK Item Option Value found. ItemOptionValue
401 Unauthorized Authorization invalid. ErrorResponse
404 Not Found Record not found. ErrorResponse
422 Unprocessable Entity Validation error in request. ErrorResponse

Item Options

List Item Options

Code samples


const headers = {
  'Accept':'application/json',
  'Authorization':'Bearer: access_token'
};

fetch('https://api.quoter.com/v1/item_options',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json',
  'Authorization' => 'Bearer: access_token'
}

result = RestClient.get 'https://api.quoter.com/v1/item_options',
  params: {
  }, headers: headers

p JSON.parse(result)

import requests
headers = {
  'Accept': 'application/json',
  'Authorization': 'Bearer: access_token'
}

r = requests.get('https://api.quoter.com/v1/item_options', headers = headers)

print(r.json())

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Accept": []string{"application/json"},
        "Authorization": []string{"Bearer: access_token"},
    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("GET", "https://api.quoter.com/v1/item_options", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}

# You can also use wget
curl -X GET https://api.quoter.com/v1/item_options \
  -H 'Accept: application/json' \
  -H 'Authorization: Bearer: access_token'

GET /item_options

Lists configurable options available for items.

Parameters

Name In Type Required Description
Authorization header string true Bearer: access_token
fields query string false One or more response fields, separated by commas.
sort_by query string false One or more sort fields, separated by commas.
filter[created_at] query string false Filter by created_at.
filter[modified_at] query string false Filter by modified_at.
filter[name] query string false Filter by name.
limit query integer false Limit the number of records to return. Limit ranges from 1 to 100, and defaults to 100.
page query integer false Pagination record offset. Page starts at 1.

Detailed descriptions

filter[created_at]: Filter by created_at.

Operators: gt, lt

Examples - filter[created_at]=gt:2023-01-01T00:00:00Z - filter[created_at]=lt:2025-01-01T00:00:00Z

filter[modified_at]: Filter by modified_at.

Operators: gt, lt

Examples - filter[modified_at]=gt:2023-01-01T00:00:00Z - filter[modified_at]=lt:2025-01-01T00:00:00Z

filter[name]: Filter by name.

Operators: eq, cont

Examples - filter[name]=eq:abba - filter[name]=cont:ab

Enumerated Values

Parameter Value
fields allow_multiple_values
fields created_at
fields description
fields extended_description
fields id
fields item_id
fields modified_at
fields name
fields required
fields sort_order
sort_by -created_at
sort_by -id
sort_by -modified_at
sort_by -name
sort_by -sort_order
sort_by +created_at
sort_by +id
sort_by +modified_at
sort_by +name
sort_by +sort_order

Example responses

200 Response

{
  "data": [
    {
      "allow_multiple_values": false,
      "created_at": "2019-08-24T14:15:22Z",
      "description": "<p>Standard description</p>",
      "extended_description": "<p>Longer description.</p>",
      "id": "iopt_1jAEZdbtkbLFBAU1Tt0ouKpiBUe",
      "item_id": "item_1jAEZdbtkbLFBAU1Tt0ouKpiBUe",
      "modified_at": "2019-08-24T14:15:22Z",
      "name": "Disk Size",
      "required": false,
      "sort_order": 0
    }
  ],
  "has_more": false,
  "total_count": 1
}

Responses

Status Meaning Description Schema
200 OK Item Options found. ItemOptionList
401 Unauthorized Authorization invalid. ErrorResponse
404 Not Found Record not found. ErrorResponse
422 Unprocessable Entity Validation error in request. ErrorResponse

Create Item Option

Code samples

const inputBody = '{
  "allow_multiple_values": false,
  "description": "<p>Standard description</p>",
  "extended_description": "<p>Longer description.</p>",
  "item_id": "item_1jAEZdbtkbLFBAU1Tt0ouKpiBUe",
  "name": "Disk Size",
  "required": false,
  "sort_order": 0
}';
const headers = {
  'Content-Type':'application/json',
  'Accept':'application/json',
  'Authorization':'Bearer: access_token'
};

fetch('https://api.quoter.com/v1/item_options',
{
  method: 'POST',
  body: inputBody,
  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

require 'rest-client'
require 'json'

headers = {
  'Content-Type' => 'application/json',
  'Accept' => 'application/json',
  'Authorization' => 'Bearer: access_token'
}

result = RestClient.post 'https://api.quoter.com/v1/item_options',
  params: {
  }, headers: headers

p JSON.parse(result)

import requests
headers = {
  'Content-Type': 'application/json',
  'Accept': 'application/json',
  'Authorization': 'Bearer: access_token'
}

r = requests.post('https://api.quoter.com/v1/item_options', headers = headers)

print(r.json())

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Content-Type": []string{"application/json"},
        "Accept": []string{"application/json"},
        "Authorization": []string{"Bearer: access_token"},
    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("POST", "https://api.quoter.com/v1/item_options", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}

# You can also use wget
curl -X POST https://api.quoter.com/v1/item_options \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  -H 'Authorization: Bearer: access_token'

POST /item_options

Creates a new option for item customization.

Body parameter

{
  "allow_multiple_values": false,
  "description": "<p>Standard description</p>",
  "extended_description": "<p>Longer description.</p>",
  "item_id": "item_1jAEZdbtkbLFBAU1Tt0ouKpiBUe",
  "name": "Disk Size",
  "required": false,
  "sort_order": 0
}

Parameters

Name In Type Required Description
Authorization header string true Bearer: access_token
fields query string false One or more response fields, separated by commas.
body body ItemOptionCreateRequest true Request body to create an Item Option.

Enumerated Values

Parameter Value
fields allow_multiple_values
fields created_at
fields description
fields extended_description
fields id
fields item_id
fields modified_at
fields name
fields required
fields sort_order

Example responses

200 Response

{
  "allow_multiple_values": false,
  "created_at": "2019-08-24T14:15:22Z",
  "description": "<p>Standard description</p>",
  "extended_description": "<p>Longer description.</p>",
  "id": "iopt_1jAEZdbtkbLFBAU1Tt0ouKpiBUe",
  "item_id": "item_1jAEZdbtkbLFBAU1Tt0ouKpiBUe",
  "modified_at": "2019-08-24T14:15:22Z",
  "name": "Disk Size",
  "required": false,
  "sort_order": 0
}

Responses

Status Meaning Description Schema
200 OK Item Option created. ItemOption
401 Unauthorized Authorization invalid. ErrorResponse
404 Not Found Record not found. ErrorResponse
422 Unprocessable Entity Validation error in request. ErrorResponse

Delete Item Option

Code samples


const headers = {
  'Accept':'application/json',
  'Authorization':'Bearer: access_token'
};

fetch('https://api.quoter.com/v1/item_options/{id}',
{
  method: 'DELETE',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json',
  'Authorization' => 'Bearer: access_token'
}

result = RestClient.delete 'https://api.quoter.com/v1/item_options/{id}',
  params: {
  }, headers: headers

p JSON.parse(result)

import requests
headers = {
  'Accept': 'application/json',
  'Authorization': 'Bearer: access_token'
}

r = requests.delete('https://api.quoter.com/v1/item_options/{id}', headers = headers)

print(r.json())

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Accept": []string{"application/json"},
        "Authorization": []string{"Bearer: access_token"},
    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("DELETE", "https://api.quoter.com/v1/item_options/{id}", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}

# You can also use wget
curl -X DELETE https://api.quoter.com/v1/item_options/{id} \
  -H 'Accept: application/json' \
  -H 'Authorization: Bearer: access_token'

DELETE /item_options/{id}

Removes a specific item option.

Parameters

Name In Type Required Description
Authorization header string true Bearer: access_token
id path string true Item Option ID

Example responses

401 Response

{
  "errors": [
    {
      "detail": "Pagination page requested too high.",
      "status": 400,
      "title": "Bad Request"
    }
  ]
}

Responses

Status Meaning Description Schema
204 No Content Record deleted. None
401 Unauthorized Authorization invalid. ErrorResponse
404 Not Found Record not found. ErrorResponse
422 Unprocessable Entity Validation error in request. ErrorResponse

Fetch Item Option

Code samples


const headers = {
  'Accept':'application/json',
  'Authorization':'Bearer: access_token'
};

fetch('https://api.quoter.com/v1/item_options/{id}',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json',
  'Authorization' => 'Bearer: access_token'
}

result = RestClient.get 'https://api.quoter.com/v1/item_options/{id}',
  params: {
  }, headers: headers

p JSON.parse(result)

import requests
headers = {
  'Accept': 'application/json',
  'Authorization': 'Bearer: access_token'
}

r = requests.get('https://api.quoter.com/v1/item_options/{id}', headers = headers)

print(r.json())

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Accept": []string{"application/json"},
        "Authorization": []string{"Bearer: access_token"},
    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("GET", "https://api.quoter.com/v1/item_options/{id}", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}

# You can also use wget
curl -X GET https://api.quoter.com/v1/item_options/{id} \
  -H 'Accept: application/json' \
  -H 'Authorization: Bearer: access_token'

GET /item_options/{id}

Retrieves detailed information about an item option.

Parameters

Name In Type Required Description
Authorization header string true Bearer: access_token
id path string true Item Option ID
fields query string false One or more response fields, separated by commas.

Enumerated Values

Parameter Value
fields allow_multiple_values
fields created_at
fields description
fields extended_description
fields id
fields item_id
fields modified_at
fields name
fields required
fields sort_order

Example responses

200 Response

{
  "allow_multiple_values": false,
  "created_at": "2019-08-24T14:15:22Z",
  "description": "<p>Standard description</p>",
  "extended_description": "<p>Longer description.</p>",
  "id": "iopt_1jAEZdbtkbLFBAU1Tt0ouKpiBUe",
  "item_id": "item_1jAEZdbtkbLFBAU1Tt0ouKpiBUe",
  "modified_at": "2019-08-24T14:15:22Z",
  "name": "Disk Size",
  "required": false,
  "sort_order": 0
}

Responses

Status Meaning Description Schema
200 OK Item Option found. ItemOption
401 Unauthorized Authorization invalid. ErrorResponse
404 Not Found Record not found. ErrorResponse
422 Unprocessable Entity Validation error in request. ErrorResponse

Update Item Option

Code samples

const inputBody = '{
  "allow_multiple_values": true,
  "description": "<p>Standard description</p>",
  "extended_description": "<p>Longer description.</p>",
  "name": "Disk Size",
  "required": true,
  "sort_order": 1
}';
const headers = {
  'Content-Type':'application/json',
  'Accept':'application/json',
  'Authorization':'Bearer: access_token'
};

fetch('https://api.quoter.com/v1/item_options/{id}',
{
  method: 'PATCH',
  body: inputBody,
  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

require 'rest-client'
require 'json'

headers = {
  'Content-Type' => 'application/json',
  'Accept' => 'application/json',
  'Authorization' => 'Bearer: access_token'
}

result = RestClient.patch 'https://api.quoter.com/v1/item_options/{id}',
  params: {
  }, headers: headers

p JSON.parse(result)

import requests
headers = {
  'Content-Type': 'application/json',
  'Accept': 'application/json',
  'Authorization': 'Bearer: access_token'
}

r = requests.patch('https://api.quoter.com/v1/item_options/{id}', headers = headers)

print(r.json())

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Content-Type": []string{"application/json"},
        "Accept": []string{"application/json"},
        "Authorization": []string{"Bearer: access_token"},
    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("PATCH", "https://api.quoter.com/v1/item_options/{id}", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}

# You can also use wget
curl -X PATCH https://api.quoter.com/v1/item_options/{id} \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  -H 'Authorization: Bearer: access_token'

PATCH /item_options/{id}

Updates an item option’s name or configuration.

Body parameter

{
  "allow_multiple_values": true,
  "description": "<p>Standard description</p>",
  "extended_description": "<p>Longer description.</p>",
  "name": "Disk Size",
  "required": true,
  "sort_order": 1
}

Parameters

Name In Type Required Description
Authorization header string true Bearer: access_token
id path string true Item Option ID
fields query string false One or more response fields, separated by commas.
body body ItemOptionUpdateRequest true Request body to update an Item Option.

Enumerated Values

Parameter Value
fields allow_multiple_values
fields created_at
fields description
fields extended_description
fields id
fields item_id
fields modified_at
fields name
fields required
fields sort_order

Example responses

200 Response

{
  "allow_multiple_values": false,
  "created_at": "2019-08-24T14:15:22Z",
  "description": "<p>Standard description</p>",
  "extended_description": "<p>Longer description.</p>",
  "id": "iopt_1jAEZdbtkbLFBAU1Tt0ouKpiBUe",
  "item_id": "item_1jAEZdbtkbLFBAU1Tt0ouKpiBUe",
  "modified_at": "2019-08-24T14:15:22Z",
  "name": "Disk Size",
  "required": false,
  "sort_order": 0
}

Responses

Status Meaning Description Schema
200 OK Item Option found. ItemOption
401 Unauthorized Authorization invalid. ErrorResponse
404 Not Found Record not found. ErrorResponse
422 Unprocessable Entity Validation error in request. ErrorResponse

Item Tiers

List Item Tiers

Code samples


const headers = {
  'Accept':'application/json',
  'Authorization':'Bearer: access_token'
};

fetch('https://api.quoter.com/v1/item_tiers',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json',
  'Authorization' => 'Bearer: access_token'
}

result = RestClient.get 'https://api.quoter.com/v1/item_tiers',
  params: {
  }, headers: headers

p JSON.parse(result)

import requests
headers = {
  'Accept': 'application/json',
  'Authorization': 'Bearer: access_token'
}

r = requests.get('https://api.quoter.com/v1/item_tiers', headers = headers)

print(r.json())

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Accept": []string{"application/json"},
        "Authorization": []string{"Bearer: access_token"},
    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("GET", "https://api.quoter.com/v1/item_tiers", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}

# You can also use wget
curl -X GET https://api.quoter.com/v1/item_tiers \
  -H 'Accept: application/json' \
  -H 'Authorization: Bearer: access_token'

GET /item_tiers

Lists all pricing or configuration tiers available for items.

Parameters

Name In Type Required Description
Authorization header string true Bearer: access_token
filter[item_id] query string false Filter records by those associated with item_id.
fields query string false One or more response fields, separated by commas.
sort_by query string false One or more sort fields, separated by commas.
filter[created_at] query string false Filter by created_at.
filter[modified_at] query string false Filter by modified_at.
limit query integer false Limit the number of records to return. Limit ranges from 1 to 100, and defaults to 100.
page query integer false Pagination record offset. Page starts at 1.

Detailed descriptions

filter[item_id]: Filter records by those associated with item_id.

Operators: eq

Examples - filter[item_id]=eq:item_123

filter[created_at]: Filter by created_at.

Operators: gt, lt

Examples - filter[created_at]=gt:2023-01-01T00:00:00Z - filter[created_at]=lt:2025-01-01T00:00:00Z

filter[modified_at]: Filter by modified_at.

Operators: gt, lt

Examples - filter[modified_at]=gt:2023-01-01T00:00:00Z - filter[modified_at]=lt:2025-01-01T00:00:00Z

Enumerated Values

Parameter Value
fields cost_decimal
fields cost_type
fields created_at
fields id
fields item_id
fields lower_boundary
fields modified_at
fields price_decimal
sort_by -created_at
sort_by -lower_boundary
sort_by -modified_at
sort_by -id
sort_by +created_at
sort_by +lower_boundary
sort_by +modified_at
sort_by +id

Example responses

200 Response

{
  "data": [
    {
      "cost_decimal": "50.50",
      "cost_type": "amount",
      "created_at": "2019-08-24T14:15:22Z",
      "id": "tier_1jAEZdbtkbLFBAU1Tt0ouKpiBUe",
      "item_id": "item_OcThl0eqYyTVQzll6qFrMDMBYyu",
      "lower_boundary": 0,
      "modified_at": "2019-08-24T14:15:22Z",
      "price_decimal": "50.50"
    }
  ],
  "has_more": false,
  "total_count": 1
}

Responses

Status Meaning Description Schema
200 OK Item Tiers found. ItemTierList
401 Unauthorized Authorization invalid. ErrorResponse
404 Not Found Record not found. ErrorResponse
422 Unprocessable Entity Validation error in request. ErrorResponse

Create Item Tier

Code samples

const inputBody = '{
  "cost_decimal": "50.50",
  "cost_type": "amount",
  "created_at": "2019-08-24T14:15:22Z",
  "item_id": "item_OcThl0eqYyTVQzll6qFrMDMBYyu",
  "lower_boundary": 0,
  "modified_at": "2019-08-24T14:15:22Z",
  "price_decimal": "50.50"
}';
const headers = {
  'Content-Type':'application/json',
  'Accept':'application/json',
  'Authorization':'Bearer: access_token'
};

fetch('https://api.quoter.com/v1/item_tiers',
{
  method: 'POST',
  body: inputBody,
  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

require 'rest-client'
require 'json'

headers = {
  'Content-Type' => 'application/json',
  'Accept' => 'application/json',
  'Authorization' => 'Bearer: access_token'
}

result = RestClient.post 'https://api.quoter.com/v1/item_tiers',
  params: {
  }, headers: headers

p JSON.parse(result)

import requests
headers = {
  'Content-Type': 'application/json',
  'Accept': 'application/json',
  'Authorization': 'Bearer: access_token'
}

r = requests.post('https://api.quoter.com/v1/item_tiers', headers = headers)

print(r.json())

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Content-Type": []string{"application/json"},
        "Accept": []string{"application/json"},
        "Authorization": []string{"Bearer: access_token"},
    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("POST", "https://api.quoter.com/v1/item_tiers", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}

# You can also use wget
curl -X POST https://api.quoter.com/v1/item_tiers \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  -H 'Authorization: Bearer: access_token'

POST /item_tiers

Adds a new pricing/configuration tier for items.

Body parameter

{
  "cost_decimal": "50.50",
  "cost_type": "amount",
  "created_at": "2019-08-24T14:15:22Z",
  "item_id": "item_OcThl0eqYyTVQzll6qFrMDMBYyu",
  "lower_boundary": 0,
  "modified_at": "2019-08-24T14:15:22Z",
  "price_decimal": "50.50"
}

Parameters

Name In Type Required Description
Authorization header string true Bearer: access_token
fields query string false One or more response fields, separated by commas.
body body ItemTierCreateRequest true Request body to create an Item Tier.

Enumerated Values

Parameter Value
fields cost_decimal
fields cost_type
fields created_at
fields id
fields item_id
fields lower_boundary
fields modified_at
fields price_decimal

Example responses

200 Response

{
  "cost_decimal": "50.50",
  "cost_type": "amount",
  "created_at": "2019-08-24T14:15:22Z",
  "id": "tier_1jAEZdbtkbLFBAU1Tt0ouKpiBUe",
  "item_id": "item_OcThl0eqYyTVQzll6qFrMDMBYyu",
  "lower_boundary": 0,
  "modified_at": "2019-08-24T14:15:22Z",
  "price_decimal": "50.50"
}

Responses

Status Meaning Description Schema
200 OK Item Tier created. ItemTier
401 Unauthorized Authorization invalid. ErrorResponse
404 Not Found Record not found. ErrorResponse
422 Unprocessable Entity Validation error in request. ErrorResponse

Delete Item Tier

Code samples


const headers = {
  'Accept':'application/json',
  'Authorization':'Bearer: access_token'
};

fetch('https://api.quoter.com/v1/item_tiers/{id}',
{
  method: 'DELETE',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json',
  'Authorization' => 'Bearer: access_token'
}

result = RestClient.delete 'https://api.quoter.com/v1/item_tiers/{id}',
  params: {
  }, headers: headers

p JSON.parse(result)

import requests
headers = {
  'Accept': 'application/json',
  'Authorization': 'Bearer: access_token'
}

r = requests.delete('https://api.quoter.com/v1/item_tiers/{id}', headers = headers)

print(r.json())

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Accept": []string{"application/json"},
        "Authorization": []string{"Bearer: access_token"},
    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("DELETE", "https://api.quoter.com/v1/item_tiers/{id}", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}

# You can also use wget
curl -X DELETE https://api.quoter.com/v1/item_tiers/{id} \
  -H 'Accept: application/json' \
  -H 'Authorization: Bearer: access_token'

DELETE /item_tiers/{id}

Removes a specific item tier.

Parameters

Name In Type Required Description
Authorization header string true Bearer: access_token
id path string true Item Tier ID

Example responses

401 Response

{
  "errors": [
    {
      "detail": "Pagination page requested too high.",
      "status": 400,
      "title": "Bad Request"
    }
  ]
}

Responses

Status Meaning Description Schema
204 No Content Record deleted. None
401 Unauthorized Authorization invalid. ErrorResponse
404 Not Found Record not found. ErrorResponse
422 Unprocessable Entity Validation error in request. ErrorResponse

Fetch Item Tier

Code samples


const headers = {
  'Accept':'application/json',
  'Authorization':'Bearer: access_token'
};

fetch('https://api.quoter.com/v1/item_tiers/{id}',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json',
  'Authorization' => 'Bearer: access_token'
}

result = RestClient.get 'https://api.quoter.com/v1/item_tiers/{id}',
  params: {
  }, headers: headers

p JSON.parse(result)

import requests
headers = {
  'Accept': 'application/json',
  'Authorization': 'Bearer: access_token'
}

r = requests.get('https://api.quoter.com/v1/item_tiers/{id}', headers = headers)

print(r.json())

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Accept": []string{"application/json"},
        "Authorization": []string{"Bearer: access_token"},
    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("GET", "https://api.quoter.com/v1/item_tiers/{id}", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}

# You can also use wget
curl -X GET https://api.quoter.com/v1/item_tiers/{id} \
  -H 'Accept: application/json' \
  -H 'Authorization: Bearer: access_token'

GET /item_tiers/{id}

Retrieves detailed information about a specific item tier.

Parameters

Name In Type Required Description
Authorization header string true Bearer: access_token
id path string true Item Tier ID
fields query string false One or more response fields, separated by commas.

Enumerated Values

Parameter Value
fields cost_decimal
fields cost_type
fields created_at
fields id
fields item_id
fields lower_boundary
fields modified_at
fields price_decimal

Example responses

200 Response

{
  "cost_decimal": "50.50",
  "cost_type": "amount",
  "created_at": "2019-08-24T14:15:22Z",
  "id": "tier_1jAEZdbtkbLFBAU1Tt0ouKpiBUe",
  "item_id": "item_OcThl0eqYyTVQzll6qFrMDMBYyu",
  "lower_boundary": 0,
  "modified_at": "2019-08-24T14:15:22Z",
  "price_decimal": "50.50"
}

Responses

Status Meaning Description Schema
200 OK Item Tier found. ItemTier
401 Unauthorized Authorization invalid. ErrorResponse
404 Not Found Record not found. ErrorResponse
422 Unprocessable Entity Validation error in request. ErrorResponse

Update Item Tier

Code samples

const inputBody = '{
  "cost_decimal": "50.50",
  "cost_type": "amount",
  "created_at": "2019-08-24T14:15:22Z",
  "item_id": "item_OcThl0eqYyTVQzll6qFrMDMBYyu",
  "lower_boundary": 1,
  "modified_at": "2019-08-24T14:15:22Z",
  "price_decimal": "50.50"
}';
const headers = {
  'Content-Type':'application/json',
  'Accept':'application/json',
  'Authorization':'Bearer: access_token'
};

fetch('https://api.quoter.com/v1/item_tiers/{id}',
{
  method: 'PATCH',
  body: inputBody,
  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

require 'rest-client'
require 'json'

headers = {
  'Content-Type' => 'application/json',
  'Accept' => 'application/json',
  'Authorization' => 'Bearer: access_token'
}

result = RestClient.patch 'https://api.quoter.com/v1/item_tiers/{id}',
  params: {
  }, headers: headers

p JSON.parse(result)

import requests
headers = {
  'Content-Type': 'application/json',
  'Accept': 'application/json',
  'Authorization': 'Bearer: access_token'
}

r = requests.patch('https://api.quoter.com/v1/item_tiers/{id}', headers = headers)

print(r.json())

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Content-Type": []string{"application/json"},
        "Accept": []string{"application/json"},
        "Authorization": []string{"Bearer: access_token"},
    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("PATCH", "https://api.quoter.com/v1/item_tiers/{id}", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}

# You can also use wget
curl -X PATCH https://api.quoter.com/v1/item_tiers/{id} \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  -H 'Authorization: Bearer: access_token'

PATCH /item_tiers/{id}

Modifies an existing item tier.

Body parameter

{
  "cost_decimal": "50.50",
  "cost_type": "amount",
  "created_at": "2019-08-24T14:15:22Z",
  "item_id": "item_OcThl0eqYyTVQzll6qFrMDMBYyu",
  "lower_boundary": 1,
  "modified_at": "2019-08-24T14:15:22Z",
  "price_decimal": "50.50"
}

Parameters

Name In Type Required Description
Authorization header string true Bearer: access_token
id path string true Item Tier ID
fields query string false One or more response fields, separated by commas.
body body ItemTierUpdateRequest true Request body to update an Item Tier.

Enumerated Values

Parameter Value
fields cost_decimal
fields cost_type
fields created_at
fields id
fields item_id
fields lower_boundary
fields modified_at
fields price_decimal

Example responses

200 Response

{
  "cost_decimal": "50.50",
  "cost_type": "amount",
  "created_at": "2019-08-24T14:15:22Z",
  "id": "tier_1jAEZdbtkbLFBAU1Tt0ouKpiBUe",
  "item_id": "item_OcThl0eqYyTVQzll6qFrMDMBYyu",
  "lower_boundary": 0,
  "modified_at": "2019-08-24T14:15:22Z",
  "price_decimal": "50.50"
}

Responses

Status Meaning Description Schema
200 OK Item Tier found. ItemTier
401 Unauthorized Authorization invalid. ErrorResponse
404 Not Found Record not found. ErrorResponse
422 Unprocessable Entity Validation error in request. ErrorResponse

Items

List Items

Code samples


const headers = {
  'Accept':'application/json',
  'Authorization':'Bearer: access_token'
};

fetch('https://api.quoter.com/v1/items',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json',
  'Authorization' => 'Bearer: access_token'
}

result = RestClient.get 'https://api.quoter.com/v1/items',
  params: {
  }, headers: headers

p JSON.parse(result)

import requests
headers = {
  'Accept': 'application/json',
  'Authorization': 'Bearer: access_token'
}

r = requests.get('https://api.quoter.com/v1/items', headers = headers)

print(r.json())

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Accept": []string{"application/json"},
        "Authorization": []string{"Bearer: access_token"},
    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("GET", "https://api.quoter.com/v1/items", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}

# You can also use wget
curl -X GET https://api.quoter.com/v1/items \
  -H 'Accept: application/json' \
  -H 'Authorization: Bearer: access_token'

GET /items

Retrieves a list of all items available in the system.

Parameters

Name In Type Required Description
Authorization header string true Bearer: access_token
fields query string false One or more response fields, separated by commas.
sort_by query string false One or more sort fields, separated by commas.
filter[category_id] query string false Filter records by those associated with category_id.
filter[code] query string false Filter by code.
filter[created_at] query string false Filter by created_at.
filter[manufacturer_id] query string false Filter records by those associated with manufacturer_id.
filter[modified_at] query string false Filter by modified_at.
filter[name] query string false Filter by name.
filter[sku] query string false Filter by sku.
filter[supplier_id] query string false Filter records by those associated with supplier_id.
limit query integer false Limit the number of records to return. Limit ranges from 1 to 100, and defaults to 100.
page query integer false Pagination record offset. Page starts at 1.

Detailed descriptions

filter[category_id]: Filter records by those associated with category_id.

Operators: eq

Examples - filter[category_id]=eq:cat_123

filter[code]: Filter by code.

Operators: eq

Examples - filter[code]=eq:ITEM001

filter[created_at]: Filter by created_at.

Operators: gt, lt

Examples - filter[created_at]=gt:2023-01-01T00:00:00Z - filter[created_at]=lt:2025-01-01T00:00:00Z

filter[manufacturer_id]: Filter records by those associated with manufacturer_id.

Operators: eq

Examples - filter[manufacturer_id]=eq:mfg_123

filter[modified_at]: Filter by modified_at.

Operators: gt, lt

Examples - filter[modified_at]=gt:2023-01-01T00:00:00Z - filter[modified_at]=lt:2025-01-01T00:00:00Z

filter[name]: Filter by name.

Operators: eq, cont

Examples - filter[name]=eq:abba - filter[name]=cont:ab

filter[sku]: Filter by sku.

Operators: eq

Examples - filter[sku]=eq:WDG-PRO-001

filter[supplier_id]: Filter records by those associated with supplier_id.

Operators: eq

Examples - filter[supplier_id]=eq:sup_123

Enumerated Values

Parameter Value
fields allow_decimal_quantities
fields category
fields category_id
fields code
fields cost_decimal
fields cost_type
fields created_at
fields description
fields id
fields internal_note
fields manufacturer
fields manufacturer_id
fields modified_at
fields name
fields percentage_price_category_ids
fields percentage_price_decimal
fields price_decimal
fields pricing_scheme
fields quantity_help_tip
fields recurring
fields recurring_interval
fields restrict_discounting
fields show_option_prices
fields sku
fields supplier
fields supplier_id
fields taxable
fields weight_decimal
sort_by -created_at
sort_by -id
sort_by -modified_at
sort_by -name
sort_by +created_at
sort_by +id
sort_by +modified_at
sort_by +name

Example responses

200 Response

{
  "data": [
    {
      "allow_decimal_quantities": true,
      "category": "SSDs",
      "category_id": "cat_OcThl8SOeE8w6JYUznfrnQGdp94",
      "code": "MZ-V7S1T0B/AM",
      "cost_decimal": 50.5,
      "cost_type": "amount",
      "created_at": "2019-08-24T14:15:22Z",
      "description": "The 970 EVO Plus reaches sequential read/write speeds up to 3,500/3,300 MB/s, up to 53% faster than the 970 EVO.",
      "id": "item_OcThl0eqYyTVQzll6qFrMDMBYyu",
      "internal_note": "Check warehouse for inventory before ordering.",
      "manufacturer": "Samsung",
      "manufacturer_id": "manu_OcThlEWcbhAG52u3vLJodwnV88k",
      "modified_at": "2019-08-24T14:15:22Z",
      "name": "SAMSUNG 970 EVO PLUS M.2 2280 1TB PCIe Gen 3.0 x4",
      "percentage_price_category_ids": [
        "cat_OcThlTV6Tama8RH5Zh4Jfw1fhJC"
      ],
      "percentage_price_decimal": 50.5,
      "price_decimal": 50.5,
      "pricing_scheme": "per_unit",
      "quantity_help_tip": "Enter the number of units required.",
      "recurring": true,
      "recurring_interval": "annually",
      "restrict_discounting": true,
      "show_option_prices": true,
      "sku": "N82E16820147743",
      "supplier": "Newegg",
      "supplier_id": "sup_OcThlLwzLAM7m5eK1WEKkXUQZtm",
      "taxable": true,
      "weight_decimal": 50.5
    }
  ],
  "has_more": false,
  "total_count": 1
}

Responses

Status Meaning Description Schema
200 OK Items found. ItemList
401 Unauthorized Authorization invalid. ErrorResponse
404 Not Found Record not found. ErrorResponse
422 Unprocessable Entity Validation error in request. ErrorResponse

Create Item

Code samples

const inputBody = '{
  "allow_decimal_quantities": true,
  "category": "SSDs",
  "category_id": "cat_OcThl8SOeE8w6JYUznfrnQGdp94",
  "code": "MZ-V7S1T0B/AM",
  "cost_decimal": 50.5,
  "cost_type": "amount",
  "description": "The 970 EVO Plus reaches sequential read/write speeds up to 3,500/3,300 MB/s, up to 53% faster than the 970 EVO.",
  "internal_note": "Check warehouse for inventory before ordering.",
  "manufacturer": "Samsung",
  "manufacturer_id": "manu_OcThlEWcbhAG52u3vLJodwnV88k",
  "name": "SAMSUNG 970 EVO PLUS M.2 2280 1TB PCIe Gen 3.0 x4",
  "percentage_price_category_ids": [
    "cat_OcThlTV6Tama8RH5Zh4Jfw1fhJC"
  ],
  "percentage_price_decimal": 50.5,
  "price_decimal": 50.5,
  "pricing_scheme": "per_unit",
  "quantity_help_tip": "Enter the number of units required.",
  "recurring": true,
  "recurring_interval": "annually",
  "restrict_discounting": true,
  "show_option_prices": true,
  "sku": "N82E16820147743",
  "supplier": "Newegg",
  "supplier_id": "sup_OcThlLwzLAM7m5eK1WEKkXUQZtm",
  "taxable": true,
  "weight_decimal": 50.5
}';
const headers = {
  'Content-Type':'application/json',
  'Accept':'application/json',
  'Authorization':'Bearer: access_token'
};

fetch('https://api.quoter.com/v1/items',
{
  method: 'POST',
  body: inputBody,
  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

require 'rest-client'
require 'json'

headers = {
  'Content-Type' => 'application/json',
  'Accept' => 'application/json',
  'Authorization' => 'Bearer: access_token'
}

result = RestClient.post 'https://api.quoter.com/v1/items',
  params: {
  }, headers: headers

p JSON.parse(result)

import requests
headers = {
  'Content-Type': 'application/json',
  'Accept': 'application/json',
  'Authorization': 'Bearer: access_token'
}

r = requests.post('https://api.quoter.com/v1/items', headers = headers)

print(r.json())

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Content-Type": []string{"application/json"},
        "Accept": []string{"application/json"},
        "Authorization": []string{"Bearer: access_token"},
    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("POST", "https://api.quoter.com/v1/items", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}

# You can also use wget
curl -X POST https://api.quoter.com/v1/items \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  -H 'Authorization: Bearer: access_token'

POST /items

Adds a new item to your product catalog.

Body parameter

{
  "allow_decimal_quantities": true,
  "category": "SSDs",
  "category_id": "cat_OcThl8SOeE8w6JYUznfrnQGdp94",
  "code": "MZ-V7S1T0B/AM",
  "cost_decimal": 50.5,
  "cost_type": "amount",
  "description": "The 970 EVO Plus reaches sequential read/write speeds up to 3,500/3,300 MB/s, up to 53% faster than the 970 EVO.",
  "internal_note": "Check warehouse for inventory before ordering.",
  "manufacturer": "Samsung",
  "manufacturer_id": "manu_OcThlEWcbhAG52u3vLJodwnV88k",
  "name": "SAMSUNG 970 EVO PLUS M.2 2280 1TB PCIe Gen 3.0 x4",
  "percentage_price_category_ids": [
    "cat_OcThlTV6Tama8RH5Zh4Jfw1fhJC"
  ],
  "percentage_price_decimal": 50.5,
  "price_decimal": 50.5,
  "pricing_scheme": "per_unit",
  "quantity_help_tip": "Enter the number of units required.",
  "recurring": true,
  "recurring_interval": "annually",
  "restrict_discounting": true,
  "show_option_prices": true,
  "sku": "N82E16820147743",
  "supplier": "Newegg",
  "supplier_id": "sup_OcThlLwzLAM7m5eK1WEKkXUQZtm",
  "taxable": true,
  "weight_decimal": 50.5
}

Parameters

Name In Type Required Description
Authorization header string true Bearer: access_token
fields query string false One or more response fields, separated by commas.
body body ItemCreateRequest true Request body to create an Item.

Enumerated Values

Parameter Value
fields allow_decimal_quantities
fields category
fields category_id
fields code
fields cost_decimal
fields cost_type
fields created_at
fields description
fields id
fields internal_note
fields manufacturer
fields manufacturer_id
fields modified_at
fields name
fields percentage_price_category_ids
fields percentage_price_decimal
fields price_decimal
fields pricing_scheme
fields quantity_help_tip
fields recurring
fields recurring_interval
fields restrict_discounting
fields show_option_prices
fields sku
fields supplier
fields supplier_id
fields taxable
fields weight_decimal

Example responses

200 Response

{
  "allow_decimal_quantities": true,
  "category": "SSDs",
  "category_id": "cat_OcThl8SOeE8w6JYUznfrnQGdp94",
  "code": "MZ-V7S1T0B/AM",
  "cost_decimal": 50.5,
  "cost_type": "amount",
  "created_at": "2019-08-24T14:15:22Z",
  "description": "The 970 EVO Plus reaches sequential read/write speeds up to 3,500/3,300 MB/s, up to 53% faster than the 970 EVO.",
  "id": "item_OcThl0eqYyTVQzll6qFrMDMBYyu",
  "internal_note": "Check warehouse for inventory before ordering.",
  "manufacturer": "Samsung",
  "manufacturer_id": "manu_OcThlEWcbhAG52u3vLJodwnV88k",
  "modified_at": "2019-08-24T14:15:22Z",
  "name": "SAMSUNG 970 EVO PLUS M.2 2280 1TB PCIe Gen 3.0 x4",
  "percentage_price_category_ids": [
    "cat_OcThlTV6Tama8RH5Zh4Jfw1fhJC"
  ],
  "percentage_price_decimal": 50.5,
  "price_decimal": 50.5,
  "pricing_scheme": "per_unit",
  "quantity_help_tip": "Enter the number of units required.",
  "recurring": true,
  "recurring_interval": "annually",
  "restrict_discounting": true,
  "show_option_prices": true,
  "sku": "N82E16820147743",
  "supplier": "Newegg",
  "supplier_id": "sup_OcThlLwzLAM7m5eK1WEKkXUQZtm",
  "taxable": true,
  "weight_decimal": 50.5
}

Responses

Status Meaning Description Schema
200 OK Item created. Item
401 Unauthorized Authorization invalid. ErrorResponse
404 Not Found Record not found. ErrorResponse
422 Unprocessable Entity Validation error in request. ErrorResponse

Delete Item

Code samples


const headers = {
  'Accept':'application/json',
  'Authorization':'Bearer: access_token'
};

fetch('https://api.quoter.com/v1/items/{id}',
{
  method: 'DELETE',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json',
  'Authorization' => 'Bearer: access_token'
}

result = RestClient.delete 'https://api.quoter.com/v1/items/{id}',
  params: {
  }, headers: headers

p JSON.parse(result)

import requests
headers = {
  'Accept': 'application/json',
  'Authorization': 'Bearer: access_token'
}

r = requests.delete('https://api.quoter.com/v1/items/{id}', headers = headers)

print(r.json())

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Accept": []string{"application/json"},
        "Authorization": []string{"Bearer: access_token"},
    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("DELETE", "https://api.quoter.com/v1/items/{id}", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}

# You can also use wget
curl -X DELETE https://api.quoter.com/v1/items/{id} \
  -H 'Accept: application/json' \
  -H 'Authorization: Bearer: access_token'

DELETE /items/{id}

Removes an item from your product catalog.

Parameters

Name In Type Required Description
Authorization header string true Bearer: access_token
id path string true Item ID

Example responses

401 Response

{
  "errors": [
    {
      "detail": "Pagination page requested too high.",
      "status": 400,
      "title": "Bad Request"
    }
  ]
}

Responses

Status Meaning Description Schema
204 No Content Record deleted. None
401 Unauthorized Authorization invalid. ErrorResponse
404 Not Found Record not found. ErrorResponse
422 Unprocessable Entity Validation error in request. ErrorResponse

Fetch Item

Code samples


const headers = {
  'Accept':'application/json',
  'Authorization':'Bearer: access_token'
};

fetch('https://api.quoter.com/v1/items/{id}',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json',
  'Authorization' => 'Bearer: access_token'
}

result = RestClient.get 'https://api.quoter.com/v1/items/{id}',
  params: {
  }, headers: headers

p JSON.parse(result)

import requests
headers = {
  'Accept': 'application/json',
  'Authorization': 'Bearer: access_token'
}

r = requests.get('https://api.quoter.com/v1/items/{id}', headers = headers)

print(r.json())

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Accept": []string{"application/json"},
        "Authorization": []string{"Bearer: access_token"},
    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("GET", "https://api.quoter.com/v1/items/{id}", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}

# You can also use wget
curl -X GET https://api.quoter.com/v1/items/{id} \
  -H 'Accept: application/json' \
  -H 'Authorization: Bearer: access_token'

GET /items/{id}

Retrieves detailed information about a specific item.

Parameters

Name In Type Required Description
Authorization header string true Bearer: access_token
id path string true Item ID
fields query string false One or more response fields, separated by commas.

Enumerated Values

Parameter Value
fields allow_decimal_quantities
fields category
fields category_id
fields code
fields cost_decimal
fields cost_type
fields created_at
fields description
fields id
fields internal_note
fields manufacturer
fields manufacturer_id
fields modified_at
fields name
fields percentage_price_category_ids
fields percentage_price_decimal
fields price_decimal
fields pricing_scheme
fields quantity_help_tip
fields recurring
fields recurring_interval
fields restrict_discounting
fields show_option_prices
fields sku
fields supplier
fields supplier_id
fields taxable
fields weight_decimal

Example responses

200 Response

{
  "allow_decimal_quantities": true,
  "category": "SSDs",
  "category_id": "cat_OcThl8SOeE8w6JYUznfrnQGdp94",
  "code": "MZ-V7S1T0B/AM",
  "cost_decimal": 50.5,
  "cost_type": "amount",
  "created_at": "2019-08-24T14:15:22Z",
  "description": "The 970 EVO Plus reaches sequential read/write speeds up to 3,500/3,300 MB/s, up to 53% faster than the 970 EVO.",
  "id": "item_OcThl0eqYyTVQzll6qFrMDMBYyu",
  "internal_note": "Check warehouse for inventory before ordering.",
  "manufacturer": "Samsung",
  "manufacturer_id": "manu_OcThlEWcbhAG52u3vLJodwnV88k",
  "modified_at": "2019-08-24T14:15:22Z",
  "name": "SAMSUNG 970 EVO PLUS M.2 2280 1TB PCIe Gen 3.0 x4",
  "percentage_price_category_ids": [
    "cat_OcThlTV6Tama8RH5Zh4Jfw1fhJC"
  ],
  "percentage_price_decimal": 50.5,
  "price_decimal": 50.5,
  "pricing_scheme": "per_unit",
  "quantity_help_tip": "Enter the number of units required.",
  "recurring": true,
  "recurring_interval": "annually",
  "restrict_discounting": true,
  "show_option_prices": true,
  "sku": "N82E16820147743",
  "supplier": "Newegg",
  "supplier_id": "sup_OcThlLwzLAM7m5eK1WEKkXUQZtm",
  "taxable": true,
  "weight_decimal": 50.5
}

Responses

Status Meaning Description Schema
200 OK Item found. Item
401 Unauthorized Authorization invalid. ErrorResponse
404 Not Found Record not found. ErrorResponse
422 Unprocessable Entity Validation error in request. ErrorResponse

Update Item

Code samples

const inputBody = '{
  "allow_decimal_quantities": true,
  "category": "SSDs",
  "category_id": "cat_OcThl8SOeE8w6JYUznfrnQGdp94",
  "code": "MZ-V7S1T0B/AM",
  "cost_decimal": 50.5,
  "cost_type": "amount",
  "description": "The 970 EVO Plus reaches sequential read/write speeds up to 3,500/3,300 MB/s, up to 53% faster than the 970 EVO.",
  "internal_note": "Check warehouse for inventory before ordering.",
  "manufacturer": "Samsung",
  "manufacturer_id": "manu_OcThlEWcbhAG52u3vLJodwnV88k",
  "name": "SAMSUNG 970 EVO PLUS M.2 2280 1TB PCIe Gen 3.0 x4",
  "percentage_price_category_ids": [
    "cat_OcThlTV6Tama8RH5Zh4Jfw1fhJC"
  ],
  "percentage_price_decimal": 50.5,
  "price_decimal": 50.5,
  "pricing_scheme": "per_unit",
  "quantity_help_tip": "Enter the number of units required.",
  "recurring": true,
  "recurring_interval": "annually",
  "restrict_discounting": true,
  "show_option_prices": true,
  "sku": "N82E16820147743",
  "supplier": "Newegg",
  "supplier_id": "sup_OcThlLwzLAM7m5eK1WEKkXUQZtm",
  "taxable": true,
  "weight_decimal": 50.5
}';
const headers = {
  'Content-Type':'application/json',
  'Accept':'application/json',
  'Authorization':'Bearer: access_token'
};

fetch('https://api.quoter.com/v1/items/{id}',
{
  method: 'PATCH',
  body: inputBody,
  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

require 'rest-client'
require 'json'

headers = {
  'Content-Type' => 'application/json',
  'Accept' => 'application/json',
  'Authorization' => 'Bearer: access_token'
}

result = RestClient.patch 'https://api.quoter.com/v1/items/{id}',
  params: {
  }, headers: headers

p JSON.parse(result)

import requests
headers = {
  'Content-Type': 'application/json',
  'Accept': 'application/json',
  'Authorization': 'Bearer: access_token'
}

r = requests.patch('https://api.quoter.com/v1/items/{id}', headers = headers)

print(r.json())

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Content-Type": []string{"application/json"},
        "Accept": []string{"application/json"},
        "Authorization": []string{"Bearer: access_token"},
    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("PATCH", "https://api.quoter.com/v1/items/{id}", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}

# You can also use wget
curl -X PATCH https://api.quoter.com/v1/items/{id} \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  -H 'Authorization: Bearer: access_token'

PATCH /items/{id}

Modifies the properties or configuration of an existing item.

Body parameter

{
  "allow_decimal_quantities": true,
  "category": "SSDs",
  "category_id": "cat_OcThl8SOeE8w6JYUznfrnQGdp94",
  "code": "MZ-V7S1T0B/AM",
  "cost_decimal": 50.5,
  "cost_type": "amount",
  "description": "The 970 EVO Plus reaches sequential read/write speeds up to 3,500/3,300 MB/s, up to 53% faster than the 970 EVO.",
  "internal_note": "Check warehouse for inventory before ordering.",
  "manufacturer": "Samsung",
  "manufacturer_id": "manu_OcThlEWcbhAG52u3vLJodwnV88k",
  "name": "SAMSUNG 970 EVO PLUS M.2 2280 1TB PCIe Gen 3.0 x4",
  "percentage_price_category_ids": [
    "cat_OcThlTV6Tama8RH5Zh4Jfw1fhJC"
  ],
  "percentage_price_decimal": 50.5,
  "price_decimal": 50.5,
  "pricing_scheme": "per_unit",
  "quantity_help_tip": "Enter the number of units required.",
  "recurring": true,
  "recurring_interval": "annually",
  "restrict_discounting": true,
  "show_option_prices": true,
  "sku": "N82E16820147743",
  "supplier": "Newegg",
  "supplier_id": "sup_OcThlLwzLAM7m5eK1WEKkXUQZtm",
  "taxable": true,
  "weight_decimal": 50.5
}

Parameters

Name In Type Required Description
Authorization header string true Bearer: access_token
id path string true Item ID
fields query string false One or more response fields, separated by commas.
body body ItemUpdateRequest true Request body to update an Item.

Enumerated Values

Parameter Value
fields allow_decimal_quantities
fields category
fields category_id
fields code
fields cost_decimal
fields cost_type
fields created_at
fields description
fields id
fields internal_note
fields manufacturer
fields manufacturer_id
fields modified_at
fields name
fields percentage_price_category_ids
fields percentage_price_decimal
fields price_decimal
fields pricing_scheme
fields quantity_help_tip
fields recurring
fields recurring_interval
fields restrict_discounting
fields show_option_prices
fields sku
fields supplier
fields supplier_id
fields taxable
fields weight_decimal

Example responses

200 Response

{
  "allow_decimal_quantities": true,
  "category": "SSDs",
  "category_id": "cat_OcThl8SOeE8w6JYUznfrnQGdp94",
  "code": "MZ-V7S1T0B/AM",
  "cost_decimal": 50.5,
  "cost_type": "amount",
  "created_at": "2019-08-24T14:15:22Z",
  "description": "The 970 EVO Plus reaches sequential read/write speeds up to 3,500/3,300 MB/s, up to 53% faster than the 970 EVO.",
  "id": "item_OcThl0eqYyTVQzll6qFrMDMBYyu",
  "internal_note": "Check warehouse for inventory before ordering.",
  "manufacturer": "Samsung",
  "manufacturer_id": "manu_OcThlEWcbhAG52u3vLJodwnV88k",
  "modified_at": "2019-08-24T14:15:22Z",
  "name": "SAMSUNG 970 EVO PLUS M.2 2280 1TB PCIe Gen 3.0 x4",
  "percentage_price_category_ids": [
    "cat_OcThlTV6Tama8RH5Zh4Jfw1fhJC"
  ],
  "percentage_price_decimal": 50.5,
  "price_decimal": 50.5,
  "pricing_scheme": "per_unit",
  "quantity_help_tip": "Enter the number of units required.",
  "recurring": true,
  "recurring_interval": "annually",
  "restrict_discounting": true,
  "show_option_prices": true,
  "sku": "N82E16820147743",
  "supplier": "Newegg",
  "supplier_id": "sup_OcThlLwzLAM7m5eK1WEKkXUQZtm",
  "taxable": true,
  "weight_decimal": 50.5
}

Responses

Status Meaning Description Schema
200 OK Item updated. Item
401 Unauthorized Authorization invalid. ErrorResponse
404 Not Found Record not found. ErrorResponse
422 Unprocessable Entity Validation error in request. ErrorResponse

Line Items

Create Line Item

Code samples

const inputBody = '{
  "category": "Desktop",
  "description": "Sample Description",
  "manufacturer": "Acme Corp",
  "name": "Sample Item",
  "part_number": "string",
  "quantity": 10,
  "quote_id": "quot_2r5WHEQLKFsyKdyIj5daPCp7mjF",
  "recurring": true,
  "supplier": "Acme supplier",
  "supplier_sku": "string",
  "taxable": true,
  "unit_cost": 0,
  "unit_price": 0
}';
const headers = {
  'Content-Type':'application/json',
  'Accept':'application/json',
  'Authorization':'Bearer: access_token'
};

fetch('https://api.quoter.com/v1/line_items',
{
  method: 'POST',
  body: inputBody,
  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

require 'rest-client'
require 'json'

headers = {
  'Content-Type' => 'application/json',
  'Accept' => 'application/json',
  'Authorization' => 'Bearer: access_token'
}

result = RestClient.post 'https://api.quoter.com/v1/line_items',
  params: {
  }, headers: headers

p JSON.parse(result)

import requests
headers = {
  'Content-Type': 'application/json',
  'Accept': 'application/json',
  'Authorization': 'Bearer: access_token'
}

r = requests.post('https://api.quoter.com/v1/line_items', headers = headers)

print(r.json())

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Content-Type": []string{"application/json"},
        "Accept": []string{"application/json"},
        "Authorization": []string{"Bearer: access_token"},
    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("POST", "https://api.quoter.com/v1/line_items", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}

# You can also use wget
curl -X POST https://api.quoter.com/v1/line_items \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  -H 'Authorization: Bearer: access_token'

POST /line_items

Adds an itemized entry (line item) typically to a quote or transaction.

Body parameter

{
  "category": "Desktop",
  "description": "Sample Description",
  "manufacturer": "Acme Corp",
  "name": "Sample Item",
  "part_number": "string",
  "quantity": 10,
  "quote_id": "quot_2r5WHEQLKFsyKdyIj5daPCp7mjF",
  "recurring": true,
  "supplier": "Acme supplier",
  "supplier_sku": "string",
  "taxable": true,
  "unit_cost": 0,
  "unit_price": 0
}

Parameters

Name In Type Required Description
Authorization header string true Bearer: access_token
body body LineItemCreateRequest true Request body to create a Line Item.

Example responses

200 Response

{
  "category": "Desktop",
  "created_at": "2019-08-24T14:15:22Z",
  "description": "Item Description",
  "id": "litm_2r5WHJ1RvX8aCEyhQA6VhWpLuAb",
  "manufacturer": "Acme Corp",
  "modified_at": "2019-08-24T14:15:22Z",
  "name": "My Item",
  "part_number": "string",
  "quantity": 0,
  "recurring": true,
  "supplier": "Acme Supplier",
  "supplier_sku": "string",
  "taxable": true,
  "unit_cost": 0,
  "unit_price": 0
}

Responses

Status Meaning Description Schema
200 OK Line Item created. LineItem
401 Unauthorized Authorization invalid. ErrorResponse
404 Not Found Record not found. ErrorResponse
422 Unprocessable Entity Validation error in request. ErrorResponse

Manufacturers

List Manufacturers

Code samples


const headers = {
  'Accept':'application/json',
  'Authorization':'Bearer: access_token'
};

fetch('https://api.quoter.com/v1/manufacturers',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json',
  'Authorization' => 'Bearer: access_token'
}

result = RestClient.get 'https://api.quoter.com/v1/manufacturers',
  params: {
  }, headers: headers

p JSON.parse(result)

import requests
headers = {
  'Accept': 'application/json',
  'Authorization': 'Bearer: access_token'
}

r = requests.get('https://api.quoter.com/v1/manufacturers', headers = headers)

print(r.json())

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Accept": []string{"application/json"},
        "Authorization": []string{"Bearer: access_token"},
    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("GET", "https://api.quoter.com/v1/manufacturers", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}

# You can also use wget
curl -X GET https://api.quoter.com/v1/manufacturers \
  -H 'Accept: application/json' \
  -H 'Authorization: Bearer: access_token'

GET /manufacturers

Retrieves a list of all manufacturers available in the system.

Parameters

Name In Type Required Description
Authorization header string true Bearer: access_token
fields query string false One or more response fields, separated by commas.
sort_by query string false One or more sort fields, separated by commas.
filter[created_at] query string false Filter by created_at.
filter[modified_at] query string false Filter by modified_at.
filter[name] query string false Filter by name.
limit query integer false Limit the number of records to return. Limit ranges from 1 to 100, and defaults to 100.
page query integer false Pagination record offset. Page starts at 1.

Detailed descriptions

filter[created_at]: Filter by created_at.

Operators: gt, lt

Examples - filter[created_at]=gt:2023-01-01T00:00:00Z - filter[created_at]=lt:2025-01-01T00:00:00Z

filter[modified_at]: Filter by modified_at.

Operators: gt, lt

Examples - filter[modified_at]=gt:2023-01-01T00:00:00Z - filter[modified_at]=lt:2025-01-01T00:00:00Z

filter[name]: Filter by name.

Operators: eq, cont

Examples - filter[name]=eq:abba - filter[name]=cont:ab

Enumerated Values

Parameter Value
fields created_at
fields id
fields modified_at
fields name
sort_by -created_at
sort_by -id
sort_by -modified_at
sort_by -name
sort_by +created_at
sort_by +id
sort_by +modified_at
sort_by +name

Example responses

200 Response

{
  "data": [
    {
      "created_at": "2019-08-24T14:15:22Z",
      "id": "manu_1jAEZdbtkbLFBAU1Tt0ouKpiBUe",
      "modified_at": "2019-08-24T14:15:22Z",
      "name": "Samsung"
    }
  ],
  "has_more": false,
  "total_count": 1
}

Responses

Status Meaning Description Schema
200 OK Manufacturers found. ManufacturerList
401 Unauthorized Authorization invalid. ErrorResponse
404 Not Found Record not found. ErrorResponse
422 Unprocessable Entity Validation error in request. ErrorResponse

Create Manufacturer

Code samples

const inputBody = '{
  "name": "Samsung"
}';
const headers = {
  'Content-Type':'application/json',
  'Accept':'application/json',
  'Authorization':'Bearer: access_token'
};

fetch('https://api.quoter.com/v1/manufacturers',
{
  method: 'POST',
  body: inputBody,
  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

require 'rest-client'
require 'json'

headers = {
  'Content-Type' => 'application/json',
  'Accept' => 'application/json',
  'Authorization' => 'Bearer: access_token'
}

result = RestClient.post 'https://api.quoter.com/v1/manufacturers',
  params: {
  }, headers: headers

p JSON.parse(result)

import requests
headers = {
  'Content-Type': 'application/json',
  'Accept': 'application/json',
  'Authorization': 'Bearer: access_token'
}

r = requests.post('https://api.quoter.com/v1/manufacturers', headers = headers)

print(r.json())

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Content-Type": []string{"application/json"},
        "Accept": []string{"application/json"},
        "Authorization": []string{"Bearer: access_token"},
    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("POST", "https://api.quoter.com/v1/manufacturers", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}

# You can also use wget
curl -X POST https://api.quoter.com/v1/manufacturers \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  -H 'Authorization: Bearer: access_token'

POST /manufacturers

Adds a new manufacturer record.

Body parameter

{
  "name": "Samsung"
}

Parameters

Name In Type Required Description
Authorization header string true Bearer: access_token
fields query string false One or more response fields, separated by commas.
body body ManufacturerCreateRequest true Request body to create a Manufacturer.

Enumerated Values

Parameter Value
fields created_at
fields id
fields modified_at
fields name

Example responses

200 Response

{
  "created_at": "2019-08-24T14:15:22Z",
  "id": "manu_1jAEZdbtkbLFBAU1Tt0ouKpiBUe",
  "modified_at": "2019-08-24T14:15:22Z",
  "name": "Samsung"
}

Responses

Status Meaning Description Schema
200 OK Manufacturer created. Manufacturer
401 Unauthorized Authorization invalid. ErrorResponse
404 Not Found Record not found. ErrorResponse
422 Unprocessable Entity Validation error in request. ErrorResponse

Delete Manufacturer

Code samples


const headers = {
  'Accept':'application/json',
  'Authorization':'Bearer: access_token'
};

fetch('https://api.quoter.com/v1/manufacturers/{id}',
{
  method: 'DELETE',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json',
  'Authorization' => 'Bearer: access_token'
}

result = RestClient.delete 'https://api.quoter.com/v1/manufacturers/{id}',
  params: {
  }, headers: headers

p JSON.parse(result)

import requests
headers = {
  'Accept': 'application/json',
  'Authorization': 'Bearer: access_token'
}

r = requests.delete('https://api.quoter.com/v1/manufacturers/{id}', headers = headers)

print(r.json())

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Accept": []string{"application/json"},
        "Authorization": []string{"Bearer: access_token"},
    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("DELETE", "https://api.quoter.com/v1/manufacturers/{id}", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}

# You can also use wget
curl -X DELETE https://api.quoter.com/v1/manufacturers/{id} \
  -H 'Accept: application/json' \
  -H 'Authorization: Bearer: access_token'

DELETE /manufacturers/{id}

Removes a specific manufacturer from the system.

Parameters

Name In Type Required Description
Authorization header string true Bearer: access_token
id path string true Manufacturer ID

Example responses

401 Response

{
  "errors": [
    {
      "detail": "Pagination page requested too high.",
      "status": 400,
      "title": "Bad Request"
    }
  ]
}

Responses

Status Meaning Description Schema
204 No Content Record deleted. None
401 Unauthorized Authorization invalid. ErrorResponse
404 Not Found Record not found. ErrorResponse
422 Unprocessable Entity Validation error in request. ErrorResponse

Fetch Manufacturer

Code samples


const headers = {
  'Accept':'application/json',
  'Authorization':'Bearer: access_token'
};

fetch('https://api.quoter.com/v1/manufacturers/{id}',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json',
  'Authorization' => 'Bearer: access_token'
}

result = RestClient.get 'https://api.quoter.com/v1/manufacturers/{id}',
  params: {
  }, headers: headers

p JSON.parse(result)

import requests
headers = {
  'Accept': 'application/json',
  'Authorization': 'Bearer: access_token'
}

r = requests.get('https://api.quoter.com/v1/manufacturers/{id}', headers = headers)

print(r.json())

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Accept": []string{"application/json"},
        "Authorization": []string{"Bearer: access_token"},
    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("GET", "https://api.quoter.com/v1/manufacturers/{id}", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}

# You can also use wget
curl -X GET https://api.quoter.com/v1/manufacturers/{id} \
  -H 'Accept: application/json' \
  -H 'Authorization: Bearer: access_token'

GET /manufacturers/{id}

Retrieves details about a specific manufacturer.

Parameters

Name In Type Required Description
Authorization header string true Bearer: access_token
id path string true Manufacturer ID
fields query string false One or more response fields, separated by commas.

Enumerated Values

Parameter Value
fields created_at
fields id
fields modified_at
fields name

Example responses

200 Response

{
  "created_at": "2019-08-24T14:15:22Z",
  "id": "manu_1jAEZdbtkbLFBAU1Tt0ouKpiBUe",
  "modified_at": "2019-08-24T14:15:22Z",
  "name": "Samsung"
}

Responses

Status Meaning Description Schema
200 OK Manufacturer found. Manufacturer
401 Unauthorized Authorization invalid. ErrorResponse
404 Not Found Record not found. ErrorResponse
422 Unprocessable Entity Validation error in request. ErrorResponse

Update Manufacturer

Code samples

const inputBody = '{
  "name": "Samsung"
}';
const headers = {
  'Content-Type':'application/json',
  'Accept':'application/json',
  'Authorization':'Bearer: access_token'
};

fetch('https://api.quoter.com/v1/manufacturers/{id}',
{
  method: 'PATCH',
  body: inputBody,
  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

require 'rest-client'
require 'json'

headers = {
  'Content-Type' => 'application/json',
  'Accept' => 'application/json',
  'Authorization' => 'Bearer: access_token'
}

result = RestClient.patch 'https://api.quoter.com/v1/manufacturers/{id}',
  params: {
  }, headers: headers

p JSON.parse(result)

import requests
headers = {
  'Content-Type': 'application/json',
  'Accept': 'application/json',
  'Authorization': 'Bearer: access_token'
}

r = requests.patch('https://api.quoter.com/v1/manufacturers/{id}', headers = headers)

print(r.json())

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Content-Type": []string{"application/json"},
        "Accept": []string{"application/json"},
        "Authorization": []string{"Bearer: access_token"},
    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("PATCH", "https://api.quoter.com/v1/manufacturers/{id}", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}

# You can also use wget
curl -X PATCH https://api.quoter.com/v1/manufacturers/{id} \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  -H 'Authorization: Bearer: access_token'

PATCH /manufacturers/{id}

Modifies information about an existing manufacturer.

Body parameter

{
  "name": "Samsung"
}

Parameters

Name In Type Required Description
Authorization header string true Bearer: access_token
id path string true Manufacturer ID
fields query string false One or more response fields, separated by commas.
body body ManufacturerUpdateRequest true Request body to update a Manufacturer.

Enumerated Values

Parameter Value
fields created_at
fields id
fields modified_at
fields name

Example responses

200 Response

{
  "created_at": "2019-08-24T14:15:22Z",
  "id": "manu_1jAEZdbtkbLFBAU1Tt0ouKpiBUe",
  "modified_at": "2019-08-24T14:15:22Z",
  "name": "Samsung"
}

Responses

Status Meaning Description Schema
200 OK Manufacturer found. Manufacturer
401 Unauthorized Authorization invalid. ErrorResponse
404 Not Found Record not found. ErrorResponse
422 Unprocessable Entity Validation error in request. ErrorResponse

Quote Templates

List Quote Templates

Code samples


const headers = {
  'Accept':'application/json',
  'Authorization':'Bearer: access_token'
};

fetch('https://api.quoter.com/v1/quote_templates',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json',
  'Authorization' => 'Bearer: access_token'
}

result = RestClient.get 'https://api.quoter.com/v1/quote_templates',
  params: {
  }, headers: headers

p JSON.parse(result)

import requests
headers = {
  'Accept': 'application/json',
  'Authorization': 'Bearer: access_token'
}

r = requests.get('https://api.quoter.com/v1/quote_templates', headers = headers)

print(r.json())

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Accept": []string{"application/json"},
        "Authorization": []string{"Bearer: access_token"},
    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("GET", "https://api.quoter.com/v1/quote_templates", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}

# You can also use wget
curl -X GET https://api.quoter.com/v1/quote_templates \
  -H 'Accept: application/json' \
  -H 'Authorization: Bearer: access_token'

GET /quote_templates

Lists all available templates that can be used to generate quotes

Parameters

Name In Type Required Description
Authorization header string true Bearer: access_token
filter[title] query string false Filter by title.
sort_by query string false One or more sort fields, separated by commas.

Detailed descriptions

filter[title]: Filter by title.

Operators: cont

Examples - filter[title]=cont:Template

Enumerated Values

Parameter Value
sort_by -created_at
sort_by -modified_at
sort_by -public_id
sort_by -title
sort_by +created_at
sort_by +modified_at
sort_by +public_id
sort_by +title

Example responses

200 Response

{
  "data": [
    {
      "created_at": "2019-08-24T14:15:22Z",
      "id": "tmpl_2lf68j5opaIrjmZmPZUwUXxP3R3",
      "modified_at": "2019-08-24T14:15:22Z",
      "slug": "sample-template",
      "title": "Sample Template"
    }
  ],
  "has_more": false,
  "total_count": 1
}

Responses

Status Meaning Description Schema
200 OK Quote Templates found. QuoteTemplateList
401 Unauthorized Authorization invalid. ErrorResponse
404 Not Found Record not found. ErrorResponse
422 Unprocessable Entity Validation error in request. ErrorResponse

Quotes

List Quotes

Code samples


const headers = {
  'Accept':'application/json',
  'Authorization':'Bearer: access_token'
};

fetch('https://api.quoter.com/v1/quotes',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json',
  'Authorization' => 'Bearer: access_token'
}

result = RestClient.get 'https://api.quoter.com/v1/quotes',
  params: {
  }, headers: headers

p JSON.parse(result)

import requests
headers = {
  'Accept': 'application/json',
  'Authorization': 'Bearer: access_token'
}

r = requests.get('https://api.quoter.com/v1/quotes', headers = headers)

print(r.json())

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Accept": []string{"application/json"},
        "Authorization": []string{"Bearer: access_token"},
    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("GET", "https://api.quoter.com/v1/quotes", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}

# You can also use wget
curl -X GET https://api.quoter.com/v1/quotes \
  -H 'Accept: application/json' \
  -H 'Authorization: Bearer: access_token'

GET /quotes

Retrieves a list of all quotes created in the system.

Parameters

Name In Type Required Description
Authorization header string true Bearer: access_token
filter[custom_number] query string false Filter by custom_number.
filter[draft] query boolean false Filter by draft.
filter[email_status] query string false Filter by email_status.
filter[id] query string false Filter by id.
filter[created_at] query string false Filter by created_at.
filter[expired_at] query string false Filter by expired_at.
filter[modified_at] query string false Filter by modified_at.
filter[name] query string false Filter by name.
filter[recurring_interval] query string false Filter by recurring_interval.
sort_by query string false One or more sort fields, separated by commas.
filter[sp_client_id] query string false Filter by sp_client_id.
filter[status] query string false Filter by status.
filter[uuid] query string false Filter by uuid.
filter[won_at] query string false Filter by won_at.

Detailed descriptions

filter[custom_number]: Filter by custom_number.

Operators: cont

Examples - filter[custom_number]=cont:100

filter[draft]: Filter by draft.

Operators: eq

Examples - filter[draft]=eq:true

filter[email_status]: Filter by email_status.

Operators: eq

Examples - filter[email_status]=eq:sent

filter[id]: Filter by id.

Operators: in

Examples - filter[id]=in:quot_1,quot_2

filter[created_at]: Filter by created_at.

Operators: gt, lt

Examples - filter[created_at]=gt:2023-01-01T00:00:00Z - filter[created_at]=lt:2025-01-01T00:00:00Z

filter[expired_at]: Filter by expired_at.

Operators: gt, lt

Examples - filter[expired_at]=gt:2023-01-01T00:00:00Z - filter[expired_at]=lt:2025-01-01T00:00:00Z

filter[modified_at]: Filter by modified_at.

Operators: gt, lt

Examples - filter[modified_at]=gt:2023-01-01T00:00:00Z - filter[modified_at]=lt:2025-01-01T00:00:00Z

filter[name]: Filter by name.

Operators: eq, cont

Examples - filter[name]=eq:abba - filter[name]=cont:ab

filter[recurring_interval]: Filter by recurring_interval.

Operators: eq

Examples - filter[recurring_interval]=eq:monthly

filter[sp_client_id]: Filter by sp_client_id.

Operators: eq

Examples - filter[sp_client_id]=eq:03840c4b-5999-49ac-80b6-0e6000a758fd

filter[status]: Filter by status.

Operators: eq

Examples - filter[status]=eq:pending

filter[uuid]: Filter by uuid.

Operators: eq

Examples - filter[uuid]=eq:123e4567-e89b-12d3-a456-426614174000

filter[won_at]: Filter by won_at.

Operators: gt, lt

Examples - filter[won_at]=gt:2023-01-01T00:00:00Z - filter[won_at]=lt:2025-01-01T00:00:00Z

Enumerated Values

Parameter Value
sort_by -created_at
sort_by -expired_at
sort_by -id
sort_by -modified_at
sort_by -name
sort_by -won_at
sort_by +created_at
sort_by +expired_at
sort_by +id
sort_by +modified_at
sort_by +name
sort_by +won_at

Example responses

200 Response

{
  "data": [
    {
      "annual_cost_decimal": null,
      "annual_discount_decimal": null,
      "annual_discounted_subtotal_decimal": null,
      "annual_margin_decimal": null,
      "annual_subtotal_decimal": null,
      "annual_tax_total_decimal": null,
      "annual_total_decimal": null,
      "annual_upfront_payments": null,
      "autotask_opportunity_id": "abc123def456",
      "billing_address_1": "4289 Reserve St",
      "billing_address_2": null,
      "billing_city": "Lakefield",
      "billing_country_iso": "CA",
      "billing_first_name": "John",
      "billing_last_name": "Doe",
      "billing_organization": "Microsoft",
      "billing_region_iso": "ON",
      "connectwise_opportunity_id": "ghi789jkl012",
      "contact_id": "cont_1yTKYdrjvY7R04NDq57ZpufLFjk",
      "created_at": "2019-08-24T14:15:22Z",
      "currency_iso": "CAD",
      "custom_number": "Quote Custom Number",
      "draft": false,
      "email_first_sent_at": "2019-08-24T14:15:22Z",
      "email_last_sent_at": "2019-08-24T14:15:22Z",
      "email_status": "sent",
      "expired_at": "2019-08-24T14:15:22Z",
      "flagged": false,
      "halo_opportunity_id": "mno345pqr678",
      "hubspot_deal_id": "stu901vwx234",
      "id": "quot_2TSEPTEfnooIhvA83l78R0nEqR5",
      "internal_notes": "some internal notes",
      "kaseya_opportunity_id": "yza567bcd890",
      "modified_at": "2019-08-24T14:15:22Z",
      "monthly_cost_decimal": "30.10",
      "monthly_discount_decimal": "4.00",
      "monthly_discounted_subtotal_decimal": "50.10",
      "monthly_margin_decimal": "15.00",
      "monthly_subtotal_decimal": "60.00",
      "monthly_tax_total_decimal": "9.68",
      "monthly_total_decimal": "61.00",
      "monthly_upfront_payments": "1",
      "name": "Sample Quote",
      "number": "13",
      "one_time_cost_decimal": "2.00",
      "one_time_discount_decimal": "6.00",
      "one_time_discounted_subtotal_decimal": "8.00",
      "one_time_margin_decimal": "2.00",
      "one_time_subtotal_decimal": "6.00",
      "one_time_tax_total_decimal": "1.75",
      "one_time_total_decimal": "10.75",
      "owner_first_name": "Walter",
      "owner_id": "user_2TSEPTEfnooIhvA83l78R0nEqR5",
      "owner_last_name": "Melon",
      "pipedrive_deal_id": "efg123hij456",
      "quarterly_cost_decimal": null,
      "quarterly_discount_decimal": null,
      "quarterly_discounted_subtotal_decimal": null,
      "quarterly_margin_decimal": null,
      "quarterly_subtotal_decimal": null,
      "quarterly_tax_total_decimal": null,
      "quarterly_total_decimal": null,
      "quarterly_upfront_payments": null,
      "quickbooks_invoice_id": "klm789nop012",
      "revision": "3",
      "salesforce_opportunity_id": "qrs345tuv678",
      "semi_annual_cost_decimal": null,
      "semi_annual_discount_decimal": null,
      "semi_annual_discounted_subtotal_decimal": null,
      "semi_annual_margin_decimal": null,
      "semi_annual_subtotal_decimal": null,
      "semi_annual_tax_total_decimal": null,
      "semi_annual_total_decimal": null,
      "semi_annual_upfront_payments": null,
      "shipping_address_1": "2130 Thurston Dr",
      "shipping_address_2": null,
      "shipping_city": "Orleans",
      "shipping_country_iso": "CA",
      "shipping_decimal": "1.00",
      "shipping_first_name": "Jane",
      "shipping_last_name": "Doe",
      "shipping_organization": "FedEx",
      "shipping_region_iso": "ON",
      "status": "pending",
      "upfront_cost_decimal": "50.00",
      "upfront_discount_decimal": "6.00",
      "upfront_discounted_subtotal_decimal": "154.00",
      "upfront_margin_decimal": "30.00",
      "upfront_subtotal_decimal": "160.00",
      "upfront_tax_total_decimal": "15.75",
      "upfront_total_decimal": "173.00",
      "uuid": "1436-e2a121e6-d4b3-4d6b-9ad3-e8b877f8580f",
      "won_at": "2019-08-24T14:15:22Z",
      "xero_invoice_id": "wxy901zab234",
      "zoho_deal_id": "cde567fgh890"
    }
  ],
  "has_more": false,
  "total_count": 1
}

Responses

Status Meaning Description Schema
200 OK Quotes found. QuoteList
401 Unauthorized Authorization invalid. ErrorResponse
404 Not Found Record not found. ErrorResponse
422 Unprocessable Entity Validation error in request. ErrorResponse

Create Quote

Code samples

const inputBody = '{
  "appended_content": "Appended content goes here",
  "contact_id": "cont_2r5WGA5WDExgSYmnZp0TVVQqFLA",
  "cover_letter": "Cover letter details go here",
  "currency_abbr": "CAD",
  "name": "Draft Quote 1",
  "sp_contact_id": "a56f8961-82f8-4de8-949f-d3e06b7200c1",
  "template_id": "tmpl_2r5WHEQLKFsyKdyIj5daPCp7mjF"
}';
const headers = {
  'Content-Type':'application/json',
  'Accept':'application/json',
  'Authorization':'Bearer: access_token'
};

fetch('https://api.quoter.com/v1/quotes',
{
  method: 'POST',
  body: inputBody,
  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

require 'rest-client'
require 'json'

headers = {
  'Content-Type' => 'application/json',
  'Accept' => 'application/json',
  'Authorization' => 'Bearer: access_token'
}

result = RestClient.post 'https://api.quoter.com/v1/quotes',
  params: {
  }, headers: headers

p JSON.parse(result)

import requests
headers = {
  'Content-Type': 'application/json',
  'Accept': 'application/json',
  'Authorization': 'Bearer: access_token'
}

r = requests.post('https://api.quoter.com/v1/quotes', headers = headers)

print(r.json())

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Content-Type": []string{"application/json"},
        "Accept": []string{"application/json"},
        "Authorization": []string{"Bearer: access_token"},
    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("POST", "https://api.quoter.com/v1/quotes", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}

# You can also use wget
curl -X POST https://api.quoter.com/v1/quotes \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  -H 'Authorization: Bearer: access_token'

POST /quotes

Current limitations:

Body parameter

{
  "appended_content": "Appended content goes here",
  "contact_id": "cont_2r5WGA5WDExgSYmnZp0TVVQqFLA",
  "cover_letter": "Cover letter details go here",
  "currency_abbr": "CAD",
  "name": "Draft Quote 1",
  "sp_contact_id": "a56f8961-82f8-4de8-949f-d3e06b7200c1",
  "template_id": "tmpl_2r5WHEQLKFsyKdyIj5daPCp7mjF"
}

Parameters

Name In Type Required Description
Authorization header string true Bearer: access_token
body body QuoteCreateRequest true Request body to create a Draft Quote.

Example responses

200 Response

{
  "id": "quot_2r5CZzZNKjHlB7FvizOgceEHUhK",
  "url": "https://development.quoter.com/admin/quotes/draft_by_public_id/quot_2r5CZzZNKjHlB7FvizOgceEHUhK"
}

Responses

Status Meaning Description Schema
200 OK Quote created. QuoteCreateResponse
401 Unauthorized Authorization invalid. ErrorResponse
404 Not Found Record not found. ErrorResponse
422 Unprocessable Entity Validation error in request. ErrorResponse

Suppliers

List Suppliers

Code samples


const headers = {
  'Accept':'application/json',
  'Authorization':'Bearer: access_token'
};

fetch('https://api.quoter.com/v1/suppliers',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json',
  'Authorization' => 'Bearer: access_token'
}

result = RestClient.get 'https://api.quoter.com/v1/suppliers',
  params: {
  }, headers: headers

p JSON.parse(result)

import requests
headers = {
  'Accept': 'application/json',
  'Authorization': 'Bearer: access_token'
}

r = requests.get('https://api.quoter.com/v1/suppliers', headers = headers)

print(r.json())

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Accept": []string{"application/json"},
        "Authorization": []string{"Bearer: access_token"},
    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("GET", "https://api.quoter.com/v1/suppliers", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}

# You can also use wget
curl -X GET https://api.quoter.com/v1/suppliers \
  -H 'Accept: application/json' \
  -H 'Authorization: Bearer: access_token'

GET /suppliers

Retrieves a list of suppliers that provide items or services.

Parameters

Name In Type Required Description
Authorization header string true Bearer: access_token
filter[created_at] query string false Filter by created_at.
filter[modified_at] query string false Filter by modified_at.
filter[name] query string false Filter by name.
limit query integer false Limit the number of records to return. Limit ranges from 1 to 100, and defaults to 100.
page query integer false Pagination record offset. Page starts at 1.
fields query string false One or more response fields, separated by commas.
sort_by query string false One or more sort fields, separated by commas.

Detailed descriptions

filter[created_at]: Filter by created_at.

Operators: gt, lt

Examples - filter[created_at]=gt:2023-01-01T00:00:00Z - filter[created_at]=lt:2025-01-01T00:00:00Z

filter[modified_at]: Filter by modified_at.

Operators: gt, lt

Examples - filter[modified_at]=gt:2023-01-01T00:00:00Z - filter[modified_at]=lt:2025-01-01T00:00:00Z

filter[name]: Filter by name.

Operators: eq, cont

Examples - filter[name]=eq:abba - filter[name]=cont:ab

Enumerated Values

Parameter Value
fields created_at
fields id
fields modified_at
fields name
sort_by -created_at
sort_by -id
sort_by -modified_at
sort_by -name
sort_by +created_at
sort_by +id
sort_by +modified_at
sort_by +name

Example responses

200 Response

{
  "data": [
    {
      "created_at": "2019-08-24T14:15:22Z",
      "id": "sup_1jAEZdbtkbLFBAU1Tt0ouKpiBUe",
      "modified_at": "2019-08-24T14:15:22Z",
      "name": "Newegg"
    }
  ],
  "has_more": false,
  "total_count": 1
}

Responses

Status Meaning Description Schema
200 OK Suppliers found. SupplierList
401 Unauthorized Authorization invalid. ErrorResponse
404 Not Found Record not found. ErrorResponse
422 Unprocessable Entity Validation error in request. ErrorResponse

Create Supplier

Code samples

const inputBody = '{
  "name": "Newegg"
}';
const headers = {
  'Content-Type':'application/json',
  'Accept':'application/json',
  'Authorization':'Bearer: access_token'
};

fetch('https://api.quoter.com/v1/suppliers',
{
  method: 'POST',
  body: inputBody,
  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

require 'rest-client'
require 'json'

headers = {
  'Content-Type' => 'application/json',
  'Accept' => 'application/json',
  'Authorization' => 'Bearer: access_token'
}

result = RestClient.post 'https://api.quoter.com/v1/suppliers',
  params: {
  }, headers: headers

p JSON.parse(result)

import requests
headers = {
  'Content-Type': 'application/json',
  'Accept': 'application/json',
  'Authorization': 'Bearer: access_token'
}

r = requests.post('https://api.quoter.com/v1/suppliers', headers = headers)

print(r.json())

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Content-Type": []string{"application/json"},
        "Accept": []string{"application/json"},
        "Authorization": []string{"Bearer: access_token"},
    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("POST", "https://api.quoter.com/v1/suppliers", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}

# You can also use wget
curl -X POST https://api.quoter.com/v1/suppliers \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  -H 'Authorization: Bearer: access_token'

POST /suppliers

Adds a new supplier record to the system.

Body parameter

{
  "name": "Newegg"
}

Parameters

Name In Type Required Description
Authorization header string true Bearer: access_token
fields query string false One or more response fields, separated by commas.
body body SupplierCreateRequest true Request body to create a Supplier.

Enumerated Values

Parameter Value
fields created_at
fields id
fields modified_at
fields name

Example responses

200 Response

{
  "created_at": "2019-08-24T14:15:22Z",
  "id": "sup_1jAEZdbtkbLFBAU1Tt0ouKpiBUe",
  "modified_at": "2019-08-24T14:15:22Z",
  "name": "Newegg"
}

Responses

Status Meaning Description Schema
200 OK Supplier created. Supplier
401 Unauthorized Authorization invalid. ErrorResponse
404 Not Found Record not found. ErrorResponse
422 Unprocessable Entity Validation error in request. ErrorResponse

Delete Supplier

Code samples


const headers = {
  'Accept':'application/json',
  'Authorization':'Bearer: access_token'
};

fetch('https://api.quoter.com/v1/suppliers/{id}',
{
  method: 'DELETE',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json',
  'Authorization' => 'Bearer: access_token'
}

result = RestClient.delete 'https://api.quoter.com/v1/suppliers/{id}',
  params: {
  }, headers: headers

p JSON.parse(result)

import requests
headers = {
  'Accept': 'application/json',
  'Authorization': 'Bearer: access_token'
}

r = requests.delete('https://api.quoter.com/v1/suppliers/{id}', headers = headers)

print(r.json())

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Accept": []string{"application/json"},
        "Authorization": []string{"Bearer: access_token"},
    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("DELETE", "https://api.quoter.com/v1/suppliers/{id}", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}

# You can also use wget
curl -X DELETE https://api.quoter.com/v1/suppliers/{id} \
  -H 'Accept: application/json' \
  -H 'Authorization: Bearer: access_token'

DELETE /suppliers/{id}

Removes a specific supplier.

Parameters

Name In Type Required Description
Authorization header string true Bearer: access_token
id path string true Supplier ID

Example responses

401 Response

{
  "errors": [
    {
      "detail": "Pagination page requested too high.",
      "status": 400,
      "title": "Bad Request"
    }
  ]
}

Responses

Status Meaning Description Schema
204 No Content Record deleted. None
401 Unauthorized Authorization invalid. ErrorResponse
404 Not Found Record not found. ErrorResponse
422 Unprocessable Entity Validation error in request. ErrorResponse

Fetch Supplier

Code samples


const headers = {
  'Accept':'application/json',
  'Authorization':'Bearer: access_token'
};

fetch('https://api.quoter.com/v1/suppliers/{id}',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json',
  'Authorization' => 'Bearer: access_token'
}

result = RestClient.get 'https://api.quoter.com/v1/suppliers/{id}',
  params: {
  }, headers: headers

p JSON.parse(result)

import requests
headers = {
  'Accept': 'application/json',
  'Authorization': 'Bearer: access_token'
}

r = requests.get('https://api.quoter.com/v1/suppliers/{id}', headers = headers)

print(r.json())

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Accept": []string{"application/json"},
        "Authorization": []string{"Bearer: access_token"},
    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("GET", "https://api.quoter.com/v1/suppliers/{id}", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}

# You can also use wget
curl -X GET https://api.quoter.com/v1/suppliers/{id} \
  -H 'Accept: application/json' \
  -H 'Authorization: Bearer: access_token'

GET /suppliers/{id}

Retrieves detailed information about a specific supplier.

Parameters

Name In Type Required Description
Authorization header string true Bearer: access_token
id path string true Supplier ID
fields query string false One or more response fields, separated by commas.

Enumerated Values

Parameter Value
fields created_at
fields id
fields modified_at
fields name

Example responses

200 Response

{
  "created_at": "2019-08-24T14:15:22Z",
  "id": "sup_1jAEZdbtkbLFBAU1Tt0ouKpiBUe",
  "modified_at": "2019-08-24T14:15:22Z",
  "name": "Newegg"
}

Responses

Status Meaning Description Schema
200 OK Supplier found. Supplier
401 Unauthorized Authorization invalid. ErrorResponse
404 Not Found Record not found. ErrorResponse
422 Unprocessable Entity Validation error in request. ErrorResponse

Update Supplier

Code samples

const inputBody = '{
  "name": "Newegg"
}';
const headers = {
  'Content-Type':'application/json',
  'Accept':'application/json',
  'Authorization':'Bearer: access_token'
};

fetch('https://api.quoter.com/v1/suppliers/{id}',
{
  method: 'PATCH',
  body: inputBody,
  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

require 'rest-client'
require 'json'

headers = {
  'Content-Type' => 'application/json',
  'Accept' => 'application/json',
  'Authorization' => 'Bearer: access_token'
}

result = RestClient.patch 'https://api.quoter.com/v1/suppliers/{id}',
  params: {
  }, headers: headers

p JSON.parse(result)

import requests
headers = {
  'Content-Type': 'application/json',
  'Accept': 'application/json',
  'Authorization': 'Bearer: access_token'
}

r = requests.patch('https://api.quoter.com/v1/suppliers/{id}', headers = headers)

print(r.json())

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Content-Type": []string{"application/json"},
        "Accept": []string{"application/json"},
        "Authorization": []string{"Bearer: access_token"},
    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("PATCH", "https://api.quoter.com/v1/suppliers/{id}", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}

# You can also use wget
curl -X PATCH https://api.quoter.com/v1/suppliers/{id} \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  -H 'Authorization: Bearer: access_token'

PATCH /suppliers/{id}

Updates information for an existing supplier.

Body parameter

{
  "name": "Newegg"
}

Parameters

Name In Type Required Description
Authorization header string true Bearer: access_token
id path string true Supplier ID
fields query string false One or more response fields, separated by commas.
body body SupplierUpdateRequest true Request body to update a Supplier.

Enumerated Values

Parameter Value
fields created_at
fields id
fields modified_at
fields name

Example responses

200 Response

{
  "created_at": "2019-08-24T14:15:22Z",
  "id": "sup_1jAEZdbtkbLFBAU1Tt0ouKpiBUe",
  "modified_at": "2019-08-24T14:15:22Z",
  "name": "Newegg"
}

Responses

Status Meaning Description Schema
200 OK Supplier found. Supplier
401 Unauthorized Authorization invalid. ErrorResponse
404 Not Found Record not found. ErrorResponse
422 Unprocessable Entity Validation error in request. ErrorResponse

Schemas

AuthorizationRequest

{
  "client_id": "cid_asdf1234",
  "client_secret": "topsecret",
  "grant_type": "client_credentials"
}

Contains credentials required to obtain access and refresh tokens.

Properties

Name Type Required Restrictions Description
client_id string true none The unique identifier assigned to your application during registration.
client_secret string true none A confidential key associated with your application, used to authenticate and authorize requests.
grant_type string true none Specifies the type of OAuth 2.0 grant being used, such as authorization_code or refresh_token.

AuthorizationResponse

{
  "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c",
  "refresh_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkphbmUgRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.cMErWtEf7DxCXJl8C9q0L7ttkm-Ex54UWHsOCMGbtUc"
}

Returns the access and refresh tokens after a successful authorization.

Properties

Name Type Required Restrictions Description
access_token string false none A token that grants access to protected resources on behalf of the user.
refresh_token string false none A token used to obtain a new access token when the current one expires.

Category

{
  "created_at": "2019-08-24T14:15:22Z",
  "id": "cat_1jAEZdbtkbLFBAU1Tt0ouKpiBUe",
  "modified_at": "2019-08-24T14:15:22Z",
  "name": "SSDs",
  "parent_category": "Storage Devices",
  "parent_category_id": "cat_1jAEZdbtkbLFBAU1Tt0ouKpiBUe"
}

Represents a category used to organize items.

Properties

Name Type Required Restrictions Description
created_at string(date-time) false none Timestamp indicating when the category was created.
id string false none Unique identifier for the category.
modified_at string(date-time) false none Timestamp indicating the last update to the category.
name string false none The name of the category.
parent_category string false none The name of the parent category, if applicable.
parent_category_id string false none The unique identifier of the parent category, if applicable.

CategoryCreateRequest

{
  "name": "SSDs",
  "parent_category": "Storage Devices",
  "parent_category_id": "cat_1jAEZdbtkbLFBAU1Tt0ouKpiBUe"
}

Used to create a new item category.

Properties

Name Type Required Restrictions Description
name string true none The name of the new category to be created.
parent_category string false none The name of the parent category under which this category will be nested.
parent_category_id string false none The unique identifier of the parent category under which this category will be nested.

CategoryList

{
  "data": [
    {
      "created_at": "2019-08-24T14:15:22Z",
      "id": "cat_1jAEZdbtkbLFBAU1Tt0ouKpiBUe",
      "modified_at": "2019-08-24T14:15:22Z",
      "name": "SSDs",
      "parent_category": "Storage Devices",
      "parent_category_id": "cat_1jAEZdbtkbLFBAU1Tt0ouKpiBUe"
    }
  ],
  "has_more": false,
  "total_count": 1
}

A paginated list of existing categories.

Properties

Name Type Required Restrictions Description
data [Category] false none An array of category objects.
has_more boolean false none Indicates if there are more categories available beyond the current set.
total_count integer false none The total number of categories available.

CategoryUpdateRequest

{
  "name": "SSDs",
  "parent_category": "Storage Devices",
  "parent_category_id": "cat_1jAEZdbtkbLFBAU1Tt0ouKpiBUe"
}

Properties

Name Type Required Restrictions Description
name string false none none
parent_category string false none Cannot be provided with parent_category_id.
parent_category_id string false none Cannot be provided with parent_category.

Contact

{
  "billing_address": "1021 W Hastings St",
  "billing_address2": "#3200",
  "billing_city": "Vancouver",
  "billing_country_iso": "CA",
  "billing_postal_code": "V5P-523",
  "billing_region_iso": "BC",
  "created_at": "string",
  "email": "contact@quoter.com",
  "first_name": "John",
  "id": "cont_OcThl0ega2lTV4afll6qFrMDMBYyu",
  "last_name": "Doe",
  "mobile_phone": "(604) 539-5319",
  "modified_at": "date-time",
  "organization": "Quoter",
  "shipping_address": "1021 W Hastings St",
  "shipping_address2": "#3200",
  "shipping_city": "Vancouver",
  "shipping_country_iso": "CA",
  "shipping_email": "contact@quoter.com",
  "shipping_first_name": "John",
  "shipping_label": "label",
  "shipping_last_name": "C/O John Doe",
  "shipping_organization": "Quoter",
  "shipping_phone": "(604) 539-5319",
  "shipping_postal_code": "V5P-523",
  "shipping_region_iso": "BC",
  "title": "Mr.",
  "website": "quoter.com",
  "work_phone": "(604) 539-5319"
}

Represents an individual or organization with billing and shipping details.

Properties

Name Type Required Restrictions Description
billing_address string false none Primary billing street address.
billing_address2 string false none Secondary billing street address (e.g., apartment or suite number).
billing_city string false none City for the billing address.
billing_country_iso string false none ISO country code for the billing address.
billing_postal_code string false none Postal code for the billing address.
billing_region_iso string false none region/state code for the billing address.
created_at string(data-time) false none Timestamp indicating when the contact was created.
email string false none Primary email address of the contact.
first_name string false none First name of the contact.
id string false none Unique identifier for the contact.
last_name string false none Last name of the contact.
mobile_phone string false none Mobile phone number of the contact.
modified_at string false none Timestamp indicating the last update to the contact.
organization string false none Organization associated with the contact.
shipping_address string false none Primary shipping street address.
shipping_address2 string false none Secondary shipping street address.
shipping_city string false none City for the shipping address.
shipping_country_iso string false none ISO country code for the shipping address.
shipping_email string false none Email address for shipping-related communications.
shipping_first_name string false none First name for the shipping contact.
shipping_label string false none Label or designation for the shipping address.
shipping_last_name string false none Last name for the shipping contact.
shipping_organization string false none Organization associated with the shipping address.
shipping_phone string false none Phone number for shipping-related communications.
shipping_postal_code string false none Postal code for the shipping address.
shipping_region_iso string false none ISO region/state code for the shipping address.
title string false none Job title or position of the contact.
website string false none Website URL associated with the organization.
work_phone string false none Work phone number of the contact.

ContactCreateRequest

{
  "billing_address": "1021 W Hastings St",
  "billing_address2": "#3200",
  "billing_city": "Vancouver",
  "billing_country_iso": "CA",
  "billing_postal_code": "V5P-523",
  "billing_region_iso": "BC",
  "email": "contact@quoter.com",
  "first_name": "John",
  "last_name": "Doe",
  "mobile_phone": "(604) 539-5319",
  "organization": "Quoter",
  "shipping_address": "1021 W Hastings St",
  "shipping_address2": "#3200",
  "shipping_city": "Vancouver",
  "shipping_country_iso": "CA",
  "shipping_email": "contact@quoter.com",
  "shipping_first_name": "John",
  "shipping_label": "label",
  "shipping_last_name": "C/O John Doe",
  "shipping_organization": "Quoter",
  "shipping_phone": "(604) 539-5319",
  "shipping_postal_code": "V5P-523",
  "shipping_region_iso": "BC",
  "sp_client_id": "49b84642-c1f6-43b1-914a-d37988e50f41",
  "sp_contact_id": "a56f8961-82f8-4de8-949f-d3e06b7200c1",
  "title": "Mr.",
  "website": "quoter.com",
  "work_phone": "(604) 539-5319"
}

Used to create a new contact record.

Properties

Name Type Required Restrictions Description
billing_address string false none Primary billing street address.
billing_address2 string false none Secondary billing street address.
billing_city string false none City for the billing address.
billing_country_iso string true none ISO country code for the billing address.
billing_postal_code string false none Postal code for the billing address.
billing_region_iso string false none ISO region/state code for the billing address.
email string true none Primary email address of the contact.
first_name string true none First name of the contact.
last_name string true none Last name of the contact.
mobile_phone string false none Mobile phone number of the contact.
organization string true none Organization associated with the contact.
shipping_address string false none Primary shipping street address.
shipping_address2 string false none Secondary shipping street address.
shipping_city string false none City for the shipping address.
shipping_country_iso string false none ISO country code for the shipping address.
shipping_email string false none Email address for shipping-related communications.
shipping_first_name string false none First name for the shipping contact.
shipping_label string false none Label or designation for the shipping address.
shipping_last_name string false none Last name for the shipping contact.
shipping_organization string false none Organization associated with the shipping address.
shipping_phone string false none Phone number for shipping-related communications.
shipping_postal_code string false none Postal code for the shipping address.
shipping_region_iso string false none ISO region/state code for the shipping address.
sp_client_id string false none ID of the ScalePad client.
sp_contact_id string false none ID of the ScalePad contact.
title string false none Job title or position of the contact.
website string false none Website URL associated with the contact or organization.
work_phone string false none Work phone number of the contact.

ContactList

{
  "data": [
    {
      "billing_address": "1021 W Hastings St",
      "billing_address2": "#3200",
      "billing_city": "Vancouver",
      "billing_country_iso": "CA",
      "billing_postal_code": "V5P-523",
      "billing_region_iso": "BC",
      "created_at": "string",
      "email": "contact@quoter.com",
      "first_name": "John",
      "id": "cont_OcThl0ega2lTV4afll6qFrMDMBYyu",
      "last_name": "Doe",
      "mobile_phone": "(604) 539-5319",
      "modified_at": "date-time",
      "organization": "Quoter",
      "shipping_address": "1021 W Hastings St",
      "shipping_address2": "#3200",
      "shipping_city": "Vancouver",
      "shipping_country_iso": "CA",
      "shipping_email": "contact@quoter.com",
      "shipping_first_name": "John",
      "shipping_label": "label",
      "shipping_last_name": "C/O John Doe",
      "shipping_organization": "Quoter",
      "shipping_phone": "(604) 539-5319",
      "shipping_postal_code": "V5P-523",
      "shipping_region_iso": "BC",
      "title": "Mr.",
      "website": "quoter.com",
      "work_phone": "(604) 539-5319"
    }
  ],
  "has_more": false,
  "total_count": 1
}

A paginated list of contact records

Properties

Name Type Required Restrictions Description
data [Contact] false none An array of contact objects.
has_more boolean false none Indicates if there are more contacts available beyond the current set.
total_count integer false none The total number of contacts available.

ContactUpdateRequest

{
  "billing_address": "1021 W Hastings St",
  "billing_address2": "#3200",
  "billing_city": "Vancouver",
  "billing_country_iso": "CA",
  "billing_postal_code": "V5P-523",
  "billing_region_iso": "BC",
  "email": "contact@quoter.com",
  "first_name": "John",
  "last_name": "Doe",
  "mobile_phone": "(604) 539-5319",
  "organization": "Quoter",
  "shipping_address": "1021 W Hastings St",
  "shipping_address2": "#3200",
  "shipping_city": "Vancouver",
  "shipping_country_iso": "CA",
  "shipping_email": "contact@quoter.com",
  "shipping_first_name": "John",
  "shipping_label": "label",
  "shipping_last_name": "C/O John Doe",
  "shipping_organization": "Quoter",
  "shipping_phone": "(604) 539-5319",
  "shipping_postal_code": "V5P-523",
  "shipping_region_iso": "BC",
  "title": "Mr.",
  "website": "quoter.com",
  "work_phone": "(604) 539-5319"
}

Used to update an existing contact record.

Properties

Name Type Required Restrictions Description
billing_address string false none Primary billing street address.
billing_address2 string false none Secondary billing street address.
billing_city string false none City for the billing address.
billing_country_iso string false none ISO country code for the billing address.
billing_postal_code string false none Postal code for the billing address.
billing_region_iso string false none ISO region/state code for the billing address.
email string false none Primary email address of the contact.
first_name string false none First name of the contact.
last_name string false none Last name of the contact.
mobile_phone string false none Mobile phone number of the contact.
organization string false none Organization associated with the contact.
shipping_address string false none Primary shipping street address.
shipping_address2 string false none Secondary shipping street address.
shipping_city string false none City for the shipping address.
shipping_country_iso string false none ISO country code for the shipping address.
shipping_email string false none Email address for shipping-related communications.
shipping_first_name string false none First name for the shipping contact.
shipping_label string false none Label or designation for the shipping address.
shipping_last_name string false none Last name for the shipping contact.
shipping_organization string false none Organization associated with the shipping address.
shipping_phone string false none Phone number for shipping-related communications.
shipping_postal_code string false none Postal code for the shipping address.
shipping_region_iso string false none ISO region/state code for the shipping address.
title string false none Job title or position of the contact.
website string false none Website URL associated with the contact or organization.
work_phone string false none Work phone number of the contact.

DatafeedsSupplier

{
  "created_at": "2019-08-24T14:15:22Z",
  "default_taxable": true,
  "field_mapping": {
    "category_name": "csvheader4",
    "manufacturer": "csvheader3",
    "mpn": "csvheader1",
    "name": "csvheader2",
    "price": "csvheader6",
    "supplier_sku": "csvheader5",
    "taxable": "csvheader8",
    "warehouses": [
      {
        "name": "wh1",
        "quantity": "wh1_qty"
      }
    ],
    "weight": "csvheader7"
  },
  "id": "supp_2uBmQcMgHinlJgyv4or3dCKwWIb",
  "modified_at": "2019-08-24T14:15:22Z",
  "name": "Example Supplier",
  "url": "https://example.com"
}

Defines a supplier that provides external product data feeds.

Properties

Name Type Required Restrictions Description
created_at string(date-time) false none Timestamp indicating when the supplier feed was created.
default_taxable boolean false none Indicates whether items from this supplier are taxable by default.
field_mapping object false none Object defining how supplier fields are mapped to internal schema fields.
» category_name string false none The supplier’s field name for the product category.
» manufacturer string false none The supplier’s field name for the product manufacturer.
» mpn string false none The supplier’s field name for the manufacturer part number.
» name string false none The supplier’s field name for the product name.
» price string false none The supplier’s field name for the product price.
» supplier_sku string false none The supplier’s field name for the SKU.
» taxable string false none The supplier’s field name indicating whether the item is taxable.
» warehouses [WarehouseMapping] false none The supplier’s field mapping for warehouse inventory.
» weight string false none The supplier’s field name for the product weight.
id string false none Unique identifier for the data feed supplier.
modified_at string(date-time) false none Timestamp indicating the last modification of the feed.
name string false none The display name of the supplier feed.
url string false none The URL of the data feed provided by the supplier.

DatafeedsSupplierItem

{
  "category": "Networking",
  "id": "sitm_2tdpIVSQAR8jy5nILOG9QBJYBdF",
  "mpn": "AW30004",
  "name": "Example Name",
  "price_amount_decimal": "1202",
  "semantic_item_id": "smitm_2tUylOc8T55BoUDtwLMbTY4Sj1x",
  "sku": "UP16C236ZZNEAA",
  "supplier_default_taxable": true,
  "supplier_id": "supp_2tUykybikauznOTjgNzGPq0KFkz",
  "supplier_name": "Example Name",
  "taxable": true,
  "warehouses": [
    {
      "id": "itmw_2tdpIbLafl0Big0WPgsTbVt1BFa",
      "name": "Warehouse1",
      "quantity": "20"
    }
  ],
  "weight_decimal": "1000"
}

Represents an item within a supplier’s data feed.

Properties

Name Type Required Restrictions Description
category string false none The name of the category associated with this item.
id string false none Unique identifier for the item within the data feed.
mpn string false none Manufacturer part number for the item.
name string false none Display name of the item.
price_amount_decimal string false none The item’s price as a decimal string.
semantic_item_id string false none An internal ID representing a semantic match for the item.
sku string false none The stock keeping unit assigned by the supplier.
supplier_default_taxable boolean false none Whether the item is taxable by the supplier’s default rule.
supplier_id string false none Unique identifier of the supplier providing the item.
supplier_name string false none Name of the supplier providing the item.
taxable boolean false none Whether the item is marked as taxable in the feed.
warehouses [Warehouse] false none Array of warehouse stock data for the item.
weight_decimal string false none Item weight in decimal format.

DatafeedsSupplierItemList

{
  "data": [
    {
      "category": "Networking",
      "id": "sitm_2tdpIVSQAR8jy5nILOG9QBJYBdF",
      "mpn": "AW30004",
      "name": "Example Name",
      "price_amount_decimal": "1202",
      "semantic_item_id": "smitm_2tUylOc8T55BoUDtwLMbTY4Sj1x",
      "sku": "UP16C236ZZNEAA",
      "supplier_default_taxable": true,
      "supplier_id": "supp_2tUykybikauznOTjgNzGPq0KFkz",
      "supplier_name": "Example Name",
      "taxable": true,
      "warehouses": [
        {
          "id": "itmw_2tdpIbLafl0Big0WPgsTbVt1BFa",
          "name": "Warehouse1",
          "quantity": "20"
        }
      ],
      "weight_decimal": "1000"
    }
  ],
  "has_more": false,
  "total_count": 1
}

A list of supplier feed items, with pagination support.

Properties

Name Type Required Restrictions Description
data [DatafeedsSupplierItem] false none Array of data feed supplier item objects.
has_more boolean false none Indicates if additional items exist beyond the current page.
total_count integer false none Total number of items in the feed.

DatafeedsSupplierList

{
  "data": [
    {
      "created_at": "2019-08-24T14:15:22Z",
      "default_taxable": true,
      "field_mapping": {
        "category_name": "csvheader4",
        "manufacturer": "csvheader3",
        "mpn": "csvheader1",
        "name": "csvheader2",
        "price": "csvheader6",
        "supplier_sku": "csvheader5",
        "taxable": "csvheader8",
        "warehouses": [
          {
            "name": "wh1",
            "quantity": "wh1_qty"
          }
        ],
        "weight": "csvheader7"
      },
      "id": "supp_2uBmQcMgHinlJgyv4or3dCKwWIb",
      "modified_at": "2019-08-24T14:15:22Z",
      "name": "Example Supplier",
      "url": "https://example.com"
    }
  ],
  "has_more": false,
  "total_count": 1
}

A list of all configured supplier data feeds.

Properties

Name Type Required Restrictions Description
data [DatafeedsSupplier] false none Array of data feed supplier objects.
has_more boolean false none Indicates if additional supplier feeds exist.
total_count integer false none Total number of supplier feeds available.

ErrorResponse

{
  "errors": [
    {
      "detail": "Pagination page requested too high.",
      "status": 400,
      "title": "Bad Request"
    }
  ]
}

Standard format for reporting API errors.

Properties

Name Type Required Restrictions Description
errors [object] false none Array of error objects containing details about each issue.
» detail string false none Human-readable message describing the error.
» status integer false none HTTP status code associated with the error.
» title string false none A short, human-readable summary of the error.

Item

{
  "allow_decimal_quantities": true,
  "category": "SSDs",
  "category_id": "cat_OcThl8SOeE8w6JYUznfrnQGdp94",
  "code": "MZ-V7S1T0B/AM",
  "cost_decimal": 50.5,
  "cost_type": "amount",
  "created_at": "2019-08-24T14:15:22Z",
  "description": "The 970 EVO Plus reaches sequential read/write speeds up to 3,500/3,300 MB/s, up to 53% faster than the 970 EVO.",
  "id": "item_OcThl0eqYyTVQzll6qFrMDMBYyu",
  "internal_note": "Check warehouse for inventory before ordering.",
  "manufacturer": "Samsung",
  "manufacturer_id": "manu_OcThlEWcbhAG52u3vLJodwnV88k",
  "modified_at": "2019-08-24T14:15:22Z",
  "name": "SAMSUNG 970 EVO PLUS M.2 2280 1TB PCIe Gen 3.0 x4",
  "percentage_price_category_ids": [
    "cat_OcThlTV6Tama8RH5Zh4Jfw1fhJC"
  ],
  "percentage_price_decimal": 50.5,
  "price_decimal": 50.5,
  "pricing_scheme": "per_unit",
  "quantity_help_tip": "Enter the number of units required.",
  "recurring": true,
  "recurring_interval": "annually",
  "restrict_discounting": true,
  "show_option_prices": true,
  "sku": "N82E16820147743",
  "supplier": "Newegg",
  "supplier_id": "sup_OcThlLwzLAM7m5eK1WEKkXUQZtm",
  "taxable": true,
  "weight_decimal": 50.5
}

Represents a product or service available for quoting.

Properties

Name Type Required Restrictions Description
allow_decimal_quantities boolean false none Whether the item can be sold in fractional quantities.
category string false none Name of the category to which the item belongs. Required; cannot be provided with category_id.
category_id string false none ID of the category to which the item belongs. Required; cannot be provided with category.
code string false none Code used to reference the item. Also referred to as “MPN” in Quoter’s UI. Should be unique.
cost_decimal string false none Unit cost of the item in decimal format. If provided, pricing_scheme must be flat, per_unit, or percentage.
cost_type string false none Indicates the type of cost (e.g., amount, percent). If provided, pricing_scheme must be flat, per_unit, or percentage; required if cost is provided. Defaults to amount if not specified.
created_at string(date-time) false none Timestamp when the item was created.
description string false none Description of the item, HTML formatting is supported.
id string false none Unique identifier for the item.
internal_note string false none Internal notes about the item, not shown to customers.
manufacturer string false none Name of the item manufacturer. Cannot be provided with manufacturer_id.
manufacturer_id string false none Unique identifier for the manufacturer. Cannot be provided with manufacturer.
modified_at string(date-time) false none Timestamp when the item was last updated.
name string false none The name of the item. Required;
percentage_price_category_ids [string] false none Category IDs used to calculate percentage-based pricing. If provided, pricing_scheme must be percentage; required if pricing_scheme is percentage.
percentage_price_decimal string false none Percentage value used for pricing if applicable. If provided, pricing_scheme must be percentage; required if pricing scheme is percentage.
price_decimal string false none Price of the item in decimal format. If provided, pricing_scheme must be flat or per_unit; validate decimal.
pricing_scheme string false none Defaults to per_unit if omitted.
quantity_help_tip string false none Optional help text to assist in selecting a quantity.
recurring boolean false none Indicates if the item is billed on a recurring basis.
recurring_interval string false none Billing interval if the item is recurring. If provided, recurring must be true; required if recurring is true.
restrict_discounting boolean false none Whether discounting is disabled for this item.
show_option_prices boolean false none Indicates if option prices should be displayed.
sku string false none Stock keeping unit identifier for the item.
supplier string false none Name of the item’s supplier. Cannot be provided with supplier_id.
supplier_id string false none Unique identifier for the supplier. Cannot be provided with supplier.
taxable boolean false none Indicates whether the item is subject to tax. Defaults to per_unit if omitted.
weight_decimal string false none Item weight in decimal format.

Enumerated Values

Property Value
cost_type amount
cost_type percentage
pricing_scheme per_unit
pricing_scheme flat
pricing_scheme tiered_volume
pricing_scheme tiered_stepped
pricing_scheme percentage
recurring_interval monthly
recurring_interval quarterly
recurring_interval semi_annually
recurring_interval annually

ItemCreateRequest

{
  "allow_decimal_quantities": true,
  "category": "SSDs",
  "category_id": "cat_OcThl8SOeE8w6JYUznfrnQGdp94",
  "code": "MZ-V7S1T0B/AM",
  "cost_decimal": 50.5,
  "cost_type": "amount",
  "description": "The 970 EVO Plus reaches sequential read/write speeds up to 3,500/3,300 MB/s, up to 53% faster than the 970 EVO.",
  "internal_note": "Check warehouse for inventory before ordering.",
  "manufacturer": "Samsung",
  "manufacturer_id": "manu_OcThlEWcbhAG52u3vLJodwnV88k",
  "name": "SAMSUNG 970 EVO PLUS M.2 2280 1TB PCIe Gen 3.0 x4",
  "percentage_price_category_ids": [
    "cat_OcThlTV6Tama8RH5Zh4Jfw1fhJC"
  ],
  "percentage_price_decimal": 50.5,
  "price_decimal": 50.5,
  "pricing_scheme": "per_unit",
  "quantity_help_tip": "Enter the number of units required.",
  "recurring": true,
  "recurring_interval": "annually",
  "restrict_discounting": true,
  "show_option_prices": true,
  "sku": "N82E16820147743",
  "supplier": "Newegg",
  "supplier_id": "sup_OcThlLwzLAM7m5eK1WEKkXUQZtm",
  "taxable": true,
  "weight_decimal": 50.5
}

Used to create a new item in the system.

Properties

Name Type Required Restrictions Description
allow_decimal_quantities boolean false none Whether the item can be sold in fractional quantities.
category string false none Name of the category to which the item belongs. Required; cannot be provided with category_id.
category_id string true none ID of the category to which the item belongs. Required; cannot be provided with category.
code string false none Custom reference code for the item.
cost_decimal string false none Unit cost of the item as a decimal. If provided, pricing_scheme must be flat, per_unit, or percentage.
cost_type string false none Type of cost (e.g., amount, percentage), used to interpret the cost value. If provided, pricing_scheme must be flat, per_unit, or percentage; required if cost is provided. Defaults to amount if not specified.
description string false none Textual description of the item.
internal_note string false none Private notes about the item, not visible to customers.
manufacturer string false none Name of the item’s manufacturer. Cannot be provided with manufacturer_id.
manufacturer_id string false none Unique ID of the manufacturer. Cannot be provided with manufacturer.
name string true none Name of the item being created.
percentage_price_category_ids [string] false none Category IDs used for percentage-based pricing. If provided, pricing_scheme must be percentage; required if pricing_scheme is percentage.
percentage_price_decimal string false none The percentage markup or markdown used in pricing. If provided, pricing_scheme must be percentage; required if pricing scheme is percentage.
price_decimal string false none Price of the item in decimal format. If provided, pricing_scheme must be flat or per_unit; validate decimal.
pricing_scheme string false none Method used for pricing, such as flat, per_unit, or percentage. Defaults to per_unit if omitted.
quantity_help_tip string false none Help text to guide users on how to select quantity.
recurring boolean false none Indicates whether the item is billed on a recurring basis.
recurring_interval string false none Time interval for recurring billing (e.g., monthly, yearly). If provided, recurring must be true; required if recurring is true.
restrict_discounting boolean false none Prevents discounts from being applied to this item.
show_option_prices boolean false none Indicates whether option prices should be displayed alongside item price.
sku string false none Unique product code used for tracking inventory.
supplier string false none Name of the item’s supplier. Cannot be provided with supplier_id.
supplier_id string false none ID of the item’s supplier. Cannot be provided with supplier.
taxable boolean false none Defaults to per_unit if omitted.
weight_decimal string false none Item weight in decimal format.

Enumerated Values

Property Value
cost_type amount
cost_type percentage
pricing_scheme per_unit
pricing_scheme flat
pricing_scheme tiered_volume
pricing_scheme tiered_stepped
pricing_scheme percentage
recurring_interval monthly
recurring_interval quarterly
recurring_interval semi_annually
recurring_interval annually

ItemGroup

{
  "created_at": "2019-08-24T14:15:22Z",
  "id": "igrp_1jAEZdbtkbLFBAU1Tt0ouKpiBUe",
  "modified_at": "2019-08-24T14:15:22Z",
  "name": "West Coast"
}

A logical grouping of items for easier management.

Properties

Name Type Required Restrictions Description
created_at string(date-time) false none Timestamp indicating when the item group was created.
id string false none Unique identifier for the item group.
modified_at string(date-time) false none Timestamp of the most recent update to the item group.
name string false none Name or label for the group of items.

ItemGroupCreateRequest

{
  "name": "West Coast"
}

Used to create a new item group.

Properties

Name Type Required Restrictions Description
name string true none Name of the new item group to be created.

ItemGroupItemAssignment

{
  "created_at": "2019-08-24T14:15:22Z",
  "id": "igia_1lylwamEQiFCXsDnDl3M4xQsJiH",
  "item_group_id": "igrp_1lqyMI1VF074qctA1lpvhFK3PuY",
  "item_id": "item_OcThl0eqYyTVQzll6qFrMDMBYyu",
  "modified_at": "2019-08-24T14:15:22Z"
}

Maps an item to a specific item group.

Properties

Name Type Required Restrictions Description
created_at string(date-time) false none Timestamp when the item was assigned to the group.
id string false none Unique identifier for the assignment.
item_group_id string false none Identifier of the item being assigned to the group.
item_id string false none Identifier of the item group this assignment belongs to.
modified_at string(date-time) false none Timestamp of the last modification to the assignment.

ItemGroupItemAssignmentCreateRequest

{
  "item_group_id": "igrp_1lqyMI1VF074qctA1lpvhFK3PuY",
  "item_id": "item_OcThl0eqYyTVQzll6qFrMDMBYyu"
}

Used to assign an item to a group.

Properties

Name Type Required Restrictions Description
item_group_id string true none ID of the item group to assign the item to.
item_id string true none ID of the item being assigned.

ItemGroupItemAssignmentList

{
  "data": [
    {
      "created_at": "2019-08-24T14:15:22Z",
      "id": "igia_1lylwamEQiFCXsDnDl3M4xQsJiH",
      "item_group_id": "igrp_1lqyMI1VF074qctA1lpvhFK3PuY",
      "item_id": "item_OcThl0eqYyTVQzll6qFrMDMBYyu",
      "modified_at": "2019-08-24T14:15:22Z"
    }
  ],
  "has_more": false,
  "total_count": 1
}

A list of item-to-group assignments.

Properties

Name Type Required Restrictions Description
data [ItemGroupItemAssignment] false none Array of item group assignment objects.
has_more boolean false none Indicates if there are more results beyond the current list.
total_count integer false none Total number of assignments in the response.

ItemGroupList

{
  "data": [
    {
      "created_at": "2019-08-24T14:15:22Z",
      "id": "igrp_1jAEZdbtkbLFBAU1Tt0ouKpiBUe",
      "modified_at": "2019-08-24T14:15:22Z",
      "name": "West Coast"
    }
  ],
  "has_more": false,
  "total_count": 1
}

A list of item groups in the system.

Properties

Name Type Required Restrictions Description
data [ItemGroup] false none Array of item group objects.
has_more boolean false none Indicates if additional item groups exist.
total_count integer false none Total number of item groups available.

ItemGroupUpdateRequest

{
  "name": "West Coast"
}

Used to update the name of an item group.

Properties

Name Type Required Restrictions Description
name string true none Updated name of the item group.

ItemList

{
  "data": [
    {
      "allow_decimal_quantities": true,
      "category": "SSDs",
      "category_id": "cat_OcThl8SOeE8w6JYUznfrnQGdp94",
      "code": "MZ-V7S1T0B/AM",
      "cost_decimal": 50.5,
      "cost_type": "amount",
      "created_at": "2019-08-24T14:15:22Z",
      "description": "The 970 EVO Plus reaches sequential read/write speeds up to 3,500/3,300 MB/s, up to 53% faster than the 970 EVO.",
      "id": "item_OcThl0eqYyTVQzll6qFrMDMBYyu",
      "internal_note": "Check warehouse for inventory before ordering.",
      "manufacturer": "Samsung",
      "manufacturer_id": "manu_OcThlEWcbhAG52u3vLJodwnV88k",
      "modified_at": "2019-08-24T14:15:22Z",
      "name": "SAMSUNG 970 EVO PLUS M.2 2280 1TB PCIe Gen 3.0 x4",
      "percentage_price_category_ids": [
        "cat_OcThlTV6Tama8RH5Zh4Jfw1fhJC"
      ],
      "percentage_price_decimal": 50.5,
      "price_decimal": 50.5,
      "pricing_scheme": "per_unit",
      "quantity_help_tip": "Enter the number of units required.",
      "recurring": true,
      "recurring_interval": "annually",
      "restrict_discounting": true,
      "show_option_prices": true,
      "sku": "N82E16820147743",
      "supplier": "Newegg",
      "supplier_id": "sup_OcThlLwzLAM7m5eK1WEKkXUQZtm",
      "taxable": true,
      "weight_decimal": 50.5
    }
  ],
  "has_more": false,
  "total_count": 1
}

A list of items available in the system.

Properties

Name Type Required Restrictions Description
data [Item] false none Array of item objects.
has_more boolean false none Indicates whether more items are available beyond the current page.
total_count integer false none Total number of items returned by the query.

ItemOption

{
  "allow_multiple_values": false,
  "created_at": "2019-08-24T14:15:22Z",
  "description": "<p>Standard description</p>",
  "extended_description": "<p>Longer description.</p>",
  "id": "iopt_1jAEZdbtkbLFBAU1Tt0ouKpiBUe",
  "item_id": "item_1jAEZdbtkbLFBAU1Tt0ouKpiBUe",
  "modified_at": "2019-08-24T14:15:22Z",
  "name": "Disk Size",
  "required": false,
  "sort_order": 0
}

Represents an option that can be applied to an item.

Properties

Name Type Required Restrictions Description
allow_multiple_values boolean false none Whether users can select multiple values for this option.
created_at string(date-time) false none Timestamp when the item option was created.
description string false none Short description of the item option.
extended_description string false none Detailed description or notes for the option.
id string false none Unique identifier for the item option.
item_id string false none ID of the item this option belongs to.
modified_at string(date-time) false none Timestamp of the last update to the option.
name string false none Display name of the item option.
required boolean false none Whether selecting a value for this option is mandatory.
sort_order integer false none Sort order used to display options relative to others.

ItemOptionCreateRequest

{
  "allow_multiple_values": false,
  "description": "<p>Standard description</p>",
  "extended_description": "<p>Longer description.</p>",
  "item_id": "item_1jAEZdbtkbLFBAU1Tt0ouKpiBUe",
  "name": "Disk Size",
  "required": false,
  "sort_order": 0
}

Used to create a new option for an item.

Properties

Name Type Required Restrictions Description
allow_multiple_values boolean false none Whether the option supports selecting multiple values.
description string false none Short description for the new item option.
extended_description string false none Additional information or explanation of the option.
item_id string true none ID of the item to which this option will be added.
name string true none Name of the new item option.
required boolean false none Whether this option must be selected.
sort_order integer false none Order in which this option is displayed among others.

ItemOptionList

{
  "data": [
    {
      "allow_multiple_values": false,
      "created_at": "2019-08-24T14:15:22Z",
      "description": "<p>Standard description</p>",
      "extended_description": "<p>Longer description.</p>",
      "id": "iopt_1jAEZdbtkbLFBAU1Tt0ouKpiBUe",
      "item_id": "item_1jAEZdbtkbLFBAU1Tt0ouKpiBUe",
      "modified_at": "2019-08-24T14:15:22Z",
      "name": "Disk Size",
      "required": false,
      "sort_order": 0
    }
  ],
  "has_more": false,
  "total_count": 1
}

A list of item options.

Properties

Name Type Required Restrictions Description
data [ItemOption] false none List of item option objects.
has_more boolean false none Indicates if additional item options are available.
total_count integer false none Total number of item options.

ItemOptionUpdateRequest

{
  "allow_multiple_values": true,
  "description": "<p>Standard description</p>",
  "extended_description": "<p>Longer description.</p>",
  "name": "Disk Size",
  "required": true,
  "sort_order": 1
}

Used to update an existing item option.

Properties

Name Type Required Restrictions Description
allow_multiple_values boolean false none Update to allow or disallow multiple values.
description string false none Updated short description for the item option.
extended_description string false none Updated detailed description of the option.
name string false none Updated display name of the item option.
required boolean false none Update whether the option is required.
sort_order integer false none Updated display order for the option.

ItemOptionValue

{
  "code": "MPN123",
  "cost_decimal": "50.50",
  "cost_type": "amount",
  "created_at": "2019-08-24T14:15:22Z",
  "id": "iov_1jAEZdbtkbLFBAU1Tt0ouKpiBUe",
  "item_id": "item_1jAEZdbtkbLFBAU1Tt0ouKpiBUe",
  "item_option_id": "iopt_1jAEZdbtkbLFBAU1Tt0ouKpiBUe",
  "modified_at": "2019-08-24T14:15:22Z",
  "name": "1TB",
  "price_decimal": "50.50",
  "pricing_scheme": "amount"
}

Represents a selectable value for an item option.

Properties

Name Type Required Restrictions Description
code string false none A unique code representing this option value, used for internal reference or integrations.
cost_decimal string false none The additional cost of selecting this option value, expressed as a decimal.
cost_type string false none Indicates whether the cost is a fixed amount or a percentage. Defaults to amount if not specified.
created_at string(date-time) false none Timestamp when this option value was created.
id string false none Unique identifier for the item option value.
item_id string false none ID of the item this option value is associated with.
item_option_id string false none ID of the item option this value belongs to.
modified_at string(date-time) false none Timestamp when the option value was last updated.
name string false none The display name of the option value.
price_decimal string false none The additional price charged for this value, expressed as a decimal.
pricing_scheme string false none Pricing method used (e.g., flat, per_unit, percentage).

Enumerated Values

Property Value
cost_type amount
cost_type percentage
pricing_scheme amount
pricing_scheme percentage
pricing_scheme compound_percentage

ItemOptionValueCreateRequest

{
  "code": "MPN123",
  "cost_decimal": "50.50",
  "cost_type": "amount",
  "item_option_id": "iopt_1jAEZdbtkbLFBAU1Tt0ouKpiBUe",
  "name": "1TB",
  "price_decimal": "50.50",
  "pricing_scheme": "amount",
  "sort_order": 1
}

Used to define a new value for an item option.

Properties

Name Type Required Restrictions Description
code string false none Unique code identifying the option value.
cost_decimal string false none The cost of the value being created, expressed as a decimal.
cost_type string false none Specifies how the cost should be interpreted (e.g., amount, percentage). Defaults to amount if not specified.
item_option_id string true none The ID of the item option to which this value will be added.
name string true none The name of the option value to be created.
price_decimal string false none Price associated with this value, if different from the item’s base price.
pricing_scheme string false none How the price should be interpreted (e.g., flat rate, per unit).
sort_order integer false none Display order of this value among other values.

Enumerated Values

Property Value
cost_type amount
cost_type percentage
pricing_scheme amount
pricing_scheme percentage
pricing_scheme compound_percentage

ItemOptionValueList

{
  "data": [
    {
      "code": "MPN123",
      "cost_decimal": "50.50",
      "cost_type": "amount",
      "created_at": "2019-08-24T14:15:22Z",
      "id": "iov_1jAEZdbtkbLFBAU1Tt0ouKpiBUe",
      "item_id": "item_1jAEZdbtkbLFBAU1Tt0ouKpiBUe",
      "item_option_id": "iopt_1jAEZdbtkbLFBAU1Tt0ouKpiBUe",
      "modified_at": "2019-08-24T14:15:22Z",
      "name": "1TB",
      "price_decimal": "50.50",
      "pricing_scheme": "amount"
    }
  ],
  "has_more": false,
  "total_count": 1
}

A list of item option values.

Properties

Name Type Required Restrictions Description
data [ItemOptionValue] false none Array of item option value objects.
has_more boolean false none Indicates if additional values exist beyond the current result set.
total_count integer false none Total number of option values available.

ItemOptionValueUpdateRequest

{
  "code": "MPN123",
  "cost_decimal": "50.50",
  "cost_type": "amount",
  "name": "1TB",
  "price_decimal": "50.50",
  "pricing_scheme": "amount",
  "sort_order": 1
}

Used to update a specific item option value.

Properties

Name Type Required Restrictions Description
code string false none Updated unique identifier code for the value.
cost_decimal string false none Updated cost associated with the value.
cost_type string false none Updated type of cost, indicating whether it’s a flat amount or a percentage. Defaults to amount if an empty value is specified.
name string false none Updated name of the option value.
price_decimal string false none Updated price associated with this value.
pricing_scheme string false none Updated pricing scheme applied to this value.
sort_order integer false none Sort order.

Enumerated Values

Property Value
cost_type amount
cost_type percentage
pricing_scheme amount
pricing_scheme percentage
pricing_scheme compound_percentage

ItemTier

{
  "cost_decimal": "50.50",
  "cost_type": "amount",
  "created_at": "2019-08-24T14:15:22Z",
  "id": "tier_1jAEZdbtkbLFBAU1Tt0ouKpiBUe",
  "item_id": "item_OcThl0eqYyTVQzll6qFrMDMBYyu",
  "lower_boundary": 0,
  "modified_at": "2019-08-24T14:15:22Z",
  "price_decimal": "50.50"
}

Represents quantity-based pricing tiers for an item.

Properties

Name Type Required Restrictions Description
cost_decimal string false none Unit cost for this tier level.
cost_type string false none Cost type (e.g., amount, percentage) used in calculating the item cost. Required if cost_decimal is provided. Defaults to amount if not specified.
created_at string(date-time) false none Timestamp when the tier was created.
id string false none Unique identifier for the item tier.
item_id string false none ID of the item this tier is associated with.
lower_boundary integer false none Minimum quantity required for this tier to apply. A lower_boundary of 0 must exist before other values can be created. An existing lower_boundary of 0 cannot be updated.
modified_at string(date-time) false none Timestamp of the last update to this tier.
price_decimal string false none Price for this tier, expressed as a decimal.

Enumerated Values

Property Value
cost_type amount
cost_type percentage

ItemTierCreateRequest

{
  "cost_decimal": "50.50",
  "cost_type": "amount",
  "created_at": "2019-08-24T14:15:22Z",
  "item_id": "item_OcThl0eqYyTVQzll6qFrMDMBYyu",
  "lower_boundary": 0,
  "modified_at": "2019-08-24T14:15:22Z",
  "price_decimal": "50.50"
}

Used to define a new pricing tier for an item.

Properties

Name Type Required Restrictions Description
cost_decimal string false none Cost applied at this tier level.
cost_type string false none Type of cost used (defaults to amount). Required if cost_decimal is provided. Defaults to amount if not specified.
created_at string(date-time) false none Timestamp when the tier was created.
item_id string true none ID of the item to which this tier belongs.
lower_boundary integer true none Minimum quantity required to activate this tier. A lower_boundary of 0 must exist before other values can be created.
modified_at string(date-time) false none Timestamp of the last update.
price_decimal string false none Price applied when this tier is selected.

Enumerated Values

Property Value
cost_type amount
cost_type percentage

ItemTierList

{
  "data": [
    {
      "cost_decimal": "50.50",
      "cost_type": "amount",
      "created_at": "2019-08-24T14:15:22Z",
      "id": "tier_1jAEZdbtkbLFBAU1Tt0ouKpiBUe",
      "item_id": "item_OcThl0eqYyTVQzll6qFrMDMBYyu",
      "lower_boundary": 0,
      "modified_at": "2019-08-24T14:15:22Z",
      "price_decimal": "50.50"
    }
  ],
  "has_more": false,
  "total_count": 1
}

A list of pricing tiers available for items.

Properties

Name Type Required Restrictions Description
data [ItemTier] false none Array of item tier objects.
has_more boolean false none Indicates if more item tiers are available.
total_count integer false none Total number of item tiers available.

ItemTierUpdateRequest

{
  "cost_decimal": "50.50",
  "cost_type": "amount",
  "created_at": "2019-08-24T14:15:22Z",
  "item_id": "item_OcThl0eqYyTVQzll6qFrMDMBYyu",
  "lower_boundary": 1,
  "modified_at": "2019-08-24T14:15:22Z",
  "price_decimal": "50.50"
}

Used to update existing item tier details.

Properties

Name Type Required Restrictions Description
cost_decimal string false none Updated cost for the item tier.
cost_type string false none Updated cost type (e.g., amount, percentage). Required if cost_decimal is provided. Defaults to amount if not specified.
created_at string(date-time) false none Timestamp of when the tier was originally created.
item_id string false none ID of the item the tier applies to.
lower_boundary integer false none Minimum quantity for this tier (cannot update boundary of 0). An existing lower_boundary of 0 cannot be updated.
modified_at string(date-time) false none Timestamp of the last tier modification.
price_decimal string false none Updated price associated with the tier.

Enumerated Values

Property Value
cost_type amount
cost_type percentage

ItemUpdateRequest

{
  "allow_decimal_quantities": true,
  "category": "SSDs",
  "category_id": "cat_OcThl8SOeE8w6JYUznfrnQGdp94",
  "code": "MZ-V7S1T0B/AM",
  "cost_decimal": 50.5,
  "cost_type": "amount",
  "description": "The 970 EVO Plus reaches sequential read/write speeds up to 3,500/3,300 MB/s, up to 53% faster than the 970 EVO.",
  "internal_note": "Check warehouse for inventory before ordering.",
  "manufacturer": "Samsung",
  "manufacturer_id": "manu_OcThlEWcbhAG52u3vLJodwnV88k",
  "name": "SAMSUNG 970 EVO PLUS M.2 2280 1TB PCIe Gen 3.0 x4",
  "percentage_price_category_ids": [
    "cat_OcThlTV6Tama8RH5Zh4Jfw1fhJC"
  ],
  "percentage_price_decimal": 50.5,
  "price_decimal": 50.5,
  "pricing_scheme": "per_unit",
  "quantity_help_tip": "Enter the number of units required.",
  "recurring": true,
  "recurring_interval": "annually",
  "restrict_discounting": true,
  "show_option_prices": true,
  "sku": "N82E16820147743",
  "supplier": "Newegg",
  "supplier_id": "sup_OcThlLwzLAM7m5eK1WEKkXUQZtm",
  "taxable": true,
  "weight_decimal": 50.5
}

Used to update the details of an existing item.

Properties

Name Type Required Restrictions Description
allow_decimal_quantities boolean false none Whether fractional quantities are allowed when selling this item.
category string false none Name of the item’s category. Cannot be provided with category_id.
category_id string false none Unique ID of the category. Cannot be provided with category.
code string false none Custom item code.
cost_decimal string false none Unit cost expressed as a decimal. If provided, pricing_scheme must be flat, per_unit, or percentage.
cost_type string false none Indicates how to interpret the item’s cost (e.g., flat, percentage). If provided, pricing_scheme must be flat, per_unit, or percentage; required if cost is provided. Defaults to amount if an empty value is specified.
description string false none Item description.
internal_note string false none Notes for internal use.
manufacturer string false none Name of the item’s manufacturer. Cannot be provided with manufacturer_id.
manufacturer_id string false none Unique ID of the manufacturer. Cannot be provided with manufacturer.
name string false none Name of the item.
percentage_price_category_ids [string] false none List of category IDs for percentage-based pricing. If provided, pricing_scheme must be percentage; required if pricing_scheme is percentage.
percentage_price_decimal string false none Percentage used for pricing. If provided, pricing_scheme must be percentage; required if pricing scheme is percentage.
price_decimal string false none Unit price of the item. If provided, pricing_scheme must be flat or per_unit; validate decimal.
pricing_scheme string false none The method used to calculate the item’s price. Defaults to per_unit if omitted.
quantity_help_tip string false none Tooltip or help text related to quantity selection.
recurring boolean false none Whether the item is billed on a recurring schedule.
recurring_interval string false none Billing interval for recurring items. If provided, recurring must be true; required if recurring is true.
restrict_discounting boolean false none Disables discounts on the item.
show_option_prices boolean false none Whether to display option prices next to the base price.
sku string false none Stock keeping unit for inventory tracking.
supplier string false none Name of the supplier. Cannot be provided with supplier_id.
supplier_id string false none ID of the supplier. Cannot be provided with supplier.
taxable boolean false none Indicates whether the item is taxable. Defaults to per_unit if omitted.
weight_decimal string false none Item weight in decimal format.

Enumerated Values

Property Value
cost_type amount
cost_type percentage
pricing_scheme per_unit
pricing_scheme flat
pricing_scheme tiered_volume
pricing_scheme tiered_stepped
pricing_scheme percentage
recurring_interval monthly
recurring_interval quarterly
recurring_interval semi_annually
recurring_interval annually

LineItem

{
  "category": "Desktop",
  "created_at": "2019-08-24T14:15:22Z",
  "description": "Item Description",
  "id": "litm_2r5WHJ1RvX8aCEyhQA6VhWpLuAb",
  "manufacturer": "Acme Corp",
  "modified_at": "2019-08-24T14:15:22Z",
  "name": "My Item",
  "part_number": "string",
  "quantity": 0,
  "recurring": true,
  "supplier": "Acme Supplier",
  "supplier_sku": "string",
  "taxable": true,
  "unit_cost": 0,
  "unit_price": 0
}

Represents an individual item added to a quote.

Properties

Name Type Required Restrictions Description
category string false none The name of the category the line item falls under.
created_at string(date-time) false none Timestamp when the line item was created.
description string false none Text description of the line item.
id string false none Unique identifier for the line item.
manufacturer string false none Name of the item’s manufacturer.
modified_at string(date-time) false none Timestamp when the line item was last updated.
name string false none Name of the product or service in the line item.
part_number string false none Manufacturer part number, if applicable.
quantity number false none Quantity of the item being quoted.
recurring boolean false none Indicates if the item is recurring (e.g., subscription-based).
supplier string false none Name of the item’s supplier.
supplier_sku string false none Supplier’s stock keeping unit for the item.
taxable boolean false none Whether this line item is subject to tax.
unit_cost number false none The cost per unit for the item.
unit_price number false none The price per unit charged to the customer.

LineItemCreateRequest

{
  "category": "Desktop",
  "description": "Sample Description",
  "manufacturer": "Acme Corp",
  "name": "Sample Item",
  "part_number": "string",
  "quantity": 10,
  "quote_id": "quot_2r5WHEQLKFsyKdyIj5daPCp7mjF",
  "recurring": true,
  "supplier": "Acme supplier",
  "supplier_sku": "string",
  "taxable": true,
  "unit_cost": 0,
  "unit_price": 0
}

Used to add a new line item to a quote.

Properties

Name Type Required Restrictions Description
category string true none Category under which the new line item should be created.
description string false none Optional text description of the line item.
manufacturer string false none Name of the manufacturer for the line item.
name string true none Name of the line item.
part_number string false none Optional part number from the manufacturer.
quantity number true none Number of units being quoted.
quote_id string true none ID of the quote this line item belongs to.
recurring boolean false none Whether the item recurs on a subscription basis.
supplier string false none Name of the item’s supplier.
supplier_sku string false none SKU assigned by the supplier.
taxable boolean false none Whether this item is taxable.
unit_cost number false none Cost per unit to your organization.
unit_price number false none Price per unit charged to the customer.

Manufacturer

{
  "created_at": "2019-08-24T14:15:22Z",
  "id": "manu_1jAEZdbtkbLFBAU1Tt0ouKpiBUe",
  "modified_at": "2019-08-24T14:15:22Z",
  "name": "Samsung"
}

Represents a product manufacturer.

Properties

Name Type Required Restrictions Description
created_at string(date-time) false none Timestamp when the manufacturer record was created.
id string false none Unique identifier for the manufacturer.
modified_at string(date-time) false none Timestamp when the manufacturer record was last modified.
name string false none Name of the manufacturer.

ManufacturerCreateRequest

{
  "name": "Samsung"
}

Used to create a new manufacturer entry.

Properties

Name Type Required Restrictions Description
name string true none Name of the manufacturer to be created.

ManufacturerList

{
  "data": [
    {
      "created_at": "2019-08-24T14:15:22Z",
      "id": "manu_1jAEZdbtkbLFBAU1Tt0ouKpiBUe",
      "modified_at": "2019-08-24T14:15:22Z",
      "name": "Samsung"
    }
  ],
  "has_more": false,
  "total_count": 1
}

A list of manufacturers in the system.

Properties

Name Type Required Restrictions Description
data [Manufacturer] false none Array of manufacturer objects.
has_more boolean false none Indicates whether more manufacturers exist beyond this page.
total_count integer false none Total number of manufacturers returned.

ManufacturerUpdateRequest

{
  "name": "Samsung"
}

Used to update manufacturer information.

Properties

Name Type Required Restrictions Description
name string true none Updated name for the manufacturer.

Quote

{
  "annual_cost_decimal": null,
  "annual_discount_decimal": null,
  "annual_discounted_subtotal_decimal": null,
  "annual_margin_decimal": null,
  "annual_subtotal_decimal": null,
  "annual_tax_total_decimal": null,
  "annual_total_decimal": null,
  "annual_upfront_payments": null,
  "autotask_opportunity_id": "abc123def456",
  "billing_address_1": "4289 Reserve St",
  "billing_address_2": null,
  "billing_city": "Lakefield",
  "billing_country_iso": "CA",
  "billing_first_name": "John",
  "billing_last_name": "Doe",
  "billing_organization": "Microsoft",
  "billing_region_iso": "ON",
  "connectwise_opportunity_id": "ghi789jkl012",
  "contact_id": "cont_1yTKYdrjvY7R04NDq57ZpufLFjk",
  "created_at": "2019-08-24T14:15:22Z",
  "currency_iso": "CAD",
  "custom_number": "Quote Custom Number",
  "draft": false,
  "email_first_sent_at": "2019-08-24T14:15:22Z",
  "email_last_sent_at": "2019-08-24T14:15:22Z",
  "email_status": "sent",
  "expired_at": "2019-08-24T14:15:22Z",
  "flagged": false,
  "halo_opportunity_id": "mno345pqr678",
  "hubspot_deal_id": "stu901vwx234",
  "id": "quot_2TSEPTEfnooIhvA83l78R0nEqR5",
  "internal_notes": "some internal notes",
  "kaseya_opportunity_id": "yza567bcd890",
  "modified_at": "2019-08-24T14:15:22Z",
  "monthly_cost_decimal": "30.10",
  "monthly_discount_decimal": "4.00",
  "monthly_discounted_subtotal_decimal": "50.10",
  "monthly_margin_decimal": "15.00",
  "monthly_subtotal_decimal": "60.00",
  "monthly_tax_total_decimal": "9.68",
  "monthly_total_decimal": "61.00",
  "monthly_upfront_payments": "1",
  "name": "Sample Quote",
  "number": "13",
  "one_time_cost_decimal": "2.00",
  "one_time_discount_decimal": "6.00",
  "one_time_discounted_subtotal_decimal": "8.00",
  "one_time_margin_decimal": "2.00",
  "one_time_subtotal_decimal": "6.00",
  "one_time_tax_total_decimal": "1.75",
  "one_time_total_decimal": "10.75",
  "owner_first_name": "Walter",
  "owner_id": "user_2TSEPTEfnooIhvA83l78R0nEqR5",
  "owner_last_name": "Melon",
  "pipedrive_deal_id": "efg123hij456",
  "quarterly_cost_decimal": null,
  "quarterly_discount_decimal": null,
  "quarterly_discounted_subtotal_decimal": null,
  "quarterly_margin_decimal": null,
  "quarterly_subtotal_decimal": null,
  "quarterly_tax_total_decimal": null,
  "quarterly_total_decimal": null,
  "quarterly_upfront_payments": null,
  "quickbooks_invoice_id": "klm789nop012",
  "revision": "3",
  "salesforce_opportunity_id": "qrs345tuv678",
  "semi_annual_cost_decimal": null,
  "semi_annual_discount_decimal": null,
  "semi_annual_discounted_subtotal_decimal": null,
  "semi_annual_margin_decimal": null,
  "semi_annual_subtotal_decimal": null,
  "semi_annual_tax_total_decimal": null,
  "semi_annual_total_decimal": null,
  "semi_annual_upfront_payments": null,
  "shipping_address_1": "2130 Thurston Dr",
  "shipping_address_2": null,
  "shipping_city": "Orleans",
  "shipping_country_iso": "CA",
  "shipping_decimal": "1.00",
  "shipping_first_name": "Jane",
  "shipping_last_name": "Doe",
  "shipping_organization": "FedEx",
  "shipping_region_iso": "ON",
  "status": "pending",
  "upfront_cost_decimal": "50.00",
  "upfront_discount_decimal": "6.00",
  "upfront_discounted_subtotal_decimal": "154.00",
  "upfront_margin_decimal": "30.00",
  "upfront_subtotal_decimal": "160.00",
  "upfront_tax_total_decimal": "15.75",
  "upfront_total_decimal": "173.00",
  "uuid": "1436-e2a121e6-d4b3-4d6b-9ad3-e8b877f8580f",
  "won_at": "2019-08-24T14:15:22Z",
  "xero_invoice_id": "wxy901zab234",
  "zoho_deal_id": "cde567fgh890"
}

Represents a full sales quote with pricing details.

Properties

Name Type Required Restrictions Description
annual_cost_decimal string¦null false none Total annual cost before discounts, tax, and margin.
annual_discount_decimal string¦null false none Annual discount amount applied to the quote.
annual_discounted_subtotal_decimal string¦null false none Annual subtotal after discounts but before tax.
annual_margin_decimal string¦null false none Gross profit margin for the annual portion of the quote.
annual_subtotal_decimal string¦null false none Annual subtotal before discount and tax.
annual_tax_total_decimal string¦null false none Total tax applied to annual items.
annual_total_decimal string¦null false none Final total for annual items including tax and discounts.
annual_upfront_payments string¦null false none Upfront payments required for annual items.
autotask_opportunity_id string¦null false none External Autotask intergration opportunity ID
billing_address_1 string¦null false none First line of the billing address.
billing_address_2 string¦null false none Second line of the billing address.
billing_city string¦null false none City of the billing address.
billing_country_iso string¦null false none ISO country code of the billing address.
billing_first_name string¦null false none First name of the billing contact.
billing_last_name string¦null false none Last name of the billing contact.
billing_organization string¦null false none Organization associated with the billing contact.
billing_region_iso string¦null false none ISO region/state code for the billing address.
connectwise_opportunity_id string¦null false none External ConnectWise intergration opportunity ID for integration
contact_id string false none ID of the contact associated with the quote.
created_at string(date-time) false none Timestamp when the quote was created.
currency_iso string false none ISO code for the currency used in the quote.
custom_number string¦null false none Custom quote number provided by the user.
draft boolean false none Indicates whether the quote is still in draft status.
email_first_sent_at string(date-time)¦null false none Timestamp when the quote was first sent via email.
email_last_sent_at string(date-time)¦null false none Timestamp when the quote was most recently emailed.
email_status string false none Current email status of the quote (e.g., sent, failed).
expired_at string(date-time) false none Timestamp indicating when the quote expires.
flagged boolean false none Indicates if the quote is flagged for follow-up or review.
halo_opportunity_id string¦null false none External Halo intergration opportunity ID for integration
hubspot_deal_id string¦null false none External HubSpot intergration deal ID for integration
id string false none Unique identifier for the quote.
internal_notes string false none Internal notes related to the quote.
kaseya_opportunity_id string¦null false none External Kaseya intergration opportunity ID for integration
modified_at string(date-time) false none Timestamp of the most recent update.
monthly_cost_decimal string¦null false none Monthly cost before discounts and tax.
monthly_discount_decimal string¦null false none Monthly discount applied.
monthly_discounted_subtotal_decimal string¦null false none Monthly subtotal after discounts.
monthly_margin_decimal string¦null false none Margin for the monthly portion.
monthly_subtotal_decimal string¦null false none Monthly subtotal before discounts and tax.
monthly_tax_total_decimal string¦null false none Tax total for monthly items.
monthly_total_decimal string¦null false none Total for monthly items including discounts and tax.
monthly_upfront_payments string¦null false none Upfront payments for monthly items.
name string false none Display name of the quote.
number string false none System-generated or user-defined quote number.
one_time_cost_decimal string¦null false none Cost for one-time items before discounts and tax.
one_time_discount_decimal string¦null false none Discount amount for one-time items.
one_time_discounted_subtotal_decimal string¦null false none Subtotal for one-time items after discounts.
one_time_margin_decimal string¦null false none Margin on one-time items.
one_time_subtotal_decimal string¦null false none Subtotal for one-time items before tax and discount.
one_time_tax_total_decimal string¦null false none Total tax for one-time items.
one_time_total_decimal string¦null false none Final total for one-time items.
owner_first_name string¦null false none First name of the quote owner.
owner_id string false none ID of the quote owner.
owner_last_name string¦null false none Last name of the quote owner.
pipedrive_deal_id string¦null false none External PipeDrive intergration deal ID for integration
quarterly_cost_decimal string¦null false none Quarterly cost before discounts and tax.
quarterly_discount_decimal string¦null false none Discount applied to quarterly items.
quarterly_discounted_subtotal_decimal string¦null false none Subtotal after discount for quarterly items.
quarterly_margin_decimal string¦null false none Margin on quarterly items.
quarterly_subtotal_decimal string¦null false none Subtotal before tax and discount for quarterly items.
quarterly_tax_total_decimal string¦null false none Tax applied to quarterly items.
quarterly_total_decimal string¦null false none Total amount for quarterly items.
quarterly_upfront_payments string¦null false none Upfront payments for quarterly items.
quickbooks_invoice_id string¦null false none External QuickBooks intergration invoice ID for integration
revision string false none Revision identifier for the quote.
salesforce_opportunity_id string¦null false none External Salesforce intergration opportunity ID for integration
semi_annual_cost_decimal string¦null false none Semi-annual cost before discounts and tax.
semi_annual_discount_decimal string¦null false none Discount for semi-annual items.
semi_annual_discounted_subtotal_decimal string¦null false none Subtotal after discounts for semi-annual items.
semi_annual_margin_decimal string¦null false none Margin on semi-annual items.
semi_annual_subtotal_decimal string¦null false none Subtotal before discount and tax.
semi_annual_tax_total_decimal string¦null false none Total tax for semi-annual items.
semi_annual_total_decimal string¦null false none Final amount for semi-annual items.
semi_annual_upfront_payments string¦null false none Upfront payments for semi-annual items.
shipping_address_1 string¦null false none First line of the shipping address.
shipping_address_2 string¦null false none Second line of the shipping address.
shipping_city string¦null false none City for the shipping address.
shipping_country_iso string¦null false none ISO country code for the shipping address.
shipping_decimal string¦null false none Cost of shipping as a decimal value.
shipping_first_name string¦null false none First name of the shipping contact.
shipping_last_name string¦null false none Last name of the shipping contact.
shipping_organization string¦null false none Organization for the shipping address.
shipping_region_iso string¦null false none ISO region/state code for the shipping address.
status string false none Current status of the quote (e.g., sent, won, lost).
upfront_cost_decimal string¦null false none Upfront cost before discount and tax.
upfront_discount_decimal string¦null false none Discount applied to upfront items.
upfront_discounted_subtotal_decimal string¦null false none Subtotal after discount for upfront items.
upfront_margin_decimal string false none Margin on upfront items.
upfront_subtotal_decimal string¦null false none Subtotal before tax and discount.
upfront_tax_total_decimal string¦null false none Tax total for upfront items.
upfront_total_decimal string false none Final total for upfront items.
uuid string false none Universally unique identifier for the quote.
won_at string(date-time) false none Timestamp when the quote was marked as won.
xero_invoice_id string¦null false none External Xero intergration invoice ID for integration
zoho_deal_id string¦null false none External Zoho intergration deal ID for integration

QuoteCreateRequest

{
  "appended_content": "Appended content goes here",
  "contact_id": "cont_2r5WGA5WDExgSYmnZp0TVVQqFLA",
  "cover_letter": "Cover letter details go here",
  "currency_abbr": "CAD",
  "name": "Draft Quote 1",
  "sp_contact_id": "a56f8961-82f8-4de8-949f-d3e06b7200c1",
  "template_id": "tmpl_2r5WHEQLKFsyKdyIj5daPCp7mjF"
}

Used to generate a new quote.

Properties

Name Type Required Restrictions Description
appended_content string false none Additional content to be appended to the quote document.
contact_id string true none ID of the contact associated with the quote.
cover_letter string false none Optional cover letter to include with the quote.
currency_abbr string false none Abbreviation of the currency used for the quote (e.g., USD, CAD).
name string false none Display name for the new quote.
sp_contact_id string false none ID of the ScalePad contact.
template_id string true none ID of the quote template to use.

QuoteCreateResponse

{
  "id": "quot_2r5CZzZNKjHlB7FvizOgceEHUhK",
  "url": "https://development.quoter.com/admin/quotes/draft_by_public_id/quot_2r5CZzZNKjHlB7FvizOgceEHUhK"
}

Returns confirmation and URL after creating a quote.

Properties

Name Type Required Restrictions Description
id string false none Unique identifier for the newly created quote.
url string false none URL pointing to the created quote.

QuoteList

{
  "data": [
    {
      "annual_cost_decimal": null,
      "annual_discount_decimal": null,
      "annual_discounted_subtotal_decimal": null,
      "annual_margin_decimal": null,
      "annual_subtotal_decimal": null,
      "annual_tax_total_decimal": null,
      "annual_total_decimal": null,
      "annual_upfront_payments": null,
      "autotask_opportunity_id": "abc123def456",
      "billing_address_1": "4289 Reserve St",
      "billing_address_2": null,
      "billing_city": "Lakefield",
      "billing_country_iso": "CA",
      "billing_first_name": "John",
      "billing_last_name": "Doe",
      "billing_organization": "Microsoft",
      "billing_region_iso": "ON",
      "connectwise_opportunity_id": "ghi789jkl012",
      "contact_id": "cont_1yTKYdrjvY7R04NDq57ZpufLFjk",
      "created_at": "2019-08-24T14:15:22Z",
      "currency_iso": "CAD",
      "custom_number": "Quote Custom Number",
      "draft": false,
      "email_first_sent_at": "2019-08-24T14:15:22Z",
      "email_last_sent_at": "2019-08-24T14:15:22Z",
      "email_status": "sent",
      "expired_at": "2019-08-24T14:15:22Z",
      "flagged": false,
      "halo_opportunity_id": "mno345pqr678",
      "hubspot_deal_id": "stu901vwx234",
      "id": "quot_2TSEPTEfnooIhvA83l78R0nEqR5",
      "internal_notes": "some internal notes",
      "kaseya_opportunity_id": "yza567bcd890",
      "modified_at": "2019-08-24T14:15:22Z",
      "monthly_cost_decimal": "30.10",
      "monthly_discount_decimal": "4.00",
      "monthly_discounted_subtotal_decimal": "50.10",
      "monthly_margin_decimal": "15.00",
      "monthly_subtotal_decimal": "60.00",
      "monthly_tax_total_decimal": "9.68",
      "monthly_total_decimal": "61.00",
      "monthly_upfront_payments": "1",
      "name": "Sample Quote",
      "number": "13",
      "one_time_cost_decimal": "2.00",
      "one_time_discount_decimal": "6.00",
      "one_time_discounted_subtotal_decimal": "8.00",
      "one_time_margin_decimal": "2.00",
      "one_time_subtotal_decimal": "6.00",
      "one_time_tax_total_decimal": "1.75",
      "one_time_total_decimal": "10.75",
      "owner_first_name": "Walter",
      "owner_id": "user_2TSEPTEfnooIhvA83l78R0nEqR5",
      "owner_last_name": "Melon",
      "pipedrive_deal_id": "efg123hij456",
      "quarterly_cost_decimal": null,
      "quarterly_discount_decimal": null,
      "quarterly_discounted_subtotal_decimal": null,
      "quarterly_margin_decimal": null,
      "quarterly_subtotal_decimal": null,
      "quarterly_tax_total_decimal": null,
      "quarterly_total_decimal": null,
      "quarterly_upfront_payments": null,
      "quickbooks_invoice_id": "klm789nop012",
      "revision": "3",
      "salesforce_opportunity_id": "qrs345tuv678",
      "semi_annual_cost_decimal": null,
      "semi_annual_discount_decimal": null,
      "semi_annual_discounted_subtotal_decimal": null,
      "semi_annual_margin_decimal": null,
      "semi_annual_subtotal_decimal": null,
      "semi_annual_tax_total_decimal": null,
      "semi_annual_total_decimal": null,
      "semi_annual_upfront_payments": null,
      "shipping_address_1": "2130 Thurston Dr",
      "shipping_address_2": null,
      "shipping_city": "Orleans",
      "shipping_country_iso": "CA",
      "shipping_decimal": "1.00",
      "shipping_first_name": "Jane",
      "shipping_last_name": "Doe",
      "shipping_organization": "FedEx",
      "shipping_region_iso": "ON",
      "status": "pending",
      "upfront_cost_decimal": "50.00",
      "upfront_discount_decimal": "6.00",
      "upfront_discounted_subtotal_decimal": "154.00",
      "upfront_margin_decimal": "30.00",
      "upfront_subtotal_decimal": "160.00",
      "upfront_tax_total_decimal": "15.75",
      "upfront_total_decimal": "173.00",
      "uuid": "1436-e2a121e6-d4b3-4d6b-9ad3-e8b877f8580f",
      "won_at": "2019-08-24T14:15:22Z",
      "xero_invoice_id": "wxy901zab234",
      "zoho_deal_id": "cde567fgh890"
    }
  ],
  "has_more": false,
  "total_count": 1
}

A list of quotes stored in the system.

Properties

Name Type Required Restrictions Description
data [Quote] false none Array of quote objects.
has_more boolean false none Indicates if there are additional quotes to fetch.
total_count integer false none Total number of quotes.

QuoteTemplate

{
  "created_at": "2019-08-24T14:15:22Z",
  "id": "tmpl_2lf68j5opaIrjmZmPZUwUXxP3R3",
  "modified_at": "2019-08-24T14:15:22Z",
  "slug": "sample-template",
  "title": "Sample Template"
}

Represents a reusable layout or structure for quotes.

Properties

Name Type Required Restrictions Description
created_at string(date-time) false none Timestamp when the quote template was created.
id string false none Unique identifier for the quote template.
modified_at string(date-time) false none Timestamp when the quote template was last updated.
slug string false none URL-safe identifier for the template.
title string false none Human-readable title of the template.

QuoteTemplateList

{
  "data": [
    {
      "created_at": "2019-08-24T14:15:22Z",
      "id": "tmpl_2lf68j5opaIrjmZmPZUwUXxP3R3",
      "modified_at": "2019-08-24T14:15:22Z",
      "slug": "sample-template",
      "title": "Sample Template"
    }
  ],
  "has_more": false,
  "total_count": 1
}

A list of available quote templates.

Properties

Name Type Required Restrictions Description
data [QuoteTemplate] false none Array of quote template objects.
has_more boolean false none Indicates if additional quote templates exist.
total_count integer false none Total number of available quote templates.

Supplier

{
  "created_at": "2019-08-24T14:15:22Z",
  "id": "sup_1jAEZdbtkbLFBAU1Tt0ouKpiBUe",
  "modified_at": "2019-08-24T14:15:22Z",
  "name": "Newegg"
}

Represents a supplier providing goods or services.

Properties

Name Type Required Restrictions Description
created_at string(date-time) false none Timestamp when the supplier record was created.
id string false none Unique identifier for the supplier.
modified_at string(date-time) false none Timestamp when the supplier record was last updated.
name string false none Name of the supplier.

SupplierCreateRequest

{
  "name": "Newegg"
}

Used to add a new supplier record.

Properties

Name Type Required Restrictions Description
name string true none Name of the supplier to be created.

SupplierList

{
  "data": [
    {
      "created_at": "2019-08-24T14:15:22Z",
      "id": "sup_1jAEZdbtkbLFBAU1Tt0ouKpiBUe",
      "modified_at": "2019-08-24T14:15:22Z",
      "name": "Newegg"
    }
  ],
  "has_more": false,
  "total_count": 1
}

A list of suppliers in the system.

Properties

Name Type Required Restrictions Description
data [Supplier] false none Array of supplier objects.
has_more boolean false none Indicates if more suppliers exist beyond the current page.
total_count integer false none Total number of suppliers available.

SupplierUpdateRequest

{
  "name": "Newegg"
}

Used to update the name of a supplier.

Properties

Name Type Required Restrictions Description
name string true none Updated name of the supplier.

Warehouse

{
  "id": "itmw_2tdpIbLafl0Big0WPgsTbVt1BFa",
  "name": "Warehouse1",
  "quantity": "20"
}

Represents a warehouse and its available inventory.

Properties

Name Type Required Restrictions Description
id string false none Unique identifier for the warehouse.
name string false none Name of the warehouse.
quantity string false none Quantity of items currently in stock at the warehouse.

WarehouseMapping

{
  "name": "wh1",
  "quantity": "wh1_qty"
}

Maps warehouse data from supplier feeds to internal structures.

Properties

Name Type Required Restrictions Description
name string false none Name of the warehouse used in supplier data feeds.
quantity string false none Quantity of stock available in that warehouse from the supplier’s feed.