Coda Project Doc Permissions API
This API lets you manage sharing and permissions for your docs.
This API lets you manage sharing and permissions for your docs.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/coda-project-doc-permissions-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
version: 0.0.2
title: Superhuman Docs Admin Doc Permissions API
license:
name: Superhuman Developer Terms
url: https://docs.superhuman.com/trust/developer
description: '# Introduction
The Superhuman Docs Admin API is a RESTful API that allows programmatic access to administrative reports & capabilities within Superhuman Docs (formerly Coda).'
termsOfService: https://superhuman.com/legal/terms
contact:
name: Developer Support
url: https://superhuman.com/developers
email: care@superhuman.com
x-logo:
url: https://cdn.coda.io/icons/png/color/superhuman-docs-128.png
backgroundColor: transparent
altText: Superhuman Docs Admin API
href: '#'
servers:
- url: https://docs.superhuman.com/apis/admin/v1
description: Superhuman Docs Admin API (v1)
security:
- Bearer: []
tags:
- name: Doc Permissions
description: This API lets you manage sharing and permissions for your docs.
paths:
/organizations/{organizationId}/workspaces/{workspaceId}/docs/{docId}/acl/permissions:
get:
summary: List doc permissions
description: Returns a list of permissions for this doc
operationId: listDocPermissionsV2
tags:
- Doc Permissions
parameters:
- $ref: '#/components/parameters/organizationId'
- $ref: '#/components/parameters/workspaceId'
- $ref: '#/components/parameters/docId'
- $ref: '#/components/parameters/limit'
- $ref: '#/components/parameters/pageToken'
responses:
'200':
description: List of permissions for a doc.
content:
application/json:
schema:
$ref: '#/components/schemas/Acl'
'400':
$ref: '#/components/responses/BadRequestError'
'401':
$ref: '#/components/responses/UnauthorizedError'
'403':
$ref: '#/components/responses/ForbiddenError'
'404':
$ref: '#/components/responses/NotFoundError'
'429':
$ref: '#/components/responses/TooManyRequestsError'
x-codeSamples:
- label: Python 3.13
lang: python
source: 'import requests
headers = {''Authorization'': ''Bearer <your API token>''}
uri = ''https://docs.superhuman.com/apis/admin/v1/organizations/<your organization id>/docs/<your doc id>/acl/permissions''
res = requests.get(uri, headers=headers).json()
print(f''First user with access is {res["items"][0]["principal"]["email"]}'')
# => First user with access is foo@bar.com
'
- label: Shell
lang: shell
source: "curl -s -H 'Authorization: Bearer <your API token>' \\\n 'https://docs.superhuman.com/apis/admin/v1/organizations/<your organization id>/docs/<your doc id>/acl/permissions' |\n jq '.items[].principal.email'\n# => \"foo@bar.com\", \"baz@bar.com\"\n"
post:
summary: Add permission to a doc
description: Adds a new permission to the doc.
operationId: addDocPermissionV2
tags:
- Doc Permissions
parameters:
- $ref: '#/components/parameters/organizationId'
- $ref: '#/components/parameters/workspaceId'
- $ref: '#/components/parameters/docId'
requestBody:
description: Parameters for adding the new permission.
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/AddPermissionRequest'
responses:
'200':
description: Confirmation that the request was applied.
content:
application/json:
schema:
$ref: '#/components/schemas/AddPermissionResult'
'400':
$ref: '#/components/responses/BadRequestError'
'401':
$ref: '#/components/responses/UnauthorizedError'
'403':
$ref: '#/components/responses/ForbiddenError'
'404':
$ref: '#/components/responses/NotFoundError'
'429':
$ref: '#/components/responses/TooManyRequestsError'
x-codeSamples:
- label: Python 3.13
lang: python
source: "import requests\n\nheaders = {'Authorization': 'Bearer <your API token>'}\nuri = f'https://docs.superhuman.com/apis/admin/v1/organizations/<your organization id>/docs/<doc ID>/acl/permissions'\npayload = {\n 'access': 'write',\n 'principal': {\n 'type': 'email',\n 'email': 'foo@bar.com'\n },\n}\nres = requests.post(uri, headers=headers, json=payload)\n\n# => Grant 'foo@bar.com' write access to the doc and send a share notification email\n"
- label: Shell
lang: shell
source: "curl -s -H 'Authorization: Bearer <your API token>' -X POST \\\n 'https://docs.superhuman.com/apis/admin/v1/organizations/<your organization id>/docs/<doc ID>/acl/permissions' \\\n -d '{\"access\": \"write\", \"principal\": {\"type\": \"email\", \"email\": \"foo@bar.com\"}}'\n# => Grant 'foo@bar.com' write access to the doc and send a share notification email\n"
/organizations/{organizationId}/workspaces/{workspaceId}/docs/{docId}/acl/permissions/{docPermissionId}:
delete:
summary: Delete doc permission
description: Deletes an existing permission.
operationId: deleteDocPermissionV2
tags:
- Doc Permissions
parameters:
- $ref: '#/components/parameters/organizationId'
- $ref: '#/components/parameters/workspaceId'
- $ref: '#/components/parameters/docId'
- $ref: '#/components/parameters/docPermissionId'
responses:
'200':
description: Confirmation that the request was applied.
content:
application/json:
schema:
$ref: '#/components/schemas/DeletePermissionResult'
'400':
$ref: '#/components/responses/BadRequestError'
'401':
$ref: '#/components/responses/UnauthorizedError'
'403':
$ref: '#/components/responses/ForbiddenError'
'404':
$ref: '#/components/responses/NotFoundError'
'429':
$ref: '#/components/responses/TooManyRequestsError'
x-codeSamples:
- label: Python 3.13
lang: python
source: 'import requests
headers = {''Authorization'': ''Bearer <your API token>''}
uri = f''https://docs.superhuman.com/apis/admin/v1/organizations/<your organization id>/docs/<doc ID>/acl/permissions/<permission ID>''
res = requests.delete(uri, headers=headers, json=payload)
# => Revoke access to the doc
'
- label: Shell
lang: shell
source: "curl -s -H 'Authorization: Bearer <your API token>' -X DELETE \\\n 'https://docs.superhuman.com/apis/admin/v1/organizations/<your organization id>/docs/<doc ID>/acl/permissions/<permission ID>'\n# => Revoke access to the doc\n"
/organizations/{organizationId}/docs/{docId}/acl/permissions:
get:
deprecated: true
summary: List doc permissions
description: Returns a list of permissions for this doc
operationId: listDocPermissions
tags:
- Doc Permissions
parameters:
- $ref: '#/components/parameters/organizationId'
- $ref: '#/components/parameters/docId'
- $ref: '#/components/parameters/limit'
- $ref: '#/components/parameters/pageToken'
responses:
'200':
description: List of permissions for a doc.
content:
application/json:
schema:
$ref: '#/components/schemas/Acl'
'400':
$ref: '#/components/responses/BadRequestError'
'401':
$ref: '#/components/responses/UnauthorizedError'
'403':
$ref: '#/components/responses/ForbiddenError'
'404':
$ref: '#/components/responses/NotFoundError'
'429':
$ref: '#/components/responses/TooManyRequestsError'
x-codeSamples:
- label: Python 3.13
lang: python
source: 'import requests
headers = {''Authorization'': ''Bearer <your API token>''}
uri = ''https://docs.superhuman.com/apis/admin/v1/organizations/<your organization id>/docs/<your doc id>/acl/permissions''
res = requests.get(uri, headers=headers).json()
print(f''First user with access is {res["items"][0]["principal"]["email"]}'')
# => First user with access is foo@bar.com
'
- label: Shell
lang: shell
source: "curl -s -H 'Authorization: Bearer <your API token>' \\\n 'https://docs.superhuman.com/apis/admin/v1/organizations/<your organization id>/docs/<your doc id>/acl/permissions' |\n jq '.items[].principal.email'\n# => \"foo@bar.com\", \"baz@bar.com\"\n"
post:
deprecated: true
summary: Add permission to a doc
description: Adds a new permission to the doc.
operationId: addDocPermission
tags:
- Doc Permissions
parameters:
- $ref: '#/components/parameters/organizationId'
- $ref: '#/components/parameters/docId'
requestBody:
description: Parameters for adding the new permission.
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/AddPermissionRequest'
responses:
'200':
description: Confirmation that the request was applied.
content:
application/json:
schema:
$ref: '#/components/schemas/AddPermissionResult'
'400':
$ref: '#/components/responses/BadRequestError'
'401':
$ref: '#/components/responses/UnauthorizedError'
'403':
$ref: '#/components/responses/ForbiddenError'
'404':
$ref: '#/components/responses/NotFoundError'
'429':
$ref: '#/components/responses/TooManyRequestsError'
x-codeSamples:
- label: Python 3.13
lang: python
source: "import requests\n\nheaders = {'Authorization': 'Bearer <your API token>'}\nuri = f'https://docs.superhuman.com/apis/admin/v1/organizations/<your organization id>/docs/<doc ID>/acl/permissions'\npayload = {\n 'access': 'write',\n 'principal': {\n 'type': 'email',\n 'email': 'foo@bar.com'\n },\n}\nres = requests.post(uri, headers=headers, json=payload)\n\n# => Grant 'foo@bar.com' write access to the doc and send a share notification email\n"
- label: Shell
lang: shell
source: "curl -s -H 'Authorization: Bearer <your API token>' -X POST \\\n 'https://docs.superhuman.com/apis/admin/v1/organizations/<your organization id>/docs/<doc ID>/acl/permissions' \\\n -d '{\"access\": \"write\", \"principal\": {\"type\": \"email\", \"email\": \"foo@bar.com\"}}'\n# => Grant 'foo@bar.com' write access to the doc and send a share notification email\n"
/organizations/{organizationId}/docs/{docId}/acl/permissions/{docPermissionId}:
delete:
deprecated: true
summary: Delete doc permission
description: Deletes an existing permission.
operationId: deleteDocPermission
tags:
- Doc Permissions
parameters:
- $ref: '#/components/parameters/organizationId'
- $ref: '#/components/parameters/docId'
- $ref: '#/components/parameters/docPermissionId'
responses:
'200':
description: Confirmation that the request was applied.
content:
application/json:
schema:
$ref: '#/components/schemas/DeletePermissionResult'
'400':
$ref: '#/components/responses/BadRequestError'
'401':
$ref: '#/components/responses/UnauthorizedError'
'403':
$ref: '#/components/responses/ForbiddenError'
'404':
$ref: '#/components/responses/NotFoundError'
'429':
$ref: '#/components/responses/TooManyRequestsError'
x-codeSamples:
- label: Python 3.13
lang: python
source: 'import requests
headers = {''Authorization'': ''Bearer <your API token>''}
uri = f''https://docs.superhuman.com/apis/admin/v1/organizations/<your organization id>/docs/<doc ID>/acl/permissions/<permission ID>''
res = requests.delete(uri, headers=headers, json=payload)
# => Revoke access to the doc
'
- label: Shell
lang: shell
source: "curl -s -H 'Authorization: Bearer <your API token>' -X DELETE \\\n 'https://docs.superhuman.com/apis/admin/v1/organizations/<your organization id>/docs/<doc ID>/acl/permissions/<permission ID>'\n# => Revoke access to the doc\n"
components:
schemas:
WorkspacePrincipal:
type: object
required:
- type
- workspaceId
additionalProperties: false
properties:
type:
type: string
description: The type of this principal.
enum:
- workspace
x-tsType: PrincipalType.Workspace
workspaceId:
type: string
description: WorkspaceId for the principal.
example: ws-sdfmsdf9
AddedEmailPrincipal:
type: object
required:
- email
- type
additionalProperties: false
properties:
type:
type: string
description: The type of this principal.
enum:
- email
x-tsType: PrincipalType.Email
email:
type: string
description: Email for the principal.
example: example@domain.com
EmailPrincipal:
type: object
required:
- email
- type
additionalProperties: false
properties:
type:
type: string
description: The type of this principal.
enum:
- email
x-tsType: PrincipalType.Email
email:
type: string
description: Email for the principal.
example: example@domain.com
AddedPrincipal:
x-schema-name: AddedPrincipal
description: Metadata about a principal to add to a doc.
oneOf:
- $ref: '#/components/schemas/AddedEmailPrincipal'
- $ref: '#/components/schemas/AddedGroupPrincipal'
- $ref: '#/components/schemas/AddedDomainPrincipal'
- $ref: '#/components/schemas/AddedWorkspacePrincipal'
- $ref: '#/components/schemas/AddedAnyonePrincipal'
discriminator:
propertyName: type
mapping:
email: '#/components/schemas/AddedEmailPrincipal'
group: '#/components/schemas/AddedGroupPrincipal'
domain: '#/components/schemas/AddedDomainPrincipal'
workspace: '#/components/schemas/AddedWorkspacePrincipal'
anyone: '#/components/schemas/AddedAnyonePrincipal'
NextPageToken:
description: If specified, an opaque token used to fetch the next page of results.
type: string
example: eyJsaW1pd
AddPermissionRequest:
x-schema-name: AddPermissionRequest
description: Payload for granting a new permission.
type: object
required:
- access
- principal
additionalProperties: false
properties:
access:
$ref: '#/components/schemas/AccessTypeNotNone'
principal:
$ref: '#/components/schemas/AddedPrincipal'
suppressEmail:
type: boolean
description: When true suppresses email notification
bypassOrgExternalSharingRestrictions:
type: boolean
description: When true bypasses organization external sharing restrictions
AddedGroupPrincipal:
type: object
required:
- groupId
- type
additionalProperties: false
properties:
type:
type: string
description: The type of this principal.
enum:
- group
x-tsType: PrincipalType.Group
groupId:
type: string
description: Group ID for the principal.
example: grp-6SM9xrKcqW
AddPermissionResult:
x-schema-name: AddPermissionResult
description: The result of adding a permission.
type: object
additionalProperties: false
properties: {}
AddedWorkspacePrincipal:
type: object
required:
- type
- workspaceId
additionalProperties: false
properties:
type:
type: string
description: The type of this principal.
enum:
- workspace
x-tsType: PrincipalType.Workspace
workspaceId:
type: string
description: WorkspaceId for the principal.
example: ws-sdfmsdf9
DomainPrincipal:
type: object
required:
- domain
- type
additionalProperties: false
properties:
type:
type: string
description: The type of this principal.
enum:
- domain
x-tsType: PrincipalType.Domain
domain:
type: string
description: Domain for the principal.
example: domain.com
AddedDomainPrincipal:
type: object
required:
- domain
- type
additionalProperties: false
properties:
type:
type: string
description: The type of this principal.
enum:
- domain
x-tsType: PrincipalType.Domain
domain:
type: string
description: Domain for the principal.
example: domain.com
AnyonePrincipal:
type: object
required:
- type
additionalProperties: false
properties:
type:
type: string
description: The type of this principal.
enum:
- anyone
x-tsType: PrincipalType.Anyone
DeletePermissionResult:
x-schema-name: DeletePermissionResult
description: The result of deleting a permission.
type: object
additionalProperties: false
properties: {}
NextPageLink:
description: If specified, a link that can be used to fetch the next page of results.
type: string
format: url
Permission:
x-schema-name: Permission
description: A specific permission granted to a principal.
type: object
required:
- type
- principal
- id
- access
additionalProperties: false
properties:
type:
type: string
description: The type of this resource.
enum:
- permission
x-tsType: Type.Permission
principal:
$ref: '#/components/schemas/Principal'
id:
type: string
description: ID for the Permission
access:
$ref: '#/components/schemas/AccessType'
Principal:
x-schema-name: Principal
description: Metadata about a principal.
oneOf:
- $ref: '#/components/schemas/EmailPrincipal'
- $ref: '#/components/schemas/GroupPrincipal'
- $ref: '#/components/schemas/DomainPrincipal'
- $ref: '#/components/schemas/WorkspacePrincipal'
- $ref: '#/components/schemas/AnyonePrincipal'
discriminator:
propertyName: type
mapping:
email: '#/components/schemas/EmailPrincipal'
group: '#/components/schemas/GroupPrincipal'
domain: '#/components/schemas/DomainPrincipal'
workspace: '#/components/schemas/WorkspacePrincipal'
anyone: '#/components/schemas/AnyonePrincipal'
AddedAnyonePrincipal:
type: object
required:
- type
additionalProperties: false
properties:
type:
type: string
description: The type of this principal.
enum:
- anyone
x-tsType: PrincipalType.Anyone
AccessTypeNotNone:
x-schema-name: AccessTypeNotNone
description: Type of access (excluding none).
type: string
enum:
- readonly
- write
- comment
x-tsEnumNames:
- ReadOnly
- Write
- Comment
GroupPrincipal:
type: object
required:
- groupId
- groupName
- type
additionalProperties: false
properties:
type:
type: string
description: The type of this principal.
enum:
- group
x-tsType: PrincipalType.Group
groupId:
type: string
description: Group ID for the principal.
example: grp-6SM9xrKcqW
groupName:
type: string
description: Name of the group.
example: Marketing team
Acl:
x-schema-name: Acl
description: Paginated list of Permissions.
type: object
required:
- items
additionalProperties: false
properties:
items:
type: array
items:
$ref: '#/components/schemas/Permission'
href:
type: string
format: url
description: API link to these results
nextPageToken:
$ref: '#/components/schemas/NextPageToken'
nextPageLink:
allOf:
- $ref: '#/components/schemas/NextPageLink'
- type: string
AccessType:
x-schema-name: AccessType
description: Type of access.
type: string
enum:
- readonly
- write
- comment
- none
x-tsEnumNames:
- ReadOnly
- Write
- Comment
- None
parameters:
organizationId:
name: organizationId
description: ID of the organization.
in: path
required: true
example: org-AbCDeFGHIj
schema:
type: string
pageToken:
name: pageToken
description: An opaque token used to fetch the next page of results.
in: query
example: eyJsaW1pd
schema:
type: string
workspaceId:
name: workspaceId
description: ID of the workspace.
in: path
required: true
example: ws-AbCDeFGHIj
schema:
type: string
limit:
name: limit
description: Maximum number of results to return in this query.
in: query
example: 10
schema:
type: integer
minimum: 1
default: 100
maximum: 500
docId:
name: docId
description: ID of the doc.
in: path
required: true
example: d-AbCDeFGHIj
schema:
type: string
docPermissionId:
name: docPermissionId
description: ID of a permission on an doc.
in: path
required: true
example: f88ba9d9-037d-41df-a49c-49798701ed41
schema:
type: string
format: uuid
responses:
NotFoundError:
description: The resource could not be located with the current API token.
content:
application/json:
schema:
description: An HTTP error resulting from an unsuccessful request.
required:
- statusCode
- statusMessage
- message
additionalProperties: false
properties:
statusCode:
type: number
description: HTTP status code of the error.
example: 404
statusMessage:
type: string
description: HTTP status message of the error.
example: Not Found
message:
type: string
description: Any additional context on the error, or the same as `statusMessage` otherwise.
example: Not Found
TooManyRequestsError:
description: The client has sent too many requests.
content:
application/json:
schema:
description: An HTTP error resulting from an unsuccessful request.
required:
- statusCode
- statusMessage
- message
additionalProperties: false
properties:
statusCode:
type: number
description: HTTP status code of the error.
example: 429
statusMessage:
type: string
description: HTTP status message of the error.
example: Too Many Requests
message:
type: string
description: Any additional context on the error, or the same as `statusMessage` otherwise.
example: Too Many Requests
ForbiddenError:
description: The API token does not grant access to this resource.
content:
application/json:
schema:
description: An HTTP error resulting from an unsuccessful request.
required:
- statusCode
- statusMessage
- message
additionalProperties: false
properties:
statusCode:
type: number
description: HTTP status code of the error.
example: 403
statusMessage:
type: string
description: HTTP status message of the error.
example: Forbidden
message:
type: string
description: Any additional context on the error, or the same as `statusMessage` otherwise.
example: Forbidden
BadRequestError:
description: The request parameters did not conform to expectations.
content:
application/json:
schema:
description: An HTTP error resulting from an unsuccessful request.
required:
- statusCode
- statusMessage
- message
additionalProperties: false
properties:
statusCode:
type: number
description: HTTP status code of the error.
example: 400
statusMessage:
type: string
description: HTTP status message of the error.
example: Bad Request
message:
type: string
description: Any additional context on the error, or the same as `statusMessage` otherwise.
example: Bad Request
UnauthorizedError:
description: The API token is invalid or has expired.
content:
application/json:
schema:
description: An HTTP error resulting from an unsuccessful request.
required:
- statusCode
- statusMessage
- message
additionalProperties: false
properties:
statusCode:
type: number
description: HTTP status code of the error.
example: 401
statusMessage:
type: string
description: HTTP status message of the error.
example: Unauthorized
message:
type: string
description: Any additional context on the error, or the same as `statusMessage` otherwise.
example: Unauthorized
securitySchemes:
Bearer:
description: 'The Superhuman Docs Admin API can be accessed using an API token, which can be obtained from [*My account*](https://docs.superhuman.com/account)
in Superhuman Docs. This token should be specified by setting a header as follows.
```Authorization: Bearer <api_token>```
Keep your token safe, as anyone who gets access to it can access your account. Once a token is created
it cannot be viewed or modified, so don''t lose it.
'
type: http
scheme: bearer
bearerFormat: UUID
x-tagGroups:
- name: API Tokens
tags:
- API Tokens
- name: Docs
tags:
- Docs
- Doc Permissions
- Doc Export
- name: Doc Structure
tags:
- Pages
- name: Events
tags:
- Events
- name: Folders
tags:
- Folders
- Folder Permissions
- name: Groups
tags:
- Groups
- name: Import
tags:
- Preferences
- name: LegalHolds
tags:
- LegalHolds
- name: Organizations
tags:
- Organizations
- Organization Users
- Pack Controls
- Pack Configurations
- name: Packs
tags:
- Packs
- name: Webhooks
tags:
- Webhooks
- name: Workspaces
tags:
- Workspaces
- Workspace Users