Create a new record, or a new version of an existing record.
POST https://baq.run/api/alice/records
id RecordId optional
Unique identifier of the record.
Defaults to a new random ID if missing.
created_at RecordDate optional
Creation date of the record.
Defaults to the current date if missing.
permissions RecordPermissions optional
Permissions for the record.
Defaults to private permissions if missing.
type VersionLink
content object
author EntityLink optional
Author of the record to update.
Defaults to the user if missing.
id RecordId
version object
Version-specific properties:
parent_hash VersionHash
created_at RecordDate optional
Creation date of the record version.
Defaults to the current date if missing.
permissions RecordPermissions optional
type VersionLink optional
content object
author EntityLink optional
Author of the record to delete.
Defaults to the user if missing.
id RecordId
version object
Version-specific properties:
parent_hash VersionHash
created_at RecordDate optional
Creation date of the record version.
Defaults to the current date if missing.
no_content object optional
Deletion options:
action enum optional
Type of deletion to perform:
delete: Standard deletion, propagated to others.
local: Only delete from the user’s server, not propagated.
leave: Remove our user without deleting for others.
Defaults to delete if missing.
X-Baq-Credentials: ... optional
Properties:
algorithm="..." enum : Signature algorithm.
public_key="..." string : Base64 encoded public key.
Only include in the request when creating a new App or Relationship record.
include_links string[] optional
Paths of links to include in the response (comma-separated).
Supports the following special values:
entity: Entity records for all entity links.
existential: All records for existential record links.
Defaults to entity,existential.
This endpoint is idempotent if the following properties are provided:
id
created_at / version.created_at
All links in a new record will be validated and must point to existing and accessible entities, records, and blobs.
This endpoint is atomic and the record is guaranteed to be visible in all other queries after the request completes.
X-Baq-Credentials: ... optional
Properties:
algorithm="..." enum : Signature algorithm.
public_key="..." string : Base64 encoded public key.
Only part of the response when creating a new App or Relationship record.
Creating a new record only requires a type and content. Here, we create a new Post record with a short text message, and we make it public for everyone to read.
POST /api/alice/records HTTP/2
Host: baq.run
Content-Type: application/json
{
"type": {
"entity": "types.baq.dev",
"record_id": "6ee7f69a90154b849bac528daa942bcd",
"version_hash": "93ca1149e00ab963ea4b29772769e20330c356bb4b6ae787d3af9168e81d1687"
},
"content": {
"text": "Hi everyone!"
},
"permissions": {
"read": "public"
}
}
In the response, the server has assigned the record a random ID and set the current date where needed. A hash of the record was also generated to uniquely identify this version of it.
HTTP/2 200 OK
Content-Type: application/json
{
"record": {
"author": {
"entity": "alice.baq.run"
},
"id": "867deccbe7ac4adca4efc07fbe08af87",
"source": "self",
"created_at": "2024-03-05T16:50:17.9080000Z",
"received_at": "2024-03-05T16:50:20.4850000Z",
"version": {
"author": {
"entity": "alice.baq.run"
},
"hash": "563bebcafec0aea26d88384564d721b3026b27a42263200f7aee09366763630d",
"created_at": "2024-03-05T16:50:17.9080000Z",
"received_at": "2024-03-05T16:50:20.4850000Z"
},
"permissions": {
"read": "public"
},
"type": {
"entity": "types.baq.dev",
"record_id": "6ee7f69a90154b849bac528daa942bcd",
"version_hash": "93ca1149e00ab963ea4b29772769e20330c356bb4b6ae787d3af9168e81d1687"
},
"content": {
"text": "Hi everyone!"
}
},
"linked_records": []
}
Specifying the id and created_at fields in the request makes it possible to replay it multiple times without creating multiple records. The server will always return the exact same response.
POST /api/alice/records HTTP/2
Host: baq.run
Content-Type: application/json
{
"id": "4c093b447c834e3ba62bc69c7ca7069f",
"created_at": "2024-03-05T16:50:17.9080000Z",
"type": {
"entity": "types.baq.dev",
"record_id": "6ee7f69a90154b849bac528daa942bcd",
"version_hash": "93ca1149e00ab963ea4b29772769e20330c356bb4b6ae787d3af9168e81d1687"
},
"content": {
"text": "Hi everyone!"
},
"permissions": {
"read": "public"
}
}
To update a record authored by the user, we only need to specify the id of the record, the parent_hash of the version to update, and the updated content to use.
POST /api/alice/records HTTP/2
Host: baq.run
Content-Type: application/json
{
"id": "4c093b447c834e3ba62bc69c7ca7069f",
"version": {
"parent_hash": "93ca1149e00ab963ea4b29772769e20330c356bb4b6ae787d3af9168e81d1687"
},
"content": {
"text": "Bye everyone!"
}
}
To delete a record, we omit the content property. A no_content object can be provided to specify the deletion behavior.
POST /api/alice/records HTTP/2
Host: baq.run
Content-Type: application/json
{
"id": "4c093b447c834e3ba62bc69c7ca7069f",
"version": {
"parent_hash": "93ca1149e00ab963ea4b29772769e20330c356bb4b6ae787d3af9168e81d1687"
},
"no_content": {
"action": "delete"
}
}