It is not fully documented on the website, but you can send a HTTPGET request to https://www.exacttargetapis.com/messaging/v1/rest to list all supported methods.
I think below is what you can try, but I am not sure if "{key}" means subscriberkey (e.g. email address in most cases) or something else
"getMessageSendsByKey": {
"path": "messageSends/key:{key}",
"httpMethod": "get",
"description": "Returns single message send by key",
"parameters": {}
},
/rest Full Response:
{
"kind": "discovery#restDescription",
"id": "messaging:v1",
"name": "messaging",
"version": "v1",
"title": "Messaging Service",
"description": "",
"protocol": "rest",
"basePath": "messagingservice",
"methods": {
"discovery": {
"path": "rest",
"httpMethod": "get",
"description": "Returns discovery document",
"parameters": {}
},
"postEmailSendsSend": {
"path": "emailSends/{emailId}/send",
"httpMethod": "post",
"description": "Sends a smtp message send by id",
"parameters": {}
},
"getMessageSendsCollection": {
"path": "messageSends",
"httpMethod": "get",
"description": "Returns all message sends for authenticated account",
"parameters": {}
},
"getMessageSends": {
"path": "messageSends/{id}",
"httpMethod": "get",
"description": "Returns single message send by id",
"parameters": {}
},
"getMessageSendsByKey": {
"path": "messageSends/key:{key}",
"httpMethod": "get",
"description": "Returns single message send by key",
"parameters": {}
},
"postSendMessageSend": {
"path": "messageSends/{id}/send",
"httpMethod": "post",
"description": "Sends a smtp message send by id",
"parameters": {}
},
"postSendMessageSendByKey": {
"path": "messageSends/key:{key}/send",
"httpMethod": "post",
"description": "Sends a smtp message send by key",
"parameters": {}
},
"postSendMessageSendBatch": {
"path": "messageSends/{id}/sendBatch",
"httpMethod": "post",
"description": "Sends a smtp message send batch by id",
"parameters": {}
},
"postSendMessageSendBatchByKey": {
"path": "messageSends/key:{key}/sendBatch",
"httpMethod": "post",
"description": "Sends a smtp message send batch by key",
"parameters": {}
},
"postSendMessageSendBatchMixed": {
"path": "messageSends/sendBatch",
"httpMethod": "post",
"description": "Sends a smtp message send mixed batch",
"parameters": {}
},
"getMessageSendsDeliveryRecordsCollection": {
"path": "messageSends/{id}/deliveryRecords",
"httpMethod": "get",
"description": "Returns a collection of message send delivery records by id",
"parameters": {}
},
"getMessageSendsDeliveryRecordsById": {
"path": "messageSends/{id}/deliveryRecords/{rid}",
"httpMethod": "get",
"description": "Returns single message send delivery record by id and request id",
"parameters": {}
},
"getMessageSendsDeliveryRecordsFeed": {
"path": "messageSends/{id}/feeds/deliveryRecords",
"httpMethod": "get",
"description": "Returns a feed of message send delivery records by id",
"parameters": {}
},
"getMessageSendsSummary": {
"path": "messageSends/{id}/summary",
"httpMethod": "get",
"description": "Returns a collection of summary records by id",
"parameters": {}
},
"getMessageDefinitionSendsCollection": {
"path": "messageDefinitionSends",
"httpMethod": "get",
"description": "Returns all definition message sends for authenticated account",
"parameters": {}
},
"getMessageDefinitionSends": {
"path": "messageDefinitionSends/{id}",
"httpMethod": "get",
"description": "Returns single definition message send by id",
"parameters": {}
},
"getMessageDefinitionSendsByKey": {
"path": "messageDefinitionSends/key:{key}",
"httpMethod": "get",
"description": "Returns single definition message send by key",
"parameters": {}
},
"postSendMessageDefinitionSend": {
"path": "messageDefinitionSends/{id}/send",
"httpMethod": "post",
"description": "Sends a definition message send",
"parameters": {}
},
"postSendMessageDefinitionSendByKey": {
"path": "messageDefinitionSends/key:{key}/send",
"httpMethod": "post",
"description": "Sends a definition message send by key",
"parameters": {}
},
"postSendMessageDefinitionSendBatch": {
"path": "messageDefinitionSends/{id}/sendBatch",
"httpMethod": "post",
"description": "Sends a definition message send batch by id",
"parameters": {}
},
"postSendMessageDefinitionSendBatchByKey": {
"path": "messageDefinitionSends/key:{key}/sendBatch",
"httpMethod": "post",
"description": "Sends a definition message send batch by key",
"parameters": {}
},
"getMessageDefinitionSendsDeliveryRecordsCollection": {
"path": "messageDefinitionSends/{id}/deliveryRecords",
"httpMethod": "get",
"description": "Returns a collection of definition message send delivery records by id",
"parameters": {}
},
"getMessageDefinitionSendsDeliveryRecordsById": {
"path": "messageDefinitionSends/{id}/deliveryRecords/{rid}",
"httpMethod": "get",
"description": "Returns a collection of definition message send delivery records by id and request id",
"parameters": {}
},
"getMessageDefinitionSendsDeliveryRecordsFeed": {
"path": "messageDefinitionSends/{id}/feeds/deliveryRecords",
"httpMethod": "get",
"description": "Returns a feed of definition message send delivery records by id",
"parameters": {}
},
"getMessageDefinitionSendsSummary": {
"path": "messageDefinitionSends/{id}/summary",
"httpMethod": "get",
"description": "Returns a collection of definition send summary records by id",
"parameters": {}
},
"postReplyAddressMap": {
"path": "rmm/ReplyAddressMap",
"httpMethod": "post",
"description": "Generates a mapped reply address for an email address",
"parameters": {}
},
"getConversationMessages": {
"path": "rmm/conversationMessages",
"httpMethod": "get",
"description": "Returns a collection of conversation messages",
"parameters": {}
},
"postChangeReplyAddressMap": {
"path": "rmm/ChangeReplyAddressMap",
"httpMethod": "post",
"description": "Change a mapped reply address and modify any ongoing conversations using the old address to continue with the new address.",
"parameters": {}
},
"postOrionHttpJobCreate": {
"path": "orionhttp/job/create",
"httpMethod": "post",
"description": "Create a new OrionHTTP job",
"parameters": {}
},
"postOrionHttpJobChunk": {
"path": "orionhttp/job/chunk",
"httpMethod": "post",
"description": "Queue a new OrionHTTP email batch chunk",
"parameters": {}
},
"postOrionHttpJobCancel": {
"path": "orionhttp/job/cancel",
"httpMethod": "post",
"description": "cancel OrionHTTP email batch chunk",
"parameters": {}
},
"getOrionHttpSessionStatus": {
"path": "orionhttp/job/status",
"httpMethod": "post",
"description": "Query the status of the processing of a BatchSend session's chunk components",
"parameters": {}
},
"postConversationResend": {
"path": "rmm/ConversationResend",
"httpMethod": "post",
"description": "Resend one or more RMM conversation emails.",
"parameters": {}
},
"getSendLimitStatusByMemberID": {
"path": "accounts/{memberID}/sendlimits/status",
"httpMethod": "get",
"description": "Get the send limit status of an account by memberID",
"parameters": {}
},
"addMessagesToSendLimits": {
"path": "accounts/{memberID}/sendlimits",
"httpMethod": "post",
"description": "Add messages to send limits",
"parameters": {}
},
"deleteMessagesFromSendLimit": {
"path": "accounts/{memberID}/sendlimits/{messageCreditID}",
"httpMethod": "delete",
"description": "Delete a cycle from Message Credit send limits",
"parameters": {}
},
"updateMessageSendLimit": {
"path": "accounts/{memberID}/sendlimits/{messageCreditID}",
"httpMethod": "patch",
"description": "Update a Message Credit send limit",
"parameters": {}
},
"getRmm": {
"path": "accounts/{memberId}/rmm",
"httpMethod": "get",
"description": "Retrieves RMM information by memberId",
"parameters": {}
},
"postRmm": {
"path": "accounts/{memberId}/rmm",
"httpMethod": "post",
"description": "Creates Sender Information by memberId",
"parameters": {}
},
"patchRmm": {
"path": "accounts/{memberId}/rmm",
"httpMethod": "patch",
"description": "Updates Sender Information by memberId",
"parameters": {}
},
"deleteRmm": {
"path": "accounts/{memberId}/rmm",
"httpMethod": "delete",
"description": "Deletes Sender Information by memberId",
"parameters": {}
},
"postTriggeredSendByKey": {
"path": "triggeredSends/key:{tsKey}/send",
"httpMethod": "post",
"description": "Send a triggered send by customer key",
"parameters": {}
},
"postTriggeredSendByIdExplicit": {
"path": "triggeredSends/id:{tsId}/send",
"httpMethod": "post",
"description": "Send a triggered send by id",
"parameters": {}
},
"postTriggeredSendByIdImplicit": {
"path": "triggeredSends/{tsId}/send",
"httpMethod": "post",
"description": "Send a triggered send by id",
"parameters": {}
},
"postSimpleSendTransactionalSingleMessage": {
"path": "messages/transactional",
"httpMethod": "post",
"description": "Send a single simple transactional message",
"parameters": {}
},
"postSimpleSendTransactionalBatchMessage": {
"path": "messages/transactional/batch",
"httpMethod": "post",
"description": "Send a batch of simple transactional messages",
"parameters": {}
},
"getSendInstances": {
"path": "sends/instance",
"httpMethod": "get",
"description": "Retrieves a collection of send instances",
"parameters": {}
},
"postCompleteAbTestSend": {
"path": "sends/instance/abtest/{abtestsendId}/complete",
"httpMethod": "post",
"description": "Completes the completion action of the ab test send. Preparing it for final send.",
"parameters": {}
},
"patchSendInstanceRecipients": {
"path": "sends/instance/{sendId}/recipient/{recipientId}",
"httpMethod": "patch",
"description": "Updates the send recipients",
"parameters": {}
},
"getSendInstanceRecipients": {
"path": "sends/instance/{sendId}/recipient",
"httpMethod": "get",
"description": "Retrieves a collection of send instance recipients",
"parameters": {}
},
"patchSendInstanceRecipientsBatch": {
"path": "sends/instance/{sendId}/recipient",
"httpMethod": "patch",
"description": "Updates the send recipients in a batch",
"parameters": {}
},
"getJobByID": {
"path": "jobs/{id}",
"httpMethod": "get",
"description": "Gets a job",
"parameters": {}
},
"getOpenStatsByJobId": {
"path": "jobs/{id}/stats/opens",
"httpMethod": "get",
"description": "Retrieves a collection of open stats for a given job",
"parameters": {}
},
"getClickStatsByJobId": {
"path": "jobs/{id}/stats/clicks",
"httpMethod": "get",
"description": "Retrieves a collection of click stats for a given job",
"parameters": {}
},
"testEndpoint": {
"path": "tokenResolver/test",
"httpMethod": "post",
"description": "Runs a number of tests against the token resolution server setup for a client",
"parameters": {}
},
"validateAccount": {
"path": "tokenResolver/validate",
"httpMethod": "post",
"description": "Validates the tokenization setup of an account",
"parameters": {}
},
"getSubstitutionsByTriggeredSendIdDefault": {
"path": "messages/transactional/{triggeredSendId}/substitutions",
"httpMethod": "get",
"description": "Get transactional substitutions by Triggered Send Definition TriggeredSendId",
"parameters": {}
},
"getSubstitutionsByCustomerKey": {
"path": "messages/transactional/key:{customerKey}/substitutions",
"httpMethod": "get",
"description": "Get transactional substitutions by Triggered Send Definition CustomerKey",
"parameters": {}
},
"getSubstitutionsByTriggeredSendId": {
"path": "messages/transactional/id:{triggeredSendId}/substitutions",
"httpMethod": "get",
"description": "Get transactional substitutions by Triggered Send Definition TriggeredSendId",
"parameters": {}
}
}
}
Best Answer
You really should not have primary keys on a triggered send data extension. The purpose of it is intended to be more like a send log, which also shouldn't have primary keys. The DE provides a mechanism for passing data from the API call into the resulting email while also functioning as a log for those send-time values.
If you are forcing unique values in your trigger call by passing yet another column as part of a compound key then it really isn't accomplishing anything and will most likely cause you problems in the future. You cannot perform an update on the rows via the trigger so you may as well not have any keys assigned. Also, MemberEmailAddress should already be represented in the EmailAddress column. If there is another identifier needed that is typically stored in the SubscriberKey column but that is a whole different topic that needs careful evaluation as it can have an impact on how the entire account is managed.
If you need a master table that you run updates against you can have a separate process that extracts what you need from the triggered send DE and populates an independent one that would have no impact on the production trigger's operation.
If archiving the current triggered send definition and building a new one isn't an option, you are better off pausing your trigger, adding new columns with temporary names to the DE that represent those currently making up the PK, running a query to copy those values over to the new columns, deleting the original columns and then renaming the new column names to the original value. It's a bit of a process but it's doable. As you found, once you set the DE on the definition you cannot change it. Just be sure to save the DE after deleting the original columns and renaming the new ones. Also, back up the data in the DE before doing anything.
Just some advice from someone who has been through all these scenarios before.