---
title: "Add contact person to a profile (group, company, or travel agent)"
method: POST
path: "/group-profile/v1/contact-persons"
tags: ["ContactPerson"]
---

# Add contact person to a profile (group, company, or travel agent)

`POST /group-profile/v1/contact-persons`

## Request

- Base URL: `https://api.cloudbeds.com`
- URL: `https://api.cloudbeds.com/group-profile/v1/contact-persons`
- Auth: HTTP bearer

## Headers

- `x-property-id` integer
- `x-organization-id` integer, required

## Request body

- CreateContactPersonRequest
  - `profileId` integer: Optional profile ID to link this contact person to a specific profile (group, company, or travel agent)
  - `isMainContact` boolean: Whether this is the main contact (stored in profile-person relationship, requires profileId)
  - `role` 'BOOKING_COORDINATOR' | 'ONSITE_COORDINATOR' | 'ROOMING_LIST_CONTACT' | 'ACCOUNTS_PAYABLE' | 'BILLING' | 'INVOICING' | 'ACCOUNT_MANAGER' | 'SALES_LEAD' | 'TRAVEL_AGENT_ACCOUNT_MANAGER' | 'CORPORATE_CONTACT' | 'AUTHORIZED_SIGNER' | 'EXECUTIVE_APPROVER' | 'MARKETING' | 'MAIN_POINT_OF_CONTACT' | 'ADMINISTRATIVE' | 'OTHER': Role of person in the profile relationship
  - `anonymized` boolean: Whether the contact is anonymized
  - `prefix` string: Name prefix (Mr., Mrs., Dr., etc.)
  - `firstName` string, required: First name
  - `lastName` string, required: Last name
  - `emails` ContactEmail[]: Email addresses with types
    - `id` string: Email ID
    - `contactPersonId` string: Contact person ID
    - `emailType` string: Email type (work, personal, etc.)
    - `email` string, email: Email address
    - `primary` boolean: Whether this is the primary email
    - `createdAt` string, date-time: Creation timestamp
    - `updatedAt` string, date-time: Last update timestamp
  - `phones` ContactPhone[]: Phone numbers with types
    - `id` string: Phone ID
    - `contactPersonId` string: Contact person ID
    - `phoneType` string: Phone type (work, mobile, home, etc.)
    - `phone` string: Phone number
    - `primary` boolean: Whether this is the primary phone
    - `createdAt` string, date-time: Creation timestamp
    - `updatedAt` string, date-time: Last update timestamp
  - `status` string, required: Contact person status. Allowed values are ACTIVE, DELETED
  - `billingDetails` BillingDetails: Billing details for profiles and contact persons
    - `billingEntity` boolean: Whether this is a billing entity
    - `legalName` string: Legal name for billing purposes
    - `billingEmail` string, email: Billing email address
    - `billingAddress` Address: Flexible address object with country-specific fields. The countryCode determines the expected address format. All address fields except id and countryCode are stored as dynamic properties. Common fields include: address1, address2, street, number, city, state, zip, etc.
      - `id` integer: Unique identifier for the address
      - `countryCode` string: ISO 3166-1 alpha-2 country code (determines address format)
    - `billingCurrency` string: Billing currency code (ISO 4217 - 3 uppercase letters, e.g., USD, EUR, GBP)
    - `paymentMethod` 'DIRECT_BILL' | 'CASH' | 'CHECK' | 'CREDIT_CARD' | 'DEBIT_CARD' | 'VOUCHER' | 'PAY_BY_LINK' | 'THIRD_PARTY_PAYMENT': Payment method. Allowed values are DIRECT_BILL, CASH, CHECK, CREDIT_CARD, DEBIT_CARD, VOUCHER, PAY_BY_LINK, THIRD_PARTY_PAYMENT
    - `billingInstructions` string: Special billing instructions
    - `invoiceRecipientEmail` string, email: Email address for invoice delivery
    - `creditLimit` number: Credit limit amount
    - `taxId` string: Tax identification number
    - `billingFrequency` 'PER_STAY' | 'WEEKLY' | 'MONTHLY' | 'ON_DEMAND': Billing frequency. Allowed values are PER_STAY, WEEKLY, MONTHLY, ON_DEMAND
    - `invoiceDueDays` integer: Number of days until invoice is due

## Response `201`

Contact person added successfully

- ContactPersonResponse
  - `id` string: Contact person ID
  - `isMainContact` boolean: Whether this is the main contact (from profile-person relationship, only populated when profileId filter was provided)
  - `role` 'BOOKING_COORDINATOR' | 'ONSITE_COORDINATOR' | 'ROOMING_LIST_CONTACT' | 'ACCOUNTS_PAYABLE' | 'BILLING' | 'INVOICING' | 'ACCOUNT_MANAGER' | 'SALES_LEAD' | 'TRAVEL_AGENT_ACCOUNT_MANAGER' | 'CORPORATE_CONTACT' | 'AUTHORIZED_SIGNER' | 'EXECUTIVE_APPROVER' | 'MARKETING' | 'MAIN_POINT_OF_CONTACT' | 'ADMINISTRATIVE' | 'OTHER': Role of person in the profile relationship
  - `relationshipType` 'EMPLOYEE' | 'BOOKED_BY' | 'PART_OF_GROUP' | 'CONTACT' | 'GUEST' | 'DECISION_MAKER' | 'TRAVELER' | 'PRIMARY' | 'SECONDARY' | 'BILLING_CONTACT' | 'EMERGENCY_CONTACT': Type of relationship between person and profile
  - `startDate` string, date: Start date of the relationship (from profile-person relationship, only populated when profileId filter was provided)
  - `endDate` string, date: End date of the relationship (from profile-person relationship, only populated when profileId filter was provided)
  - `anonymized` boolean: Whether the contact is anonymized
  - `prefix` string: Name prefix (Mr., Mrs., Dr., etc.)
  - `firstName` string: First name
  - `lastName` string: Last name
  - `emails` ContactEmail[]: Email addresses with types
    - `id` string: Email ID
    - `contactPersonId` string: Contact person ID
    - `emailType` string: Email type (work, personal, etc.)
    - `email` string, email: Email address
    - `primary` boolean: Whether this is the primary email
    - `createdAt` string, date-time: Creation timestamp
    - `updatedAt` string, date-time: Last update timestamp
  - `phones` ContactPhone[]: Phone numbers with types
    - `id` string: Phone ID
    - `contactPersonId` string: Contact person ID
    - `phoneType` string: Phone type (work, mobile, home, etc.)
    - `phone` string: Phone number
    - `primary` boolean: Whether this is the primary phone
    - `createdAt` string, date-time: Creation timestamp
    - `updatedAt` string, date-time: Last update timestamp
  - `status` string: Contact person status. Allowed values are ACTIVE, DELETED
  - `createdAt` string, date-time: Creation timestamp
  - `updatedAt` string, date-time: Last update timestamp
  - `billingDetails` BillingDetails: Billing details for profiles and contact persons
    - `billingEntity` boolean: Whether this is a billing entity
    - `legalName` string: Legal name for billing purposes
    - `billingEmail` string, email: Billing email address
    - `billingAddress` Address: Flexible address object with country-specific fields. The countryCode determines the expected address format. All address fields except id and countryCode are stored as dynamic properties. Common fields include: address1, address2, street, number, city, state, zip, etc.
      - `id` integer: Unique identifier for the address
      - `countryCode` string: ISO 3166-1 alpha-2 country code (determines address format)
    - `billingCurrency` string: Billing currency code (ISO 4217 - 3 uppercase letters, e.g., USD, EUR, GBP)
    - `paymentMethod` 'DIRECT_BILL' | 'CASH' | 'CHECK' | 'CREDIT_CARD' | 'DEBIT_CARD' | 'VOUCHER' | 'PAY_BY_LINK' | 'THIRD_PARTY_PAYMENT': Payment method. Allowed values are DIRECT_BILL, CASH, CHECK, CREDIT_CARD, DEBIT_CARD, VOUCHER, PAY_BY_LINK, THIRD_PARTY_PAYMENT
    - `billingInstructions` string: Special billing instructions
    - `invoiceRecipientEmail` string, email: Email address for invoice delivery
    - `creditLimit` number: Credit limit amount
    - `taxId` string: Tax identification number
    - `billingFrequency` 'PER_STAY' | 'WEEKLY' | 'MONTHLY' | 'ON_DEMAND': Billing frequency. Allowed values are PER_STAY, WEEKLY, MONTHLY, ON_DEMAND
    - `invoiceDueDays` integer: Number of days until invoice is due

## Other responses

- `400`: Bad request
- `401`: Unauthorized
- `403`: Forbidden
- `404`: Profile not found
- `422`: Unprocessable Entity

---

[API](https://skmtc.dev/cloudbeds/apis/group-profile-api.md) - [All operations](https://skmtc.dev/cloudbeds/apis/group-profile-api/llms.txt) - [OpenAPI document](https://skmtc.dev/cloudbeds/apis/group-profile-api/revisions/a1801dfbb09e?raw)
