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_KEY

Workspace 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/list

Response

{
  "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/create

Request Body Parameters

ParameterTypeRequiredDescription
namestringYesWorkspace name (1-100 chars)
company_namestringNoCompany name
keywordsstring[]NoMonitoring 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}/reporters

Query Parameters

ParameterTypeDescription
pageintegerPage number (default: 1)
page_sizeintegerPage size (1-100, default: 20)
keywordstringSearch (reporter name/media)
is_distribution_targetbooleanFilter 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}/reporters

Request Body Parameters

ParameterTypeRequiredDescription
namestringYesReporter name
emailstringYesReporter email
mediastringNoMedia outlet
is_distribution_targetbooleanNoDistribution 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}/news

Query Parameters

ParameterTypeDescription
pageintegerPage number
page_sizeintegerPage 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}/meetings

Request Body Parameters

ParameterTypeRequiredDescription
actionstringYesActivity type: MEETING, CALL, EMAIL, OTHER
titlestringNoTitle
contentstringNoContent
placestringNoLocation
meeting_start_kststringNoMeeting start (ISO 8601)
meeting_end_kststringNoMeeting 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-stats

Query Parameters

ParameterTypeDescription
start_datestringStart date (YYYY-MM-DD)
end_datestringEnd 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 StatusDescription
404Workspace not found
404Reporter not found
409CRM workspace already exists (1 per user limit)
409Reporter already exists