FAQs
Frequently asked questions regarding the migration from Mediadirect
I am unable to see all of the editorial stories I saw on the Mediadirect feed, why is this?
A common reason is that the 'Create' product parameter isn't being used.
Add the following to your feed url will make you see all of our Create content= &product=paproduct:create
Sports data that may have been contracted under the original Mediadirect feed can now be found in either our Sports, Football or Cricket APIs.
Why am I unable to see the Finance data that was in the Mediadirect feed?
We've recently launched Finance data feeds inside Content API - If you require access to these then please get in touch.
They are published under a separate product from Create (the newswire) so to access them you must add the product parameter &product=paproduct:data
You could also request another API key that only has the data feeds on, please get in touch if that is required.
If you want to only access the Finance data feeds and protect against future data feeds being added you can add a parameter of &andSubject=paservice:data:finance
To see examples of the content published on the Finance feed please see this page RSS Examples
The Images coming via the new feed are too large, can these be compressed?
The images from the SFTP are full resolution and aren't compressed.
If you require compression you can make use of the CDN that Content API Images are served via.
This CDN supports dynamic image parameters like resizing, cropping and compression.
Example - limit to 1080 width
Use width or w
For this example it reduces a image that is size 8.9MB to 48KB
Example - limit to 1080 height
Use height or h
For this example it reduces a image that is size 8.9MB to 79KB
Example - reduce Device Pixel Ratio (DPR)
Use dpr
For this example it reduces a image that is size 8.9MB to 358KB
How often do we need to poll the Content API?
The Content API should be polled every 30 to 60 seconds.
The Content API CDN contains a small cache to protect our infrastructure so polling more than this won't have much benefit but will run through your quota much quicker.
If receiving breaking news much quicker than this is a requirement then please get in touch to give us feedback and discuss options.
I am getting 403 errors when calling the Content API. Have I exceeded my Quota?
It sounds like you have exceeded your quota. Please get in touch with us to change the quota.
Usage quotas vary by contract.
PA’s API usage tariffs are listed below:
-
100,000 total calls per month and up to 10 calls per second (default for clients moving over from Mediadirect)
-
250,000 total calls per month and up to 10 calls per second
-
1 million total calls per month and up to 10 calls per second
How Items Are Updated
Text items can be updated in three ways.
Important Corrections
Corrections do alter the editorial substance of the item.
These occur when:
- Additional content is added to the item.
- Important factual details are changed or clarified.
Corrections will include an editorial note explaining what has changed.
Non-Meaningful Updates
Non-meaningful updates do not alter the editorial substance of the item.
These occur when:
- Metadata is modified, such as adding or changing tags.
- Media is added for a product like PA Ready. These changes are not visible in Create or the Newswire.
- Minor spelling mistakes are corrected.
Embargo Lifts
- Unembargoed customers: The item will appear in your feed for the first time. However it will contain metadata which shows it as being a later version and will contain correction metadata.
- Embargoed customers: The item will appear the same as any other correction, accompanied by a description note confirming the embargo has lifted and the content may now be reported on.
Identifying the Update Type
Each updated item includes a signal entry in the subject array that indicates whether the update is a correction or a non-meaningful update.
Corrections
A correction is indicated by the sig:correction signal code.
JSON (NinJS):
"subject": [
{
"code": "sig:correction",
"name": "Correction",
"profile": "sig",
"scheme": "http://cv.iptc.org/newscodes/signal/",
"rel": "signal"
}
]RSS:
<category domain="urn:pa:subject:sig">Correction</category>ATOM:
<category term="sig:correction" scheme="urn:pa:subject:sig" label="Correction" />Note: If a story was originally published under embargo, customers who do not receive embargoed content will see a
sig:correctionsignal on the first version they receive — even though it is their initial delivery of the item. This is because the embargo lift is treated as a correction in the publishing workflow.
Non-Meaningful Updates
A non-meaningful update is indicated by the sig:update signal code.
JSON (NinJS):
"subject": [
{
"code": "sig:update",
"name": "Update",
"profile": "sig",
"scheme": "http://cv.iptc.org/newscodes/signal/",
"rel": "signal"
}
]RSS:
<category domain="urn:pa:subject:sig">Update</category>ATOM:
<category term="sig:update" scheme="urn:pa:subject:sig" label="Update"/>Tip: If the signal entry is absent from the
subjectarray, the item is the original version and has not been updated.
Ordering Your Feed
There are three timestamps available for ordering results. Each behaves differently, so choosing the right one is important.
firstcreated
firstcreatedSet the first time an item is published. This value never changes.
Note on embargoed content: For stories originally published under embargo, firstcreated retains the original publication time — it does not update when the embargo lifts. If you are an unembargoed customer ordering by firstcreated, these stories will appear inline at their original position in the feed and may be buried among older content.
If this behaviour is causing issues for your integration look at using the issued time or please contact us with feedback.
Parameter
Descending - &sort=firstcreated:desc
Ascending - &sort=firstcreated:asc
Important: If you are sorting by
firstcreatedand need to perform a time-based search usingstart/endparameters, you must also includerangeField=firstcreatedin your query.
versioncreated
versioncreatedUpdated every time the item is modified, regardless of the nature of the change.
Ordering by versioncreated means every update — including non-meaningful ones — will push the item back to the top of the feed. This is useful if you need to ingest every change published to your service.
Parameter
Descending - &sort=versioncreated:desc
Ascending - &sort=versioncreated:asc
issued
issuedA curated timestamp reflecting the most recent editorially significant moment. It is set based on whichever of the following occurred most recently:
- The item was first published (mirrors the
firstcreatedvalue). - The item received a correction.
- The item's embargo expired.
Recommended for most use cases. If you want important updates to resurface a story without every minor modification doing the same, use issued as your sort parameter.
Parameter
Descending - &sort=issued:desc
Ascending - &sort=issued:asc
Important: If you are sorting by
issuedand need to perform a time-based search usingstart/endparameters, you must also includerangeField=issuedin your query.
Tiebreaker sort parameter
Because it is feasible to have multiple items with the same timestamp it is recommended to add a second sort parameter of uri
&sort=issued:desc&sort=uri
This way when you're paging through API results you won't get different ordering for the same items.
Events
What Is an Event?
In PA terminology, an event represents all content sharing the same Topic and Keyword pairing on a given date.
Identifying an Item's Event
Each item contains an event array that indicates which event(s) it belongs to.
There will always be an entry with a profile value of partOf which is the item's event.
Please see below for an exmaple.
Multiple Events (Sidebars)
An item may be associated with two events when it is a sidebar. In this case, inspect the rel field to determine:
- Which event is the item's own event — identified by
"rel": "partOf":
{
"code": "paevent:41604f933badd1976da66363bbade134c8649746c5cb7c4c2a511bf63cc24e84",
"name": "Prisons Huntley Case 26/02/2026",
"profile": "paevent",
"scheme": "https://content.api.pressassociation.io/v1/event",
"rel": "partOf"
}- Which event is the parent event that this item is a sidebar of — identified by
"rel": "relatedTo":
{
"code": "paevent:1d36d19a56a59330eb707f1a6cffde1d26f56c0377d6bc174086e2bf89929f0c",
"name": "Prisons Huntley 26/02/2026",
"profile": "paevent",
"scheme": "https://content.api.pressassociation.io/v1/event",
"rel": "relatedTo"
}Finding Other Stories in an Event
Use the event query parameter on the /item endpoints to retrieve all content associated with a given event:
GET /item?event=paevent:{eventId}.partOf
This can be combined with the type and profile parameters to filter for specific content types — for example, returning only related images, video, or text stories.
Retrieving the Main Story for a Sidebar
If you have a sidebar item and need to find its parent story, filter the /item endpoint using the relatedTo relationship:
GET /item?event=paevent:{eventId}.relatedTo
This returns items belonging to the parent event that the sidebar is associated with.
I want a feed of just images, is this possible?
Yes!
It's as simple as using the type filter:
https://content.api.pressassociation.io/v1/item?product=paproduct:create&type=pictureYou could also get a combined feed of our pictures and infographics:
https://content.api.pressassociation.io/v1/item?product=paproduct:create&type=picture&type=graphicI want a feed of just video, is this possible?
Yes!
Again it is as simple as using the type filter:
https://content.api.pressassociation.io/v1/item?product=paproduct:create&type=videoHow can I see if my feed of images or video have related stories?
All media items with have an event id. If you want to look to see if we have related stories for the media assets then you can query for stories with the same event code.
For example an picture might have this event entry:
"event": [
{
"code": "paevent:27d819f74dd312f08d5147b931995a28406cfa786c22431945a93e1c121064dc",
"name": "Transport Cars 05/03/2026",
"rel": "partOf",
"profile": "paevent",
"scheme": "http://content-repository/v1/event"
}
]and the query for related stories would be
https://content.api.pressassociation.io/v1/item?product=paproduct:create&profile=story&event=paevent:27d819f74dd312f08d5147b931995a28406cfa786c22431945a93e1c121064dc.partOfNote: the .partOf suffix is important for not mixing up sidebars and their related stories.
For a latest post can I assigned a post number for each item?
Latest posts are tied to an event which is all items published on a date with the topic and keyword combinations.
If you want to know an order number for a latest post you simply need to count the number of latest posts for it's event ordered by first created.
For example for this latest post:
{
"uri": "1c1cd640-61a7-4f7d-8e97-e107c1fe9344",
"type": "text",
"profile": "asset",
"version": "1",
"firstcreated": "2026-03-05T13:40:26Z",
"versioncreated": "2026-03-05T13:40:26Z",
"issued": "2026-03-05T13:40:26Z",
"urgency": 6,
"pubstatus": "usable",
"language": "en",
"byline": "Press Association",
"headline": "Politics Iran",
"body_text": "British Airways has announced it will operate a further flight from Muscat, Oman, to London Heathrow.\n\nIt said in a statement: “We remain unable to operate flights from Abu Dhabi, Amman, Bahrain, Doha, Dubai and Tel Aviv.\n\n“We have scheduled a further flight from Oman (Muscat) to London Heathrow departing at 2.30 local time (10.30pm GMT) on March 8.\n\n“This flight is for BA customers who are in Oman or the UAE with an existing booking.\n\n“If you wish to travel on this flight, please contact us via our dedicated phone line on +44 203 467 3854.\n\n“Our teams will also be getting in touch with BA customers directly via email.”",
"body_html": "<p>British Airways has announced it will operate a further flight from Muscat, Oman, to London Heathrow.</p><p>It said in a statement: “We remain unable to operate flights from Abu Dhabi, Amman, Bahrain, Doha, Dubai and Tel Aviv.</p><p>“We have scheduled a further flight from Oman (Muscat) to London Heathrow departing at 2.30 local time (10.30pm GMT) on March 8.</p><p>“This flight is for BA customers who are in Oman or the UAE with an existing booking.</p><p>“If you wish to travel on this flight, please contact us via our dedicated phone line on +44 203 467 3854.</p><p>“Our teams will also be getting in touch with BA customers directly via email.”</p>",
"subject": [
{
"code": "paservice:news",
"name": "News",
"profile": "paservice",
"scheme": "https://content.api.pressassociation.io/v1/subject",
"rel": "partOf"
},
{
"code": "paservice:news:uk",
"name": "UK",
"profile": "paservice",
"scheme": "https://content.api.pressassociation.io/v1/subject",
"rel": "partOf"
},
{
"code": "paservice:politics",
"name": "Politics",
"profile": "paservice",
"scheme": "https://content.api.pressassociation.io/v1/subject",
"rel": "partOf"
},
{
"code": "paservice:politics:foreign-affairs",
"name": "Foreign Affairs",
"profile": "paservice",
"scheme": "https://content.api.pressassociation.io/v1/subject",
"rel": "partOf"
},
{
"code": "patopic:politics",
"name": "Politics",
"profile": "patopic",
"scheme": "https://content.api.pressassociation.io/v1/subject",
"rel": "about"
},
{
"code": "pakeyword:iran",
"name": "Iran",
"profile": "pakeyword",
"scheme": "https://content.api.pressassociation.io/v1/subject",
"rel": "about"
},
{
"code": "paterritory:uk",
"name": "UK",
"profile": "paterritory",
"scheme": "https://content.api.pressassociation.io/v1/subject",
"rel": "intendedFor"
},
{
"code": "contributor:pa",
"name": "PA",
"profile": "contributor",
"scheme": "https://content.api.pressassociation.io/v1/subject",
"rel": "contributedBy"
},
{
"code": "medtop:11000000",
"name": "politics",
"profile": "medtop",
"scheme": "https://content.api.pressassociation.io/v1/subject",
"rel": "about"
},
{
"code": "medtop:20000638",
"name": "international relations",
"profile": "medtop",
"scheme": "https://content.api.pressassociation.io/v1/subject",
"rel": "about"
}
],
"event": [
{
"code": "paevent:4fb477be5d987dd17548932ffe3ba9c47c65e4f8c52ba2301e0834db043f77b8",
"name": "Politics Iran 05/03/2026",
"profile": "paevent",
"scheme": "https://content.api.pressassociation.io/v1/event",
"rel": "partOf"
}
],
"place": [
{
"code": "iso:code:3166:GB",
"name": "United Kingdom",
"profile": "isocountry",
"scheme": "https://www.iso.org",
"rel": "about"
}
],
"links": [
{
"rel": "self",
"href": "https://content.api.pressassociation.io/v1/item/1c1cd640-61a7-4f7d-8e97-e107c1fe9344"
}
]
}We can construct an API call using the items event.code (the entry with a rel of partOf) and the firstcreated time.
An example of this is:
https://content.api.pressassociation.io/v1/item?product=paproduct:create&type=text&profile=asset&event=paevent:4fb477be5d987dd17548932ffe3ba9c47c65e4f8c52ba2301e0834db043f77b8.partOf&sort=firstcreated:desc&rangeField=firstcreated&end=2026-03-05T13:40:26Z&fields=totalWhat is the final date to move off Mediadirect?
March 31st 2026
Updated 14 days ago
If you have any other questions regarding the migration, please contact [email protected] .