POST {{triliumHost}}/etapi/create-note
Authorization: {{authToken}}
Content-Type: application/json

{
  "parentNoteId": "root",
  "title": "Hello",
  "type": "text",
  "content": "Hi there!"
}

> {%
    client.global.set("createdNoteId", response.body.note.noteId);
    client.global.set("createdBranchId", response.body.branch.branchId);
%}

###

POST {{triliumHost}}/etapi/attributes
Authorization: {{authToken}}
Content-Type: application/json

{
  "noteId": "{{createdNoteId}}",
  "type": "label",
  "name": "mylabel",
  "value": "val",
  "isInheritable": true
}

> {% client.global.set("createdAttributeId", response.body.attributeId); %}

###

PATCH {{triliumHost}}/etapi/attributes/{{createdAttributeId}}
Authorization: {{authToken}}
Content-Type: application/json

{
  "value": "CHANGED"
}

###

GET {{triliumHost}}/etapi/attributes/{{createdAttributeId}}
Authorization: {{authToken}}

> {%        
client.assert(response.body.value === "CHANGED");
%}

###

PATCH {{triliumHost}}/etapi/attributes/{{createdAttributeId}}
Authorization: {{authToken}}
Content-Type: application/json

{
  "noteId": "root"
}

> {% 
    client.assert(response.status === 400); 
    client.assert(response.body.code == "PROPERTY_NOT_ALLOWED");
%}

###

PATCH {{triliumHost}}/etapi/attributes/{{createdAttributeId}}
Authorization: {{authToken}}
Content-Type: application/json

{
  "value": null
}

> {% 
    client.assert(response.status === 400); 
    client.assert(response.body.code == "PROPERTY_VALIDATION_ERROR");
%}