Skip to content

Get a product match

View as Markdown
GET
/product-matches/{matchId}
  • Production and sandbox. The token decides the environment.https://api.beautyrouter.com/v1/product-matches/{matchId}
curl --request GET \
--url https://api.beautyrouter.com/v1/product-matches/match-9Lk4jHg7Fd \
--header 'Authorization: Bearer <token>'

Returns one product match. The match must belong to the company of the logged-in user, otherwise the request fails with not_found.

matchId
required
string

The product match ID.

Example

match-9Lk4jHg7Fd

The product match.

Media typeapplication/json
object
id
required

The product match ID.

string
externalId
required

Your ID for the product. Unique within the company.

string
>= 1 characters <= 128 characters
status
required

in_review: Beauty Router is matching the product. needs_reply: Beauty Router needs more information, asked in question. matched: final, with productId.

string
Allowed values: in_review needs_reply matched
productId

The matched product ID. Only when status is matched.

string
question

What Beauty Router needs to know. Only when status is needs_reply.

string
createdAt
required
string format: date-time
updatedAt
required
string format: date-time

Examples

ExampleMatch that needs a reply
{
"id": "match-9Lk4jHg7Fd",
"externalId": "inv-10517",
"status": "needs_reply",
"question": "Is this product from Jadewell or Amberlin?",
"createdAt": "2026-10-27T09:14:02Z",
"updatedAt": "2026-10-27T16:40:31Z"
}

invalid_user_token: the user token is missing or wrong. user_token_expired: the user token expired. Log the user in again with POST /v1/login.

Media typeapplication/json

The body of every error response.

object
error
required
object
code
required

A stable error code.

string
Allowed values: invalid_app_token invalid_user_token user_token_expired origin_not_allowed ip_not_allowed user_cannot_manage_company user_cannot_order company_blocked company_not_verified app_setup_incomplete not_found validation_failed email_invalid_format email_domain_not_found email_mailbox_not_found address_state_without_license hazmat_destination ship_to_restricted verification_data_missing document_locked document_already_uploaded file_too_large file_type_not_supported reply_not_expected order_action_not_allowed supplier_refused_cancel order_total_changed order_has_problems idempotency_key_reused idempotency_key_in_use rate_limit_exceeded internal_error
message
required

A sentence for developers. It can change, so do not match on it.

string
field

The request field that caused the error. Only some errors have it.

string
missing

Only on verification_data_missing and app_setup_incomplete. What still needs to be set.

Array<string>
quote

Only on order_total_changed and order_has_problems. A fresh quote.

object
groups
required

One group per supplier. Each group becomes one order.

Array<object>
object
supplierId
required
string
lines
required
Array<object>
object
productId
required
string
quantity
required
integer
unitPrice
required

An amount in dollars, with up to two decimal places.

number
discount
required

The discount on the whole line, in US dollars.

number
total
required

An amount in dollars, with up to two decimal places.

number
productsTotal
required

The total of the lines, in US dollars.

number
orderDiscount
required

The discount on the whole order, in US dollars.

number
shipping
required
object
amount
required

The shipping charge in US dollars, or null when it cannot be worked out.

number | null
kind
required
string
Allowed values: free flat carrier
freeShippingRemaining
required

How much more to order for free shipping, or null when it does not apply.

number | null
salesTax
required

The sales tax in US dollars, or null when it cannot be worked out.

number | null
taxExemption
required
object
certificateId
required

The exemption certificate used, or null.

string | null
notAppliedReason
required

Why no certificate applies, or null when one does.

string | null
Allowed values: no_certificate other_state not_reviewed
total
required

The amount the salon pays for this group in US dollars, or null when it cannot be worked out. Send it back as expectedTotal. A group with problems has no expectedTotal.

number | null
chargeTiming
required

now: Beauty Router charges the card when the order is created. after_verification: the company is prequalified, so the charge waits until its verification ends.

string
Allowed values: now after_verification
problems
required
Array<object>
object
code
required

What stops a group or the whole request. See Problems.

string
Allowed values: buying_suspended supplier_unavailable address_state_without_license ship_to_restricted hazmat_destination address_not_deliverable connection_required connection_blocked insufficient_stock product_unavailable shipping_unavailable tax_unavailable delivery_address_required delivery_phone_required payment_card_required payment_card_unusable quantity_limit_exceeded order_limit_exceeded order_below_minimum
message
required

A sentence you can show. It can change, so do not match on it.

string
productId

The product. Only on problems with one product.

string
supplierId

The supplier. Only on problems with one supplier.

string
available

How many units can be ordered. Only on insufficient_stock.

integer
unresolvedLines
required

The lines no supplier can take.

Array<object>
object
productId
required
string
quantity
required
integer
problems
required
Array<object>
object
code
required

What stops a group or the whole request. See Problems.

string
Allowed values: buying_suspended supplier_unavailable address_state_without_license ship_to_restricted hazmat_destination address_not_deliverable connection_required connection_blocked insufficient_stock product_unavailable shipping_unavailable tax_unavailable delivery_address_required delivery_phone_required payment_card_required payment_card_unusable quantity_limit_exceeded order_limit_exceeded order_below_minimum
message
required

A sentence you can show. It can change, so do not match on it.

string
productId

The product. Only on problems with one product.

string
supplierId

The supplier. Only on problems with one supplier.

string
available

How many units can be ordered. Only on insufficient_stock.

integer
companyProblems
required

What stops every group.

Array<object>
object
code
required

What stops a group or the whole request. See Problems.

string
Allowed values: buying_suspended supplier_unavailable address_state_without_license ship_to_restricted hazmat_destination address_not_deliverable connection_required connection_blocked insufficient_stock product_unavailable shipping_unavailable tax_unavailable delivery_address_required delivery_phone_required payment_card_required payment_card_unusable quantity_limit_exceeded order_limit_exceeded order_below_minimum
message
required

A sentence you can show. It can change, so do not match on it.

string
productId

The product. Only on problems with one product.

string
supplierId

The supplier. Only on problems with one supplier.

string
available

How many units can be ordered. Only on insufficient_stock.

integer
total
required

The sum of all the groups in US dollars, or null when a group’s total is.

number | null
currency
required

Always usd.

string
Allowed value: usd

Examples

{
"error": {
"code": "invalid_user_token",
"message": "The user token is missing or not valid."
}
}

not_found: the object does not exist, or the user has no access to it.

Media typeapplication/json

The body of every error response.

object
error
required
object
code
required

A stable error code.

string
Allowed values: invalid_app_token invalid_user_token user_token_expired origin_not_allowed ip_not_allowed user_cannot_manage_company user_cannot_order company_blocked company_not_verified app_setup_incomplete not_found validation_failed email_invalid_format email_domain_not_found email_mailbox_not_found address_state_without_license hazmat_destination ship_to_restricted verification_data_missing document_locked document_already_uploaded file_too_large file_type_not_supported reply_not_expected order_action_not_allowed supplier_refused_cancel order_total_changed order_has_problems idempotency_key_reused idempotency_key_in_use rate_limit_exceeded internal_error
message
required

A sentence for developers. It can change, so do not match on it.

string
field

The request field that caused the error. Only some errors have it.

string
missing

Only on verification_data_missing and app_setup_incomplete. What still needs to be set.

Array<string>
quote

Only on order_total_changed and order_has_problems. A fresh quote.

object
groups
required

One group per supplier. Each group becomes one order.

Array<object>
object
supplierId
required
string
lines
required
Array<object>
object
productId
required
string
quantity
required
integer
unitPrice
required

An amount in dollars, with up to two decimal places.

number
discount
required

The discount on the whole line, in US dollars.

number
total
required

An amount in dollars, with up to two decimal places.

number
productsTotal
required

The total of the lines, in US dollars.

number
orderDiscount
required

The discount on the whole order, in US dollars.

number
shipping
required
object
amount
required

The shipping charge in US dollars, or null when it cannot be worked out.

number | null
kind
required
string
Allowed values: free flat carrier
freeShippingRemaining
required

How much more to order for free shipping, or null when it does not apply.

number | null
salesTax
required

The sales tax in US dollars, or null when it cannot be worked out.

number | null
taxExemption
required
object
certificateId
required

The exemption certificate used, or null.

string | null
notAppliedReason
required

Why no certificate applies, or null when one does.

string | null
Allowed values: no_certificate other_state not_reviewed
total
required

The amount the salon pays for this group in US dollars, or null when it cannot be worked out. Send it back as expectedTotal. A group with problems has no expectedTotal.

number | null
chargeTiming
required

now: Beauty Router charges the card when the order is created. after_verification: the company is prequalified, so the charge waits until its verification ends.

string
Allowed values: now after_verification
problems
required
Array<object>
object
code
required

What stops a group or the whole request. See Problems.

string
Allowed values: buying_suspended supplier_unavailable address_state_without_license ship_to_restricted hazmat_destination address_not_deliverable connection_required connection_blocked insufficient_stock product_unavailable shipping_unavailable tax_unavailable delivery_address_required delivery_phone_required payment_card_required payment_card_unusable quantity_limit_exceeded order_limit_exceeded order_below_minimum
message
required

A sentence you can show. It can change, so do not match on it.

string
productId

The product. Only on problems with one product.

string
supplierId

The supplier. Only on problems with one supplier.

string
available

How many units can be ordered. Only on insufficient_stock.

integer
unresolvedLines
required

The lines no supplier can take.

Array<object>
object
productId
required
string
quantity
required
integer
problems
required
Array<object>
object
code
required

What stops a group or the whole request. See Problems.

string
Allowed values: buying_suspended supplier_unavailable address_state_without_license ship_to_restricted hazmat_destination address_not_deliverable connection_required connection_blocked insufficient_stock product_unavailable shipping_unavailable tax_unavailable delivery_address_required delivery_phone_required payment_card_required payment_card_unusable quantity_limit_exceeded order_limit_exceeded order_below_minimum
message
required

A sentence you can show. It can change, so do not match on it.

string
productId

The product. Only on problems with one product.

string
supplierId

The supplier. Only on problems with one supplier.

string
available

How many units can be ordered. Only on insufficient_stock.

integer
companyProblems
required

What stops every group.

Array<object>
object
code
required

What stops a group or the whole request. See Problems.

string
Allowed values: buying_suspended supplier_unavailable address_state_without_license ship_to_restricted hazmat_destination address_not_deliverable connection_required connection_blocked insufficient_stock product_unavailable shipping_unavailable tax_unavailable delivery_address_required delivery_phone_required payment_card_required payment_card_unusable quantity_limit_exceeded order_limit_exceeded order_below_minimum
message
required

A sentence you can show. It can change, so do not match on it.

string
productId

The product. Only on problems with one product.

string
supplierId

The supplier. Only on problems with one supplier.

string
available

How many units can be ordered. Only on insufficient_stock.

integer
total
required

The sum of all the groups in US dollars, or null when a group’s total is.

number | null
currency
required

Always usd.

string
Allowed value: usd

Examples

Examplenot_found
{
"error": {
"code": "not_found",
"message": "The object was not found."
}
}

internal_error: something failed on Beauty Router’s side. Try again later.

Media typeapplication/json

The body of every error response.

object
error
required
object
code
required

A stable error code.

string
Allowed values: invalid_app_token invalid_user_token user_token_expired origin_not_allowed ip_not_allowed user_cannot_manage_company user_cannot_order company_blocked company_not_verified app_setup_incomplete not_found validation_failed email_invalid_format email_domain_not_found email_mailbox_not_found address_state_without_license hazmat_destination ship_to_restricted verification_data_missing document_locked document_already_uploaded file_too_large file_type_not_supported reply_not_expected order_action_not_allowed supplier_refused_cancel order_total_changed order_has_problems idempotency_key_reused idempotency_key_in_use rate_limit_exceeded internal_error
message
required

A sentence for developers. It can change, so do not match on it.

string
field

The request field that caused the error. Only some errors have it.

string
missing

Only on verification_data_missing and app_setup_incomplete. What still needs to be set.

Array<string>
quote

Only on order_total_changed and order_has_problems. A fresh quote.

object
groups
required

One group per supplier. Each group becomes one order.

Array<object>
object
supplierId
required
string
lines
required
Array<object>
object
productId
required
string
quantity
required
integer
unitPrice
required

An amount in dollars, with up to two decimal places.

number
discount
required

The discount on the whole line, in US dollars.

number
total
required

An amount in dollars, with up to two decimal places.

number
productsTotal
required

The total of the lines, in US dollars.

number
orderDiscount
required

The discount on the whole order, in US dollars.

number
shipping
required
object
amount
required

The shipping charge in US dollars, or null when it cannot be worked out.

number | null
kind
required
string
Allowed values: free flat carrier
freeShippingRemaining
required

How much more to order for free shipping, or null when it does not apply.

number | null
salesTax
required

The sales tax in US dollars, or null when it cannot be worked out.

number | null
taxExemption
required
object
certificateId
required

The exemption certificate used, or null.

string | null
notAppliedReason
required

Why no certificate applies, or null when one does.

string | null
Allowed values: no_certificate other_state not_reviewed
total
required

The amount the salon pays for this group in US dollars, or null when it cannot be worked out. Send it back as expectedTotal. A group with problems has no expectedTotal.

number | null
chargeTiming
required

now: Beauty Router charges the card when the order is created. after_verification: the company is prequalified, so the charge waits until its verification ends.

string
Allowed values: now after_verification
problems
required
Array<object>
object
code
required

What stops a group or the whole request. See Problems.

string
Allowed values: buying_suspended supplier_unavailable address_state_without_license ship_to_restricted hazmat_destination address_not_deliverable connection_required connection_blocked insufficient_stock product_unavailable shipping_unavailable tax_unavailable delivery_address_required delivery_phone_required payment_card_required payment_card_unusable quantity_limit_exceeded order_limit_exceeded order_below_minimum
message
required

A sentence you can show. It can change, so do not match on it.

string
productId

The product. Only on problems with one product.

string
supplierId

The supplier. Only on problems with one supplier.

string
available

How many units can be ordered. Only on insufficient_stock.

integer
unresolvedLines
required

The lines no supplier can take.

Array<object>
object
productId
required
string
quantity
required
integer
problems
required
Array<object>
object
code
required

What stops a group or the whole request. See Problems.

string
Allowed values: buying_suspended supplier_unavailable address_state_without_license ship_to_restricted hazmat_destination address_not_deliverable connection_required connection_blocked insufficient_stock product_unavailable shipping_unavailable tax_unavailable delivery_address_required delivery_phone_required payment_card_required payment_card_unusable quantity_limit_exceeded order_limit_exceeded order_below_minimum
message
required

A sentence you can show. It can change, so do not match on it.

string
productId

The product. Only on problems with one product.

string
supplierId

The supplier. Only on problems with one supplier.

string
available

How many units can be ordered. Only on insufficient_stock.

integer
companyProblems
required

What stops every group.

Array<object>
object
code
required

What stops a group or the whole request. See Problems.

string
Allowed values: buying_suspended supplier_unavailable address_state_without_license ship_to_restricted hazmat_destination address_not_deliverable connection_required connection_blocked insufficient_stock product_unavailable shipping_unavailable tax_unavailable delivery_address_required delivery_phone_required payment_card_required payment_card_unusable quantity_limit_exceeded order_limit_exceeded order_below_minimum
message
required

A sentence you can show. It can change, so do not match on it.

string
productId

The product. Only on problems with one product.

string
supplierId

The supplier. Only on problems with one supplier.

string
available

How many units can be ordered. Only on insufficient_stock.

integer
total
required

The sum of all the groups in US dollars, or null when a group’s total is.

number | null
currency
required

Always usd.

string
Allowed value: usd

Examples

Exampleinternal_error
{
"error": {
"code": "internal_error",
"message": "Something went wrong. Try again later."
}
}