Skip to content

Add a catalog product

POST
/api/v1/products
curl --request POST \
--url https://app.prokure.ca/api/v1/products \
--header 'Content-Type: application/json' \
--data '{ "oem_partner_id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "name": "example", "model": "example", "description": "example", "commodity_codes": [ "example" ], "specs": { "additionalProperty": "example" }, "rep_status": "carried", "source_url": "https://example.com" }'

Saves the product and durably requests background indexing and staged matching. Success does not mean indexing has finished.

Adds one product to the catalog. The combination of partner, name and model must be unique; a repeat is refused rather than silently overwriting the existing row.

Media typeapplication/json

Adds one product to the catalog. The combination of partner, name and model must be unique; a repeat is refused rather than silently overwriting the existing row.

object
oem_partner_id
required

Must be one of this account’s manufacturer partners.

string format: uuid
/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/
name
required
string
>= 1 characters <= 200 characters
model
Any of:
string
>= 1 characters <= 100 characters
description
Any of:
string
>= 1 characters <= 4000 characters
commodity_codes
Array<string>
<= 50 items
specs

Free-form technical attributes stored verbatim. A bounded, deterministically ordered subset informs background indexing and matching as untrusted catalog data.

object
key
additional properties
rep_status
string
default: carried
Allowed values: carried catalog
source_url
Any of:
string format: uri

Default Response

Media typeapplication/json
object
id
required
string
oem_partner_id
required
string
oem_name
required

The manufacturer partner’s name, joined on for display.

string
name
required
string
model
required
Any of:
string
description
required
Any of:
string
commodity_codes
required
Array<string>
specs
required
object
key
additional properties
rep_status
required

Carried = stocked and represented; catalog = available to quote.

string
Allowed values: carried catalog
status
required

Products are never deleted. A discontinued product stops influencing matching and can be reactivated.

string
Allowed values: active discontinued
source
required
Any of:
string
source_url
required
Any of:
string
created_at
required
string format: date-time
/^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$/
updated_at
required
string format: date-time
/^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$/
Example
{
"rep_status": "carried",
"status": "active"
}

Default Response

Media typeapplication/json
object
error
required
string
Allowed values: unauthorized forbidden no_membership membership_disabled unverified_email identity_conflict insufficient_scope validation_failed not_found missing_file unsupported_type file_too_large empty_document unreadable_document context_doc_cap_reached rule_cap_reached already_reverted superseded already_exists partner_not_authorized invalid_import rate_limited internal
message
required
string
requestId
required
string
issues
Array
issue_count
integer
>= -9007199254740991 <= 9007199254740991
Example
{
"error": "unauthorized"
}

Default Response

Media typeapplication/json
object
error
required
string
Allowed values: unauthorized forbidden no_membership membership_disabled unverified_email identity_conflict insufficient_scope validation_failed not_found missing_file unsupported_type file_too_large empty_document unreadable_document context_doc_cap_reached rule_cap_reached already_reverted superseded already_exists partner_not_authorized invalid_import rate_limited internal
message
required
string
requestId
required
string
issues
Array
issue_count
integer
>= -9007199254740991 <= 9007199254740991
Example
{
"error": "unauthorized"
}

Default Response

Media typeapplication/json
object
error
required
string
Allowed values: unauthorized forbidden no_membership membership_disabled unverified_email identity_conflict insufficient_scope validation_failed not_found missing_file unsupported_type file_too_large empty_document unreadable_document context_doc_cap_reached rule_cap_reached already_reverted superseded already_exists partner_not_authorized invalid_import rate_limited internal
message
required
string
requestId
required
string
issues
Array
issue_count
integer
>= -9007199254740991 <= 9007199254740991
Example
{
"error": "unauthorized"
}

Default Response

Media typeapplication/json
object
error
required
string
Allowed values: unauthorized forbidden no_membership membership_disabled unverified_email identity_conflict insufficient_scope validation_failed not_found missing_file unsupported_type file_too_large empty_document unreadable_document context_doc_cap_reached rule_cap_reached already_reverted superseded already_exists partner_not_authorized invalid_import rate_limited internal
message
required
string
requestId
required
string
issues
Array
issue_count
integer
>= -9007199254740991 <= 9007199254740991
Example
{
"error": "unauthorized"
}

Default Response

Media typeapplication/json
object
error
required
string
Allowed values: unauthorized forbidden no_membership membership_disabled unverified_email identity_conflict insufficient_scope validation_failed not_found missing_file unsupported_type file_too_large empty_document unreadable_document context_doc_cap_reached rule_cap_reached already_reverted superseded already_exists partner_not_authorized invalid_import rate_limited internal
message
required
string
requestId
required
string
issues
Array
issue_count
integer
>= -9007199254740991 <= 9007199254740991
Example
{
"error": "unauthorized"
}

Default Response

Media typeapplication/json
object
error
required
string
Allowed values: unauthorized forbidden no_membership membership_disabled unverified_email identity_conflict insufficient_scope validation_failed not_found missing_file unsupported_type file_too_large empty_document unreadable_document context_doc_cap_reached rule_cap_reached already_reverted superseded already_exists partner_not_authorized invalid_import rate_limited internal
message
required
string
requestId
required
string
issues
Array
issue_count
integer
>= -9007199254740991 <= 9007199254740991
Example
{
"error": "unauthorized"
}

Default Response

Media typeapplication/json
object
error
required
string
Allowed values: unauthorized forbidden no_membership membership_disabled unverified_email identity_conflict insufficient_scope validation_failed not_found missing_file unsupported_type file_too_large empty_document unreadable_document context_doc_cap_reached rule_cap_reached already_reverted superseded already_exists partner_not_authorized invalid_import rate_limited internal
message
required
string
requestId
required
string
issues
Array
issue_count
integer
>= -9007199254740991 <= 9007199254740991
Example
{
"error": "unauthorized"
}