Skip to main content
Uploads one or more files as AI source content for the specified proposal. At least one file must be included. When IsMultiChunkUpload is true, the upload is processed as a multi-chunk upload; otherwise files are processed as regular uploads. The proposal must be in Draft status to accept new content.

Request

POST /public/api/proposals/{ProposalId}/ai/content

Headers

Accept
string
required
Must be application/json.
Content-Type
string
required
Must be application/x-www-form-urlencoded.
X-MSS-API-APPID
string
required
Your API Application Key.
X-MSS-API-USERKEY
string
required
Your User API Key.
X-MSS-CUSTOM-DATE
string
required
Current UTC timestamp in RFC 7231 format.
X-MSS-SIGNATURE
string
required
HMAC-SHA256 signature, Base64-encoded.

Path parameters

ProposalId
integer
required
Numeric identifier of the proposal to which the AI content will be attached. The proposal must be in Draft status to accept new content.

Body parameters

Name
string
required
Human-readable name or title for the content being uploaded. Used for display and search. Provide a concise, descriptive name.
IsMultiChunkUpload
boolean
When true, the upload is processed as a multi-chunk upload. Omit or set to false for standard single-file uploads.

Response

Success

A 200 response returns the created content item.
id
integer
required
Unique identifier assigned to the new content item. Use this ID for subsequent operations such as deleting the item.
name
string
required
Display name for the content item, as provided in the request.
summary
string
required
AI-generated summary of the content. May be empty until processing completes.
status
string
required
Initial processing status. Typically Uploaded immediately after creation.
sourceType
string
required
Detected type of the uploaded content (e.g., Text, Audio, Video).
createdDate
string
required
ISO 8601 timestamp of when the content item was created.
userCreated
object
required
The user who performed the upload.

Error codes

CodeMeaning
400Validation failure — missing content name, invalid content type, or file too large.
401Not authorized — invalid credentials or incorrect HMAC signature.
403Forbidden — your account does not have permission for this API call.
404Proposal not found.
409Conflict — the proposal is in a state that does not allow editing.

Example

curl -i -X POST \
  'https://api.portal.io/public/api/proposals/12345/ai/content' \
  -H 'Accept: application/json' \
  -H 'Content-Type: application/x-www-form-urlencoded' \
  -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' \
  -d 'Name=Project+Discovery+Call' \
  -d 'IsMultiChunkUpload=false'
Response
{
  "id": 42,
  "name": "Project Discovery Call",
  "summary": "",
  "status": "Uploaded",
  "sourceType": "Text",
  "createdDate": "2026-04-17T12:00:00Z",
  "userCreated": {
    "id": 7,
    "firstName": "Jane",
    "lastName": "Smith",
    "email": "jane.smith@example.com"
  }
}