We've launched a new documentation site. Visit docs.portal.io for the latest version.

Proposal AI Builder

Build Proposal

Trigger asynchronous AI proposal build from an approved outline.

Request
path Parameters
ProposalId
required
integer <int32>

Unique identifier corresponding to an existing proposal that has a completed AI outline; otherwise the request will be rejected with a 400 Bad Request.

header Parameters
Accept
required
string

Accept Header

Value: "application/json"
X-MSS-API-APPID
required
string

Application Id

X-MSS-CUSTOM-DATE
required
string

A date timestamp of the request

X-MSS-SIGNATURE
required
string

A signature for the request

X-MSS-API-USERKEY
required
string

User API Key

Responses
200

Success

Response Schema: application/json
proposalId
required
integer <int32>

Unique identifier corresponding to the proposal for which the build was triggered.

status
required
string

Current status of the proposal build job. Consumers should listen to webhooks to be notified when the status becomes Completed.

400

Bad Request: no completed AI outline exists for this proposal.

401

Not Authorized to access this endpoint or your HMAC hash was incorrect.

403

You do not have permission for this API call.

404

Proposal not found.

post/public/proposals/{ProposalId}/ai/build
Request samples
Response samples
application/json
{
  • "proposalId": 0,
  • "status": "string"
}

Get AI Builder Content List

Returns all AI Builder content items (text, audio, video uploads) attached to a proposal, including their processing status and metadata. Use this to check which content has been uploaded and whether transcription is complete before generating an outline.

Request
path Parameters
ProposalId
required
integer <int32>

Unique identifier of the proposal whose AI Builder content items should be retrieved. Must be a proposal owned by the authenticated account.

header Parameters
Accept
required
string

Accept Header

Value: "application/json"
X-MSS-API-APPID
required
string

Application Id

X-MSS-CUSTOM-DATE
required
string

A date timestamp of the request

X-MSS-SIGNATURE
required
string

A signature for the request

X-MSS-API-USERKEY
required
string

User API Key

Responses
200

Success

Response Schema: application/json
required
Array of objects (PublicAiProposalContentItemModel)

List of AI Builder content items attached to the proposal, ordered by CreatedDate ascending. Empty if no content has been uploaded.

401

Not Authorized to access this endpoint or your HMAC hash was incorrect.

403

You do not have permission for this API call.

get/public/proposals/{ProposalId}/ai/content
Request samples
Response samples
application/json
{
  • "items": [
    ]
}

Upload AI Builder 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 uploaded files are processed as regular file uploads.

Request
path Parameters
ProposalId
required
integer <int32>

Numeric identifier of the proposal to which the AI-generated content will be attached. Must be a positive integer. The proposal typically must be in Draft status to accept new content.

header Parameters
Accept
required
string

Accept Header

Value: "application/json"
X-MSS-API-APPID
required
string

Application Id

X-MSS-CUSTOM-DATE
required
string

A date timestamp of the request

X-MSS-SIGNATURE
required
string

A signature for the request

X-MSS-API-USERKEY
required
string

User API Key

Request Body schema: application/x-www-form-urlencoded
required
Name
required
string

Human-readable name or title for the content being uploaded. This value is used for display and search. Provide a concise descriptive name.

IsMultiChunkUpload
boolean

Optional flag indicating whether the client will upload the content in multiple chunks (true) or as a single request (false or omitted). When true the server will expect chunked upload semantics and assemble the final file.

Responses
200

Success

Response Schema: application/json
id
required
integer <int32>

Unique identifier assigned to the created AI content item. Use this id for subsequent operations (update, delete, fetch).

name
required
string

Human-readable name/title of the created content item. Matches the 'Name' value provided in the request.

summary
string

Optional short summary or snippet of the content generated by the AI. Useful for preview and search.

status
required
string

Lifecycle status of the content item (e.g. Draft, Published, Archived). Use allowable values from SpecContentStatuses.

Enum: "Uploaded" "Processing" "Transcribed" "Invalid"
sourceType
required
string

Type of the source file for the content (e.g. Text, Audio, Video). Use allowable values from SourceFileTypes.

Enum: "Text" "Audio" "Video"
createdDate
required
string <date-time>

Timestamp (UTC) when the content item was created. ISO 8601 format.

required
object (SimpleUserModel)

SimpleUserModel

400

Validation failure (missing content name, invalid content type, file too large).

401

Not Authorized to access this endpoint or your HMAC hash was incorrect.

403

You do not have permission for this API call.

404

Proposal not found.

409

Proposal is in a state that does not allow editing.

post/public/proposals/{ProposalId}/ai/content
Request samples
Response samples
application/json
{
  • "id": 0,
  • "name": "string",
  • "summary": "string",
  • "status": "Uploaded",
  • "sourceType": "Text",
  • "createdDate": "2019-08-24T14:15:22Z",
  • "userCreated": {
    }
}

Delete AI Builder Content

Delete an AI-generated content item from a proposal

Request
path Parameters
ProposalId
required
integer <int32>

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.

ContentId
required
integer <int32>

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.

header Parameters
Accept
required
string

Accept Header

Value: "application/json"
X-MSS-API-APPID
required
string

Application Id

X-MSS-CUSTOM-DATE
required
string

A date timestamp of the request

X-MSS-SIGNATURE
required
string

A signature for the request

X-MSS-API-USERKEY
required
string

User API Key

Responses
200

Success

Response Schema: application/json
id
required
integer <int32>

Unique identifier of the AI-generated content item that was requested to be deleted. Matches the ContentId provided in the request when deletion succeeds.

deleted
required
boolean

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.

401

Not Authorized to access this endpoint or your HMAC hash was incorrect.

403

You do not have permission for this API call.

409

Proposal must be in draft status to edit.

delete/public/proposals/{ProposalId}/ai/content/{ContentId}
Request samples
Response samples
application/json
{
  • "id": 0,
  • "deleted": true
}

Get Proposal Outline

Returns the latest requested AI outline for the specified proposal. The status is Completed when outline content is available and Generating while the outline is still being prepared. The Outline field is returned only when the status is Completed.

Request
path Parameters
ProposalId
required
integer <int32>

Unique identifier of the proposal to retrieve the AI-generated outline for.

header Parameters
Accept
required
string

Accept Header

Value: "application/json"
X-MSS-API-APPID
required
string

Application Id

X-MSS-CUSTOM-DATE
required
string

A date timestamp of the request

X-MSS-SIGNATURE
required
string

A signature for the request

X-MSS-API-USERKEY
required
string

User API Key

Responses
200

Success

Response Schema: application/json
proposalId
required
integer <int32>

Unique identifier of the proposal for which the outline is returned.

status
required
string

Current AI generation status for the proposal outline.

  • Generating: The outline generation is in progress and the 'Outline' field will be null.
  • Completed: The outline has been generated successfully and is available in the 'Outline' field.
  • Failed: Generation failed and the 'Outline' field will be null. Check logs or retries for details.
Enum: "Generating" "Completed" "Failed"
outline
string

The AI-generated proposal outline text. This field is populated only when 'Status' is 'Completed'. When 'Status' is 'Generating' or 'Failed', this value will be null. The outline contains a structured summary of the proposal suitable for display or further processing by downstream agents.

401

Not Authorized to access this endpoint or your HMAC hash was incorrect.

403

You do not have permission for this API call.

404

Proposal or outline not found.

get/public/proposals/{ProposalId}/ai/outline
Request samples
Response samples
application/json
{
  • "proposalId": 0,
  • "status": "Generating",
  • "outline": "string"
}

Generate Proposal Outline

Start asynchronous AI outline generation for a proposal.

Request
path Parameters
ProposalId
required
integer <int32>

Proposal identifier. Must be a positive integer corresponding to an existing proposal. The proposal should contain transcribed project spec content or media transcripts; otherwise the request will be rejected with a 400 Bad Request.

header Parameters
Accept
required
string

Accept Header

Value: "application/json"
X-MSS-API-APPID
required
string

Application Id

X-MSS-CUSTOM-DATE
required
string

A date timestamp of the request

X-MSS-SIGNATURE
required
string

A signature for the request

X-MSS-API-USERKEY
required
string

User API Key

Responses
200

Success

Response Schema: application/json
proposalId
required
integer <int32>

ID of the proposal for which outline generation was triggered. Use this value to correlate asynchronous job progress and final outline results.

status
required
string

Current status of the outline generation job. Consumers should poll or listen to webhooks to get final completed output when status becomes Completed.

400

Bad Request: the specified proposal does not contain the transcribed media or project specification content required for AI outline generation.

401

Not Authorized to access this endpoint or your HMAC hash was incorrect.

403

You do not have permission for this API call.

404

Proposal not found.

post/public/proposals/{ProposalId}/ai/outline
Request samples
Response samples
application/json
{
  • "proposalId": 0,
  • "status": "string"
}