# Request access to crm.objects.calls.write and crm.objects.notes.write for a private app

**URL:** <https://community.hubspot.com/t/request-access-to-crm-objects-calls-write-and-crm-objects-notes-write-for-a-private-app/163136>\
**Category:** APIs & Integrations\
**Tags:** developer-tools, free\
**Created:** [October 27, 2026, 9:52am UTC](https://community.hubspot.com/t/request-access-to-crm-objects-calls-write-and-crm-objects-notes-write-for-a-private-app/163136 "2026-10-27T09:52:38Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![ajora](https://avatars.discourse-cdn.com/v4/letter/a/5f8ce5/32.png) [@ajora](https://community.hubspot.com/u/ajora)\
**Post date:** [October 27, 2026, 9:52am UTC](https://community.hubspot.com/t/request-access-to-crm-objects-calls-write-and-crm-objects-notes-write-for-a-private-app/163136/1 "2026-10-27T09:52:38Z")

</div>

Our private OAuth app cannot deploy with two granular engagement write scopes. The build fails with: “The scope crm.objects.calls.write isn’t available to this app. If your app needs it, contact HubSpot support to request access.” The same happens for crm.objects.notes.write.

**App ID:** 58807121

**Developer account:** [ID]

**Distribution:** private, 2026.09 projects framework / After successful test on the marketplace

**Project:** debrief-hubspot

**App name:** Ajora

**What the app does and why it needs them:**

Ajora records a customer’s own calls and meetings, transcribes them, and writes a short debrief: a summary, action points, key decisions, and insights. The customer connects one HubSpot portal with OAuth and picks the existing contact the conversation was with. A phone debrief should become one HubSpot call on that contact. A Meet, Teams, or Zoom debrief should become one HubSpot note. If the debrief is edited later, we update that same call or note. We do not create a second one.

We already have oauth, crm.objects.contacts.read, crm.objects.companies.read, and crm.objects.deals.read. Contact search works.

Creating the call or the note returns a refusal because these two write scopes are not available to the app. We are not requesting meetings, tasks, or the matching .read scopes.

**How the data is used:**

We create and later update only that one call or note. The body is the debrief text and a link to it in Ajora. We do not send the transcript, the recording, or a share link. The activity is associated to the contact the customer selected. We do not create or delete contacts. Each customer’s data stays in the portal they connected. Customers authorize the connection themselves and can disconnect it at any time.

**What is the process for requesting these scopes on a free account?**

---

<div class="post-metadata">

**Author:** ![stassey](https://d10pqhm3lwygmk.cloudfront.net/user_avatar/community.hubspot.com/stassey/32/36_2.png) [@stassey](https://community.hubspot.com/u/stassey)\
**Post date:** [October 27, 2026, 2:27pm UTC](https://community.hubspot.com/t/request-access-to-crm-objects-calls-write-and-crm-objects-notes-write-for-a-private-app/163136/3 "2026-10-27T14:27:55Z")

</div>

Hi @ajora,

Welcome to the Community! 🪩 🎉

Thanks for the detailed post! It looks like the two engagement write scopes aren’t currently available to your app during the build, and I can’t seem to find a documented process for requesting them. The [Scopes](https://developers.hubspot.com/docs/api/scopes) reference lists what can be requested, and the [Calls](https://developers.hubspot.com/docs/guides/api/crm/engagements/calls) guide covers how call creation and associations work. In the meantime I’m tagging in some of our Top Contributors to see if they may have run into this before!

Hey @grajput, @Alex_Boissonneault, @anton – Have you run into this before? If so, how did you handle it?

Thanks!!

Sam, Community Manager

---

<div class="post-metadata">

**Author:** ![Alex\_Boissonneault](https://d10pqhm3lwygmk.cloudfront.net/user_avatar/community.hubspot.com/alex_boissonneault/32/225270_2.png) [@Alex\_Boissonneault](https://community.hubspot.com/u/Alex_Boissonneault)\
**Post date:** [October 27, 2026, 9:37pm UTC](https://community.hubspot.com/t/request-access-to-crm-objects-calls-write-and-crm-objects-notes-write-for-a-private-app/163136/4 "2026-10-27T21:37:29Z")

</div>

Hi @ajora, You won’t get these two through support, and you don’t need them. Calls and notes don’t take their own write scopes in practice. They follow the object you associate them to. Since Ajora always logs against a contact, crm.objects.contacts.write is what covers it. The calls.write and notes.write scopes are gated, so the build rejects them. I’ve seen the same thing come up here a few times with notes, and it was sorted the same way each time.

So drop crm.objects.calls.write and crm.objects.notes.write from your required scopes, add crm.objects.contacts.write next to your existing read scopes, and redeploy. Anyone already connected will need to reconnect once so the new scope lands on their token.

Your flow stays as you described it. A phone debrief goes to /crm/v3/objects/calls and a Meet/Teams/Zoom debrief goes to /crm/v3/objects/notes. Associate it to the selected contact in the same request (194 for call to contact, 202 for note to contact). Save the ID HubSpot returns against the debrief, and when it’s edited, PATCH that same ID. That keeps it to one record and no duplicates.

It works the same on free portals, nothing tier-related here. One small thing: since contacts.write shows up on the consent screen, I’d mention in your app description that Ajora only logs the call or note and never creates or edits contacts. That matches what you’re actually doing and saves customers asking.

Give it a go and this deploy gonna help!
