RCP REST API
Authenticated, subscription-aware access to the exact content your membership level unlocks.
All routes operate under /wp-json/rcp/v1/ and automatically exclude posts older than 7 days.
Authentication
The RCP API uses HTTP Basic Authentication. You'll need two things:
1. Your Email
The email address associated with your Radio Content Pro account.
2. Application Password
Generate one from your Account Settings under "Application Passwords".
curl -u [email protected]:xxxx-xxxx-xxxx-xxxx \
'https://app.radiocontentpro.com/wp-json/rcp/v1/feed?per_page=5'Security Note: Application passwords are separate from your login password. You can revoke them anytime without affecting your main account access.
API Endpoints
Base URL: https://app.radiocontentpro.com/wp-json/rcp/v1
/feedRetrieve a paginated list of posts you have access to.
Parameters
| Name | Type | Default | Description |
|---|---|---|---|
| per_page | integer | 10 | Posts per request (max 50) |
| page | integer | 1 | Page number for pagination |
| after | ISO 8601 | — | Return only posts published after this date/time |
| fields | string | default set | Comma-separated field names or "all" |
/posts/{id}Fetch a single post by ID. Returns 403 if post is outside your subscription level.
Parameters
| Name | Type | Default | Description |
|---|---|---|---|
| fields | string | default set | Comma-separated field names or "all" |
/media/{id}Download a protected media file. Binary response streamed directly.
Response Fields
Each post in the API response includes these fields. Use the fields parameter to request only what you need.
Basic
| id | Unique post identifier |
| slug | URL-friendly post slug |
| title | Post title |
| published | ISO 8601 publish date/time |
| modified | ISO 8601 last modified date/time |
| link | Permalink to the post |
Content
| content_html | Full HTML content |
| content_text | Plain text content |
| excerpt | Short excerpt/summary |
| blog_post_title | Blog-formatted title |
| blog_post_html | Blog-formatted HTML |
| blog_post_text | Blog-formatted plain text |
Media
| featured_image | Object with url, width, height, alt |
| featured_image_html | Ready-to-use <img> tag |
On-Air Scripts
| tease_1, tease_2, tease_3 | On-air tease variations (HTML) |
| tease_1_text, tease_2_text, tease_3_text | Tease variations (plain text) |
| 10_second_script | 10-second read script (HTML) |
| 10_second_script_text | 10-second read script (plain text) |
| 20_second_script | 20-second read script (HTML) |
| 20_second_script_text | 20-second read script (plain text) |
| commentary_video_script | Video commentary script (HTML) |
| commentary_video_script_text | Video commentary script (plain text) |
Response Variations
| edgy_response | Edgier tone response (HTML) |
| mainstream_response | Mainstream tone response (HTML) |
| family_friendly_response | Family-friendly response (HTML) |
| *_text variants | Plain text versions of each response |
Phone Topics
| phone_topic_1 through phone_topic_4 | Caller discussion topics (HTML) |
| phone_topic_*_text | Plain text versions |
Social Media
| facebook_post | Facebook-ready post (HTML) |
| facebook_post_text | Facebook post (plain text) |
| x_post_edgy | X/Twitter post - edgy tone |
| x_post_mainstream | X/Twitter post - mainstream tone |
| x_post_family_friendly | X/Twitter post - family-friendly |
| instagram_post | Instagram caption (HTML) |
| instagram_post_text | Instagram caption (plain text) |
Social Thought Starters
| other_social_thought_starter_edgy_1, _2 | Additional edgy social prompts |
| other_social_thought_starter_mainstream_1, _2 | Additional mainstream prompts |
| other_social_thought_starter_family_friendly_1, _2 | Additional family-friendly prompts |
AI & Metadata
| ai_image_generation_prompt | Prompt for AI image generation |
| categories | Array of category objects |
Field Filtering
Optimize your API responses by requesting only the fields you need. This reduces payload size and improves performance.
Get all available fields:
?fields=allGet specific fields:
?fields=title,blog_post_html,featured_imageGet social content only:
?fields=title,facebook_post,x_post_mainstream,instagram_postTip: If you don't specify fields, you'll receive a default set of commonly-used fields.
Code Examples
JSJavaScript / Node.js
// Fetch latest content from RCP API
const credentials = btoa(`${email}:${appPassword}`);
const response = await fetch(
'https://app.radiocontentpro.com/wp-json/rcp/v1/feed?per_page=10&fields=title,blog_post_html,featured_image',
{
headers: {
'Authorization': `Basic ${credentials}`,
},
}
);
const posts = await response.json();
posts.forEach(post => {
console.log(post.title);
console.log(post.blog_post_html);
});PHPPHP
<?php
$email = '[email protected]';
$appPassword = 'xxxx-xxxx-xxxx-xxxx';
$ch = curl_init();
curl_setopt_array($ch, [
CURLOPT_URL => 'https://app.radiocontentpro.com/wp-json/rcp/v1/feed?per_page=10',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_USERPWD => "$email:$appPassword",
]);
$response = curl_exec($ch);
$posts = json_decode($response, true);
foreach ($posts as $post) {
echo $post['title'] . "\n";
}
?>cURLCommand Line
curl -u [email protected]:xxxx-xxxx-xxxx-xxxx \
'https://app.radiocontentpro.com/wp-json/rcp/v1/feed?per_page=5'API Principles
Versioned & Stable
The current v1 API is locked. Future updates won't break your existing integration.
Subscription-Aware
The API automatically filters content based on your membership level. No extra logic needed.
Fresh Content
New stories arrive every 5 minutes. Posts older than 7 days are automatically excluded.
Ready to Build?
API access is included with every RCP subscription. Start your free trial to get your credentials.
Need help? Contact our team