Media Bridge CRM API
Use the Media Bridge CRM API to manage reporter relationships, record meetings, and track distribution outcomes.Authentication
All API requests require an API key in the PULITZER-API-KEY header.
Header Setup
PULITZER-API-KEY: YOUR_API_KEYWorkspace Types
This API targets Media Bridge CRM workspaces only. Team workspaces (for team collaboration) are managed separately.
curl -X GET "https://api.pulitzer.ai/live/openapi/workspace/list" \
-H "PULITZER-API-KEY: YOUR_API_KEY"List Workspaces
List user's CRM workspaces.
GET https://api.pulitzer.ai/live/openapi/workspace/listResponse
{
"status": "SUCCESS",
"success": true,
"data": [
{
"id": 1,
"name": "ํ
ํฌ PRํ",
"company_name": "์ฃผ์ํ์ฌ ํ
ํฌ",
"keywords": [
"AI",
"์คํํธ์
"
],
"created_kst": "2026-01-15T09:00:00"
}
]
}curl -X GET "https://api.pulitzer.ai/live/openapi/workspace/list" \
-H "PULITZER-API-KEY: YOUR_API_KEY"Create Workspace
Create a new CRM workspace. Limited to 1 per user.
POST https://api.pulitzer.ai/live/openapi/workspace/createRequest Body Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
name | string | Yes | Workspace name (1-100 chars) |
company_name | string | No | Company name |
keywords | string[] | No | Monitoring keywords |
curl -X POST "https://api.pulitzer.ai/live/openapi/workspace/create" \
-H "PULITZER-API-KEY: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Tech PR Team",
"company_name": "Tech Corp",
"keywords": ["AI", "startup", "investment"]
}'List Reporters
List reporters in a workspace with pagination.
GET https://api.pulitzer.ai/live/openapi/workspace/{workspace_id}/reportersQuery Parameters
| Parameter | Type | Description |
|---|---|---|
page | integer | Page number (default: 1) |
page_size | integer | Page size (1-100, default: 20) |
keyword | string | Search (reporter name/media) |
is_distribution_target | boolean | Filter distribution targets only |
Response
{
"status": "SUCCESS",
"success": true,
"data": [
{
"reporter_id": 42,
"name": "๊น๊ธฐ์",
"email": "reporter@media.com",
"media": "IT์กฐ์ ",
"is_managed": true,
"is_distribution_target": true,
"memo": "AI ๋ถ์ผ ์ ๋ฌธ"
}
],
"page_count": 5,
"total_count": 93
}curl -X GET "https://api.pulitzer.ai/live/openapi/workspace/1/reporters?page=1&page_size=20" \
-H "PULITZER-API-KEY: YOUR_API_KEY"Add Reporter
Add a reporter to the workspace.
POST https://api.pulitzer.ai/live/openapi/workspace/{workspace_id}/reportersRequest Body Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
name | string | Yes | Reporter name |
email | string | Yes | Reporter email |
media | string | No | Media outlet |
is_distribution_target | boolean | No | Distribution target (default: false) |
curl -X POST "https://api.pulitzer.ai/live/openapi/workspace/1/reporters" \
-H "PULITZER-API-KEY: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Jane Reporter",
"email": "reporter@media.com",
"media": "TechMedia",
"is_distribution_target": true
}'Reporter News
Get recent news articles by a specific reporter.
GET https://api.pulitzer.ai/live/openapi/workspace/{workspace_id}/reporters/{reporter_id}/newsQuery Parameters
| Parameter | Type | Description |
|---|---|---|
page | integer | Page number |
page_size | integer | Page size |
Response
{
"status": "SUCCESS",
"success": true,
"data": [
{
"id": 1001,
"title": "AI ์คํํธ์
ํฌ์ ํธ๋ ๋",
"url": "https://media.com/article/1001",
"media_name": "IT์กฐ์ ",
"reporter_name": "๊น๊ธฐ์",
"pub_kst": "2026-05-20T09:30:00"
}
],
"page_count": 3,
"total_count": 28
}curl -X GET "https://api.pulitzer.ai/live/openapi/workspace/1/reporters/42/news?page=1&page_size=10" \
-H "PULITZER-API-KEY: YOUR_API_KEY"Meeting Management
Record activities (meetings, calls, emails) with reporters.
POST https://api.pulitzer.ai/live/openapi/workspace/{workspace_id}/reporters/{reporter_id}/meetingsRequest Body Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
action | string | Yes | Activity type: MEETING, CALL, EMAIL, OTHER |
title | string | No | Title |
content | string | No | Content |
place | string | No | Location |
meeting_start_kst | string | No | Meeting start (ISO 8601) |
meeting_end_kst | string | No | Meeting end (ISO 8601) |
curl -X POST "https://api.pulitzer.ai/live/openapi/workspace/1/reporters/42/meetings" \
-H "PULITZER-API-KEY: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"action": "MEETING",
"title": "Product Briefing",
"content": "Q2 new product introduction",
"place": "Seoul Gangnam Cafe",
"meeting_start_kst": "2026-06-01T14:00:00",
"meeting_end_kst": "2026-06-01T15:00:00"
}'Outcome Statistics
Get distribution and coverage outcome statistics for a workspace.
GET https://api.pulitzer.ai/live/openapi/workspace/{workspace_id}/outcome-statsQuery Parameters
| Parameter | Type | Description |
|---|---|---|
start_date | string | Start date (YYYY-MM-DD) |
end_date | string | End date (YYYY-MM-DD) |
Response
{
"status": "SUCCESS",
"success": true,
"data": {
"total_releases": 15,
"total_coverages": 42,
"total_reporters_managed": 120,
"total_meetings": 8
}
}curl -X GET "https://api.pulitzer.ai/live/openapi/workspace/1/outcome-stats?start_date=2026-01-01&end_date=2026-06-30" \
-H "PULITZER-API-KEY: YOUR_API_KEY"Error Responses
Possible error codes.
| HTTP Status | Description |
|---|---|
| 404 | Workspace not found |
| 404 | Reporter not found |
| 409 | CRM workspace already exists (1 per user limit) |
| 409 | Reporter already exists |