multipart/form-data and must include at least one file part. The proposal must be in Draft status to accept new content.
Files up to 25 MB can be sent in a single request. Files larger than 25 MB must use multi-chunk mode. The maximum supported file size is 1 GB. For multi-chunk uploads, set ?isMultiChunkUpload=true and send each chunk as its own multipart file part — see Multi-chunk upload below.
Request
POST /public/api/proposals/{ProposalId}/ai/content
Headers
string
required
Must be
application/json.string
required
Must be
multipart/form-data; boundary=<generated-boundary>. The full value, including the boundary parameter, must also be used in the HMAC canonical message. See Sign multipart requests.string
required
Your API Application Key.
string
required
Your User API Key.
string
required
Current UTC timestamp in RFC 7231 format.
string
required
HMAC-SHA256 signature, Base64-encoded.
Path parameters
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.
Form fields
The body is amultipart/form-data payload containing the following parts.
string
required
Human-readable name or title for the content being uploaded. Used for display and search. Provide a concise, descriptive name.
boolean
Send
false (or omit) for a normal single-file upload. Send true only when also using ?isMultiChunkUpload=true on the URL — see Multi-chunk upload.file
required
The actual file to upload, sent as a multipart file part. See the file part naming rule below — the field name must equal the filename, including its extension.
File part naming (important)
The form field name of the file part must include the file extension. The server reads the file type from the field name, not from thefilename= parameter or the part’s Content-Type header.
Set the field name equal to the filename:
name="file" will fail with:
.txt, .mp3, .mp4, .mp2, .aac, .wav, .flac, .pcm, .m4a, .ogg, .opus, .webm, .mov, .mpeg, .mpg.
Response
Success
A200 response returns the created content item.
integer
required
Unique identifier assigned to the new content item. Use this ID for subsequent operations such as deleting the item.
string
required
Display name for the content item, as provided in the request.
string
required
AI-generated summary of the content. May be empty until processing completes.
string
required
Initial processing status. Typically
Uploaded immediately after creation.string
required
Detected type of the uploaded content (e.g.,
Text, Audio, Video).string
required
ISO 8601 timestamp of when the content item was created.
object
required
The user who performed the upload.
Error codes
Example
Each example uploads a single text file namedspec-bom.txt. Substitute the credentials, the proposal ID, and the file path as appropriate.
Response
Multi-chunk upload
For files larger than 25 MB, switch to multi-chunk mode. The maximum supported file size is 1 GB. There is no separate initiate or complete call — every chunk is sent as a multipart file part in a single request.URL
As with all Portal.io endpoints, the HMAC canonical message uses the base URL without the query string. The
?isMultiChunkUpload=true is sent on the wire but not included in the signing input. See Sign Portal.io API requests for the canonical rules.Required form fields
Chunk file parts
Include each chunk as a separate multipart file part. Use the original filename plus a.partN suffix as the field name so the extension is preserved: