Your fastest way from version 1 to version 2
Use the test datasource
To make things easier for you, we have added a test data source that behaves like the amazon data source, but only pretends to cost you credits.
New endpoints
While the three-step process (create a job, poll its status, download the results) is still the same, there are three new versioned endpoints for this process:
New parameter topic
topic
Version 2 is all about flexibility. While you could only request products and the offers attached to them in version 1, this is now only one of the many kinds of information Price API can collect for you. In addition, we supply search results, reviews, bestsellers and more. You can choose the kind of information to collect with the new mandatory parameter topic
.
To make things easier for customers migrating from version 1, we support a topic product_and_offers
that behaves very similar to what you are used to from version 1.
New key names id
and term
id
and term
In version 2, the key source_id
has been renamed to just id
and keyword
has been renamed to term
.
New JSON and XML response structure
We took the time to tidy up our response structures with the goal to make it more readable and intuitive for you.
At the root level, the response will only have a few attributes concerning the job:
{
"job_id": "5a3008a0e4dd586e77a2b89a",
"status": "finished",
"free_credits": 1,
"paid_credits": 0,
"results": [ ... ]
}
<?xml version="1.0" encoding="UTF-8"?>
<hash>
<job-id>5a3005360ef4ae2d61005716</job-id>
<status type="symbol">finished</status>
<free-credits type="integer">1</free-credits>
<paid-credits type="integer">0</paid-credits>
<results type="array"><!-- ... --></results>
<hash>
The results
attribute contains an array of objects, one entry for each value requested in the job. They each hold four to five attributes:
query
states your requestsuccess
indicatestrue
exactly when we successfully collected data- optionally
reason
if it was not successful metadata
including information on how the job was processed- and
content
holding the data collected
Here's an example:
"results": [
{
"query": {
"source": "google_shopping",
"country": "de",
"topic": "offers",
"key": "id",
"value": "2680289002714187668",
"max_pages": 1,
"max_age": 1200,
"sort_by": "ranking_descending",
"condition": "any",
"shipping": "any"
},
"success": true,
"metadata": {
"from_cache": false,
"page_count_delivered": 1,
"page_count_from_cache": 0,
"page_count_live": 1,
"request_count": 1,
"updated_at": "2017-12-12T16:49:40Z"
},
"content": { ... }
},
// More results ...
]
<results type="array">
<result>
<query>
<source>google_shopping</source>
<country>de</country>
<topic>offers</topic>
<key>id</key>
<value>2680289002714187668</value>
<max-pages type="integer">1</max-pages>
<max-age type="integer">1200</max-age>
<sort-by>ranking_descending</sort-by>
<condition>any</condition>
<shipping>any</shipping>
</query>
<success type="boolean">true</success>
<metadata>
<from-cache type="boolean">false</from-cache>
<page-count-delivered type="integer">1</page-count-delivered>
<page-count-from-cache type="integer">0</page-count-from-cache>
<page-count-live type="integer">1</page-count-live>
<request-count type="integer">27</request-count>
<updated-at type="dateTime">2017-12-12T16:36:13Z</updated-at>
</metadata>
<content><!-- ... --></content>
</result>
<!-- More results -->
</results>
The content
attribute can hold an array for lists of things or an object or null
. Here's an example:
"content": {
"total_offer_count": 63,
"offers": [
{
"price": "349.0",
"shipping_costs": "0.0",
"price_with_shipping": "349.0",
"currency": "EUR",
"shop_name": "some-example-shop.com",
"shop_id": "7935878264",
"shop_review_count": 667,
"shop_review_rating": 94,
// ...
},
// More offers ...
]
}
<content>
<total-offers-count type="integer">63</total-offers-count>
<offers type="array">
<offer>
<price>349.0</price>
<price-with-shipping>349.0</price-with-shipping>
<shipping-costs>0.0</shipping-costs>
<currency>EUR</currency>
<shop-name>saturn.de</shop-name>
<shop-matching-id>t3.media01.eu</shop-matching-id>
<shop-review-count type="integer">667</shop-review-count>
<shop-review-rating type="integer">94</shop-review-rating>
<!-- ... -->
</offer>
<!-- More offers -->
</offers>
</content>
Success
In version 2, we return "success": true
exactly then, when we could access the data source and collect data from it.
We also return true
now when we successfully searched for a product and it was not present on the source. In version 1, this was reported as "success": false, "reason": "not found"
. This will come with a content
value of null
(if the content is usually represented as an object) or empty array []
(if the content is usually represented as an array).
Use the timeout
parameter
timeout
parameterFor some use cases, you would prefer to receive partial data instead of waiting longer. To support this, we introduced a new parameter that allows you to determine after how many minutes a job's data collection should end.
A job that runs in a timeout will change to status finished
and can then be downloaded and processed like any other job. It will include some results marked as "success": false, "reason": "timeout"
.
Default timeout
If you don't specify otherwise, we have set a default of 1,440 minutes (24 hours).
Did we miss anything?
Please get in contact so we can help you out and so that we can improve our documentation.