Skip to content
Dials Docs

Reconciliation

Back office: linking unmatched listings to models. Requires an admin session.

Unmatched listings, grouped by the identity the provider claims

GET/reconciliation

The reconciliation queue: live listings the brand+reference matcher could not link, grouped by the identity the provider claims, so one decision resolves every listing of the same watch.

Query Parameters

page
integer·min 1·default 1
Example1
pageSize
integer·min 1·max 100·default 24
Example24
q
string

Search scraped brand / reference

ref
string·default with
Values
withwithout
sort
string·default count
Values
countnewest

Responses

Create a catalog model from unmatched listings

POST/reconciliation/models

Creates the model (and its brand/series when they do not exist yet) and links every live unmatched listing claiming the given identity; the group becomes catalogued in one step.

Request Body

application/json
brandId
string

Existing catalog brand

brandName
string·min 1

Find-or-create by slug when no brandId

seriesId
string

Existing series of the brand

seriesName
string·min 1

Find-or-create under the brand when no seriesId

nameRequired
string·min 1
referenceNumberRequired
string·min 1
description
string·min 1
releaseYear
integer·min 1500·max 2100
diameter
number
thickness
number
waterResistance
number·min 0
caseMaterials
string[]
bezelMaterials
string[]
dialColors
string[]
bandMaterials
string[]
bandColors
string[]
glass
string·min 1
imageUrl
string <uri>

Seeds the model's FRONT picture; the crop pipeline picks it up from there.

listingIds
string[]·max 200

Responses

Link unmatched listings to an existing model

POST/reconciliation/link

Attaches a group's live unmatched listings to a model that already exists; the answer when the matcher was simply too cautious about a reference variant.

Request Body

application/json
modelIdRequired
string
listingIds
string[]·max 200

Responses

Update an existing model from unmatched listings, then link them

POST/reconciliation/models/update

Applies the admin's per-attribute picks (catalog value kept unless a listing value was chosen) to a 'may already exist' model, keeps every reference matchable (the old primary and the group's scraped reference become alternates when needed), and links the group's live unmatched listings to the model in the same transaction.

Request Body

application/json
modelIdRequired
string
name
string·min 1
referenceNumber
string·min 1

New primary reference; the old one stays matchable as an alternate.

description
string·min 1
releaseYear
integer·min 1500·max 2100
diameter
number
caseMaterials
string[]
bezelMaterials
string[]
dialColors
string[]
bandMaterials
string[]
bandColors
string[]
glass
string·min 1
imageUrl
string <uri>

Replaces the model's FRONT picture (croppedUrl reset so the crop pipeline re-runs); only a model with no picture yet gets a new row.

listingIds
string[]·max 200

Responses