curl --request GET \
--url https://api.aggrefine.com/v1/channels/{channelId}/changes \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.aggrefine.com/v1/channels/{channelId}/changes"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.aggrefine.com/v1/channels/{channelId}/changes', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.aggrefine.com/v1/channels/{channelId}/changes",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.aggrefine.com/v1/channels/{channelId}/changes"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.aggrefine.com/v1/channels/{channelId}/changes")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.aggrefine.com/v1/channels/{channelId}/changes")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"items": [
{
"type": "offer_changed",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"offer": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"network": "awin",
"merchant": {
"id": "10240",
"name": "Example Shop",
"market": "SE",
"domain": "zooplus.se"
},
"feed": {
"id": "12345",
"name": "Example Shop SE"
},
"sku": "SKU-1",
"mpn": "RC-2551",
"gtin": {
"as_sent": "<string>",
"gtin14": "07310865004703"
},
"title": "Dry dog food 8 kg",
"description": {
"text": "<string>",
"has_html": true
},
"short_description": "<string>",
"brand": "Northpaw",
"category": {
"as_sent": "Hund > Torrfoder",
"path": [
"Hund",
"Torrfoder"
],
"google_id": 3530
},
"price": {
"amount": "499.00",
"as_sent": "<string>"
},
"old_price": {
"amount": "499.00",
"as_sent": "<string>"
},
"currency": "SEK",
"availability": {
"value": "in_stock",
"as_sent": "<string>"
},
"shipping": {
"cost": "49.00",
"delivery_time": "1-3 dagar",
"source": "feed"
},
"color": "<string>",
"size": "8 kg",
"pack_quantity": "<string>",
"item_group_id": "<string>",
"images": [
"<string>"
],
"product_url": "<string>",
"link": "<string>",
"sub_id_template": "https://track.adtraction.com/t/t?epi={sub_id}&a=1&as=2&t=2&tk=1",
"attributes": {
"stock_quantity": "12"
},
"source_updated_at": "2023-11-07T05:31:56Z",
"first_seen_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
}
}
],
"next": "<string>",
"has_more": true
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}List what changed in a channel's offers
Keep a copy of a channel’s offers fresh without reloading it: page through /offers once, then ask for the changes since the time you started, and from then on since the next you were given. Each change is an offer changed (with the whole offer as it is now) or removed, in the order they happened; an offer changed twice may come twice, each time as it is now. When the merchants or feeds the channel shows changed (an approval starting or ending, a merchant or feed ignored or no longer ignored, a network disconnected, a merchant paused over or back within your plan’s product limit), or a merchant’s name or market, a feed’s name, or the channel’s own id in link changed, that comes first: every offer the channel no longer shows as removed, every offer of a merchant or feed newly shown or changed as changed. The first call with a time takes the merchants and feeds the channel shows then as its start. A change is listed 10 minutes after it is stored, and kept 7 days: a since older than that is answered 410, page through /offers again. So is a next from before the channel stopped showing a feed whose offers were deleted before you asked (a feed kept only for your network login is deleted minutes after you disconnect the network).
curl --request GET \
--url https://api.aggrefine.com/v1/channels/{channelId}/changes \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.aggrefine.com/v1/channels/{channelId}/changes"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.aggrefine.com/v1/channels/{channelId}/changes', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.aggrefine.com/v1/channels/{channelId}/changes",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.aggrefine.com/v1/channels/{channelId}/changes"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.aggrefine.com/v1/channels/{channelId}/changes")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.aggrefine.com/v1/channels/{channelId}/changes")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"items": [
{
"type": "offer_changed",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"offer": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"network": "awin",
"merchant": {
"id": "10240",
"name": "Example Shop",
"market": "SE",
"domain": "zooplus.se"
},
"feed": {
"id": "12345",
"name": "Example Shop SE"
},
"sku": "SKU-1",
"mpn": "RC-2551",
"gtin": {
"as_sent": "<string>",
"gtin14": "07310865004703"
},
"title": "Dry dog food 8 kg",
"description": {
"text": "<string>",
"has_html": true
},
"short_description": "<string>",
"brand": "Northpaw",
"category": {
"as_sent": "Hund > Torrfoder",
"path": [
"Hund",
"Torrfoder"
],
"google_id": 3530
},
"price": {
"amount": "499.00",
"as_sent": "<string>"
},
"old_price": {
"amount": "499.00",
"as_sent": "<string>"
},
"currency": "SEK",
"availability": {
"value": "in_stock",
"as_sent": "<string>"
},
"shipping": {
"cost": "49.00",
"delivery_time": "1-3 dagar",
"source": "feed"
},
"color": "<string>",
"size": "8 kg",
"pack_quantity": "<string>",
"item_group_id": "<string>",
"images": [
"<string>"
],
"product_url": "<string>",
"link": "<string>",
"sub_id_template": "https://track.adtraction.com/t/t?epi={sub_id}&a=1&as=2&t=2&tk=1",
"attributes": {
"stock_quantity": "12"
},
"source_updated_at": "2023-11-07T05:31:56Z",
"first_seen_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
}
}
],
"next": "<string>",
"has_more": true
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}Authorizations
Query Parameters
Response
A page of changes