> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.aventure.vc/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.aventure.vc/_mcp/server.

# Create news article for entity

POST https://api.aventure.vc/v1/entities/detail/news
Content-Type: application/json

Creates a news article and links it to an entity. When an article with the same canonical newsUrlOriginal (or externalId) already exists, the existing article is reused and this entity is attached to it instead of creating a duplicate.

Reference: https://docs.aventure.vc/api-reference/a-venture-api/entity-news/create-entity-news

## Authentication

- `Authorization` header (bearer token, required) — User bearer token: Supabase or Clerk session JWT, Clerk OAuth access token, or Clerk personal API key
- `X-API-Key` header (required) — Admin API key for system-to-system write operations

## Request

### Query parameters

- `id` (string, optional) — Owner-scoped resource UUID selector.
- `slug` (string, optional) — Owner-scoped resource slug selector.
- `sourceType` (enum, required) — Write provenance source type.
  - Allowed values: `requestChangeForm`, `newsArticle`, `blogArticle`, `firstPartyWebsite`, `relatedPartyWebsite`, `thirdPartyWebsite`, `llm`, `aventureStaff`
- `sourceDetail` (string, required) — Source detail or reviewer reference for the write.
- `sourceProvider` (string, optional) — Provider name for provider-native IDs or slugs.
- `sourceProviderId` (string, optional) — Provider-native source ID.
- `sourceProviderSlug` (string, optional) — Provider-native source slug.
- `actorType` (enum, optional) — Actor type; inferred as agent when agentChassis and agentModel are supplied, or as employee from an authenticated user JWT session.
  - Allowed values: `agent`, `employee`
- `agentChassis` (string, optional) — Agent chassis token for agent-authored writes.
- `agentModel` (string, optional) — Agent model id for agent-authored writes.
- `overrideGate` (enum, optional) — Gate to override from the prior ProblemDetail resolution.
  - Allowed values: `duplicate`, `entity-publication-requirements`, `square-logo-deletion`, `current-classification-removal`, `news-thumbnail-required`, `news-article-url-fetch`, `news-dated-slug`, `brand-match`, `type-structure-contradiction`
- `overrideReason` (string, optional) — Source-backed reason for overriding the returned gate requirement.
- `observedHttpStatus` (integer, optional) — HTTP status observed when the API freshly fetches the canonical article URL.
- `fetchBlockEvidence` (string, optional) — Source-backed evidence that the access-walled canonical URL is the article.
- `nativeThumbnailBlocked` (boolean, optional) — Must be true when the publisher blocks direct acquisition of a native article image; the managed import lane may still recover the image through the Web Unlocker.

### Body (application/json)

- `allowSuspectedShellStrip` (boolean, optional, nullable) — Override suspected shell-strip rejection for intentional prose; prefer --from-file.
- `author` (string, optional, nullable) — Author name
- `category` (string, optional, nullable) — Comma-separated category tags (e.g. "Fintech,Startups"); array syntax is rejected.
- `content` (string, optional, nullable) — Article content body. Required on CREATE for internal articles (externalNewsArticle=false); external articles (the default) omit it and render via redirect to newsUrlOriginal.
- `detachEntity` (boolean, optional, nullable) — When true, removes all existing entity joins
- `detachPerson` (boolean, optional, nullable) — When true, removes the existing person join
- `entityJoinId` (list of string, optional, nullable) — Entity ids for the replacement entity join set; scoped routes keep route entity
- `entityMatchEvidence` (string, optional, nullable) — Supporting quote or evidence for entity match
- `entityMatchScore` (double, optional, nullable) — Score applied to every entityJoinId replacement join
- `entityMatchStatus` (string, optional, nullable) — Match status applied to every entityJoinId replacement join; matchStatus must be auto-match|needs-review|approved|rejected with optional audit metadata
- `excerpt` (string, optional, nullable) — Article excerpt/summary. Required on CREATE for external articles (the default).
- `externalId` (string, optional, nullable) — External source identifier
- `externalNewsArticle` (boolean, optional, nullable) — External article flag. Defaults to true (external/third-party article) when omitted; set false only for an internal aVenture-hosted article, which requires content.
- `newSlug` (string, optional, nullable) — Preferred detail-update slug rename field; omit on create.
- `newsImageThumbnail` (string, optional, nullable) — Managed news thumbnail path returned by media upload/import; sourceDetail must match stored media provenance.
- `newsUrlOriginal` (string, optional, nullable) — Original live news article URL. Required on CREATE for external articles. Rejected (422): ycombinator.com/companies/\{company-slug}, pitchbook.com/profiles/**, linkedin.com/company/**, producthunt.com/products/\*\*, and other entity/profile URLs; use the ProblemDetail surface, usually EntityUrl.urlType=\* via entities urls create.
- `personId` (string, optional, nullable) — Single person id for the replacement person join
- `personMatchEvidence` (string, optional, nullable) — Supporting quote or evidence for person match
- `personMatchScore` (double, optional, nullable) — Score for the person match (0-100)
- `personMatchStatus` (string, optional, nullable) — Match status for the replacement person join; matchStatus must be auto-match|needs-review|approved|rejected with optional audit metadata
- `personSlug` (string, optional, nullable) — Single person slug for the replacement person join
- `publication` (string, optional, nullable) — Publication/source name. Required on CREATE for external articles (the default).
- `publishedAt` (datetime, optional, nullable) — Publication timestamp
- `qwen4bFp16Embedding` (list of float, optional, nullable) — Deprecated: caller-supplied article embeddings are rejected. Canonical section-fusion embeddings refresh from saved article content. Embedding vector pinned to qwen-4b-fp16 (Qwen3-Embedding-4B-f16.gguf) from https://huggingface.co/Qwen/Qwen3-Embedding-4B-GGUF?show_file_info=Qwen3-Embedding-4B-f16.gguf; only this fp16 model is accepted and exactly 2560 floats are required
- `slug` (string, optional, nullable) — Article slug. Omit for the dated slug generated from publishedAt and title; detail updates may rename through this field or newSlug.
- `title` (string, optional, nullable) — Article title

## Response

### 200

Existing article matched; entity attached

- `core` (object, required) — Canonical news owner for list and core semantics
  - `id` (integer, required) — Type-safe identifier for news articles
  - `title` (string, required) — Article headline; the headline field is title
  - `author` (string, optional, nullable)
  - `category` (string, optional, nullable)
  - `createdAt` (datetime, optional, nullable)
  - `excerpt` (string, optional, nullable) — Article summary from the source publication feed; null means the feed supplied no description (expected absence, not an error) — full text is NewsDetail.content
  - `externalNewsArticle` (boolean, optional, nullable)
  - `newsImageThumbnail` (string, optional, nullable)
  - `newsUrlOriginal` (string, optional, nullable)
  - `pendingApproval` (integer, optional, nullable)
  - `publication` (string, optional, nullable)
  - `publishedAt` (datetime, optional, nullable)
  - `slug` (string, optional, nullable) — Canonical lowercase URL slug for the resource
  - `updatedAt` (datetime, optional, nullable)
- `entityMentionResolved` (list of object, required) — Resolved entity mentions — read-only display projections. News mutations attach entities only via flat entityJoinId values, never these nested objects.
  - `createdAt` (datetime, required)
  - `entityId` (string, required) — Canonical entity UUID
  - `internal` (boolean, required)
  - `updatedAt` (datetime, required)
  - `href` (string, optional, nullable)
  - `matchScore` (double, optional, nullable)
  - `matchType` (string, optional, nullable)
  - `mention` (string, optional, nullable)
  - `slug` (string, optional, nullable) — Canonical lowercase URL slug for the resource
  - `typeRecord` (enum, optional, nullable) — Canonical entity classification for the organization, product, and service records stored in the entity domain.
    - Allowed values: `Company`, `Investment Firm`, `Fund`, `Nonprofit`, `Government`, `Organization`, `Business Line`, `Product`, `Service`
- `personMentionResolved` (list of object, required) — Resolved person mentions — read-only display projections. News mutations attach people only via flat personId/personSlug values, never these nested objects.
  - `createdAt` (datetime, required)
  - `personId` (string, required) — Canonical person UUID
  - `updatedAt` (datetime, required)
  - `href` (string, optional, nullable)
  - `matchScore` (double, optional, nullable)
  - `matchType` (string, optional, nullable)
  - `mention` (string, optional, nullable)
  - `slug` (string, optional, nullable) — Canonical lowercase URL slug for the resource
- `content` (string, optional, nullable)
- `externalId` (string, optional, nullable)
- `linkedContent` (string, optional, nullable)

### 201

New article created and linked

- `core` (object, required) — Canonical news owner for list and core semantics
  - `id` (integer, required) — Type-safe identifier for news articles
  - `title` (string, required) — Article headline; the headline field is title
  - `author` (string, optional, nullable)
  - `category` (string, optional, nullable)
  - `createdAt` (datetime, optional, nullable)
  - `excerpt` (string, optional, nullable) — Article summary from the source publication feed; null means the feed supplied no description (expected absence, not an error) — full text is NewsDetail.content
  - `externalNewsArticle` (boolean, optional, nullable)
  - `newsImageThumbnail` (string, optional, nullable)
  - `newsUrlOriginal` (string, optional, nullable)
  - `pendingApproval` (integer, optional, nullable)
  - `publication` (string, optional, nullable)
  - `publishedAt` (datetime, optional, nullable)
  - `slug` (string, optional, nullable) — Canonical lowercase URL slug for the resource
  - `updatedAt` (datetime, optional, nullable)
- `entityMentionResolved` (list of object, required) — Resolved entity mentions — read-only display projections. News mutations attach entities only via flat entityJoinId values, never these nested objects.
  - `createdAt` (datetime, required)
  - `entityId` (string, required) — Canonical entity UUID
  - `internal` (boolean, required)
  - `updatedAt` (datetime, required)
  - `href` (string, optional, nullable)
  - `matchScore` (double, optional, nullable)
  - `matchType` (string, optional, nullable)
  - `mention` (string, optional, nullable)
  - `slug` (string, optional, nullable) — Canonical lowercase URL slug for the resource
  - `typeRecord` (enum, optional, nullable) — Canonical entity classification for the organization, product, and service records stored in the entity domain.
    - Allowed values: `Company`, `Investment Firm`, `Fund`, `Nonprofit`, `Government`, `Organization`, `Business Line`, `Product`, `Service`
- `personMentionResolved` (list of object, required) — Resolved person mentions — read-only display projections. News mutations attach people only via flat personId/personSlug values, never these nested objects.
  - `createdAt` (datetime, required)
  - `personId` (string, required) — Canonical person UUID
  - `updatedAt` (datetime, required)
  - `href` (string, optional, nullable)
  - `matchScore` (double, optional, nullable)
  - `matchType` (string, optional, nullable)
  - `mention` (string, optional, nullable)
  - `slug` (string, optional, nullable) — Canonical lowercase URL slug for the resource
- `content` (string, optional, nullable)
- `externalId` (string, optional, nullable)
- `linkedContent` (string, optional, nullable)

## Examples

### Example 1

**Request**

```json
{}
```

**Response**

```json
{
  "core": {
    "id": 1,
    "title": "string",
    "author": "string",
    "category": "string",
    "createdAt": "2024-01-15T09:30:00Z",
    "excerpt": "string",
    "externalNewsArticle": true,
    "newsImageThumbnail": "string",
    "newsUrlOriginal": "string",
    "pendingApproval": 1,
    "publication": "string",
    "publishedAt": "2024-01-15T09:30:00Z",
    "slug": "aventure-vc",
    "updatedAt": "2024-01-15T09:30:00Z"
  },
  "entityMentionResolved": [
    {
      "createdAt": "2024-01-15T09:30:00Z",
      "entityId": "string",
      "internal": true,
      "updatedAt": "2024-01-15T09:30:00Z",
      "href": "string",
      "matchScore": 1.1,
      "matchType": "string",
      "mention": "string",
      "slug": "aventure-vc",
      "typeRecord": "Company"
    }
  ],
  "personMentionResolved": [
    {
      "createdAt": "2024-01-15T09:30:00Z",
      "personId": "string",
      "updatedAt": "2024-01-15T09:30:00Z",
      "href": "string",
      "matchScore": 1.1,
      "matchType": "string",
      "mention": "string",
      "slug": "aventure-vc"
    }
  ],
  "content": "string",
  "externalId": "string",
  "linkedContent": "string"
}
```

**SDK Code**

```python
import requests

url = "https://api.aventure.vc/v1/entities/detail/news"

querystring = {"actorType":"agent","agentChassis":"codex-cli","id":"04e2bf9c-a100-72ad-83ff-ba69c647b30b","observedHttpStatus":"401","slug":"acme-corp","sourceDetail":"aventure.vc","sourceProvider":"TechCrunch","sourceProviderId":"tc-2026-05-20-example-round","sourceProviderSlug":"example-round","sourceType":"requestChangeForm"}

payload = {}
headers = {
    "Authorization": "Bearer <token>",
    "Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers, params=querystring)

print(response.json())
```

```javascript
const url = 'https://api.aventure.vc/v1/entities/detail/news?actorType=agent&agentChassis=codex-cli&id=04e2bf9c-a100-72ad-83ff-ba69c647b30b&observedHttpStatus=401&slug=acme-corp&sourceDetail=aventure.vc&sourceProvider=TechCrunch&sourceProviderId=tc-2026-05-20-example-round&sourceProviderSlug=example-round&sourceType=requestChangeForm';
const options = {
  method: 'POST',
  headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
  body: '{}'
};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go
package main

import (
	"fmt"
	"strings"
	"net/http"
	"io"
)

func main() {

	url := "https://api.aventure.vc/v1/entities/detail/news?actorType=agent&agentChassis=codex-cli&id=04e2bf9c-a100-72ad-83ff-ba69c647b30b&observedHttpStatus=401&slug=acme-corp&sourceDetail=aventure.vc&sourceProvider=TechCrunch&sourceProviderId=tc-2026-05-20-example-round&sourceProviderSlug=example-round&sourceType=requestChangeForm"

	payload := strings.NewReader("{}")

	req, _ := http.NewRequest("POST", url, payload)

	req.Header.Add("Authorization", "Bearer <token>")
	req.Header.Add("Content-Type", "application/json")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby
require 'uri'
require 'net/http'

url = URI("https://api.aventure.vc/v1/entities/detail/news?actorType=agent&agentChassis=codex-cli&id=04e2bf9c-a100-72ad-83ff-ba69c647b30b&observedHttpStatus=401&slug=acme-corp&sourceDetail=aventure.vc&sourceProvider=TechCrunch&sourceProviderId=tc-2026-05-20-example-round&sourceProviderSlug=example-round&sourceType=requestChangeForm")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{}"

response = http.request(request)
puts response.read_body
```

```java
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.post("https://api.aventure.vc/v1/entities/detail/news?actorType=agent&agentChassis=codex-cli&id=04e2bf9c-a100-72ad-83ff-ba69c647b30b&observedHttpStatus=401&slug=acme-corp&sourceDetail=aventure.vc&sourceProvider=TechCrunch&sourceProviderId=tc-2026-05-20-example-round&sourceProviderSlug=example-round&sourceType=requestChangeForm")
  .header("Authorization", "Bearer <token>")
  .header("Content-Type", "application/json")
  .body("{}")
  .asString();
```

```php
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://api.aventure.vc/v1/entities/detail/news?actorType=agent&agentChassis=codex-cli&id=04e2bf9c-a100-72ad-83ff-ba69c647b30b&observedHttpStatus=401&slug=acme-corp&sourceDetail=aventure.vc&sourceProvider=TechCrunch&sourceProviderId=tc-2026-05-20-example-round&sourceProviderSlug=example-round&sourceType=requestChangeForm', [
  'body' => '{}',
  'headers' => [
    'Authorization' => 'Bearer <token>',
    'Content-Type' => 'application/json',
  ],
]);

echo $response->getBody();
```

```csharp
using RestSharp;

var client = new RestClient("https://api.aventure.vc/v1/entities/detail/news?actorType=agent&agentChassis=codex-cli&id=04e2bf9c-a100-72ad-83ff-ba69c647b30b&observedHttpStatus=401&slug=acme-corp&sourceDetail=aventure.vc&sourceProvider=TechCrunch&sourceProviderId=tc-2026-05-20-example-round&sourceProviderSlug=example-round&sourceType=requestChangeForm");
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "Bearer <token>");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift
import Foundation

let headers = [
  "Authorization": "Bearer <token>",
  "Content-Type": "application/json"
]
let parameters = [] as [String : Any]

let postData = JSONSerialization.data(withJSONObject: parameters, options: [])

let request = NSMutableURLRequest(url: NSURL(string: "https://api.aventure.vc/v1/entities/detail/news?actorType=agent&agentChassis=codex-cli&id=04e2bf9c-a100-72ad-83ff-ba69c647b30b&observedHttpStatus=401&slug=acme-corp&sourceDetail=aventure.vc&sourceProvider=TechCrunch&sourceProviderId=tc-2026-05-20-example-round&sourceProviderSlug=example-round&sourceType=requestChangeForm")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```

### Example 2

**Request**

```json
{}
```

**Response**

```json
{
  "core": {
    "id": 1,
    "title": "string",
    "author": "string",
    "category": "string",
    "createdAt": "2024-01-15T09:30:00Z",
    "excerpt": "string",
    "externalNewsArticle": true,
    "newsImageThumbnail": "string",
    "newsUrlOriginal": "string",
    "pendingApproval": 1,
    "publication": "string",
    "publishedAt": "2024-01-15T09:30:00Z",
    "slug": "aventure-vc",
    "updatedAt": "2024-01-15T09:30:00Z"
  },
  "entityMentionResolved": [
    {
      "createdAt": "2024-01-15T09:30:00Z",
      "entityId": "string",
      "internal": true,
      "updatedAt": "2024-01-15T09:30:00Z",
      "href": "string",
      "matchScore": 1.1,
      "matchType": "string",
      "mention": "string",
      "slug": "aventure-vc",
      "typeRecord": "Company"
    }
  ],
  "personMentionResolved": [
    {
      "createdAt": "2024-01-15T09:30:00Z",
      "personId": "string",
      "updatedAt": "2024-01-15T09:30:00Z",
      "href": "string",
      "matchScore": 1.1,
      "matchType": "string",
      "mention": "string",
      "slug": "aventure-vc"
    }
  ],
  "content": "string",
  "externalId": "string",
  "linkedContent": "string"
}
```

**SDK Code**

```python
import requests

url = "https://api.aventure.vc/v1/entities/detail/news"

querystring = {"actorType":"agent","agentChassis":"codex-cli","id":"04e2bf9c-a100-72ad-83ff-ba69c647b30b","observedHttpStatus":"401","slug":"acme-corp","sourceDetail":"aventure.vc","sourceProvider":"TechCrunch","sourceProviderId":"tc-2026-05-20-example-round","sourceProviderSlug":"example-round","sourceType":"requestChangeForm"}

payload = {}
headers = {
    "Authorization": "Bearer <token>",
    "Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers, params=querystring)

print(response.json())
```

```javascript
const url = 'https://api.aventure.vc/v1/entities/detail/news?actorType=agent&agentChassis=codex-cli&id=04e2bf9c-a100-72ad-83ff-ba69c647b30b&observedHttpStatus=401&slug=acme-corp&sourceDetail=aventure.vc&sourceProvider=TechCrunch&sourceProviderId=tc-2026-05-20-example-round&sourceProviderSlug=example-round&sourceType=requestChangeForm';
const options = {
  method: 'POST',
  headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
  body: '{}'
};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go
package main

import (
	"fmt"
	"strings"
	"net/http"
	"io"
)

func main() {

	url := "https://api.aventure.vc/v1/entities/detail/news?actorType=agent&agentChassis=codex-cli&id=04e2bf9c-a100-72ad-83ff-ba69c647b30b&observedHttpStatus=401&slug=acme-corp&sourceDetail=aventure.vc&sourceProvider=TechCrunch&sourceProviderId=tc-2026-05-20-example-round&sourceProviderSlug=example-round&sourceType=requestChangeForm"

	payload := strings.NewReader("{}")

	req, _ := http.NewRequest("POST", url, payload)

	req.Header.Add("Authorization", "Bearer <token>")
	req.Header.Add("Content-Type", "application/json")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby
require 'uri'
require 'net/http'

url = URI("https://api.aventure.vc/v1/entities/detail/news?actorType=agent&agentChassis=codex-cli&id=04e2bf9c-a100-72ad-83ff-ba69c647b30b&observedHttpStatus=401&slug=acme-corp&sourceDetail=aventure.vc&sourceProvider=TechCrunch&sourceProviderId=tc-2026-05-20-example-round&sourceProviderSlug=example-round&sourceType=requestChangeForm")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{}"

response = http.request(request)
puts response.read_body
```

```java
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.post("https://api.aventure.vc/v1/entities/detail/news?actorType=agent&agentChassis=codex-cli&id=04e2bf9c-a100-72ad-83ff-ba69c647b30b&observedHttpStatus=401&slug=acme-corp&sourceDetail=aventure.vc&sourceProvider=TechCrunch&sourceProviderId=tc-2026-05-20-example-round&sourceProviderSlug=example-round&sourceType=requestChangeForm")
  .header("Authorization", "Bearer <token>")
  .header("Content-Type", "application/json")
  .body("{}")
  .asString();
```

```php
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://api.aventure.vc/v1/entities/detail/news?actorType=agent&agentChassis=codex-cli&id=04e2bf9c-a100-72ad-83ff-ba69c647b30b&observedHttpStatus=401&slug=acme-corp&sourceDetail=aventure.vc&sourceProvider=TechCrunch&sourceProviderId=tc-2026-05-20-example-round&sourceProviderSlug=example-round&sourceType=requestChangeForm', [
  'body' => '{}',
  'headers' => [
    'Authorization' => 'Bearer <token>',
    'Content-Type' => 'application/json',
  ],
]);

echo $response->getBody();
```

```csharp
using RestSharp;

var client = new RestClient("https://api.aventure.vc/v1/entities/detail/news?actorType=agent&agentChassis=codex-cli&id=04e2bf9c-a100-72ad-83ff-ba69c647b30b&observedHttpStatus=401&slug=acme-corp&sourceDetail=aventure.vc&sourceProvider=TechCrunch&sourceProviderId=tc-2026-05-20-example-round&sourceProviderSlug=example-round&sourceType=requestChangeForm");
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "Bearer <token>");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift
import Foundation

let headers = [
  "Authorization": "Bearer <token>",
  "Content-Type": "application/json"
]
let parameters = [] as [String : Any]

let postData = JSONSerialization.data(withJSONObject: parameters, options: [])

let request = NSMutableURLRequest(url: NSURL(string: "https://api.aventure.vc/v1/entities/detail/news?actorType=agent&agentChassis=codex-cli&id=04e2bf9c-a100-72ad-83ff-ba69c647b30b&observedHttpStatus=401&slug=acme-corp&sourceDetail=aventure.vc&sourceProvider=TechCrunch&sourceProviderId=tc-2026-05-20-example-round&sourceProviderSlug=example-round&sourceType=requestChangeForm")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```