| title | Update Document |
|---|---|
| description | Update an existing document in a collection using PUT (full update) or PATCH (partial update). |
Both PUT and PATCH update an existing document by ID. You only need to send the fields you want to change — unmentioned fields are left unchanged.
Typically used for full logical updates. Send only the fields you intend to change; fields you omit are left unchanged.
Explicitly signals a partial update. Semantically equivalent to PUT in urBackend — both merge changes into the existing document without replacing unmentioned fields.
x-api-key: sk_live_… by default. pk_live_… is accepted only when the collection has RLS enabled and the request includes Authorization: Bearer <accessToken>.
A JSON object containing the fields to update and their new values.
The owner field (e.g., `userId`) is **immutable**. If you include it in the request body with a different value, the request is rejected with `403 Owner field immutable`. Remove it from the update body entirely.When using pk_live with RLS enabled, urBackend fetches the existing document and compares its owner field against the authenticated user's ID. If they don't match, the request is rejected with 403.
const postId = '64fd1234abcd5678ef901234';
const res = await fetch(
`https://api.urbackend.in/api/data/posts/${postId}`,
{
method: 'PUT',
headers: {
'Content-Type': 'application/json',
'x-api-key': 'sk_live_YOUR_SECRET_KEY'
},
body: JSON.stringify({
title: 'Updated title',
'meta.views': 105 // Dot notation updates nested fields safely
})
}
);
const { data } = await res.json();
console.log('Updated document:', data);const postId = '64fd1234abcd5678ef901234';
const res = await fetch(
`https://api.urbackend.in/api/data/posts/${postId}`,
{
method: 'PATCH',
headers: {
'Content-Type': 'application/json',
'x-api-key': 'sk_live_YOUR_SECRET_KEY'
},
body: JSON.stringify({
title: 'Edited title only'
})
}
);
const { data } = await res.json();
console.log('Updated document:', data);const postId = '64fd1234abcd5678ef901234';
const res = await fetch(
`https://api.urbackend.in/api/data/posts/${postId}`,
{
method: 'PATCH',
headers: {
'Content-Type': 'application/json',
'x-api-key': 'pk_live_YOUR_KEY',
'Authorization': `Bearer ${accessToken}`
},
body: JSON.stringify({
title: 'My updated title'
// Do NOT include the owner field here
})
}
);
const { data } = await res.json();
console.log('Updated document:', data);curl -X PUT "https://api.urbackend.in/api/data/posts/64fd1234abcd5678ef901234" \
-H "Content-Type: application/json" \
-H "x-api-key: sk_live_YOUR_SECRET_KEY" \
-d '{"title": "Updated title", "meta.views": 105}'{
"message": "Updated",
"data": {
"_id": "64fd1234abcd5678ef901234",
"title": "Updated title",
"body": "Content goes here...",
"meta": {
"views": 105,
"likes": 12
},
"userId": "64fd0000abcd5678ef900001",
"isDeleted": false,
"deletedAt": null,
"createdAt": "2024-01-15T10:30:00.000Z",
"updatedAt": "2024-01-15T11:00:00.000Z"
}
}| Status | Cause |
|---|---|
400 Bad Request |
Schema validation failed |
401 Unauthorized |
Missing/invalid API key, or missing Bearer token on an RLS-enabled collection |
403 Forbidden |
pk_live without RLS, owner field mismatch, or attempt to change the owner field |
404 Not Found |
No document with that ID exists |