curl -i -X GET \
'https://api.portal.io/public/proposals/12345/ai/content' \
-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'
import requests
from portal_auth import sign_request # See authentication guide
url = "https://api.portal.io/public/proposals/12345/ai/content"
timestamp = "Mon, 06 Apr 2026 00:22:19 GMT"
signature = sign_request("GET", url, "", timestamp, "YOUR_USER_KEY", "YOUR_SECRET_KEY")
response = requests.get(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())
const { signRequest } = require('./portalAuth'); // See authentication guide
const url = "https://api.portal.io/public/proposals/12345/ai/content";
const timestamp = new Date().toUTCString();
const signature = signRequest("GET", url, "", timestamp, "YOUR_USER_KEY", "YOUR_SECRET_KEY");
const response = await fetch(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
}
});
const data = await response.json();
console.log(data);
{
"items": [
{
"id": 123,
"name": "<string>",
"status": "<string>",
"sourceType": "<string>",
"createdDate": "2023-11-07T05:31:56Z",
"userCreated": {
"id": 123,
"firstName": "<string>",
"lastName": "<string>",
"email": "<string>"
},
"summary": "<string>"
}
]
}{
"statusCode": 123,
"statusDescription": "<string>",
"responseHeaders": {},
"responseDto": {},
"responseBody": "<string>",
"message": "<string>",
"errorCode": "<string>",
"errorMessage": "<string>",
"serverStackTrace": "<string>",
"state": {},
"responseStatus": {
"errorCode": "<string>",
"message": "<string>",
"stackTrace": "<string>",
"errors": [
{
"errorCode": "<string>",
"fieldName": "<string>",
"message": "<string>",
"meta": {}
}
],
"meta": {}
},
"targetSite": {},
"data": {},
"innerException": {},
"helpLink": "<string>",
"source": "<string>",
"hResult": 123,
"stackTrace": "<string>"
}{
"errorCode": "<string>",
"stackTrace": "<string>",
"contentType": "<string>",
"headers": {},
"cookies": [
{}
],
"status": 123,
"statusCode": "<string>",
"statusDescription": "<string>",
"response": {},
"responseFilter": {},
"requestContext": {},
"paddingLength": 123,
"resultScope": {},
"options": {},
"responseStatus": {
"errorCode": "<string>",
"message": "<string>",
"stackTrace": "<string>",
"errors": [
{
"errorCode": "<string>",
"fieldName": "<string>",
"message": "<string>",
"meta": {}
}
],
"meta": {}
},
"targetSite": {},
"message": "<string>",
"data": {},
"innerException": {},
"helpLink": "<string>",
"source": "<string>",
"hResult": 123
}AI Builder
List AI Builder Content for a Proposal
GET /public/proposals//ai/content — Returns all AI Builder content items attached to a proposal, including processing status and metadata.
GET
/
public
/
api
/
proposals
/
{ProposalId}
/
ai
/
content
curl -i -X GET \
'https://api.portal.io/public/proposals/12345/ai/content' \
-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'
import requests
from portal_auth import sign_request # See authentication guide
url = "https://api.portal.io/public/proposals/12345/ai/content"
timestamp = "Mon, 06 Apr 2026 00:22:19 GMT"
signature = sign_request("GET", url, "", timestamp, "YOUR_USER_KEY", "YOUR_SECRET_KEY")
response = requests.get(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())
const { signRequest } = require('./portalAuth'); // See authentication guide
const url = "https://api.portal.io/public/proposals/12345/ai/content";
const timestamp = new Date().toUTCString();
const signature = signRequest("GET", url, "", timestamp, "YOUR_USER_KEY", "YOUR_SECRET_KEY");
const response = await fetch(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
}
});
const data = await response.json();
console.log(data);
{
"items": [
{
"id": 123,
"name": "<string>",
"status": "<string>",
"sourceType": "<string>",
"createdDate": "2023-11-07T05:31:56Z",
"userCreated": {
"id": 123,
"firstName": "<string>",
"lastName": "<string>",
"email": "<string>"
},
"summary": "<string>"
}
]
}{
"statusCode": 123,
"statusDescription": "<string>",
"responseHeaders": {},
"responseDto": {},
"responseBody": "<string>",
"message": "<string>",
"errorCode": "<string>",
"errorMessage": "<string>",
"serverStackTrace": "<string>",
"state": {},
"responseStatus": {
"errorCode": "<string>",
"message": "<string>",
"stackTrace": "<string>",
"errors": [
{
"errorCode": "<string>",
"fieldName": "<string>",
"message": "<string>",
"meta": {}
}
],
"meta": {}
},
"targetSite": {},
"data": {},
"innerException": {},
"helpLink": "<string>",
"source": "<string>",
"hResult": 123,
"stackTrace": "<string>"
}{
"errorCode": "<string>",
"stackTrace": "<string>",
"contentType": "<string>",
"headers": {},
"cookies": [
{}
],
"status": 123,
"statusCode": "<string>",
"statusDescription": "<string>",
"response": {},
"responseFilter": {},
"requestContext": {},
"paddingLength": 123,
"resultScope": {},
"options": {},
"responseStatus": {
"errorCode": "<string>",
"message": "<string>",
"stackTrace": "<string>",
"errors": [
{
"errorCode": "<string>",
"fieldName": "<string>",
"message": "<string>",
"meta": {}
}
],
"meta": {}
},
"targetSite": {},
"message": "<string>",
"data": {},
"innerException": {},
"helpLink": "<string>",
"source": "<string>",
"hResult": 123
}Returns all AI Builder content items (text, audio, and video uploads) attached to a proposal. Each item includes its processing status and metadata. Use this endpoint to check which content has been uploaded and whether transcription is complete before generating an outline.
curl -i -X GET \
'https://api.portal.io/public/proposals/12345/ai/content' \
-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'
import requests
from portal_auth import sign_request # See authentication guide
url = "https://api.portal.io/public/proposals/12345/ai/content"
timestamp = "Mon, 06 Apr 2026 00:22:19 GMT"
signature = sign_request("GET", url, "", timestamp, "YOUR_USER_KEY", "YOUR_SECRET_KEY")
response = requests.get(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())
const { signRequest } = require('./portalAuth'); // See authentication guide
const url = "https://api.portal.io/public/proposals/12345/ai/content";
const timestamp = new Date().toUTCString();
const signature = signRequest("GET", url, "", timestamp, "YOUR_USER_KEY", "YOUR_SECRET_KEY");
const response = await fetch(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
}
});
const data = await response.json();
console.log(data);
Response
{
"items": [
{
"id": 42,
"name": "Project Discovery Call",
"summary": "Client discussed requirements for a new e-commerce platform...",
"status": "Transcribed",
"sourceType": "Audio",
"createdDate": "2026-04-10T09:30:00Z",
"userCreated": {
"id": 7,
"firstName": "Jane",
"lastName": "Smith",
"email": "jane.smith@example.com"
}
}
]
}
Headers
Accept Header
Available options:
application/json Application Id
A date timestamp of the request
A signature for the request
User API Key
Path Parameters
Unique identifier of the proposal whose AI Builder content items should be retrieved. Must be a proposal owned by the authenticated account.
Response
Success
PublicAiProposalContentListResponse
List of AI Builder content items attached to the proposal, ordered by CreatedDate ascending. Empty if no content has been uploaded.
Show child attributes
Show child attributes
⌘I