> 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.

# Delete entity

DELETE https://api.aventure.vc/v1/entities/detail

Deletes an entity by id or slug; at least one identifier is required. Defaults to soft delete, which hides the entity from public list/detail reads and keeps the slug reserved. Use deleteMode=hard for permanent deletion; hard delete removes the row and releases the slug. Deleting an entity that is the current productService provider for Product/Service records returns 409 listing the child ids; delete or migrate the children first, or merge the provider so the joins repoint atomically. Response is SlugDelete with deletedMode, slugReleased, and slug so callers can confirm exactly which delete behavior was applied.

Reference: https://docs.aventure.vc/api-reference/a-venture-api/entity-maintenance/delete-entity-detail

## 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.
- `deleteMode` (enum, optional) — Delete mode: soft (reversible) or hard (permanent)
  - Allowed values: `soft`, `hard`
- `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.

## Response

### 200

OK

- `deletedMode` (string, required) — Applied delete mode: `soft` or `hard`.
- `slug` (string, required) — Slug affected by the delete operation.
- `slugReleased` (boolean, required) — True only after hard delete. False after soft delete because the hidden row still reserves the slug.

## Examples

**Response**

```json
{
  "deletedMode": "string",
  "slug": "aventure-vc",
  "slugReleased": true
}
```

**SDK Code**

```python
import requests

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

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

headers = {"Authorization": "Bearer <token>"}

response = requests.delete(url, headers=headers, params=querystring)

print(response.json())
```

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

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"
	"net/http"
	"io"
)

func main() {

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

	req, _ := http.NewRequest("DELETE", url, nil)

	req.Header.Add("Authorization", "Bearer <token>")

	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?actorType=agent&agentChassis=codex-cli&id=04e2bf9c-a100-72ad-83ff-ba69c647b30b&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::Delete.new(url)
request["Authorization"] = 'Bearer <token>'

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.delete("https://api.aventure.vc/v1/entities/detail?actorType=agent&agentChassis=codex-cli&id=04e2bf9c-a100-72ad-83ff-ba69c647b30b&slug=acme-corp&sourceDetail=aventure.vc&sourceProvider=TechCrunch&sourceProviderId=tc-2026-05-20-example-round&sourceProviderSlug=example-round&sourceType=requestChangeForm")
  .header("Authorization", "Bearer <token>")
  .asString();
```

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

$client = new \GuzzleHttp\Client();

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

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

```csharp
using RestSharp;

var client = new RestClient("https://api.aventure.vc/v1/entities/detail?actorType=agent&agentChassis=codex-cli&id=04e2bf9c-a100-72ad-83ff-ba69c647b30b&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.DELETE);
request.AddHeader("Authorization", "Bearer <token>");
IRestResponse response = client.Execute(request);
```

```swift
import Foundation

let headers = ["Authorization": "Bearer <token>"]

let request = NSMutableURLRequest(url: NSURL(string: "https://api.aventure.vc/v1/entities/detail?actorType=agent&agentChassis=codex-cli&id=04e2bf9c-a100-72ad-83ff-ba69c647b30b&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 = "DELETE"
request.allHTTPHeaderFields = headers

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()
```