Create a cost forecast
curl --request POST \
--url https://api-dev.narrative.io/data-shops/subscriptions/cost-forecasts \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"type": "data_stream",
"data_stream_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"offer_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"data_shop_id": "<string>"
}
'import requests
url = "https://api-dev.narrative.io/data-shops/subscriptions/cost-forecasts"
payload = {
"type": "data_stream",
"data_stream_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"offer_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"data_shop_id": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
type: 'data_stream',
data_stream_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
offer_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
data_shop_id: '<string>'
})
};
fetch('https://api-dev.narrative.io/data-shops/subscriptions/cost-forecasts', 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-dev.narrative.io/data-shops/subscriptions/cost-forecasts",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'type' => 'data_stream',
'data_stream_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'offer_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'data_shop_id' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api-dev.narrative.io/data-shops/subscriptions/cost-forecasts"
payload := strings.NewReader("{\n \"type\": \"data_stream\",\n \"data_stream_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"offer_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"data_shop_id\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api-dev.narrative.io/data-shops/subscriptions/cost-forecasts")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"type\": \"data_stream\",\n \"data_stream_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"offer_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"data_shop_id\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api-dev.narrative.io/data-shops/subscriptions/cost-forecasts")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"type\": \"data_stream\",\n \"data_stream_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"offer_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"data_shop_id\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"records": [
{
"attributes": [
{
"id": 123,
"name": "<string>"
}
],
"dataset": {
"id": 123,
"company_id": 123,
"name": "<string>",
"description": "<string>"
},
"matching_access_rules": {
"id": 123,
"constraints": [
"<string>"
],
"pricing": 123
},
"non_matching_access_rules": {
"id": 123,
"constraints": [
"<string>"
],
"pricing": 123
},
"type": "attributes"
}
]
}Subscriptions
Create a cost forecast
Create an estimate of the “cost” of servicing a set of subscription constraints.
Cost has two components:
- The number of rows which must be read in order to find data which matches the subscription constraints.
- An estimate of the “size” of those rows in bytes.
Note: the number of rows reported in the cost is not an estimate of the number of rows which will be purchased as part of a subscription using the given constraints.
POST
/
data-shops
/
subscriptions
/
cost-forecasts
Create a cost forecast
curl --request POST \
--url https://api-dev.narrative.io/data-shops/subscriptions/cost-forecasts \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"type": "data_stream",
"data_stream_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"offer_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"data_shop_id": "<string>"
}
'import requests
url = "https://api-dev.narrative.io/data-shops/subscriptions/cost-forecasts"
payload = {
"type": "data_stream",
"data_stream_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"offer_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"data_shop_id": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
type: 'data_stream',
data_stream_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
offer_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
data_shop_id: '<string>'
})
};
fetch('https://api-dev.narrative.io/data-shops/subscriptions/cost-forecasts', 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-dev.narrative.io/data-shops/subscriptions/cost-forecasts",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'type' => 'data_stream',
'data_stream_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'offer_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'data_shop_id' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api-dev.narrative.io/data-shops/subscriptions/cost-forecasts"
payload := strings.NewReader("{\n \"type\": \"data_stream\",\n \"data_stream_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"offer_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"data_shop_id\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api-dev.narrative.io/data-shops/subscriptions/cost-forecasts")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"type\": \"data_stream\",\n \"data_stream_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"offer_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"data_shop_id\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api-dev.narrative.io/data-shops/subscriptions/cost-forecasts")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"type\": \"data_stream\",\n \"data_stream_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"offer_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"data_shop_id\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"records": [
{
"attributes": [
{
"id": 123,
"name": "<string>"
}
],
"dataset": {
"id": 123,
"company_id": 123,
"name": "<string>",
"description": "<string>"
},
"matching_access_rules": {
"id": 123,
"constraints": [
"<string>"
],
"pricing": 123
},
"non_matching_access_rules": {
"id": 123,
"constraints": [
"<string>"
],
"pricing": 123
},
"type": "attributes"
}
]
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Body
application/json
- Option 1
- Option 2
A set of subscription constraints for which matches will be generated.
Details for the purchase of a data stream.
Available options:
data_stream Unique identifier for the data stream being purchased.
The provider offer being accepted as part of the purchase.
The hostname of the data shop from which the data stream is being purchased.
Minimum string length:
1Response
200 - application/json
OK
- Option 1
- Option 2
Show child attributes
Show child attributes
Was this page helpful?
⌘I

