Skip to main content
Use this endpoint to add a new contact to your Portal.io dealer account. Contacts are used as the client on proposals. PartyType, ContactType, and FirstName are always required. When PartyType is Company, you must also supply CompanyName.
The request body must be submitted as application/x-www-form-urlencoded. Encode special characters in field values before sending.

Request

POST /public/people

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 (e.g. Mon, 06 Apr 2026 00:22:19 GMT).
X-MSS-SIGNATURE
string
required
HMAC-SHA256 signature of the canonical request, Base64-encoded. Include the content type when building the canonical message for non-GET requests.

Body Parameters

PartyType
string
required
Whether this contact is an Individual or Company.
ContactType
string
required
Classification of the contact (e.g. Customer, Vendor).
FirstName
string
required
Contact’s first name.
LastName
string
Contact’s last name.
CompanyName
string
Company name. Required when PartyType is Company.
ContactEmail
string
Primary email address.
ContactEmailCC
string
CC email address for proposal delivery.
ContactPhone
string
Primary phone number.
Notes
string
Free-text notes to store on the contact record.

Response

200 Success

The response returns the full contact record as created, including the assigned id and any associated location objects.
id
integer
Unique numeric identifier assigned to the new contact.
partyType
string
Individual or Company.
contactType
string
The contact classification supplied on creation.
firstName
string
Contact’s first name.
lastName
string
Contact’s last name.
companyName
string
Company name.
contactEmail
string
Primary email address.
contactEmailCC
string
CC email address.
contactPhone
string
Primary phone number.
notes
string
Free-text notes stored on the contact.
lastModifiedDate
string
ISO 8601 timestamp of the last modification.
primaryLocation
object
The contact’s primary location object, if one was created. Contains id, street, suite, city, postalCode, state, stateAbbrev, country, and phone.
billingLocation
object
The contact’s billing location object, if one was created. Same shape as primaryLocation.
proposalCount
integer
Number of proposals associated with this contact.
paymentCount
integer
Number of payments associated with this contact.

Error Codes

CodeMeaning
401Not authorized. Your HMAC signature was incorrect or credentials are invalid.
402An active Portal.io subscription is required to use this endpoint.
403Your user account does not have permission for this API call.

Example

curl -i -X POST \
  'https://api.portal.io/public/people' \
  -H 'Accept: application/json' \
  -H 'Content-Type: application/x-www-form-urlencoded' \
  -H 'X-MSS-API-APPID: YOUR_APP_ID' \
  -H 'X-MSS-API-USERKEY: YOUR_USER_KEY' \
  -H 'X-MSS-CUSTOM-DATE: Mon, 06 Apr 2026 00:22:19 GMT' \
  -H 'X-MSS-SIGNATURE: BASE64_SIGNATURE' \
  -d 'PartyType=Individual' \
  -d 'ContactType=Customer' \
  -d 'FirstName=Jane' \
  -d 'LastName=Smith' \
  -d 'ContactEmail=jane.smith%40example.com' \
  -d 'ContactPhone=555-555-0100'
{
  "notes": "",
  "lastModifiedDate": "2026-04-06T00:22:19Z",
  "primaryLocation": null,
  "billingLocation": null,
  "proposalCount": 0,
  "paymentCount": 0,
  "id": 1042,
  "partyType": "Individual",
  "contactType": "Customer",
  "firstName": "Jane",
  "lastName": "Smith",
  "companyName": "",
  "contactEmail": "jane.smith@example.com",
  "contactEmailCC": "",
  "contactPhone": "555-555-0100"
}