Skip to content

Commit 1–50 signed, encrypted operations (optimistic concurrency on revision ids)

POST
/v1/pouches/{pouchId}/operations
curl --request POST \
--url https://app.skillpouch.net/v1/pouches/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0/operations \
--header 'Content-Type: application/json' \
--data '{ "operation_id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "epoch": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "ops": [ { "type": "create", "artifact_id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "revision_id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "base_revision_id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "merge_parent_id": null, "name_index": null, "conflict_id": null, "key_gen": 1, "envelope": "example", "signature": "example", "signer_member_id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "blob_ids": [ "example" ] } ] }'

CLI devices must also send Skillpouch-Signature: a detached ES256 JWS over base64url(BLAKE3(canonical JSON body)).

pouchId
required
string format: uuid
/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/
Media typeapplication/json
object
operation_id
required
string format: uuid
/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/
epoch
required
string format: uuid
/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/
ops
required
Array<object>
>= 1 items <= 50 items
object
type
required
string
Allowed values: create update rename delete restore resolve
artifact_id
required
string format: uuid
/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/
revision_id
required
string format: uuid
/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/
base_revision_id
required
Any of:
string format: uuid
/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/
merge_parent_id
Any of:
string format: uuid
/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/
name_index
Any of:
string
/^[A-Za-z0-9_-]{43}$/
conflict_id
Any of:
string format: uuid
/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/
key_gen
required
integer
>= 1 <= 9007199254740991
envelope
required
string
<= 699051 characters /^[A-Za-z0-9_-]*$/
signature
required
string
<= 342 characters /^[A-Za-z0-9_-]*$/
signer_member_id
required
string format: uuid
/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/
blob_ids
required
Array<string>
<= 2000 items

Default Response

Media typeapplication/json
object
ok
required
boolean
data
required
object
results
required
Array
One of:
object
status
required
string
Allowed values: applied
artifact_id
required
string format: uuid
/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/
revision_id
required
string format: uuid
/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/
seq
required
integer
>= -9007199254740991 <= 9007199254740991
high_water
required
integer
>= -9007199254740991 <= 9007199254740991
meta
required
object
request_id
required
string
next_cursor
string | null

Example

{
"ok": true,
"data": {
"results": [
{
"status": "applied"
}
]
}
}