In this guide we’ll cover:

  • Adding content to be considered for the NPR App (NPR App and NPR App Mix)
  • This is geared toward Stations who wish to have their local content played in the NPR One Mix for the MPX Local Stories or NPR One Prioritized Local Stories collections

Some terminology

The NPR App is a unified version of what was formerly the NPR One and the NPR News apps. It combines both audio and non-audio content from both NPR and Member Stations and partners (Learn more about it here).

The mix of curated audio content from Member stations and NPR is what users may refer to as “NPR One”. Currently the word being used to describe this curated audio is the NPR One Mix. We’ll refer to this as “the NPR One mix” below.

Getting your content into the NPR App for curation (Audio or non-audio)

In order to correctly set up your document to be eligible for inclusion in our NPR Apps, you need to make sure your document is valid and is referencing one of the following collections:

  • MPX Local Stories (Document ID 319418027)
  • NPR One Prioritized Local Stories (Document ID 500549367)

See Getting Started for how to do PUT requests to CDS to publish documents along with a guide for generating a basic document

Below is an example JSON from a real-world network-published document that is in the MPX Local Stories (319418027) collection:

Expand to see the full JSON document
{
      "meta": {
        "assetInternalLinkDocuments": [],
        "documentLastModifiedDateTime": "2024-01-31T16:09:01.787Z",
        "extensionLinks": [],
        "profiles": []
      },
      "id": "1228103887",
      "title": "An ode to yodeling",
      "profiles": [
        {
          "href": "/v1/profiles/story",
          "rels": [
            "type"
          ]
        },
        {
          "href": "/v1/profiles/publishable",
          "rels": [
            "interface"
          ]
        },
        {
          "href": "/v1/profiles/document"
        },
        {
          "href": "/v1/profiles/renderable",
          "rels": [
            "interface"
          ]
        },
        {
          "href": "/v1/profiles/listenable",
          "rels": [
            "interface"
          ]
        },
        {
          "href": "/v1/profiles/has-audio",
          "rels": [
            "interface"
          ]
        },
        {
          "href": "/v1/profiles/has-images",
          "rels": [
            "interface"
          ]
        },
        {
          "href": "/v1/profiles/buildout",
          "rels": [
            "interface"
          ]
        }
      ],
      "owners": [
        {
          "href": "https://organization.api.npr.org/v4/services/s546"
        }
      ],
      "brandings": [
        {
          "href": "https://organization.api.npr.org/v4/services/s546"
        }
      ],
      "publishDateTime": "2024-01-31T13:00:41-05:00",
      "collections": [
        {
          "href": "/v1/documents/319418027",
          "rels": [
            "collection"
          ]
        },
        {
          "href": "/v1/documents/1090357359",
          "rels": [
            "category"
          ]
        }
      ],
      "audio": [
        {
          "href": "#/assets/1228118348",
          "rels": [
            "headline",
            "primary"
          ]
        }
      ],
      "authorizedOrgServiceIds": [
        "s546"
      ],
      "bylines": [
        {
          "href": "#/assets/1228118333"
        }
      ],
      "editorialLastModifiedDateTime": "2024-01-31T11:08:57-05:00",
      "images": [
        {
          "href": "#/assets/1228118337",
          "rels": [
            "primary",
            "promo-image-standard"
          ]
        }
      ],
      "layout": [
        {
          "href": "#/assets/1228118331-1000"
        },
        {
          "href": "#/assets/1228118331-1001"
        },
        {
          "href": "#/assets/1228118331-1002"
        },
        {
          "href": "#/assets/1228118331-1003"
        },
        {
          "href": "#/assets/1228118331-1004"
        },
        {
          "href": "#/assets/1228118331-1005"
        },
        {
          "href": "#/assets/1228118331-1006"
        },
        {
          "href": "#/assets/1228118331-1007"
        },
        {
          "href": "#/assets/1228118331-1008"
        }
      ],
      "nprDisplayType": "NewsStory",
      "recommendUntilDateTime": "2024-02-07T10:37:42-05:00",
      "robotsNoIndex": false,
      "teaser": "This hour, we speak with a musicologist, a DJ, and a professional singer about the age-old vocal practice of … yodeling.",
      "webPages": [
        {
          "href": "https://www.ctpublic.org/show/the-colin-mcenroe-show/2024-01-31/an-ode-to-yodeling",
          "rels": [
            "canonical"
          ]
        }
      ],
      "assets": {
        "1228118333": {
          "id": "1228118333",
          "name": "Josh Nilaya",
          "profiles": [
            {
              "href": "/v1/profiles/byline",
              "rels": [
                "type"
              ]
            },
            {
              "href": "/v1/profiles/document"
            }
          ]
        },
        "1228118337": {
          "enclosures": [
            {
              "height": 1730,
              "href": "https://npr.brightspotcdn.com/legacy/sites/wnpr/files/201710/roger_tincknell_101017.jpg",
              "rels": [
                "image-custom",
                "primary"
              ],
              "type": "image/jpeg",
              "width": 2550
            }
          ],
          "id": "1228118337",
          "producer": "Chion Wolf",
          "profiles": [
            {
              "href": "/v1/profiles/image",
              "rels": [
                "type"
              ]
            },
            {
              "href": "/v1/profiles/document"
            }
          ],
          "provider": "WNPR"
        },
        "1228118348": {
          "duration": 2520,
          "enclosures": [
            {
              "href": "https://traffic.omny.fm/d/clips/ac0be969-d7df-460c-a66c-a6f900e1ebd1/71dc4a0f-e8ca-4021-aec9-aa030026042d/9cfceae2-1dfd-4129-a18c-b1080107c74c/audio.mp3",
              "type": "audio/mpeg"
            }
          ],
          "id": "1228118348",
          "isAvailable": true,
          "isDownloadable": true,
          "isEmbeddable": false,
          "isStreamable": false,
          "profiles": [
            {
              "href": "/v1/profiles/audio",
              "rels": [
                "type"
              ]
            },
            {
              "href": "/v1/profiles/document"
            }
          ]
        },
        "1228118331-1000": {
          "id": "1228118331-1000",
          "profiles": [
            {
              "href": "/v1/profiles/text",
              "rels": [
                "type"
              ]
            },
            {
              "href": "/v1/profiles/document"
            }
          ],
          "text": "What is yodeling, anyway? Some consider it singing, some say it’s an ululation, and still others consider it merely a means to herd animals. Whatever yodeling is, one thing’s clear: Yodeling has been around for thousands of years and shows no signs of disappearing."
        },
        "1228118331-1001": {
          "id": "1228118331-1001",
          "profiles": [
            {
              "href": "/v1/profiles/text",
              "rels": [
                "type"
              ]
            },
            {
              "href": "/v1/profiles/document"
            }
          ],
          "text": "This hour, we speak with a musicologist, a DJ, and a professional singer about this age-old vocal practice. We trace yodeling’s history from its humble, utilitarian roots to its place in modern day pop music and beyond."
        },
        "1228118331-1002": {
          "id": "1228118331-1002",
          "profiles": [
            {
              "href": "/v1/profiles/text",
              "rels": [
                "type"
              ]
            },
            {
              "href": "/v1/profiles/document"
            }
          ],
          "text": "GUESTS:"
        },
        "1228118331-1003": {
          "id": "1228118331-1003",
          "profiles": [
            {
              "href": "/v1/profiles/text",
              "rels": [
                "type"
              ]
            },
            {
              "href": "/v1/profiles/document"
            }
          ],
          "text": "
    \n
  • Bart Plantenga: The author of several books including <a href=\"https://bartplantenga.weebly.com/yodel-in-hifi.html\" class=\"Link\" target=\"_blank\">Yodel in Hi-Fi: From Kitsch Folk to Contemporary Electronica</a>
  • \n
  • <a href=\"https://rogertincknell.com/\" class=\"Link\" target=\"_blank\">Roger Tincknell</a>: A cowboy yodeler, musician, and traveling performer
  • \n
  • Timothy Wise: Author of <a href=\"https://www.upress.state.ms.us/Books/Y/Yodeling-and-Meaning-in-American-Music\" class=\"Link\" target=\"_blank\">Yodeling and Meaning in American Music</a>
  • \n
  • Chion Wolf: Host of <a href=\"https://ctpublic.org/audacious\" class=\"Link\" target=\"_blank\">Audacious</a> on Connecticut Public
  • \n
" }, "1228118331-1004": { "id": "1228118331-1004", "profiles": [ { "href": "/v1/profiles/text", "rels": [ "type" ] }, { "href": "/v1/profiles/document" } ], "text": "The Colin McEnroe Show is available as a podcast on <a href=\"https://podcasts.apple.com/us/podcast/the-colin-mcenroe-show/id714179884\" class=\"Link\" target=\"_blank\">Apple Podcasts</a>, <a href=\"https://open.spotify.com/show/0AXtqrzWounIoJyIqz003p\" class=\"Link\" target=\"_blank\">Spotify</a>, <a href=\"https://podcasts.google.com/feed/aHR0cHM6Ly93d3cub21ueWNvbnRlbnQuY29tL2QvcGxheWxpc3QvYWMwYmU5NjktZDdkZi00NjBjLWE2NmMtYTZmOTAwZTFlYmQxLzcxZGM0YTBmLWU4Y2EtNDAyMS1hZWM5LWFhMDMwMDI2MDQyZC9iNjk1Y2I4Ny1mNmE5LTRjNzYtOGYxMS1hYTAzMDAyNjA0M2IvcG9kY2FzdC5yc3M\" class=\"Link\" target=\"_blank\">Google Podcasts</a>, <a href=\"https://music.amazon.com/podcasts/9b6b3cee-f69b-4729-a78b-181f851d80e8/the-colin-mcenroe-show\" class=\"Link\" target=\"_blank\">Amazon Music</a>, <a href=\"https://tunein.com/podcasts/News--Politics-Podcasts/The-Colin-McEnroe-Show-p1208473/\" class=\"Link\" target=\"_blank\">TuneIn</a>, <a href=\"https://www.listennotes.com/podcasts/the-colin-mcenroe-show-connecticut-public-lXR08dxQSM5/\" class=\"Link\" target=\"_blank\">Listen Notes</a>, or wherever you get your podcasts. Subscribe and never miss an episode!" }, "1228118331-1005": { "id": "1228118331-1005", "profiles": [ { "href": "/v1/profiles/text", "rels": [ "type" ] }, { "href": "/v1/profiles/document" } ], "text": "<a href=\"https://www.ctpublic.org/newsletters\" class=\"Link\" target=\"_blank\">Subscribe to The Noseletter</a>, an email compendium of merriment, secrets, and ancient wisdom brought to you by The Colin McEnroe Show." }, "1228118331-1006": { "id": "1228118331-1006", "profiles": [ { "href": "/v1/profiles/text", "rels": [ "type" ] }, { "href": "/v1/profiles/document" } ], "text": "Join the conversation on <a href=\"https://facebook.com/ColinMcShow\" class=\"Link\" target=\"_blank\">Facebook</a> and <a href=\"https://twitter.com/colinmcshow\" class=\"Link\" target=\"_blank\">Twitter</a>." }, "1228118331-1007": { "id": "1228118331-1007", "profiles": [ { "href": "/v1/profiles/text", "rels": [ "type" ] }, { "href": "/v1/profiles/document" } ], "text": "Colin McEnroe and Jonathan McNicol contributed to this show, which originally aired October 10, 2017." }, "1228118331-1008": { "id": "1228118331-1008", "profiles": [ { "href": "/v1/profiles/text", "rels": [ "type" ] }, { "href": "/v1/profiles/document" } ], "text": "Our programming is made possible thanks to listeners like you. <a href=\"https://www.ctpublic.org/donate\" class=\"Link\" target=\"_blank\">Please consider supporting this show and Connecticut Public with a donation today</a>." } } }

A few details about this document:

  • First and most importantly - your document should have audio attached to it as an asset and contain the has-audio and listenable profiles. The backend for our NPR One Mix requires this to make your document “visible”. The additional thing that is needed is your audio asset enclosures require a mime type:
"enclosures": [
  {
    "href": "https://traffic.omny.fm/d/clips/ac0be969-d7df-460c-a66c-a6f900e1ebd1/71dc4a0f-e8ca-4021-aec9-aa030026042d/9cfceae2-1dfd-4129-a18c-b1080107c74c/audio.mp3",
    "type": "audio/mpeg"
  }
],
  • When you add in has-audio as a profile to your document, it enforces adding an audio array that looks like:
"audio": [
  {
    "href": "#/assets/1228118348",
    "rels": [
      "headline",
      "primary"
    ]
  }
],

The elements of this audio array are internal links pointing to audio assets found in the assets array. Note that for the audio you want to play in the App you must have a rel type here of primary for your asset.

For more on has-audio see the profile documentation here

  • The Audio Asset enclosure elements contain a type parameter which you can use for different MIME types ( See more here about type and the audio profile ). While type is free text (Non-enumerated) there are only a few MIME types supported in the NPR App backend:
type value in CDS audio enclosure element Fully qualified MIME Type
‘audio/aac’ ‘audio/aac’
‘audio/mpegurl’ ‘application/vnd.apple.mpegurl’
‘application/vnd.apple.mpegurl’ ‘application/vnd.apple.mpegurl’
‘audio/mp3’ ‘audio/mp3’
‘audio/mp4’ ‘audio/aac’
‘audio/mpeg’ ‘audio/mp3’

Need more help with publishing asset ids? See this part of Getting Started


Here’s an example of an audio enclosure element using audio/mpeg as the mime type:

 "enclosures": [
    {
      "href": "https://traffic.omny.fm/d/clips/ac0be969-d7df-460c-a66c-a6f900e1ebd1/71dc4a0f-e8ca-4021-aec9-aa030026042d/9cfceae2-1dfd-4129-a18c-b1080107c74c/audio.mp3",
      "type": "audio/mpeg"
    }
  ]
  • The key thing that inserts this into the curation flow for local stories in the NPR App Mix is having the collection of 319418027:
"collections": [
        {
          "href": "/v1/documents/319418027",
          "rels": [
            "collection"
          ]
        },
        // ...
]
  • This story has audio. It should be noted that only stories with audio play in the NPR App Mix, but there are plans to support non-audio content on the app in the future. CDS is ahead of the editorial technology in this case.

Generally, the NPR One mix only plays local stories that are less than a week old. This means that your publishDateTime field needs to have an ISO timestamp no older than a week.

"publishDateTime": "2024-01-31T13:00:41-05:00"

The NPR One mix will automatically filter out stories older than that and users will no longer hear them. Additionally, you can choose to set an expiration date on your stories so that they are excluded from the NPR One flow after a certain ISO formatted timestamp. Please include a proper ISO formatted expiration date on your document using the recommendUntilDateTime field to ensure users are hearing the most up-to-date and accurate news from your station.

"recommendUntilDateTime": "2024-02-07T10:37:42-05:00",

If the current ISO time is after the recommendUntilDateTime in your document, then your document gets ignored by the NPR One Mix algorithm.

Curation

The NPR App Editorial team at NPR focuses on creating the most engaging blend of national and local NPR stories - both from the NPR headquarters and from the network of stations. When you submit your content to either MPX Local Stories or NPR One Prioritized Local Stories, those stories are periodically served to listeners of the NPR One mix, with the most-recently published stories served first. As mentioned, the focus today is on story audio content, however there is future potential for non-audio content from stations to be available to NPR App users.

There are regular site promotions for non-audio and audio content alike from network producers. See this guide from the NPR Studio site for more information.


© 2024 npr