Dynamics CRM is not the easiest API to work with and creating an activity is a multiple step process. To create an activity, you first have to create the activity object and secondly associate it with the object in a second API call. For this example, I will be creating a phone call on an account.
1. Get the ID of the account you want to create the activity on.
2. Create the activity. I recommend you create an activity in the UI and then try to retrieve it so you can see what the correct format is. To do this call:
GET /activities?where=regardingobjectid = <id of the object with an activity on it>
Keep in mind, Dynamics CRM has a number of different types of activities. For example they have a "phonecall" activity, these are defined as the "activitytypecode". If you were to create a phone call you call POST /phonecall via the POST /{objectName} api.
You can retrieve a list of objects by calling GET /objects?getAll=true
Sample phonecall:
{
"attributes": {
"subject": "had a phone call",
"actualend": 1516473667000,
"prioritycode": 1,
"description": "had a phone call",
"statecode": 1,
"statuscode": 2,
"leftvoicemail": false,
"activitytypecode": "phonecall",
"regardingobjectid": "fdda942a-03f4-e611-80ec-c4346bacaac0",
"actualstart": 1516473667000
}
}
3. Associate the activity with the parent object.
Call PATCH /accounts/{id}
{
"action": "associate",
"association": {
"entity": "phonecall",
"id": "<id of the phone call created in step 2>",
"associationName": "Account_Phonecalls"
}
}
Every object relationship will have its own associationName. To find the correct association name follow these steps in the Dynamics CRM UI:
1. Go to Settings > Customizations > Customize the System.
A popup window appears

2. Navigate to Entities.
3. Find the entity that you are trying to create an activity on. In my case, account.
4. Select 1:N relationships.

5. Find the correct relationship. It will always be formatted {parentObjectName}_{childObjectName}s.
Mine is Account_Phonecalls.