Skip to main content
Retrieve the full record for a single contact by their numeric ID. The response always includes primaryLocation and billingLocation when they exist. Pass IncludeCounts=true to also receive the number of proposals and payments associated with the contact — useful for dashboards and sync logic.

Request

GET /public/people/{PersonId}

Headers

Accept
string
required
Must be application/json.
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.

Path Parameters

PersonId
integer
required
Unique numeric identifier of the contact to retrieve.

Query Parameters

IncludeCounts
boolean
When true, includes proposalCount and paymentCount in the response. Defaults to false.

Response

200 Success

id
integer
Unique numeric identifier of the contact.
partyType
string
Individual or Company. Undefined if unset.
contactType
string
Contact classification (e.g. Customer, Vendor). Undefined if unset.
firstName
string
Contact’s first name.
lastName
string
Contact’s last name.
companyName
string
Company name. Populated 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 stored on the contact.
lastModifiedDate
string
ISO 8601 timestamp of the last modification.
primaryLocation
object
The contact’s primary address. Contains id, street, suite, city, postalCode, state, stateAbbrev, country, phone, contactFirstName, contactLastName, contactPhoneNumber, contactEmail, isPrimary, isBilling.
billingLocation
object
The contact’s billing address. Same shape as primaryLocation.
proposalCount
integer
Number of proposals for this contact. Only present when IncludeCounts=true.
paymentCount
integer
Number of payments for this contact. Only present when IncludeCounts=true.

Error Codes

CodeMeaning
400Contact not found. The PersonId does not exist in your account.
401Not authorized. Your HMAC signature was incorrect or credentials are invalid.
403Your user account does not have permission for this API call.

Example

curl -i -X GET \
  'https://api.portal.io/public/people/1042?IncludeCounts=true' \
  -H 'Accept: application/json' \
  -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'
{
  "notes": "Preferred contact via email.",
  "lastModifiedDate": "2026-04-06T00:22:19Z",
  "primaryLocation": {
    "contactFirstName": "Jane",
    "contactLastName": "Smith",
    "contactPhoneNumber": "555-555-0100",
    "contactEmail": "jane.smith@example.com",
    "isPrimary": true,
    "isBilling": false,
    "id": 201,
    "street": "123 Main St",
    "suite": "",
    "city": "Austin",
    "postalCode": "78701",
    "state": "Texas",
    "stateAbbrev": "TX",
    "country": "United States",
    "phone": "555-555-0100"
  },
  "billingLocation": null,
  "proposalCount": 4,
  "paymentCount": 2,
  "id": 1042,
  "partyType": "Individual",
  "contactType": "Customer",
  "firstName": "Jane",
  "lastName": "Smith",
  "companyName": "",
  "contactEmail": "jane.smith@example.com",
  "contactEmailCC": "",
  "contactPhone": "555-555-0100"
}