Tidenda

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:create scope. 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, pressrelease or media, written to each wire's meta.origin). A source added without an origin gets the one its class implies: pressrelease for a public authority or press release source, media for a copyrighted outlet, and wire for 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: full keeps 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_link by default and needs no licence for it. Full text from a copyrighted outlet needs a licence; without one, the source is always stored as headline_link.

  • AI use: none (the text is never sent to an AI model), local (only to the included local models) or external (to any connected model). It follows the class: external for a public authority or press release source, local for a licensed agency or any other source, and none for a copyrighted outlet. The Sources settings offer no choice. A source saved with an explicit aiUse keeps 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

  1. Made usable. The wire is created at draft and moved to usable at once, by the system. Like any document reaching usable, it gets a signed snapshot, and editors can see it immediately.
  2. 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.