> ## Documentation Index
> Fetch the complete documentation index at: https://docs.portal.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Delete AI Builder Content from a Proposal

> DELETE /public/proposals/{ProposalId}/ai/content/{ContentId} — Removes an AI Builder content item from a proposal. Proposal must be in Draft status.

Removes a specific AI Builder content item from a proposal. Use the `id` returned when you uploaded the content, or retrieve it from the [list content](/api-reference/ai-builder/list-content) endpoint. The proposal must be in Draft status to allow deletions.

<RequestExample>
  ```bash curl theme={null}
  curl -i -X DELETE \
    'https://api.portal.io/public/proposals/12345/ai/content/42' \
    -H 'Accept: application/json' \
    -H 'X-MSS-API-APPID: YOUR_API_APPID' \
    -H 'X-MSS-API-USERKEY: YOUR_API_USERKEY' \
    -H 'X-MSS-CUSTOM-DATE: Thu, 17 Apr 2026 12:00:00 GMT' \
    -H 'X-MSS-SIGNATURE: Base64EncodedHMACSHA256Signature'
  ```

  ```python python theme={null}
  import requests
  from portal_auth import sign_request  # See authentication guide

  url = "https://api.portal.io/public/proposals/12345/ai/content/42"
  timestamp = "Mon, 06 Apr 2026 00:22:19 GMT"
  signature = sign_request("DELETE", url, "", timestamp, "YOUR_USER_KEY", "YOUR_SECRET_KEY")

  response = requests.delete(url, headers={
      "Accept": "application/json",
      "X-MSS-API-APPID": "YOUR_APP_ID",
      "X-MSS-API-USERKEY": "YOUR_USER_KEY",
      "X-MSS-CUSTOM-DATE": timestamp,
      "X-MSS-SIGNATURE": signature
  })
  print(response.json())
  ```

  ```javascript node.js theme={null}
  const { signRequest } = require('./portalAuth'); // See authentication guide

  const url = "https://api.portal.io/public/proposals/12345/ai/content/42";
  const timestamp = new Date().toUTCString();
  const signature = signRequest("DELETE", url, "", timestamp, "YOUR_USER_KEY", "YOUR_SECRET_KEY");

  const response = await fetch(url, {
      method: "DELETE",
      headers: {
          "Accept": "application/json",
          "X-MSS-API-APPID": "YOUR_APP_ID",
          "X-MSS-API-USERKEY": "YOUR_USER_KEY",
          "X-MSS-CUSTOM-DATE": timestamp,
          "X-MSS-SIGNATURE": signature
      }
  });
  const data = await response.json();
  console.log(data);
  ```
</RequestExample>

```json Response theme={null}
{
  "id": 42,
  "deleted": true
}
```


## OpenAPI

````yaml DELETE /public/api/proposals/{ProposalId}/ai/content/{ContentId}
openapi: 3.1.0
info:
  title: Portal.Api
  version: '1.0'
servers:
  - url: http://127.0.0.1:5000
security: []
tags: []
paths:
  /public/api/proposals/{ProposalId}/ai/content/{ContentId}:
    delete:
      tags:
        - Proposal AI Builder
      summary: Delete AI Builder Content
      description: Delete an AI-generated content item from a proposal
      operationId: DeleteAiProposalContent
      parameters:
        - $ref: '#/components/parameters/Accept'
        - name: X-MSS-API-APPID
          in: header
          description: Application Id
          required: true
          schema:
            type: string
        - name: X-MSS-CUSTOM-DATE
          in: header
          description: A date timestamp of the request
          required: true
          schema:
            type: string
        - name: X-MSS-SIGNATURE
          in: header
          description: A signature for the request
          required: true
          schema:
            type: string
        - name: X-MSS-API-USERKEY
          in: header
          description: User API Key
          required: true
          schema:
            type: string
        - name: ProposalId
          in: path
          description: >-
            Unique identifier of the proposal that owns the AI-generated
            content. Must be a positive integer. The proposal will typically
            need to be in Draft status to allow content deletions.
          required: true
          x-nullable: false
          schema:
            type: integer
            format: int32
        - name: ContentId
          in: path
          description: >-
            Unique identifier of the AI-generated content item to delete. Must
            belong to the specified ProposalId. Attempting to delete a content
            item that does not exist or belongs to another proposal will return
            NotFound.
          required: true
          x-nullable: false
          schema:
            type: integer
            format: int32
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicAiProposalContentDeleteResponse'
        '401':
          description: >-
            Not Authorized to access this endpoint or your HMAC hash was
            incorrect.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WebServiceException'
        '403':
          description: You do not have permission for this API call.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HttpError'
        '409':
          description: Proposal must be in draft status to edit.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HttpError'
      deprecated: false
      x-codeSamples: []
components:
  parameters:
    Accept:
      name: Accept
      in: header
      description: Accept Header
      required: true
      schema:
        type: string
        enum:
          - application/json
  schemas:
    PublicAiProposalContentDeleteResponse:
      title: PublicAiProposalContentDeleteResponse
      required:
        - id
        - deleted
      properties:
        id:
          description: >-
            Unique identifier of the AI-generated content item that was
            requested to be deleted. Matches the ContentId provided in the
            request when deletion succeeds.
          type: integer
          format: int32
        deleted:
          description: >-
            Flag indicating whether the specified content item was deleted
            (true) or if no deletion occurred (false). Expected to be set to the
            true value when the call returns 200 OK.
          type: boolean
      description: PublicAiProposalContentDeleteResponse
      type: object
    WebServiceException:
      title: WebServiceException
      properties:
        statusCode:
          type: integer
          format: int32
        statusDescription:
          type: string
        responseHeaders:
          $ref: '#/components/schemas/WebHeaderCollection'
        responseDto:
          $ref: '#/components/schemas/Object'
        responseBody:
          type: string
        message:
          type: string
        errorCode:
          type: string
        errorMessage:
          type: string
        serverStackTrace:
          type: string
        state:
          $ref: '#/components/schemas/Object'
        responseStatus:
          $ref: '#/components/schemas/ResponseStatus'
        targetSite:
          $ref: '#/components/schemas/MethodBase'
        data:
          $ref: '#/components/schemas/IDictionary'
        innerException:
          $ref: '#/components/schemas/Exception'
        helpLink:
          type: string
        source:
          type: string
        hResult:
          type: integer
          format: int32
        stackTrace:
          type: string
      description: WebServiceException
      type: object
    HttpError:
      title: HttpError
      properties:
        errorCode:
          type: string
        stackTrace:
          type: string
        contentType:
          type: string
        headers:
          $ref: '#/components/schemas/Dictionary_String_String_'
        cookies:
          type: array
          items:
            $ref: '#/components/schemas/Cookie'
        status:
          type: integer
          format: int32
        statusCode:
          type: string
        statusDescription:
          type: string
        response:
          $ref: '#/components/schemas/Object'
        responseFilter:
          $ref: '#/components/schemas/IContentTypeWriter'
        requestContext:
          $ref: '#/components/schemas/IRequest'
        paddingLength:
          type: integer
          format: int32
        resultScope:
          $ref: '#/components/schemas/Func_IDisposable_'
        options:
          $ref: '#/components/schemas/IDictionary_String_String_'
        responseStatus:
          $ref: '#/components/schemas/ResponseStatus'
        targetSite:
          $ref: '#/components/schemas/MethodBase'
        message:
          type: string
        data:
          $ref: '#/components/schemas/IDictionary'
        innerException:
          $ref: '#/components/schemas/Exception'
        helpLink:
          type: string
        source:
          type: string
        hResult:
          type: integer
          format: int32
      description: HttpError
      type: object
    WebHeaderCollection:
      title: WebHeaderCollection
      properties: {}
      description: WebHeaderCollection
      type: object
    Object:
      properties: {}
      description: Object
      type: object
    ResponseStatus:
      title: ResponseStatus
      properties:
        errorCode:
          type: string
        message:
          type: string
        stackTrace:
          type: string
        errors:
          type: array
          items:
            $ref: '#/components/schemas/ResponseError'
        meta:
          $ref: '#/components/schemas/Dictionary_String_String_'
      description: ResponseStatus
      type: object
    MethodBase:
      title: MethodBase
      properties: {}
      description: MethodBase
      type: object
    IDictionary:
      title: IDictionary
      properties: {}
      description: IDictionary
      type: object
    Exception:
      title: Exception
      properties: {}
      description: Exception
      type: object
    Dictionary_String_String_:
      title: Dictionary<String,String>
      additionalProperties:
        type: string
      description: Dictionary<String,String>
      type: object
    Cookie:
      title: Cookie
      properties: {}
      description: Cookie
      type: object
    IContentTypeWriter:
      title: IContentTypeWriter
      properties: {}
      description: IContentTypeWriter
      type: object
    IRequest:
      title: IRequest
      properties: {}
      description: IRequest
      type: object
    Func_IDisposable_:
      title: Func`1
      properties: {}
      description: Func<IDisposable>
      type: object
    IDictionary_String_String_:
      title: IDictionary<String,String>
      additionalProperties:
        type: string
      description: IDictionary<String,String>
      type: object
    ResponseError:
      title: ResponseError
      properties:
        errorCode:
          type: string
        fieldName:
          type: string
        message:
          type: string
        meta:
          $ref: '#/components/schemas/Dictionary_String_String_'
      description: ResponseError
      type: object

````