API 参考
Organizations: people, teams with roles in spaces, folder rules that limit or widen who may change what (never who sees it), single sign-on through OpenID Connect for proven email domains, and an audit export.
30 个接口 · 概览
Open url in a browser, then poll /v1/auth/sso/poll with handle. 404 when no organization signs this domain in.
emailstring必填device_namestringplatformstringcurl -X POST "https://side.example.com/v1/auth/sso/start" \
-H "Content-Type: application/json" \
-d '{"email":"[email protected]"}'{
"url": "https://hooks.example.com/side",
"handle": "handle",
"expires_at": "2026-11-14T09:30:00Z"
}200400403curl "https://side.example.com/v1/auth/sso/callback"handlestring必填curl -X POST "https://side.example.com/v1/auth/sso/poll" \
-H "Content-Type: application/json" \
-d '{"handle":"handle"}'{
"access_token": "access_token",
"refresh_token": "refresh_token",
"expires_in": 1,
"user": {
"id": "id",
"email": "[email protected]",
"display_name": "display_name",
"kind": "human"
},
"device_id": "nod_01JD7Q3A5C7E9G1J3K5M7P9R2S"
}curl "https://side.example.com/v1/orgs" \
-H "Authorization: Bearer $SIDESPACE_TOKEN"{
"items": [
{
"id": "id",
"name": "A001_C003.mov",
"role": "owner",
"members": 1,
"teams": 1,
"spaces": 1,
"created_at": "2026-11-14T09:30:00Z"
}
]
}namestring必填curl -X POST "https://side.example.com/v1/orgs" \
-H "Authorization: Bearer $SIDESPACE_TOKEN" \
-H "Content-Type: application/json" \
-d '{"name":"A001_C003.mov"}'{
"id": "id",
"name": "A001_C003.mov",
"role": "owner",
"members": 1,
"teams": 1,
"spaces": 1,
"created_at": "2026-11-14T09:30:00Z"
}curl "https://side.example.com/v1/orgs/oid" \
-H "Authorization: Bearer $SIDESPACE_TOKEN"{
"id": "id",
"name": "A001_C003.mov",
"role": "owner",
"members": 1,
"teams": 1,
"spaces": 1,
"created_at": "2026-11-14T09:30:00Z"
}curl -X PATCH "https://side.example.com/v1/orgs/oid" \
-H "Authorization: Bearer $SIDESPACE_TOKEN" \
-H "Content-Type: application/json" \
-d '{"name":"A001_C003.mov"}'{
"id": "id",
"name": "A001_C003.mov",
"role": "owner",
"members": 1,
"teams": 1,
"spaces": 1,
"created_at": "2026-11-14T09:30:00Z"
}curl "https://side.example.com/v1/orgs/oid/members" \
-H "Authorization: Bearer $SIDESPACE_TOKEN"{
"items": [
{
"user": {},
"role": "owner",
"teams": [],
"since": "2026-11-14T09:30:00Z"
}
]
}oidstring必填emailstring必填roleOrgRoleowneradminmembercurl -X POST "https://side.example.com/v1/orgs/oid/members" \
-H "Authorization: Bearer $SIDESPACE_TOKEN" \
-H "Content-Type: application/json" \
-d '{"email":"[email protected]"}'{
"user": {
"id": "id",
"email": "[email protected]",
"display_name": "display_name",
"kind": "human"
},
"role": "owner",
"teams": [
"team"
],
"since": "2026-11-14T09:30:00Z"
}oidstring必填uidstring必填owneradminmember204curl -X PATCH "https://side.example.com/v1/orgs/oid/members/usr_01JD7Q1Z3X5V7T9R1P3N5L7J9H" \
-H "Authorization: Bearer $SIDESPACE_TOKEN" \
-H "Content-Type: application/json" \
-d '{"role":"owner"}'oidstring必填uidstring必填204curl -X DELETE "https://side.example.com/v1/orgs/oid/members/usr_01JD7Q1Z3X5V7T9R1P3N5L7J9H" \
-H "Authorization: Bearer $SIDESPACE_TOKEN"curl "https://side.example.com/v1/orgs/oid/teams" \
-H "Authorization: Bearer $SIDESPACE_TOKEN"{
"items": [
{
"id": "id",
"org_id": "nod_01JD7Q3A5C7E9G1J3K5M7P9R2S",
"name": "A001_C003.mov",
"members": [],
"created_at": "2026-11-14T09:30:00Z"
}
]
}oidstring必填namestring必填curl -X POST "https://side.example.com/v1/orgs/oid/teams" \
-H "Authorization: Bearer $SIDESPACE_TOKEN" \
-H "Content-Type: application/json" \
-d '{"name":"A001_C003.mov"}'{
"id": "id",
"org_id": "nod_01JD7Q3A5C7E9G1J3K5M7P9R2S",
"name": "A001_C003.mov",
"members": [
{}
],
"created_at": "2026-11-14T09:30:00Z"
}oidstring必填tidstring必填namestring必填curl -X PATCH "https://side.example.com/v1/orgs/oid/teams/tid" \
-H "Authorization: Bearer $SIDESPACE_TOKEN" \
-H "Content-Type: application/json" \
-d '{"name":"A001_C003.mov"}'{
"id": "id",
"org_id": "nod_01JD7Q3A5C7E9G1J3K5M7P9R2S",
"name": "A001_C003.mov",
"members": [
{}
],
"created_at": "2026-11-14T09:30:00Z"
}oidstring必填tidstring必填204curl -X DELETE "https://side.example.com/v1/orgs/oid/teams/tid" \
-H "Authorization: Bearer $SIDESPACE_TOKEN"oidstring必填tidstring必填emailstring必填curl -X POST "https://side.example.com/v1/orgs/oid/teams/tid/members" \
-H "Authorization: Bearer $SIDESPACE_TOKEN" \
-H "Content-Type: application/json" \
-d '{"email":"[email protected]"}'{
"id": "id",
"email": "[email protected]",
"display_name": "display_name",
"kind": "human"
}oidstring必填tidstring必填uidstring必填204curl -X DELETE "https://side.example.com/v1/orgs/oid/teams/tid/members/usr_01JD7Q1Z3X5V7T9R1P3N5L7J9H" \
-H "Authorization: Bearer $SIDESPACE_TOKEN"oidstring必填curl "https://side.example.com/v1/orgs/oid/spaces" \
-H "Authorization: Bearer $SIDESPACE_TOKEN"{
"items": [
{
"id": "id",
"name": "A001_C003.mov",
"owner_id": "nod_01JD7Q3A5C7E9G1J3K5M7P9R2S",
"teams": []
}
]
}oidstring必填curl "https://side.example.com/v1/orgs/oid/sso" \
-H "Authorization: Bearer $SIDESPACE_TOKEN"{
"issuer": "issuer",
"client_id": "nod_01JD7Q3A5C7E9G1J3K5M7P9R2S",
"client_secret": "client_secret",
"domains": [
"domain"
],
"required": false,
"redirect_uri": "redirect_uri",
"domain_proof": "domain_proof",
"updated_at": "2026-11-14T09:30:00Z"
}The issuer must answer OpenID discovery over https. Each new domain must carry the DNS TXT record _sidespace.
oidstring必填curl -X PUT "https://side.example.com/v1/orgs/oid/sso" \
-H "Authorization: Bearer $SIDESPACE_TOKEN" \
-H "Content-Type: application/json" \
-d '{"issuer":"issuer","client_id":"nod_01JD7Q3A5C7E9G1J3K5M7P9R2S","domains":["domain"]}'{
"issuer": "issuer",
"client_id": "nod_01JD7Q3A5C7E9G1J3K5M7P9R2S",
"client_secret": "client_secret",
"domains": [
"domain"
],
"required": false,
"redirect_uri": "redirect_uri",
"domain_proof": "domain_proof",
"updated_at": "2026-11-14T09:30:00Z"
}oidstring必填204curl -X DELETE "https://side.example.com/v1/orgs/oid/sso" \
-H "Authorization: Bearer $SIDESPACE_TOKEN"oidstring必填sincestringuntilstringformatstringjsonlcsvcurl "https://side.example.com/v1/orgs/oid/audit" \
-H "Authorization: Bearer $SIDESPACE_TOKEN"Taking it out drops its teams' roles.
sidstring必填org_idstring必填curl -X PUT "https://side.example.com/v1/spaces/spc_01JD7Q2M8X4V6N0R3T5W9Y1B2C/org" \
-H "Authorization: Bearer $SIDESPACE_TOKEN" \
-H "Content-Type: application/json" \
-d '{"org_id":"nod_01JD7Q3A5C7E9G1J3K5M7P9R2S"}'{
"id": "id",
"name": "A001_C003.mov",
"role": "viewer",
"owner_id": "nod_01JD7Q3A5C7E9G1J3K5M7P9R2S",
"root_node_id": "nod_01JD7Q3A5C7E9G1J3K5M7P9R2S",
"journal_seq": 1,
"created_at": "2026-11-14T09:30:00Z",
"storage_id": "nod_01JD7Q3A5C7E9G1J3K5M7P9R2S",
"fork": {
"from_space_id": "nod_01JD7Q3A5C7E9G1J3K5M7P9R2S",
"path": "Ep01/Shots/A001_C003.mov",
"at_seq": 1
},
"org_id": "nod_01JD7Q3A5C7E9G1J3K5M7P9R2S"
}sidstring必填curl "https://side.example.com/v1/spaces/spc_01JD7Q2M8X4V6N0R3T5W9Y1B2C/teams" \
-H "Authorization: Bearer $SIDESPACE_TOKEN"{
"items": [
{
"id": "id",
"name": "A001_C003.mov",
"role": "viewer"
}
]
}sidstring必填tidstring必填viewercommentereditormanagercurl -X PUT "https://side.example.com/v1/spaces/spc_01JD7Q2M8X4V6N0R3T5W9Y1B2C/teams/tid" \
-H "Authorization: Bearer $SIDESPACE_TOKEN" \
-H "Content-Type: application/json" \
-d '{"role":"viewer"}'{
"id": "id",
"name": "A001_C003.mov",
"role": "viewer"
}sidstring必填tidstring必填204curl -X DELETE "https://side.example.com/v1/spaces/spc_01JD7Q2M8X4V6N0R3T5W9Y1B2C/teams/tid" \
-H "Authorization: Bearer $SIDESPACE_TOKEN"sidstring必填200itemsFolderAccess[]必填node_idstring必填pathstring必填default_roleRole | any必填grantsFolderGrant[]必填kindstring必填userteamidstringviewercommentereditormanagernamestringupdated_bystringupdated_atTimestampcurl "https://side.example.com/v1/spaces/spc_01JD7Q2M8X4V6N0R3T5W9Y1B2C/folder-access" \
-H "Authorization: Bearer $SIDESPACE_TOKEN"{
"items": [
{
"node_id": "nod_01JD7Q3A5C7E9G1J3K5M7P9R2S",
"path": "Ep01/Shots/A001_C003.mov",
"default_role": "viewer",
"grants": [],
"updated_by": "updated_by",
"updated_at": "2026-11-14T09:30:00Z"
}
]
}sidstring必填nidstring必填curl "https://side.example.com/v1/spaces/spc_01JD7Q2M8X4V6N0R3T5W9Y1B2C/nodes/nod_01JD7Q3A5C7E9G1J3K5M7P9R2S/access" \
-H "Authorization: Bearer $SIDESPACE_TOKEN"{
"role": "viewer",
"space_role": "viewer",
"governed_by": {
"node_id": "nod_01JD7Q3A5C7E9G1J3K5M7P9R2S",
"path": "Ep01/Shots/A001_C003.mov",
"default_role": "viewer",
"grants": [],
"updated_by": "updated_by",
"updated_at": "2026-11-14T09:30:00Z"
}
}The nearest folder with rules decides for everything under it. A grant may exceed the person's space role; default_role caps everyone else. Managers are never limited. Rules decide what may be changed, not what is seen.
sidstring必填nidstring必填default_roleRole | anygrantsFolderGrant[]必填kindstring必填userteamidstringviewercommentereditormanagernamestringcurl -X PUT "https://side.example.com/v1/spaces/spc_01JD7Q2M8X4V6N0R3T5W9Y1B2C/nodes/nod_01JD7Q3A5C7E9G1J3K5M7P9R2S/access" \
-H "Authorization: Bearer $SIDESPACE_TOKEN" \
-H "Content-Type: application/json" \
-d '{"grants":[{}]}'{
"node_id": "nod_01JD7Q3A5C7E9G1J3K5M7P9R2S",
"path": "Ep01/Shots/A001_C003.mov",
"default_role": "viewer",
"grants": [
{}
],
"updated_by": "updated_by",
"updated_at": "2026-11-14T09:30:00Z"
}sidstring必填nidstring必填204curl -X DELETE "https://side.example.com/v1/spaces/spc_01JD7Q2M8X4V6N0R3T5W9Y1B2C/nodes/nod_01JD7Q3A5C7E9G1J3K5M7P9R2S/access" \
-H "Authorization: Bearer $SIDESPACE_TOKEN"