Online Now  

/v1/customer_survey/

Seller-private customer surveys with customer-confirmed answer reuse.
GET

/v1/customer_survey/get_catalog

#
List AT and private templates, reusable fields, and optional chat recipient/sales context. Never returns customer answers.

Parameters

NameTypeRequiredDefaultDescription
chatID int No 0 Accepted direct or bid chat; zero lists the acting seller's catalog.
Request example (cURL)
curl --get \
  'https://ca.appointmenttrader.com/v1/customer_survey/get_catalog' \
  --data-urlencode 'key={{API_KEY}}' \
  --data-urlencode 'chatID={{chatID}}'

Returns

JSON
See the shared response schema and synthetic example.
Response fields
FieldTypeRequiredDescription
$customer_survey_get_catalog_Response Yes
$.oneOf[0] Yes
$.oneOf[0].allOf[0]object Yes
$.oneOf[0].allOf[0].RequestUserAliasstring Yes
$.oneOf[0].allOf[0].RequestPathstring | null Yes
$.oneOf[0].allOf[0].RequestStatus = "Succeeded" Yes
$.oneOf[0].allOf[0].ResponseCodeinteger Yes
$.oneOf[0].allOf[0].ResponseMessageAPIResponseMessage Yes
$.oneOf[0].allOf[0].ResponseMessage.oneOf[0]string | number | boolean | null Yes
$.oneOf[0].allOf[0].ResponseMessage.oneOf[1]array Yes
$.oneOf[0].allOf[0].ResponseMessage.oneOf[1][]APIResponseMessage No
$.oneOf[0].allOf[0].ResponseMessage.oneOf[2]object Yes
$.oneOf[0].allOf[0].ResponseMessage.oneOf[2].*APIResponseMessage No
$.oneOf[0].allOf[0].RequestImpersonatedByUserAliasstring No
$.oneOf[0].allOf[1]object Yes
$.oneOf[0].allOf[1].Payloadobject Yes
$.oneOf[0].allOf[1].Payload.fieldsarray Yes
$.oneOf[0].allOf[1].Payload.fields[]object No
$.oneOf[0].allOf[1].Payload.fields[].IDDatabaseInteger YesInteger value; legacy MySQL reads may serialize it as a numeric string.
$.oneOf[0].allOf[1].Payload.fields[].ID.oneOf[0]integer Yes
$.oneOf[0].allOf[1].Payload.fields[].ID.oneOf[1]string Yes
$.oneOf[0].allOf[1].Payload.fields[].CreatedDatestring Yes
$.oneOf[0].allOf[1].Payload.fields[].OwnerUserID Yes
$.oneOf[0].allOf[1].Payload.fields[].OwnerUserID.anyOf[0]DatabaseInteger YesInteger value; legacy MySQL reads may serialize it as a numeric string.
$.oneOf[0].allOf[1].Payload.fields[].OwnerUserID.anyOf[0].oneOf[0]integer Yes
$.oneOf[0].allOf[1].Payload.fields[].OwnerUserID.anyOf[0].oneOf[1]string Yes
$.oneOf[0].allOf[1].Payload.fields[].OwnerUserID.anyOf[1]null Yes
$.oneOf[0].allOf[1].Payload.fields[].FieldKeystring Yes
$.oneOf[0].allOf[1].Payload.fields[].Labelstring Yes
$.oneOf[0].allOf[1].Payload.fields[].LabelKey Yes
$.oneOf[0].allOf[1].Payload.fields[].LabelKey.anyOf[0]string Yes
$.oneOf[0].allOf[1].Payload.fields[].LabelKey.anyOf[1]null Yes
$.oneOf[0].allOf[1].Payload.fields[].FieldGroupstring Yes
$.oneOf[0].allOf[1].Payload.fields[].FieldTypestring ["text","number","boolean","single_select","multi_select","longtext"] Yes
$.oneOf[0].allOf[1].Payload.fields[].ValueScopestring ["customer","booking"] Yes
$.oneOf[0].allOf[1].Payload.fields[].ValidationJSONstring (application/json) Yes
$.oneOf[0].allOf[1].Payload.fields[].ValidationJSONSurveyValidation (decoded JSON) Yes
$.oneOf[0].allOf[1].Payload.fields[].ValidationJSON.anyOf[0]object Yes
$.oneOf[0].allOf[1].Payload.fields[].ValidationJSON.anyOf[0].maxLengthinteger No
$.oneOf[0].allOf[1].Payload.fields[].ValidationJSON.anyOf[0].integerboolean No
$.oneOf[0].allOf[1].Payload.fields[].ValidationJSON.anyOf[0].minnumber No
$.oneOf[0].allOf[1].Payload.fields[].ValidationJSON.anyOf[0].maxnumber No
$.oneOf[0].allOf[1].Payload.fields[].ValidationJSON.anyOf[1] = [] Yes
$.oneOf[0].allOf[1].Payload.fields[].IsActiveDatabaseInteger YesInteger value; legacy MySQL reads may serialize it as a numeric string.
$.oneOf[0].allOf[1].Payload.fields[].IsActive.oneOf[0]integer Yes
$.oneOf[0].allOf[1].Payload.fields[].IsActive.oneOf[1]string Yes
$.oneOf[0].allOf[1].Payload.fields[].Optionsarray Yes
$.oneOf[0].allOf[1].Payload.fields[].Options[]object No
$.oneOf[0].allOf[1].Payload.fields[].Options[].IDDatabaseInteger YesInteger value; legacy MySQL reads may serialize it as a numeric string.
$.oneOf[0].allOf[1].Payload.fields[].Options[].ID.oneOf[0]integer Yes
$.oneOf[0].allOf[1].Payload.fields[].Options[].ID.oneOf[1]string Yes
$.oneOf[0].allOf[1].Payload.fields[].Options[].FieldIDDatabaseInteger YesInteger value; legacy MySQL reads may serialize it as a numeric string.
$.oneOf[0].allOf[1].Payload.fields[].Options[].FieldID.oneOf[0]integer Yes
$.oneOf[0].allOf[1].Payload.fields[].Options[].FieldID.oneOf[1]string Yes
$.oneOf[0].allOf[1].Payload.fields[].Options[].OptionKeystring Yes
$.oneOf[0].allOf[1].Payload.fields[].Options[].Labelstring Yes
$.oneOf[0].allOf[1].Payload.fields[].Options[].LabelKey Yes
$.oneOf[0].allOf[1].Payload.fields[].Options[].LabelKey.anyOf[0]string Yes
$.oneOf[0].allOf[1].Payload.fields[].Options[].LabelKey.anyOf[1]null Yes
$.oneOf[0].allOf[1].Payload.fields[].Options[].SortOrderDatabaseInteger YesInteger value; legacy MySQL reads may serialize it as a numeric string.
$.oneOf[0].allOf[1].Payload.fields[].Options[].SortOrder.oneOf[0]integer Yes
$.oneOf[0].allOf[1].Payload.fields[].Options[].SortOrder.oneOf[1]string Yes
$.oneOf[0].allOf[1].Payload.templatesarray Yes
$.oneOf[0].allOf[1].Payload.templates[]object No
$.oneOf[0].allOf[1].Payload.templates[].IDDatabaseInteger YesInteger value; legacy MySQL reads may serialize it as a numeric string.
$.oneOf[0].allOf[1].Payload.templates[].ID.oneOf[0]integer Yes
$.oneOf[0].allOf[1].Payload.templates[].ID.oneOf[1]string Yes
$.oneOf[0].allOf[1].Payload.templates[].CreatedDatestring Yes
$.oneOf[0].allOf[1].Payload.templates[].OwnerUserID Yes
$.oneOf[0].allOf[1].Payload.templates[].OwnerUserID.anyOf[0]DatabaseInteger YesInteger value; legacy MySQL reads may serialize it as a numeric string.
$.oneOf[0].allOf[1].Payload.templates[].OwnerUserID.anyOf[0].oneOf[0]integer Yes
$.oneOf[0].allOf[1].Payload.templates[].OwnerUserID.anyOf[0].oneOf[1]string Yes
$.oneOf[0].allOf[1].Payload.templates[].OwnerUserID.anyOf[1]null Yes
$.oneOf[0].allOf[1].Payload.templates[].StarterKey Yes
$.oneOf[0].allOf[1].Payload.templates[].StarterKey.anyOf[0]string Yes
$.oneOf[0].allOf[1].Payload.templates[].StarterKey.anyOf[1]null Yes
$.oneOf[0].allOf[1].Payload.templates[].SourceTemplateID Yes
$.oneOf[0].allOf[1].Payload.templates[].SourceTemplateID.anyOf[0]DatabaseInteger YesInteger value; legacy MySQL reads may serialize it as a numeric string.
$.oneOf[0].allOf[1].Payload.templates[].SourceTemplateID.anyOf[0].oneOf[0]integer Yes
$.oneOf[0].allOf[1].Payload.templates[].SourceTemplateID.anyOf[0].oneOf[1]string Yes
$.oneOf[0].allOf[1].Payload.templates[].SourceTemplateID.anyOf[1]null Yes
$.oneOf[0].allOf[1].Payload.templates[].CurrentVersionID Yes
$.oneOf[0].allOf[1].Payload.templates[].CurrentVersionID.anyOf[0]DatabaseInteger YesInteger value; legacy MySQL reads may serialize it as a numeric string.
$.oneOf[0].allOf[1].Payload.templates[].CurrentVersionID.anyOf[0].oneOf[0]integer Yes
$.oneOf[0].allOf[1].Payload.templates[].CurrentVersionID.anyOf[0].oneOf[1]string Yes
$.oneOf[0].allOf[1].Payload.templates[].CurrentVersionID.anyOf[1]null Yes
$.oneOf[0].allOf[1].Payload.templates[].ArchivedDate Yes
$.oneOf[0].allOf[1].Payload.templates[].ArchivedDate.anyOf[0]string Yes
$.oneOf[0].allOf[1].Payload.templates[].ArchivedDate.anyOf[1]null Yes
$.oneOf[0].allOf[1].Payload.templates[].Titlestring Yes
$.oneOf[0].allOf[1].Payload.templates[].TitleKey Yes
$.oneOf[0].allOf[1].Payload.templates[].TitleKey.anyOf[0]string Yes
$.oneOf[0].allOf[1].Payload.templates[].TitleKey.anyOf[1]null Yes
$.oneOf[0].allOf[1].Payload.templates[].VersionNumberDatabaseInteger YesInteger value; legacy MySQL reads may serialize it as a numeric string.
$.oneOf[0].allOf[1].Payload.templates[].VersionNumber.oneOf[0]integer Yes
$.oneOf[0].allOf[1].Payload.templates[].VersionNumber.oneOf[1]string Yes
$.oneOf[0].allOf[1].Payload.context Yes
$.oneOf[0].allOf[1].Payload.context.anyOf[0]object Yes
$.oneOf[0].allOf[1].Payload.context.anyOf[0].canSendboolean Yes
$.oneOf[0].allOf[1].Payload.context.anyOf[0].writableboolean Yes
$.oneOf[0].allOf[1].Payload.context.anyOf[0].chatIDinteger Yes
$.oneOf[0].allOf[1].Payload.context.anyOf[0].customerIDinteger Yes
$.oneOf[0].allOf[1].Payload.context.anyOf[0].bidIDinteger Yes
$.oneOf[0].allOf[1].Payload.context.anyOf[0].reasonCodestring No
$.oneOf[0].allOf[1].Payload.context.anyOf[0].reasonstring No
$.oneOf[0].allOf[1].Payload.context.anyOf[0].otherUserIDinteger No
$.oneOf[0].allOf[1].Payload.context.anyOf[0].buyerIdentityHiddenboolean NoTrue when the authenticated viewer cannot see the buyer during the current response race.
$.oneOf[0].allOf[1].Payload.context.anyOf[0].buyerIdentityHiddenUntilinteger | null NoSaved current-round ClosesAt as Unix seconds; null when identity is visible. Reveal is authoritative only on a new response.
$.oneOf[0].allOf[1].Payload.context.anyOf[1]null Yes
$.oneOf[0].allOf[1].Payload.customer Yes
$.oneOf[0].allOf[1].Payload.customer.anyOf[0]object Yes
$.oneOf[0].allOf[1].Payload.customer.anyOf[0].aliasstring | null Yes
$.oneOf[0].allOf[1].Payload.customer.anyOf[0].avatarstring | null Yes
$.oneOf[0].allOf[1].Payload.customer.anyOf[0].avatarEmojistring | null Yes
$.oneOf[0].allOf[1].Payload.customer.anyOf[0].profileImageUrlstring | null Yes
$.oneOf[0].allOf[1].Payload.customer.anyOf[0].profileImageURLstring | null Yes
$.oneOf[0].allOf[1].Payload.customer.anyOf[0].labelstring Yes
$.oneOf[0].allOf[1].Payload.customer.anyOf[0].profileUrlstring | null Yes
$.oneOf[0].allOf[1].Payload.customer.anyOf[0].profileURLstring | null Yes
$.oneOf[0].allOf[1].Payload.customer.anyOf[0].titlestring Yes
$.oneOf[0].allOf[1].Payload.customer.anyOf[0].customColorstring | null Yes
$.oneOf[0].allOf[1].Payload.customer.anyOf[0].customTextColorstring | null Yes
$.oneOf[0].allOf[1].Payload.customer.anyOf[0].avatarModestring | null Yes
$.oneOf[0].allOf[1].Payload.customer.anyOf[0].htmlstring Yes
$.oneOf[0].allOf[1].Payload.customer.anyOf[0].idinteger | null Yes
$.oneOf[0].allOf[1].Payload.customer.anyOf[0].userIDinteger | null Yes
$.oneOf[0].allOf[1].Payload.customer.anyOf[0].isRichboolean Yes
$.oneOf[0].allOf[1].Payload.customer.anyOf[0].profileImage Yes
$.oneOf[0].allOf[1].Payload.customer.anyOf[0].profileImage.anyOf[0]object Yes
$.oneOf[0].allOf[1].Payload.customer.anyOf[0].profileImage.anyOf[0].idinteger Yes
$.oneOf[0].allOf[1].Payload.customer.anyOf[0].profileImage.anyOf[0].thumbUrlstring Yes
$.oneOf[0].allOf[1].Payload.customer.anyOf[0].profileImage.anyOf[0].mediaUrlstring Yes
$.oneOf[0].allOf[1].Payload.customer.anyOf[0].profileImage.anyOf[0].mediaTypestring Yes
$.oneOf[0].allOf[1].Payload.customer.anyOf[0].profileImage.anyOf[0].widthinteger Yes
$.oneOf[0].allOf[1].Payload.customer.anyOf[0].profileImage.anyOf[0].heightinteger Yes
$.oneOf[0].allOf[1].Payload.customer.anyOf[0].profileImage.anyOf[0].titlestring Yes
$.oneOf[0].allOf[1].Payload.customer.anyOf[0].profileImage.anyOf[0].isImageboolean Yes
$.oneOf[0].allOf[1].Payload.customer.anyOf[0].profileImage.anyOf[0].isEmbeddedboolean Yes
$.oneOf[0].allOf[1].Payload.customer.anyOf[0].profileImage.anyOf[0].frameobject Yes
$.oneOf[0].allOf[1].Payload.customer.anyOf[0].profileImage.anyOf[0].frame.positionXPercentnumber Yes
$.oneOf[0].allOf[1].Payload.customer.anyOf[0].profileImage.anyOf[0].frame.positionYPercentnumber Yes
$.oneOf[0].allOf[1].Payload.customer.anyOf[0].profileImage.anyOf[0].frame.zoomPercentnumber Yes
$.oneOf[0].allOf[1].Payload.customer.anyOf[0].profileImage.anyOf[0].backgroundUrlstring No
$.oneOf[0].allOf[1].Payload.customer.anyOf[0].profileImage.anyOf[1]null Yes
$.oneOf[0].allOf[1].Payload.customer.anyOf[0].medalsarray Yes
$.oneOf[0].allOf[1].Payload.customer.anyOf[0].medals[]object No
$.oneOf[0].allOf[1].Payload.customer.anyOf[0].medals[].Namestring Yes
$.oneOf[0].allOf[1].Payload.customer.anyOf[0].medals[].URLstring Yes
$.oneOf[0].allOf[1].Payload.customer.anyOf[0].identityHiddenboolean NoAn anonymized author has no profile or follow action.
$.oneOf[0].allOf[1].Payload.customer.anyOf[0].identityHiddenUntilinteger | null NoCurrent response-race closing timestamp in Unix seconds.
$.oneOf[0].allOf[1].Payload.customer.anyOf[1]null Yes
$.oneOf[0].allOf[1].Payload.salesarray Yes
$.oneOf[0].allOf[1].Payload.sales[]object No
$.oneOf[0].allOf[1].Payload.sales[].IDDatabaseInteger YesInteger value; legacy MySQL reads may serialize it as a numeric string.
$.oneOf[0].allOf[1].Payload.sales[].ID.oneOf[0]integer Yes
$.oneOf[0].allOf[1].Payload.sales[].ID.oneOf[1]string Yes
$.oneOf[0].allOf[1].Payload.sales[].BidID Yes
$.oneOf[0].allOf[1].Payload.sales[].BidID.anyOf[0]DatabaseInteger YesInteger value; legacy MySQL reads may serialize it as a numeric string.
$.oneOf[0].allOf[1].Payload.sales[].BidID.anyOf[0].oneOf[0]integer Yes
$.oneOf[0].allOf[1].Payload.sales[].BidID.anyOf[0].oneOf[1]string Yes
$.oneOf[0].allOf[1].Payload.sales[].BidID.anyOf[1]null Yes
$.oneOf[0].allOf[1].Payload.sales[].AppointmentID Yes
$.oneOf[0].allOf[1].Payload.sales[].AppointmentID.anyOf[0]DatabaseInteger YesInteger value; legacy MySQL reads may serialize it as a numeric string.
$.oneOf[0].allOf[1].Payload.sales[].AppointmentID.anyOf[0].oneOf[0]integer Yes
$.oneOf[0].allOf[1].Payload.sales[].AppointmentID.anyOf[0].oneOf[1]string Yes
$.oneOf[0].allOf[1].Payload.sales[].AppointmentID.anyOf[1]null Yes
$.oneOf[0].allOf[1].Payload.sales[].TransactionCompletedDate Yes
$.oneOf[0].allOf[1].Payload.sales[].TransactionCompletedDate.anyOf[0]string Yes
$.oneOf[0].allOf[1].Payload.sales[].TransactionCompletedDate.anyOf[1]null Yes
$.oneOf[0].allOf[1].Payload.sales[].LocationName Yes
$.oneOf[0].allOf[1].Payload.sales[].LocationName.anyOf[0]string Yes
$.oneOf[0].allOf[1].Payload.sales[].LocationName.anyOf[1]null Yes
$.oneOf[1]object Yes
$.oneOf[1].RequestUserAliasstring Yes
$.oneOf[1].RequestPathstring | null Yes
$.oneOf[1].RequestStatus = "Failed" Yes
$.oneOf[1].ResponseCodeinteger Yes
$.oneOf[1].ResponseMessageAPIResponseMessage Yes
$.oneOf[1].ResponseMessage.oneOf[0]string | number | boolean | null Yes
$.oneOf[1].ResponseMessage.oneOf[1]array Yes
$.oneOf[1].ResponseMessage.oneOf[1][]APIResponseMessage No
$.oneOf[1].ResponseMessage.oneOf[2]object Yes
$.oneOf[1].ResponseMessage.oneOf[2].*APIResponseMessage No
$.oneOf[1].RequestImpersonatedByUserAliasstring No
$.oneOf[1].ErrorReasonstring ["active_bid_selection","chat_permission_unavailable"] No
Response example
{
    "RequestStatus": "Succeeded",
    "ResponseCode": 100,
    "ResponseMessage": "Synthetic success example.",
    "RequestPath": "/v1/customer_survey/get_catalog",
    "RequestUserAlias": "example-user",
    "Payload": {
        "fields": [],
        "templates": [],
        "context": {
            "canSend": false,
            "writable": false,
            "chatID": 0,
            "customerID": 0,
            "bidID": 0
        },
        "customer": {
            "alias": "synthetic-example",
            "avatar": "synthetic-example",
            "avatarEmoji": "synthetic-example",
            "profileImageUrl": "synthetic-example",
            "profileImageURL": "synthetic-example",
            "label": "synthetic-example",
            "profileUrl": "synthetic-example",
            "profileURL": "synthetic-example",
            "title": "synthetic-example",
            "customColor": "synthetic-example",
            "customTextColor": "synthetic-example",
            "avatarMode": "synthetic-example",
            "html": "synthetic-example",
            "id": 0,
            "userID": 0,
            "isRich": false,
            "profileImage": {
                "id": 0,
                "thumbUrl": "synthetic-example",
                "mediaUrl": "synthetic-example",
                "mediaType": "synthetic-example",
                "width": 0,
                "height": 0,
                "title": "synthetic-example",
                "isImage": false,
                "isEmbedded": false,
                "frame": {
                    "positionXPercent": 0,
                    "positionYPercent": 0,
                    "zoomPercent": 100
                }
            },
            "medals": []
        },
        "sales": []
    }
}
Machine-readable endpoint documentation
GET

/v1/customer_survey/get_customer_fields

#
Read own remembered values, or values this customer explicitly shared with the acting seller. Other sellers' responses are never returned.

Parameters

NameTypeRequiredDefaultDescription
customerID int Yes — Customer user ID.
Request example (cURL)
curl --get \
  'https://ca.appointmenttrader.com/v1/customer_survey/get_customer_fields' \
  --data-urlencode 'key={{API_KEY}}' \
  --data-urlencode 'customerID={{customerID}}'

Returns

JSON
See the shared response schema and synthetic example.
Response fields
FieldTypeRequiredDescription
$customer_survey_get_customer_fields_Response Yes
$.oneOf[0] Yes
$.oneOf[0].allOf[0]object Yes
$.oneOf[0].allOf[0].RequestUserAliasstring Yes
$.oneOf[0].allOf[0].RequestPathstring | null Yes
$.oneOf[0].allOf[0].RequestStatus = "Succeeded" Yes
$.oneOf[0].allOf[0].ResponseCodeinteger Yes
$.oneOf[0].allOf[0].ResponseMessageAPIResponseMessage Yes
$.oneOf[0].allOf[0].ResponseMessage.oneOf[0]string | number | boolean | null Yes
$.oneOf[0].allOf[0].ResponseMessage.oneOf[1]array Yes
$.oneOf[0].allOf[0].ResponseMessage.oneOf[1][]APIResponseMessage No
$.oneOf[0].allOf[0].ResponseMessage.oneOf[2]object Yes
$.oneOf[0].allOf[0].ResponseMessage.oneOf[2].*APIResponseMessage No
$.oneOf[0].allOf[0].RequestImpersonatedByUserAliasstring No
$.oneOf[0].allOf[1]object Yes
$.oneOf[0].allOf[1].Payloadobject Yes
$.oneOf[0].allOf[1].Payload.canForgetboolean Yes
$.oneOf[0].allOf[1].Payload.itemsarray Yes
$.oneOf[0].allOf[1].Payload.items[]object No
$.oneOf[0].allOf[1].Payload.items[].fieldIDinteger Yes
$.oneOf[0].allOf[1].Payload.items[].labelstring Yes
$.oneOf[0].allOf[1].Payload.items[].typestring ["text","longtext","number","boolean","single_select","multi_select"] Yes
$.oneOf[0].allOf[1].Payload.items[].valueSurveyAnswerValue YesValue follows the question type: text or selected key, decimal numeric string, boolean, selected-key list, or null when unanswered.
$.oneOf[0].allOf[1].Payload.items[].value.anyOf[0]null Yes
$.oneOf[0].allOf[1].Payload.items[].value.anyOf[1]string Yes
$.oneOf[0].allOf[1].Payload.items[].value.anyOf[2]number Yes
$.oneOf[0].allOf[1].Payload.items[].value.anyOf[3]boolean Yes
$.oneOf[0].allOf[1].Payload.items[].value.anyOf[4]array Yes
$.oneOf[0].allOf[1].Payload.items[].value.anyOf[4][]string No
$.oneOf[0].allOf[1].Payload.items[].optionsarray Yes
$.oneOf[0].allOf[1].Payload.items[].options[]object No
$.oneOf[0].allOf[1].Payload.items[].options[].keystring Yes
$.oneOf[0].allOf[1].Payload.items[].options[].labelstring Yes
$.oneOf[0].allOf[1].Payload.items[].confirmedDate Yes
$.oneOf[0].allOf[1].Payload.items[].confirmedDate.anyOf[0]string Yes
$.oneOf[0].allOf[1].Payload.items[].confirmedDate.anyOf[1]null Yes
$.oneOf[0].allOf[1].Payload.items[].requestIDinteger Yes
$.oneOf[0].allOf[1].Payload.items[].sourceTitlestring Yes
$.oneOf[0].allOf[1].Payload.items[].revisioninteger Yes
$.oneOf[1]object Yes
$.oneOf[1].RequestUserAliasstring Yes
$.oneOf[1].RequestPathstring | null Yes
$.oneOf[1].RequestStatus = "Failed" Yes
$.oneOf[1].ResponseCodeinteger Yes
$.oneOf[1].ResponseMessageAPIResponseMessage Yes
$.oneOf[1].ResponseMessage.oneOf[0]string | number | boolean | null Yes
$.oneOf[1].ResponseMessage.oneOf[1]array Yes
$.oneOf[1].ResponseMessage.oneOf[1][]APIResponseMessage No
$.oneOf[1].ResponseMessage.oneOf[2]object Yes
$.oneOf[1].ResponseMessage.oneOf[2].*APIResponseMessage No
$.oneOf[1].RequestImpersonatedByUserAliasstring No
$.oneOf[1].ErrorReasonstring ["active_bid_selection","chat_permission_unavailable"] No
Response example
{
    "RequestStatus": "Succeeded",
    "ResponseCode": 100,
    "ResponseMessage": "Synthetic success example.",
    "RequestPath": "/v1/customer_survey/get_customer_fields",
    "RequestUserAlias": "example-user",
    "Payload": {
        "canForget": false,
        "items": []
    }
}
Machine-readable endpoint documentation
GET

/v1/customer_survey/get_request

#
Read a questionnaire. Only its customer receives drafts, remembered prefills and memory revisions. Sellers receive submitted history only.

Parameters

NameTypeRequiredDefaultDescription
requestID int Yes — Sent questionnaire identifier.
adminInspection bool No false Explicit read-only inspection requiring AccessSpecialFunctions; logged with actor and request.
Request example (cURL)
curl --get \
  'https://ca.appointmenttrader.com/v1/customer_survey/get_request' \
  --data-urlencode 'key={{API_KEY}}' \
  --data-urlencode 'requestID={{requestID}}' \
  --data-urlencode 'adminInspection={{adminInspection}}'

Returns

JSON
See the shared response schema and synthetic example.
Response fields
FieldTypeRequiredDescription
$customer_survey_get_request_Response Yes
$.oneOf[0] Yes
$.oneOf[0].allOf[0]object Yes
$.oneOf[0].allOf[0].RequestUserAliasstring Yes
$.oneOf[0].allOf[0].RequestPathstring | null Yes
$.oneOf[0].allOf[0].RequestStatus = "Succeeded" Yes
$.oneOf[0].allOf[0].ResponseCodeinteger Yes
$.oneOf[0].allOf[0].ResponseMessageAPIResponseMessage Yes
$.oneOf[0].allOf[0].ResponseMessage.oneOf[0]string | number | boolean | null Yes
$.oneOf[0].allOf[0].ResponseMessage.oneOf[1]array Yes
$.oneOf[0].allOf[0].ResponseMessage.oneOf[1][]APIResponseMessage No
$.oneOf[0].allOf[0].ResponseMessage.oneOf[2]object Yes
$.oneOf[0].allOf[0].ResponseMessage.oneOf[2].*APIResponseMessage No
$.oneOf[0].allOf[0].RequestImpersonatedByUserAliasstring No
$.oneOf[0].allOf[1]object Yes
$.oneOf[0].allOf[1].Payloadobject Yes
$.oneOf[0].allOf[1].Payload.requestobject Yes
$.oneOf[0].allOf[1].Payload.request.idinteger Yes
$.oneOf[0].allOf[1].Payload.request.revisioninteger Yes
$.oneOf[0].allOf[1].Payload.request.customerIDinteger Yes
$.oneOf[0].allOf[1].Payload.request.sellerIDinteger Yes
$.oneOf[0].allOf[1].Payload.request.chatIDinteger Yes
$.oneOf[0].allOf[1].Payload.request.bidIDinteger Yes
$.oneOf[0].allOf[1].Payload.request.transactionIDinteger Yes
$.oneOf[0].allOf[1].Payload.request.titlestring Yes
$.oneOf[0].allOf[1].Payload.request.statusstring ["sent","in_progress","submitted","cancelled"] Yes
$.oneOf[0].allOf[1].Payload.request.submittedDate Yes
$.oneOf[0].allOf[1].Payload.request.submittedDate.anyOf[0]string Yes
$.oneOf[0].allOf[1].Payload.request.submittedDate.anyOf[1]null Yes
$.oneOf[0].allOf[1].Payload.request.urlstring Yes
$.oneOf[0].allOf[1].Payload.request.buyerIdentityHiddenboolean NoTrue when the authenticated viewer cannot see the buyer during the current response race.
$.oneOf[0].allOf[1].Payload.request.buyerIdentityHiddenUntilinteger | null NoSaved current-round ClosesAt as Unix seconds; null when identity is visible. Reveal is authoritative only on a new response.
$.oneOf[0].allOf[1].Payload.titlestring Yes
$.oneOf[0].allOf[1].Payload.introductionstring Yes
$.oneOf[0].allOf[1].Payload.questionsarray Yes
$.oneOf[0].allOf[1].Payload.questions[]object No
$.oneOf[0].allOf[1].Payload.questions[].IDDatabaseInteger YesInteger value; legacy MySQL reads may serialize it as a numeric string.
$.oneOf[0].allOf[1].Payload.questions[].ID.oneOf[0]integer Yes
$.oneOf[0].allOf[1].Payload.questions[].ID.oneOf[1]string Yes
$.oneOf[0].allOf[1].Payload.questions[].VersionIDDatabaseInteger YesInteger value; legacy MySQL reads may serialize it as a numeric string.
$.oneOf[0].allOf[1].Payload.questions[].VersionID.oneOf[0]integer Yes
$.oneOf[0].allOf[1].Payload.questions[].VersionID.oneOf[1]string Yes
$.oneOf[0].allOf[1].Payload.questions[].FieldID Yes
$.oneOf[0].allOf[1].Payload.questions[].FieldID.anyOf[0]DatabaseInteger YesInteger value; legacy MySQL reads may serialize it as a numeric string.
$.oneOf[0].allOf[1].Payload.questions[].FieldID.anyOf[0].oneOf[0]integer Yes
$.oneOf[0].allOf[1].Payload.questions[].FieldID.anyOf[0].oneOf[1]string Yes
$.oneOf[0].allOf[1].Payload.questions[].FieldID.anyOf[1]null Yes
$.oneOf[0].allOf[1].Payload.questions[].QuestionKeystring Yes
$.oneOf[0].allOf[1].Payload.questions[].Labelstring Yes
$.oneOf[0].allOf[1].Payload.questions[].LabelKey Yes
$.oneOf[0].allOf[1].Payload.questions[].LabelKey.anyOf[0]string Yes
$.oneOf[0].allOf[1].Payload.questions[].LabelKey.anyOf[1]null Yes
$.oneOf[0].allOf[1].Payload.questions[].HelpTextstring Yes
$.oneOf[0].allOf[1].Payload.questions[].FieldTypestring ["text","number","boolean","single_select","multi_select","longtext"] Yes
$.oneOf[0].allOf[1].Payload.questions[].RequiredDatabaseInteger YesInteger value; legacy MySQL reads may serialize it as a numeric string.
$.oneOf[0].allOf[1].Payload.questions[].Required.oneOf[0]integer Yes
$.oneOf[0].allOf[1].Payload.questions[].Required.oneOf[1]string Yes
$.oneOf[0].allOf[1].Payload.questions[].SortOrderDatabaseInteger YesInteger value; legacy MySQL reads may serialize it as a numeric string.
$.oneOf[0].allOf[1].Payload.questions[].SortOrder.oneOf[0]integer Yes
$.oneOf[0].allOf[1].Payload.questions[].SortOrder.oneOf[1]string Yes
$.oneOf[0].allOf[1].Payload.questions[].ValidationJSONstring (application/json) Yes
$.oneOf[0].allOf[1].Payload.questions[].ValidationJSONSurveyValidation (decoded JSON) Yes
$.oneOf[0].allOf[1].Payload.questions[].ValidationJSON.anyOf[0]object Yes
$.oneOf[0].allOf[1].Payload.questions[].ValidationJSON.anyOf[0].maxLengthinteger No
$.oneOf[0].allOf[1].Payload.questions[].ValidationJSON.anyOf[0].integerboolean No
$.oneOf[0].allOf[1].Payload.questions[].ValidationJSON.anyOf[0].minnumber No
$.oneOf[0].allOf[1].Payload.questions[].ValidationJSON.anyOf[0].maxnumber No
$.oneOf[0].allOf[1].Payload.questions[].ValidationJSON.anyOf[1] = [] Yes
$.oneOf[0].allOf[1].Payload.questions[].FieldOwnerUserID Yes
$.oneOf[0].allOf[1].Payload.questions[].FieldOwnerUserID.anyOf[0]DatabaseInteger YesInteger value; legacy MySQL reads may serialize it as a numeric string.
$.oneOf[0].allOf[1].Payload.questions[].FieldOwnerUserID.anyOf[0].oneOf[0]integer Yes
$.oneOf[0].allOf[1].Payload.questions[].FieldOwnerUserID.anyOf[0].oneOf[1]string Yes
$.oneOf[0].allOf[1].Payload.questions[].FieldOwnerUserID.anyOf[1]null Yes
$.oneOf[0].allOf[1].Payload.questions[].ValueScope Yes
$.oneOf[0].allOf[1].Payload.questions[].ValueScope.anyOf[0]string ["customer","booking"] Yes
$.oneOf[0].allOf[1].Payload.questions[].ValueScope.anyOf[1]null Yes
$.oneOf[0].allOf[1].Payload.questions[].FieldKey Yes
$.oneOf[0].allOf[1].Payload.questions[].FieldKey.anyOf[0]string Yes
$.oneOf[0].allOf[1].Payload.questions[].FieldKey.anyOf[1]null Yes
$.oneOf[0].allOf[1].Payload.questions[].validationSurveyValidation Yes
$.oneOf[0].allOf[1].Payload.questions[].validation.anyOf[0]object Yes
$.oneOf[0].allOf[1].Payload.questions[].validation.anyOf[0].maxLengthinteger No
$.oneOf[0].allOf[1].Payload.questions[].validation.anyOf[0].integerboolean No
$.oneOf[0].allOf[1].Payload.questions[].validation.anyOf[0].minnumber No
$.oneOf[0].allOf[1].Payload.questions[].validation.anyOf[0].maxnumber No
$.oneOf[0].allOf[1].Payload.questions[].validation.anyOf[1] = [] Yes
$.oneOf[0].allOf[1].Payload.questions[].Optionsarray Yes
$.oneOf[0].allOf[1].Payload.questions[].Options[]object No
$.oneOf[0].allOf[1].Payload.questions[].Options[].IDDatabaseInteger YesInteger value; legacy MySQL reads may serialize it as a numeric string.
$.oneOf[0].allOf[1].Payload.questions[].Options[].ID.oneOf[0]integer Yes
$.oneOf[0].allOf[1].Payload.questions[].Options[].ID.oneOf[1]string Yes
$.oneOf[0].allOf[1].Payload.questions[].Options[].QuestionIDDatabaseInteger YesInteger value; legacy MySQL reads may serialize it as a numeric string.
$.oneOf[0].allOf[1].Payload.questions[].Options[].QuestionID.oneOf[0]integer Yes
$.oneOf[0].allOf[1].Payload.questions[].Options[].QuestionID.oneOf[1]string Yes
$.oneOf[0].allOf[1].Payload.questions[].Options[].FieldOptionID Yes
$.oneOf[0].allOf[1].Payload.questions[].Options[].FieldOptionID.anyOf[0]DatabaseInteger YesInteger value; legacy MySQL reads may serialize it as a numeric string.
$.oneOf[0].allOf[1].Payload.questions[].Options[].FieldOptionID.anyOf[0].oneOf[0]integer Yes
$.oneOf[0].allOf[1].Payload.questions[].Options[].FieldOptionID.anyOf[0].oneOf[1]string Yes
$.oneOf[0].allOf[1].Payload.questions[].Options[].FieldOptionID.anyOf[1]null Yes
$.oneOf[0].allOf[1].Payload.questions[].Options[].OptionKeystring Yes
$.oneOf[0].allOf[1].Payload.questions[].Options[].Labelstring Yes
$.oneOf[0].allOf[1].Payload.questions[].Options[].LabelKey Yes
$.oneOf[0].allOf[1].Payload.questions[].Options[].LabelKey.anyOf[0]string Yes
$.oneOf[0].allOf[1].Payload.questions[].Options[].LabelKey.anyOf[1]null Yes
$.oneOf[0].allOf[1].Payload.questions[].Options[].SortOrderDatabaseInteger YesInteger value; legacy MySQL reads may serialize it as a numeric string.
$.oneOf[0].allOf[1].Payload.questions[].Options[].SortOrder.oneOf[0]integer Yes
$.oneOf[0].allOf[1].Payload.questions[].Options[].SortOrder.oneOf[1]string Yes
$.oneOf[0].allOf[1].Payload.historyarray Yes
$.oneOf[0].allOf[1].Payload.history[]object No
$.oneOf[0].allOf[1].Payload.history[].idinteger Yes
$.oneOf[0].allOf[1].Payload.history[].revisioninteger Yes
$.oneOf[0].allOf[1].Payload.history[].submittedDate Yes
$.oneOf[0].allOf[1].Payload.history[].submittedDate.anyOf[0]string Yes
$.oneOf[0].allOf[1].Payload.history[].submittedDate.anyOf[1]null Yes
$.oneOf[0].allOf[1].Payload.history[].answersobject Yes
$.oneOf[0].allOf[1].Payload.history[].answers.*SurveyAnswerValue NoValue follows the question type: text or selected key, decimal numeric string, boolean, selected-key list, or null when unanswered.
$.oneOf[0].allOf[1].Payload.history[].answers.*.anyOf[0]null No
$.oneOf[0].allOf[1].Payload.history[].answers.*.anyOf[1]string No
$.oneOf[0].allOf[1].Payload.history[].answers.*.anyOf[2]number No
$.oneOf[0].allOf[1].Payload.history[].answers.*.anyOf[3]boolean No
$.oneOf[0].allOf[1].Payload.history[].answers.*.anyOf[4]array No
$.oneOf[0].allOf[1].Payload.history[].answers.*.anyOf[4][]string No
$.oneOf[0].allOf[1].Payload.draft Yes
$.oneOf[0].allOf[1].Payload.draft.anyOf[0]object Yes
$.oneOf[0].allOf[1].Payload.draft.anyOf[0].idinteger Yes
$.oneOf[0].allOf[1].Payload.draft.anyOf[0].revisioninteger Yes
$.oneOf[0].allOf[1].Payload.draft.anyOf[0].submittedDate Yes
$.oneOf[0].allOf[1].Payload.draft.anyOf[0].submittedDate.anyOf[0]string Yes
$.oneOf[0].allOf[1].Payload.draft.anyOf[0].submittedDate.anyOf[1]null Yes
$.oneOf[0].allOf[1].Payload.draft.anyOf[0].answersobject Yes
$.oneOf[0].allOf[1].Payload.draft.anyOf[0].answers.*SurveyAnswerValue NoValue follows the question type: text or selected key, decimal numeric string, boolean, selected-key list, or null when unanswered.
$.oneOf[0].allOf[1].Payload.draft.anyOf[0].answers.*.anyOf[0]null No
$.oneOf[0].allOf[1].Payload.draft.anyOf[0].answers.*.anyOf[1]string No
$.oneOf[0].allOf[1].Payload.draft.anyOf[0].answers.*.anyOf[2]number No
$.oneOf[0].allOf[1].Payload.draft.anyOf[0].answers.*.anyOf[3]boolean No
$.oneOf[0].allOf[1].Payload.draft.anyOf[0].answers.*.anyOf[4]array No
$.oneOf[0].allOf[1].Payload.draft.anyOf[0].answers.*.anyOf[4][]string No
$.oneOf[0].allOf[1].Payload.draft.anyOf[1]null Yes
$.oneOf[0].allOf[1].Payload.prefillobject Yes
$.oneOf[0].allOf[1].Payload.prefill.*object No
$.oneOf[0].allOf[1].Payload.prefill.*.valueSurveyAnswerValue YesValue follows the question type: text or selected key, decimal numeric string, boolean, selected-key list, or null when unanswered.
$.oneOf[0].allOf[1].Payload.prefill.*.value.anyOf[0]null Yes
$.oneOf[0].allOf[1].Payload.prefill.*.value.anyOf[1]string Yes
$.oneOf[0].allOf[1].Payload.prefill.*.value.anyOf[2]number Yes
$.oneOf[0].allOf[1].Payload.prefill.*.value.anyOf[3]boolean Yes
$.oneOf[0].allOf[1].Payload.prefill.*.value.anyOf[4]array Yes
$.oneOf[0].allOf[1].Payload.prefill.*.value.anyOf[4][]string No
$.oneOf[0].allOf[1].Payload.prefill.*.sourcestring ["saved","booking"] Yes
$.oneOf[0].allOf[1].Payload.memoryRevisionsobject Yes
$.oneOf[0].allOf[1].Payload.memoryRevisions.*integer No
$.oneOf[0].allOf[1].Payload.canAnswerboolean Yes
$.oneOf[0].allOf[1].Payload.canCancelboolean Yes
$.oneOf[0].allOf[1].Payload.canAttachboolean Yes
$.oneOf[0].allOf[1].Payload.isCustomerboolean Yes
$.oneOf[0].allOf[1].Payload.salesarray Yes
$.oneOf[0].allOf[1].Payload.sales[]object No
$.oneOf[0].allOf[1].Payload.sales[].IDDatabaseInteger YesInteger value; legacy MySQL reads may serialize it as a numeric string.
$.oneOf[0].allOf[1].Payload.sales[].ID.oneOf[0]integer Yes
$.oneOf[0].allOf[1].Payload.sales[].ID.oneOf[1]string Yes
$.oneOf[0].allOf[1].Payload.sales[].BidID Yes
$.oneOf[0].allOf[1].Payload.sales[].BidID.anyOf[0]DatabaseInteger YesInteger value; legacy MySQL reads may serialize it as a numeric string.
$.oneOf[0].allOf[1].Payload.sales[].BidID.anyOf[0].oneOf[0]integer Yes
$.oneOf[0].allOf[1].Payload.sales[].BidID.anyOf[0].oneOf[1]string Yes
$.oneOf[0].allOf[1].Payload.sales[].BidID.anyOf[1]null Yes
$.oneOf[0].allOf[1].Payload.sales[].AppointmentID Yes
$.oneOf[0].allOf[1].Payload.sales[].AppointmentID.anyOf[0]DatabaseInteger YesInteger value; legacy MySQL reads may serialize it as a numeric string.
$.oneOf[0].allOf[1].Payload.sales[].AppointmentID.anyOf[0].oneOf[0]integer Yes
$.oneOf[0].allOf[1].Payload.sales[].AppointmentID.anyOf[0].oneOf[1]string Yes
$.oneOf[0].allOf[1].Payload.sales[].AppointmentID.anyOf[1]null Yes
$.oneOf[0].allOf[1].Payload.sales[].TransactionCompletedDate Yes
$.oneOf[0].allOf[1].Payload.sales[].TransactionCompletedDate.anyOf[0]string Yes
$.oneOf[0].allOf[1].Payload.sales[].TransactionCompletedDate.anyOf[1]null Yes
$.oneOf[0].allOf[1].Payload.sales[].LocationName Yes
$.oneOf[0].allOf[1].Payload.sales[].LocationName.anyOf[0]string Yes
$.oneOf[0].allOf[1].Payload.sales[].LocationName.anyOf[1]null Yes
$.oneOf[1]object Yes
$.oneOf[1].RequestUserAliasstring Yes
$.oneOf[1].RequestPathstring | null Yes
$.oneOf[1].RequestStatus = "Failed" Yes
$.oneOf[1].ResponseCodeinteger Yes
$.oneOf[1].ResponseMessageAPIResponseMessage Yes
$.oneOf[1].ResponseMessage.oneOf[0]string | number | boolean | null Yes
$.oneOf[1].ResponseMessage.oneOf[1]array Yes
$.oneOf[1].ResponseMessage.oneOf[1][]APIResponseMessage No
$.oneOf[1].ResponseMessage.oneOf[2]object Yes
$.oneOf[1].ResponseMessage.oneOf[2].*APIResponseMessage No
$.oneOf[1].RequestImpersonatedByUserAliasstring No
$.oneOf[1].ErrorReasonstring ["active_bid_selection","chat_permission_unavailable"] No
Response example
{
    "RequestStatus": "Succeeded",
    "ResponseCode": 100,
    "ResponseMessage": "Synthetic success example.",
    "RequestPath": "/v1/customer_survey/get_request",
    "RequestUserAlias": "example-user",
    "Payload": {
        "request": {
            "id": 0,
            "revision": 0,
            "customerID": 0,
            "sellerID": 0,
            "chatID": 0,
            "bidID": 0,
            "transactionID": 0,
            "title": "synthetic-example",
            "status": "sent",
            "submittedDate": "synthetic-example",
            "url": "synthetic-example"
        },
        "title": "synthetic-example",
        "introduction": "synthetic-example",
        "questions": [],
        "history": [],
        "draft": {
            "id": 0,
            "revision": 0,
            "submittedDate": "synthetic-example",
            "answers": []
        },
        "prefill": [],
        "memoryRevisions": [],
        "canAnswer": false,
        "canCancel": false,
        "canAttach": false,
        "isCustomer": false,
        "sales": []
    }
}
Machine-readable endpoint documentation
GET

/v1/customer_survey/get_requests

#
List only questionnaires sent or received by the acting user. Context filters never widen that access.

Parameters

NameTypeRequiredDefaultDescription
customerID int No 0 Filter recipient.
transactionID int No 0 Filter a sale, including surveys for its bid and same original pair.
bidID int No 0 Filter bid.
beforeID int No 0 Pagination cursor.
sentOnly bool No false Seller dashboard filter.
completedOnly bool No false Only requests with a submitted response; excludes unanswered requests and private drafts.
Request example (cURL)
curl --get \
  'https://ca.appointmenttrader.com/v1/customer_survey/get_requests' \
  --data-urlencode 'key={{API_KEY}}' \
  --data-urlencode 'customerID={{customerID}}' \
  --data-urlencode 'transactionID={{transactionID}}' \
  --data-urlencode 'bidID={{bidID}}' \
  --data-urlencode 'beforeID={{beforeID}}' \
  --data-urlencode 'sentOnly={{sentOnly}}' \
  --data-urlencode 'completedOnly={{completedOnly}}'

Returns

JSON
See the shared response schema and synthetic example.
Response fields
FieldTypeRequiredDescription
$customer_survey_get_requests_Response Yes
$.oneOf[0] Yes
$.oneOf[0].allOf[0]object Yes
$.oneOf[0].allOf[0].RequestUserAliasstring Yes
$.oneOf[0].allOf[0].RequestPathstring | null Yes
$.oneOf[0].allOf[0].RequestStatus = "Succeeded" Yes
$.oneOf[0].allOf[0].ResponseCodeinteger Yes
$.oneOf[0].allOf[0].ResponseMessageAPIResponseMessage Yes
$.oneOf[0].allOf[0].ResponseMessage.oneOf[0]string | number | boolean | null Yes
$.oneOf[0].allOf[0].ResponseMessage.oneOf[1]array Yes
$.oneOf[0].allOf[0].ResponseMessage.oneOf[1][]APIResponseMessage No
$.oneOf[0].allOf[0].ResponseMessage.oneOf[2]object Yes
$.oneOf[0].allOf[0].ResponseMessage.oneOf[2].*APIResponseMessage No
$.oneOf[0].allOf[0].RequestImpersonatedByUserAliasstring No
$.oneOf[0].allOf[1]object Yes
$.oneOf[0].allOf[1].Payloadobject Yes
$.oneOf[0].allOf[1].Payload.itemsarray Yes
$.oneOf[0].allOf[1].Payload.items[]object No
$.oneOf[0].allOf[1].Payload.items[].idinteger Yes
$.oneOf[0].allOf[1].Payload.items[].revisioninteger Yes
$.oneOf[0].allOf[1].Payload.items[].customerIDinteger Yes
$.oneOf[0].allOf[1].Payload.items[].sellerIDinteger Yes
$.oneOf[0].allOf[1].Payload.items[].chatIDinteger Yes
$.oneOf[0].allOf[1].Payload.items[].bidIDinteger Yes
$.oneOf[0].allOf[1].Payload.items[].transactionIDinteger Yes
$.oneOf[0].allOf[1].Payload.items[].titlestring Yes
$.oneOf[0].allOf[1].Payload.items[].statusstring ["sent","in_progress","submitted","cancelled"] Yes
$.oneOf[0].allOf[1].Payload.items[].submittedDate Yes
$.oneOf[0].allOf[1].Payload.items[].submittedDate.anyOf[0]string Yes
$.oneOf[0].allOf[1].Payload.items[].submittedDate.anyOf[1]null Yes
$.oneOf[0].allOf[1].Payload.items[].urlstring Yes
$.oneOf[0].allOf[1].Payload.items[].buyerIdentityHiddenboolean NoTrue when the authenticated viewer cannot see the buyer during the current response race.
$.oneOf[0].allOf[1].Payload.items[].buyerIdentityHiddenUntilinteger | null NoSaved current-round ClosesAt as Unix seconds; null when identity is visible. Reveal is authoritative only on a new response.
$.oneOf[0].allOf[1].Payload.hasMoreboolean Yes
$.oneOf[0].allOf[1].Payload.beforeIDinteger Yes
$.oneOf[1]object Yes
$.oneOf[1].RequestUserAliasstring Yes
$.oneOf[1].RequestPathstring | null Yes
$.oneOf[1].RequestStatus = "Failed" Yes
$.oneOf[1].ResponseCodeinteger Yes
$.oneOf[1].ResponseMessageAPIResponseMessage Yes
$.oneOf[1].ResponseMessage.oneOf[0]string | number | boolean | null Yes
$.oneOf[1].ResponseMessage.oneOf[1]array Yes
$.oneOf[1].ResponseMessage.oneOf[1][]APIResponseMessage No
$.oneOf[1].ResponseMessage.oneOf[2]object Yes
$.oneOf[1].ResponseMessage.oneOf[2].*APIResponseMessage No
$.oneOf[1].RequestImpersonatedByUserAliasstring No
$.oneOf[1].ErrorReasonstring ["active_bid_selection","chat_permission_unavailable"] No
Response example
{
    "RequestStatus": "Succeeded",
    "ResponseCode": 100,
    "ResponseMessage": "Synthetic success example.",
    "RequestPath": "/v1/customer_survey/get_requests",
    "RequestUserAlias": "example-user",
    "Payload": {
        "items": [],
        "hasMore": false,
        "beforeID": 0
    }
}
Machine-readable endpoint documentation
GET

/v1/customer_survey/get_template

#
Read a versioned AT or seller-owned template for preview/edit/copy.

Parameters

NameTypeRequiredDefaultDescription
templateID int Yes — Template identifier.
Request example (cURL)
curl --get \
  'https://ca.appointmenttrader.com/v1/customer_survey/get_template' \
  --data-urlencode 'key={{API_KEY}}' \
  --data-urlencode 'templateID={{templateID}}'

Returns

JSON
See the shared response schema and synthetic example.
Response fields
FieldTypeRequiredDescription
$customer_survey_get_template_Response Yes
$.oneOf[0] Yes
$.oneOf[0].allOf[0]object Yes
$.oneOf[0].allOf[0].RequestUserAliasstring Yes
$.oneOf[0].allOf[0].RequestPathstring | null Yes
$.oneOf[0].allOf[0].RequestStatus = "Succeeded" Yes
$.oneOf[0].allOf[0].ResponseCodeinteger Yes
$.oneOf[0].allOf[0].ResponseMessageAPIResponseMessage Yes
$.oneOf[0].allOf[0].ResponseMessage.oneOf[0]string | number | boolean | null Yes
$.oneOf[0].allOf[0].ResponseMessage.oneOf[1]array Yes
$.oneOf[0].allOf[0].ResponseMessage.oneOf[1][]APIResponseMessage No
$.oneOf[0].allOf[0].ResponseMessage.oneOf[2]object Yes
$.oneOf[0].allOf[0].ResponseMessage.oneOf[2].*APIResponseMessage No
$.oneOf[0].allOf[0].RequestImpersonatedByUserAliasstring No
$.oneOf[0].allOf[1]object Yes
$.oneOf[0].allOf[1].Payloadobject Yes
$.oneOf[0].allOf[1].Payload.IDDatabaseInteger YesInteger value; legacy MySQL reads may serialize it as a numeric string.
$.oneOf[0].allOf[1].Payload.ID.oneOf[0]integer Yes
$.oneOf[0].allOf[1].Payload.ID.oneOf[1]string Yes
$.oneOf[0].allOf[1].Payload.CreatedDatestring Yes
$.oneOf[0].allOf[1].Payload.OwnerUserID Yes
$.oneOf[0].allOf[1].Payload.OwnerUserID.anyOf[0]DatabaseInteger YesInteger value; legacy MySQL reads may serialize it as a numeric string.
$.oneOf[0].allOf[1].Payload.OwnerUserID.anyOf[0].oneOf[0]integer Yes
$.oneOf[0].allOf[1].Payload.OwnerUserID.anyOf[0].oneOf[1]string Yes
$.oneOf[0].allOf[1].Payload.OwnerUserID.anyOf[1]null Yes
$.oneOf[0].allOf[1].Payload.StarterKey Yes
$.oneOf[0].allOf[1].Payload.StarterKey.anyOf[0]string Yes
$.oneOf[0].allOf[1].Payload.StarterKey.anyOf[1]null Yes
$.oneOf[0].allOf[1].Payload.SourceTemplateID Yes
$.oneOf[0].allOf[1].Payload.SourceTemplateID.anyOf[0]DatabaseInteger YesInteger value; legacy MySQL reads may serialize it as a numeric string.
$.oneOf[0].allOf[1].Payload.SourceTemplateID.anyOf[0].oneOf[0]integer Yes
$.oneOf[0].allOf[1].Payload.SourceTemplateID.anyOf[0].oneOf[1]string Yes
$.oneOf[0].allOf[1].Payload.SourceTemplateID.anyOf[1]null Yes
$.oneOf[0].allOf[1].Payload.CurrentVersionID Yes
$.oneOf[0].allOf[1].Payload.CurrentVersionID.anyOf[0]DatabaseInteger YesInteger value; legacy MySQL reads may serialize it as a numeric string.
$.oneOf[0].allOf[1].Payload.CurrentVersionID.anyOf[0].oneOf[0]integer Yes
$.oneOf[0].allOf[1].Payload.CurrentVersionID.anyOf[0].oneOf[1]string Yes
$.oneOf[0].allOf[1].Payload.CurrentVersionID.anyOf[1]null Yes
$.oneOf[0].allOf[1].Payload.ArchivedDate Yes
$.oneOf[0].allOf[1].Payload.ArchivedDate.anyOf[0]string Yes
$.oneOf[0].allOf[1].Payload.ArchivedDate.anyOf[1]null Yes
$.oneOf[0].allOf[1].Payload.Titlestring Yes
$.oneOf[0].allOf[1].Payload.TitleKey Yes
$.oneOf[0].allOf[1].Payload.TitleKey.anyOf[0]string Yes
$.oneOf[0].allOf[1].Payload.TitleKey.anyOf[1]null Yes
$.oneOf[0].allOf[1].Payload.VersionNumber Yes
$.oneOf[0].allOf[1].Payload.VersionNumber.anyOf[0]DatabaseInteger YesInteger value; legacy MySQL reads may serialize it as a numeric string.
$.oneOf[0].allOf[1].Payload.VersionNumber.anyOf[0].oneOf[0]integer Yes
$.oneOf[0].allOf[1].Payload.VersionNumber.anyOf[0].oneOf[1]string Yes
$.oneOf[0].allOf[1].Payload.VersionNumber.anyOf[1]null Yes
$.oneOf[0].allOf[1].Payload.Introduction Yes
$.oneOf[0].allOf[1].Payload.Introduction.anyOf[0]string Yes
$.oneOf[0].allOf[1].Payload.Introduction.anyOf[1]null Yes
$.oneOf[0].allOf[1].Payload.questionsarray Yes
$.oneOf[0].allOf[1].Payload.questions[]object No
$.oneOf[0].allOf[1].Payload.questions[].IDDatabaseInteger YesInteger value; legacy MySQL reads may serialize it as a numeric string.
$.oneOf[0].allOf[1].Payload.questions[].ID.oneOf[0]integer Yes
$.oneOf[0].allOf[1].Payload.questions[].ID.oneOf[1]string Yes
$.oneOf[0].allOf[1].Payload.questions[].VersionIDDatabaseInteger YesInteger value; legacy MySQL reads may serialize it as a numeric string.
$.oneOf[0].allOf[1].Payload.questions[].VersionID.oneOf[0]integer Yes
$.oneOf[0].allOf[1].Payload.questions[].VersionID.oneOf[1]string Yes
$.oneOf[0].allOf[1].Payload.questions[].FieldID Yes
$.oneOf[0].allOf[1].Payload.questions[].FieldID.anyOf[0]DatabaseInteger YesInteger value; legacy MySQL reads may serialize it as a numeric string.
$.oneOf[0].allOf[1].Payload.questions[].FieldID.anyOf[0].oneOf[0]integer Yes
$.oneOf[0].allOf[1].Payload.questions[].FieldID.anyOf[0].oneOf[1]string Yes
$.oneOf[0].allOf[1].Payload.questions[].FieldID.anyOf[1]null Yes
$.oneOf[0].allOf[1].Payload.questions[].QuestionKeystring Yes
$.oneOf[0].allOf[1].Payload.questions[].Labelstring Yes
$.oneOf[0].allOf[1].Payload.questions[].LabelKey Yes
$.oneOf[0].allOf[1].Payload.questions[].LabelKey.anyOf[0]string Yes
$.oneOf[0].allOf[1].Payload.questions[].LabelKey.anyOf[1]null Yes
$.oneOf[0].allOf[1].Payload.questions[].HelpTextstring Yes
$.oneOf[0].allOf[1].Payload.questions[].FieldTypestring ["text","number","boolean","single_select","multi_select","longtext"] Yes
$.oneOf[0].allOf[1].Payload.questions[].RequiredDatabaseInteger YesInteger value; legacy MySQL reads may serialize it as a numeric string.
$.oneOf[0].allOf[1].Payload.questions[].Required.oneOf[0]integer Yes
$.oneOf[0].allOf[1].Payload.questions[].Required.oneOf[1]string Yes
$.oneOf[0].allOf[1].Payload.questions[].SortOrderDatabaseInteger YesInteger value; legacy MySQL reads may serialize it as a numeric string.
$.oneOf[0].allOf[1].Payload.questions[].SortOrder.oneOf[0]integer Yes
$.oneOf[0].allOf[1].Payload.questions[].SortOrder.oneOf[1]string Yes
$.oneOf[0].allOf[1].Payload.questions[].ValidationJSONstring (application/json) Yes
$.oneOf[0].allOf[1].Payload.questions[].ValidationJSONSurveyValidation (decoded JSON) Yes
$.oneOf[0].allOf[1].Payload.questions[].ValidationJSON.anyOf[0]object Yes
$.oneOf[0].allOf[1].Payload.questions[].ValidationJSON.anyOf[0].maxLengthinteger No
$.oneOf[0].allOf[1].Payload.questions[].ValidationJSON.anyOf[0].integerboolean No
$.oneOf[0].allOf[1].Payload.questions[].ValidationJSON.anyOf[0].minnumber No
$.oneOf[0].allOf[1].Payload.questions[].ValidationJSON.anyOf[0].maxnumber No
$.oneOf[0].allOf[1].Payload.questions[].ValidationJSON.anyOf[1] = [] Yes
$.oneOf[0].allOf[1].Payload.questions[].FieldOwnerUserID Yes
$.oneOf[0].allOf[1].Payload.questions[].FieldOwnerUserID.anyOf[0]DatabaseInteger YesInteger value; legacy MySQL reads may serialize it as a numeric string.
$.oneOf[0].allOf[1].Payload.questions[].FieldOwnerUserID.anyOf[0].oneOf[0]integer Yes
$.oneOf[0].allOf[1].Payload.questions[].FieldOwnerUserID.anyOf[0].oneOf[1]string Yes
$.oneOf[0].allOf[1].Payload.questions[].FieldOwnerUserID.anyOf[1]null Yes
$.oneOf[0].allOf[1].Payload.questions[].ValueScope Yes
$.oneOf[0].allOf[1].Payload.questions[].ValueScope.anyOf[0]string ["customer","booking"] Yes
$.oneOf[0].allOf[1].Payload.questions[].ValueScope.anyOf[1]null Yes
$.oneOf[0].allOf[1].Payload.questions[].FieldKey Yes
$.oneOf[0].allOf[1].Payload.questions[].FieldKey.anyOf[0]string Yes
$.oneOf[0].allOf[1].Payload.questions[].FieldKey.anyOf[1]null Yes
$.oneOf[0].allOf[1].Payload.questions[].validationSurveyValidation Yes
$.oneOf[0].allOf[1].Payload.questions[].validation.anyOf[0]object Yes
$.oneOf[0].allOf[1].Payload.questions[].validation.anyOf[0].maxLengthinteger No
$.oneOf[0].allOf[1].Payload.questions[].validation.anyOf[0].integerboolean No
$.oneOf[0].allOf[1].Payload.questions[].validation.anyOf[0].minnumber No
$.oneOf[0].allOf[1].Payload.questions[].validation.anyOf[0].maxnumber No
$.oneOf[0].allOf[1].Payload.questions[].validation.anyOf[1] = [] Yes
$.oneOf[0].allOf[1].Payload.questions[].Optionsarray Yes
$.oneOf[0].allOf[1].Payload.questions[].Options[]object No
$.oneOf[0].allOf[1].Payload.questions[].Options[].IDDatabaseInteger YesInteger value; legacy MySQL reads may serialize it as a numeric string.
$.oneOf[0].allOf[1].Payload.questions[].Options[].ID.oneOf[0]integer Yes
$.oneOf[0].allOf[1].Payload.questions[].Options[].ID.oneOf[1]string Yes
$.oneOf[0].allOf[1].Payload.questions[].Options[].QuestionIDDatabaseInteger YesInteger value; legacy MySQL reads may serialize it as a numeric string.
$.oneOf[0].allOf[1].Payload.questions[].Options[].QuestionID.oneOf[0]integer Yes
$.oneOf[0].allOf[1].Payload.questions[].Options[].QuestionID.oneOf[1]string Yes
$.oneOf[0].allOf[1].Payload.questions[].Options[].FieldOptionID Yes
$.oneOf[0].allOf[1].Payload.questions[].Options[].FieldOptionID.anyOf[0]DatabaseInteger YesInteger value; legacy MySQL reads may serialize it as a numeric string.
$.oneOf[0].allOf[1].Payload.questions[].Options[].FieldOptionID.anyOf[0].oneOf[0]integer Yes
$.oneOf[0].allOf[1].Payload.questions[].Options[].FieldOptionID.anyOf[0].oneOf[1]string Yes
$.oneOf[0].allOf[1].Payload.questions[].Options[].FieldOptionID.anyOf[1]null Yes
$.oneOf[0].allOf[1].Payload.questions[].Options[].OptionKeystring Yes
$.oneOf[0].allOf[1].Payload.questions[].Options[].Labelstring Yes
$.oneOf[0].allOf[1].Payload.questions[].Options[].LabelKey Yes
$.oneOf[0].allOf[1].Payload.questions[].Options[].LabelKey.anyOf[0]string Yes
$.oneOf[0].allOf[1].Payload.questions[].Options[].LabelKey.anyOf[1]null Yes
$.oneOf[0].allOf[1].Payload.questions[].Options[].SortOrderDatabaseInteger YesInteger value; legacy MySQL reads may serialize it as a numeric string.
$.oneOf[0].allOf[1].Payload.questions[].Options[].SortOrder.oneOf[0]integer Yes
$.oneOf[0].allOf[1].Payload.questions[].Options[].SortOrder.oneOf[1]string Yes
$.oneOf[1]object Yes
$.oneOf[1].RequestUserAliasstring Yes
$.oneOf[1].RequestPathstring | null Yes
$.oneOf[1].RequestStatus = "Failed" Yes
$.oneOf[1].ResponseCodeinteger Yes
$.oneOf[1].ResponseMessageAPIResponseMessage Yes
$.oneOf[1].ResponseMessage.oneOf[0]string | number | boolean | null Yes
$.oneOf[1].ResponseMessage.oneOf[1]array Yes
$.oneOf[1].ResponseMessage.oneOf[1][]APIResponseMessage No
$.oneOf[1].ResponseMessage.oneOf[2]object Yes
$.oneOf[1].ResponseMessage.oneOf[2].*APIResponseMessage No
$.oneOf[1].RequestImpersonatedByUserAliasstring No
$.oneOf[1].ErrorReasonstring ["active_bid_selection","chat_permission_unavailable"] No
Response example
{
    "RequestStatus": "Succeeded",
    "ResponseCode": 100,
    "ResponseMessage": "Synthetic success example.",
    "RequestPath": "/v1/customer_survey/get_template",
    "RequestUserAlias": "example-user",
    "Payload": {
        "ID": 0,
        "CreatedDate": "synthetic-example",
        "OwnerUserID": 0,
        "StarterKey": "synthetic-example",
        "SourceTemplateID": 0,
        "CurrentVersionID": 0,
        "ArchivedDate": "synthetic-example",
        "Title": "synthetic-example",
        "TitleKey": "synthetic-example",
        "VersionNumber": 0,
        "Introduction": "synthetic-example",
        "questions": []
    }
}
Machine-readable endpoint documentation
POST

/v1/customer_survey/set_attach

#
Attach a customer/bid questionnaire to a completed sale between its original seller and customer. Existing sale links cannot be moved.

Parameters

NameTypeRequiredDefaultDescription
requestID int Yes — Questionnaire identifier.
transactionID int Yes — Completed sale identifier.
expectedRevision int Yes — Last observed request revision.
isWritingRequest bool No false Confirm write.
Request example (cURL)
curl --request POST \
  'https://ca.appointmenttrader.com/v1/customer_survey/set_attach' \
  --data-urlencode 'key={{API_KEY}}' \
  --data-urlencode 'requestID={{requestID}}' \
  --data-urlencode 'transactionID={{transactionID}}' \
  --data-urlencode 'expectedRevision={{expectedRevision}}' \
  --data-urlencode 'isWritingRequest={{isWritingRequest}}'

Returns

JSON
See the shared response schema and synthetic example.
Response fields
FieldTypeRequiredDescription
$customer_survey_set_attach_Response Yes
$.oneOf[0] Yes
$.oneOf[0].allOf[0]object Yes
$.oneOf[0].allOf[0].RequestUserAliasstring Yes
$.oneOf[0].allOf[0].RequestPathstring | null Yes
$.oneOf[0].allOf[0].RequestStatus = "Succeeded" Yes
$.oneOf[0].allOf[0].ResponseCodeinteger Yes
$.oneOf[0].allOf[0].ResponseMessageAPIResponseMessage Yes
$.oneOf[0].allOf[0].ResponseMessage.oneOf[0]string | number | boolean | null Yes
$.oneOf[0].allOf[0].ResponseMessage.oneOf[1]array Yes
$.oneOf[0].allOf[0].ResponseMessage.oneOf[1][]APIResponseMessage No
$.oneOf[0].allOf[0].ResponseMessage.oneOf[2]object Yes
$.oneOf[0].allOf[0].ResponseMessage.oneOf[2].*APIResponseMessage No
$.oneOf[0].allOf[0].RequestImpersonatedByUserAliasstring No
$.oneOf[0].allOf[1]object Yes
$.oneOf[0].allOf[1].Payloadobject Yes
$.oneOf[0].allOf[1].Payload.requestIDinteger Yes
$.oneOf[0].allOf[1].Payload.chatIDinteger Yes
$.oneOf[1]object Yes
$.oneOf[1].RequestUserAliasstring Yes
$.oneOf[1].RequestPathstring | null Yes
$.oneOf[1].RequestStatus = "Failed" Yes
$.oneOf[1].ResponseCodeinteger Yes
$.oneOf[1].ResponseMessageAPIResponseMessage Yes
$.oneOf[1].ResponseMessage.oneOf[0]string | number | boolean | null Yes
$.oneOf[1].ResponseMessage.oneOf[1]array Yes
$.oneOf[1].ResponseMessage.oneOf[1][]APIResponseMessage No
$.oneOf[1].ResponseMessage.oneOf[2]object Yes
$.oneOf[1].ResponseMessage.oneOf[2].*APIResponseMessage No
$.oneOf[1].RequestImpersonatedByUserAliasstring No
$.oneOf[1].ErrorReasonstring ["active_bid_selection","chat_permission_unavailable"] No
Response example
{
    "RequestStatus": "Succeeded",
    "ResponseCode": 100,
    "ResponseMessage": "Synthetic success example.",
    "RequestPath": "/v1/customer_survey/set_attach",
    "RequestUserAlias": "example-user",
    "Payload": {
        "requestID": 0,
        "chatID": 0
    }
}
Machine-readable endpoint documentation
POST

/v1/customer_survey/set_cancel

#
Cancel an unanswered questionnaire as its sending seller.

Parameters

NameTypeRequiredDefaultDescription
requestID int Yes — Questionnaire identifier.
expectedRevision int Yes — Last observed request revision.
isWritingRequest bool No false Confirm write.
Request example (cURL)
curl --request POST \
  'https://ca.appointmenttrader.com/v1/customer_survey/set_cancel' \
  --data-urlencode 'key={{API_KEY}}' \
  --data-urlencode 'requestID={{requestID}}' \
  --data-urlencode 'expectedRevision={{expectedRevision}}' \
  --data-urlencode 'isWritingRequest={{isWritingRequest}}'

Returns

JSON
See the shared response schema and synthetic example.
Response fields
FieldTypeRequiredDescription
$customer_survey_set_cancel_Response Yes
$.oneOf[0] Yes
$.oneOf[0].allOf[0]object Yes
$.oneOf[0].allOf[0].RequestUserAliasstring Yes
$.oneOf[0].allOf[0].RequestPathstring | null Yes
$.oneOf[0].allOf[0].RequestStatus = "Succeeded" Yes
$.oneOf[0].allOf[0].ResponseCodeinteger Yes
$.oneOf[0].allOf[0].ResponseMessageAPIResponseMessage Yes
$.oneOf[0].allOf[0].ResponseMessage.oneOf[0]string | number | boolean | null Yes
$.oneOf[0].allOf[0].ResponseMessage.oneOf[1]array Yes
$.oneOf[0].allOf[0].ResponseMessage.oneOf[1][]APIResponseMessage No
$.oneOf[0].allOf[0].ResponseMessage.oneOf[2]object Yes
$.oneOf[0].allOf[0].ResponseMessage.oneOf[2].*APIResponseMessage No
$.oneOf[0].allOf[0].RequestImpersonatedByUserAliasstring No
$.oneOf[0].allOf[1]object Yes
$.oneOf[0].allOf[1].Payloadobject Yes
$.oneOf[0].allOf[1].Payload.requestIDinteger Yes
$.oneOf[0].allOf[1].Payload.chatIDinteger Yes
$.oneOf[1]object Yes
$.oneOf[1].RequestUserAliasstring Yes
$.oneOf[1].RequestPathstring | null Yes
$.oneOf[1].RequestStatus = "Failed" Yes
$.oneOf[1].ResponseCodeinteger Yes
$.oneOf[1].ResponseMessageAPIResponseMessage Yes
$.oneOf[1].ResponseMessage.oneOf[0]string | number | boolean | null Yes
$.oneOf[1].ResponseMessage.oneOf[1]array Yes
$.oneOf[1].ResponseMessage.oneOf[1][]APIResponseMessage No
$.oneOf[1].ResponseMessage.oneOf[2]object Yes
$.oneOf[1].ResponseMessage.oneOf[2].*APIResponseMessage No
$.oneOf[1].RequestImpersonatedByUserAliasstring No
$.oneOf[1].ErrorReasonstring ["active_bid_selection","chat_permission_unavailable"] No
Response example
{
    "RequestStatus": "Succeeded",
    "ResponseCode": 100,
    "ResponseMessage": "Synthetic success example.",
    "RequestPath": "/v1/customer_survey/set_cancel",
    "RequestUserAlias": "example-user",
    "Payload": {
        "requestID": 0,
        "chatID": 0
    }
}
Machine-readable endpoint documentation
POST

/v1/customer_survey/set_draft

#
Save a customer-only draft. Drafts never update seller CRM or remembered values.

Parameters

NameTypeRequiredDefaultDescription
dataJSON string Yes — UTF-8 JSON object, preferably encoded as base64url: followed by unpadded URL-safe base64 to preserve authored text. Object: requestID, expectedRevision, operationKey, answers keyed by question ID, memoryRevisions keyed by field ID. Null means unanswered; false and zero are answers.
isWritingRequest bool No false Confirm write.
Request example (cURL)
curl --request POST \
  'https://ca.appointmenttrader.com/v1/customer_survey/set_draft' \
  --data-urlencode 'key={{API_KEY}}' \
  --data-urlencode 'dataJSON={{dataJSON}}' \
  --data-urlencode 'isWritingRequest={{isWritingRequest}}'

Returns

JSON
See the shared response schema and synthetic example.
Parameters: dataJSON
FieldTypeRequiredDescription
dataJSONstring (application/json) Yes
dataJSONobject (decoded JSON) Yes
dataJSON.requestIDinteger Yes
dataJSON.operationKeystring Yes
dataJSON.expectedRevisioninteger Yes
dataJSON.answersobject Yes
dataJSON.answers.*SurveyAnswerValue NoValue follows the question type: text or selected key, decimal numeric string, boolean, selected-key list, or null when unanswered.
dataJSON.answers.*.anyOf[0]null No
dataJSON.answers.*.anyOf[1]string No
dataJSON.answers.*.anyOf[2]number No
dataJSON.answers.*.anyOf[3]boolean No
dataJSON.answers.*.anyOf[4]array No
dataJSON.answers.*.anyOf[4][]string No
dataJSON.memoryRevisionsobject Yes
dataJSON.memoryRevisions.*integer No
Response fields
FieldTypeRequiredDescription
$customer_survey_set_draft_Response Yes
$.oneOf[0] Yes
$.oneOf[0].allOf[0]object Yes
$.oneOf[0].allOf[0].RequestUserAliasstring Yes
$.oneOf[0].allOf[0].RequestPathstring | null Yes
$.oneOf[0].allOf[0].RequestStatus = "Succeeded" Yes
$.oneOf[0].allOf[0].ResponseCodeinteger Yes
$.oneOf[0].allOf[0].ResponseMessageAPIResponseMessage Yes
$.oneOf[0].allOf[0].ResponseMessage.oneOf[0]string | number | boolean | null Yes
$.oneOf[0].allOf[0].ResponseMessage.oneOf[1]array Yes
$.oneOf[0].allOf[0].ResponseMessage.oneOf[1][]APIResponseMessage No
$.oneOf[0].allOf[0].ResponseMessage.oneOf[2]object Yes
$.oneOf[0].allOf[0].ResponseMessage.oneOf[2].*APIResponseMessage No
$.oneOf[0].allOf[0].RequestImpersonatedByUserAliasstring No
$.oneOf[0].allOf[1]object Yes
$.oneOf[0].allOf[1].Payloadobject Yes
$.oneOf[0].allOf[1].Payload.requestIDinteger Yes
$.oneOf[0].allOf[1].Payload.revisioninteger Yes
$.oneOf[0].allOf[1].Payload.chatIDinteger No
$.oneOf[1]object Yes
$.oneOf[1].RequestUserAliasstring Yes
$.oneOf[1].RequestPathstring | null Yes
$.oneOf[1].RequestStatus = "Failed" Yes
$.oneOf[1].ResponseCodeinteger Yes
$.oneOf[1].ResponseMessageAPIResponseMessage Yes
$.oneOf[1].ResponseMessage.oneOf[0]string | number | boolean | null Yes
$.oneOf[1].ResponseMessage.oneOf[1]array Yes
$.oneOf[1].ResponseMessage.oneOf[1][]APIResponseMessage No
$.oneOf[1].ResponseMessage.oneOf[2]object Yes
$.oneOf[1].ResponseMessage.oneOf[2].*APIResponseMessage No
$.oneOf[1].RequestImpersonatedByUserAliasstring No
$.oneOf[1].ErrorReasonstring ["active_bid_selection","chat_permission_unavailable"] No
Response example
{
    "RequestStatus": "Succeeded",
    "ResponseCode": 100,
    "ResponseMessage": "Synthetic success example.",
    "RequestPath": "/v1/customer_survey/set_draft",
    "RequestUserAlias": "example-user",
    "Payload": {
        "requestID": 0,
        "revision": 0
    }
}
Machine-readable endpoint documentation
POST

/v1/customer_survey/set_forget

#
Forget an own remembered value for future prefills. Existing seller-shared submissions remain unchanged.

Parameters

NameTypeRequiredDefaultDescription
fieldID int Yes — Remembered field identifier.
expectedRevision int Yes — Memory revision returned by get_customer_fields.
isWritingRequest bool No false Confirm write.
Request example (cURL)
curl --request POST \
  'https://ca.appointmenttrader.com/v1/customer_survey/set_forget' \
  --data-urlencode 'key={{API_KEY}}' \
  --data-urlencode 'fieldID={{fieldID}}' \
  --data-urlencode 'expectedRevision={{expectedRevision}}' \
  --data-urlencode 'isWritingRequest={{isWritingRequest}}'

Returns

JSON
See the shared response schema and synthetic example.
Response fields
FieldTypeRequiredDescription
$customer_survey_set_forget_Response Yes
$.oneOf[0] Yes
$.oneOf[0].allOf[0]object Yes
$.oneOf[0].allOf[0].RequestUserAliasstring Yes
$.oneOf[0].allOf[0].RequestPathstring | null Yes
$.oneOf[0].allOf[0].RequestStatus = "Succeeded" Yes
$.oneOf[0].allOf[0].ResponseCodeinteger Yes
$.oneOf[0].allOf[0].ResponseMessageAPIResponseMessage Yes
$.oneOf[0].allOf[0].ResponseMessage.oneOf[0]string | number | boolean | null Yes
$.oneOf[0].allOf[0].ResponseMessage.oneOf[1]array Yes
$.oneOf[0].allOf[0].ResponseMessage.oneOf[1][]APIResponseMessage No
$.oneOf[0].allOf[0].ResponseMessage.oneOf[2]object Yes
$.oneOf[0].allOf[0].ResponseMessage.oneOf[2].*APIResponseMessage No
$.oneOf[0].allOf[0].RequestImpersonatedByUserAliasstring No
$.oneOf[0].allOf[1]object Yes
$.oneOf[0].allOf[1].Payloadobject Yes
$.oneOf[0].allOf[1].Payload.fieldIDinteger Yes
$.oneOf[1]object Yes
$.oneOf[1].RequestUserAliasstring Yes
$.oneOf[1].RequestPathstring | null Yes
$.oneOf[1].RequestStatus = "Failed" Yes
$.oneOf[1].ResponseCodeinteger Yes
$.oneOf[1].ResponseMessageAPIResponseMessage Yes
$.oneOf[1].ResponseMessage.oneOf[0]string | number | boolean | null Yes
$.oneOf[1].ResponseMessage.oneOf[1]array Yes
$.oneOf[1].ResponseMessage.oneOf[1][]APIResponseMessage No
$.oneOf[1].ResponseMessage.oneOf[2]object Yes
$.oneOf[1].ResponseMessage.oneOf[2].*APIResponseMessage No
$.oneOf[1].RequestImpersonatedByUserAliasstring No
$.oneOf[1].ErrorReasonstring ["active_bid_selection","chat_permission_unavailable"] No
Response example
{
    "RequestStatus": "Succeeded",
    "ResponseCode": 100,
    "ResponseMessage": "Synthetic success example.",
    "RequestPath": "/v1/customer_survey/set_forget",
    "RequestUserAlias": "example-user",
    "Payload": {
        "fieldID": 0
    }
}
Machine-readable endpoint documentation
POST

/v1/customer_survey/set_send

#
Send one questionnaire to the server-resolved customer in an accepted chat. Reuse operationKey for retries only. Active bid selection pauses incoming questionnaires unless the sender has GlobalCommunityAdministration; ErrorReason=active_bid_selection.

Parameters

NameTypeRequiredDefaultDescription
dataJSON string Yes — UTF-8 JSON object, preferably encoded as base64url: followed by unpadded URL-safe base64 to preserve authored text. Object: chatID, templateID, versionID, transactionID (optional), operationKey (16-80 ASCII letters/digits/hyphens/underscores).
isWritingRequest bool No false Confirm write.
Request example (cURL)
curl --request POST \
  'https://ca.appointmenttrader.com/v1/customer_survey/set_send' \
  --data-urlencode 'key={{API_KEY}}' \
  --data-urlencode 'dataJSON={{dataJSON}}' \
  --data-urlencode 'isWritingRequest={{isWritingRequest}}'

Returns

JSON
See the shared response schema and synthetic example.
Parameters: dataJSON
FieldTypeRequiredDescription
dataJSONstring (application/json) Yes
dataJSONobject (decoded JSON) Yes
dataJSON.chatIDinteger Yes
dataJSON.templateIDinteger Yes
dataJSON.versionIDinteger Yes
dataJSON.transactionIDinteger No
dataJSON.operationKeystring Yes
Response fields
FieldTypeRequiredDescription
$customer_survey_set_send_Response Yes
$.oneOf[0] Yes
$.oneOf[0].allOf[0]object Yes
$.oneOf[0].allOf[0].RequestUserAliasstring Yes
$.oneOf[0].allOf[0].RequestPathstring | null Yes
$.oneOf[0].allOf[0].RequestStatus = "Succeeded" Yes
$.oneOf[0].allOf[0].ResponseCodeinteger Yes
$.oneOf[0].allOf[0].ResponseMessageAPIResponseMessage Yes
$.oneOf[0].allOf[0].ResponseMessage.oneOf[0]string | number | boolean | null Yes
$.oneOf[0].allOf[0].ResponseMessage.oneOf[1]array Yes
$.oneOf[0].allOf[0].ResponseMessage.oneOf[1][]APIResponseMessage No
$.oneOf[0].allOf[0].ResponseMessage.oneOf[2]object Yes
$.oneOf[0].allOf[0].ResponseMessage.oneOf[2].*APIResponseMessage No
$.oneOf[0].allOf[0].RequestImpersonatedByUserAliasstring No
$.oneOf[0].allOf[1]object Yes
$.oneOf[0].allOf[1].Payloadobject Yes
$.oneOf[0].allOf[1].Payload.requestIDinteger Yes
$.oneOf[0].allOf[1].Payload.chatIDinteger No
$.oneOf[1]object Yes
$.oneOf[1].RequestUserAliasstring Yes
$.oneOf[1].RequestPathstring | null Yes
$.oneOf[1].RequestStatus = "Failed" Yes
$.oneOf[1].ResponseCodeinteger Yes
$.oneOf[1].ResponseMessageAPIResponseMessage Yes
$.oneOf[1].ResponseMessage.oneOf[0]string | number | boolean | null Yes
$.oneOf[1].ResponseMessage.oneOf[1]array Yes
$.oneOf[1].ResponseMessage.oneOf[1][]APIResponseMessage No
$.oneOf[1].ResponseMessage.oneOf[2]object Yes
$.oneOf[1].ResponseMessage.oneOf[2].*APIResponseMessage No
$.oneOf[1].RequestImpersonatedByUserAliasstring No
$.oneOf[1].ErrorReasonstring ["active_bid_selection","chat_permission_unavailable"] No
Response example
{
    "RequestStatus": "Succeeded",
    "ResponseCode": 100,
    "ResponseMessage": "Synthetic success example.",
    "RequestPath": "/v1/customer_survey/set_send",
    "RequestUserAlias": "example-user",
    "Payload": {
        "requestID": 0
    }
}
Machine-readable endpoint documentation
POST

/v1/customer_survey/set_submit

#
Confirm and share a new immutable response revision with this seller. Also updates customer memory and this seller's CRM pointers atomically.

Parameters

NameTypeRequiredDefaultDescription
dataJSON string Yes — UTF-8 JSON object, preferably encoded with the base64url: prefix. Same object as /v1/customer_survey/set_draft; required answers and memory revisions are enforced.
isWritingRequest bool No false Confirm customer sharing.
Request example (cURL)
curl --request POST \
  'https://ca.appointmenttrader.com/v1/customer_survey/set_submit' \
  --data-urlencode 'key={{API_KEY}}' \
  --data-urlencode 'dataJSON={{dataJSON}}' \
  --data-urlencode 'isWritingRequest={{isWritingRequest}}'

Returns

JSON
See the shared response schema and synthetic example.
Parameters: dataJSON
FieldTypeRequiredDescription
dataJSONstring (application/json) Yes
dataJSONobject (decoded JSON) Yes
dataJSON.requestIDinteger Yes
dataJSON.operationKeystring Yes
dataJSON.expectedRevisioninteger Yes
dataJSON.answersobject Yes
dataJSON.answers.*SurveyAnswerValue NoValue follows the question type: text or selected key, decimal numeric string, boolean, selected-key list, or null when unanswered.
dataJSON.answers.*.anyOf[0]null No
dataJSON.answers.*.anyOf[1]string No
dataJSON.answers.*.anyOf[2]number No
dataJSON.answers.*.anyOf[3]boolean No
dataJSON.answers.*.anyOf[4]array No
dataJSON.answers.*.anyOf[4][]string No
dataJSON.memoryRevisionsobject Yes
dataJSON.memoryRevisions.*integer No
Response fields
FieldTypeRequiredDescription
$customer_survey_set_submit_Response Yes
$.oneOf[0] Yes
$.oneOf[0].allOf[0]object Yes
$.oneOf[0].allOf[0].RequestUserAliasstring Yes
$.oneOf[0].allOf[0].RequestPathstring | null Yes
$.oneOf[0].allOf[0].RequestStatus = "Succeeded" Yes
$.oneOf[0].allOf[0].ResponseCodeinteger Yes
$.oneOf[0].allOf[0].ResponseMessageAPIResponseMessage Yes
$.oneOf[0].allOf[0].ResponseMessage.oneOf[0]string | number | boolean | null Yes
$.oneOf[0].allOf[0].ResponseMessage.oneOf[1]array Yes
$.oneOf[0].allOf[0].ResponseMessage.oneOf[1][]APIResponseMessage No
$.oneOf[0].allOf[0].ResponseMessage.oneOf[2]object Yes
$.oneOf[0].allOf[0].ResponseMessage.oneOf[2].*APIResponseMessage No
$.oneOf[0].allOf[0].RequestImpersonatedByUserAliasstring No
$.oneOf[0].allOf[1]object Yes
$.oneOf[0].allOf[1].Payloadobject Yes
$.oneOf[0].allOf[1].Payload.requestIDinteger Yes
$.oneOf[0].allOf[1].Payload.revisioninteger Yes
$.oneOf[0].allOf[1].Payload.chatIDinteger No
$.oneOf[1]object Yes
$.oneOf[1].RequestUserAliasstring Yes
$.oneOf[1].RequestPathstring | null Yes
$.oneOf[1].RequestStatus = "Failed" Yes
$.oneOf[1].ResponseCodeinteger Yes
$.oneOf[1].ResponseMessageAPIResponseMessage Yes
$.oneOf[1].ResponseMessage.oneOf[0]string | number | boolean | null Yes
$.oneOf[1].ResponseMessage.oneOf[1]array Yes
$.oneOf[1].ResponseMessage.oneOf[1][]APIResponseMessage No
$.oneOf[1].ResponseMessage.oneOf[2]object Yes
$.oneOf[1].ResponseMessage.oneOf[2].*APIResponseMessage No
$.oneOf[1].RequestImpersonatedByUserAliasstring No
$.oneOf[1].ErrorReasonstring ["active_bid_selection","chat_permission_unavailable"] No
Response example
{
    "RequestStatus": "Succeeded",
    "ResponseCode": 100,
    "ResponseMessage": "Synthetic success example.",
    "RequestPath": "/v1/customer_survey/set_submit",
    "RequestUserAlias": "example-user",
    "Payload": {
        "requestID": 0,
        "revision": 0
    }
}
Machine-readable endpoint documentation
POST

/v1/customer_survey/set_template

#
Create or append an immutable template version. A system-field ID owns type, label and options; clients cannot redefine them. Answer types: text (single-line input), longtext (multiline textarea), number, boolean, single_select, multi_select. Both text types preserve nonblank string values up to 4000 characters by default; empty or whitespace-only text is unanswered.

Parameters

NameTypeRequiredDefaultDescription
dataJSON string Yes — UTF-8 JSON object, preferably encoded as base64url: followed by unpadded URL-safe base64 to preserve authored text. Object: templateID (zero creates), expectedVersionID, sourceTemplateID, title, introduction, questions [{fieldID, label, help, type, required, remember, integer, min, max, options:[{key,label}]}].
isWritingRequest bool No false Confirm write.
Request example (cURL)
curl --request POST \
  'https://ca.appointmenttrader.com/v1/customer_survey/set_template' \
  --data-urlencode 'key={{API_KEY}}' \
  --data-urlencode 'dataJSON={{dataJSON}}' \
  --data-urlencode 'isWritingRequest={{isWritingRequest}}'

Returns

JSON
See the shared response schema and synthetic example.
Parameters: dataJSON
FieldTypeRequiredDescription
dataJSONstring (application/json) Yes
dataJSONobject (decoded JSON) Yes
dataJSON.titlestring Yes
dataJSON.introductionstring No
dataJSON.templateIDinteger No
dataJSON.sourceTemplateIDinteger No
dataJSON.expectedVersionIDinteger No
dataJSON.questionsarray Yes
dataJSON.questions[] No
dataJSON.questions[].anyOf[0]object No
dataJSON.questions[].anyOf[0].fieldIDinteger Yes
dataJSON.questions[].anyOf[0].labelstring No
dataJSON.questions[].anyOf[0].typestring ["text","longtext","number","boolean","single_select","multi_select"] No
dataJSON.questions[].anyOf[0].helpstring No
dataJSON.questions[].anyOf[0].requiredboolean No
dataJSON.questions[].anyOf[0].rememberboolean No
dataJSON.questions[].anyOf[0].integerboolean No
dataJSON.questions[].anyOf[0].minDatabaseNumber NoNumeric value; MySQL reads can serialize numbers as numeric strings.
dataJSON.questions[].anyOf[0].min.oneOf[0]number No
dataJSON.questions[].anyOf[0].min.oneOf[1]string No
dataJSON.questions[].anyOf[0].maxDatabaseNumber NoNumeric value; MySQL reads can serialize numbers as numeric strings.
dataJSON.questions[].anyOf[0].max.oneOf[0]number No
dataJSON.questions[].anyOf[0].max.oneOf[1]string No
dataJSON.questions[].anyOf[0].optionsarray No
dataJSON.questions[].anyOf[0].options[]object No
dataJSON.questions[].anyOf[0].options[].keystring No
dataJSON.questions[].anyOf[0].options[].labelstring Yes
dataJSON.questions[].anyOf[1]object No
dataJSON.questions[].anyOf[1].fieldIDinteger No
dataJSON.questions[].anyOf[1].labelstring Yes
dataJSON.questions[].anyOf[1].typestring ["text","longtext","number","boolean","single_select","multi_select"] Yes
dataJSON.questions[].anyOf[1].helpstring No
dataJSON.questions[].anyOf[1].requiredboolean No
dataJSON.questions[].anyOf[1].rememberboolean No
dataJSON.questions[].anyOf[1].integerboolean No
dataJSON.questions[].anyOf[1].minDatabaseNumber NoNumeric value; MySQL reads can serialize numbers as numeric strings.
dataJSON.questions[].anyOf[1].min.oneOf[0]number No
dataJSON.questions[].anyOf[1].min.oneOf[1]string No
dataJSON.questions[].anyOf[1].maxDatabaseNumber NoNumeric value; MySQL reads can serialize numbers as numeric strings.
dataJSON.questions[].anyOf[1].max.oneOf[0]number No
dataJSON.questions[].anyOf[1].max.oneOf[1]string No
dataJSON.questions[].anyOf[1].optionsarray No
dataJSON.questions[].anyOf[1].options[]object No
dataJSON.questions[].anyOf[1].options[].keystring No
dataJSON.questions[].anyOf[1].options[].labelstring Yes
Response fields
FieldTypeRequiredDescription
$customer_survey_set_template_Response Yes
$.oneOf[0] Yes
$.oneOf[0].allOf[0]object Yes
$.oneOf[0].allOf[0].RequestUserAliasstring Yes
$.oneOf[0].allOf[0].RequestPathstring | null Yes
$.oneOf[0].allOf[0].RequestStatus = "Succeeded" Yes
$.oneOf[0].allOf[0].ResponseCodeinteger Yes
$.oneOf[0].allOf[0].ResponseMessageAPIResponseMessage Yes
$.oneOf[0].allOf[0].ResponseMessage.oneOf[0]string | number | boolean | null Yes
$.oneOf[0].allOf[0].ResponseMessage.oneOf[1]array Yes
$.oneOf[0].allOf[0].ResponseMessage.oneOf[1][]APIResponseMessage No
$.oneOf[0].allOf[0].ResponseMessage.oneOf[2]object Yes
$.oneOf[0].allOf[0].ResponseMessage.oneOf[2].*APIResponseMessage No
$.oneOf[0].allOf[0].RequestImpersonatedByUserAliasstring No
$.oneOf[0].allOf[1]object Yes
$.oneOf[0].allOf[1].Payloadobject Yes
$.oneOf[0].allOf[1].Payload.templateIDinteger Yes
$.oneOf[0].allOf[1].Payload.versionIDinteger Yes
$.oneOf[1]object Yes
$.oneOf[1].RequestUserAliasstring Yes
$.oneOf[1].RequestPathstring | null Yes
$.oneOf[1].RequestStatus = "Failed" Yes
$.oneOf[1].ResponseCodeinteger Yes
$.oneOf[1].ResponseMessageAPIResponseMessage Yes
$.oneOf[1].ResponseMessage.oneOf[0]string | number | boolean | null Yes
$.oneOf[1].ResponseMessage.oneOf[1]array Yes
$.oneOf[1].ResponseMessage.oneOf[1][]APIResponseMessage No
$.oneOf[1].ResponseMessage.oneOf[2]object Yes
$.oneOf[1].ResponseMessage.oneOf[2].*APIResponseMessage No
$.oneOf[1].RequestImpersonatedByUserAliasstring No
$.oneOf[1].ErrorReasonstring ["active_bid_selection","chat_permission_unavailable"] No
Response example
{
    "RequestStatus": "Succeeded",
    "ResponseCode": 100,
    "ResponseMessage": "Synthetic success example.",
    "RequestPath": "/v1/customer_survey/set_template",
    "RequestUserAlias": "example-user",
    "Payload": {
        "templateID": 0,
        "versionID": 0
    }
}
Machine-readable endpoint documentation
POST

/v1/customer_survey/set_template_archive

#
Archive an owned template without changing sent questionnaires.

Parameters

NameTypeRequiredDefaultDescription
templateID int Yes — Template identifier.
expectedVersionID int Yes — Last observed current version ID.
isWritingRequest bool No false Confirm write.
Request example (cURL)
curl --request POST \
  'https://ca.appointmenttrader.com/v1/customer_survey/set_template_archive' \
  --data-urlencode 'key={{API_KEY}}' \
  --data-urlencode 'templateID={{templateID}}' \
  --data-urlencode 'expectedVersionID={{expectedVersionID}}' \
  --data-urlencode 'isWritingRequest={{isWritingRequest}}'

Returns

JSON
See the shared response schema and synthetic example.
Response fields
FieldTypeRequiredDescription
$customer_survey_set_template_archive_Response Yes
$.oneOf[0] Yes
$.oneOf[0].allOf[0]object Yes
$.oneOf[0].allOf[0].RequestUserAliasstring Yes
$.oneOf[0].allOf[0].RequestPathstring | null Yes
$.oneOf[0].allOf[0].RequestStatus = "Succeeded" Yes
$.oneOf[0].allOf[0].ResponseCodeinteger Yes
$.oneOf[0].allOf[0].ResponseMessageAPIResponseMessage Yes
$.oneOf[0].allOf[0].ResponseMessage.oneOf[0]string | number | boolean | null Yes
$.oneOf[0].allOf[0].ResponseMessage.oneOf[1]array Yes
$.oneOf[0].allOf[0].ResponseMessage.oneOf[1][]APIResponseMessage No
$.oneOf[0].allOf[0].ResponseMessage.oneOf[2]object Yes
$.oneOf[0].allOf[0].ResponseMessage.oneOf[2].*APIResponseMessage No
$.oneOf[0].allOf[0].RequestImpersonatedByUserAliasstring No
$.oneOf[0].allOf[1]object Yes
$.oneOf[0].allOf[1].Payloadobject Yes
$.oneOf[0].allOf[1].Payload.templateIDinteger Yes
$.oneOf[1]object Yes
$.oneOf[1].RequestUserAliasstring Yes
$.oneOf[1].RequestPathstring | null Yes
$.oneOf[1].RequestStatus = "Failed" Yes
$.oneOf[1].ResponseCodeinteger Yes
$.oneOf[1].ResponseMessageAPIResponseMessage Yes
$.oneOf[1].ResponseMessage.oneOf[0]string | number | boolean | null Yes
$.oneOf[1].ResponseMessage.oneOf[1]array Yes
$.oneOf[1].ResponseMessage.oneOf[1][]APIResponseMessage No
$.oneOf[1].ResponseMessage.oneOf[2]object Yes
$.oneOf[1].ResponseMessage.oneOf[2].*APIResponseMessage No
$.oneOf[1].RequestImpersonatedByUserAliasstring No
$.oneOf[1].ErrorReasonstring ["active_bid_selection","chat_permission_unavailable"] No
Response example
{
    "RequestStatus": "Succeeded",
    "ResponseCode": 100,
    "ResponseMessage": "Synthetic success example.",
    "RequestPath": "/v1/customer_survey/set_template_archive",
    "RequestUserAlias": "example-user",
    "Payload": {
        "templateID": 0
    }
}
Machine-readable endpoint documentation