Wires
How wires arrive, get IPTC topics and become translated articles.
On this page
Wires are the news-agency items, press releases and media notices an
organisation receives from outside. Each arrives as a core/newswire
document, is categorised by topic, and can become the source of an
article in a few clicks, translated on the way if needed.
How wires get in
Wires arrive in two ways, and both end in the same path: the same validation, deduplication, status, signing, categorisation and rights rules.
- Pushed. A feed integration sends each item to the platform's
API with an API key that has the
documents:createscope. See Pushing documents. - Fetched from a source. An administrator registers a feed under Settings > Sources, and the platform reads it on a schedule. See Sources below.
Every wire names its source, such as an agency, and that source's
own item id. A second arrival of the same source and item id creates
nothing, so a feed can safely resend. A pushed wire is never updated
in place: a corrected item is a new wire. A wire from a registered
source is updated when its item changes; see Updated
items. The document reference lists
the fields.
Sources
A source is a feed the organisation receives wires from: RSS (0.9x,
1.0 and 2.0), Atom or JSON Feed. Members with the owner or admin
role add them under Settings > Sources by pasting the feed's
address, or the address of a web page. For a web page, the feeds it
names in its head or links to are listed, falling back to the usual
feed addresses on the same site and then to the site's home page;
each is read first, so only working feeds are offered, with their
title, item count and latest item. A page the site's robots.txt
asks automated readers not to read is not read, and the search says
so; the feed's own address can be pasted instead. Several can be
added at once, with the same settings, one source per feed. A page
without a feed says so; watching pages without feeds is not
supported. Before anything is
saved, a preview shows up to ten of the wires a feed would create,
exactly as they would be stored. When no item in a feed carries full
text, the preview and the feed search say that the feed publishes
summaries, not full articles.
Each source carries:
Name and origin (
wire,pressreleaseormedia, written to each wire'smeta.origin). A source added without an origin gets the one its class implies:pressreleasefor a public authority or press release source,mediafor a copyrighted outlet, andwirefor a licensed agency or any other source.Class: public authority, press release, licensed agency, copyrighted outlet or other. The class sets the defaults below.
Licence: whether the organisation holds a licence to the full text.
Storage:
fullkeeps the text, images and enclosures.headline_link, shown as "Headline, summary and link", keeps the headline, the time, the summary the publisher put in the feed, and the link to the original, with none of the source's images or enclosures and never the full text:- an item with a separate summary (an RSS description beside
content:encoded, an Atom summary beside the content, a JSON Feed summary) keeps that summary as published, as plain text, up to 600 characters; - an item with a single body of at most 600 characters keeps it whole, as the summary;
- an item with a longer single body keeps an excerpt of at most 300 characters, cut at a word.
Outlets publish these summaries to be shared, so a copyrighted outlet is stored as
headline_linkby default and needs no licence for it. Full text from a copyrighted outlet needs a licence; without one, the source is always stored asheadline_link.- an item with a separate summary (an RSS description beside
AI use:
none(the text is never sent to an AI model),local(only to the included local models) orexternal(to any connected model). It follows the class:externalfor a public authority or press release source,localfor a licensed agency or any other source, andnonefor a copyrighted outlet. The Sources settings offer no choice. A source saved with an explicitaiUsekeeps it; a source whose class changes without one gets the AI use of its new class. The rule applies wherever a wire's text would reach a model: categorisation, translation and summary when an article is made from wires, AI steps on wires, and the source wires an on-demand review reads. A wire the rule excludes is left out, or the run is refused.Default priority (1 to 6) for its wires, and an optional language for items that do not state one.
Owner: the member responsible for the source.
Interval: how often the feed is read, at least every 5 minutes (default 15).
Every item becomes a valid core/newswire. The body is cleaned (no
scripts, styles or event handlers; links made absolute and limited to
http, https and mailto) and converted to the editor's text
format; markup that cannot be converted becomes plain paragraphs.
For a full source, images and enclosures are kept as links in
content.attachments; a headline_link wire has none. The link to
the original is meta.sourceUrl, the item's author line
meta.byline, and the registered source's id meta.sourceRef. The
author line is tidied, not rewritten: authors separated by commas or
semicolons are joined with ", " and extra spaces removed, while the
names keep their spelling and letter case.
Times are read with their time zone. An item with no date, or a date that cannot be read, gets the time it arrived; a date more than a day ahead is replaced by the time of arrival and noted.
A new source does not flood the wire list with its back catalogue. Its first read makes wires of at most 30 items, and only of items published in the last 48 hours, whichever is fewer, newest first. The older items are recorded as received and never become wires, also not on later reads. From the second read on, every new item becomes a wire. The source's health keeps what the first read did: how many items became wires, and how many were skipped as older than 48 hours or beyond the newest 30. A feed whose items are all older makes no wires on its first read, and says so.
An item that still cannot become a valid wire is not dropped silently: it is listed under the source's Rejections with the reason and an excerpt, for 30 days.
Deleting a source stops fetching. The wires it delivered stay, with their rights.
Updated items
Feeds republish items with corrections. When an item from a registered
source arrives again with a different headline, text, link, author
line or attachments, its wire is updated rather than duplicated: the
version number goes up, the update is recorded in the wire's history,
and a wire at usable gets a new signed snapshot. A change to the date
alone is not an update. Articles already made from the wire are not
changed. A withdrawn (cancelled) wire is left as it is.
The wire list shows each wire's version, when the current version
arrived (updatedAt) and when the wire first arrived
(firstReceivedAt).
Source health
Each source shows its health:
| Status | Meaning |
|---|---|
pending |
Never read, or switched back on and waiting for its next read. |
checking |
Being read right now. A first read with many items can take a little while. |
ok |
The last read worked. |
slow |
Fetching the feed took more than 5 seconds last time, or one or two reads in a row failed and are being retried. |
needs_attention |
Three or more reads in a row failed, or the source was paused after ten. |
paused |
Switched off by a member. |
Failed reads are retried after 1, 2, 4 and so on up to 60 minutes. After ten failures in a row the source is paused and marked as needing attention, with the reason in plain language, such as "The feed address returns 404 (not found)" or "Not a feed: received an HTML page". Switching it back on starts again from a clean slate. Check now reads a source at once.
Sources are read politely: with conditional requests, so an unchanged
feed costs almost nothing; honouring a server's request to wait
(Retry-After); at most two requests at a time to one server; and
half as often while a feed has not changed for a day (twice the
interval, up to an hour), until it changes again. Feed addresses must
be public http or https addresses: private and internal network
addresses are refused, also after a redirect, and at most three
redirects are followed. A response may be at most 5 MB and must
answer within 15 seconds; at most 200 items are read from one
response.
Every request names itself the same way, with the user agent
Tidenda-FeedReader/1.0 (+https://tidenda.com/feed-reader). Nothing
is disguised: no browser user agent, no browser automation to pass a
site's challenge, no CAPTCHA solving and no changing addresses. Pages
are requested as web pages and feeds as feeds, in the source's
language when it has one. robots.txt is honoured when a web page is
searched for feeds, following the rules for Tidenda-FeedReader, or
those for every reader when the site names none for it; a
robots.txt that cannot be read allows the page. A feed the
organisation adds is read whatever robots.txt says, as feed readers
conventionally do: it is a subscription, not a crawl. A site that
refuses automated readers stays unread. The publisher can allow
Tidenda-FeedReader; how is described at
tidenda.com/feed-reader.
What happens on arrival
- Made usable. The wire is created at
draftand moved tousableat once, by the system. Like any document reachingusable, it gets a signed snapshot, and editors can see it immediately. - Categorised. In the background, AI assigns one of the 17
top-level IPTC Media Topics, such as Politics, Economy & business
or Sport, and stores the topic's IPTC URI as
meta.iptcCategory. This never delays the wire. If categorisation fails, the wire stays uncategorised and fully usable; it is not retried.
Categorisation uses the platform's included model unless the organisation has replaced it with its own operation, under System settings > AI integrations > System defaults. See AI integrations.
How editors use them
Wires appear under Incoming wires, on a board each editor builds for themselves. A board starts empty. Each column follows one or more sources, and can also be limited to some topics: a wire shows in a column when it comes from one of the column's sources and, if the column has topics, carries one of them. A wire can show in several columns. Any source can be followed, including sources that push wires in through the API.
A column is named after its source, or "N sources" for several, until the editor renames it. Columns can be moved left or right and removed. Wires display with one title line or up to three. The board is part of the editor's own preferences: no one else sees it, it is never published, and it is the same on every device. On a narrow screen the board shows one column at a time, with a switcher at the top.
New wires appear at the top of every column they belong in as they arrive, without a reload. Each row shows the time, title, sender, source, priority and a topic label, and marks a wire that has been updated. Selecting a wire shows its full text beside the board.
From wire to article
Select one or more wires and run Create article from wires. The dialog asks for the article's language, news value, planned publishing time and authors. The platform then creates:
- a planning item with a text assignment;
- an article for that assignment, titled from the first wire and with the text of all selected wires as its body;
- a link from the article to each wire with the relation
source.
On-demand AI reviews read the wires through these links to check the article against its sources. The wire's topic is not copied.
Translation and summary
With AI assistance switched on, the platform translates the title and
body into the chosen language and writes a short summary as the
article's description, and marks the article as AI-assisted. Without
it, the wire text is copied as it is. Members with the owner or
admin role set this under System settings > Account.
The included translation supports English, Swedish, Danish, Norwegian (Bokmål), Finnish, German, French and Spanish. It reads the source language from the wire and detects it when the wire does not state one. The model is instructed to translate only and to keep names, numbers, dates, quotes and paragraph breaks. The summary is instructed to use only facts stated in the wire, and is written in the language of the article body: the chosen language when the body was translated, the wire's language when it was not. Both are drafts for an editor to check, not verified text. If the AI step fails, no article is created and the editor can try again or switch assistance off.
Wires are kept
Wires cannot be deleted from the app. Every wire stays in the wire
list with its earlier versions and signed snapshots, so an article
made from a wire always links to a wire that is still there. An item
the agency withdraws reaches the list as a cancelled wire rather
than disappearing.
Limits
- No search and no read or unread marking in the wire list.
- Boards are personal; a desk cannot share one board between editors.
- Sources are feeds only. Inbound email addresses and mailboxes are not available.
- The owner of a source that needs attention is not notified; the status shows in Settings > Sources and in the wire list.
- No automatic expiry of old wires.
- Categorisation is not retried and cannot be rerun from the interface.
- With assistance on, translation runs even when the wire is already in the chosen language. Switch translation off when publishing in the wire's language.