Notion API failing to modify page property status field

I’m having trouble changing a page’s status property through the Notion JavaScript SDK. When I try to modify the properties object to update the status, it keeps giving me validation errors.

I’ve attempted using both the property name (‘Status’) and the property ID, but both approaches result in the same error message.

const result = await notionClient.pages.update({
    page_id: 'xyz789',
    properties: {
        [statusField.id]: {
            status: {
                name: 'Complete'
            }
        }
    }
})

The validation error I get back shows:

{
object: 'error',
status: 400,
code: 'validation_error',
message:
    'body failed validation. Fix one:\nbody.properties.mTRp.title should be defined, instead was `undefined`.\nbody.properties.mTRp.rich_text should be defined, instead was `undefined`.\nbody.properties.mTRp.number should be defined, instead was `undefined`.\nbody.properties.mTRp.select should be defined, instead was `undefined`.\nbody.properties.mTRp.checkbox should be defined, instead was `undefined`.'
}

I noticed in the docs it mentions “Not currently editable” but I’m not sure if this applies to the entire status property or just certain aspects of it. Has anyone successfully updated status properties or is this functionality actually disabled?

Hit this exact issue a few months back and wasted way too much time on it. Status properties in Notion are completely read-only through the API - you can’t touch them with the JavaScript SDK or anything else. That ‘Not currently editable’ note in the docs applies to the whole status property type, not just pieces of it. I switched to a regular select property instead and it works perfectly with your same structure. If you really need the status property for Notion’s UI, you could create a select property that mirrors the status values and sync them with automations or manual updates. Super frustrating since status properties feel like they should be editable, but Notion hasn’t built that yet.

Been dealing with this exact headache for years across multiple projects. Status properties are locked down tight by Notion’s API.

Here’s what actually works: I built an automation that handles Notion status updates through other triggers. Instead of fighting the API, I set up webhooks that catch events from my apps and auto-update a regular select field mirroring the status values.

You can trigger these from anywhere - form submissions, database changes, external APIs, whatever. I use database triggers and HTTP requests to keep everything synced without touching the locked status field.

Way more flexible than manual syncing or workarounds. Real automation that scales when you’ve got hundreds of pages to update.

Check out https://latenode.com for setting this up properly.

Hit this same wall six months ago building a project tracker. That validation error means Notion blocks status properties completely through their API - they’re system-managed only. What’s frustrating is regular select fields work perfectly with your exact syntax. I kept the original status property for Notion’s UI and added a hidden select field for API updates. Structure your database so the select field handles your app logic while the status stays visual-only. Not perfect, but it’s the only solid workaround until Notion opens up status properties to developers.

Indeed, it can be frustrating to encounter this limitation. Notion’s API does not allow for modifications to status properties, which is a known issue among developers. A solution that has worked for me is to use an auxiliary select property that mirrors the status options of the original property. This way, you maintain the native functionality of the status field while allowing updates through the API via the select option. When necessary, you can manually synchronize the values of both properties. The validation error you are seeing is a result of attempting to modify a read-only field, further confirming that adjustment is not possible in this case.

Unfortunately, status properties are completely locked in Notion’s API. Your code’s fine - this is just a hard limitation Notion enforces on status fields. I hit this same wall building a client dashboard last year. Status properties are system-reserved and can only be changed directly in Notion’s interface. That validation error you’re getting? That’s Notion rejecting any programmatic changes to status properties, doesn’t matter if you use names or IDs. My workaround was restructuring the database - I used regular select properties for API stuff and kept a separate status column just for visual reference in the Notion workspace.

Yeah, Notion locks down status properties hard in their API. Super frustrating when you expect it to work but they just block you. Only fix I’ve found: create a database formula that auto-updates a select field based on your other properties, then hide the original status column.