Online Now  

/v1/media/

The signed-in account's private lifetime media library and reusable picker.
GET

/v1/media/get_ftp_credentials

#
Read the acting account's generated FTP login. Passwords are recoverable only by the app. Send POST with X-AT-Media-Request: 1. Never put credentials in URLs or client storage.
Request example (cURL)
curl --get \
  'https://ca.appointmenttrader.com/v1/media/get_ftp_credentials' \
  --data-urlencode 'key={{API_KEY}}'

Returns

JSON
See the shared response schema and synthetic example.
Response fields
FieldTypeRequiredDescription
$media_get_ftp_credentials_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.credentials Yes
$.oneOf[0].allOf[1].Payload.credentials.anyOf[0]object Yes
$.oneOf[0].allOf[1].Payload.credentials.anyOf[0].credentialIDinteger Yes
$.oneOf[0].allOf[1].Payload.credentials.anyOf[0].label Yes
$.oneOf[0].allOf[1].Payload.credentials.anyOf[0].label.anyOf[0]object Yes
$.oneOf[0].allOf[1].Payload.credentials.anyOf[0].label.anyOf[0].idinteger Yes
$.oneOf[0].allOf[1].Payload.credentials.anyOf[0].label.anyOf[0].namestring Yes
$.oneOf[0].allOf[1].Payload.credentials.anyOf[0].label.anyOf[0].emojistring Yes
$.oneOf[0].allOf[1].Payload.credentials.anyOf[0].label.anyOf[0].archivedboolean Yes
$.oneOf[0].allOf[1].Payload.credentials.anyOf[0].label.anyOf[1]null Yes
$.oneOf[0].allOf[1].Payload.credentials.anyOf[0].usernamestring YesOwner FTP username; examples are deliberately fictitious.
$.oneOf[0].allOf[1].Payload.credentials.anyOf[0].password YesOwner FTP password, or null when reset is required. Never use response data as documentation examples.
$.oneOf[0].allOf[1].Payload.credentials.anyOf[0].password.anyOf[0]string Yes
$.oneOf[0].allOf[1].Payload.credentials.anyOf[0].password.anyOf[1]null Yes
$.oneOf[0].allOf[1].Payload.credentials.anyOf[0].enabledboolean Yes
$.oneOf[0].allOf[1].Payload.credentials.anyOf[0].notifyOnImportboolean Yes
$.oneOf[0].allOf[1].Payload.credentials.anyOf[0].requiresResetboolean Yes
$.oneOf[0].allOf[1].Payload.credentials.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
Response example
{
    "RequestStatus": "Succeeded",
    "ResponseCode": 100,
    "ResponseMessage": "Synthetic success example.",
    "RequestPath": "/v1/media/get_ftp_credentials",
    "RequestUserAlias": "example-user",
    "Payload": {
        "credentials": {
            "credentialID": 1,
            "label": null,
            "username": "SYNTHETIC_USERNAME",
            "password": "SYNTHETIC_PASSWORD",
            "enabled": false,
            "notifyOnImport": false,
            "requiresReset": false
        }
    }
}
Machine-readable endpoint documentation
GET

/v1/media/get_ftp_logs

#
Read upload logs through the acting account's FTPS connection. Latest 30 UTC dates, up to 64 KiB of the selected log's tail. Send POST with X-AT-Media-Request: 1. No credentials or owner IDs are accepted.

Parameters

NameTypeRequiredDefaultDescription
logDate string No "" UTC log date, or empty for the latest available log.
Request example (cURL)
curl --get \
  'https://ca.appointmenttrader.com/v1/media/get_ftp_logs' \
  --data-urlencode 'key={{API_KEY}}' \
  --data-urlencode 'logDate={{logDate}}'

Returns

JSON
See the shared response schema and synthetic example.
Response fields
FieldTypeRequiredDescription
$media_get_ftp_logs_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.datesarray Yes
$.oneOf[0].allOf[1].Payload.dates[]string No
$.oneOf[0].allOf[1].Payload.date Yes
$.oneOf[0].allOf[1].Payload.date.anyOf[0]string Yes
$.oneOf[0].allOf[1].Payload.date.anyOf[1]null Yes
$.oneOf[0].allOf[1].Payload.textstring Yes
$.oneOf[0].allOf[1].Payload.truncatedboolean 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
Response example
{
    "RequestStatus": "Succeeded",
    "ResponseCode": 100,
    "ResponseMessage": "Synthetic success example.",
    "RequestPath": "/v1/media/get_ftp_logs",
    "RequestUserAlias": "example-user",
    "Payload": {
        "dates": [
            "2030-01-01"
        ],
        "date": "2030-01-01",
        "text": "Synthetic upload log.",
        "truncated": false
    }
}
Machine-readable endpoint documentation
GET

/v1/media/get_labels

#
Private label catalog, including archived labels. Never accepts another account ID.

Parameters

NameTypeRequiredDefaultDescription
afterID int No 0 Previous nextID, or zero for the first page.
search string No "" Optional name search; restart afterID when changing search.
labelID int No 0 Resolve one owned label for an existing selection; zero browses the catalog.
Request example (cURL)
curl --get \
  'https://ca.appointmenttrader.com/v1/media/get_labels' \
  --data-urlencode 'key={{API_KEY}}' \
  --data-urlencode 'afterID={{afterID}}' \
  --data-urlencode 'search={{search}}' \
  --data-urlencode 'labelID={{labelID}}'

Returns

JSON
See the shared response schema and synthetic example.
Response fields
FieldTypeRequiredDescription
$media_get_labels_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.labelsarray Yes
$.oneOf[0].allOf[1].Payload.labels[]object No
$.oneOf[0].allOf[1].Payload.labels[].idinteger Yes
$.oneOf[0].allOf[1].Payload.labels[].namestring Yes
$.oneOf[0].allOf[1].Payload.labels[].emojistring Yes
$.oneOf[0].allOf[1].Payload.labels[].archivedboolean Yes
$.oneOf[0].allOf[1].Payload.nextID Yes
$.oneOf[0].allOf[1].Payload.nextID.anyOf[0]integer Yes
$.oneOf[0].allOf[1].Payload.nextID.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
Response example
{
    "RequestStatus": "Succeeded",
    "ResponseCode": 100,
    "ResponseMessage": "Synthetic success example.",
    "RequestPath": "/v1/media/get_labels",
    "RequestUserAlias": "example-user",
    "Payload": {
        "labels": [],
        "nextID": 0
    }
}
Machine-readable endpoint documentation
GET

/v1/media/get_my_media

#
Browse retained media owned by the acting account. Never accepts another account ID.

Parameters

NameTypeRequiredDefaultDescription
search string No "" Filename, title or description search.
kind string No "" Empty, image, video, audio or document.
usage string No "" Empty, unattached, post, profile, message, request or preview.
month string No "" Creation month YYYY-MM, or empty for all dates.
order string No "newest" newest or oldest.
cursor string No "" Opaque continuation returned by the previous page.
pageSize int No 60 Items per page, capped at 100.
labelID int No 0 Owned label ID, including archives; zero means all.
unlabeled bool No false Only media without labels; mutually exclusive with labelID.
Request example (cURL)
curl --get \
  'https://ca.appointmenttrader.com/v1/media/get_my_media' \
  --data-urlencode 'key={{API_KEY}}' \
  --data-urlencode 'search={{search}}' \
  --data-urlencode 'kind={{kind}}' \
  --data-urlencode 'usage={{usage}}' \
  --data-urlencode 'month={{month}}' \
  --data-urlencode 'order={{order}}' \
  --data-urlencode 'cursor={{cursor}}' \
  --data-urlencode 'pageSize={{pageSize}}' \
  --data-urlencode 'labelID={{labelID}}' \
  --data-urlencode 'unlabeled={{unlabeled}}'

Returns

JSON
See the shared response schema and synthetic example.
Response fields
FieldTypeRequiredDescription
$media_get_my_media_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[].thumbUrlstring Yes
$.oneOf[0].allOf[1].Payload.items[].mediaUrlstring Yes
$.oneOf[0].allOf[1].Payload.items[].mediaTypestring Yes
$.oneOf[0].allOf[1].Payload.items[].widthinteger Yes
$.oneOf[0].allOf[1].Payload.items[].heightinteger Yes
$.oneOf[0].allOf[1].Payload.items[].titlestring Yes
$.oneOf[0].allOf[1].Payload.items[].isImageboolean Yes
$.oneOf[0].allOf[1].Payload.items[].isEmbeddedboolean Yes
$.oneOf[0].allOf[1].Payload.items[].kindstring ["image","video","audio","document"] Yes
$.oneOf[0].allOf[1].Payload.items[].createdDatestring Yes
$.oneOf[0].allOf[1].Payload.items[].filenamestring Yes
$.oneOf[0].allOf[1].Payload.items[].sizeinteger Yes
$.oneOf[0].allOf[1].Payload.items[].duration Yes
$.oneOf[0].allOf[1].Payload.items[].duration.anyOf[0]number Yes
$.oneOf[0].allOf[1].Payload.items[].duration.anyOf[1]null Yes
$.oneOf[0].allOf[1].Payload.items[].downloadUrlstring Yes
$.oneOf[0].allOf[1].Payload.items[].labelsarray Yes
$.oneOf[0].allOf[1].Payload.items[].labels[]object No
$.oneOf[0].allOf[1].Payload.items[].labels[].idinteger Yes
$.oneOf[0].allOf[1].Payload.items[].labels[].namestring Yes
$.oneOf[0].allOf[1].Payload.items[].labels[].emojistring Yes
$.oneOf[0].allOf[1].Payload.items[].labels[].archivedboolean Yes
$.oneOf[0].allOf[1].Payload.items[].hasUsageboolean Yes
$.oneOf[0].allOf[1].Payload.nextCursor Yes
$.oneOf[0].allOf[1].Payload.nextCursor.anyOf[0]string Yes
$.oneOf[0].allOf[1].Payload.nextCursor.anyOf[1]null Yes
$.oneOf[0].allOf[1].Payload.lastMediaIDinteger Yes
$.oneOf[0].allOf[1].Payload.pageSignature Yes
$.oneOf[0].allOf[1].Payload.pageSignature.anyOf[0]string Yes
$.oneOf[0].allOf[1].Payload.pageSignature.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
Response example
{
    "RequestStatus": "Succeeded",
    "ResponseCode": 100,
    "ResponseMessage": "Synthetic success example.",
    "RequestPath": "/v1/media/get_my_media",
    "RequestUserAlias": "example-user",
    "Payload": {
        "items": [],
        "nextCursor": "synthetic-example",
        "lastMediaID": 0,
        "pageSignature": "synthetic-example"
    }
}
Machine-readable endpoint documentation
GET

/v1/media/get_my_media_item

#
Preview one owned file with current permission-checked usage references. Chat usages include chatID only after current chat and message access checks; their URL opens the conversation. File ownership alone never grants access.

Parameters

NameTypeRequiredDefaultDescription
mediaID int Yes — Owned ATMedia ID.
afterUsageID int No 0 Continuation returned as nextUsageID.
afterLabelPostID int No 0 Dynamic usage continuation, -1 when exhausted.
Request example (cURL)
curl --get \
  'https://ca.appointmenttrader.com/v1/media/get_my_media_item' \
  --data-urlencode 'key={{API_KEY}}' \
  --data-urlencode 'mediaID={{mediaID}}' \
  --data-urlencode 'afterUsageID={{afterUsageID}}' \
  --data-urlencode 'afterLabelPostID={{afterLabelPostID}}'

Returns

JSON
See the shared response schema and synthetic example.
Response fields
FieldTypeRequiredDescription
$media_get_my_media_item_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.itemobject Yes
$.oneOf[0].allOf[1].Payload.item.idinteger Yes
$.oneOf[0].allOf[1].Payload.item.thumbUrlstring Yes
$.oneOf[0].allOf[1].Payload.item.mediaUrlstring Yes
$.oneOf[0].allOf[1].Payload.item.mediaTypestring Yes
$.oneOf[0].allOf[1].Payload.item.widthinteger Yes
$.oneOf[0].allOf[1].Payload.item.heightinteger Yes
$.oneOf[0].allOf[1].Payload.item.titlestring Yes
$.oneOf[0].allOf[1].Payload.item.isImageboolean Yes
$.oneOf[0].allOf[1].Payload.item.isEmbeddedboolean Yes
$.oneOf[0].allOf[1].Payload.item.kindstring ["image","video","audio","document"] Yes
$.oneOf[0].allOf[1].Payload.item.createdDatestring Yes
$.oneOf[0].allOf[1].Payload.item.filenamestring Yes
$.oneOf[0].allOf[1].Payload.item.sizeinteger Yes
$.oneOf[0].allOf[1].Payload.item.duration Yes
$.oneOf[0].allOf[1].Payload.item.duration.anyOf[0]number Yes
$.oneOf[0].allOf[1].Payload.item.duration.anyOf[1]null Yes
$.oneOf[0].allOf[1].Payload.item.downloadUrlstring Yes
$.oneOf[0].allOf[1].Payload.item.labelsarray Yes
$.oneOf[0].allOf[1].Payload.item.labels[]object No
$.oneOf[0].allOf[1].Payload.item.labels[].idinteger Yes
$.oneOf[0].allOf[1].Payload.item.labels[].namestring Yes
$.oneOf[0].allOf[1].Payload.item.labels[].emojistring Yes
$.oneOf[0].allOf[1].Payload.item.labels[].archivedboolean Yes
$.oneOf[0].allOf[1].Payload.usagesarray Yes
$.oneOf[0].allOf[1].Payload.usages[]object No
$.oneOf[0].allOf[1].Payload.usages[].typestring Yes
$.oneOf[0].allOf[1].Payload.usages[].rolestring Yes
$.oneOf[0].allOf[1].Payload.usages[].titlestring Yes
$.oneOf[0].allOf[1].Payload.usages[].urlstring Yes
$.oneOf[0].allOf[1].Payload.usages[].chatIDinteger No
$.oneOf[0].allOf[1].Payload.usages[].notificationBodyIDinteger No
$.oneOf[0].allOf[1].Payload.usages[].versionIdinteger No
$.oneOf[0].allOf[1].Payload.usages[].postIdinteger No
$.oneOf[0].allOf[1].Payload.hasUnavailableUsageboolean Yes
$.oneOf[0].allOf[1].Payload.nextUsageID Yes
$.oneOf[0].allOf[1].Payload.nextUsageID.anyOf[0]integer Yes
$.oneOf[0].allOf[1].Payload.nextUsageID.anyOf[1]null Yes
$.oneOf[0].allOf[1].Payload.nextLabelPostID Yes
$.oneOf[0].allOf[1].Payload.nextLabelPostID.anyOf[0]integer Yes
$.oneOf[0].allOf[1].Payload.nextLabelPostID.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
Response example
{
    "RequestStatus": "Succeeded",
    "ResponseCode": 100,
    "ResponseMessage": "Synthetic success example.",
    "RequestPath": "/v1/media/get_my_media_item",
    "RequestUserAlias": "example-user",
    "Payload": {
        "item": {
            "id": 0,
            "thumbUrl": "synthetic-example",
            "mediaUrl": "synthetic-example",
            "mediaType": "synthetic-example",
            "width": 0,
            "height": 0,
            "title": "synthetic-example",
            "isImage": false,
            "isEmbedded": false,
            "kind": "image",
            "createdDate": "synthetic-example",
            "filename": "synthetic-example",
            "size": 0,
            "duration": 0,
            "downloadUrl": "synthetic-example",
            "labels": []
        },
        "usages": [],
        "hasUnavailableUsage": false,
        "nextUsageID": 0,
        "nextLabelPostID": 0
    }
}
Machine-readable endpoint documentation
GET

/v1/media/get_my_media_timeline

#
Return creation months for the account's current media filters.

Parameters

NameTypeRequiredDefaultDescription
search string No "" Filename, title or description search.
kind string No "" Empty, image, video, audio or document.
usage string No "" Empty, unattached, post, profile, message, request or preview.
labelID int No 0 Owned label ID, including archives; zero means all.
unlabeled bool No false Only media without labels; mutually exclusive with labelID.
Request example (cURL)
curl --get \
  'https://ca.appointmenttrader.com/v1/media/get_my_media_timeline' \
  --data-urlencode 'key={{API_KEY}}' \
  --data-urlencode 'search={{search}}' \
  --data-urlencode 'kind={{kind}}' \
  --data-urlencode 'usage={{usage}}' \
  --data-urlencode 'labelID={{labelID}}' \
  --data-urlencode 'unlabeled={{unlabeled}}'

Returns

JSON
See the shared response schema and synthetic example.
Response fields
FieldTypeRequiredDescription
$media_get_my_media_timeline_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.monthsarray Yes
$.oneOf[0].allOf[1].Payload.months[]object No
$.oneOf[0].allOf[1].Payload.months[].month Yes
$.oneOf[0].allOf[1].Payload.months[].month.anyOf[0]string Yes
$.oneOf[0].allOf[1].Payload.months[].month.anyOf[1]null Yes
$.oneOf[0].allOf[1].Payload.months[].countDatabaseInteger YesInteger value; legacy MySQL reads may serialize it as a numeric string.
$.oneOf[0].allOf[1].Payload.months[].count.oneOf[0]integer Yes
$.oneOf[0].allOf[1].Payload.months[].count.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
Response example
{
    "RequestStatus": "Succeeded",
    "ResponseCode": 100,
    "ResponseMessage": "Synthetic success example.",
    "RequestPath": "/v1/media/get_my_media_timeline",
    "RequestUserAlias": "example-user",
    "Payload": {
        "months": []
    }
}
Machine-readable endpoint documentation
POST

/v1/media/set_copy_post_photo

#
Copy an accessible post photo into the acting user's media library with a new ID and the same file URLs. Also resolves the acting user's wall for the About Me composer; creates that wall if needed. Does not publish a post or change the profile. POST with X-AT-Media-Request: 1 required.

Parameters

NameTypeRequiredDefaultDescription
postID int Yes — Accessible source post containing the image.
mediaID int Yes — Retained image attached to that post.
isWritingRequest bool No false Explicit write acknowledgement.
Request example (cURL)
curl --request POST \
  'https://ca.appointmenttrader.com/v1/media/set_copy_post_photo' \
  --data-urlencode 'key={{API_KEY}}' \
  --data-urlencode 'postID={{postID}}' \
  --data-urlencode 'mediaID={{mediaID}}' \
  --data-urlencode 'isWritingRequest={{isWritingRequest}}'

Returns

JSON
See the shared response schema and synthetic example.
Response fields
FieldTypeRequiredDescription
$media_set_copy_post_photo_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.itemobject Yes
$.oneOf[0].allOf[1].Payload.item.idinteger Yes
$.oneOf[0].allOf[1].Payload.item.thumbUrlstring Yes
$.oneOf[0].allOf[1].Payload.item.mediaUrlstring Yes
$.oneOf[0].allOf[1].Payload.item.mediaTypestring Yes
$.oneOf[0].allOf[1].Payload.item.widthinteger Yes
$.oneOf[0].allOf[1].Payload.item.heightinteger Yes
$.oneOf[0].allOf[1].Payload.item.titlestring Yes
$.oneOf[0].allOf[1].Payload.item.isImageboolean Yes
$.oneOf[0].allOf[1].Payload.item.isEmbeddedboolean Yes
$.oneOf[0].allOf[1].Payload.item.kindstring ["image","video","audio","document"] Yes
$.oneOf[0].allOf[1].Payload.item.createdDatestring Yes
$.oneOf[0].allOf[1].Payload.item.filenamestring Yes
$.oneOf[0].allOf[1].Payload.item.sizeinteger Yes
$.oneOf[0].allOf[1].Payload.item.duration Yes
$.oneOf[0].allOf[1].Payload.item.duration.anyOf[0]number Yes
$.oneOf[0].allOf[1].Payload.item.duration.anyOf[1]null Yes
$.oneOf[0].allOf[1].Payload.item.downloadUrlstring Yes
$.oneOf[0].allOf[1].Payload.wallBoardobject Yes
$.oneOf[0].allOf[1].Payload.wallBoard.idinteger Yes
$.oneOf[0].allOf[1].Payload.wallBoard.boardIDinteger Yes
$.oneOf[0].allOf[1].Payload.wallBoard.slugstring Yes
$.oneOf[0].allOf[1].Payload.wallBoard.namestring Yes
$.oneOf[0].allOf[1].Payload.wallBoard.citystring Yes
$.oneOf[0].allOf[1].Payload.wallBoard.cityGroupCodestring Yes
$.oneOf[0].allOf[1].Payload.wallBoard.intentstring Yes
$.oneOf[0].allOf[1].Payload.wallBoard.callbackstring Yes
$.oneOf[0].allOf[1].Payload.wallBoard.countinteger Yes
$.oneOf[0].allOf[1].Payload.wallBoard.unitLabelstring Yes
$.oneOf[0].allOf[1].Payload.wallBoard.createsRegularBoardPostboolean Yes
$.oneOf[0].allOf[1].Payload.wallBoard.isDefaultRequestBoardboolean Yes
$.oneOf[0].allOf[1].Payload.wallBoard.isDefaultListingBoardboolean Yes
$.oneOf[0].allOf[1].Payload.wallBoard.routingEnabledboolean Yes
$.oneOf[0].allOf[1].Payload.wallBoard.routingDescriptionstring Yes
$.oneOf[0].allOf[1].Payload.wallBoard.selectedboolean Yes
$.oneOf[0].allOf[1].Payload.wallBoard.viewerCanReadboolean Yes
$.oneOf[0].allOf[1].Payload.wallBoard.viewerCanWriteboolean Yes
$.oneOf[0].allOf[1].Payload.wallBoard.hasAccessMetadata = true 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
Response example
{
    "RequestStatus": "Succeeded",
    "ResponseCode": 100,
    "ResponseMessage": "Synthetic success example.",
    "RequestPath": "/v1/media/set_copy_post_photo",
    "RequestUserAlias": "example-user",
    "Payload": {
        "item": {
            "id": 0,
            "thumbUrl": "synthetic-example",
            "mediaUrl": "synthetic-example",
            "mediaType": "synthetic-example",
            "width": 0,
            "height": 0,
            "title": "synthetic-example",
            "isImage": false,
            "isEmbedded": false,
            "kind": "image",
            "createdDate": "synthetic-example",
            "filename": "synthetic-example",
            "size": 0,
            "duration": 0,
            "downloadUrl": "synthetic-example"
        },
        "wallBoard": {
            "id": 0,
            "boardID": 0,
            "slug": "synthetic-example",
            "name": "synthetic-example",
            "city": "synthetic-example",
            "cityGroupCode": "synthetic-example",
            "intent": "synthetic-example",
            "callback": "synthetic-example",
            "count": 0,
            "unitLabel": "synthetic-example",
            "createsRegularBoardPost": false,
            "isDefaultRequestBoard": false,
            "isDefaultListingBoard": false,
            "routingEnabled": false,
            "routingDescription": "synthetic-example",
            "selected": false,
            "viewerCanRead": false,
            "viewerCanWrite": false,
            "hasAccessMetadata": true
        }
    }
}
Machine-readable endpoint documentation
POST

/v1/media/set_delete_file

#
Soft-delete a file owned by the acting account by setting ATMedia.DeletedDate. The stored file and reference rows are retained. Deleted media is excluded from My Media, attachment selection and owner downloads. Repeating deletion is safe. POST with X-AT-Media-Request: 1 required; no other account ID is accepted.

Parameters

NameTypeRequiredDefaultDescription
mediaID int Yes — Owned ATMedia ID.
isWritingRequest bool No false Explicit write acknowledgement.
Request example (cURL)
curl --request POST \
  'https://ca.appointmenttrader.com/v1/media/set_delete_file' \
  --data-urlencode 'key={{API_KEY}}' \
  --data-urlencode 'mediaID={{mediaID}}' \
  --data-urlencode 'isWritingRequest={{isWritingRequest}}'

Returns

JSON
See the shared response schema and synthetic example.
Response fields
FieldTypeRequiredDescription
$media_set_delete_file_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.mediaIDinteger Yes
$.oneOf[0].allOf[1].Payload.deleted = true 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
Response example
{
    "RequestStatus": "Succeeded",
    "ResponseCode": 100,
    "ResponseMessage": "Synthetic success example.",
    "RequestPath": "/v1/media/set_delete_file",
    "RequestUserAlias": "example-user",
    "Payload": {
        "mediaID": 0,
        "deleted": true
    }
}
Machine-readable endpoint documentation
POST

/v1/media/set_ftp_credentials

#
Create a random FTP login with six uppercase A-Z letters in each field, or reset it. Reset preserves an existing six-letter uppercase username; legacy names are shortened. The home-directory slug, virtual identity, default label, notification preference and enabled state survive reset. New accounts stay disabled until the FTP server provisions their home directory. Send POST with X-AT-Media-Request: 1. No user ID, username or password is accepted.

Parameters

NameTypeRequiredDefaultDescription
reset bool No false Replace the password and shorten a legacy username if needed.
isWritingRequest bool No false Explicit write acknowledgement.
Request example (cURL)
curl --request POST \
  'https://ca.appointmenttrader.com/v1/media/set_ftp_credentials' \
  --data-urlencode 'key={{API_KEY}}' \
  --data-urlencode 'reset={{reset}}' \
  --data-urlencode 'isWritingRequest={{isWritingRequest}}'

Returns

JSON
See the shared response schema and synthetic example.
Response fields
FieldTypeRequiredDescription
$media_set_ftp_credentials_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.credentials Yes
$.oneOf[0].allOf[1].Payload.credentials.anyOf[0]object Yes
$.oneOf[0].allOf[1].Payload.credentials.anyOf[0].credentialIDinteger Yes
$.oneOf[0].allOf[1].Payload.credentials.anyOf[0].label Yes
$.oneOf[0].allOf[1].Payload.credentials.anyOf[0].label.anyOf[0]object Yes
$.oneOf[0].allOf[1].Payload.credentials.anyOf[0].label.anyOf[0].idinteger Yes
$.oneOf[0].allOf[1].Payload.credentials.anyOf[0].label.anyOf[0].namestring Yes
$.oneOf[0].allOf[1].Payload.credentials.anyOf[0].label.anyOf[0].emojistring Yes
$.oneOf[0].allOf[1].Payload.credentials.anyOf[0].label.anyOf[0].archivedboolean Yes
$.oneOf[0].allOf[1].Payload.credentials.anyOf[0].label.anyOf[1]null Yes
$.oneOf[0].allOf[1].Payload.credentials.anyOf[0].usernamestring YesOwner FTP username; examples are deliberately fictitious.
$.oneOf[0].allOf[1].Payload.credentials.anyOf[0].password YesOwner FTP password, or null when reset is required. Never use response data as documentation examples.
$.oneOf[0].allOf[1].Payload.credentials.anyOf[0].password.anyOf[0]string Yes
$.oneOf[0].allOf[1].Payload.credentials.anyOf[0].password.anyOf[1]null Yes
$.oneOf[0].allOf[1].Payload.credentials.anyOf[0].enabledboolean Yes
$.oneOf[0].allOf[1].Payload.credentials.anyOf[0].notifyOnImportboolean Yes
$.oneOf[0].allOf[1].Payload.credentials.anyOf[0].requiresResetboolean Yes
$.oneOf[0].allOf[1].Payload.credentials.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
Response example
{
    "RequestStatus": "Succeeded",
    "ResponseCode": 100,
    "ResponseMessage": "Synthetic success example.",
    "RequestPath": "/v1/media/set_ftp_credentials",
    "RequestUserAlias": "example-user",
    "Payload": {
        "credentials": {
            "credentialID": 1,
            "label": null,
            "username": "SYNTHETIC_USERNAME",
            "password": "SYNTHETIC_PASSWORD",
            "enabled": false,
            "notifyOnImport": false,
            "requiresReset": false
        }
    }
}
Machine-readable endpoint documentation
POST

/v1/media/set_ftp_label

#
Set a credential's default label independently of its password. Records upload-time history atomically. POST with X-AT-Media-Request: 1 required. Resetting credentials preserves this setting and upload directory.

Parameters

NameTypeRequiredDefaultDescription
credentialID int Yes — Owned FTP credential ID.
labelID int No 0 Owned active label ID; zero clears.
isWritingRequest bool No false Explicit write acknowledgement.
Request example (cURL)
curl --request POST \
  'https://ca.appointmenttrader.com/v1/media/set_ftp_label' \
  --data-urlencode 'key={{API_KEY}}' \
  --data-urlencode 'credentialID={{credentialID}}' \
  --data-urlencode 'labelID={{labelID}}' \
  --data-urlencode 'isWritingRequest={{isWritingRequest}}'

Returns

JSON
See the shared response schema and synthetic example.
Response fields
FieldTypeRequiredDescription
$media_set_ftp_label_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.credentialIDinteger Yes
$.oneOf[0].allOf[1].Payload.label Yes
$.oneOf[0].allOf[1].Payload.label.anyOf[0]object Yes
$.oneOf[0].allOf[1].Payload.label.anyOf[0].idinteger Yes
$.oneOf[0].allOf[1].Payload.label.anyOf[0].namestring Yes
$.oneOf[0].allOf[1].Payload.label.anyOf[0].emojistring Yes
$.oneOf[0].allOf[1].Payload.label.anyOf[0].archivedboolean Yes
$.oneOf[0].allOf[1].Payload.label.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
Response example
{
    "RequestStatus": "Succeeded",
    "ResponseCode": 100,
    "ResponseMessage": "Synthetic success example.",
    "RequestPath": "/v1/media/set_ftp_label",
    "RequestUserAlias": "example-user",
    "Payload": {
        "credentialID": 0,
        "label": {
            "id": 0,
            "name": "synthetic-example",
            "emoji": "synthetic-example",
            "archived": false
        }
    }
}
Machine-readable endpoint documentation
POST

/v1/media/set_ftp_notifications

#
Enable/disable priority alerts for successful FTP imports. Defaults to on for new and existing credentials. Changes apply to future imports, including uploads awaiting delivery. Existing alerts and replayed imports are unchanged. POST with X-AT-Media-Request: 1 required. Does not reset the login or change the default label/directory.

Parameters

NameTypeRequiredDefaultDescription
credentialID int Yes — Owned FTP credential ID.
notifyOnImport bool Yes — Whether successful imports create a priority notification.
isWritingRequest bool No false Explicit write acknowledgement.
Request example (cURL)
curl --request POST \
  'https://ca.appointmenttrader.com/v1/media/set_ftp_notifications' \
  --data-urlencode 'key={{API_KEY}}' \
  --data-urlencode 'credentialID={{credentialID}}' \
  --data-urlencode 'notifyOnImport={{notifyOnImport}}' \
  --data-urlencode 'isWritingRequest={{isWritingRequest}}'

Returns

JSON
See the shared response schema and synthetic example.
Response fields
FieldTypeRequiredDescription
$media_set_ftp_notifications_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.credentialIDinteger Yes
$.oneOf[0].allOf[1].Payload.notifyOnImportboolean 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
Response example
{
    "RequestStatus": "Succeeded",
    "ResponseCode": 100,
    "ResponseMessage": "Synthetic success example.",
    "RequestPath": "/v1/media/set_ftp_notifications",
    "RequestUserAlias": "example-user",
    "Payload": {
        "credentialID": 0,
        "notifyOnImport": false
    }
}
Machine-readable endpoint documentation
POST

/v1/media/set_import_from_url

#
Download one public HTTP(S) media URL into the acting account's My Media library. Accepts JPEG, PNG, GIF, WebP, AVIF, MP4, MOV, WebM and PDF, up to 25 MiB. Send POST with X-AT-Media-Request: 1. Authenticated session or owner API key required. Retry with the same importID and identical parameters to receive the original media. Future FTP delivery adapters can call this endpoint with an owner-authorized API identity and a public HTTPS delivery URL. FTP slugs/passwords alone never authorize imports.

Parameters

NameTypeRequiredDefaultDescription
sourceURL string Yes — Absolute public media URL. Private-network addresses and credentials are rejected.
importID string Yes — Caller-generated stable delivery ID, 8-128 letters, numbers, underscores or hyphens.
title string No "" Optional media title, up to 250 characters.
isWritingRequest bool No false Explicit write acknowledgement.
Request example (cURL)
curl --request POST \
  'https://ca.appointmenttrader.com/v1/media/set_import_from_url' \
  --data-urlencode 'key={{API_KEY}}' \
  --data-urlencode 'sourceURL={{sourceURL}}' \
  --data-urlencode 'importID={{importID}}' \
  --data-urlencode 'title={{title}}' \
  --data-urlencode 'isWritingRequest={{isWritingRequest}}'

Returns

JSON
See the shared response schema and synthetic example.
Response fields
FieldTypeRequiredDescription
$media_set_import_from_url_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.itemobject Yes
$.oneOf[0].allOf[1].Payload.item.idinteger Yes
$.oneOf[0].allOf[1].Payload.item.thumbUrlstring Yes
$.oneOf[0].allOf[1].Payload.item.mediaUrlstring Yes
$.oneOf[0].allOf[1].Payload.item.mediaTypestring Yes
$.oneOf[0].allOf[1].Payload.item.widthinteger Yes
$.oneOf[0].allOf[1].Payload.item.heightinteger Yes
$.oneOf[0].allOf[1].Payload.item.titlestring Yes
$.oneOf[0].allOf[1].Payload.item.isImageboolean Yes
$.oneOf[0].allOf[1].Payload.item.isEmbeddedboolean Yes
$.oneOf[0].allOf[1].Payload.item.kindstring ["image","video","audio","document"] Yes
$.oneOf[0].allOf[1].Payload.item.createdDatestring Yes
$.oneOf[0].allOf[1].Payload.item.filenamestring Yes
$.oneOf[0].allOf[1].Payload.item.sizeinteger Yes
$.oneOf[0].allOf[1].Payload.item.duration Yes
$.oneOf[0].allOf[1].Payload.item.duration.anyOf[0]number Yes
$.oneOf[0].allOf[1].Payload.item.duration.anyOf[1]null Yes
$.oneOf[0].allOf[1].Payload.item.downloadUrlstring Yes
$.oneOf[0].allOf[1].Payload.reusedboolean 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
Response example
{
    "RequestStatus": "Succeeded",
    "ResponseCode": 100,
    "ResponseMessage": "Synthetic success example.",
    "RequestPath": "/v1/media/set_import_from_url",
    "RequestUserAlias": "example-user",
    "Payload": {
        "item": {
            "id": 0,
            "thumbUrl": "synthetic-example",
            "mediaUrl": "synthetic-example",
            "mediaType": "synthetic-example",
            "width": 0,
            "height": 0,
            "title": "synthetic-example",
            "isImage": false,
            "isEmbedded": false,
            "kind": "image",
            "createdDate": "synthetic-example",
            "filename": "synthetic-example",
            "size": 0,
            "duration": 0,
            "downloadUrl": "synthetic-example"
        },
        "reused": false
    }
}
Machine-readable endpoint documentation
POST

/v1/media/set_label

#
Create or rename an owned label; archived names remain reserved. POST with X-AT-Media-Request: 1.

Parameters

NameTypeRequiredDefaultDescription
name string Yes — Trimmed label name, 1–100 characters, case-insensitively unique per account.
labelID int No 0 Zero creates a label; otherwise renames without changing its ID.
isWritingRequest bool No false Explicit write acknowledgement.
emoji string No null One emoji; omitted preserves the existing value.
Request example (cURL)
curl --request POST \
  'https://ca.appointmenttrader.com/v1/media/set_label' \
  --data-urlencode 'key={{API_KEY}}' \
  --data-urlencode 'name={{name}}' \
  --data-urlencode 'labelID={{labelID}}' \
  --data-urlencode 'isWritingRequest={{isWritingRequest}}' \
  --data-urlencode 'emoji={{emoji}}'

Returns

JSON
See the shared response schema and synthetic example.
Response fields
FieldTypeRequiredDescription
$media_set_label_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.label Yes
$.oneOf[0].allOf[1].Payload.label.anyOf[0]object Yes
$.oneOf[0].allOf[1].Payload.label.anyOf[0].idinteger Yes
$.oneOf[0].allOf[1].Payload.label.anyOf[0].namestring Yes
$.oneOf[0].allOf[1].Payload.label.anyOf[0].emojistring Yes
$.oneOf[0].allOf[1].Payload.label.anyOf[0].archivedboolean Yes
$.oneOf[0].allOf[1].Payload.label.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
Response example
{
    "RequestStatus": "Succeeded",
    "ResponseCode": 100,
    "ResponseMessage": "Synthetic success example.",
    "RequestPath": "/v1/media/set_label",
    "RequestUserAlias": "example-user",
    "Payload": {
        "label": {
            "id": 0,
            "name": "synthetic-example",
            "emoji": "synthetic-example",
            "archived": false
        }
    }
}
Machine-readable endpoint documentation
POST

/v1/media/set_label_archived

#
Archive or restore a label. Archiving atomically clears FTP defaults and records history; existing links remain. POST with X-AT-Media-Request: 1 required.

Parameters

NameTypeRequiredDefaultDescription
labelID int Yes — Owned label ID.
archived bool Yes — True archives; false restores.
isWritingRequest bool No false Explicit write acknowledgement.
confirmDetach bool No false Acknowledge permanent removal from linked posts.
Request example (cURL)
curl --request POST \
  'https://ca.appointmenttrader.com/v1/media/set_label_archived' \
  --data-urlencode 'key={{API_KEY}}' \
  --data-urlencode 'labelID={{labelID}}' \
  --data-urlencode 'archived={{archived}}' \
  --data-urlencode 'isWritingRequest={{isWritingRequest}}' \
  --data-urlencode 'confirmDetach={{confirmDetach}}'

Returns

JSON
See the shared response schema and synthetic example.
Response fields
FieldTypeRequiredDescription
$media_set_label_archived_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.label Yes
$.oneOf[0].allOf[1].Payload.label.anyOf[0]object Yes
$.oneOf[0].allOf[1].Payload.label.anyOf[0].idinteger Yes
$.oneOf[0].allOf[1].Payload.label.anyOf[0].namestring Yes
$.oneOf[0].allOf[1].Payload.label.anyOf[0].emojistring Yes
$.oneOf[0].allOf[1].Payload.label.anyOf[0].archivedboolean Yes
$.oneOf[0].allOf[1].Payload.label.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
Response example
{
    "RequestStatus": "Succeeded",
    "ResponseCode": 100,
    "ResponseMessage": "Synthetic success example.",
    "RequestPath": "/v1/media/set_label_archived",
    "RequestUserAlias": "example-user",
    "Payload": {
        "label": {
            "id": 0,
            "name": "synthetic-example",
            "emoji": "synthetic-example",
            "archived": false
        }
    }
}
Machine-readable endpoint documentation
POST

/v1/media/set_media_labels

#
Atomically add/remove labels on up to 100 owned, retained media. Unrelated links are preserved. Archived labels may be removed but never manually added. POST with X-AT-Media-Request: 1 required.

Parameters

NameTypeRequiredDefaultDescription
mediaIDs string Yes — JSON array of 1–100 media IDs.
labelIDs string Yes — JSON array of 1–100 owned label IDs.
remove bool No false True removes; false adds. Repeating an operation is harmless.
isWritingRequest bool No false Explicit write acknowledgement.
Request example (cURL)
curl --request POST \
  'https://ca.appointmenttrader.com/v1/media/set_media_labels' \
  --data-urlencode 'key={{API_KEY}}' \
  --data-urlencode 'mediaIDs={{mediaIDs}}' \
  --data-urlencode 'labelIDs={{labelIDs}}' \
  --data-urlencode 'remove={{remove}}' \
  --data-urlencode 'isWritingRequest={{isWritingRequest}}'

Returns

JSON
See the shared response schema and synthetic example.
Parameters: mediaIDs
FieldTypeRequiredDescription
mediaIDsstring (application/json) Yes
mediaIDsarray (decoded JSON) Yes
mediaIDs[]integer No
Parameters: labelIDs
FieldTypeRequiredDescription
labelIDsstring (application/json) Yes
labelIDsarray (decoded JSON) Yes
labelIDs[]integer No
Response fields
FieldTypeRequiredDescription
$media_set_media_labels_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.updatedinteger 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
Response example
{
    "RequestStatus": "Succeeded",
    "ResponseCode": 100,
    "ResponseMessage": "Synthetic success example.",
    "RequestPath": "/v1/media/set_media_labels",
    "RequestUserAlias": "example-user",
    "Payload": {
        "updated": 0
    }
}
Machine-readable endpoint documentation