Canonical v1 contract
The Hintadata OpenAPI contract is the source of truth for generated SDK methods, request models, response models, errors, and examples. SDK clients use the production v1 base URL and a server-side Bearer API key.
Catalog and comparison operations
Use searchProducts to resolve a normalized product identifier, compareProducts for a two-to-four product decision view, getProductComparison for current delivered offers, and getProductPriceHistory for aggregate or store-specific price history.
Errors and retries
Validate inputs before sending them. Retry temporary 429 and 5xx responses according to Retry-After and the SDK retry policy; do not retry authentication, validation, or not-found errors without changing the request.
GET /v1/connected-catalog
/v1/connected-cataloglistConnectedProductsReads the explicitly bound workspace and environment. No demo fallback. Monetary values in this catalogue are decimal strings.
Parameters
qquerystringOptionallimitqueryintegerOptionalcursorquerystringOptionalCode examples
curl --fail-with-body -X GET "https://hintadata.fi/v1/connected-catalog?q=&limit=50&cursor=" \
-H "Authorization: Bearer $HINTADATA_API_KEY"Responses7
200Source-owned productsapplication/json
{
"items": [],
"total": 0,
"limit": 0,
"next_cursor": ""
}Generated from the status contract400Invalid request
{
"error": {
"code": "request_failed",
"message": "Invalid request",
"request_id": "req_example"
}
}Generated from the status contract401Authentication required
{
"error": {
"code": "unauthorized",
"message": "Authentication required",
"request_id": "req_example"
}
}Generated from the status contract403Workspace, scope or entitlement denied
{
"error": {
"code": "forbidden",
"message": "Workspace, scope or entitlement denied",
"request_id": "req_example"
}
}Generated from the status contract429Quota exceeded
{
"error": {
"code": "rate_limited",
"message": "Quota exceeded",
"request_id": "req_example"
}
}Generated from the status contract502Invalid backend response
{
"error": {
"code": "server_error",
"message": "Invalid backend response",
"request_id": "req_example"
}
}Generated from the status contract503Backend not available or configured
{
"error": {
"code": "server_error",
"message": "Backend not available or configured",
"request_id": "req_example"
}
}Generated from the status contractGET /v1/connected-catalog/{productId}
/v1/connected-catalog/{productId}getConnectedProductParameters
productIdpathstringRequiredCode examples
curl --fail-with-body -X GET "https://hintadata.fi/v1/connected-catalog/" \
-H "Authorization: Bearer $HINTADATA_API_KEY"Responses8
200Observed productapplication/json
{
"canonical_product_id": "",
"title": "",
"brand": "",
"variant": "",
"gtin": "",
"match_status": "matched",
"match_method": "exact_gtin",
"offers": [],
"comparison_groups": [],
"freshness_max_hours": 0
}Generated from the status contract400Invalid request
{
"error": {
"code": "request_failed",
"message": "Invalid request",
"request_id": "req_example"
}
}Generated from the status contract401Authentication required
{
"error": {
"code": "unauthorized",
"message": "Authentication required",
"request_id": "req_example"
}
}Generated from the status contract403Workspace, scope or entitlement denied
{
"error": {
"code": "forbidden",
"message": "Workspace, scope or entitlement denied",
"request_id": "req_example"
}
}Generated from the status contract404Product not found
{
"error": {
"code": "not_found",
"message": "Product not found",
"request_id": "req_example"
}
}Generated from the status contract429Quota exceeded
{
"error": {
"code": "rate_limited",
"message": "Quota exceeded",
"request_id": "req_example"
}
}Generated from the status contract502Invalid backend response
{
"error": {
"code": "server_error",
"message": "Invalid backend response",
"request_id": "req_example"
}
}Generated from the status contract503Backend unavailable
{
"error": {
"code": "server_error",
"message": "Backend unavailable",
"request_id": "req_example"
}
}Generated from the status contractGET /v1/connected-catalog/{productId}/history
/v1/connected-catalog/{productId}/historygetConnectedProductHistoryParameters
productIdpathstringRequiredlimitqueryintegerOptionalcursorquerystringOptionalCode examples
curl --fail-with-body -X GET "https://hintadata.fi/v1/connected-catalog//history?limit=50&cursor=" \
-H "Authorization: Bearer $HINTADATA_API_KEY"Responses9
200Observed historyapplication/json
{
"items": [],
"next_cursor": "",
"order": "observed",
"coverage": {
"event_count": 0,
"first_observed_at": "",
"last_observed_at": ""
},
"gaps": []
}Generated from the status contract400Invalid request
{
"error": {
"code": "request_failed",
"message": "Invalid request",
"request_id": "req_example"
}
}Generated from the status contract401Authentication required
{
"error": {
"code": "unauthorized",
"message": "Authentication required",
"request_id": "req_example"
}
}Generated from the status contract403Workspace, scope or entitlement denied
{
"error": {
"code": "forbidden",
"message": "Workspace, scope or entitlement denied",
"request_id": "req_example"
}
}Generated from the status contract404Product not found
{
"error": {
"code": "not_found",
"message": "Product not found",
"request_id": "req_example"
}
}Generated from the status contract422Invalid or expired cursor
{
"error": {
"code": "validation_error",
"message": "Invalid or expired cursor",
"request_id": "req_example"
}
}Generated from the status contract429Quota exceeded
{
"error": {
"code": "rate_limited",
"message": "Quota exceeded",
"request_id": "req_example"
}
}Generated from the status contract502Invalid backend response
{
"error": {
"code": "server_error",
"message": "Invalid backend response",
"request_id": "req_example"
}
}Generated from the status contract503Backend unavailable
{
"error": {
"code": "server_error",
"message": "Backend unavailable",
"request_id": "req_example"
}
}Generated from the status contractGET /v1/webhooks
/v1/webhookslistWebhooksRequires webhooks:write and webhooks:manage. Tenant and test/live mode come from the API key.
Code examples
curl --fail-with-body -X GET "https://hintadata.fi/v1/webhooks" \
-H "Authorization: Bearer $HINTADATA_API_KEY"Responses8
200Successful responseapplication/json
{
"items": []
}Generated from the status contract400Request rejected; inspect the safe error code.application/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract401Request rejected; inspect the safe error code.application/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract403Request rejected; inspect the safe error code.application/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract404Request rejected; inspect the safe error code.application/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract409Request rejected; inspect the safe error code.application/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract429Request rejected; inspect the safe error code.application/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract503Request rejected; inspect the safe error code.application/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contractPOST /v1/webhooks
/v1/webhookscreateWebhookRequires webhooks:write and webhooks:manage. Tenant and test/live mode come from the API key.
Parameters
Idempotency-KeyheaderstringRequiredRequest bodyRequired
application/jsonCode examples
curl --fail-with-body -X POST "https://hintadata.fi/v1/webhooks" \
-H "Authorization: Bearer $HINTADATA_API_KEY" \
-H "Content-Type: application/json" \
--data '{
"url": "",
"events": [],
"enabled": true
}'Responses8
201Successful responseapplication/json
{
"rotation": {
"id": "",
"prepared_at": 0,
"expires_at": 0
},
"breaker": {
"failures": 0,
"open_until": 0,
"probe_until": 0
},
"incident": {
"id": "",
"status": "open",
"opened_at": 0,
"acknowledged_at": 0,
"resolved_at": 0,
"code": ""
},
"id": "",
"url": "",
"events": [],
"enabled": true,
"created_at": "",
"secret": ""
}Generated from the status contract400Request rejected; inspect the safe error code.application/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract401Request rejected; inspect the safe error code.application/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract403Request rejected; inspect the safe error code.application/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract404Request rejected; inspect the safe error code.application/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract409Request rejected; inspect the safe error code.application/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract429Request rejected; inspect the safe error code.application/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract503Request rejected; inspect the safe error code.application/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contractPATCH /v1/webhooks/{webhook_id}
/v1/webhooks/{webhook_id}updateWebhookRequires webhooks:write and webhooks:manage. Tenant and test/live mode come from the API key.
Parameters
webhook_idpathstringRequiredIdempotency-KeyheaderstringOptionalOptional replay key for update/delete. Repeating an identical keyed request returns its original result for 24 hours without repeating cancellation or audit effects.
Request bodyRequired
application/jsonCode examples
curl --fail-with-body -X PATCH "https://hintadata.fi/v1/webhooks/" \
-H "Authorization: Bearer $HINTADATA_API_KEY" \
-H "Content-Type: application/json" \
--data '{
"url": "",
"events": [],
"enabled": true
}'Responses8
200Successful responseapplication/json
{
"rotation": {
"id": "",
"prepared_at": 0,
"expires_at": 0
},
"breaker": {
"failures": 0,
"open_until": 0,
"probe_until": 0
},
"incident": {
"id": "",
"status": "open",
"opened_at": 0,
"acknowledged_at": 0,
"resolved_at": 0,
"code": ""
},
"id": "",
"url": "",
"events": [],
"enabled": true,
"created_at": ""
}Generated from the status contract400Request rejected; inspect the safe error code.application/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract401Request rejected; inspect the safe error code.application/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract403Request rejected; inspect the safe error code.application/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract404Request rejected; inspect the safe error code.application/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract409Request rejected; inspect the safe error code.application/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract429Request rejected; inspect the safe error code.application/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract503Request rejected; inspect the safe error code.application/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contractDELETE /v1/webhooks/{webhook_id}
/v1/webhooks/{webhook_id}deleteWebhookRequires webhooks:write and webhooks:manage. Tenant and test/live mode come from the API key.
Parameters
webhook_idpathstringRequiredIdempotency-KeyheaderstringOptionalOptional replay key for update/delete. Repeating an identical keyed request returns its original result for 24 hours without repeating cancellation or audit effects.
Code examples
curl --fail-with-body -X DELETE "https://hintadata.fi/v1/webhooks/" \
-H "Authorization: Bearer $HINTADATA_API_KEY"Responses8
200Successful responseapplication/json
{
"deleted": false
}Generated from the status contract400Request rejected; inspect the safe error code.application/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract401Request rejected; inspect the safe error code.application/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract403Request rejected; inspect the safe error code.application/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract404Request rejected; inspect the safe error code.application/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract409Request rejected; inspect the safe error code.application/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract429Request rejected; inspect the safe error code.application/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract503Request rejected; inspect the safe error code.application/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contractPOST /v1/webhooks/{webhook_id}/secret-rotation
/v1/webhooks/{webhook_id}/secret-rotationprepareWebhookSecretRotationRequires webhooks:write and webhooks:manage. Returns a pending secret and rotation.id; install both secrets at your receiver before activating. Preparation expires after 24 hours. The current signing secret remains active. Idempotent replays return the original secret response for 24 hours.
Parameters
webhook_idpathstringRequiredIdempotency-KeyheaderstringRequiredCode examples
curl --fail-with-body -X POST "https://hintadata.fi/v1/webhooks//secret-rotation" \
-H "Authorization: Bearer $HINTADATA_API_KEY"Responses8
200Successful responseapplication/json
{
"rotation": {
"id": "",
"prepared_at": 0,
"expires_at": 0
},
"breaker": {
"failures": 0,
"open_until": 0,
"probe_until": 0
},
"incident": {
"id": "",
"status": "open",
"opened_at": 0,
"acknowledged_at": 0,
"resolved_at": 0,
"code": ""
},
"id": "",
"url": "",
"events": [],
"enabled": true,
"created_at": "",
"secret": ""
}Generated from the status contract400Request rejected; inspect the safe error code.application/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract401Request rejected; inspect the safe error code.application/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract403Request rejected; inspect the safe error code.application/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract404Request rejected; inspect the safe error code.application/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract409Request rejected; inspect the safe error code.application/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract429Request rejected; inspect the safe error code.application/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract503Request rejected; inspect the safe error code.application/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contractPOST /v1/webhooks/{webhook_id}/secret-rotation/activate
/v1/webhooks/{webhook_id}/secret-rotation/activateactivateWebhookSecretRotationRequires webhooks:write and webhooks:manage. Explicitly confirm the receiver accepts the prepared secret. Signing switches atomically. Keep accepting the old secret for at least 60 seconds for in-flight requests, then retire it at the receiver. Never returns secret material.
Parameters
webhook_idpathstringRequiredIdempotency-KeyheaderstringRequiredRequest bodyRequired
application/jsonCode examples
curl --fail-with-body -X POST "https://hintadata.fi/v1/webhooks//secret-rotation/activate" \
-H "Authorization: Bearer $HINTADATA_API_KEY" \
-H "Content-Type: application/json" \
--data '{
"rotation_id": "",
"confirm": true
}'Responses2
200Activated subscriptionapplication/json
{
"rotation": {
"id": "",
"prepared_at": 0,
"expires_at": 0
},
"breaker": {
"failures": 0,
"open_until": 0,
"probe_until": 0
},
"incident": {
"id": "",
"status": "open",
"opened_at": 0,
"acknowledged_at": 0,
"resolved_at": 0,
"code": ""
},
"id": "",
"url": "",
"events": [],
"enabled": true,
"created_at": ""
}Generated from the status contractdefaultSafe error code; authentication (401), authorization (403), missing subscription (404), invalid input (400), stale intent (409), capacity (429), or unavailable storage/encryption (503).application/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contractPOST /v1/webhooks/{webhook_id}/secret-rotation/cancel
/v1/webhooks/{webhook_id}/secret-rotation/cancelcancelWebhookSecretRotationRequires webhooks:write and webhooks:manage. Discards the preparation without changing the active signing secret. Remove the unused pending secret from the receiver.
Parameters
webhook_idpathstringRequiredIdempotency-KeyheaderstringRequiredRequest bodyRequired
application/jsonCode examples
curl --fail-with-body -X POST "https://hintadata.fi/v1/webhooks//secret-rotation/cancel" \
-H "Authorization: Bearer $HINTADATA_API_KEY" \
-H "Content-Type: application/json" \
--data '{
"rotation_id": ""
}'Responses2
200Unchanged active subscriptionapplication/json
{
"rotation": {
"id": "",
"prepared_at": 0,
"expires_at": 0
},
"breaker": {
"failures": 0,
"open_until": 0,
"probe_until": 0
},
"incident": {
"id": "",
"status": "open",
"opened_at": 0,
"acknowledged_at": 0,
"resolved_at": 0,
"code": ""
},
"id": "",
"url": "",
"events": [],
"enabled": true,
"created_at": ""
}Generated from the status contractdefaultSafe error code; authentication (401), authorization (403), missing subscription (404), invalid input (400), stale intent (409), capacity (429), or unavailable storage/encryption (503).application/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contractPOST /v1/webhooks/{webhook_id}/incidents/acknowledge
/v1/webhooks/{webhook_id}/incidents/acknowledgeacknowledgeWebhookIncidentRequires webhooks:write and webhooks:manage. Stops reminders, not retries or cooldown. Successful delivery resolves the incident and emits a recovery notification. Old failed deliveries remain in history.
Parameters
webhook_idpathstringRequiredIdempotency-KeyheaderstringRequiredRequest bodyRequired
application/jsonCode examples
curl --fail-with-body -X POST "https://hintadata.fi/v1/webhooks//incidents/acknowledge" \
-H "Authorization: Bearer $HINTADATA_API_KEY" \
-H "Content-Type: application/json" \
--data '{
"incident_id": ""
}'Responses2
200Acknowledged incident on subscriptionapplication/json
{
"rotation": {
"id": "",
"prepared_at": 0,
"expires_at": 0
},
"breaker": {
"failures": 0,
"open_until": 0,
"probe_until": 0
},
"incident": {
"id": "",
"status": "open",
"opened_at": 0,
"acknowledged_at": 0,
"resolved_at": 0,
"code": ""
},
"id": "",
"url": "",
"events": [],
"enabled": true,
"created_at": ""
}Generated from the status contractdefaultSafe error code; authentication (401), authorization (403), missing subscription (404), invalid input (400), stale intent (409), capacity (429), or unavailable storage/encryption (503).application/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contractGET /v1/webhook-deliveries
/v1/webhook-deliverieslistWebhookDeliveriesRequires webhooks:write and webhooks:manage. Tenant and test/live mode come from the API key.
Parameters
subscription_idquerystringOptionallimitqueryintegerOptionaloffsetqueryintegerOptionalCode examples
curl --fail-with-body -X GET "https://hintadata.fi/v1/webhook-deliveries?subscription_id=&limit=25&offset=0" \
-H "Authorization: Bearer $HINTADATA_API_KEY"Responses8
200Successful responseapplication/json
{
"items": [],
"total": 0,
"next_offset": ""
}Generated from the status contract400Request rejected; inspect the safe error code.application/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract401Request rejected; inspect the safe error code.application/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract403Request rejected; inspect the safe error code.application/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract404Request rejected; inspect the safe error code.application/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract409Request rejected; inspect the safe error code.application/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract429Request rejected; inspect the safe error code.application/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract503Request rejected; inspect the safe error code.application/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contractGET /v1/search
/v1/searchsearchProductsFind normalized products by AND-matching query tokens against product name, EAN or canonical ID, in stable source order. min_price is the lowest known available delivered price, or null; store_count counts distinct available stores.
Parameters
X-API-VersionheaderstringOptionalqquerystringRequiredProduct name, model, alias, or EAN.
limitqueryintegerOptionaloffsetqueryintegerOptionalCode examples
curl --fail-with-body -X GET "https://hintadata.fi/v1/search?q=sony+xm5&limit=25&offset=0" \
-H "Authorization: Bearer $HINTADATA_API_KEY"Responses10
200Ranked product matchesapplication/json
{
"query": "",
"total": 0,
"items": [],
"next_offset": "",
"evidence": {
"source_id": "",
"source_ref": "",
"observed_at": "",
"expires_at": "",
"market": "",
"currency": "",
"tax_basis": "inclusive"
}
}Generated from the status contract400Invalid requestapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract401API key requiredapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract403Scope or entitlement deniedapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract404Resource not foundapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract409Concurrent change or idempotency conflictapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract413Request too largeapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract429Rate or capacity limitapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract500Temporary server errorapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract503Source data or delivery is unavailableapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contractGET /v1/compare
/v1/comparecompareProductsCompare observed delivered prices for two to four exact product IDs. No suitability ranking or historic range. best_offer is null when no known available offer exists. Use product history separately.
Parameters
X-API-VersionheaderstringOptionalidsquerystringOptionalComma-separated list of two to four canonical product identifiers.
idquerystring[]OptionalRepeated product ID alternative to ids. Select two to four distinct IDs in total.
Code examples
curl --fail-with-body -X GET "https://hintadata.fi/v1/compare?ids=sony_wh1000xm5_black%2Csony_wh1000xm6_black&id=" \
-H "Authorization: Bearer $HINTADATA_API_KEY"Responses10
200Product comparisonapplication/json
{
"products": [],
"evidence": {
"source_id": "",
"source_ref": "",
"observed_at": "",
"expires_at": "",
"market": "",
"currency": "",
"tax_basis": "inclusive"
}
}Generated from the status contract400Invalid requestapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract401API key requiredapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract403Scope or entitlement deniedapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract404Resource not foundapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract409Concurrent change or idempotency conflictapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract413Request too largeapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract429Rate or capacity limitapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract500Temporary server errorapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract503Source data or delivery is unavailableapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contractGET /v1/products/{canonical_product_id}
/v1/products/{canonical_product_id}getProductComparisonParameters
X-API-VersionheaderstringOptionalcanonical_product_idpathstringRequiredCode examples
curl --fail-with-body -X GET "https://hintadata.fi/v1/products/sony_wh1000xm5_black" \
-H "Authorization: Bearer $HINTADATA_API_KEY"Responses10
200Product identity, offers, and recommendationapplication/json
{
"canonical_product_id": "",
"product_name": "",
"product": {
"canonical_product_id": "",
"product_name": "",
"brand": "",
"model": "",
"variant": "",
"category": "",
"ean": "",
"match_confidence": 0,
"match_status": "",
"image_path": "",
"specs": [],
"comparison_name": "",
"comparison_score": 0,
"comparison_badge": "",
"comparison_summary": ""
},
"offers": [],
"decision": {
"label": "",
"store": "",
"score": 0,
"delivered_price": 0,
"url": "",
"rationale": "",
"lowest_item_price": 0,
"lowest_item_store": "",
"evaluated_offer_count": 0,
"updated_at": ""
},
"evidence": {
"source_id": "",
"source_ref": "",
"observed_at": "",
"expires_at": "",
"market": "",
"currency": "",
"tax_basis": "inclusive"
}
}Generated from the status contract400Invalid requestapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract401API key requiredapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract403Scope or entitlement deniedapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract404Resource not foundapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract409Concurrent change or idempotency conflictapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract413Request too largeapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract429Rate or capacity limitapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract500Temporary server errorapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract503Source data or delivery is unavailableapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contractGET /v1/products/{canonical_product_id}/history
/v1/products/{canonical_product_id}/historygetProductPriceHistoryReturns aggregate price intelligence by default or chronological store price points when store is supplied.
Parameters
X-API-VersionheaderstringOptionalcanonical_product_idpathstringRequiredrangequerystringOptionalstorequerystringOptionalCode examples
curl --fail-with-body -X GET "https://hintadata.fi/v1/products/sony_wh1000xm5_black/history?range=90d&store=power.fi" \
-H "Authorization: Bearer $HINTADATA_API_KEY"Responses10
200Price intelligence or store historyapplication/json
{
"canonical_product_id": "",
"range": "7d",
"series": [],
"summary": {
"current_price": "",
"observation_count": 0
},
"evidence": {
"source_id": "",
"source_ref": "",
"observed_at": "",
"expires_at": "",
"market": "",
"currency": "",
"tax_basis": "inclusive"
}
}Generated from the status contract400Invalid requestapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract401API key requiredapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract403Scope or entitlement deniedapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract404Resource not foundapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract409Concurrent change or idempotency conflictapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract413Request too largeapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract429Rate or capacity limitapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract500Temporary server errorapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract503Source data or delivery is unavailableapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contractGET /v1/watchlists
/v1/watchlistslistPriceWatchesParameters
X-API-VersionheaderstringOptionallimitqueryintegerOptionaloffsetqueryintegerOptionalstatusquerystringOptionalcanonical_product_idquerystringOptionalCode examples
curl --fail-with-body -X GET "https://hintadata.fi/v1/watchlists?limit=25&offset=0&status=active&canonical_product_id=" \
-H "Authorization: Bearer $HINTADATA_API_KEY"Responses10
200Client-scoped watchesapplication/json
{
"total": 0,
"items": [],
"next_offset": ""
}Generated from the status contract400Invalid requestapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract401API key requiredapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract403Scope or entitlement deniedapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract404Resource not foundapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract409Concurrent change or idempotency conflictapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract413Request too largeapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract429Rate or capacity limitapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract500Temporary server errorapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract503Source data or delivery is unavailableapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contractPOST /v1/watchlists
/v1/watchlistscreatePriceWatchCreates a new watch; never replaces another watch. Idempotency-Key replays the same request. Live delivery must be configured.
Parameters
X-API-VersionheaderstringOptionalIdempotency-KeyheaderstringRequiredRequest bodyRequired
application/jsonCode examples
curl --fail-with-body -X POST "https://hintadata.fi/v1/watchlists" \
-H "Authorization: Bearer $HINTADATA_API_KEY" \
-H "Content-Type: application/json" \
--data '{
"canonical_product_id": "sony_wh1000xm5_black",
"condition": "target_price",
"target_price": 280,
"channel": "email",
"destination": "buyer@example.com"
}'Responses10
201Price watch createdapplication/json
Location{
"id": "",
"canonical_product_id": "",
"target_price": 0,
"channel": "email",
"destination": "",
"status": "active",
"created_at": "",
"updated_at": "",
"product": {
"canonical_product_id": "",
"product_name": "",
"brand": "",
"model": "",
"variant": "",
"image_path": "",
"match_confidence": 0,
"min_price": "",
"store_count": 0,
"relevance_score": 0
},
"current_price": "",
"target_reached": false,
"revision": 0,
"condition": "target_price",
"change_percent": 0,
"merchant_sku": "",
"availability": "available"
}Generated from the status contract400Invalid requestapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract401API key requiredapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract403Scope or entitlement deniedapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract404Resource not foundapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract409Concurrent change or idempotency conflictapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract413Request too largeapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract429Rate or capacity limitapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract500Temporary server errorapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract503Source data or delivery is unavailableapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contractPATCH /v1/watchlists/{watch_id}
/v1/watchlists/{watch_id}updatePriceWatchParameters
X-API-VersionheaderstringOptionalwatch_idpathstringRequiredRequest bodyRequired
application/jsonCode examples
curl --fail-with-body -X PATCH "https://hintadata.fi/v1/watchlists/00000000-0000-4000-8000-000000000001" \
-H "Authorization: Bearer $HINTADATA_API_KEY" \
-H "Content-Type: application/json" \
--data '{
"expected_revision": 1,
"target_price": 265,
"status": "active"
}'Responses10
200Updated price watchapplication/json
{
"id": "",
"canonical_product_id": "",
"target_price": 0,
"channel": "email",
"destination": "",
"status": "active",
"created_at": "",
"updated_at": "",
"product": {
"canonical_product_id": "",
"product_name": "",
"brand": "",
"model": "",
"variant": "",
"image_path": "",
"match_confidence": 0,
"min_price": "",
"store_count": 0,
"relevance_score": 0
},
"current_price": "",
"target_reached": false,
"revision": 0,
"condition": "target_price",
"change_percent": 0,
"merchant_sku": "",
"availability": "available"
}Generated from the status contract400Invalid requestapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract401API key requiredapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract403Scope or entitlement deniedapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract404Resource not foundapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract409Concurrent change or idempotency conflictapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract413Request too largeapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract429Rate or capacity limitapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract500Temporary server errorapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract503Source data or delivery is unavailableapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contractDELETE /v1/watchlists/{watch_id}
/v1/watchlists/{watch_id}deletePriceWatchParameters
X-API-VersionheaderstringOptionalwatch_idpathstringRequiredCode examples
curl --fail-with-body -X DELETE "https://hintadata.fi/v1/watchlists/00000000-0000-4000-8000-000000000001" \
-H "Authorization: Bearer $HINTADATA_API_KEY"Responses10
204Price watch deleted
400Invalid requestapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract401API key requiredapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract403Scope or entitlement deniedapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract404Resource not foundapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract409Concurrent change or idempotency conflictapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract413Request too largeapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract429Rate or capacity limitapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract500Temporary server errorapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract503Source data or delivery is unavailableapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contractGET /v1/pricing/recommendations
/v1/pricing/recommendationslistPricingRecommendationsParameters
limitqueryintegerOptionaloffsetqueryintegerOptionalcanonical_product_idquerystringOptionalCode examples
curl --fail-with-body -X GET "https://hintadata.fi/v1/pricing/recommendations?limit=25&offset=0&canonical_product_id=" \
-H "Authorization: Bearer $HINTADATA_API_KEY"Responses9
200Successful responseapplication/json
{
"items": [],
"total": 0,
"next_offset": "",
"evidence": {
"source_id": "",
"source_ref": "",
"observed_at": "",
"expires_at": "",
"market": "",
"currency": "",
"tax_basis": "inclusive"
}
}Generated from the status contract400Invalid requestapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract401API key requiredapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract403Scope or entitlement deniedapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract404Resource not foundapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract409Concurrent change or idempotency conflictapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract413Request too largeapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract429Rate or capacity limitapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract503Source data or delivery is unavailableapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contractGET /v1/assortment/opportunities
/v1/assortment/opportunitieslistAssortmentOpportunitiesParameters
limitqueryintegerOptionaloffsetqueryintegerOptionalcanonical_product_idquerystringOptionalCode examples
curl --fail-with-body -X GET "https://hintadata.fi/v1/assortment/opportunities?limit=25&offset=0&canonical_product_id=" \
-H "Authorization: Bearer $HINTADATA_API_KEY"Responses9
200Successful responseapplication/json
{
"items": [],
"total": 0,
"next_offset": "",
"evidence": {
"source_id": "",
"source_ref": "",
"observed_at": "",
"expires_at": "",
"market": "",
"currency": "",
"tax_basis": "inclusive"
}
}Generated from the status contract400Invalid requestapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract401API key requiredapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract403Scope or entitlement deniedapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract404Resource not foundapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract409Concurrent change or idempotency conflictapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract413Request too largeapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract429Rate or capacity limitapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract503Source data or delivery is unavailableapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contractGET /v1/sourcing/options
/v1/sourcing/optionslistSourcingOptionsParameters
limitqueryintegerOptionaloffsetqueryintegerOptionalcanonical_product_idquerystringOptionalCode examples
curl --fail-with-body -X GET "https://hintadata.fi/v1/sourcing/options?limit=25&offset=0&canonical_product_id=" \
-H "Authorization: Bearer $HINTADATA_API_KEY"Responses9
200Successful responseapplication/json
{
"items": [],
"total": 0,
"next_offset": "",
"evidence": {
"source_id": "",
"source_ref": "",
"observed_at": "",
"expires_at": "",
"market": "",
"currency": "",
"tax_basis": "inclusive"
}
}Generated from the status contract400Invalid requestapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract401API key requiredapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract403Scope or entitlement deniedapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract404Resource not foundapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract409Concurrent change or idempotency conflictapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract413Request too largeapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract429Rate or capacity limitapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract503Source data or delivery is unavailableapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contractGET /v1/campaigns/signals
/v1/campaigns/signalslistCampaignSignalsParameters
limitqueryintegerOptionaloffsetqueryintegerOptionalcanonical_product_idquerystringOptionalCode examples
curl --fail-with-body -X GET "https://hintadata.fi/v1/campaigns/signals?limit=25&offset=0&canonical_product_id=" \
-H "Authorization: Bearer $HINTADATA_API_KEY"Responses9
200Successful responseapplication/json
{
"items": [],
"total": 0,
"next_offset": "",
"evidence": {
"source_id": "",
"source_ref": "",
"observed_at": "",
"expires_at": "",
"market": "",
"currency": "",
"tax_basis": "inclusive"
}
}Generated from the status contract400Invalid requestapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract401API key requiredapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract403Scope or entitlement deniedapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract404Resource not foundapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract409Concurrent change or idempotency conflictapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract413Request too largeapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract429Rate or capacity limitapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract503Source data or delivery is unavailableapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contractPUT /v1/sources/{source_id}/snapshot
/v1/sources/{source_id}/snapshotputSourceSnapshotParameters
source_idpathstringRequiredIdempotency-KeyheaderstringRequiredRequest bodyRequired
application/jsonCode examples
curl --fail-with-body -X PUT "https://hintadata.fi/v1/sources//snapshot" \
-H "Authorization: Bearer $HINTADATA_API_KEY" \
-H "Content-Type: application/json" \
--data '{
"evidence": {
"source_id": "",
"source_ref": "",
"observed_at": "",
"expires_at": "",
"market": "",
"currency": "",
"tax_basis": "inclusive"
},
"products": [],
"supplier_offers": [],
"campaign_signals": []
}'Responses9
200Successful responseapplication/json
{
"source_id": "",
"observed_at": "",
"products": 0,
"events_queued": 0
}Generated from the status contract400Invalid requestapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract401API key requiredapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract403Scope or entitlement deniedapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract404Resource not foundapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract409Concurrent change or idempotency conflictapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract413Request too largeapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract429Rate or capacity limitapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract503Source data or delivery is unavailableapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contractGET /v1/webhook-metrics
/v1/webhook-metricsgetWebhookMetricsRequires webhooks:write and webhooks:manage. Tenant and test/live mode come from the verified credential.
Code examples
curl --fail-with-body -X GET "https://hintadata.fi/v1/webhook-metrics" \
-H "Authorization: Bearer $HINTADATA_API_KEY"Responses8
200Successful responseapplication/json
{
"active_incidents": 0,
"unresolved_incidents": 0,
"counts": {
"pending": 0,
"sending": 0,
"delivered": 0,
"failed": 0,
"cancelled": 0
},
"oldest_pending_age_ms": 0,
"observed_at": 0,
"window_days": 7
}Generated from the status contract400Request rejected; inspect the safe error code.application/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract401Request rejected; inspect the safe error code.application/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract403Request rejected; inspect the safe error code.application/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract404Request rejected; inspect the safe error code.application/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract409Request rejected; inspect the safe error code.application/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract429Request rejected; inspect the safe error code.application/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract503Request rejected; inspect the safe error code.application/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contractGET /v1/webhook-audit
/v1/webhook-auditlistWebhookAuditRequires webhooks:write and webhooks:manage. Tenant and test/live mode come from the verified credential.
Code examples
curl --fail-with-body -X GET "https://hintadata.fi/v1/webhook-audit" \
-H "Authorization: Bearer $HINTADATA_API_KEY"Responses8
200Successful responseapplication/json
{
"items": []
}Generated from the status contract400Request rejected; inspect the safe error code.application/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract401Request rejected; inspect the safe error code.application/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract403Request rejected; inspect the safe error code.application/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract404Request rejected; inspect the safe error code.application/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract409Request rejected; inspect the safe error code.application/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract429Request rejected; inspect the safe error code.application/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract503Request rejected; inspect the safe error code.application/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contractPOST /v1/webhooks/{webhook_id}/test
/v1/webhooks/{webhook_id}/testtestWebhookRequires webhooks:write and webhooks:manage. Tenant and test/live mode come from the verified credential. Live only. Requires explicit confirmation; queues webhook.test with data {test:true}, never customer data. One test per endpoint per minute. No network request is made until a worker claims the delivery.
Parameters
webhook_idpathstringRequiredIdempotency-KeyheaderstringRequiredRequest bodyRequired
application/jsonCode examples
curl --fail-with-body -X POST "https://hintadata.fi/v1/webhooks//test" \
-H "Authorization: Bearer $HINTADATA_API_KEY" \
-H "Content-Type: application/json" \
--data '{
"confirm": true
}'Responses8
200Successful responseapplication/json
{
"attempt_history": [],
"id": "",
"event_id": "",
"event_type": "",
"subscription_id": "",
"created_at": "",
"status": "pending",
"attempts": 0,
"next_at": 0,
"http_status": "",
"completed_at": 0,
"cycle_attempts": 0,
"replays": 0,
"last_error_code": ""
}Generated from the status contract400Request rejected; inspect the safe error code.application/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract401Request rejected; inspect the safe error code.application/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract403Request rejected; inspect the safe error code.application/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract404Request rejected; inspect the safe error code.application/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract409Request rejected; inspect the safe error code.application/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract429Request rejected; inspect the safe error code.application/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract503Request rejected; inspect the safe error code.application/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contractPOST /v1/webhook-deliveries/{delivery_id}/retry
/v1/webhook-deliveries/{delivery_id}/retryretryWebhookDeliveryRequires webhooks:write and webhooks:manage. Tenant and test/live mode come from the verified credential. Live only. Up to three manual replays of failed deliveries within seven days. Destination and filters must be unchanged, subscription enabled and source observation current. Event and delivery IDs remain unchanged. Each cycle has eight attempts; idempotent for 24 hours.
Parameters
delivery_idpathstringRequiredIdempotency-KeyheaderstringRequiredCode examples
curl --fail-with-body -X POST "https://hintadata.fi/v1/webhook-deliveries//retry" \
-H "Authorization: Bearer $HINTADATA_API_KEY"Responses8
200Successful responseapplication/json
{
"attempt_history": [],
"id": "",
"event_id": "",
"event_type": "",
"subscription_id": "",
"created_at": "",
"status": "pending",
"attempts": 0,
"next_at": 0,
"http_status": "",
"completed_at": 0,
"cycle_attempts": 0,
"replays": 0,
"last_error_code": ""
}Generated from the status contract400Request rejected; inspect the safe error code.application/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract401Request rejected; inspect the safe error code.application/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract403Request rejected; inspect the safe error code.application/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract404Request rejected; inspect the safe error code.application/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract409Request rejected; inspect the safe error code.application/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract429Request rejected; inspect the safe error code.application/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract503Request rejected; inspect the safe error code.application/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contractPUT /v1/merchant/catalog
/v1/merchant/catalogimportMerchantCatalogRequires merchant:write. Replace the bounded merchant catalog projection, independently of market evidence. Empty items explicitly represents an empty assortment. Prices and costs use the declared currency and tax basis; missing costs prevent pricing recommendations.
Parameters
Idempotency-KeyheaderstringRequiredRequest bodyRequired
application/jsonCode examples
curl --fail-with-body -X PUT "https://hintadata.fi/v1/merchant/catalog" \
-H "Authorization: Bearer $HINTADATA_API_KEY" \
-H "Content-Type: application/json" \
--data '{
"evidence": {
"source_id": "",
"source_ref": "",
"observed_at": "",
"expires_at": "",
"market": "",
"currency": "",
"tax_basis": "inclusive"
},
"items": []
}'Responses9
200Successful responseapplication/json
{
"imported": 0,
"evidence": {
"source_id": "",
"source_ref": "",
"observed_at": "",
"expires_at": "",
"market": "",
"currency": "",
"tax_basis": "inclusive"
}
}Generated from the status contract400Invalid requestapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract401API key requiredapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract403Scope or entitlement deniedapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract404Resource not foundapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract409Concurrent change or idempotency conflictapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract413Request too largeapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract429Rate or capacity limitapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract503Source data or delivery is unavailableapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contractGET /v1/merchant/coverage
/v1/merchant/coveragegetMerchantCoverageRequires intelligence:read. Inspect catalog matching and evidence freshness, including missing or stale market data. This readiness query consumes no comparison credits.
Parameters
limitqueryintegerOptionaloffsetqueryintegerOptionalresolutionquerystringOptionalCode examples
curl --fail-with-body -X GET "https://hintadata.fi/v1/merchant/coverage?limit=25&offset=0&resolution=matched" \
-H "Authorization: Bearer $HINTADATA_API_KEY"Responses9
200Successful responseapplication/json
{
"market_status": "missing",
"merchant_status": "missing",
"evidence": {
"source_id": "",
"source_ref": "",
"observed_at": "",
"expires_at": "",
"market": "",
"currency": "",
"tax_basis": "inclusive"
},
"merchant_evidence": {
"source_id": "",
"source_ref": "",
"observed_at": "",
"expires_at": "",
"market": "",
"currency": "",
"tax_basis": "inclusive"
},
"counts": {
"imported": 0,
"matched": 0,
"ambiguous": 0,
"unmatched": 0,
"with_available_offers": 0
},
"total": 0,
"next_offset": "",
"items": []
}Generated from the status contract400Invalid requestapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract401API key requiredapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract403Scope or entitlement deniedapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract404Resource not foundapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract409Concurrent change or idempotency conflictapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract413Request too largeapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract429Rate or capacity limitapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract503Source data or delivery is unavailableapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contractPOST /v1/products/resolve
/v1/products/resolveresolveProductsRequires catalog:read. Resolve exact canonical IDs, checksum-valid GTINs or tenant-local merchant SKUs without fuzzy matching. Read-only POST; 1–100 identifiers, preserves order, one comparison credit per input in live mode (including unmatched/ambiguous results). Test mode is free. No Idempotency-Key required.
Request bodyRequired
application/jsonCode examples
curl --fail-with-body -X POST "https://hintadata.fi/v1/products/resolve" \
-H "Authorization: Bearer $HINTADATA_API_KEY" \
-H "Content-Type: application/json" \
--data '{
"items": []
}'Responses9
200Successful responseapplication/json
{
"items": [],
"evidence": {
"source_id": "",
"source_ref": "",
"observed_at": "",
"expires_at": "",
"market": "",
"currency": "",
"tax_basis": "inclusive"
}
}Generated from the status contract400Invalid requestapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract401API key requiredapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract403Scope or entitlement deniedapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract404Resource not foundapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract409Concurrent change or idempotency conflictapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract413Request too largeapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract429Rate or capacity limitapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract503Source data or delivery is unavailableapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contractPOST /v1/offers/batch
/v1/offers/batchgetOffersBatchRequires catalog:read. Read offers for a bounded identifier batch with per-item matching outcomes. Read-only POST; 1–100 identifiers, preserves order, one comparison credit per input in live mode (including unmatched/ambiguous results). Test mode is free. No Idempotency-Key required.
Request bodyRequired
application/jsonCode examples
curl --fail-with-body -X POST "https://hintadata.fi/v1/offers/batch" \
-H "Authorization: Bearer $HINTADATA_API_KEY" \
-H "Content-Type: application/json" \
--data '{
"items": []
}'Responses9
200Successful responseapplication/json
{
"items": [],
"evidence": {
"source_id": "",
"source_ref": "",
"observed_at": "",
"expires_at": "",
"market": "",
"currency": "",
"tax_basis": "inclusive"
}
}Generated from the status contract400Invalid requestapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract401API key requiredapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract403Scope or entitlement deniedapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract404Resource not foundapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract409Concurrent change or idempotency conflictapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract413Request too largeapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract429Rate or capacity limitapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract503Source data or delivery is unavailableapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contractPOST /v1/watchlists/batch
/v1/watchlists/batchmanagePriceWatchesBatchRequires watchlists:write. Atomically pause, resume or delete up to 100 distinct watches. Every current revision must match; otherwise nothing is changed.
Parameters
Idempotency-KeyheaderstringRequiredRequest bodyRequired
application/jsonCode examples
curl --fail-with-body -X POST "https://hintadata.fi/v1/watchlists/batch" \
-H "Authorization: Bearer $HINTADATA_API_KEY" \
-H "Content-Type: application/json" \
--data '{
"items": []
}'Responses9
200Successful responseapplication/json
{
"updated": 0
}Generated from the status contract400Invalid requestapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract401API key requiredapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract403Scope or entitlement deniedapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract404Resource not foundapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract409Concurrent change or idempotency conflictapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract413Request too largeapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract429Rate or capacity limitapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract503Source data or delivery is unavailableapplication/json
{
"error": {
"code": "",
"message": ""
},
"request_id": ""
}Generated from the status contract