NAV Navigation
cURL Node.JS Python

Getting started

Authentication

All requests to Curation’s public content API must be authenticated using bearer token auth. This token can be found in the settings page of the Curation portal. If you do not have access to retrieve your token and believe you should have API access, please either contact Curation Support or your Curation account manager.

Once you have retrieved your bearer token, you should add the following header to every request made to the Curation public content API.

Authorization: Bearer <Your token here>

If you accidentally commit your token to a repository, leak it in an email, or fear it has been comprimised in any fashion, please immediately regenerate your token on the Curation portal settings page.

Curation API Developer settings

API options

Webhooks

const app = require("express")();
const bodyParser = require("body-parser");

app.use(bodyParser.json());

app.post("/webhook", (req, res) => {
  console.log(req.body);
  res.status(200).end();
});

app.listen(8050, () => {
  console.log("Webhook test server active on port 8050");
});

If you wish to use Curation’s abstractive summarisation feature, or any other long running endpoint, we highly recommend that you register a webhook server in your settings page. If you’re not sure what webhooks are, please read this introdution before proceeding.

You will need to expose an internet-facing server endpoint that can recieve POST requests from https://api.curationcorp.com. We have implemented an example webhook server in Node.JS/Express which can be viewed in codeboxes to the right. This code is the bare minimum required to receive webhook calls, but error handling and further development will be requried to make it production-ready.

Obviously, your webhook server will need to be made internet accessible; during development it is often helpful to use services like Ngrok or LocalTunnel to expose your local development instance to the internet.

Webhook failure

All webhook calls must return an HTTP status 200 in order be classed as successful. If Curation’s calls to the your webhook server fail, we will send you an email notification detailing the issue to the address registered to your account. You will receive one email per failure. If failures persist, we will eventually disable calls to the your webhook endpoint.

Rate limiting

All access to Curation’s public API is rate limited in order to ensure all our clients receive the best possible service and to protect our infrastructure. There are two classes of rate limiting:

General rate limiting

This is implemented across all endpoints for all users. You are permitted to call the Curation public API 300 times in a 5 minute window (or on average, once per second) with the same token, irrespective of source IP address. Any more than 500 requests/token will result in a 429: Too many requests error response. This will reset at the end of the 5 minute window. API users persistently entering a rate-limited state will be flagged for review by a member of the Curation team.

Endpoint-specific rate limiting

This is applied to specific endpoints that for computational or licensing reasons are have rate-limited access. Rate limits are allocated on a per-user basis, and operate over a 24 hour window, starting at 00:00 GMT. Each successful request to such an endpoint will include the following HTTP headers along with a 200 response code and body:

Header Meaning
RateLimit-Limit Total number of requests a user is allowed to make to a route in a given period.
RateLimit-Remaining Number of requests remaining before a user exhausts their alloted limit.
RateLimit-Reset Number of seconds before the rate limit remaining is reset to 0.

Endpoints

Articles

article

Code samples

curl --request GET \
  --url 'https://api.curationcorp.com/article/2CA2279B-8D7B-4DD7-A3DC-F6689BB30E82' \
  --header 'Accept: application/json' \
  --header 'Authorization: Bearer {access-token}'
import { get } from "axios"; 

(async () => {
  const res = await get(
    "https://api.curationcorp.com/article/2CA2279B-8D7B-4DD7-A3DC-F6689BB30E82",
    { headers: { Authorization: "Bearer {api token}" } }
  );
  console.log(res.data);
})();

import http.client

conn = http.client.HTTPSConnection("api.curationcorp.com")

headers = {
    'Accept': "application/json",
    'Authorization': "Bearer {access-token}"
    }

conn.request("GET", "/article/2CA2279B-8D7B-4DD7-A3DC-F6689BB30E82", headers=headers)

res = conn.getresponse()
data = res.read()

print(data.decode("utf-8"))

GET /article/{ArticleId}

returns a single article

returns an article object matching the given article ID.

Parameters

Name In Type Required Description
ArticleId path string true pass a requried id string for looking up Article

Example responses

200 Response

{
    "ArticleId": "2CA2279B-8D7B-4DD7-A3DC-F6689BB30E82",
    "Title": "Siemens and ServiceNow partner to develop cyber threat software",
    "StoryDate": "2021-05-18T13:12:32.477Z",
    "Body": "<p>Siemens Energy has partnered with ServiceNow to develop AI-based cybersecurity software that allows companies to monitor, detect and prevent cyber attacks targeting critical infrastructure. The solution combines Siemens Energy’s Eos.ii-based Managed Detection and Response (MDR) software and ServiceNow OT Management, enabling energy companies to respond to threats with the Precision Defense response method, resulting in little or no downtime. The MDR software uses AI and digital twin technology to compare data points for unusual events.</p>\n",
    "Tags": [
        {
            "TagId": "76",
            "Name": "Siemens"
        },
        {
            "TagId": "327",
            "Name": "Artificial intelligence"
        },
        {
            "TagId": "9560",
            "Name": "Cybersecurity"
        },
        {
            "TagId": "11365",
            "Name": "Cyber threats"
        },
        {
            "TagId": "25195",
            "Name": "Technology-led Disruption and Opportunities"
        },
        {
            "TagId": "25506",
            "Name": "Artificial Intelligence and Machine Learning"
        },
        {
            "TagId": "25514",
            "Name": "Cybersecurity Solutions"
        },
        {
            "TagId": "32304",
            "Name": "Siemens Energy"
        },
        {
            "TagId": "35800",
            "Name": "Sensing, Data, Analytics and Robotics"
        }
    ],
    "Sources": [
        {
            "Title": "World Pipelines",
            "Url": "https://www.worldpipelines.com/business-news/14052021/siemens-energy-announces-cybersecurity-collaboration-with-servicenow/"
        }
    ]
}

Responses

Status Meaning Description Schema
200 OK Article matching criteria Article
400 Bad Request bad input parameter None

Themes

theme

Code samples

curl --request GET \
  --url 'https://api.curationcorp.com/theme/B11ACF72-C4DB-42FF-A648-18350B7669A5' \
  --header 'Accept: application/json' \
  --header 'Authorization: Bearer {access-token}'
import { get } from "axios"; 

(async () => {
  const res = await get(
    "https://api.curationcorp.com/theme/B11ACF72-C4DB-42FF-A648-18350B7669A5",
    { headers: { Authorization: "Bearer {api token}" } }
  );
  console.log(res.data);
})();

import http.client

conn = http.client.HTTPSConnection("api.curationcorp.com")

headers = {
    'Accept': "application/json",
    'Authorization': "Bearer {access-token}"
    }

conn.request("GET", "/theme/B11ACF72-C4DB-42FF-A648-18350B7669A5", headers=headers)

res = conn.getresponse()
data = res.read()

print(data.decode("utf-8"))

GET /theme/{ThemeId}

returns a single theme

Parameters

Name In Type Required Description
ThemeId path string(uuid) true pass a required ThemeId string to look up a Theme

Example responses

200 Response

{
    "Name": "SDG 1: No Poverty",
    "ThemeId": "B11ACF72-C4DB-42FF-A648-18350B7669A5"
}

Responses

Status Meaning Description Schema
200 OK Theme matching criteria Theme

themes

Code samples

curl --request GET \
  --url https://api.curationcorp.com/themes \
  --header 'Accept: application/json' \
  --header 'Authorization: Bearer {access-token}'
import { get } from "axios"; 

(async () => {
  const res = await get(
    "https://api.curationcorp.com/themes",
    { headers: { Authorization: "Bearer {api token}" } }
  );
  console.log(res.data);
})();

import http.client

conn = http.client.HTTPSConnection("api.curationcorp.com")

headers = {
    'Accept': "application/json",
    'Authorization': "Bearer {access-token}"
    }

conn.request("GET", "/themes", headers=headers)

res = conn.getresponse()
data = res.read()

print(data.decode("utf-8"))

GET /themes

returns a list of theme objects permissioned for your account.

Example responses

200 Response

[
    {
        "Name": "SDG 10: Reduced Inequalities",
        "ThemeId": "10A861ED-CB85-460B-A872-0F952B712F50"
    },
    {
        "Name": "SDG 1: No Poverty",
        "ThemeId": "B11ACF72-C4DB-42FF-A648-18350B7669A5"
    }
]

Responses

Status Meaning Description Schema
200 OK Themes that you have been permissioned to see Theme

articles

Code samples

curl --request GET \
  --url 'https://api.curationcorp.com/theme/B11ACF72-C4DB-42FF-A648-18350B7669A5/articles' \
  --header 'Accept: */*' \
  --header 'Authorization: Bearer {access-token}'
import { get } from "axios"; 

(async () => {
  const res = await get(
    "https://api.curationcorp.com/theme/B11ACF72-C4DB-42FF-A648-18350B7669A5/articles",
    { headers: { Authorization: "Bearer {api token}" } }
  );
  console.log(res.data);
})();

import http.client

conn = http.client.HTTPSConnection("api.curationcorp.com")

headers = {
    'Accept': "*/*",
    'Authorization': "Bearer {access-token}"
    }

conn.request("GET", "/theme/B11ACF72-C4DB-42FF-A648-18350B7669A5/articles", headers=headers)

res = conn.getresponse()
data = res.read()

print(data.decode("utf-8"))

GET /theme/{ThemeId}/articles

returns the articles for a given theme

Parameters

Name In Type Required Description
ThemeId path string(uuid) true pass a required ThemeId string to look up a Theme
page query integer false a 0-indexed count of the page number
page_size query integer false how many articles to fetch per page

Example responses

[
    {
        "ArticleId": "B8D37F56-F695-40C7-9B07-82BFAC7B378F",
        "Title": "Tougher measures needed to prevent online scams: UK charity",
        "StoryDate": "2021-03-16T23:00:00.000Z",
        "Body": "<p>The UK government should capitalise on the \"golden opportunity\" presented by the online harms bill to crack down on an \"epidemic\" of online scams, the Money and Mental Health Policy Institute has said. The charity noted that scams are three times more likely to affect people with mental health issues. Radical changes are needed to the proposed legislation to close “gaping holes” in the current online consumer protections, said the charity’s founder, Martin Lewis. The charity wants Ofcom to be given more powers to force tech giants such as Facebook and Twitter to act against scammers using their platforms.</p>\n",
        "Tags": [
            {
                "TagId": "1922",
                "Name": "Mental health"
            },
            {
                "TagId": "4686",
                "Name": "Fraud"
            },
            {
                "TagId": "10969",
                "Name": "Consumer protection"
            },
            {
                "TagId": "26462",
                "Name": "Consumer/Customer Concerns"
            },
            {
                "TagId": "30681",
                "Name": "scams"
            },
            {
                "TagId": "31311",
                "Name": "Health & Wellbeing"
            },
            {
                "TagId": "35170",
                "Name": "SDG 1: No Poverty"
            },
            {
                "TagId": "35172",
                "Name": "SDG 3: Good Health & Well-Being"
            }
        ],
        "Sources": [
            {
                "Title": "The Guardian",
                "Url": "https://www.theguardian.com/money/2021/mar/17/martin-lewis-charity-calls-for-new-measures-to-stop-online-scams"
            }
        ]
    },
    {
        "ArticleId": "2ACA3E6E-28BB-4CA5-87C8-21599A75D1D7",
        "Title": "State school beats out private schools with Oxbridge offers",
        "StoryDate": "2021-03-15T20:04:37.467Z",
        "Body": "<p>Brampton Manor has surpassed private schools including Eton College in its number of Oxford and Cambridge offers. Brampton Manor students are often offered places at top universities and this year, 55 pupils at the Newham state school have received conditional offers to study at Cambridge and Oxford. Around 52% of children in Newham live in poverty and the school is achieving its aim of helping underprivileged students attend prestigious universities. Executive Principal Dr Dayo Olukoshi was awarded an OBE for his contribution to education. Prestigious institutions’ state school intake has risen since 2015, with Cambridge rising from 62.3% to 70%.</p>\n",
        "Tags": [
            {
                "TagId": "2583",
                "Name": "London"
            },
            {
                "TagId": "3532",
                "Name": "Oxford University"
            },
            {
                "TagId": "4197",
                "Name": "Cambridge University"
            },
            {
                "TagId": "6457",
                "Name": "Poverty"
            },
            {
                "TagId": "11299",
                "Name": "Private Schools"
            },
            {
                "TagId": "11924",
                "Name": "Higher Education"
            },
            {
                "TagId": "22504",
                "Name": "BP Inclusion Class and Culture"
            },
            {
                "TagId": "31311",
                "Name": "Health & Wellbeing"
            },
            {
                "TagId": "35173",
                "Name": "SDG 4: Quality Education"
            },
            {
                "TagId": "35179",
                "Name": "SDG 10: Reduced Inequalities"
            }
        ],
        "Sources": [
            {
                "Title": "TCS Network",
                "Url": "https://www.tcsnetwork.co.uk/london-state-school-receives-more-oxbridge-offers-than-eton-college-for-the-first-time/"
            }
        ]
    },
 {...}
]

200 Response

Responses

Status Meaning Description Schema
200 OK Articles from theme matching given ThemeId Inline

Response Schema

Status Code 200

Name Type Required Restrictions Description
anonymous [Article] false none none
» ArticleId string(uuid) true none none
» Title string true none none
» StoryDate string(date-time) true none none
» Body string true none none
» Tags [Tag] true none none
»» TagId integer false none none
»» Name string false none none
»» TagType string false none none
» Sources [Source] false none none
»» Title string true none none
»» Url string(uri) true none none

search

Code samples

curl --request GET \
  --url https://api.curationcorp.com/search \
  --header 'Accept: application/json' \
  --header 'Authorization: Bearer {access-token}'
import { get } from "axios"; 

(async () => {
  const res = await get(
    "https://api.curationcorp.com/search?query=\"Tesla\"",
    { headers: { Authorization: "Bearer {api token}" } }
  );
  console.log(res.data);
})();

import http.client

conn = http.client.HTTPSConnection("api.curationcorp.com")

headers = {
    'Accept': "application/json",
    'Authorization': "Bearer {access-token}"
    }

conn.request("GET", "/search", headers=headers)

res = conn.getresponse()
data = res.read()

print(data.decode("utf-8"))

GET /search

returns the articles matching a given query

Parameters

Name In Type Required Description
query query string false the query you wish to search the curation corpus for. See here for valid syntax.
page query integer false a 0-indexed count of the page number
page_size query integer false how many articles to fetch per page

Example responses

200 Response

[
    {
        "ArticleId": "560DC33E-A255-4F1B-9248-EBA9BE1D73D8",
        "StoryDate": "2021-05-19T06:17:48.890Z",
        "Body": "<p>US utility Green Mountain Power (GMP) is installing Tesla Powerwall residential energy storage systems as frequency regulators in customers’ homes to help the reliability of the ISO New England grid. GMP and Tesla have worked together on the residential offering since 2015. In 2017, a residential scheme was launched, offering Powerwalls for $15 a month. To date, 200 customers have opted to take part in a frequency regulation trial. GMP entered the frequency regulation market, following a test period with the ISO, Tesla, and Customized Energy Solutions. Tesla Powerwalls have also been used in an Australian frequency regulation project.</p>\n",
        "Title": "Green Mountain starts using Tesla Powerwalls for grid balancing",
        "Tags": [
            {
                "Name": "United States",
                "TagType": "Geography",
                "TagId": "3"
            },
            {
                "Name": "Tesla",
                "TagType": "Company",
                "TagId": "469"
            },
            {
                "Name": "Green Mountain Power",
                "TagType": "Company",
                "TagId": "4745"
            },
            {
                "Name": "Vermont",
                "TagType": "Regions",
                "TagId": "17729"
            },
            {
                "Name": "Grid balancing",
                "TagType": "Topic",
                "TagId": "31887"
            },
            {
                "Name": "Electron economy",
                "TagType": "Section Title",
                "TagId": "35811"
            }
        ]
    },
    {
        "ArticleId": "5796D74F-4795-492F-9EA0-729C60949BBC",
        "StoryDate": "2021-05-17T03:35:24.000Z",
        "Body": "<p>Tesla's recent announcement that it would refuse bitcoin payments, citing environmental concerns, just highlights that crypto is “totally unsuitable as a monetary unit”, according to Richard Windsor of Radio Free Mobile (RFM). The EV-maker's finance department was handed a tough challenge by Elon Musk to make the volatile and expensive digital currency a useful monetary unit, Windsor wrote. While critics have accused Tesla of engaging in a “pump and dump”, the decision to back away from bitcoin was simply driven by, and demonstrates, the impracticality of cryptocurrencies, he added.</p>\n",
        "Title": "Tesla's crypto move shows they are unsuitable as an exchange: RFM",
        "Tags": [
            {
                "Name": "Tesla",
                "TagType": "Company",
                "TagId": "469"
            },
            {
                "Name": "Bitcoin",
                "TagType": "Other",
                "TagId": "536"
            },
            {
                "Name": "Digital Currencies",
                "TagType": "Topic",
                "TagId": "867"
            },
            {
                "Name": "Cryptocurrencies",
                "TagType": "Other",
                "TagId": "5596"
            },
            {
                "Name": "Technology-led Disruption and Opportunities",
                "TagType": "Topic",
                "TagId": "25195"
            }
        ]
    },
    {...}
]

Responses

Status Meaning Description Schema
200 OK Articles matching the given search query Inline

Response Schema

Status Code 200

Name Type Required Restrictions Description
anonymous [Article] false none none
» ArticleId string(uuid) true none none
» Title string true none none
» StoryDate string(date-time) true none none
» Body string true none none
» Tags [Tag] true none none
»» TagId integer false none none
»» Name string false none none
»» TagType string false none none
» Sources [Source] false none none
»» Title string true none none
»» Url string(uri) true none none

Abstractive Summarisation

summarise

Code samples

curl --request GET \
  --url https://api.curationcorp.com/summarise \
  --header 'Accept: application/json' \
  --header 'Authorization: Bearer {access-token}'
import { get } from "axios"; 

(async () => {
  const res = await get(
    "https://api.curationcorp.com/summarise?article_url=https://www.bbc.co.uk/sport/football/57188042",
    { headers: { Authorization: "Bearer {api token}" } }
  );
  console.log(res.data);
})();

import http.client

conn = http.client.HTTPSConnection("api.curationcorp.com")

headers = {
    'Accept': "application/json",
    'Authorization': "Bearer {access-token}"
    }

conn.request("GET", "/summarise", headers=headers)

res = conn.getresponse()
data = res.read()

print(data.decode("utf-8"))

GET /summarise

Creates an abstractive summary of a given article or piece of text.

Parameters

Name In Type Required Description
article_url query string(uri) false URL of the article you wish to summarise. Curation will then make a best effort to extract the text from the webpage.
text query string false Free text that you wish to summarise, valid up to 1024 tokens. Any text following that that will be stripped and not included in the summary.

Example responses

200 Response

{
    "SummaryRequestId": "4E28C96D-A4F2-4487-B92D-97AD3079CE2E",
    "Status": "QUEUED"
}

Responses

Status Meaning Description Schema
200 OK A successful invocation will return an ID that can be used to query the /summary endpoint in order to retrieve information about the status of the summary, and an expected time to completion. PendingSummary

summary

Code samples

curl --request GET \
  --url 'https://api.curationcorp.com/summary/type,string,format,uuid' \
  --header 'Accept: application/json' \
  --header 'Authorization: Bearer {access-token}'
import { get } from "axios"; 

(async () => {
  const res = await get(
    "https://api.curationcorp.com/summary/5FC7E316-11BF-4F09-BAA6-71A6FF496FB6",
    { headers: { Authorization: "Bearer {api token}" } }
  );
  console.log(res.data);
})();

import http.client

conn = http.client.HTTPSConnection("api.curationcorp.com")

headers = {
    'Accept': "application/json",
    'Authorization': "Bearer {access-token}"
    }

conn.request("GET", "/summary/type,string,format,uuid", headers=headers)

res = conn.getresponse()
data = res.read()

print(data.decode("utf-8"))

GET /summary/{SummaryRequestId}

If your summary is still pending completion, this endpoint returns metadata about the status and expected wait time of the summary. If your summary has been completed, this endpoint returns the summary itself.

Parameters

Name In Type Required Description
SummaryRequestId path string(uuid) true pass a required SummaryRequestId string to look up a Summary status.

Example responses

200 Response

{
    "StoryDate": "2021-05-20T16:06:43.125Z",
    "Source": {
        "Title": "BBC",
        "Url": "https://www.bbc.co.uk/sport/football/57188042"
    },
    "Title": "Kane wants 'honest' talk about future",
    "FullText": "<Omitted for copyright",
    "Summary": "Tottenham Hotspur striker Harry Kane has said he wants to have a \"good, honest conversation\" with the club's chairman Daniel Levy about his future. The 27-year-old, who has a six-year contract with the London club that runs until 2024, has reportedly asked to leave the club."
}

Responses

Status Meaning Description Schema
200 OK Depending on your summary’s status, this endpoint will either return information about the summary, any errors that occured during summarisation or the summary itself. Inline

Response Schema

Enumerated Values

Property Value
Status QUEUED
Status IN_PROGRESS

Schemas

Article

{
  "type": "object",
  "required": [
    "ArticleId",
    "Title",
    "StoryDate",
    "Tags",
    "Body"
  ],
  "properties": {
    "ArticleId": {
      "type": "string",
      "format": "uuid",
      "example": "d290f1ee-6c54-4b01-90e6-d701748f0851"
    },
    "Title": {
      "type": "string",
      "example": "Basecamp CEO letters fail to reflect internal commitment to D&I"
    },
    "StoryDate": {
      "type": "string",
      "format": "date-time",
      "example": "2016-08-29T09:12:33.001Z"
    },
    "Body": {
      "type": "string",
      "example": "A body text goes here"
    },
    "Tags": {
      "type": "array",
      "items": {
        "required": [
          "name"
        ],
        "properties": {
          "TagId": {
            "type": "integer",
            "example": 1
          },
          "Name": {
            "type": "string",
            "example": "United Kingdom"
          },
          "TagType": {
            "type": "string",
            "example": "Location"
          }
        }
      }
    },
    "Sources": {
      "type": "array",
      "items": {
        "required": [
          "Title",
          "Url"
        ],
        "properties": {
          "Title": {
            "type": "string",
            "example": "The Guardian"
          },
          "Url": {
            "type": "string",
            "format": "uri",
            "example": "https://www.theguardian.com/xyz"
          }
        }
      }
    }
  }
}

Properties

Name Type Required Restrictions Description
ArticleId string(uuid) true none none
Title string true none none
StoryDate string(date-time) true none none
Body string true none none
Tags [Tag] true none none
Sources [Source] false none none

Tag

{
  "required": [
    "name"
  ],
  "properties": {
    "TagId": {
      "type": "integer",
      "example": 1
    },
    "Name": {
      "type": "string",
      "example": "United Kingdom"
    },
    "TagType": {
      "type": "string",
      "example": "Location"
    }
  }
}

Properties

Name Type Required Restrictions Description
TagId integer false none none
Name string false none none
TagType string false none none

Source

{
  "required": [
    "Title",
    "Url"
  ],
  "properties": {
    "Title": {
      "type": "string",
      "example": "The Guardian"
    },
    "Url": {
      "type": "string",
      "format": "uri",
      "example": "https://www.theguardian.com/xyz"
    }
  }
}

Properties

Name Type Required Restrictions Description
Title string true none none
Url string(uri) true none none

Theme

{
  "type": "object",
  "properties": {
    "ThemeId": {
      "type": "string",
      "format": "uuid",
      "example": "ce841195-2563-4204-8ae9-62964b75ca97"
    },
    "Name": {
      "type": "string",
      "example": "Corporate ESG Initiatives"
    }
  }
}

Properties
Name Type Required Restrictions Description
ThemeId string(uuid) false none none
Name string false none none

SummarisedArticle

{
  "type": "object",
  "required": [
    "Summary"
  ],
  "properties": {
    "Title": {
      "type": "string",
      "example": "Acid test - scientists show how LSD opens doors of perception"
    },
    "Summary": {
      "type": "string",
      "example": "Scientists at Cornell University in New York have discovered that LSD, another psychedelic, lowers the barriers that constrain people’s thoughts. In doing so, it frees the mind to wander more easily and experience the world anew, according to Parker Singleton, a PhD candidate at Cornell. Singleton and his colleagues set out to test the so-called Rebus model of “relaxed beliefs under psychedelics”, which frames the brain as a prediction engine. Under the model, the brain takes thoughts and information from the senses and shapes them according to its understanding of the world."
    },
    "FullText": {
      "type": "string",
      "example": "<full text of the original article, omitted for copyright reasons>"
    },
    "StoryDate": {
      "type": "string",
      "format": "date-time",
      "example": "2019-04-23T09:12:33.001Z"
    },
    "Source": {
      "required": [
        "Title",
        "Url"
      ],
      "properties": {
        "Title": {
          "type": "string",
          "example": "The Guardian"
        },
        "Url": {
          "type": "string",
          "format": "uri",
          "example": "https://www.theguardian.com/xyz"
        }
      }
    }
  }
}

Properties
Name Type Required Restrictions Description
Title string false none none
Summary string true none none
FullText string false none none
StoryDate string(date-time) false none none
Source Source false none none

PendingSummary

{
  "type": "object",
  "properties": {
    "SummaryRequestId": {
      "type": "string",
      "format": "uuid"
    },
    "Status": {
      "type": "string",
      "enum": [
        "QUEUED",
        "IN_PROGRESS"
      ]
    },
    "ExpectedWaitTime": {
      "type": "integer",
      "format": "int64"
    }
  }
}

Properties

Name Type Required Restrictions Description
SummaryRequestId string(uuid) false none none
Status string false none none
ExpectedWaitTime integer(int64) false none none
Enumerated Values
Property Value
Status QUEUED
Status IN_PROGRESS

Errors

Error Code Meaning
400 Bad Request – Your request is invalid.
401 Unauthorized – Your API token is wrong.
404 Not Found – The specified kitten could not be found.
406 Not Acceptable – You requested a format that isn’t json.
429 Too Many Requests – See Rate Limiting
500 Internal Server Error – We had a problem with our server. Try again later.
503 Service Unavailable – One of our servers is down, please try again later or contact Support

Support

Curation customers can receieve priority support by emailing support@curationcorp.com. A new ticket will be created and a Curation support representative will get in touch with you.

Alternatively, you can contact us via our live-chat, which should be available on this page, in the bottom-right hand corner.