Migrating from Quantexa (Aylien) News API
Replace /v6/news/stories with /v1/news/everything. The OAuth token exchange disappears, per_page goes from 100 to 250, and the IPTC taxonomy is shared — but the Aylien Query Language, cursor paging and three of the five endpoints need rewriting rather than renaming.
Before you start: the API is not reachable
docs.aylien.com and api.aylien.com no longer resolve — NXDOMAIN on both, checked against Cloudflare's resolver on 27 July 2026. Their status page still reads "All Systems Operational", so the public health indicator disagrees with DNS.
There is no formal end-of-life announcement; only the February 2023 acquisition, the rebrand from AYLIEN News API to Quantexa News API, and the company's own note that some previously well-served use cases are "no longer as strong a fit".
The mapping below is therefore derived from the official v6 documentation as archived on 19 June 2025. The APITube side was executed against the live API.
Why teams switch
| Quantexa News API v6 | APITube | |
|---|---|---|
| Availability | Domains do not resolve | Live |
| Per request | 100 stories | 250 |
| Paging | Cursor (next_page_cursor) | page + per_page |
| Auth | OAuth bearer token | X-API-Key header, no exchange |
| Sentiment | positive / neutral / negative label | Signed score per axis, plus per entity |
| Categories | IPTC MediaTopics + IAB | IPTC MediaTopics |
| Rate limit | 60/minute | 50/minute paid, 10/minute free |
Your first request
# Quantexa v6 (documented form — the host no longer resolves)
curl "https://api.aylien.com/v6/news/stories?title=tesla&language=en&per_page=100" \
-H "Authorization: Bearer YOUR_TOKEN"# APITube
curl "https://api.apitube.io/v1/news/everything?title=tesla&language.code=en&per_page=100" \
-H "X-API-Key: YOUR_API_KEY"AQL entity blocks become parameters
Quantexa put entity filters inside aql as entities:{{ ... }} blocks in a Lucene-like syntax. APITube has no query language of that shape, so each condition becomes a plain parameter:
| AQL condition | APITube |
|---|---|
surface_forms.text + type:Person | person.name |
surface_forms.text + type:Organization | organization.name |
surface_forms.text + type:Location | location.name |
stock_ticker | — no ticker filter exists |
overall_prominence, overall_frequency | — not filterable (frequency is in the response) |
links.wikidata | — not filterable (the link is in the response) |
type: alone | — APITube filters by named entity, not by type |
Names resolve against an index: organization.name=Apple works, Apple Inc returns 400 ER0220; location.name=New York City works, New York returns 400 ER0218. The endpoint that used to be /v2/autocomplete/suggestions/entity-names is now /v1/suggest/entities?prefix=.
Parameter mapping
| Quantexa | APITube | Note |
|---|---|---|
title | title | Lossless |
text | title | Narrows — Quantexa matched title and body |
body | — | No body-text search |
aql | person.name / organization.name / location.name | See above |
categories (IPTC) | category.id | Same numbers, medtop: prefix |
categories (IAB) | — | No IAB taxonomy |
industries | industry.id | Different id spaces — verify each value |
source.domain | source.domain | Max 3 |
source.name | — | Does not exist — sending it returns the whole index |
source.id | source.id | Different id spaces; remap through the domain |
source.locations.country | source.country.code | |
source.scopes.* | — | No editorial-scope filter |
source.rankings.alexa.rank | source.rank.opr | Alexa is discontinued; different scale |
author.name | author.name | Desk names return 400 ER0204 |
sentiment.title.polarity | sentiment.title.score.min / .max | Label → score band |
published_at [* TO *] | published_at.start / .end | Range becomes two parameters |
language | language.code | No ru, no uk |
per_page | per_page | 100 → 250 |
cursor | page | Cursor paging → page numbers |
sort_by=relevance | — | Returns 500 ER0183 with a search term |
return[] | — | No field selection |
The full table is in the migration kit.
Categories are asymmetric — worth knowing before you debug it
Filtering wants the code with a prefix: category.id=medtop:04000000.
The response puts an internal number on id and hides the IPTC code in links.self:
{
"id": 199,
"name": "economy, business and finance",
"taxonomy": "iptc_mediatopics",
"links": { "self": ".../iptc_mediatopics/medtop:04000000" }
}Child codes are the other catch. APITube holds 1 085 codes, but its children sit almost entirely in the 20000xxx branch, so codes from other branches fail:
# 400 ER0206 "category with ID 'medtop:01005000' not found."
curl "https://api.apitube.io/v1/news/everything?api_key=YOUR_API_KEY&category.id=medtop%3A01005000"Top-level codes are a mechanical rename; check each child code and fall back to its parent where missing.
Three endpoints need rebuilding
| Quantexa v6 | APITube |
|---|---|
/v6/news/stories | /v1/news/everything |
/v6/news/trends | /v1/news/trends — adds growth_rate |
/v6/news/histograms | Repeated /v1/news/count, one call per bucket |
/v6/news/time_series | Repeated /v1/news/count |
/v6/news/clusters | Nothing |
APITube has no interval aggregation, so a daily series is one count call per day. And clustering has no server-side counterpart at all: every article carries story.id and articles on the same story share it, but there is no cluster endpoint, no story_count, no earliest_story / latest_story, and story.id is not a filter. Grouping moves into your code.
What does not carry over
Body search. No body= parameter, and unknown parameters are ignored silently — a forwarded one returns the whole index with a 200.
Sentiment as a label. Quantexa filtered on positive / neutral / negative; APITube on a signed score. The boundary between them is a judgement call to re-tune, not arithmetic.
Cursor paging. Real Quantexa cursors cannot be translated — they encode sort values from an index that no longer exists.
Russian and Ukrainian. 400 ER0237, no substitute.
What you gain
Sentiment towards each entity — which Quantexa did not offer, and which makes "coverage of Tesla excluding the negative" a single filter (entity.sentiment.score.min). Plus sentiment.overall, topic and industry axes alongside IPTC, publisher political bias and Open Page Rank, readability scores, 250 articles per request, growth_rate on trends, and export to eight formats.
Next steps
- quantexa-apitube-migration-kit — every documented v6 parameter mapped, all five endpoints, an AQL rewriter, a drop-in shim for Node.js and Python (91 tests, byte-identical output between the two), and an AI prompt that refuses to invent endpoints
- Parameters reference
- Common migration issues