• Got questions about HubSpot’s Smart CRM?

    Our product team is answering them live through March 6th!

    Ask us anything
  • Ready to build your local HubSpot community?

    HUG leaders host events, spark connections, and create spaces where people learn and grow together.

    Become a HUG Leader

Update engagement task status in nodejs

PCarlson
Participant

I have not yet succeeded in updating an existing engagement from nodejs. Specifically, I am simply trying to update a specific task status to COMPLETED.

 

I don't see any samples that update engagements.

 

My code looks like this:

 

    const apiOptions = {
      path: '/engagements/v1/engagements/'+id,
      method: 'POST',
      body: {
        "metadata": {
            status: 'COMPLETED',
        }
      }
    }
    await this._client.apiRequest(apiOptions)

 

 

Anyone see anything I'm doing wrong?

 

Thanks

 

Phil

0 Upvotes
1 Accepted solution
kierana
Solution
Contributor

Looks like you're using POST when the API mentions that you need to PATCH.

View solution in original post

8 Replies 8
PCarlson
Participant

PATCH did the trick. Thanks @kierana 

 

For reference, my apiOptions looked like this:

 

    const apiOptions = {
      path: '/engagements/v1/engagements/'+id,
      method: 'PATCH',
      body: {
        "engagement": {
        },
        "metadata": {
          "status": "COMPLETED",
        }
      }
    }

 

Phil

PCarlson
Participant

Thanks @kierana , I'll play with that this weekend. I have seen PATCH referenced in the API docs, but I did not understand it as a method in the endpoints. I'll post what I find.

 

Phil

kierana
Solution
Contributor

Looks like you're using POST when the API mentions that you need to PATCH.

dennisedson
Community Manager
Community Manager

@kierana loves to be distracted so he can procrastinate on.  Maybe he has some thoughts


loop Loop Marketing is a new four-stage approach that combines AI efficiency and human authenticity to drive growth.
Learn More

0 Upvotes
dennisedson
Community Manager
Community Manager

Heyo @PCarlson 

Wonder if you need to wrap status. 

"status": "COMPLETED"

loop Loop Marketing is a new four-stage approach that combines AI efficiency and human authenticity to drive growth.
Learn More

0 Upvotes
PCarlson
Participant

Wrapping status does not fix. I'll do more experiments today.

0 Upvotes
PCarlson
Participant

Not making much progress. Per Update an Engagement in the legacy api docs, engagement is required in the JSON body, so I tried adding an engagement with various info from the existing engagement and even an empty engagement section like this:

 

    const apiOptions = {
      path: '/engagements/v1/engagements/'+id,
      method: 'POST',
      body: {
        "engagement": {
        },
        "metadata": {
            "status": 'COMPLETED',
        }
      }
    }

 

But no matter what I try, the response is always: "HttpError: HTTP request failed" giving no clues to what is wrong with the request. So it seems to be a matter of empirical testing to guess what might be expected. But I have not found the magic incantation yet.

 

Phil

0 Upvotes
PCarlson
Participant

I get the same "HttpError: HTTP request failed" trying to update the engagement due date "timestamp", so it appears all my updates are failing. Here is my JSON for that attempt:

    const apiOptions = {
      path: '/engagements/v1/engagements/'+id,
      method: 'POST',
      body: {
        "engagement": {
          "timestamp": moment(dueDate).valueOf(), // HubSpot requires timestamp in milliseconds
        },
      }
    }
    await this._client.apiRequest(apiOptions)

 

So I'm either doing something fundamentally wrong or this api through nodejs is broken.

 

Note I can successfully get activity information using the id in the same manner with this code:

 

    const apiOptions = {
      path: '/engagements/v1/engagements/' + id,
    }
    await this._client.apiRequest(apiOptions)

 

I can also create an engagement note (and task and call and email) successfully like this:

 

    const apiOptions = {
      path: '/engagements/v1/engagements',
      method: 'POST',
      body: {
        engagement: {
          active:true,
          type:"NOTE",
          timestamp: moment().valueOf(),
        },
        associations: {
          contactIds: [ whoId ],
        },
        metadata: {
          body:newDescription,
        }
      }
    };
    await this._client.apiRequest(apiOptions)

 

So both GET and POST calls are working and my oauth token is getting passed by nodejs without putting anything in the JSON. It seems to be specific to Update.

 

Phil

0 Upvotes