**This article is split into 2 parts.** [Part 1](/hc/searchatlas-help/articles/press-release-api-search-atlas-12685446), [Part 2](/hc/searchatlas-help/articles/1787087627-press-release-api-search-atlas-part-2-of-2)

The **Press Release API** allows you to programmatically create, generate, and publish AI-driven press releases within the Search Atlas ecosystem. Designed for content, SEO, and PR teams, it helps automate the entire press release lifecycle — from prompt-based generation to publication and indexation tracking — while maintaining full control through secure API access.

With this API, you can build scalable workflows to handle multiple campaigns, track publication metrics, and integrate content generation into your existing systems.

### **⚙️ Authentication**

All requests require authentication via JWT Bearer token or API Key.

### **🗂️ Headers Required:**

```
Authorization: Bearer <your_jwt_token>  
Content-Type: application/json
```

### 🧩 Press Release Endpoints (cont'd 1/11)

### 🧩 Press Release Endpoints (cont'd 2/11)

### **✍️ 1. List Press Releases**

Retrieve a paginated list of press releases for the authenticated customer.

**Endpoint: `GET /api/cg/v1/press-release/`**

**Query Parameters:**

`page` (integer, optional): Page number for pagination (default: 1)

`page\_size` (integer, optional): Number of results per page (default: 10, max: 100)

`otto\_project` (integer, optional): Filter by Otto Project ID

`knowledge\_graph` (integer, optional): Filter by Knowledge Graph ID

`status` (string, optional): Filter by status (Pending, Generating, Generated, Publishing, Published, etc.)

`is\_deleted` (boolean, optional): Include soft-deleted press releases (default: false)

cURL Example:

curl -X GET "https://ca.searchatlas.com/api/cg/v1/press-release/?page=1&page\_size=10" \

-H "Authorization: Bearer YOUR\_JWT\_TOKEN" \

-H "Content-Type: application/json"

Success Response (200 OK):

{

"count": 45,

"next": "https://ca.searchatlas.com/api/cg/v1/press-release/?page=2",

"previous": null,

"results": [

{

"id": "550e8400-e29b-41d4-a716-446655440000",

"otto\_project": 123,

"knowledge\_graph": 456,

"target\_url": "https://example.com/new-product-launch",

"target\_keywords": ["new product", "innovation", "technology"],

"input\_prompt": "Write a press release about our new AI-powered product launch targeting tech enthusiasts.",

"title": "Company XYZ Unveils Revolutionary AI-Powered Product",

"status": "Generated",

"viewable\_url": "https://ca.searchatlas.com/cg/press-release/550e8400-e29b-41d4-a716-446655440000/view",

"editable\_url": "https://ca.searchatlas.com/cg/press-release/550e8400-e29b-41d4-a716-446655440000/edit",

"published\_at": "2025-01-15T10:30:00Z",

"created\_at": "2025-01-10T14:22:00Z",

"updated\_at": "2025-01-15T10:30:00Z",

"signal\_genesys": {

"genesys\_id": "12345",

"genesys\_status": "published",

"genesys\_status\_message": "Successfully published",

"genesys\_status\_description": "Your press release has been distributed",

"genesys\_client\_id": "client\_abc123"

},

"channels\_count": 5,

"channels\_count\_by\_status": {

"Pending": 0,

"Generating": 0,

"Generated": 2,

"Publishing": 0,

"Published": 3

},

"indexation\_metrics": {

"total\_urls": 15,

"indexed\_urls": 12,

"indexation\_rate": 0.8

},

"signal\_boost": true

}

]

}

---

### 🧩 Press Release Endpoints (cont'd 3/11)

### **🧩 2. Create Press Release**

Create a new press release for content generation.

**Endpoint: `POST /api/cg/v1/press-release/`**

**Required Fields:**

`target\_url` (string): The URL this press release is targeting (must be accessible)

`target\_keywords` (array of strings): SEO keywords for the press release (min: 1)

`input\_prompt` (string, max 1500 chars): Instructions for AI content generation

**One of the following** (not both):

`otto\_project` (integer): Otto Project ID

`knowledge\_graph` (integer): Knowledge Graph ID

**Optional Fields:**

`images` (array): Array of image objects with `url` property

`bypass\_target\_url\_status\_code\_validation` (boolean): Skip URL validation (default: false)

cURL Example:

curl -X POST "https://ca.searchatlas.com/api/cg/v1/press-release/" \

-H "Authorization: Bearer YOUR\_JWT\_TOKEN" \

-H "Content-Type: application/json" \

-d '{

"otto\_project": 123,

"target\_url": "https://example.com/new-product",

"target\_keywords": ["AI technology", "product launch", "innovation"],

"input\_prompt": "Write a press release announcing our new AI-powered analytics platform. Highlight the key features: real-time insights, predictive analytics, and easy integration. Target audience: B2B SaaS companies.",

"images": [

{"url": "https://example.com/images/product-hero.jpg"}

]

}'

Success Response (201 Created):

{

"id": "6ba7b810-9dad-11d1-80b4-00c04fd430c8",

"otto\_project": 123,

"knowledge\_graph": 456,

"target\_url": "https://example.com/new-product",

"target\_keywords": ["AI technology", "product launch", "innovation"],

"input\_prompt": "Write a press release announcing our new AI-powered analytics platform...",

"title": null,

"status": "Pending",

"viewable\_url": null,

"editable\_url": null,

"published\_at": null,

"created\_at": "2025-01-28T14:30:00Z",

"updated\_at": "2025-01-28T14:30:00Z",

"signal\_genesys": null,

"channels\_count": 0,

"channels\_count\_by\_status": {

"Pending": 0,

"Generating": 0,

"Generated": 0,

"Publishing": 0,

"Published": 0

},

"indexation\_metrics": {

"total\_urls": 0,

"indexed\_urls": 0,

"indexation\_rate": 0

},

"signal\_boost": false

}

Validation Notes:

`target\_url` must return 2xx status code (or 403) when validated

`target\_keywords` must have at least 1 keyword

If `otto\_project` is provided, `target\_url` domain must match Otto Project hostname

Cannot provide both `otto\_project` and `knowledge\_graph`

---

### 🧩 Press Release Endpoints (cont'd 4/11)

### **📰 3. Retrieve Press Release**

Get details of a specific press release by ID.

**Endpoint: `GET /api/cg/v1/press-release/{id}/`**

**Path Parameters:**

`id` (UUID): Press release ID

cURL Example:

curl -X GET "https://ca.searchatlas.com/api/cg/v1/press-release/550e8400-e29b-41d4-a716-446655440000/" \

-H "Authorization: Bearer YOUR\_JWT\_TOKEN" \

-H "Content-Type: application/json"

Success Response (200 OK):

{

"id": "550e8400-e29b-41d4-a716-446655440000",

"otto\_project": 123,

"knowledge\_graph": 456,

"target\_url": "https://example.com/new-product-launch",

"target\_keywords": ["new product", "innovation", "technology"],

"input\_prompt": "Write a press release about our new AI-powered product launch...",

"title": "Company XYZ Unveils Revolutionary AI-Powered Product",

"status": "Generated",

"viewable\_url": "https://ca.searchatlas.com/cg/press-release/550e8400-e29b-41d4-a716-446655440000/view",

"editable\_url": "https://ca.searchatlas.com/cg/press-release/550e8400-e29b-41d4-a716-446655440000/edit",

"published\_at": null,

"created\_at": "2025-01-10T14:22:00Z",

"updated\_at": "2025-01-15T10:30:00Z",

"signal\_genesys": null,

"channels\_count": 0,

"channels\_count\_by\_status": {

"Pending": 0,

"Generating": 0,

"Generated": 0,

"Publishing": 0,

"Published": 0

},

"indexation\_metrics": {

"total\_urls": 0,

"indexed\_urls": 0,

"indexation\_rate": 0

},

"signal\_boost": false

}

---

### 🧩 Press Release Endpoints (cont'd 5/11)

### **📄 4. Update Press Release**

Modify editable fields such as `target_keywords` or `input_prompt`.

Update an existing press release (limited fields can be modified).

**Endpoint: `PATCH /api/cg/v1/press-release/{id}/`**

Path Parameters:

`id` (UUID): Press release ID

Updatable Fields:

`target\_url` (string): Target URL (must match Otto Project domain if set)

`target\_keywords` (array): Keywords

`input\_prompt` (string): Prompt text

`images` (array): Image URLs

Cannot Modify:

`otto\_project`

`knowledge\_graph`

`status` (changed via actions like `/build/`)

`title` (generated by AI)

cURL Example:

curl -X PATCH "https://ca.searchatlas.com/api/cg/v1/press-release/550e8400-e29b-41d4-a716-446655440000/" \

-H "Authorization: Bearer YOUR\_JWT\_TOKEN" \

-H "Content-Type: application/json" \

-d '{

"target\_keywords": ["AI", "machine learning", "automation", "enterprise"],

"input\_prompt": "Revised: Focus more on enterprise use cases and ROI benefits."

}'

Success Response (200 OK):

{

"id": "550e8400-e29b-41d4-a716-446655440000",

"otto\_project": 123,

"knowledge\_graph": 456,

"target\_url": "https://example.com/new-product-launch",

"target\_keywords": ["AI", "machine learning", "automation", "enterprise"],

"input\_prompt": "Revised: Focus more on enterprise use cases and ROI benefits.",

"title": "Company XYZ Unveils Revolutionary AI-Powered Product",

"status": "Generated",

"viewable\_url": "https://ca.searchatlas.com/cg/press-release/550e8400-e29b-41d4-a716-446655440000/view",

"editable\_url": "https://ca.searchatlas.com/cg/press-release/550e8400-e29b-41d4-a716-446655440000/edit",

"published\_at": null,

"created\_at": "2025-01-10T14:22:00Z",

"updated\_at": "2025-01-28T15:45:00Z",

"signal\_genesys": null,

"channels\_count": 0,

"channels\_count\_by\_status": {

"Pending": 0,

"Generating": 0,

"Generated": 0,

"Publishing": 0,

"Published": 0

},

"indexation\_metrics": {

"total\_urls": 0,

"indexed\_urls": 0,

"indexation\_rate": 0

},

"signal\_boost": false

}

---

### 🧩 Press Release Endpoints (cont'd 6/11)

### **🔗 5. Delete Press Release**

Soft delete a press release (sets `is\_deleted=True`).

**Endpoint: `DELETE /api/cg/v1/press-release/{id}/`**

**Path Parameters:**

`id` (UUID): Press release ID

cURL Example:

curl -X DELETE "https://ca.searchatlas.com/api/cg/v1/press-release/550e8400-e29b-41d4-a716-446655440000/" \

-H "Authorization: Bearer YOUR\_JWT\_TOKEN"

Success Response (204 No Content)

---

### 🧩 Press Release Endpoints (cont'd 7/11)

### **📤 6. Build Press Release (Generate Content)**

Trigger AI content generation for a press release. This creates the actual press release content based on the input prompt.

**Endpoint: `POST /api/cg/v1/press-release/{id}/build/`**

**Path Parameters:**

`id` (UUID): Press release ID

**Process:**

1. Validates press release has required information

2. Checks quota limits

3. Queues background task for AI generation

4. Updates status to "Generating"

5. Returns task ID for polling

cURL Example:

curl -X POST "https://ca.searchatlas.com/api/cg/v1/press-release/550e8400-e29b-41d4-a716-446655440000/build/" \

-H "Authorization: Bearer YOUR\_JWT\_TOKEN" \

-H "Content-Type: application/json"

Success Response (202 Accepted):

[

"a1b2c3d4-e5f6-7890-abcd-ef1234567890"

]

**What Happens:**

Press release status changes to "Generating"

Background task generates content using AI (GPT-4, Claude, or Gemini)

Task creates title, summary, and full content

Once complete, status changes to "Generated"

`viewable\_url` and `editable\_url` become available

**Polling for Completion:**

Use the task ID to check status (see [Task Polling](#task-polling) section).

---

### 🧩 Press Release Endpoints (cont'd 8/11)

### **🔍 7. Deploy to Signal Genesys**

Deploy a generated press release to Signal Genesys distribution channels.

**Endpoint: `POST /api/cg/v1/press-release/{id}/deploy/signal-genesys/`**

Path Parameters:

`id` (UUID): Press release ID

**Request Body:**

`genesys\_category\_id` (string, required): Signal Genesys category ID

`distribution\_ids` (array of integers, required): List of distribution channel IDs (min: 1)

`variations` (boolean, optional): Generate content variations (default: false)

`override\_profanity\_check` (boolean, optional): Skip profanity check (default: false)

`signal\_boost\_enabled` (boolean, optional): Enable signal boost feature (default: false)

**Prerequisites:**

Press release must have status "Generated"

Must have generated content (title, summary, body)

**cURL Example:**

curl -X POST "https://ca.searchatlas.com/api/cg/v1/press-release/550e8400-e29b-41d4-a716-446655440000/deploy/signal-genesys/" \

-H "Authorization: Bearer YOUR\_JWT\_TOKEN" \

-H "Content-Type: application/json" \

-d '{

"genesys\_category\_id": "technology",

"distribution\_ids": [1, 3, 5, 7],

"variations": true,

"signal\_boost\_enabled": true

}'

Success Response (202 Accepted):

{

"task\_id": "b2c3d4e5-f6a7-8901-bcde-f12345678901"

}

**What Happens:**

Press release is sent to Signal Genesys for distribution

Creates variations if requested

Distributes to selected channels

Updates status to "Publishing" → "Published"

Media URLs are populated in channels

---

Validate if content is worthy of being a press release using AI assessment.

**Endpoint: `POST /api/cg/v1/press-release/check-worthiness/`**

Request Body:

`headline` (string, max 80 chars): Main headline

`blog\_headline` (string): Alternative blog-style headline

`summary` (string): Brief summary (15-35 words)

`blog\_summary` (string): Alternative blog-style summary

`content` (string): Full press release content (1500-2000 words recommended)

**cURL Example:**

curl -X POST "https://ca.searchatlas.com/api/cg/v1/press-release/check-worthiness/" \

-H "Authorization: Bearer YOUR\_JWT\_TOKEN" \

-H "Content-Type: application/json" \

-d '{

"headline": "Company XYZ Launches Revolutionary AI Platform",

"blog\_headline": "How Company XYZ is Transforming AI Analytics",

"summary": "Company XYZ today announced the launch of its groundbreaking AI-powered analytics platform, designed to help businesses make data-driven decisions in real-time.",

"blog\_summary": "Discover how Company XYZ new AI platform is changing the game for businesses seeking real-time analytics and insights.",

"content": "FOR IMMEDIATE RELEASE\n\nCompany XYZ Unveils Revolutionary AI-Powered Analytics Platform\n\n[CITY, STATE] – January 28, 2025 – Company XYZ, a leader in business intelligence solutions, today announced the launch of..."

}'

Success Response (202 Accepted):

{

"task\_id": "c3d4e5f6-a7b8-9012-cdef-123456789012"

}

Task Result (After Polling):

{

"is\_valid": true,

"score": 0.85,

"confidence": 0.92,

"reasoning": "This press release announces a significant product launch with clear business value. It includes specific features, target audience, and demonstrates innovation in the AI analytics space. The content is well-structured and newsworthy.",

"suggestions": [

"Include specific metrics or statistics to strengthen credibility",

"Add a quote from a customer or industry analyst",

"Mention partnerships or integrations with known platforms"

]

}

---

Continued in [Part 2](/hc/searchatlas-help/articles/1787087627-press-release-api-search-atlas-part-2-of-2) →