Skip to main content
POST

Authorizations

Authorization
string
header
required

Use your app's API key as the username, and leave the password blank

Path Parameters

connection_id
string<uuid>
required

The connection to act on.

Body

application/json
kind
enum<string>
required

Which lists to look in. entity is customers, vendors, employees and other names together, which share one name space in QuickBooks; item is every item type. Any other kind is its own list.

Available options:
customer,
vendor,
employee,
other_name,
entity,
item,
account,
class,
standard_terms,
date_driven_terms,
sales_tax_code,
payment_method,
ship_method,
price_level,
customer_type,
vendor_type,
job_type,
sales_rep,
customer_msg
name
string
required

The name your app has for the record: its own name, without its parent's when you send parent. Without a parent, a full name such as Smith:Kitchen is matched exactly too. Its words with a digit (a store, unit or job number, such as 1234 in Subway #1234) must agree with a record's, leading zeros aside.

Required string length: 1 - 255
Example:

"ACME, Inc."

exact_only
boolean | null
default:false

true answers only exact or none: the one record with this full name, as QuickBooks compares names, or nothing. Never a fuzzy match, so its answer can be used without asking. fields are ignored.

fields
object | null

For customers, vendors, employees and other names (customer, vendor, employee, other_name and entity): what else your app knows about the record. The same account_number makes a strong match whatever the name. The same email, phone or postal_code, with a name at least 0.4 alike, makes a strong match. Each one in common is a reason and ranks a candidate higher; company_name and city do only that. An email's or account number's case doesn't count, nor a phone's punctuation, country code or extension, nor a postal code's spaces or a US ZIP+4's last four digits. The city and postal_code are compared with the record's billing address (a vendor's, employee's or other name's own address).

min_score
number | null

This call's candidate threshold, in place of 0.44: raise it to list only close names, lower it (down to 0.3, the least alike a match reads) to list more. A record that's a candidate for another reason (two letters swapped, or strong but not alone) stays one, and exact and strong don't change. Not taken with exact_only: true.

Required range: 0.3 <= x <= 1
parent
string | null

For a job, a sub-item, a subaccount or the like: its parent's full name or ListID, so only that parent's children are matched. Without one, children match on their own name too, with a reason naming the parent. Taken for customer, entity, item, account, class, customer_type, vendor_type and job_type. A parent the index doesn't hold matches nothing.

Maximum string length: 255
Example:

"Smith"

Response

The answer, from the index as it stands.

A match's answer: the tier, and the record or the candidates.

candidates
object[]
required

For candidates: up to 10 records, best first (exact or strong ones that weren't alone, those with your account_number first; then those with the same numbers in their name, then those with your numbers and more; then the most fields in common; then the highest score), for a person to choose from. Empty otherwise. candidates_total says how many qualified.

Maximum array length: 10
candidates_total
integer
required

For candidates: how many records qualified, of which candidates lists the first 10; 0 for any other tier. More than 10 means the name alone doesn't pick out a record, as in a file of numbered locations (Subway #1201, Subway #1202...). Rather than show a long list of near-identical names, ask for what tells them apart (the number, a city, a postal code, an account number) and match again with it.

Required range: x >= 0
candidates_total_complete
boolean
required

false when candidates_total is a lower bound: a match reads at most 50 records, the most alike first, and it read that many, so more may qualify. true otherwise, and always for exact, strong and none.

index
object
required

The index the answer came from.

match
enum<string>
required

The first tier that applies. exact: one record has this full name, as QuickBooks compares names (case and the spaces at either end don't count, and a run of spaces matches one). strong: exactly one record is the same once punctuation, accents, &, a leading the, company suffixes (Inc, LLC, Co...), spacing or word order are set aside; or has the same number in its name and a name at least 0.4 alike (Subway #1234 for Subway Store 1234); or (customers, vendors, employees and other names) has the account_number you sent, or shares the email, phone or postal_code you sent and has a name at least 0.4 alike. Two or more like that are candidates instead. candidates: records whose names are like this one, best first. none: nothing like it. A name's numbers must agree: when both names have words with a digit (leading zeros aside), the record must have every one you sent. One with a different number instead is neither strong nor a candidate, unless it's exact or has the account_number you sent. One with your numbers and more (7-Eleven #42 for 7-Eleven) can be a candidate, never strong. With exact_only, only exact or none.

Available options:
exact,
strong,
candidates,
none
record
object | null
required

The record, for exact and strong; null otherwise. Use an exact match as it is. Confirm a strong one first, as you would a candidate: Acme Inc and Acme LLC are a strong match, and can be two companies.