Credo GraphQL API

Professional document sealing, verification, and credential management API.

Getting Started

The Credo API uses GraphQL over a single HTTP endpoint. All requests are POST to the endpoint below. Responses are JSON.

Interactive Playground — Test queries live in GraphiQL (requires HTTP Basic Auth credentials).

Authentication

Most operations require a Bearer token in the Authorization header:

Authorization: Bearer <access_token>

Obtain tokens via the login mutation. Access tokens expire in 15 minutes. Use refreshToken to rotate before expiry. See the Authentication Flow section for details.

Rate Limits

Scope Limit Applies To
Per-IP 100 req/min All requests
Per-user 10 req/min PDF operations, billing, AI, board search

Exceeding limits returns 429 (HTTP) or BILLING_RATE_LIMIT_EXCEEDED (GraphQL).

Query Limits

Protection Default Enterprise
Max depth 10 levels 10 levels
Query complexity 500 2,000
Mutation complexity 100 500
Request timeout 30s 60s
Max request body 16 MB 16 MB
Introspection Disabled in prod Disabled in prod

Error Format

All errors follow the GraphQL spec with structured extensions:

{
  "errors": [{
    "message": "Human-readable message",
    "extensions": {
      "code": "ERROR_CODE",
      "status_code": 400
    }
  }]
}

See the full Error Code Reference for the complete list.

File Uploads

File uploads use the GraphQL multipart request spec. Send a multipart/form-data request with operations, map, and file parts:

curl -X POST /v1/graphql \
  -H "Authorization: Bearer <token>" \
  -F operations='{"query":"mutation(:Upload!){uploadFile(file:){filename fileHash size contentType}}","variables":{"file":null}}' \
  -F map='{"0":["variables.file"]}' \
  -F 0=@document.pdf

Allowed types: PDF, PNG, JPEG, TIFF. Max size: 16 MB.

Pagination

List queries support Relay cursor-based pagination. Use *Connection queries (e.g. documentsConnection) with first/after or last/before arguments. Max page size is 100.

Automatic Persisted Queries (APQ)

Reduce bandwidth by sending a SHA-256 hash instead of the full query. Apollo iOS and Apollo Kotlin support this natively.

{
  "extensions": {
    "persistedQuery": {
      "version": 1,
      "sha256Hash": "<sha256-hex-lowercase>"
    }
  }
}

On cache miss, the server returns PERSISTED_QUERY_NOT_FOUND — retry with the full query body.

Contact

Credo API Support

API Endpoints
https://api.engineeringid.com/v1/graphql
Version

v1

Queries

batchSealJob

Description

Get a batch seal job by ID

Response

Returns a BatchSealJob

Arguments
Name Description
id - UUID!

Example

Query
query batchSealJob($id: UUID!) {
  batchSealJob(id: $id) {
    id
    status
    totalDocuments
    completedDocuments
    failedDocuments
    startedAt
    completedAt
    insertedAt
    pageMode
    positionX
    positionY
    credential {
      id
      licenseNumber
      regionCode
      licenseType
      displayName
      status
      verificationMethod
      verifiedAt
      lastVerifiedAt
      expirationDate
      rejectionReason
      insertedAt
      updatedAt
      certificateFingerprint
      certificateIssuedAt
      certificateExpiresAt
      isVerified
      isExpired
      canSeal
      stampSvg
    }
    items {
      id
      status
      errorMessage
      processingStartedAt
      processingCompletedAt
      document {
        ...DocumentFragment
      }
      seal {
        ...SealFragment
      }
    }
    progressPercent
    remaining
  }
}
Variables
{
  "id": "e62e7364-b824-4611-88df-75f2f8e4b81c"
}
Response
{
  "data": {
    "batchSealJob": {
      "id": "e62e7364-b824-4611-88df-75f2f8e4b81c",
      "status": "PENDING",
      "totalDocuments": 987,
      "completedDocuments": 123,
      "failedDocuments": 123,
      "startedAt": "2007-12-03T10:15:30Z",
      "completedAt": "2007-12-03T10:15:30Z",
      "insertedAt": "2007-12-03T10:15:30Z",
      "pageMode": "FIRST",
      "positionX": 123.45,
      "positionY": 987.65,
      "credential": Credential,
      "items": [BatchSealItem],
      "progressPercent": 123,
      "remaining": 987
    }
  }
}

batchSealJobs

Use batchSealJobsConnection for cursor-based pagination
Description

List batch seal jobs

Response

Returns [BatchSealJob!]!

Arguments
Name Description
status - BatchSealStatus Filter by job status
limit - Int Maximum jobs to return (max 100)

Example

Query
query batchSealJobs(
  $status: BatchSealStatus,
  $limit: Int
) {
  batchSealJobs(
    status: $status,
    limit: $limit
  ) {
    id
    status
    totalDocuments
    completedDocuments
    failedDocuments
    startedAt
    completedAt
    insertedAt
    pageMode
    positionX
    positionY
    credential {
      id
      licenseNumber
      regionCode
      licenseType
      displayName
      status
      verificationMethod
      verifiedAt
      lastVerifiedAt
      expirationDate
      rejectionReason
      insertedAt
      updatedAt
      certificateFingerprint
      certificateIssuedAt
      certificateExpiresAt
      isVerified
      isExpired
      canSeal
      stampSvg
    }
    items {
      id
      status
      errorMessage
      processingStartedAt
      processingCompletedAt
      document {
        ...DocumentFragment
      }
      seal {
        ...SealFragment
      }
    }
    progressPercent
    remaining
  }
}
Variables
{"status": "PENDING", "limit": 987}
Response
{
  "data": {
    "batchSealJobs": [
      {
        "id": "e62e7364-b824-4611-88df-75f2f8e4b81c",
        "status": "PENDING",
        "totalDocuments": 123,
        "completedDocuments": 987,
        "failedDocuments": 123,
        "startedAt": "2007-12-03T10:15:30Z",
        "completedAt": "2007-12-03T10:15:30Z",
        "insertedAt": "2007-12-03T10:15:30Z",
        "pageMode": "FIRST",
        "positionX": 123.45,
        "positionY": 987.65,
        "credential": Credential,
        "items": [BatchSealItem],
        "progressPercent": 987,
        "remaining": 987
      }
    ]
  }
}

batchSealJobsConnection

Description

Get batch seal jobs with cursor-based pagination

Response

Returns a BatchSealJobConnection!

Arguments
Name Description
first - Int Returns the first n jobs
after - String Returns jobs after the cursor
last - Int Returns the last n jobs
before - String Returns jobs before the cursor
status - BatchSealStatus Filter by job status

Example

Query
query batchSealJobsConnection(
  $first: Int,
  $after: String,
  $last: Int,
  $before: String,
  $status: BatchSealStatus
) {
  batchSealJobsConnection(
    first: $first,
    after: $after,
    last: $last,
    before: $before,
    status: $status
  ) {
    edges {
      node {
        ...BatchSealJobFragment
      }
      cursor
    }
    pageInfo {
      hasNextPage
      hasPreviousPage
      startCursor
      endCursor
    }
    totalCount
  }
}
Variables
{
  "first": 123,
  "after": "xyz789",
  "last": 987,
  "before": "abc123",
  "status": "PENDING"
}
Response
{
  "data": {
    "batchSealJobsConnection": {
      "edges": [BatchSealJobEdge],
      "pageInfo": PageInfo,
      "totalCount": 123
    }
  }
}

chatMessages

Description

List messages in a chat session

Response

Returns [ChatMessage!]!

Arguments
Name Description
sessionId - UUID! Chat session ID
limit - Int Maximum messages to return (max 500)

Example

Query
query chatMessages(
  $sessionId: UUID!,
  $limit: Int
) {
  chatMessages(
    sessionId: $sessionId,
    limit: $limit
  ) {
    id
    sessionId
    role
    content
    tokenCount
    insertedAt
  }
}
Variables
{
  "sessionId": "e62e7364-b824-4611-88df-75f2f8e4b81c",
  "limit": 123
}
Response
{
  "data": {
    "chatMessages": [
      {
        "id": "e62e7364-b824-4611-88df-75f2f8e4b81c",
        "sessionId": "e62e7364-b824-4611-88df-75f2f8e4b81c",
        "role": "USER",
        "content": "abc123",
        "tokenCount": 123,
        "insertedAt": "2007-12-03T10:15:30Z"
      }
    ]
  }
}

chatSessions

Description

List user's active chat sessions

Response

Returns [ChatSession!]!

Arguments
Name Description
limit - Int Maximum sessions to return (max 100)

Example

Query
query chatSessions($limit: Int) {
  chatSessions(limit: $limit) {
    id
    title
    status
    documentIds
    lastMessageAt
    insertedAt
    updatedAt
  }
}
Variables
{"limit": 123}
Response
{
  "data": {
    "chatSessions": [
      {
        "id": "e62e7364-b824-4611-88df-75f2f8e4b81c",
        "title": "xyz789",
        "status": "ACTIVE",
        "documentIds": [
          "e62e7364-b824-4611-88df-75f2f8e4b81c"
        ],
        "lastMessageAt": "2007-12-03T10:15:30Z",
        "insertedAt": "2007-12-03T10:15:30Z",
        "updatedAt": "2007-12-03T10:15:30Z"
      }
    ]
  }
}

credential

Description

Get a single credential by ID

Response

Returns a Credential

Arguments
Name Description
id - UUID!

Example

Query
query credential($id: UUID!) {
  credential(id: $id) {
    id
    licenseNumber
    regionCode
    licenseType
    displayName
    status
    verificationMethod
    verifiedAt
    lastVerifiedAt
    expirationDate
    rejectionReason
    insertedAt
    updatedAt
    certificateFingerprint
    certificateIssuedAt
    certificateExpiresAt
    isVerified
    isExpired
    canSeal
    stampSvg
  }
}
Variables
{
  "id": "e62e7364-b824-4611-88df-75f2f8e4b81c"
}
Response
{
  "data": {
    "credential": {
      "id": "e62e7364-b824-4611-88df-75f2f8e4b81c",
      "licenseNumber": "abc123",
      "regionCode": "xyz789",
      "licenseType": "abc123",
      "displayName": "xyz789",
      "status": "CLAIMED",
      "verificationMethod": "VENDOR_API",
      "verifiedAt": "2007-12-03T10:15:30Z",
      "lastVerifiedAt": "2007-12-03T10:15:30Z",
      "expirationDate": "2007-12-03",
      "rejectionReason": "abc123",
      "insertedAt": "2007-12-03T10:15:30Z",
      "updatedAt": "2007-12-03T10:15:30Z",
      "certificateFingerprint": "abc123",
      "certificateIssuedAt": "2007-12-03T10:15:30Z",
      "certificateExpiresAt": "2007-12-03T10:15:30Z",
      "isVerified": true,
      "isExpired": true,
      "canSeal": false,
      "stampSvg": "xyz789"
    }
  }
}

credentials

Use credentialsConnection for cursor-based pagination
Description

List user's credentials (max 100 per request)

Response

Returns [Credential!]!

Example

Query
query credentials {
  credentials {
    id
    licenseNumber
    regionCode
    licenseType
    displayName
    status
    verificationMethod
    verifiedAt
    lastVerifiedAt
    expirationDate
    rejectionReason
    insertedAt
    updatedAt
    certificateFingerprint
    certificateIssuedAt
    certificateExpiresAt
    isVerified
    isExpired
    canSeal
    stampSvg
  }
}
Response
{
  "data": {
    "credentials": [
      {
        "id": "e62e7364-b824-4611-88df-75f2f8e4b81c",
        "licenseNumber": "xyz789",
        "regionCode": "abc123",
        "licenseType": "xyz789",
        "displayName": "abc123",
        "status": "CLAIMED",
        "verificationMethod": "VENDOR_API",
        "verifiedAt": "2007-12-03T10:15:30Z",
        "lastVerifiedAt": "2007-12-03T10:15:30Z",
        "expirationDate": "2007-12-03",
        "rejectionReason": "abc123",
        "insertedAt": "2007-12-03T10:15:30Z",
        "updatedAt": "2007-12-03T10:15:30Z",
        "certificateFingerprint": "xyz789",
        "certificateIssuedAt": "2007-12-03T10:15:30Z",
        "certificateExpiresAt": "2007-12-03T10:15:30Z",
        "isVerified": false,
        "isExpired": true,
        "canSeal": false,
        "stampSvg": "xyz789"
      }
    ]
  }
}

credentialsConnection

Description

Get credentials with cursor-based pagination

Response

Returns a CredentialConnection!

Arguments
Name Description
first - Int Returns the first n credentials
after - String Returns credentials after the cursor
last - Int Returns the last n credentials
before - String Returns credentials before the cursor

Example

Query
query credentialsConnection(
  $first: Int,
  $after: String,
  $last: Int,
  $before: String
) {
  credentialsConnection(
    first: $first,
    after: $after,
    last: $last,
    before: $before
  ) {
    edges {
      node {
        ...CredentialFragment
      }
      cursor
    }
    pageInfo {
      hasNextPage
      hasPreviousPage
      startCursor
      endCursor
    }
    totalCount
  }
}
Variables
{
  "first": 987,
  "after": "xyz789",
  "last": 123,
  "before": "xyz789"
}
Response
{
  "data": {
    "credentialsConnection": {
      "edges": [CredentialEdge],
      "pageInfo": PageInfo,
      "totalCount": 123
    }
  }
}

document

Description

Get a single document by ID

Response

Returns a Document

Arguments
Name Description
id - UUID!

Example

Query
query document($id: UUID!) {
  document(id: $id) {
    id
    name
    description
    status
    visibility
    folderId
    organizationId
    insertedAt
    updatedAt
    folder {
      id
      name
      description
      color
      icon
      position
      parentId
      insertedAt
      updatedAt
      parent {
        ...DocumentFolderFragment
      }
      children {
        ...DocumentFolderFragment
      }
      documents {
        ...DocumentFragment
      }
      documentCount
    }
    versions {
      id
      versionNumber
      fileHash
      notes
      insertedAt
      seal {
        ...SealFragment
      }
      createdBy {
        ...UserFragment
      }
      downloadUrl
    }
    currentVersion {
      id
      versionNumber
      fileHash
      notes
      insertedAt
      seal {
        ...SealFragment
      }
      createdBy {
        ...UserFragment
      }
      downloadUrl
    }
    versionCount
    hasVersions
    downloadUrl
  }
}
Variables
{
  "id": "e62e7364-b824-4611-88df-75f2f8e4b81c"
}
Response
{
  "data": {
    "document": {
      "id": "e62e7364-b824-4611-88df-75f2f8e4b81c",
      "name": "abc123",
      "description": "xyz789",
      "status": "DRAFT",
      "visibility": "PRIVATE",
      "folderId": "e62e7364-b824-4611-88df-75f2f8e4b81c",
      "organizationId": "e62e7364-b824-4611-88df-75f2f8e4b81c",
      "insertedAt": "2007-12-03T10:15:30Z",
      "updatedAt": "2007-12-03T10:15:30Z",
      "folder": DocumentFolder,
      "versions": [DocumentVersion],
      "currentVersion": DocumentVersion,
      "versionCount": 123,
      "hasVersions": false,
      "downloadUrl": "xyz789"
    }
  }
}

documents

Use documentsConnection for cursor-based pagination
Description

List user's documents

Response

Returns [Document!]!

Arguments
Name Description
status - DocumentStatus Filter by document status
folderId - UUID Filter by folder ID
limit - Int Maximum documents to return (max 100)

Example

Query
query documents(
  $status: DocumentStatus,
  $folderId: UUID,
  $limit: Int
) {
  documents(
    status: $status,
    folderId: $folderId,
    limit: $limit
  ) {
    id
    name
    description
    status
    visibility
    folderId
    organizationId
    insertedAt
    updatedAt
    folder {
      id
      name
      description
      color
      icon
      position
      parentId
      insertedAt
      updatedAt
      parent {
        ...DocumentFolderFragment
      }
      children {
        ...DocumentFolderFragment
      }
      documents {
        ...DocumentFragment
      }
      documentCount
    }
    versions {
      id
      versionNumber
      fileHash
      notes
      insertedAt
      seal {
        ...SealFragment
      }
      createdBy {
        ...UserFragment
      }
      downloadUrl
    }
    currentVersion {
      id
      versionNumber
      fileHash
      notes
      insertedAt
      seal {
        ...SealFragment
      }
      createdBy {
        ...UserFragment
      }
      downloadUrl
    }
    versionCount
    hasVersions
    downloadUrl
  }
}
Variables
{
  "status": "DRAFT",
  "folderId": "e62e7364-b824-4611-88df-75f2f8e4b81c",
  "limit": 123
}
Response
{
  "data": {
    "documents": [
      {
        "id": "e62e7364-b824-4611-88df-75f2f8e4b81c",
        "name": "abc123",
        "description": "xyz789",
        "status": "DRAFT",
        "visibility": "PRIVATE",
        "folderId": "e62e7364-b824-4611-88df-75f2f8e4b81c",
        "organizationId": "e62e7364-b824-4611-88df-75f2f8e4b81c",
        "insertedAt": "2007-12-03T10:15:30Z",
        "updatedAt": "2007-12-03T10:15:30Z",
        "folder": DocumentFolder,
        "versions": [DocumentVersion],
        "currentVersion": DocumentVersion,
        "versionCount": 987,
        "hasVersions": true,
        "downloadUrl": "abc123"
      }
    ]
  }
}

documentsConnection

Description

Get documents with cursor-based pagination

Response

Returns a DocumentConnection!

Arguments
Name Description
first - Int Returns the first n documents
after - String Returns documents after the cursor
last - Int Returns the last n documents
before - String Returns documents before the cursor
status - DocumentStatus
folderId - UUID

Example

Query
query documentsConnection(
  $first: Int,
  $after: String,
  $last: Int,
  $before: String,
  $status: DocumentStatus,
  $folderId: UUID
) {
  documentsConnection(
    first: $first,
    after: $after,
    last: $last,
    before: $before,
    status: $status,
    folderId: $folderId
  ) {
    edges {
      node {
        ...DocumentFragment
      }
      cursor
    }
    pageInfo {
      hasNextPage
      hasPreviousPage
      startCursor
      endCursor
    }
    totalCount
  }
}
Variables
{
  "first": 123,
  "after": "xyz789",
  "last": 987,
  "before": "abc123",
  "status": "DRAFT",
  "folderId": "e62e7364-b824-4611-88df-75f2f8e4b81c"
}
Response
{
  "data": {
    "documentsConnection": {
      "edges": [DocumentEdge],
      "pageInfo": PageInfo,
      "totalCount": 123
    }
  }
}

encryptedMessages

Description

Fetch unacknowledged encrypted messages for the current user

Response

Returns [EncryptedMessage!]!

Arguments
Name Description
limit - Int Maximum messages to return (max 500)

Example

Query
query encryptedMessages($limit: Int) {
  encryptedMessages(limit: $limit) {
    id
    senderId
    ciphertext
    messageType
    insertedAt
  }
}
Variables
{"limit": 123}
Response
{
  "data": {
    "encryptedMessages": [
      {
        "id": "e62e7364-b824-4611-88df-75f2f8e4b81c",
        "senderId": "e62e7364-b824-4611-88df-75f2f8e4b81c",
        "ciphertext": "abc123",
        "messageType": "PREKEY",
        "insertedAt": "2007-12-03T10:15:30Z"
      }
    ]
  }
}

folders

Description

List user's folders

Response

Returns [DocumentFolder!]!

Arguments
Name Description
parentId - UUID

Example

Query
query folders($parentId: UUID) {
  folders(parentId: $parentId) {
    id
    name
    description
    color
    icon
    position
    parentId
    insertedAt
    updatedAt
    parent {
      id
      name
      description
      color
      icon
      position
      parentId
      insertedAt
      updatedAt
      parent {
        ...DocumentFolderFragment
      }
      children {
        ...DocumentFolderFragment
      }
      documents {
        ...DocumentFragment
      }
      documentCount
    }
    children {
      id
      name
      description
      color
      icon
      position
      parentId
      insertedAt
      updatedAt
      parent {
        ...DocumentFolderFragment
      }
      children {
        ...DocumentFolderFragment
      }
      documents {
        ...DocumentFragment
      }
      documentCount
    }
    documents {
      id
      name
      description
      status
      visibility
      folderId
      organizationId
      insertedAt
      updatedAt
      folder {
        ...DocumentFolderFragment
      }
      versions {
        ...DocumentVersionFragment
      }
      currentVersion {
        ...DocumentVersionFragment
      }
      versionCount
      hasVersions
      downloadUrl
    }
    documentCount
  }
}
Variables
{
  "parentId": "e62e7364-b824-4611-88df-75f2f8e4b81c"
}
Response
{
  "data": {
    "folders": [
      {
        "id": "e62e7364-b824-4611-88df-75f2f8e4b81c",
        "name": "xyz789",
        "description": "xyz789",
        "color": "abc123",
        "icon": "abc123",
        "position": 987,
        "parentId": "e62e7364-b824-4611-88df-75f2f8e4b81c",
        "insertedAt": "2007-12-03T10:15:30Z",
        "updatedAt": "2007-12-03T10:15:30Z",
        "parent": DocumentFolder,
        "children": [DocumentFolder],
        "documents": [Document],
        "documentCount": 987
      }
    ]
  }
}

foldersConnection

Description

Get folders with cursor-based pagination

Response

Returns a FolderConnection!

Arguments
Name Description
first - Int Returns the first n folders
after - String Returns folders after the cursor
last - Int Returns the last n folders
before - String Returns folders before the cursor
parentId - UUID Filter by parent folder ID

Example

Query
query foldersConnection(
  $first: Int,
  $after: String,
  $last: Int,
  $before: String,
  $parentId: UUID
) {
  foldersConnection(
    first: $first,
    after: $after,
    last: $last,
    before: $before,
    parentId: $parentId
  ) {
    edges {
      node {
        ...DocumentFolderFragment
      }
      cursor
    }
    pageInfo {
      hasNextPage
      hasPreviousPage
      startCursor
      endCursor
    }
    totalCount
  }
}
Variables
{
  "first": 987,
  "after": "xyz789",
  "last": 123,
  "before": "xyz789",
  "parentId": "e62e7364-b824-4611-88df-75f2f8e4b81c"
}
Response
{
  "data": {
    "foldersConnection": {
      "edges": [FolderEdge],
      "pageInfo": PageInfo,
      "totalCount": 123
    }
  }
}

me

Description

Get the currently authenticated user

Response

Returns a User!

Example

Query
query me {
  me {
    id
    email
    displayName
    role
    mfaEnabled
    confirmedAt
    insertedAt
    updatedAt
    uiTheme
    stampExportSize
    betaFeaturesEnabled
    verificationStatus
    credentialCount
    trialActive
  }
}
Response
{
  "data": {
    "me": {
      "id": "e62e7364-b824-4611-88df-75f2f8e4b81c",
      "email": "abc123",
      "displayName": "xyz789",
      "role": "xyz789",
      "mfaEnabled": false,
      "confirmedAt": "2007-12-03T10:15:30Z",
      "insertedAt": "2007-12-03T10:15:30Z",
      "updatedAt": "2007-12-03T10:15:30Z",
      "uiTheme": "xyz789",
      "stampExportSize": "abc123",
      "betaFeaturesEnabled": true,
      "verificationStatus": "abc123",
      "credentialCount": 123,
      "trialActive": true
    }
  }
}

myOrganizations

Description

List all organizations the current user belongs to

Response

Returns [OrganizationMembership!]!

Arguments
Name Description
limit - Int Maximum results to return (max 50)

Example

Query
query myOrganizations($limit: Int) {
  myOrganizations(limit: $limit) {
    id
    role
    isPrimaryOrg
    organization {
      id
      name
      slug
      planLevel
      insertedAt
      updatedAt
      canSealDocuments
      canUseCloudStorage
      maxDocuments
      maxCredentials
      maxTeamMembers
    }
    insertedAt
  }
}
Variables
{"limit": 123}
Response
{
  "data": {
    "myOrganizations": [
      {
        "id": "e62e7364-b824-4611-88df-75f2f8e4b81c",
        "role": "abc123",
        "isPrimaryOrg": false,
        "organization": Organization,
        "insertedAt": "2007-12-03T10:15:30Z"
      }
    ]
  }
}

organization

Description

Get the current organization

Response

Returns an Organization!

Example

Query
query organization {
  organization {
    id
    name
    slug
    planLevel
    insertedAt
    updatedAt
    canSealDocuments
    canUseCloudStorage
    maxDocuments
    maxCredentials
    maxTeamMembers
  }
}
Response
{
  "data": {
    "organization": {
      "id": "e62e7364-b824-4611-88df-75f2f8e4b81c",
      "name": "xyz789",
      "slug": "xyz789",
      "planLevel": "FREE",
      "insertedAt": "2007-12-03T10:15:30Z",
      "updatedAt": "2007-12-03T10:15:30Z",
      "canSealDocuments": true,
      "canUseCloudStorage": true,
      "maxDocuments": 123,
      "maxCredentials": 123,
      "maxTeamMembers": 123
    }
  }
}

organizationMembers

Use organizationMembersConnection for cursor-based pagination
Description

List members of the current organization

Response

Returns [OrganizationMember!]!

Arguments
Name Description
limit - Int Maximum members to return (max 200)

Example

Query
query organizationMembers($limit: Int) {
  organizationMembers(limit: $limit) {
    id
    role
    user {
      id
      email
      displayName
      role
      mfaEnabled
      confirmedAt
      insertedAt
      updatedAt
      uiTheme
      stampExportSize
      betaFeaturesEnabled
      verificationStatus
      credentialCount
      trialActive
    }
    insertedAt
  }
}
Variables
{"limit": 123}
Response
{
  "data": {
    "organizationMembers": [
      {
        "id": "e62e7364-b824-4611-88df-75f2f8e4b81c",
        "role": "xyz789",
        "user": User,
        "insertedAt": "2007-12-03T10:15:30Z"
      }
    ]
  }
}

organizationMembersConnection

Description

Get organization members with cursor-based pagination

Response

Returns an OrganizationMemberConnection!

Arguments
Name Description
first - Int Returns the first n members
after - String Returns members after the cursor
last - Int Returns the last n members
before - String Returns members before the cursor

Example

Query
query organizationMembersConnection(
  $first: Int,
  $after: String,
  $last: Int,
  $before: String
) {
  organizationMembersConnection(
    first: $first,
    after: $after,
    last: $last,
    before: $before
  ) {
    edges {
      node {
        ...OrganizationMemberFragment
      }
      cursor
    }
    pageInfo {
      hasNextPage
      hasPreviousPage
      startCursor
      endCursor
    }
    totalCount
  }
}
Variables
{
  "first": 987,
  "after": "abc123",
  "last": 123,
  "before": "abc123"
}
Response
{
  "data": {
    "organizationMembersConnection": {
      "edges": [OrganizationMemberEdge],
      "pageInfo": PageInfo,
      "totalCount": 123
    }
  }
}

pdfDetailedPageInfo

Description

Get detailed page info (dimensions, boxes, rotation) for a specific page

Response

Returns a PdfPageInfoDetail

Arguments
Name Description
documentId - UUID!
page - Int!

Example

Query
query pdfDetailedPageInfo(
  $documentId: UUID!,
  $page: Int!
) {
  pdfDetailedPageInfo(
    documentId: $documentId,
    page: $page
  ) {
    page
    width
    height
    rotation
    isLandscape
    mediaBox {
      x
      y
      width
      height
    }
    cropBox {
      x
      y
      width
      height
    }
    bleedBox {
      x
      y
      width
      height
    }
    trimBox {
      x
      y
      width
      height
    }
    artBox {
      x
      y
      width
      height
    }
  }
}
Variables
{
  "documentId": "e62e7364-b824-4611-88df-75f2f8e4b81c",
  "page": 123
}
Response
{
  "data": {
    "pdfDetailedPageInfo": {
      "page": 987,
      "width": 987.65,
      "height": 123.45,
      "rotation": 987,
      "isLandscape": true,
      "mediaBox": PdfBox,
      "cropBox": PdfBox,
      "bleedBox": PdfBox,
      "trimBox": PdfBox,
      "artBox": PdfBox
    }
  }
}

pdfInfo

Description

Get PDF document info (pages, size, encryption, version)

Response

Returns a PdfInfo

Arguments
Name Description
documentId - UUID!

Example

Query
query pdfInfo($documentId: UUID!) {
  pdfInfo(documentId: $documentId) {
    pageCount
    fileSize
    isEncrypted
    isLinearized
    version
    pageSizes {
      page
      width
      height
      rotation
    }
  }
}
Variables
{
  "documentId": "e62e7364-b824-4611-88df-75f2f8e4b81c"
}
Response
{
  "data": {
    "pdfInfo": {
      "pageCount": 987,
      "fileSize": 123,
      "isEncrypted": true,
      "isLinearized": false,
      "version": "xyz789",
      "pageSizes": [PdfPageSize]
    }
  }
}

pdfMetadata

Description

Extract metadata from a PDF document

Response

Returns a PdfMetadata

Arguments
Name Description
documentId - UUID!

Example

Query
query pdfMetadata($documentId: UUID!) {
  pdfMetadata(documentId: $documentId) {
    title
    author
    subject
    keywords
    creator
    producer
    creationDate
    modificationDate
    pageCount
    pdfVersion
    fileSize
    isEncrypted
    hasForms
  }
}
Variables
{
  "documentId": "e62e7364-b824-4611-88df-75f2f8e4b81c"
}
Response
{
  "data": {
    "pdfMetadata": {
      "title": "xyz789",
      "author": "abc123",
      "subject": "xyz789",
      "keywords": "abc123",
      "creator": "xyz789",
      "producer": "xyz789",
      "creationDate": "abc123",
      "modificationDate": "xyz789",
      "pageCount": 123,
      "pdfVersion": "xyz789",
      "fileSize": 123,
      "isEncrypted": true,
      "hasForms": true
    }
  }
}

pdfPageInfo

Description

Get page dimensions and rotation for each page of a PDF

Response

Returns [PdfPageInfoBasic!]!

Arguments
Name Description
documentId - UUID!

Example

Query
query pdfPageInfo($documentId: UUID!) {
  pdfPageInfo(documentId: $documentId) {
    page
    width
    height
    rotation
  }
}
Variables
{
  "documentId": "e62e7364-b824-4611-88df-75f2f8e4b81c"
}
Response
{
  "data": {
    "pdfPageInfo": [
      {"page": 987, "width": 123.45, "height": 123.45, "rotation": 123}
    ]
  }
}

pdfSignatures

Description

Get digital signature information from a PDF

Response

Returns a PdfSignatureInfo

Arguments
Name Description
documentId - UUID!

Example

Query
query pdfSignatures($documentId: UUID!) {
  pdfSignatures(documentId: $documentId) {
    isSigned
    signatureCount
    signatures {
      signerName
      signingDate
      signatureType
    }
  }
}
Variables
{
  "documentId": "e62e7364-b824-4611-88df-75f2f8e4b81c"
}
Response
{
  "data": {
    "pdfSignatures": {
      "isSigned": false,
      "signatureCount": 123,
      "signatures": [PdfSignature]
    }
  }
}

pdfText

Description

Extract text content from a PDF document

Response

Returns a PdfTextResult

Arguments
Name Description
documentId - UUID!

Example

Query
query pdfText($documentId: UUID!) {
  pdfText(documentId: $documentId) {
    text
    pageCount
  }
}
Variables
{
  "documentId": "e62e7364-b824-4611-88df-75f2f8e4b81c"
}
Response
{
  "data": {
    "pdfText": {
      "text": "abc123",
      "pageCount": 987
    }
  }
}

pdfValidate

Description

Validate PDF structure and report any issues

Response

Returns a PdfValidationResult

Arguments
Name Description
documentId - UUID!

Example

Query
query pdfValidate($documentId: UUID!) {
  pdfValidate(documentId: $documentId) {
    isValid
    issues
  }
}
Variables
{
  "documentId": "e62e7364-b824-4611-88df-75f2f8e4b81c"
}
Response
{
  "data": {
    "pdfValidate": {
      "isValid": true,
      "issues": ["abc123"]
    }
  }
}

prekeyBundle

Description

Fetch a user's pre-key bundle for Signal Protocol session setup

Response

Returns a PrekeyBundle

Arguments
Name Description
userId - UUID!

Example

Query
query prekeyBundle($userId: UUID!) {
  prekeyBundle(userId: $userId) {
    identityKey
    registrationId
    signedPrekey
    signedPrekeyId
    signedPrekeySignature
    prekey
    prekeyId
  }
}
Variables
{
  "userId": "e62e7364-b824-4611-88df-75f2f8e4b81c"
}
Response
{
  "data": {
    "prekeyBundle": {
      "identityKey": "xyz789",
      "registrationId": 987,
      "signedPrekey": "abc123",
      "signedPrekeyId": 123,
      "signedPrekeySignature": "xyz789",
      "prekey": "abc123",
      "prekeyId": 123
    }
  }
}

professional

Description

Get a single professional's full profile by ID

Response

Returns a ProfessionalProfile

Arguments
Name Description
id - UUID!

Example

Query
query professional($id: UUID!) {
  professional(id: $id) {
    id
    firstName
    lastName
    fullName
    slug
    stateCode
    licenseNumber
    licenseStatus
    headline
    photoUrl
    currentTitle
    currentCompany
    summary
    linkedinUrl
    websiteUrl
    yearsExperience
    specializations
    skills
    education
    certifications
    enrichmentConfidence
    lastVerifiedAt
    expirationDate
    professionId
    professionName
  }
}
Variables
{
  "id": "e62e7364-b824-4611-88df-75f2f8e4b81c"
}
Response
{
  "data": {
    "professional": {
      "id": "e62e7364-b824-4611-88df-75f2f8e4b81c",
      "firstName": "xyz789",
      "lastName": "xyz789",
      "fullName": "abc123",
      "slug": "abc123",
      "stateCode": "xyz789",
      "licenseNumber": "xyz789",
      "licenseStatus": "abc123",
      "headline": "xyz789",
      "photoUrl": "xyz789",
      "currentTitle": "abc123",
      "currentCompany": "abc123",
      "summary": "abc123",
      "linkedinUrl": "xyz789",
      "websiteUrl": "abc123",
      "yearsExperience": 123,
      "specializations": ["abc123"],
      "skills": ["xyz789"],
      "education": ["xyz789"],
      "certifications": ["abc123"],
      "enrichmentConfidence": 987.65,
      "lastVerifiedAt": "2007-12-03T10:15:30Z",
      "expirationDate": "2007-12-03",
      "professionId": "e62e7364-b824-4611-88df-75f2f8e4b81c",
      "professionName": "abc123"
    }
  }
}

professions

Description

List active professions for the directory

Response

Returns [Profession!]!

Arguments
Name Description
group - String Optional profession group filter

Example

Query
query professions($group: String) {
  professions(group: $group) {
    id
    name
    shortName
    slug
    titleSuffix
    professionGroup
    description
    iconName
    professionalCount
  }
}
Variables
{"group": "abc123"}
Response
{
  "data": {
    "professions": [
      {
        "id": "e62e7364-b824-4611-88df-75f2f8e4b81c",
        "name": "abc123",
        "shortName": "xyz789",
        "slug": "abc123",
        "titleSuffix": "xyz789",
        "professionGroup": "abc123",
        "description": "xyz789",
        "iconName": "xyz789",
        "professionalCount": 123
      }
    ]
  }
}

seals

Use sealsConnection for cursor-based pagination
Description

List user's seals

Response

Returns [Seal!]!

Arguments
Name Description
limit - Int Maximum seals to return (max 100)

Example

Query
query seals($limit: Int) {
  seals(limit: $limit) {
    id
    verificationCode
    documentHash
    sealedAt
    insertedAt
    document {
      id
      name
      description
      status
      visibility
      folderId
      organizationId
      insertedAt
      updatedAt
      folder {
        ...DocumentFolderFragment
      }
      versions {
        ...DocumentVersionFragment
      }
      currentVersion {
        ...DocumentVersionFragment
      }
      versionCount
      hasVersions
      downloadUrl
    }
    credential {
      id
      licenseNumber
      regionCode
      licenseType
      displayName
      status
      verificationMethod
      verifiedAt
      lastVerifiedAt
      expirationDate
      rejectionReason
      insertedAt
      updatedAt
      certificateFingerprint
      certificateIssuedAt
      certificateExpiresAt
      isVerified
      isExpired
      canSeal
      stampSvg
    }
    signingCertificate {
      id
      name
      description
      commonName
      issuerCn
      serialNumber
      notBefore
      expiresAt
      fingerprintSha256
      isDefault
      lastUsedAt
      insertedAt
      updatedAt
      status
      isValid
      daysUntilExpiry
      hasPrivateKey
    }
    pkiSigned
    verificationUrl
  }
}
Variables
{"limit": 987}
Response
{
  "data": {
    "seals": [
      {
        "id": "e62e7364-b824-4611-88df-75f2f8e4b81c",
        "verificationCode": "xyz789",
        "documentHash": "abc123",
        "sealedAt": "2007-12-03T10:15:30Z",
        "insertedAt": "2007-12-03T10:15:30Z",
        "document": Document,
        "credential": Credential,
        "signingCertificate": SigningCertificate,
        "pkiSigned": true,
        "verificationUrl": "xyz789"
      }
    ]
  }
}

sealsConnection

Description

Get seals with cursor-based pagination

Response

Returns a SealConnection!

Arguments
Name Description
first - Int Returns the first n seals
after - String Returns seals after the cursor
last - Int Returns the last n seals
before - String Returns seals before the cursor

Example

Query
query sealsConnection(
  $first: Int,
  $after: String,
  $last: Int,
  $before: String
) {
  sealsConnection(
    first: $first,
    after: $after,
    last: $last,
    before: $before
  ) {
    edges {
      node {
        ...SealFragment
      }
      cursor
    }
    pageInfo {
      hasNextPage
      hasPreviousPage
      startCursor
      endCursor
    }
    totalCount
  }
}
Variables
{
  "first": 987,
  "after": "abc123",
  "last": 987,
  "before": "abc123"
}
Response
{
  "data": {
    "sealsConnection": {
      "edges": [SealEdge],
      "pageInfo": PageInfo,
      "totalCount": 123
    }
  }
}

searchDocumentChunks

Description

Semantic search over document chunks

Response

Returns [SearchResult!]!

Arguments
Name Description
query - String! Natural language search query
documentIds - [UUID!]! Document IDs to search within
limit - Int Maximum results to return (default: 5)

Example

Query
query searchDocumentChunks(
  $query: String!,
  $documentIds: [UUID!]!,
  $limit: Int
) {
  searchDocumentChunks(
    query: $query,
    documentIds: $documentIds,
    limit: $limit
  ) {
    id
    content
    chunkIndex
    pageNumber
    similarity
    documentId
  }
}
Variables
{
  "query": "xyz789",
  "documentIds": [
    "e62e7364-b824-4611-88df-75f2f8e4b81c"
  ],
  "limit": 123
}
Response
{
  "data": {
    "searchDocumentChunks": [
      {
        "id": "e62e7364-b824-4611-88df-75f2f8e4b81c",
        "content": "abc123",
        "chunkIndex": 123,
        "pageNumber": 987,
        "similarity": 987.65,
        "documentId": "e62e7364-b824-4611-88df-75f2f8e4b81c"
      }
    ]
  }
}

searchProfessionals

Description

Search professionals in the directory by profession, state, and name

Response

Returns a DirectoryPage

Arguments
Name Description
professionSlug - String! Profession URL slug (e.g., engineer, architect)
stateCode - String Filter by state/province code (e.g., CA, TX, ON)
query - String Search by name (max 100 characters)
page - Int Page number (1-based)
perPage - Int Results per page (max 100)

Example

Query
query searchProfessionals(
  $professionSlug: String!,
  $stateCode: String,
  $query: String,
  $page: Int,
  $perPage: Int
) {
  searchProfessionals(
    professionSlug: $professionSlug,
    stateCode: $stateCode,
    query: $query,
    page: $page,
    perPage: $perPage
  ) {
    professionals {
      id
      firstName
      lastName
      fullName
      slug
      stateCode
      licenseNumber
      licenseStatus
      headline
      photoUrl
      currentTitle
      currentCompany
      professionName
    }
    totalCount
    hasMore
  }
}
Variables
{
  "professionSlug": "xyz789",
  "stateCode": "abc123",
  "query": "xyz789",
  "page": 987,
  "perPage": 987
}
Response
{
  "data": {
    "searchProfessionals": {
      "professionals": [ProfessionalSummary],
      "totalCount": 123,
      "hasMore": true
    }
  }
}

searchProfessionalsBoard

Description

Search licensing board database for professionals by name and state

Response

Returns [BoardSearchResult!]!

Arguments
Name Description
input - BoardSearchInput!

Example

Query
query searchProfessionalsBoard($input: BoardSearchInput!) {
  searchProfessionalsBoard(input: $input) {
    id
    firstName
    lastName
    fullName
    licenseNumber
    stateCode
    licenseType
    companyName
    city
    expirationDate
    discipline
    licenseStatus
  }
}
Variables
{"input": BoardSearchInput}
Response
{
  "data": {
    "searchProfessionalsBoard": [
      {
        "id": "e62e7364-b824-4611-88df-75f2f8e4b81c",
        "firstName": "abc123",
        "lastName": "xyz789",
        "fullName": "xyz789",
        "licenseNumber": "abc123",
        "stateCode": "abc123",
        "licenseType": "abc123",
        "companyName": "abc123",
        "city": "abc123",
        "expirationDate": "2007-12-03",
        "discipline": "xyz789",
        "licenseStatus": "xyz789"
      }
    ]
  }
}

signingCertificate

Description

Get a single signing certificate by ID

Response

Returns a SigningCertificate

Arguments
Name Description
id - UUID!

Example

Query
query signingCertificate($id: UUID!) {
  signingCertificate(id: $id) {
    id
    name
    description
    commonName
    issuerCn
    serialNumber
    notBefore
    expiresAt
    fingerprintSha256
    isDefault
    lastUsedAt
    insertedAt
    updatedAt
    status
    isValid
    daysUntilExpiry
    hasPrivateKey
  }
}
Variables
{
  "id": "e62e7364-b824-4611-88df-75f2f8e4b81c"
}
Response
{
  "data": {
    "signingCertificate": {
      "id": "e62e7364-b824-4611-88df-75f2f8e4b81c",
      "name": "xyz789",
      "description": "abc123",
      "commonName": "abc123",
      "issuerCn": "xyz789",
      "serialNumber": "xyz789",
      "notBefore": "2007-12-03T10:15:30Z",
      "expiresAt": "2007-12-03T10:15:30Z",
      "fingerprintSha256": "xyz789",
      "isDefault": true,
      "lastUsedAt": "2007-12-03T10:15:30Z",
      "insertedAt": "2007-12-03T10:15:30Z",
      "updatedAt": "2007-12-03T10:15:30Z",
      "status": "ACTIVE",
      "isValid": false,
      "daysUntilExpiry": 123,
      "hasPrivateKey": false
    }
  }
}

signingCertificates

Description

List user's signing certificates

Response

Returns [SigningCertificate!]!

Arguments
Name Description
limit - Int Maximum certificates to return (max 100)

Example

Query
query signingCertificates($limit: Int) {
  signingCertificates(limit: $limit) {
    id
    name
    description
    commonName
    issuerCn
    serialNumber
    notBefore
    expiresAt
    fingerprintSha256
    isDefault
    lastUsedAt
    insertedAt
    updatedAt
    status
    isValid
    daysUntilExpiry
    hasPrivateKey
  }
}
Variables
{"limit": 987}
Response
{
  "data": {
    "signingCertificates": [
      {
        "id": "e62e7364-b824-4611-88df-75f2f8e4b81c",
        "name": "xyz789",
        "description": "abc123",
        "commonName": "xyz789",
        "issuerCn": "abc123",
        "serialNumber": "xyz789",
        "notBefore": "2007-12-03T10:15:30Z",
        "expiresAt": "2007-12-03T10:15:30Z",
        "fingerprintSha256": "xyz789",
        "isDefault": false,
        "lastUsedAt": "2007-12-03T10:15:30Z",
        "insertedAt": "2007-12-03T10:15:30Z",
        "updatedAt": "2007-12-03T10:15:30Z",
        "status": "ACTIVE",
        "isValid": true,
        "daysUntilExpiry": 987,
        "hasPrivateKey": true
      }
    ]
  }
}

subscription

Description

Get the current organization's subscription status

Response

Returns a SubscriptionStatus

Example

Query
query subscription {
  subscription {
    planLevel
    status
    currentPeriodEnd
    cancelAtPeriodEnd
    trialEnd
  }
}
Response
{
  "data": {
    "subscription": {
      "planLevel": "FREE",
      "status": "abc123",
      "currentPeriodEnd": "2007-12-03T10:15:30Z",
      "cancelAtPeriodEnd": true,
      "trialEnd": "2007-12-03T10:15:30Z"
    }
  }
}

verifySeal

Description

Verify a seal by its verification code (public, no auth required)

Response

Returns a SealVerificationResult

Arguments
Name Description
code - String!

Example

Query
query verifySeal($code: String!) {
  verifySeal(code: $code) {
    verificationCode
    documentName
    sealedAt
    signerName
    regionCode
    credentialStatus
    isValid
    documentHash
  }
}
Variables
{"code": "abc123"}
Response
{
  "data": {
    "verifySeal": {
      "verificationCode": "xyz789",
      "documentName": "xyz789",
      "sealedAt": "2007-12-03T10:15:30Z",
      "signerName": "xyz789",
      "regionCode": "xyz789",
      "credentialStatus": "abc123",
      "isValid": true,
      "documentHash": "xyz789"
    }
  }
}

Mutations

acknowledgeMessages

Description

Acknowledge received encrypted messages

Response

Returns a Boolean!

Arguments
Name Description
messageIds - [UUID!]!

Example

Query
mutation acknowledgeMessages($messageIds: [UUID!]!) {
  acknowledgeMessages(messageIds: $messageIds)
}
Variables
{
  "messageIds": [
    "e62e7364-b824-4611-88df-75f2f8e4b81c"
  ]
}
Response
{"data": {"acknowledgeMessages": false}}

addPdfPage

Description

Add a blank page to a PDF document

Response

Returns a PdfOperationResult

Arguments
Name Description
input - AddPageInput!

Example

Query
mutation addPdfPage($input: AddPageInput!) {
  addPdfPage(input: $input) {
    document {
      id
      name
      description
      status
      visibility
      folderId
      organizationId
      insertedAt
      updatedAt
      folder {
        ...DocumentFolderFragment
      }
      versions {
        ...DocumentVersionFragment
      }
      currentVersion {
        ...DocumentVersionFragment
      }
      versionCount
      hasVersions
      downloadUrl
    }
    pageCount
    operationsApplied
    fieldsFilled
    pagesWatermarked
  }
}
Variables
{"input": AddPageInput}
Response
{
  "data": {
    "addPdfPage": {
      "document": Document,
      "pageCount": 987,
      "operationsApplied": 987,
      "fieldsFilled": 987,
      "pagesWatermarked": 987
    }
  }
}

addPdfWatermark

Description

Add a text watermark to PDF pages

Response

Returns a PdfOperationResult

Arguments
Name Description
input - WatermarkInput!

Example

Query
mutation addPdfWatermark($input: WatermarkInput!) {
  addPdfWatermark(input: $input) {
    document {
      id
      name
      description
      status
      visibility
      folderId
      organizationId
      insertedAt
      updatedAt
      folder {
        ...DocumentFolderFragment
      }
      versions {
        ...DocumentVersionFragment
      }
      currentVersion {
        ...DocumentVersionFragment
      }
      versionCount
      hasVersions
      downloadUrl
    }
    pageCount
    operationsApplied
    fieldsFilled
    pagesWatermarked
  }
}
Variables
{"input": WatermarkInput}
Response
{
  "data": {
    "addPdfWatermark": {
      "document": Document,
      "pageCount": 123,
      "operationsApplied": 123,
      "fieldsFilled": 123,
      "pagesWatermarked": 123
    }
  }
}

cancelBatchSealJob

Description

Cancel a batch seal job

Response

Returns a BatchSealJob

Arguments
Name Description
id - UUID!

Example

Query
mutation cancelBatchSealJob($id: UUID!) {
  cancelBatchSealJob(id: $id) {
    id
    status
    totalDocuments
    completedDocuments
    failedDocuments
    startedAt
    completedAt
    insertedAt
    pageMode
    positionX
    positionY
    credential {
      id
      licenseNumber
      regionCode
      licenseType
      displayName
      status
      verificationMethod
      verifiedAt
      lastVerifiedAt
      expirationDate
      rejectionReason
      insertedAt
      updatedAt
      certificateFingerprint
      certificateIssuedAt
      certificateExpiresAt
      isVerified
      isExpired
      canSeal
      stampSvg
    }
    items {
      id
      status
      errorMessage
      processingStartedAt
      processingCompletedAt
      document {
        ...DocumentFragment
      }
      seal {
        ...SealFragment
      }
    }
    progressPercent
    remaining
  }
}
Variables
{
  "id": "e62e7364-b824-4611-88df-75f2f8e4b81c"
}
Response
{
  "data": {
    "cancelBatchSealJob": {
      "id": "e62e7364-b824-4611-88df-75f2f8e4b81c",
      "status": "PENDING",
      "totalDocuments": 123,
      "completedDocuments": 123,
      "failedDocuments": 123,
      "startedAt": "2007-12-03T10:15:30Z",
      "completedAt": "2007-12-03T10:15:30Z",
      "insertedAt": "2007-12-03T10:15:30Z",
      "pageMode": "FIRST",
      "positionX": 123.45,
      "positionY": 123.45,
      "credential": Credential,
      "items": [BatchSealItem],
      "progressPercent": 123,
      "remaining": 987
    }
  }
}

changePassword

Description

Change the current user's password

Response

Returns a ChangePasswordResult

Arguments
Name Description
input - ChangePasswordInput!

Example

Query
mutation changePassword($input: ChangePasswordInput!) {
  changePassword(input: $input) {
    success
  }
}
Variables
{"input": ChangePasswordInput}
Response
{"data": {"changePassword": {"success": false}}}

claimProfessional

Description

Claim a professional license and create a credential

Response

Returns a Credential

Arguments
Name Description
professionalId - UUID!

Example

Query
mutation claimProfessional($professionalId: UUID!) {
  claimProfessional(professionalId: $professionalId) {
    id
    licenseNumber
    regionCode
    licenseType
    displayName
    status
    verificationMethod
    verifiedAt
    lastVerifiedAt
    expirationDate
    rejectionReason
    insertedAt
    updatedAt
    certificateFingerprint
    certificateIssuedAt
    certificateExpiresAt
    isVerified
    isExpired
    canSeal
    stampSvg
  }
}
Variables
{
  "professionalId": "e62e7364-b824-4611-88df-75f2f8e4b81c"
}
Response
{
  "data": {
    "claimProfessional": {
      "id": "e62e7364-b824-4611-88df-75f2f8e4b81c",
      "licenseNumber": "abc123",
      "regionCode": "xyz789",
      "licenseType": "xyz789",
      "displayName": "xyz789",
      "status": "CLAIMED",
      "verificationMethod": "VENDOR_API",
      "verifiedAt": "2007-12-03T10:15:30Z",
      "lastVerifiedAt": "2007-12-03T10:15:30Z",
      "expirationDate": "2007-12-03",
      "rejectionReason": "abc123",
      "insertedAt": "2007-12-03T10:15:30Z",
      "updatedAt": "2007-12-03T10:15:30Z",
      "certificateFingerprint": "xyz789",
      "certificateIssuedAt": "2007-12-03T10:15:30Z",
      "certificateExpiresAt": "2007-12-03T10:15:30Z",
      "isVerified": true,
      "isExpired": true,
      "canSeal": true,
      "stampSvg": "xyz789"
    }
  }
}

createBatchSealJob

Description

Create a batch seal job

Response

Returns a BatchSealJob

Arguments
Name Description
input - CreateBatchSealInput!

Example

Query
mutation createBatchSealJob($input: CreateBatchSealInput!) {
  createBatchSealJob(input: $input) {
    id
    status
    totalDocuments
    completedDocuments
    failedDocuments
    startedAt
    completedAt
    insertedAt
    pageMode
    positionX
    positionY
    credential {
      id
      licenseNumber
      regionCode
      licenseType
      displayName
      status
      verificationMethod
      verifiedAt
      lastVerifiedAt
      expirationDate
      rejectionReason
      insertedAt
      updatedAt
      certificateFingerprint
      certificateIssuedAt
      certificateExpiresAt
      isVerified
      isExpired
      canSeal
      stampSvg
    }
    items {
      id
      status
      errorMessage
      processingStartedAt
      processingCompletedAt
      document {
        ...DocumentFragment
      }
      seal {
        ...SealFragment
      }
    }
    progressPercent
    remaining
  }
}
Variables
{"input": CreateBatchSealInput}
Response
{
  "data": {
    "createBatchSealJob": {
      "id": "e62e7364-b824-4611-88df-75f2f8e4b81c",
      "status": "PENDING",
      "totalDocuments": 987,
      "completedDocuments": 123,
      "failedDocuments": 987,
      "startedAt": "2007-12-03T10:15:30Z",
      "completedAt": "2007-12-03T10:15:30Z",
      "insertedAt": "2007-12-03T10:15:30Z",
      "pageMode": "FIRST",
      "positionX": 123.45,
      "positionY": 123.45,
      "credential": Credential,
      "items": [BatchSealItem],
      "progressPercent": 123,
      "remaining": 123
    }
  }
}

createChatSession

Description

Create a new chat session linked to documents

Response

Returns a ChatSession

Arguments
Name Description
input - CreateChatSessionInput!

Example

Query
mutation createChatSession($input: CreateChatSessionInput!) {
  createChatSession(input: $input) {
    id
    title
    status
    documentIds
    lastMessageAt
    insertedAt
    updatedAt
  }
}
Variables
{"input": CreateChatSessionInput}
Response
{
  "data": {
    "createChatSession": {
      "id": "e62e7364-b824-4611-88df-75f2f8e4b81c",
      "title": "abc123",
      "status": "ACTIVE",
      "documentIds": [
        "e62e7364-b824-4611-88df-75f2f8e4b81c"
      ],
      "lastMessageAt": "2007-12-03T10:15:30Z",
      "insertedAt": "2007-12-03T10:15:30Z",
      "updatedAt": "2007-12-03T10:15:30Z"
    }
  }
}

createCredential

Description

Create a new credential

Response

Returns a Credential

Arguments
Name Description
input - CreateCredentialInput!

Example

Query
mutation createCredential($input: CreateCredentialInput!) {
  createCredential(input: $input) {
    id
    licenseNumber
    regionCode
    licenseType
    displayName
    status
    verificationMethod
    verifiedAt
    lastVerifiedAt
    expirationDate
    rejectionReason
    insertedAt
    updatedAt
    certificateFingerprint
    certificateIssuedAt
    certificateExpiresAt
    isVerified
    isExpired
    canSeal
    stampSvg
  }
}
Variables
{"input": CreateCredentialInput}
Response
{
  "data": {
    "createCredential": {
      "id": "e62e7364-b824-4611-88df-75f2f8e4b81c",
      "licenseNumber": "xyz789",
      "regionCode": "xyz789",
      "licenseType": "abc123",
      "displayName": "xyz789",
      "status": "CLAIMED",
      "verificationMethod": "VENDOR_API",
      "verifiedAt": "2007-12-03T10:15:30Z",
      "lastVerifiedAt": "2007-12-03T10:15:30Z",
      "expirationDate": "2007-12-03",
      "rejectionReason": "xyz789",
      "insertedAt": "2007-12-03T10:15:30Z",
      "updatedAt": "2007-12-03T10:15:30Z",
      "certificateFingerprint": "xyz789",
      "certificateIssuedAt": "2007-12-03T10:15:30Z",
      "certificateExpiresAt": "2007-12-03T10:15:30Z",
      "isVerified": false,
      "isExpired": false,
      "canSeal": false,
      "stampSvg": "abc123"
    }
  }
}

createCustomerSession

Description

Create a Stripe CustomerSession for managing saved payment methods

Response

Returns a CustomerSessionPayload

Example

Query
mutation createCustomerSession {
  createCustomerSession {
    customerId
    clientSecret
  }
}
Response
{
  "data": {
    "createCustomerSession": {
      "customerId": "abc123",
      "clientSecret": "abc123"
    }
  }
}

createDocument

Description

Create a new document

Response

Returns a Document

Arguments
Name Description
input - CreateDocumentInput!

Example

Query
mutation createDocument($input: CreateDocumentInput!) {
  createDocument(input: $input) {
    id
    name
    description
    status
    visibility
    folderId
    organizationId
    insertedAt
    updatedAt
    folder {
      id
      name
      description
      color
      icon
      position
      parentId
      insertedAt
      updatedAt
      parent {
        ...DocumentFolderFragment
      }
      children {
        ...DocumentFolderFragment
      }
      documents {
        ...DocumentFragment
      }
      documentCount
    }
    versions {
      id
      versionNumber
      fileHash
      notes
      insertedAt
      seal {
        ...SealFragment
      }
      createdBy {
        ...UserFragment
      }
      downloadUrl
    }
    currentVersion {
      id
      versionNumber
      fileHash
      notes
      insertedAt
      seal {
        ...SealFragment
      }
      createdBy {
        ...UserFragment
      }
      downloadUrl
    }
    versionCount
    hasVersions
    downloadUrl
  }
}
Variables
{"input": CreateDocumentInput}
Response
{
  "data": {
    "createDocument": {
      "id": "e62e7364-b824-4611-88df-75f2f8e4b81c",
      "name": "xyz789",
      "description": "abc123",
      "status": "DRAFT",
      "visibility": "PRIVATE",
      "folderId": "e62e7364-b824-4611-88df-75f2f8e4b81c",
      "organizationId": "e62e7364-b824-4611-88df-75f2f8e4b81c",
      "insertedAt": "2007-12-03T10:15:30Z",
      "updatedAt": "2007-12-03T10:15:30Z",
      "folder": DocumentFolder,
      "versions": [DocumentVersion],
      "currentVersion": DocumentVersion,
      "versionCount": 987,
      "hasVersions": false,
      "downloadUrl": "xyz789"
    }
  }
}

createFolder

Description

Create a new folder

Response

Returns a DocumentFolder

Arguments
Name Description
input - CreateFolderInput!

Example

Query
mutation createFolder($input: CreateFolderInput!) {
  createFolder(input: $input) {
    id
    name
    description
    color
    icon
    position
    parentId
    insertedAt
    updatedAt
    parent {
      id
      name
      description
      color
      icon
      position
      parentId
      insertedAt
      updatedAt
      parent {
        ...DocumentFolderFragment
      }
      children {
        ...DocumentFolderFragment
      }
      documents {
        ...DocumentFragment
      }
      documentCount
    }
    children {
      id
      name
      description
      color
      icon
      position
      parentId
      insertedAt
      updatedAt
      parent {
        ...DocumentFolderFragment
      }
      children {
        ...DocumentFolderFragment
      }
      documents {
        ...DocumentFragment
      }
      documentCount
    }
    documents {
      id
      name
      description
      status
      visibility
      folderId
      organizationId
      insertedAt
      updatedAt
      folder {
        ...DocumentFolderFragment
      }
      versions {
        ...DocumentVersionFragment
      }
      currentVersion {
        ...DocumentVersionFragment
      }
      versionCount
      hasVersions
      downloadUrl
    }
    documentCount
  }
}
Variables
{"input": CreateFolderInput}
Response
{
  "data": {
    "createFolder": {
      "id": "e62e7364-b824-4611-88df-75f2f8e4b81c",
      "name": "xyz789",
      "description": "abc123",
      "color": "abc123",
      "icon": "abc123",
      "position": 987,
      "parentId": "e62e7364-b824-4611-88df-75f2f8e4b81c",
      "insertedAt": "2007-12-03T10:15:30Z",
      "updatedAt": "2007-12-03T10:15:30Z",
      "parent": DocumentFolder,
      "children": [DocumentFolder],
      "documents": [Document],
      "documentCount": 123
    }
  }
}

createPaymentIntent

Description

Create a Stripe PaymentIntent for plan checkout

Response

Returns a PaymentIntentPayload

Arguments
Name Description
input - CreatePaymentIntentInput!

Example

Query
mutation createPaymentIntent($input: CreatePaymentIntentInput!) {
  createPaymentIntent(input: $input) {
    clientSecret
  }
}
Variables
{"input": CreatePaymentIntentInput}
Response
{
  "data": {
    "createPaymentIntent": {
      "clientSecret": "abc123"
    }
  }
}

createPdf

Description

Create a new blank PDF document

Response

Returns a PdfOperationResult

Arguments
Name Description
input - CreatePdfInput!

Example

Query
mutation createPdf($input: CreatePdfInput!) {
  createPdf(input: $input) {
    document {
      id
      name
      description
      status
      visibility
      folderId
      organizationId
      insertedAt
      updatedAt
      folder {
        ...DocumentFolderFragment
      }
      versions {
        ...DocumentVersionFragment
      }
      currentVersion {
        ...DocumentVersionFragment
      }
      versionCount
      hasVersions
      downloadUrl
    }
    pageCount
    operationsApplied
    fieldsFilled
    pagesWatermarked
  }
}
Variables
{"input": CreatePdfInput}
Response
{
  "data": {
    "createPdf": {
      "document": Document,
      "pageCount": 987,
      "operationsApplied": 987,
      "fieldsFilled": 123,
      "pagesWatermarked": 987
    }
  }
}

createSetupIntent

Description

Create a Stripe SetupIntent for saving a card without charging

Response

Returns a SetupIntentPayload

Example

Query
mutation createSetupIntent {
  createSetupIntent {
    clientSecret
  }
}
Response
{
  "data": {
    "createSetupIntent": {
      "clientSecret": "xyz789"
    }
  }
}

deleteAccount

Description

Delete the current user's account (requires password confirmation)

Response

Returns a DeleteAccountResult

Arguments
Name Description
password - String!

Example

Query
mutation deleteAccount($password: String!) {
  deleteAccount(password: $password) {
    success
  }
}
Variables
{"password": "abc123"}
Response
{"data": {"deleteAccount": {"success": false}}}

deleteCertificate

Description

Delete a signing certificate

Response

Returns a DeleteResult!

Arguments
Name Description
id - UUID!

Example

Query
mutation deleteCertificate($id: UUID!) {
  deleteCertificate(id: $id) {
    id
  }
}
Variables
{
  "id": "e62e7364-b824-4611-88df-75f2f8e4b81c"
}
Response
{
  "data": {
    "deleteCertificate": {
      "id": "e62e7364-b824-4611-88df-75f2f8e4b81c"
    }
  }
}

deleteChatSession

Description

Soft-delete a chat session

Response

Returns a DeleteResult!

Arguments
Name Description
id - UUID!

Example

Query
mutation deleteChatSession($id: UUID!) {
  deleteChatSession(id: $id) {
    id
  }
}
Variables
{
  "id": "e62e7364-b824-4611-88df-75f2f8e4b81c"
}
Response
{
  "data": {
    "deleteChatSession": {
      "id": "e62e7364-b824-4611-88df-75f2f8e4b81c"
    }
  }
}

deleteCredential

Description

Delete a credential

Response

Returns a DeleteResult!

Arguments
Name Description
id - UUID!

Example

Query
mutation deleteCredential($id: UUID!) {
  deleteCredential(id: $id) {
    id
  }
}
Variables
{
  "id": "e62e7364-b824-4611-88df-75f2f8e4b81c"
}
Response
{
  "data": {
    "deleteCredential": {
      "id": "e62e7364-b824-4611-88df-75f2f8e4b81c"
    }
  }
}

deleteDocument

Description

Delete a document

Response

Returns a DeleteResult!

Arguments
Name Description
id - UUID!

Example

Query
mutation deleteDocument($id: UUID!) {
  deleteDocument(id: $id) {
    id
  }
}
Variables
{
  "id": "e62e7364-b824-4611-88df-75f2f8e4b81c"
}
Response
{
  "data": {
    "deleteDocument": {
      "id": "e62e7364-b824-4611-88df-75f2f8e4b81c"
    }
  }
}

deleteFolder

Description

Delete a folder

Response

Returns a DeleteResult!

Arguments
Name Description
id - UUID!

Example

Query
mutation deleteFolder($id: UUID!) {
  deleteFolder(id: $id) {
    id
  }
}
Variables
{
  "id": "e62e7364-b824-4611-88df-75f2f8e4b81c"
}
Response
{
  "data": {
    "deleteFolder": {
      "id": "e62e7364-b824-4611-88df-75f2f8e4b81c"
    }
  }
}

disableMfa

Description

Disable MFA (requires current TOTP code)

Response

Returns a Boolean!

Arguments
Name Description
code - String!

Example

Query
mutation disableMfa($code: String!) {
  disableMfa(code: $code)
}
Variables
{"code": "xyz789"}
Response
{"data": {"disableMfa": false}}

drawOnPdf

Description

Draw shapes and text on a PDF page

Response

Returns a PdfOperationResult

Arguments
Name Description
input - DrawOperationsInput!

Example

Query
mutation drawOnPdf($input: DrawOperationsInput!) {
  drawOnPdf(input: $input) {
    document {
      id
      name
      description
      status
      visibility
      folderId
      organizationId
      insertedAt
      updatedAt
      folder {
        ...DocumentFolderFragment
      }
      versions {
        ...DocumentVersionFragment
      }
      currentVersion {
        ...DocumentVersionFragment
      }
      versionCount
      hasVersions
      downloadUrl
    }
    pageCount
    operationsApplied
    fieldsFilled
    pagesWatermarked
  }
}
Variables
{"input": DrawOperationsInput}
Response
{
  "data": {
    "drawOnPdf": {
      "document": Document,
      "pageCount": 987,
      "operationsApplied": 123,
      "fieldsFilled": 987,
      "pagesWatermarked": 123
    }
  }
}

drawPdfImage

Description

Draw an image on a PDF page

Response

Returns a PdfOperationResult

Arguments
Name Description
input - DrawImageInput!

Example

Query
mutation drawPdfImage($input: DrawImageInput!) {
  drawPdfImage(input: $input) {
    document {
      id
      name
      description
      status
      visibility
      folderId
      organizationId
      insertedAt
      updatedAt
      folder {
        ...DocumentFolderFragment
      }
      versions {
        ...DocumentVersionFragment
      }
      currentVersion {
        ...DocumentVersionFragment
      }
      versionCount
      hasVersions
      downloadUrl
    }
    pageCount
    operationsApplied
    fieldsFilled
    pagesWatermarked
  }
}
Variables
{"input": DrawImageInput}
Response
{
  "data": {
    "drawPdfImage": {
      "document": Document,
      "pageCount": 987,
      "operationsApplied": 987,
      "fieldsFilled": 987,
      "pagesWatermarked": 987
    }
  }
}

enableMfa

Description

Verify code and enable MFA, returns backup codes

Response

Returns a MfaEnableResult

Arguments
Name Description
input - EnableMfaInput!

Example

Query
mutation enableMfa($input: EnableMfaInput!) {
  enableMfa(input: $input) {
    backupCodes
    enabledAt
  }
}
Variables
{"input": EnableMfaInput}
Response
{
  "data": {
    "enableMfa": {
      "backupCodes": ["xyz789"],
      "enabledAt": "2007-12-03T10:15:30Z"
    }
  }
}

exportCredentialStamp

Description

Export a credential stamp as a file (PDF, PNG, JPEG, or TIFF)

Response

Returns a StampExport

Arguments
Name Description
id - UUID!
format - StampExportFormat!

Example

Query
mutation exportCredentialStamp(
  $id: UUID!,
  $format: StampExportFormat!
) {
  exportCredentialStamp(
    id: $id,
    format: $format
  ) {
    data
    filename
    contentType
  }
}
Variables
{
  "id": "e62e7364-b824-4611-88df-75f2f8e4b81c",
  "format": "PDF"
}
Response
{
  "data": {
    "exportCredentialStamp": {
      "data": "xyz789",
      "filename": "abc123",
      "contentType": "abc123"
    }
  }
}

extractPages

Description

Extract specific pages from a PDF into a new document

Response

Returns a PdfOperationResult

Arguments
Name Description
input - ExtractPagesInput!

Example

Query
mutation extractPages($input: ExtractPagesInput!) {
  extractPages(input: $input) {
    document {
      id
      name
      description
      status
      visibility
      folderId
      organizationId
      insertedAt
      updatedAt
      folder {
        ...DocumentFolderFragment
      }
      versions {
        ...DocumentVersionFragment
      }
      currentVersion {
        ...DocumentVersionFragment
      }
      versionCount
      hasVersions
      downloadUrl
    }
    pageCount
    operationsApplied
    fieldsFilled
    pagesWatermarked
  }
}
Variables
{"input": ExtractPagesInput}
Response
{
  "data": {
    "extractPages": {
      "document": Document,
      "pageCount": 987,
      "operationsApplied": 123,
      "fieldsFilled": 123,
      "pagesWatermarked": 987
    }
  }
}

fillPdfForm

Description

Fill form fields in a PDF

Response

Returns a PdfOperationResult

Arguments
Name Description
input - FillFormInput!

Example

Query
mutation fillPdfForm($input: FillFormInput!) {
  fillPdfForm(input: $input) {
    document {
      id
      name
      description
      status
      visibility
      folderId
      organizationId
      insertedAt
      updatedAt
      folder {
        ...DocumentFolderFragment
      }
      versions {
        ...DocumentVersionFragment
      }
      currentVersion {
        ...DocumentVersionFragment
      }
      versionCount
      hasVersions
      downloadUrl
    }
    pageCount
    operationsApplied
    fieldsFilled
    pagesWatermarked
  }
}
Variables
{"input": FillFormInput}
Response
{
  "data": {
    "fillPdfForm": {
      "document": Document,
      "pageCount": 987,
      "operationsApplied": 987,
      "fieldsFilled": 123,
      "pagesWatermarked": 987
    }
  }
}

flattenPdfForm

Description

Flatten interactive form fields in a PDF

Response

Returns a PdfOperationResult

Arguments
Name Description
documentId - UUID!

Example

Query
mutation flattenPdfForm($documentId: UUID!) {
  flattenPdfForm(documentId: $documentId) {
    document {
      id
      name
      description
      status
      visibility
      folderId
      organizationId
      insertedAt
      updatedAt
      folder {
        ...DocumentFolderFragment
      }
      versions {
        ...DocumentVersionFragment
      }
      currentVersion {
        ...DocumentVersionFragment
      }
      versionCount
      hasVersions
      downloadUrl
    }
    pageCount
    operationsApplied
    fieldsFilled
    pagesWatermarked
  }
}
Variables
{
  "documentId": "e62e7364-b824-4611-88df-75f2f8e4b81c"
}
Response
{
  "data": {
    "flattenPdfForm": {
      "document": Document,
      "pageCount": 123,
      "operationsApplied": 123,
      "fieldsFilled": 123,
      "pagesWatermarked": 123
    }
  }
}

login

Description

Login with email and password

Response

Returns an AuthPayload

Arguments
Name Description
input - LoginInput!

Example

Query
mutation login($input: LoginInput!) {
  login(input: $input) {
    accessToken
    refreshToken
    expiresIn
    mfaPendingToken
    mfaRequired
    user {
      id
      email
      displayName
      role
      mfaEnabled
      confirmedAt
      insertedAt
      updatedAt
      uiTheme
      stampExportSize
      betaFeaturesEnabled
      verificationStatus
      credentialCount
      trialActive
    }
  }
}
Variables
{"input": LoginInput}
Response
{
  "data": {
    "login": {
      "accessToken": "xyz789",
      "refreshToken": "xyz789",
      "expiresIn": 987,
      "mfaPendingToken": "abc123",
      "mfaRequired": false,
      "user": User
    }
  }
}

logout

Description

Logout (revoke refresh token)

Response

Returns a Boolean!

Arguments
Name Description
refreshToken - String!

Example

Query
mutation logout($refreshToken: String!) {
  logout(refreshToken: $refreshToken)
}
Variables
{"refreshToken": "abc123"}
Response
{"data": {"logout": true}}

mergePdfs

Description

Merge multiple PDF documents into one

Response

Returns a PdfOperationResult

Arguments
Name Description
input - MergePdfsInput!

Example

Query
mutation mergePdfs($input: MergePdfsInput!) {
  mergePdfs(input: $input) {
    document {
      id
      name
      description
      status
      visibility
      folderId
      organizationId
      insertedAt
      updatedAt
      folder {
        ...DocumentFolderFragment
      }
      versions {
        ...DocumentVersionFragment
      }
      currentVersion {
        ...DocumentVersionFragment
      }
      versionCount
      hasVersions
      downloadUrl
    }
    pageCount
    operationsApplied
    fieldsFilled
    pagesWatermarked
  }
}
Variables
{"input": MergePdfsInput}
Response
{
  "data": {
    "mergePdfs": {
      "document": Document,
      "pageCount": 123,
      "operationsApplied": 987,
      "fieldsFilled": 987,
      "pagesWatermarked": 987
    }
  }
}

moveDocument

Description

Move a document to a folder

Response

Returns a Document

Arguments
Name Description
id - UUID!
folderId - UUID

Example

Query
mutation moveDocument(
  $id: UUID!,
  $folderId: UUID
) {
  moveDocument(
    id: $id,
    folderId: $folderId
  ) {
    id
    name
    description
    status
    visibility
    folderId
    organizationId
    insertedAt
    updatedAt
    folder {
      id
      name
      description
      color
      icon
      position
      parentId
      insertedAt
      updatedAt
      parent {
        ...DocumentFolderFragment
      }
      children {
        ...DocumentFolderFragment
      }
      documents {
        ...DocumentFragment
      }
      documentCount
    }
    versions {
      id
      versionNumber
      fileHash
      notes
      insertedAt
      seal {
        ...SealFragment
      }
      createdBy {
        ...UserFragment
      }
      downloadUrl
    }
    currentVersion {
      id
      versionNumber
      fileHash
      notes
      insertedAt
      seal {
        ...SealFragment
      }
      createdBy {
        ...UserFragment
      }
      downloadUrl
    }
    versionCount
    hasVersions
    downloadUrl
  }
}
Variables
{
  "id": "e62e7364-b824-4611-88df-75f2f8e4b81c",
  "folderId": "e62e7364-b824-4611-88df-75f2f8e4b81c"
}
Response
{
  "data": {
    "moveDocument": {
      "id": "e62e7364-b824-4611-88df-75f2f8e4b81c",
      "name": "xyz789",
      "description": "abc123",
      "status": "DRAFT",
      "visibility": "PRIVATE",
      "folderId": "e62e7364-b824-4611-88df-75f2f8e4b81c",
      "organizationId": "e62e7364-b824-4611-88df-75f2f8e4b81c",
      "insertedAt": "2007-12-03T10:15:30Z",
      "updatedAt": "2007-12-03T10:15:30Z",
      "folder": DocumentFolder,
      "versions": [DocumentVersion],
      "currentVersion": DocumentVersion,
      "versionCount": 987,
      "hasVersions": false,
      "downloadUrl": "xyz789"
    }
  }
}

movePdfPage

Description

Move a page to a different position within a PDF

Response

Returns a PdfOperationResult

Arguments
Name Description
input - MovePdfPageInput!

Example

Query
mutation movePdfPage($input: MovePdfPageInput!) {
  movePdfPage(input: $input) {
    document {
      id
      name
      description
      status
      visibility
      folderId
      organizationId
      insertedAt
      updatedAt
      folder {
        ...DocumentFolderFragment
      }
      versions {
        ...DocumentVersionFragment
      }
      currentVersion {
        ...DocumentVersionFragment
      }
      versionCount
      hasVersions
      downloadUrl
    }
    pageCount
    operationsApplied
    fieldsFilled
    pagesWatermarked
  }
}
Variables
{"input": MovePdfPageInput}
Response
{
  "data": {
    "movePdfPage": {
      "document": Document,
      "pageCount": 123,
      "operationsApplied": 987,
      "fieldsFilled": 987,
      "pagesWatermarked": 987
    }
  }
}

refreshToken

Description

Refresh access token

Response

Returns a RefreshPayload

Arguments
Name Description
refreshToken - String!

Example

Query
mutation refreshToken($refreshToken: String!) {
  refreshToken(refreshToken: $refreshToken) {
    accessToken
    refreshToken
    expiresIn
  }
}
Variables
{"refreshToken": "abc123"}
Response
{
  "data": {
    "refreshToken": {
      "accessToken": "abc123",
      "refreshToken": "abc123",
      "expiresIn": 123
    }
  }
}

regenerateBackupCodes

Description

Regenerate MFA backup codes (requires current TOTP code)

Response

Returns [String!]!

Arguments
Name Description
code - String!

Example

Query
mutation regenerateBackupCodes($code: String!) {
  regenerateBackupCodes(code: $code)
}
Variables
{"code": "xyz789"}
Response
{
  "data": {
    "regenerateBackupCodes": ["abc123"]
  }
}

registerPrekeys

Description

Register pre-key bundle for Signal Protocol E2E encryption

Response

Returns a Boolean!

Arguments
Name Description
input - RegisterPrekeysInput!

Example

Query
mutation registerPrekeys($input: RegisterPrekeysInput!) {
  registerPrekeys(input: $input)
}
Variables
{"input": RegisterPrekeysInput}
Response
{"data": {"registerPrekeys": true}}

registerUser

Description

Register a new user with email and password

Response

Returns an AuthPayload

Arguments
Name Description
input - RegisterInput!

Example

Query
mutation registerUser($input: RegisterInput!) {
  registerUser(input: $input) {
    accessToken
    refreshToken
    expiresIn
    mfaPendingToken
    mfaRequired
    user {
      id
      email
      displayName
      role
      mfaEnabled
      confirmedAt
      insertedAt
      updatedAt
      uiTheme
      stampExportSize
      betaFeaturesEnabled
      verificationStatus
      credentialCount
      trialActive
    }
  }
}
Variables
{"input": RegisterInput}
Response
{
  "data": {
    "registerUser": {
      "accessToken": "xyz789",
      "refreshToken": "xyz789",
      "expiresIn": 987,
      "mfaPendingToken": "xyz789",
      "mfaRequired": false,
      "user": User
    }
  }
}

removePdfPage

Description

Remove a page from a PDF document

Response

Returns a PdfOperationResult

Arguments
Name Description
input - RemovePdfPageInput!

Example

Query
mutation removePdfPage($input: RemovePdfPageInput!) {
  removePdfPage(input: $input) {
    document {
      id
      name
      description
      status
      visibility
      folderId
      organizationId
      insertedAt
      updatedAt
      folder {
        ...DocumentFolderFragment
      }
      versions {
        ...DocumentVersionFragment
      }
      currentVersion {
        ...DocumentVersionFragment
      }
      versionCount
      hasVersions
      downloadUrl
    }
    pageCount
    operationsApplied
    fieldsFilled
    pagesWatermarked
  }
}
Variables
{"input": RemovePdfPageInput}
Response
{
  "data": {
    "removePdfPage": {
      "document": Document,
      "pageCount": 123,
      "operationsApplied": 987,
      "fieldsFilled": 987,
      "pagesWatermarked": 123
    }
  }
}

removePdfProtection

Description

Remove password protection from a PDF

Response

Returns a PdfOperationResult

Arguments
Name Description
input - RemovePdfProtectionInput!

Example

Query
mutation removePdfProtection($input: RemovePdfProtectionInput!) {
  removePdfProtection(input: $input) {
    document {
      id
      name
      description
      status
      visibility
      folderId
      organizationId
      insertedAt
      updatedAt
      folder {
        ...DocumentFolderFragment
      }
      versions {
        ...DocumentVersionFragment
      }
      currentVersion {
        ...DocumentVersionFragment
      }
      versionCount
      hasVersions
      downloadUrl
    }
    pageCount
    operationsApplied
    fieldsFilled
    pagesWatermarked
  }
}
Variables
{"input": RemovePdfProtectionInput}
Response
{
  "data": {
    "removePdfProtection": {
      "document": Document,
      "pageCount": 987,
      "operationsApplied": 123,
      "fieldsFilled": 987,
      "pagesWatermarked": 987
    }
  }
}

requestEmailChange

Description

Request an email address change (sends confirmation email)

Response

Returns a RequestEmailChangeResult

Arguments
Name Description
input - RequestEmailChangeInput!

Example

Query
mutation requestEmailChange($input: RequestEmailChangeInput!) {
  requestEmailChange(input: $input) {
    success
  }
}
Variables
{"input": RequestEmailChangeInput}
Response
{"data": {"requestEmailChange": {"success": true}}}

requestPasswordReset

Description

Request a password reset email

Response

Returns a Boolean!

Arguments
Name Description
email - String!

Example

Query
mutation requestPasswordReset($email: String!) {
  requestPasswordReset(email: $email)
}
Variables
{"email": "xyz789"}
Response
{"data": {"requestPasswordReset": false}}

resetPassword

Description

Reset password using a token from the reset email

Response

Returns a ChangePasswordResult

Arguments
Name Description
input - ResetPasswordInput!

Example

Query
mutation resetPassword($input: ResetPasswordInput!) {
  resetPassword(input: $input) {
    success
  }
}
Variables
{"input": ResetPasswordInput}
Response
{"data": {"resetPassword": {"success": true}}}

sealDocument

Description

Seal a document

Response

Returns a Seal

Arguments
Name Description
input - SealDocumentInput!

Example

Query
mutation sealDocument($input: SealDocumentInput!) {
  sealDocument(input: $input) {
    id
    verificationCode
    documentHash
    sealedAt
    insertedAt
    document {
      id
      name
      description
      status
      visibility
      folderId
      organizationId
      insertedAt
      updatedAt
      folder {
        ...DocumentFolderFragment
      }
      versions {
        ...DocumentVersionFragment
      }
      currentVersion {
        ...DocumentVersionFragment
      }
      versionCount
      hasVersions
      downloadUrl
    }
    credential {
      id
      licenseNumber
      regionCode
      licenseType
      displayName
      status
      verificationMethod
      verifiedAt
      lastVerifiedAt
      expirationDate
      rejectionReason
      insertedAt
      updatedAt
      certificateFingerprint
      certificateIssuedAt
      certificateExpiresAt
      isVerified
      isExpired
      canSeal
      stampSvg
    }
    signingCertificate {
      id
      name
      description
      commonName
      issuerCn
      serialNumber
      notBefore
      expiresAt
      fingerprintSha256
      isDefault
      lastUsedAt
      insertedAt
      updatedAt
      status
      isValid
      daysUntilExpiry
      hasPrivateKey
    }
    pkiSigned
    verificationUrl
  }
}
Variables
{"input": SealDocumentInput}
Response
{
  "data": {
    "sealDocument": {
      "id": "e62e7364-b824-4611-88df-75f2f8e4b81c",
      "verificationCode": "xyz789",
      "documentHash": "xyz789",
      "sealedAt": "2007-12-03T10:15:30Z",
      "insertedAt": "2007-12-03T10:15:30Z",
      "document": Document,
      "credential": Credential,
      "signingCertificate": SigningCertificate,
      "pkiSigned": false,
      "verificationUrl": "abc123"
    }
  }
}

sendChatMessage

Description

Persist a chat message (user or assistant)

Response

Returns a ChatMessage

Arguments
Name Description
input - SendChatMessageInput!

Example

Query
mutation sendChatMessage($input: SendChatMessageInput!) {
  sendChatMessage(input: $input) {
    id
    sessionId
    role
    content
    tokenCount
    insertedAt
  }
}
Variables
{"input": SendChatMessageInput}
Response
{
  "data": {
    "sendChatMessage": {
      "id": "e62e7364-b824-4611-88df-75f2f8e4b81c",
      "sessionId": "e62e7364-b824-4611-88df-75f2f8e4b81c",
      "role": "USER",
      "content": "abc123",
      "tokenCount": 987,
      "insertedAt": "2007-12-03T10:15:30Z"
    }
  }
}

sendEncryptedMessage

Description

Send an encrypted message via Signal Protocol

Response

Returns a Boolean!

Arguments
Name Description
input - SendEncryptedMessageInput!

Example

Query
mutation sendEncryptedMessage($input: SendEncryptedMessageInput!) {
  sendEncryptedMessage(input: $input)
}
Variables
{"input": SendEncryptedMessageInput}
Response
{"data": {"sendEncryptedMessage": true}}

setDefaultCertificate

Description

Set a signing certificate as the default

Response

Returns a SigningCertificate

Arguments
Name Description
id - UUID!

Example

Query
mutation setDefaultCertificate($id: UUID!) {
  setDefaultCertificate(id: $id) {
    id
    name
    description
    commonName
    issuerCn
    serialNumber
    notBefore
    expiresAt
    fingerprintSha256
    isDefault
    lastUsedAt
    insertedAt
    updatedAt
    status
    isValid
    daysUntilExpiry
    hasPrivateKey
  }
}
Variables
{
  "id": "e62e7364-b824-4611-88df-75f2f8e4b81c"
}
Response
{
  "data": {
    "setDefaultCertificate": {
      "id": "e62e7364-b824-4611-88df-75f2f8e4b81c",
      "name": "xyz789",
      "description": "xyz789",
      "commonName": "xyz789",
      "issuerCn": "xyz789",
      "serialNumber": "xyz789",
      "notBefore": "2007-12-03T10:15:30Z",
      "expiresAt": "2007-12-03T10:15:30Z",
      "fingerprintSha256": "abc123",
      "isDefault": true,
      "lastUsedAt": "2007-12-03T10:15:30Z",
      "insertedAt": "2007-12-03T10:15:30Z",
      "updatedAt": "2007-12-03T10:15:30Z",
      "status": "ACTIVE",
      "isValid": true,
      "daysUntilExpiry": 123,
      "hasPrivateKey": true
    }
  }
}

setPdfMetadata

Description

Set PDF document metadata

Response

Returns a PdfOperationResult

Arguments
Name Description
documentId - UUID!
metadata - PdfMetadataInput!

Example

Query
mutation setPdfMetadata(
  $documentId: UUID!,
  $metadata: PdfMetadataInput!
) {
  setPdfMetadata(
    documentId: $documentId,
    metadata: $metadata
  ) {
    document {
      id
      name
      description
      status
      visibility
      folderId
      organizationId
      insertedAt
      updatedAt
      folder {
        ...DocumentFolderFragment
      }
      versions {
        ...DocumentVersionFragment
      }
      currentVersion {
        ...DocumentVersionFragment
      }
      versionCount
      hasVersions
      downloadUrl
    }
    pageCount
    operationsApplied
    fieldsFilled
    pagesWatermarked
  }
}
Variables
{
  "documentId": "e62e7364-b824-4611-88df-75f2f8e4b81c",
  "metadata": PdfMetadataInput
}
Response
{
  "data": {
    "setPdfMetadata": {
      "document": Document,
      "pageCount": 987,
      "operationsApplied": 123,
      "fieldsFilled": 123,
      "pagesWatermarked": 123
    }
  }
}

setPdfProtection

Description

Set PDF password protection and permissions

Response

Returns a PdfOperationResult

Arguments
Name Description
input - PdfProtectionInput!

Example

Query
mutation setPdfProtection($input: PdfProtectionInput!) {
  setPdfProtection(input: $input) {
    document {
      id
      name
      description
      status
      visibility
      folderId
      organizationId
      insertedAt
      updatedAt
      folder {
        ...DocumentFolderFragment
      }
      versions {
        ...DocumentVersionFragment
      }
      currentVersion {
        ...DocumentVersionFragment
      }
      versionCount
      hasVersions
      downloadUrl
    }
    pageCount
    operationsApplied
    fieldsFilled
    pagesWatermarked
  }
}
Variables
{"input": PdfProtectionInput}
Response
{
  "data": {
    "setPdfProtection": {
      "document": Document,
      "pageCount": 123,
      "operationsApplied": 123,
      "fieldsFilled": 123,
      "pagesWatermarked": 123
    }
  }
}

setupMfa

Description

Generate MFA secret and otpauth URI for setup

Response

Returns a MfaSetup

Example

Query
mutation setupMfa {
  setupMfa {
    secret
    otpauthUri
  }
}
Response
{
  "data": {
    "setupMfa": {
      "secret": "abc123",
      "otpauthUri": "xyz789"
    }
  }
}

startBatchSealJob

Description

Start a batch seal job

Response

Returns a BatchSealJob

Arguments
Name Description
id - UUID!

Example

Query
mutation startBatchSealJob($id: UUID!) {
  startBatchSealJob(id: $id) {
    id
    status
    totalDocuments
    completedDocuments
    failedDocuments
    startedAt
    completedAt
    insertedAt
    pageMode
    positionX
    positionY
    credential {
      id
      licenseNumber
      regionCode
      licenseType
      displayName
      status
      verificationMethod
      verifiedAt
      lastVerifiedAt
      expirationDate
      rejectionReason
      insertedAt
      updatedAt
      certificateFingerprint
      certificateIssuedAt
      certificateExpiresAt
      isVerified
      isExpired
      canSeal
      stampSvg
    }
    items {
      id
      status
      errorMessage
      processingStartedAt
      processingCompletedAt
      document {
        ...DocumentFragment
      }
      seal {
        ...SealFragment
      }
    }
    progressPercent
    remaining
  }
}
Variables
{
  "id": "e62e7364-b824-4611-88df-75f2f8e4b81c"
}
Response
{
  "data": {
    "startBatchSealJob": {
      "id": "e62e7364-b824-4611-88df-75f2f8e4b81c",
      "status": "PENDING",
      "totalDocuments": 987,
      "completedDocuments": 987,
      "failedDocuments": 987,
      "startedAt": "2007-12-03T10:15:30Z",
      "completedAt": "2007-12-03T10:15:30Z",
      "insertedAt": "2007-12-03T10:15:30Z",
      "pageMode": "FIRST",
      "positionX": 987.65,
      "positionY": 987.65,
      "credential": Credential,
      "items": [BatchSealItem],
      "progressPercent": 987,
      "remaining": 987
    }
  }
}

submitVerification

Description

Submit government ID for verification

Response

Returns a VerificationResult

Arguments
Name Description
input - SubmitVerificationInput!

Example

Query
mutation submitVerification($input: SubmitVerificationInput!) {
  submitVerification(input: $input) {
    id
    status
  }
}
Variables
{"input": SubmitVerificationInput}
Response
{
  "data": {
    "submitVerification": {
      "id": "e62e7364-b824-4611-88df-75f2f8e4b81c",
      "status": "xyz789"
    }
  }
}

switchOrganization

Description

Switch active organization and get new tokens

Response

Returns an AuthPayload

Arguments
Name Description
organizationId - UUID!

Example

Query
mutation switchOrganization($organizationId: UUID!) {
  switchOrganization(organizationId: $organizationId) {
    accessToken
    refreshToken
    expiresIn
    mfaPendingToken
    mfaRequired
    user {
      id
      email
      displayName
      role
      mfaEnabled
      confirmedAt
      insertedAt
      updatedAt
      uiTheme
      stampExportSize
      betaFeaturesEnabled
      verificationStatus
      credentialCount
      trialActive
    }
  }
}
Variables
{
  "organizationId": "e62e7364-b824-4611-88df-75f2f8e4b81c"
}
Response
{
  "data": {
    "switchOrganization": {
      "accessToken": "abc123",
      "refreshToken": "xyz789",
      "expiresIn": 987,
      "mfaPendingToken": "xyz789",
      "mfaRequired": true,
      "user": User
    }
  }
}

updateCredential

Description

Update a credential

Response

Returns a Credential

Arguments
Name Description
id - UUID!
input - UpdateCredentialInput!

Example

Query
mutation updateCredential(
  $id: UUID!,
  $input: UpdateCredentialInput!
) {
  updateCredential(
    id: $id,
    input: $input
  ) {
    id
    licenseNumber
    regionCode
    licenseType
    displayName
    status
    verificationMethod
    verifiedAt
    lastVerifiedAt
    expirationDate
    rejectionReason
    insertedAt
    updatedAt
    certificateFingerprint
    certificateIssuedAt
    certificateExpiresAt
    isVerified
    isExpired
    canSeal
    stampSvg
  }
}
Variables
{
  "id": "e62e7364-b824-4611-88df-75f2f8e4b81c",
  "input": UpdateCredentialInput
}
Response
{
  "data": {
    "updateCredential": {
      "id": "e62e7364-b824-4611-88df-75f2f8e4b81c",
      "licenseNumber": "xyz789",
      "regionCode": "abc123",
      "licenseType": "abc123",
      "displayName": "xyz789",
      "status": "CLAIMED",
      "verificationMethod": "VENDOR_API",
      "verifiedAt": "2007-12-03T10:15:30Z",
      "lastVerifiedAt": "2007-12-03T10:15:30Z",
      "expirationDate": "2007-12-03",
      "rejectionReason": "abc123",
      "insertedAt": "2007-12-03T10:15:30Z",
      "updatedAt": "2007-12-03T10:15:30Z",
      "certificateFingerprint": "abc123",
      "certificateIssuedAt": "2007-12-03T10:15:30Z",
      "certificateExpiresAt": "2007-12-03T10:15:30Z",
      "isVerified": false,
      "isExpired": true,
      "canSeal": false,
      "stampSvg": "abc123"
    }
  }
}

updateDocument

Description

Update a document

Response

Returns a Document

Arguments
Name Description
id - UUID!
input - UpdateDocumentInput!

Example

Query
mutation updateDocument(
  $id: UUID!,
  $input: UpdateDocumentInput!
) {
  updateDocument(
    id: $id,
    input: $input
  ) {
    id
    name
    description
    status
    visibility
    folderId
    organizationId
    insertedAt
    updatedAt
    folder {
      id
      name
      description
      color
      icon
      position
      parentId
      insertedAt
      updatedAt
      parent {
        ...DocumentFolderFragment
      }
      children {
        ...DocumentFolderFragment
      }
      documents {
        ...DocumentFragment
      }
      documentCount
    }
    versions {
      id
      versionNumber
      fileHash
      notes
      insertedAt
      seal {
        ...SealFragment
      }
      createdBy {
        ...UserFragment
      }
      downloadUrl
    }
    currentVersion {
      id
      versionNumber
      fileHash
      notes
      insertedAt
      seal {
        ...SealFragment
      }
      createdBy {
        ...UserFragment
      }
      downloadUrl
    }
    versionCount
    hasVersions
    downloadUrl
  }
}
Variables
{
  "id": "e62e7364-b824-4611-88df-75f2f8e4b81c",
  "input": UpdateDocumentInput
}
Response
{
  "data": {
    "updateDocument": {
      "id": "e62e7364-b824-4611-88df-75f2f8e4b81c",
      "name": "xyz789",
      "description": "xyz789",
      "status": "DRAFT",
      "visibility": "PRIVATE",
      "folderId": "e62e7364-b824-4611-88df-75f2f8e4b81c",
      "organizationId": "e62e7364-b824-4611-88df-75f2f8e4b81c",
      "insertedAt": "2007-12-03T10:15:30Z",
      "updatedAt": "2007-12-03T10:15:30Z",
      "folder": DocumentFolder,
      "versions": [DocumentVersion],
      "currentVersion": DocumentVersion,
      "versionCount": 123,
      "hasVersions": false,
      "downloadUrl": "abc123"
    }
  }
}

updateFolder

Description

Update a folder

Response

Returns a DocumentFolder

Arguments
Name Description
id - UUID!
input - UpdateFolderInput!

Example

Query
mutation updateFolder(
  $id: UUID!,
  $input: UpdateFolderInput!
) {
  updateFolder(
    id: $id,
    input: $input
  ) {
    id
    name
    description
    color
    icon
    position
    parentId
    insertedAt
    updatedAt
    parent {
      id
      name
      description
      color
      icon
      position
      parentId
      insertedAt
      updatedAt
      parent {
        ...DocumentFolderFragment
      }
      children {
        ...DocumentFolderFragment
      }
      documents {
        ...DocumentFragment
      }
      documentCount
    }
    children {
      id
      name
      description
      color
      icon
      position
      parentId
      insertedAt
      updatedAt
      parent {
        ...DocumentFolderFragment
      }
      children {
        ...DocumentFolderFragment
      }
      documents {
        ...DocumentFragment
      }
      documentCount
    }
    documents {
      id
      name
      description
      status
      visibility
      folderId
      organizationId
      insertedAt
      updatedAt
      folder {
        ...DocumentFolderFragment
      }
      versions {
        ...DocumentVersionFragment
      }
      currentVersion {
        ...DocumentVersionFragment
      }
      versionCount
      hasVersions
      downloadUrl
    }
    documentCount
  }
}
Variables
{
  "id": "e62e7364-b824-4611-88df-75f2f8e4b81c",
  "input": UpdateFolderInput
}
Response
{
  "data": {
    "updateFolder": {
      "id": "e62e7364-b824-4611-88df-75f2f8e4b81c",
      "name": "abc123",
      "description": "xyz789",
      "color": "abc123",
      "icon": "abc123",
      "position": 987,
      "parentId": "e62e7364-b824-4611-88df-75f2f8e4b81c",
      "insertedAt": "2007-12-03T10:15:30Z",
      "updatedAt": "2007-12-03T10:15:30Z",
      "parent": DocumentFolder,
      "children": [DocumentFolder],
      "documents": [Document],
      "documentCount": 987
    }
  }
}

uploadDocument

Description

Upload a file and create a document from it

Response

Returns a Document

Arguments
Name Description
input - UploadDocumentInput!

Example

Query
mutation uploadDocument($input: UploadDocumentInput!) {
  uploadDocument(input: $input) {
    id
    name
    description
    status
    visibility
    folderId
    organizationId
    insertedAt
    updatedAt
    folder {
      id
      name
      description
      color
      icon
      position
      parentId
      insertedAt
      updatedAt
      parent {
        ...DocumentFolderFragment
      }
      children {
        ...DocumentFolderFragment
      }
      documents {
        ...DocumentFragment
      }
      documentCount
    }
    versions {
      id
      versionNumber
      fileHash
      notes
      insertedAt
      seal {
        ...SealFragment
      }
      createdBy {
        ...UserFragment
      }
      downloadUrl
    }
    currentVersion {
      id
      versionNumber
      fileHash
      notes
      insertedAt
      seal {
        ...SealFragment
      }
      createdBy {
        ...UserFragment
      }
      downloadUrl
    }
    versionCount
    hasVersions
    downloadUrl
  }
}
Variables
{"input": UploadDocumentInput}
Response
{
  "data": {
    "uploadDocument": {
      "id": "e62e7364-b824-4611-88df-75f2f8e4b81c",
      "name": "abc123",
      "description": "xyz789",
      "status": "DRAFT",
      "visibility": "PRIVATE",
      "folderId": "e62e7364-b824-4611-88df-75f2f8e4b81c",
      "organizationId": "e62e7364-b824-4611-88df-75f2f8e4b81c",
      "insertedAt": "2007-12-03T10:15:30Z",
      "updatedAt": "2007-12-03T10:15:30Z",
      "folder": DocumentFolder,
      "versions": [DocumentVersion],
      "currentVersion": DocumentVersion,
      "versionCount": 987,
      "hasVersions": false,
      "downloadUrl": "abc123"
    }
  }
}

uploadDocumentChunks

Description

Upload pre-chunked document text for embedding and storage

Response

Returns a ChunkUploadResult

Arguments
Name Description
documentId - UUID!
chunks - [ChunkInput!]!

Example

Query
mutation uploadDocumentChunks(
  $documentId: UUID!,
  $chunks: [ChunkInput!]!
) {
  uploadDocumentChunks(
    documentId: $documentId,
    chunks: $chunks
  ) {
    count
    errors
  }
}
Variables
{
  "documentId": "e62e7364-b824-4611-88df-75f2f8e4b81c",
  "chunks": [ChunkInput]
}
Response
{
  "data": {
    "uploadDocumentChunks": {
      "count": 123,
      "errors": ["xyz789"]
    }
  }
}

uploadFile

Description

Upload a file and return metadata

Response

Returns an UploadResult

Arguments
Name Description
file - Upload!

Example

Query
mutation uploadFile($file: Upload!) {
  uploadFile(file: $file) {
    filename
    contentType
    size
    fileHash
  }
}
Variables
{"file": Upload}
Response
{
  "data": {
    "uploadFile": {
      "filename": "xyz789",
      "contentType": "abc123",
      "size": 123,
      "fileHash": "xyz789"
    }
  }
}

uploadSigningCertificate

Description

Upload a PEM-encoded X.509 signing certificate

Response

Returns a SigningCertificate

Arguments
Name Description
input - UploadCertificateInput!

Example

Query
mutation uploadSigningCertificate($input: UploadCertificateInput!) {
  uploadSigningCertificate(input: $input) {
    id
    name
    description
    commonName
    issuerCn
    serialNumber
    notBefore
    expiresAt
    fingerprintSha256
    isDefault
    lastUsedAt
    insertedAt
    updatedAt
    status
    isValid
    daysUntilExpiry
    hasPrivateKey
  }
}
Variables
{"input": UploadCertificateInput}
Response
{
  "data": {
    "uploadSigningCertificate": {
      "id": "e62e7364-b824-4611-88df-75f2f8e4b81c",
      "name": "abc123",
      "description": "xyz789",
      "commonName": "abc123",
      "issuerCn": "xyz789",
      "serialNumber": "xyz789",
      "notBefore": "2007-12-03T10:15:30Z",
      "expiresAt": "2007-12-03T10:15:30Z",
      "fingerprintSha256": "abc123",
      "isDefault": true,
      "lastUsedAt": "2007-12-03T10:15:30Z",
      "insertedAt": "2007-12-03T10:15:30Z",
      "updatedAt": "2007-12-03T10:15:30Z",
      "status": "ACTIVE",
      "isValid": false,
      "daysUntilExpiry": 987,
      "hasPrivateKey": true
    }
  }
}

verifyMfa

Description

Verify MFA code

Response

Returns an AuthPayload

Arguments
Name Description
input - MfaVerifyInput!

Example

Query
mutation verifyMfa($input: MfaVerifyInput!) {
  verifyMfa(input: $input) {
    accessToken
    refreshToken
    expiresIn
    mfaPendingToken
    mfaRequired
    user {
      id
      email
      displayName
      role
      mfaEnabled
      confirmedAt
      insertedAt
      updatedAt
      uiTheme
      stampExportSize
      betaFeaturesEnabled
      verificationStatus
      credentialCount
      trialActive
    }
  }
}
Variables
{"input": MfaVerifyInput}
Response
{
  "data": {
    "verifyMfa": {
      "accessToken": "xyz789",
      "refreshToken": "abc123",
      "expiresIn": 987,
      "mfaPendingToken": "xyz789",
      "mfaRequired": true,
      "user": User
    }
  }
}

Subscriptions

batchSealProgress

Description

Subscribe to batch seal job progress

Response

Returns a BatchSealProgress

Arguments
Name Description
jobId - UUID!

Example

Query
subscription batchSealProgress($jobId: UUID!) {
  batchSealProgress(jobId: $jobId) {
    jobId
    status
    completedDocuments
    failedDocuments
    totalDocuments
    progressPercent
    latestItem {
      id
      status
      errorMessage
      processingStartedAt
      processingCompletedAt
      document {
        ...DocumentFragment
      }
      seal {
        ...SealFragment
      }
    }
  }
}
Variables
{
  "jobId": "e62e7364-b824-4611-88df-75f2f8e4b81c"
}
Response
{
  "data": {
    "batchSealProgress": {
      "jobId": "e62e7364-b824-4611-88df-75f2f8e4b81c",
      "status": "PENDING",
      "completedDocuments": 987,
      "failedDocuments": 987,
      "totalDocuments": 987,
      "progressPercent": 987,
      "latestItem": BatchSealItem
    }
  }
}

Types

AddPageInput

Description

Input for adding a page

Fields
Input Field Description
documentId - UUID!
width - Float Page width in points
height - Float Page height in points
insertAt - Int 0-based position to insert (default: end)
Example
{
  "documentId": "e62e7364-b824-4611-88df-75f2f8e4b81c",
  "width": 123.45,
  "height": 123.45,
  "insertAt": 987
}

AuthPayload

Description

Authentication response payload.

This type serves two authentication branches:

  • Full auth (mfa_required: false): access_token, refresh_token, expires_in, and user are all populated. mfa_pending_token is nil.
  • MFA pending (mfa_required: true): Only mfa_pending_token is populated. Token and user fields are nil until MFA is completed via verifyMfa.

Clients MUST check mfa_required before accessing token fields.

Fields
Field Name Description
accessToken - String Access token (JWT) for API calls. Nil when mfa_required is true.
refreshToken - String Refresh token for obtaining new access tokens. Nil when mfa_required is true.
expiresIn - Int Token expiration time in seconds. Nil when mfa_required is true.
mfaPendingToken - String Short-lived token for completing MFA verification. Nil when mfa_required is false.
mfaRequired - Boolean! Whether MFA verification is required before tokens are issued
user - User The authenticated user. Nil when mfa_required is true.
Example
{
  "accessToken": "abc123",
  "refreshToken": "abc123",
  "expiresIn": 123,
  "mfaPendingToken": "xyz789",
  "mfaRequired": true,
  "user": User
}

BatchSealItem

Description

A single item in a batch seal job

Fields
Field Name Description
id - UUID! Unique item identifier
status - BatchSealItemStatus! Current item status
errorMessage - String Error message if the item failed
processingStartedAt - DateTime When processing started for this item
processingCompletedAt - DateTime When processing completed for this item
document - Document The document being sealed
seal - Seal The resulting seal (if successful)
Example
{
  "id": "e62e7364-b824-4611-88df-75f2f8e4b81c",
  "status": "PENDING",
  "errorMessage": "abc123",
  "processingStartedAt": "2007-12-03T10:15:30Z",
  "processingCompletedAt": "2007-12-03T10:15:30Z",
  "document": Document,
  "seal": Seal
}

BatchSealItemStatus

Description

Batch seal item status

Values
Enum Value Description

PENDING

Item waiting to be processed

PROCESSING

Item currently being sealed

COMPLETED

Item successfully sealed

FAILED

Item failed to seal

SKIPPED

Item skipped (job cancelled)
Example
"PENDING"

BatchSealJob

Description

A batch seal job

Fields
Field Name Description
id - UUID! Unique job identifier
status - BatchSealStatus! Current job status
totalDocuments - Int! Total number of documents in the batch
completedDocuments - Int! Number of documents successfully sealed
failedDocuments - Int! Number of documents that failed to seal
startedAt - DateTime When processing began
completedAt - DateTime When the job finished
insertedAt - DateTime! When the job was created
pageMode - BatchSealPageMode! Which pages to seal
positionX - Float! Horizontal seal position in points
positionY - Float! Vertical seal position in points
credential - Credential The credential used for sealing
items - [BatchSealItem] Individual items in the batch
progressPercent - Int! Completion percentage (0-100)
remaining - Int! Number of documents remaining to process
Example
{
  "id": "e62e7364-b824-4611-88df-75f2f8e4b81c",
  "status": "PENDING",
  "totalDocuments": 987,
  "completedDocuments": 987,
  "failedDocuments": 123,
  "startedAt": "2007-12-03T10:15:30Z",
  "completedAt": "2007-12-03T10:15:30Z",
  "insertedAt": "2007-12-03T10:15:30Z",
  "pageMode": "FIRST",
  "positionX": 987.65,
  "positionY": 987.65,
  "credential": Credential,
  "items": [BatchSealItem],
  "progressPercent": 123,
  "remaining": 987
}

BatchSealJobConnection

Description

A connection to a list of batch seal jobs

Fields
Field Name Description
edges - [BatchSealJobEdge!]! A list of edges
pageInfo - PageInfo! Information to aid in pagination
totalCount - Int! Total number of batch seal jobs
Example
{
  "edges": [BatchSealJobEdge],
  "pageInfo": PageInfo,
  "totalCount": 987
}

BatchSealJobEdge

Description

An edge in a batch seal job connection

Fields
Field Name Description
node - BatchSealJob! The batch seal job at the end of the edge
cursor - String! A cursor for use in pagination
Example
{
  "node": BatchSealJob,
  "cursor": "abc123"
}

BatchSealPageMode

Description

Which pages to apply the seal to

Values
Enum Value Description

FIRST

Seal only the first page

LAST

Seal only the last page

ALL

Seal every page

ODD

Seal odd-numbered pages

EVEN

Seal even-numbered pages

SPECIFIC

Seal specific pages (requires specific_pages)
Example
"FIRST"

BatchSealProgress

Description

Real-time progress update for batch sealing

Fields
Field Name Description
jobId - UUID! ID of the batch seal job
status - BatchSealStatus! Current job status
completedDocuments - Int! Number of documents successfully sealed so far
failedDocuments - Int! Number of documents that failed so far
totalDocuments - Int! Total number of documents in the batch
progressPercent - Int! Completion percentage (0-100)
latestItem - BatchSealItem The most recently completed item
Example
{
  "jobId": "e62e7364-b824-4611-88df-75f2f8e4b81c",
  "status": "PENDING",
  "completedDocuments": 987,
  "failedDocuments": 123,
  "totalDocuments": 123,
  "progressPercent": 987,
  "latestItem": BatchSealItem
}

BatchSealStatus

Description

Batch seal job status

Values
Enum Value Description

PENDING

Job created but not started

PROCESSING

Job is currently processing

COMPLETED

Job completed (may have some failures)

FAILED

Job failed (unrecoverable error)

CANCELLED

Job was cancelled
Example
"PENDING"

BillingInterval

Description

Subscription billing cycle

Values
Enum Value Description

MONTHLY

Monthly billing cycle

ANNUAL

Annual billing cycle
Example
"MONTHLY"

BoardSearchInput

Description

Input for searching licensing board database

Fields
Input Field Description
firstName - String! First name to search
lastName - String! Last name to search
stateCodes - [String!]! State codes to search in
discipline - String Optional discipline filter
Example
{
  "firstName": "xyz789",
  "lastName": "abc123",
  "stateCodes": ["abc123"],
  "discipline": "xyz789"
}

BoardSearchResult

Description

A licensed professional from the board database (returned by board search)

Fields
Field Name Description
id - UUID! Unique identifier
firstName - String Professional's first name
lastName - String Professional's last name
fullName - String Full name (first + last)
licenseNumber - String License number issued by the board
stateCode - String State or province code (e.g., CA, TX, ON)
licenseType - String Type of license (e.g., PE, RA, PLS)
companyName - String Company or firm name
city - String City of practice
expirationDate - Date License expiration date
discipline - String Practice discipline or specialty
licenseStatus - String! Current license status (active, inactive, expired, etc.)
Example
{
  "id": "e62e7364-b824-4611-88df-75f2f8e4b81c",
  "firstName": "abc123",
  "lastName": "xyz789",
  "fullName": "xyz789",
  "licenseNumber": "xyz789",
  "stateCode": "xyz789",
  "licenseType": "xyz789",
  "companyName": "xyz789",
  "city": "abc123",
  "expirationDate": "2007-12-03",
  "discipline": "abc123",
  "licenseStatus": "xyz789"
}

Boolean

Description

The Boolean scalar type represents true or false.

CertificateStatus

Description

Certificate status

Values
Enum Value Description

ACTIVE

Certificate is valid and can be used

EXPIRED

Certificate has expired

REVOKED

Certificate has been revoked
Example
"ACTIVE"

ChangePasswordInput

Description

Input for changing password

Fields
Input Field Description
currentPassword - String! Current password for verification
newPassword - String! The new password
Example
{
  "currentPassword": "xyz789",
  "newPassword": "xyz789"
}

ChangePasswordResult

Description

Result of a password change

Fields
Field Name Description
success - Boolean! Whether the password was successfully changed
Example
{"success": true}

ChatMessage

Description

A single message in a chat session

Fields
Field Name Description
id - UUID! Unique message identifier
sessionId - UUID! ID of the parent chat session
role - ChatMessageRole! Who sent this message
content - String! Message text content
tokenCount - Int Token count for billing/context window tracking
insertedAt - DateTime! When the message was sent
Example
{
  "id": "e62e7364-b824-4611-88df-75f2f8e4b81c",
  "sessionId": "e62e7364-b824-4611-88df-75f2f8e4b81c",
  "role": "USER",
  "content": "abc123",
  "tokenCount": 987,
  "insertedAt": "2007-12-03T10:15:30Z"
}

ChatMessageRole

Description

Role of a chat message sender

Values
Enum Value Description

USER

Message sent by the user

ASSISTANT

Message generated by the AI assistant
Example
"USER"

ChatSession

Description

A persistent AI chat session linked to documents

Fields
Field Name Description
id - UUID! Unique session identifier
title - String User-assigned or auto-generated session title
status - ChatSessionStatus! Current session status
documentIds - [UUID!]! IDs of documents linked to this session for context (empty list if none)
lastMessageAt - DateTime Timestamp of the most recent message
insertedAt - DateTime! When the session was created
updatedAt - DateTime! When the session was last updated
Example
{
  "id": "e62e7364-b824-4611-88df-75f2f8e4b81c",
  "title": "xyz789",
  "status": "ACTIVE",
  "documentIds": [
    "e62e7364-b824-4611-88df-75f2f8e4b81c"
  ],
  "lastMessageAt": "2007-12-03T10:15:30Z",
  "insertedAt": "2007-12-03T10:15:30Z",
  "updatedAt": "2007-12-03T10:15:30Z"
}

ChatSessionStatus

Description

Chat session lifecycle status

Values
Enum Value Description

ACTIVE

Session is active and accepting messages

ARCHIVED

Session has been archived
Example
"ACTIVE"

ChunkInput

Description

A pre-chunked piece of document text for server-side embedding

Fields
Input Field Description
content - String! Text content of the chunk (max 32KB)
chunkIndex - Int! Sequential index of this chunk within the document
pageNumber - Int Source page number (optional)
Example
{
  "content": "xyz789",
  "chunkIndex": 123,
  "pageNumber": 123
}

ChunkUploadResult

Description

Result of uploading document chunks for embedding

Fields
Field Name Description
count - Int! Number of chunks successfully embedded and stored
errors - [String] Error messages for chunks that failed to embed (empty on full success)
Example
{"count": 123, "errors": ["abc123"]}

CreateBatchSealInput

Description

Input for creating a batch seal job

Fields
Input Field Description
documentIds - [UUID!]! IDs of documents to seal
credentialId - UUID! ID of the credential to seal with
signingCertificateId - UUID Optional PKI signing certificate ID
pageMode - BatchSealPageMode Which pages to seal (default: first)
positionX - Float Horizontal seal position in points (default: 75.0)
positionY - Float Vertical seal position in points (default: 75.0)
Example
{
  "documentIds": [
    "e62e7364-b824-4611-88df-75f2f8e4b81c"
  ],
  "credentialId": "e62e7364-b824-4611-88df-75f2f8e4b81c",
  "signingCertificateId": "e62e7364-b824-4611-88df-75f2f8e4b81c",
  "pageMode": "FIRST",
  "positionX": 123.45,
  "positionY": 123.45
}

CreateChatSessionInput

Description

Input for creating a new chat session

Fields
Input Field Description
documentIds - [UUID!] Document IDs to associate with this session
title - String Optional title for the session
Example
{
  "documentIds": [
    "e62e7364-b824-4611-88df-75f2f8e4b81c"
  ],
  "title": "xyz789"
}

CreateCredentialInput

Description

Input for creating a credential

Fields
Input Field Description
licenseNumber - LicenseNumber! License number from the issuing authority (3–50 alphanumeric characters or hyphens)
regionCode - String! Region/state code (e.g. CA, TX, ON)
licenseType - String! License type (e.g. PE, RA, CPA)
displayName - String! Display name for the credential
expirationDate - Date License expiration date
Example
{
  "licenseNumber": LicenseNumber,
  "regionCode": "abc123",
  "licenseType": "xyz789",
  "displayName": "abc123",
  "expirationDate": "2007-12-03"
}

CreateDocumentInput

Description

Input for creating a document (use upload_document to create from a file upload)

Fields
Input Field Description
name - String! Document name
description - String Optional document description
folderId - UUID Folder to place the document in
visibility - DocumentVisibility Document visibility (defaults to private)
Example
{
  "name": "xyz789",
  "description": "xyz789",
  "folderId": "e62e7364-b824-4611-88df-75f2f8e4b81c",
  "visibility": "PRIVATE"
}

CreateFolderInput

Description

Input for creating a folder

Fields
Input Field Description
name - String! Folder display name
description - String Optional folder description
color - String Color for UI display (hex or named)
icon - String Icon name for UI display
parentId - UUID Parent folder ID (omit for root-level)
Example
{
  "name": "abc123",
  "description": "xyz789",
  "color": "abc123",
  "icon": "xyz789",
  "parentId": "e62e7364-b824-4611-88df-75f2f8e4b81c"
}

CreatePaymentIntentInput

Description

Input for creating a Stripe PaymentIntent for plan checkout

Fields
Input Field Description
planLevel - PlanLevel! Plan tier to purchase
interval - BillingInterval! Billing cycle frequency
Example
{"planLevel": "FREE", "interval": "MONTHLY"}

CreatePdfInput

Description

Input for creating a new blank PDF

Fields
Input Field Description
name - String Document name (default: Untitled.pdf)
pages - Int Number of blank pages (default: 1)
folderId - UUID Folder to place the new document in
visibility - DocumentVisibility Document visibility setting
Example
{
  "name": "abc123",
  "pages": 123,
  "folderId": "e62e7364-b824-4611-88df-75f2f8e4b81c",
  "visibility": "PRIVATE"
}

Credential

Description

A professional credential (license, certification)

Fields
Field Name Description
id - UUID! Unique credential identifier
licenseNumber - String! License number from the issuing authority
regionCode - String! Region/state code where the license is valid (e.g. CA, TX, ON)
licenseType - String! Type of license (e.g. PE, RA, CPA)
displayName - String! User-facing display name for this credential
status - CredentialStatus! Current verification status
verificationMethod - VerificationMethod Method used to verify this credential. Null until the credential has been verified.
verifiedAt - DateTime When the credential was first verified. Null if the credential has never been verified.
lastVerifiedAt - DateTime When the credential was last re-verified. Null if verified only once or never verified.
expirationDate - Date License expiration date
rejectionReason - String Reason for rejection (if status is not verified)
insertedAt - DateTime! When the credential was created
updatedAt - DateTime! When the credential was last updated
certificateFingerprint - String SHA-256 fingerprint of the associated signing certificate. Null if no signing certificate is linked.
certificateIssuedAt - DateTime When the associated signing certificate was issued. Null if no signing certificate is linked.
certificateExpiresAt - DateTime When the associated signing certificate expires. Null if no signing certificate is linked.
isVerified - Boolean! Whether the credential has been verified
isExpired - Boolean! Whether the credential has expired
canSeal - Boolean! Whether this credential can be used to seal documents
stampSvg - String SVG markup for the credential stamp
Example
{
  "id": "e62e7364-b824-4611-88df-75f2f8e4b81c",
  "licenseNumber": "xyz789",
  "regionCode": "xyz789",
  "licenseType": "abc123",
  "displayName": "abc123",
  "status": "CLAIMED",
  "verificationMethod": "VENDOR_API",
  "verifiedAt": "2007-12-03T10:15:30Z",
  "lastVerifiedAt": "2007-12-03T10:15:30Z",
  "expirationDate": "2007-12-03",
  "rejectionReason": "abc123",
  "insertedAt": "2007-12-03T10:15:30Z",
  "updatedAt": "2007-12-03T10:15:30Z",
  "certificateFingerprint": "xyz789",
  "certificateIssuedAt": "2007-12-03T10:15:30Z",
  "certificateExpiresAt": "2007-12-03T10:15:30Z",
  "isVerified": true,
  "isExpired": true,
  "canSeal": false,
  "stampSvg": "abc123"
}

CredentialConnection

Description

A connection to a list of credentials

Fields
Field Name Description
edges - [CredentialEdge!]! A list of edges
pageInfo - PageInfo! Information to aid in pagination
totalCount - Int! Total number of credentials
Example
{
  "edges": [CredentialEdge],
  "pageInfo": PageInfo,
  "totalCount": 987
}

CredentialEdge

Description

An edge in a credential connection

Fields
Field Name Description
node - Credential! The credential at the end of the edge
cursor - String! A cursor for use in pagination
Example
{
  "node": Credential,
  "cursor": "xyz789"
}

CredentialStatus

Description

Credential verification status

Values
Enum Value Description

CLAIMED

Credential has been claimed but not yet verified

PENDING_VERIFICATION

Verification is in progress

VERIFIED

Credential has been verified

EXPIRED

Credential has expired

SUSPENDED

Credential has been suspended
Example
"CLAIMED"

CustomerSessionPayload

Description

Stripe CustomerSession for managing saved payment methods via CustomerSheet SDK

Fields
Field Name Description
customerId - String! Stripe customer ID
clientSecret - String! Pass to CustomerSheet.CustomerSessionProvider
Example
{
  "customerId": "abc123",
  "clientSecret": "xyz789"
}

Date

Description

ISO 8601 date string (YYYY-MM-DD)

Example
"2007-12-03"

DateTime

Description

ISO 8601 datetime string

Example
"2007-12-03T10:15:30Z"

DeleteAccountResult

Description

Result of account deletion

Fields
Field Name Description
success - Boolean! Whether the account was successfully deleted
Example
{"success": false}

DeleteResult

Description

Result of a resource deletion — returns the deleted record's ID

Fields
Field Name Description
id - UUID! The ID of the deleted record
Example
{
  "id": "e62e7364-b824-4611-88df-75f2f8e4b81c"
}

DirectoryPage

Description

Paginated directory search results

Fields
Field Name Description
professionals - [ProfessionalSummary] List of matching professionals for the current page
totalCount - Int! Total number of matching professionals across all pages
hasMore - Boolean! Whether more pages exist beyond the current one
Example
{
  "professionals": [ProfessionalSummary],
  "totalCount": 987,
  "hasMore": false
}

Document

Description

A document in the system

Fields
Field Name Description
id - UUID! Unique document identifier
name - String! Document name
description - String Optional document description
status - DocumentStatus! Current document status
visibility - DocumentVisibility! Document visibility within the organization
folderId - UUID ID of the folder containing this document
organizationId - UUID! ID of the owning organization (always set — every document belongs to an organization)
insertedAt - DateTime! When the document was created
updatedAt - DateTime! When the document was last modified
folder - DocumentFolder The folder containing this document
versions - [DocumentVersion] All sealed versions of this document, ordered by version number
currentVersion - DocumentVersion The most recent sealed version of this document
versionCount - Int Number of sealed versions
hasVersions - Boolean! Whether the document has any sealed versions
downloadUrl - String Authenticated download URL for the document file (requires bearer token)
Example
{
  "id": "e62e7364-b824-4611-88df-75f2f8e4b81c",
  "name": "abc123",
  "description": "xyz789",
  "status": "DRAFT",
  "visibility": "PRIVATE",
  "folderId": "e62e7364-b824-4611-88df-75f2f8e4b81c",
  "organizationId": "e62e7364-b824-4611-88df-75f2f8e4b81c",
  "insertedAt": "2007-12-03T10:15:30Z",
  "updatedAt": "2007-12-03T10:15:30Z",
  "folder": DocumentFolder,
  "versions": [DocumentVersion],
  "currentVersion": DocumentVersion,
  "versionCount": 123,
  "hasVersions": false,
  "downloadUrl": "abc123"
}

DocumentConnection

Description

A connection to a list of documents

Fields
Field Name Description
edges - [DocumentEdge!]! A list of edges
pageInfo - PageInfo! Information to aid in pagination
totalCount - Int! Total number of documents matching the query
Example
{
  "edges": [DocumentEdge],
  "pageInfo": PageInfo,
  "totalCount": 987
}

DocumentEdge

Description

An edge in a document connection

Fields
Field Name Description
node - Document! The document at the end of the edge
cursor - String! A cursor for use in pagination
Example
{
  "node": Document,
  "cursor": "abc123"
}

DocumentFolder

Description

A folder for organizing documents

Fields
Field Name Description
id - UUID! Unique folder identifier
name - String! Folder display name
description - String Optional folder description
color - String Color for UI display
icon - String Icon name for UI display
position - Int Sort position among siblings
parentId - UUID Parent folder ID (null for root-level folders)
insertedAt - DateTime! When the folder was created
updatedAt - DateTime! When the folder was last updated
parent - DocumentFolder Parent folder (null for root-level folders)
children - [DocumentFolder] Child folders nested under this folder
documents - [Document] Documents contained in this folder
documentCount - Int! Number of documents in this folder
Example
{
  "id": "e62e7364-b824-4611-88df-75f2f8e4b81c",
  "name": "abc123",
  "description": "xyz789",
  "color": "abc123",
  "icon": "abc123",
  "position": 987,
  "parentId": "e62e7364-b824-4611-88df-75f2f8e4b81c",
  "insertedAt": "2007-12-03T10:15:30Z",
  "updatedAt": "2007-12-03T10:15:30Z",
  "parent": DocumentFolder,
  "children": [DocumentFolder],
  "documents": [Document],
  "documentCount": 123
}

DocumentStatus

Description

Document status

Values
Enum Value Description

DRAFT

Document is a draft, can be edited

SEALED

Document has been sealed at least once
Example
"DRAFT"

DocumentVersion

Description

A sealed version of a document

Fields
Field Name Description
id - UUID! Unique version identifier
versionNumber - Int! Sequential version number (1, 2, 3, ...)
fileHash - String! SHA-256 hash of the sealed file
notes - String Optional notes attached to this version
insertedAt - DateTime! When this version was sealed
seal - Seal The seal associated with this version. Nullable because draft versions exist before sealing.
createdBy - User The user who created this version. Nullable because the user account may have been deleted.
downloadUrl - String! Authenticated download URL for this version's file (requires bearer token)
Example
{
  "id": "e62e7364-b824-4611-88df-75f2f8e4b81c",
  "versionNumber": 123,
  "fileHash": "xyz789",
  "notes": "xyz789",
  "insertedAt": "2007-12-03T10:15:30Z",
  "seal": Seal,
  "createdBy": User,
  "downloadUrl": "abc123"
}

DocumentVisibility

Description

Document visibility

Values
Enum Value Description

PRIVATE

Only the owner can see the document

ORGANIZATION

All organization members can see the document
Example
"PRIVATE"

DrawImageInput

Description

Input for drawing an image on a page

Fields
Input Field Description
documentId - UUID!
imageDocumentId - UUID! Document ID of the image file
page - Int 1-based page number (default: 1)
x - Float X position in points from left edge
y - Float Y position in points from bottom edge
width - Float Image display width in points
height - Float Image display height in points
opacity - Float Image opacity (0.0 = transparent, 1.0 = opaque)
Example
{
  "documentId": "e62e7364-b824-4611-88df-75f2f8e4b81c",
  "imageDocumentId": "e62e7364-b824-4611-88df-75f2f8e4b81c",
  "page": 987,
  "x": 123.45,
  "y": 987.65,
  "width": 123.45,
  "height": 123.45,
  "opacity": 987.65
}

DrawOperationInput

Description

A single draw operation

Fields
Input Field Description
type - DrawOperationType! Operation type
x - Float X position in points from left edge
y - Float Y position in points from bottom edge
opacity - Float Opacity (0.0 = transparent, 1.0 = opaque)
color - String Named color (red, blue, etc.)
text - String Text content to draw
fontSize - Float Font size in points for text operations
maxWidth - Float Maximum text width before wrapping (in points)
lineHeight - Float Line height multiplier for wrapped text
width - Float Shape width in points
height - Float Shape height in points
borderColor - String Border color name (e.g., black, red)
borderWidth - Float Border width in points
radius - Float Circle radius in points
startX - Float Line start X position in points
startY - Float Line start Y position in points
endX - Float Line end X position in points
endY - Float Line end Y position in points
thickness - Float Line thickness in points
path - String SVG path data string (e.g., M0,0 L100,100)
scale - Float Scale factor for the SVG path
Example
{
  "type": "TEXT",
  "x": 987.65,
  "y": 123.45,
  "opacity": 987.65,
  "color": "xyz789",
  "text": "abc123",
  "fontSize": 123.45,
  "maxWidth": 123.45,
  "lineHeight": 987.65,
  "width": 987.65,
  "height": 123.45,
  "borderColor": "abc123",
  "borderWidth": 123.45,
  "radius": 123.45,
  "startX": 123.45,
  "startY": 987.65,
  "endX": 987.65,
  "endY": 987.65,
  "thickness": 123.45,
  "path": "abc123",
  "scale": 987.65
}

DrawOperationType

Description

Type of drawing operation

Values
Enum Value Description

TEXT

Draw text at a position

RECTANGLE

Draw a rectangle

CIRCLE

Draw a circle

LINE

Draw a line between two points

SVG_PATH

Draw an SVG path
Example
"TEXT"

DrawOperationsInput

Description

Input for drawing operations on a page

Fields
Input Field Description
documentId - UUID!
page - Int! 1-based page number
operations - [DrawOperationInput!]!
Example
{
  "documentId": "e62e7364-b824-4611-88df-75f2f8e4b81c",
  "page": 123,
  "operations": [DrawOperationInput]
}

EnableMfaInput

Description

Input for enabling MFA

Fields
Input Field Description
code - String! The 6-digit TOTP code from the authenticator app
secret - String! The TOTP secret (base32 encoded, from setupMfa)
Example
{
  "code": "abc123",
  "secret": "abc123"
}

EncryptedMessage

Description

An encrypted message relayed through the server

Fields
Field Name Description
id - UUID! Unique message identifier
senderId - UUID! ID of the sender
ciphertext - String! Base64-encoded ciphertext
messageType - SignalMessageType! Signal Protocol message type
insertedAt - DateTime! When the message was stored on the server
Example
{
  "id": "e62e7364-b824-4611-88df-75f2f8e4b81c",
  "senderId": "e62e7364-b824-4611-88df-75f2f8e4b81c",
  "ciphertext": "abc123",
  "messageType": "PREKEY",
  "insertedAt": "2007-12-03T10:15:30Z"
}

ExtractPagesInput

Description

Input for extracting pages from a PDF

Fields
Input Field Description
documentId - UUID!
pages - [Int!]! 1-based page numbers to extract
name - String Name for extracted document
folderId - UUID Folder to place the extracted document in
visibility - DocumentVisibility Document visibility setting
Example
{
  "documentId": "e62e7364-b824-4611-88df-75f2f8e4b81c",
  "pages": [123],
  "name": "abc123",
  "folderId": "e62e7364-b824-4611-88df-75f2f8e4b81c",
  "visibility": "PRIVATE"
}

FillFormInput

Description

Input for filling form fields

Fields
Input Field Description
documentId - UUID!
fields - [FormFieldInput!]!
Example
{
  "documentId": "e62e7364-b824-4611-88df-75f2f8e4b81c",
  "fields": [FormFieldInput]
}

Float

Description

The Float scalar type represents signed double-precision fractional values as specified by IEEE 754.

Example
987.65

FolderConnection

Description

A connection to a list of folders

Fields
Field Name Description
edges - [FolderEdge!]! A list of edges
pageInfo - PageInfo! Information to aid in pagination
totalCount - Int! Total number of folders
Example
{
  "edges": [FolderEdge],
  "pageInfo": PageInfo,
  "totalCount": 123
}

FolderEdge

Description

An edge in a folder connection

Fields
Field Name Description
node - DocumentFolder! The folder at the end of the edge
cursor - String! A cursor for use in pagination
Example
{
  "node": DocumentFolder,
  "cursor": "xyz789"
}

FormFieldInput

Description

A form field name/value pair

Fields
Input Field Description
name - String!
value - String!
Example
{
  "name": "xyz789",
  "value": "abc123"
}

Int

Description

The Int scalar type represents non-fractional signed whole numeric values. Int can represent values between -(2^31) and 2^31 - 1.

Example
987

LicenseNumber

Description

A professional license number (3–50 alphanumeric characters or hyphens)

Example
LicenseNumber

LoginInput

Description

Login input

Fields
Input Field Description
email - String! Account email address
password - String! Account password
organizationId - UUID Organization ID to select (optional, uses default if not provided)
Example
{
  "email": "abc123",
  "password": "abc123",
  "organizationId": "e62e7364-b824-4611-88df-75f2f8e4b81c"
}

MergePdfsInput

Description

Input for merging multiple PDFs

Fields
Input Field Description
documentIds - [UUID!]!
name - String Name for merged document
folderId - UUID Folder to place the merged document in
visibility - DocumentVisibility Document visibility setting
Example
{
  "documentIds": [
    "e62e7364-b824-4611-88df-75f2f8e4b81c"
  ],
  "name": "xyz789",
  "folderId": "e62e7364-b824-4611-88df-75f2f8e4b81c",
  "visibility": "PRIVATE"
}

MfaEnableResult

Description

Result of enabling MFA

Fields
Field Name Description
backupCodes - [String!]! Backup codes for account recovery
enabledAt - DateTime! When MFA was enabled
Example
{
  "backupCodes": ["xyz789"],
  "enabledAt": "2007-12-03T10:15:30Z"
}

MfaSetup

Description

MFA setup response with secret and QR code URI

Fields
Field Name Description
secret - String! The TOTP secret (base32 encoded)
otpauthUri - String! The otpauth:// URI for QR code generation
Example
{
  "secret": "xyz789",
  "otpauthUri": "xyz789"
}

MfaVerifyInput

Description

MFA verification input

Fields
Input Field Description
mfaPendingToken - String! The MFA pending token from login
code - String! The 6-digit TOTP code
organizationId - UUID Organization ID to select (optional, uses default if not provided)
Example
{
  "mfaPendingToken": "abc123",
  "code": "xyz789",
  "organizationId": "e62e7364-b824-4611-88df-75f2f8e4b81c"
}

MovePdfPageInput

Description

Input for moving a page within a PDF

Fields
Input Field Description
documentId - UUID! ID of the document
from - Int! 1-based page number to move from
to - Int! 1-based page number to move to
Example
{
  "documentId": "e62e7364-b824-4611-88df-75f2f8e4b81c",
  "from": 123,
  "to": 987
}

Organization

Description

An organization

Fields
Field Name Description
id - UUID! Unique organization identifier
name - String! Organization display name
slug - String! URL-safe slug for the organization
planLevel - PlanLevel! Current subscription plan level
insertedAt - DateTime! When the organization was created
updatedAt - DateTime! When the organization was last updated
canSealDocuments - Boolean! Whether the plan allows document sealing
canUseCloudStorage - Boolean! Whether the plan includes cloud storage integrations
maxDocuments - Int Maximum documents allowed (null means unlimited)
maxCredentials - Int Maximum credentials allowed (null means unlimited)
maxTeamMembers - Int Maximum team members allowed (null means unlimited)
Example
{
  "id": "e62e7364-b824-4611-88df-75f2f8e4b81c",
  "name": "abc123",
  "slug": "abc123",
  "planLevel": "FREE",
  "insertedAt": "2007-12-03T10:15:30Z",
  "updatedAt": "2007-12-03T10:15:30Z",
  "canSealDocuments": false,
  "canUseCloudStorage": false,
  "maxDocuments": 987,
  "maxCredentials": 123,
  "maxTeamMembers": 123
}

OrganizationMember

Description

An organization member (user + membership info)

Fields
Field Name Description
id - UUID! Membership record identifier
role - String! Member's role within the organization (owner, admin, member, guest)
user - User! The user
insertedAt - DateTime! When the member joined
Example
{
  "id": "e62e7364-b824-4611-88df-75f2f8e4b81c",
  "role": "abc123",
  "user": User,
  "insertedAt": "2007-12-03T10:15:30Z"
}

OrganizationMemberConnection

Description

A connection to a list of organization members

Fields
Field Name Description
edges - [OrganizationMemberEdge!]! A list of edges
pageInfo - PageInfo! Information to aid in pagination
totalCount - Int! Total number of members in the organization
Example
{
  "edges": [OrganizationMemberEdge],
  "pageInfo": PageInfo,
  "totalCount": 987
}

OrganizationMemberEdge

Description

An edge in an organization member connection

Fields
Field Name Description
node - OrganizationMember! The organization member at the end of the edge
cursor - String! A cursor for use in pagination
Example
{
  "node": OrganizationMember,
  "cursor": "xyz789"
}

OrganizationMembership

Description

A user's membership in an organization

Fields
Field Name Description
id - UUID! Membership record identifier
role - String! Member's role within the organization (owner, admin, member, guest)
isPrimaryOrg - Boolean! Whether this is the user's primary organization
organization - Organization! The organization
insertedAt - DateTime! When the user joined the organization
Example
{
  "id": "e62e7364-b824-4611-88df-75f2f8e4b81c",
  "role": "xyz789",
  "isPrimaryOrg": false,
  "organization": Organization,
  "insertedAt": "2007-12-03T10:15:30Z"
}

PageInfo

Description

Information about pagination in a connection

Fields
Field Name Description
hasNextPage - Boolean! When paginating forwards, are there more items?
hasPreviousPage - Boolean! When paginating backwards, are there more items?
startCursor - String Cursor for the first edge in the page
endCursor - String Cursor for the last edge in the page
Example
{
  "hasNextPage": false,
  "hasPreviousPage": true,
  "startCursor": "xyz789",
  "endCursor": "xyz789"
}

PaymentIntentPayload

Description

Stripe PaymentIntent for collecting a payment via PaymentSheet SDK

Fields
Field Name Description
clientSecret - String! Pass to Stripe's PaymentSheet SDK to present the payment UI
Example
{"clientSecret": "xyz789"}

PdfBox

Description

PDF page box dimensions (in points from bottom-left origin)

Fields
Field Name Description
x - Float X coordinate of bottom-left corner
y - Float Y coordinate of bottom-left corner
width - Float Box width in points
height - Float Box height in points
Example
{"x": 987.65, "y": 987.65, "width": 987.65, "height": 123.45}

PdfInfo

Description

PDF document info from libpdf worker

Fields
Field Name Description
pageCount - Int! Total number of pages
fileSize - Int! File size in bytes
isEncrypted - Boolean! Whether the PDF is password-protected
isLinearized - Boolean Whether the PDF is linearized (optimized for web)
version - String PDF specification version
pageSizes - [PdfPageSize] Dimensions for each page
Example
{
  "pageCount": 987,
  "fileSize": 123,
  "isEncrypted": false,
  "isLinearized": true,
  "version": "abc123",
  "pageSizes": [PdfPageSize]
}

PdfMetadata

Description

PDF document metadata

Fields
Field Name Description
title - String Document title
author - String Document author
subject - String Document subject
keywords - String Document keywords
creator - String Application that created the document
producer - String PDF producer (library that generated the file)
creationDate - String When the document was created
modificationDate - String When the document was last modified
pageCount - Int! Total number of pages
pdfVersion - String PDF specification version (e.g., 1.7)
fileSize - Int! File size in bytes
isEncrypted - Boolean! Whether the PDF is password-protected
hasForms - Boolean! Whether the PDF contains form fields
Example
{
  "title": "abc123",
  "author": "xyz789",
  "subject": "xyz789",
  "keywords": "abc123",
  "creator": "abc123",
  "producer": "abc123",
  "creationDate": "abc123",
  "modificationDate": "xyz789",
  "pageCount": 123,
  "pdfVersion": "xyz789",
  "fileSize": 987,
  "isEncrypted": true,
  "hasForms": false
}

PdfMetadataInput

Description

Input for setting PDF metadata via libpdf

Fields
Input Field Description
title - String Document title
author - String Document author
subject - String Document subject
keywords - String Comma-separated keywords
creator - String Application that created the document
producer - String PDF producer identifier
creationDate - String Creation date (ISO 8601)
modificationDate - String Last modification date (ISO 8601)
language - String Document language (e.g., en-US)
Example
{
  "title": "abc123",
  "author": "xyz789",
  "subject": "xyz789",
  "keywords": "abc123",
  "creator": "abc123",
  "producer": "xyz789",
  "creationDate": "xyz789",
  "modificationDate": "abc123",
  "language": "abc123"
}

PdfOperationResult

Description

Result of a PDF mutation that produces a document

Fields
Field Name Description
document - Document The resulting document
pageCount - Int Total pages in the resulting document
operationsApplied - Int Number of draw operations applied
fieldsFilled - Int Number of form fields filled
pagesWatermarked - Int Number of pages watermarked
Example
{
  "document": Document,
  "pageCount": 123,
  "operationsApplied": 987,
  "fieldsFilled": 123,
  "pagesWatermarked": 987
}

PdfPageInfoBasic

Description

Basic page dimensions from NIF metadata extraction

Fields
Field Name Description
page - Int! 1-based page number
width - Float! Page width in points
height - Float! Page height in points
rotation - Int! Page rotation in degrees (0, 90, 180, 270)
Example
{"page": 123, "width": 987.65, "height": 987.65, "rotation": 987}

PdfPageInfoDetail

Description

Detailed page information including all PDF boxes

Fields
Field Name Description
page - Int! 1-based page number
width - Float! Page width in points
height - Float! Page height in points
rotation - Int! Page rotation in degrees (0, 90, 180, 270)
isLandscape - Boolean! Whether the page is wider than it is tall
mediaBox - PdfBox Media box (physical page boundary)
cropBox - PdfBox Crop box (visible page area)
bleedBox - PdfBox Bleed box (print bleed area)
trimBox - PdfBox Trim box (final trimmed page size)
artBox - PdfBox Art box (meaningful content area)
Example
{
  "page": 987,
  "width": 987.65,
  "height": 123.45,
  "rotation": 987,
  "isLandscape": true,
  "mediaBox": PdfBox,
  "cropBox": PdfBox,
  "bleedBox": PdfBox,
  "trimBox": PdfBox,
  "artBox": PdfBox
}

PdfPageSize

Description

Page dimensions

Fields
Field Name Description
page - Int! 1-based page number
width - Float! Page width in points
height - Float! Page height in points
rotation - Int! Page rotation in degrees
Example
{"page": 987, "width": 123.45, "height": 123.45, "rotation": 987}

PdfPermissionsInput

Description

PDF permission flags

Fields
Input Field Description
printing - Boolean Allow printing
modifyContents - Boolean Allow modifying page contents
copy - Boolean Allow copying text and images
modifyAnnotations - Boolean Allow adding or editing annotations
fillForms - Boolean Allow filling form fields
extractContent - Boolean Allow extracting text and images
assemble - Boolean Allow assembling (insert, rotate, delete pages)
printHighQuality - Boolean Allow high-quality printing
Example
{
  "printing": false,
  "modifyContents": true,
  "copy": false,
  "modifyAnnotations": false,
  "fillForms": false,
  "extractContent": true,
  "assemble": false,
  "printHighQuality": true
}

PdfProtectionInput

Description

Input for setting PDF protection

Fields
Input Field Description
documentId - UUID!
userPassword - String
ownerPassword - String
permissions - PdfPermissionsInput
algorithm - String Encryption algorithm
Example
{
  "documentId": "e62e7364-b824-4611-88df-75f2f8e4b81c",
  "userPassword": "abc123",
  "ownerPassword": "abc123",
  "permissions": PdfPermissionsInput,
  "algorithm": "abc123"
}

PdfSignature

Description

A single digital signature on a PDF

Fields
Field Name Description
signerName - String Name of the signer
signingDate - String When the signature was applied
signatureType - String Type of signature (e.g., adbe.pkcs7.detached)
Example
{
  "signerName": "abc123",
  "signingDate": "abc123",
  "signatureType": "abc123"
}

PdfSignatureInfo

Description

Digital signature information for a PDF

Fields
Field Name Description
isSigned - Boolean! Whether the PDF has any digital signatures
signatureCount - Int! Number of digital signatures
signatures - [PdfSignature!]! Individual signature details
Example
{
  "isSigned": true,
  "signatureCount": 987,
  "signatures": [PdfSignature]
}

PdfTextResult

Description

Extracted text content from a PDF

Fields
Field Name Description
text - String! Full extracted text content
pageCount - Int! Total number of pages in the document
Example
{"text": "abc123", "pageCount": 123}

PdfValidationResult

Description

PDF structural validation result

Fields
Field Name Description
isValid - Boolean! Whether the PDF structure is valid
issues - [String!]! List of structural issues found (empty if valid)
Example
{"isValid": true, "issues": ["abc123"]}

PlanLevel

Description

Organization plan level

Values
Enum Value Description

FREE

Free tier with basic features

PRO

Professional tier for individual practitioners

TEAM

Team tier for small firms

ENTERPRISE

Enterprise tier with SSO, cloud storage, and custom roles
Example
"FREE"

PrekeyBundle

Description

A user's pre-key bundle for establishing a Signal Protocol session

Fields
Field Name Description
identityKey - String! Base64-encoded identity public key
registrationId - Int! Registration ID for the device
signedPrekey - String Base64-encoded signed pre-key public key
signedPrekeyId - Int Signed pre-key ID
signedPrekeySignature - String Base64-encoded signature of the signed pre-key
prekey - String Base64-encoded one-time pre-key public key (consumed on use)
prekeyId - Int One-time pre-key ID
Example
{
  "identityKey": "xyz789",
  "registrationId": 123,
  "signedPrekey": "abc123",
  "signedPrekeyId": 123,
  "signedPrekeySignature": "xyz789",
  "prekey": "abc123",
  "prekeyId": 123
}

PrekeyInput

Description

A single one-time pre-key for registration

Fields
Input Field Description
id - Int! Key identifier
publicKey - String! Base64-encoded public key
Example
{"id": 123, "publicKey": "xyz789"}

Profession

Description

A profession category in the directory (e.g. Civil Engineer, Architect)

Fields
Field Name Description
id - UUID! Unique profession identifier
name - String! Full profession name
shortName - String Abbreviated name for compact display
slug - String! URL-safe slug used in directory paths
titleSuffix - String Professional title suffix (e.g. PE, RA, CPA)
professionGroup - String! Profession group for categorization (e.g. engineer, architect, lawyer)
description - String Description of the profession
iconName - String Icon name for UI display
professionalCount - Int Count of active professionals in this profession
Example
{
  "id": "e62e7364-b824-4611-88df-75f2f8e4b81c",
  "name": "abc123",
  "shortName": "abc123",
  "slug": "xyz789",
  "titleSuffix": "xyz789",
  "professionGroup": "xyz789",
  "description": "abc123",
  "iconName": "abc123",
  "professionalCount": 987
}

ProfessionalProfile

Description

Full professional profile for individual profile pages

Fields
Field Name Description
id - UUID! Unique professional identifier
firstName - String! First name
lastName - String! Last name
fullName - String Full display name
slug - String URL-safe slug
stateCode - String! State or province code where licensed
licenseNumber - String! License number from the issuing authority
licenseStatus - String Current license status
headline - String Professional headline or tagline
photoUrl - String URL to profile photo
currentTitle - String Current job title
currentCompany - String Current employer
summary - String Professional summary or bio
linkedinUrl - String LinkedIn profile URL
websiteUrl - String Personal or company website URL
yearsExperience - Int Years of professional experience
specializations - [String] Areas of specialization
skills - [String] Professional skills
education - [String] Education history
certifications - [String] Professional certifications held
enrichmentConfidence - Float Confidence score of enriched profile data (0.0 to 1.0)
lastVerifiedAt - DateTime When the license was last verified against the issuing board
expirationDate - Date License expiration date
professionId - UUID ID of the profession this professional belongs to
professionName - String Name of the profession
Example
{
  "id": "e62e7364-b824-4611-88df-75f2f8e4b81c",
  "firstName": "abc123",
  "lastName": "abc123",
  "fullName": "abc123",
  "slug": "abc123",
  "stateCode": "abc123",
  "licenseNumber": "abc123",
  "licenseStatus": "abc123",
  "headline": "abc123",
  "photoUrl": "xyz789",
  "currentTitle": "abc123",
  "currentCompany": "xyz789",
  "summary": "xyz789",
  "linkedinUrl": "abc123",
  "websiteUrl": "xyz789",
  "yearsExperience": 987,
  "specializations": ["abc123"],
  "skills": ["xyz789"],
  "education": ["xyz789"],
  "certifications": ["abc123"],
  "enrichmentConfidence": 123.45,
  "lastVerifiedAt": "2007-12-03T10:15:30Z",
  "expirationDate": "2007-12-03",
  "professionId": "e62e7364-b824-4611-88df-75f2f8e4b81c",
  "professionName": "xyz789"
}

ProfessionalSummary

Description

Summary view of a professional for directory listings

Fields
Field Name Description
id - UUID! Unique professional identifier
firstName - String! First name
lastName - String! Last name
fullName - String Full display name
slug - String URL-safe slug for profile links
stateCode - String! State or province code where licensed
licenseNumber - String! License number from the issuing authority
licenseStatus - String Current license status
headline - String Professional headline or tagline
photoUrl - String URL to profile photo
currentTitle - String Current job title
currentCompany - String Current employer
professionName - String Name of the profession this professional belongs to
Example
{
  "id": "e62e7364-b824-4611-88df-75f2f8e4b81c",
  "firstName": "abc123",
  "lastName": "xyz789",
  "fullName": "abc123",
  "slug": "abc123",
  "stateCode": "xyz789",
  "licenseNumber": "xyz789",
  "licenseStatus": "abc123",
  "headline": "abc123",
  "photoUrl": "abc123",
  "currentTitle": "xyz789",
  "currentCompany": "xyz789",
  "professionName": "xyz789"
}

RefreshPayload

Description

Refresh token response (token rotation always issues a new refresh token)

Fields
Field Name Description
accessToken - String! New access token (JWT)
refreshToken - String! New refresh token (previous one is revoked)
expiresIn - Int! Access token expiration time in seconds
Example
{
  "accessToken": "xyz789",
  "refreshToken": "abc123",
  "expiresIn": 987
}

RegisterInput

Description

Registration input

Fields
Input Field Description
email - String! Email address for the new account
password - String! Password (min 12 characters)
Example
{
  "email": "abc123",
  "password": "abc123"
}

RegisterPrekeysInput

Description

Input for registering Signal Protocol pre-keys

Fields
Input Field Description
identityKey - String! Base64-encoded identity public key
registrationId - Int! Device registration ID
signedPrekey - String! Base64-encoded signed pre-key public key
signedPrekeyId - Int! Signed pre-key ID
signedPrekeySignature - String! Base64-encoded signature of the signed pre-key
prekeys - [PrekeyInput!] One-time pre-keys to register (typically 10–100 keys per batch)
Example
{
  "identityKey": "xyz789",
  "registrationId": 123,
  "signedPrekey": "xyz789",
  "signedPrekeyId": 123,
  "signedPrekeySignature": "xyz789",
  "prekeys": [PrekeyInput]
}

RemovePdfPageInput

Description

Input for removing a page from a PDF

Fields
Input Field Description
documentId - UUID! ID of the document
page - Int! 1-based page number to remove
Example
{
  "documentId": "e62e7364-b824-4611-88df-75f2f8e4b81c",
  "page": 123
}

RemovePdfProtectionInput

Description

Input for removing PDF password protection

Fields
Input Field Description
documentId - UUID! ID of the document
password - String Current document password (if protected)
Example
{
  "documentId": "e62e7364-b824-4611-88df-75f2f8e4b81c",
  "password": "abc123"
}

RequestEmailChangeInput

Description

Input for requesting an email change

Fields
Input Field Description
currentPassword - String! Current password for verification
newEmail - String! The new email address
Example
{
  "currentPassword": "xyz789",
  "newEmail": "abc123"
}

RequestEmailChangeResult

Description

Result of an email change request

Fields
Field Name Description
success - Boolean! Whether the confirmation email was sent
Example
{"success": true}

ResetPasswordInput

Description

Input for resetting password with a token

Fields
Input Field Description
token - String! The reset token from the email
newPassword - String! The new password (min 12 characters)
Example
{
  "token": "abc123",
  "newPassword": "xyz789"
}

Seal

Description

A seal on a document

Fields
Field Name Description
id - UUID! Unique seal identifier
verificationCode - String! Public verification code for this seal
documentHash - String! SHA-256 hash of the sealed document
sealedAt - DateTime! When the document was sealed
insertedAt - DateTime! When the seal record was created
document - Document The sealed document
credential - Credential The credential used to seal
signingCertificate - SigningCertificate The PKI certificate used for digital signing (if any)
pkiSigned - Boolean! Whether this seal includes a PKI digital signature
verificationUrl - String! Public URL for verifying this seal
Example
{
  "id": "e62e7364-b824-4611-88df-75f2f8e4b81c",
  "verificationCode": "xyz789",
  "documentHash": "abc123",
  "sealedAt": "2007-12-03T10:15:30Z",
  "insertedAt": "2007-12-03T10:15:30Z",
  "document": Document,
  "credential": Credential,
  "signingCertificate": SigningCertificate,
  "pkiSigned": false,
  "verificationUrl": "abc123"
}

SealConnection

Description

A connection to a list of seals

Fields
Field Name Description
edges - [SealEdge!]! A list of edges
pageInfo - PageInfo! Information to aid in pagination
totalCount - Int! Total number of seals
Example
{
  "edges": [SealEdge],
  "pageInfo": PageInfo,
  "totalCount": 123
}

SealDocumentInput

Description

Input for sealing a single document

Fields
Input Field Description
documentId - UUID! ID of the document to seal
credentialId - UUID! ID of the credential to seal with
signingCertificateId - UUID Optional PKI signing certificate ID for digital signatures
Example
{
  "documentId": "e62e7364-b824-4611-88df-75f2f8e4b81c",
  "credentialId": "e62e7364-b824-4611-88df-75f2f8e4b81c",
  "signingCertificateId": "e62e7364-b824-4611-88df-75f2f8e4b81c"
}

SealEdge

Description

An edge in a seal connection

Fields
Field Name Description
node - Seal! The seal at the end of the edge
cursor - String! A cursor for use in pagination
Example
{
  "node": Seal,
  "cursor": "xyz789"
}

SealVerificationResult

Description

Result of a public seal verification lookup

Fields
Field Name Description
verificationCode - String! The verification code that was looked up
documentName - String Name of the sealed document
sealedAt - DateTime! When the document was sealed
signerName - String Name of the signer
regionCode - String Signer's licensing region
credentialStatus - String Current status of the signer's credential
isValid - Boolean! Whether the seal is currently valid
documentHash - String! SHA-256 hash for integrity verification
Example
{
  "verificationCode": "xyz789",
  "documentName": "xyz789",
  "sealedAt": "2007-12-03T10:15:30Z",
  "signerName": "abc123",
  "regionCode": "abc123",
  "credentialStatus": "xyz789",
  "isValid": false,
  "documentHash": "xyz789"
}

SearchResult

Description

A semantically matched document chunk from vector search

Fields
Field Name Description
id - UUID! Chunk identifier
content - String! Text content of the chunk
chunkIndex - Int! Position of this chunk within the document
pageNumber - Int Source page number (if available)
similarity - Float! Similarity score (0.0 to 1.0, higher is more relevant)
documentId - UUID! ID of the source document
Example
{
  "id": "e62e7364-b824-4611-88df-75f2f8e4b81c",
  "content": "xyz789",
  "chunkIndex": 987,
  "pageNumber": 987,
  "similarity": 987.65,
  "documentId": "e62e7364-b824-4611-88df-75f2f8e4b81c"
}

SendChatMessageInput

Description

Input for sending a chat message

Fields
Input Field Description
sessionId - UUID! Chat session ID
role - ChatMessageRole! Message role (user or assistant)
content - String! Message content
tokenCount - Int Optional token count for the message
Example
{
  "sessionId": "e62e7364-b824-4611-88df-75f2f8e4b81c",
  "role": "USER",
  "content": "xyz789",
  "tokenCount": 987
}

SendEncryptedMessageInput

Description

Input for sending an encrypted message via Signal Protocol

Fields
Input Field Description
recipientId - UUID! ID of the message recipient
ciphertext - String! Base64-encoded ciphertext (max 256KB)
messageType - SignalMessageType! Signal Protocol message type
Example
{
  "recipientId": "e62e7364-b824-4611-88df-75f2f8e4b81c",
  "ciphertext": "xyz789",
  "messageType": "PREKEY"
}

SetupIntentPayload

Description

Stripe SetupIntent for saving a payment method without charging

Fields
Field Name Description
clientSecret - String! Pass to Stripe's SetupIntent confirmation flow
Example
{"clientSecret": "abc123"}

SignalMessageType

Description

Signal Protocol message type

Values
Enum Value Description

PREKEY

Pre-key message for initial session setup

REGULAR

Regular message in an established session
Example
"PREKEY"

SigningCertificate

Description

A signing certificate (X.509) for PKI signatures

Fields
Field Name Description
id - UUID! Unique certificate identifier
name - String! User-assigned name for this certificate
description - String Optional description of the certificate's purpose
commonName - String Subject common name from the X.509 certificate
issuerCn - String Issuer common name from the certificate authority
serialNumber - String Certificate serial number
notBefore - DateTime Certificate validity start date
expiresAt - DateTime Certificate expiration date (alias for not_after)
fingerprintSha256 - String SHA-256 fingerprint of the certificate
isDefault - Boolean! Whether this is the default certificate for sealing operations
lastUsedAt - DateTime When this certificate was last used for sealing
insertedAt - DateTime! When the certificate was uploaded
updatedAt - DateTime! When the certificate record was last updated
status - CertificateStatus! Current certificate status (active, expired, or revoked)
isValid - Boolean! Whether the certificate is currently valid for signing
daysUntilExpiry - Int Days remaining until expiration (nil if no expiry set)
hasPrivateKey - Boolean! Whether a private key is stored for this certificate
Example
{
  "id": "e62e7364-b824-4611-88df-75f2f8e4b81c",
  "name": "xyz789",
  "description": "xyz789",
  "commonName": "abc123",
  "issuerCn": "abc123",
  "serialNumber": "xyz789",
  "notBefore": "2007-12-03T10:15:30Z",
  "expiresAt": "2007-12-03T10:15:30Z",
  "fingerprintSha256": "abc123",
  "isDefault": true,
  "lastUsedAt": "2007-12-03T10:15:30Z",
  "insertedAt": "2007-12-03T10:15:30Z",
  "updatedAt": "2007-12-03T10:15:30Z",
  "status": "ACTIVE",
  "isValid": true,
  "daysUntilExpiry": 987,
  "hasPrivateKey": false
}

StampExport

Description

Exported stamp file with base64-encoded data

Fields
Field Name Description
data - String! Base64-encoded file contents
filename - String! Suggested filename with extension
contentType - String! MIME type of the exported file
Example
{
  "data": "abc123",
  "filename": "abc123",
  "contentType": "abc123"
}

StampExportFormat

Description

Export format for credential stamps

Values
Enum Value Description

PDF

PDF document

PNG

PNG image

JPEG

JPEG image

TIFF

TIFF image
Example
"PDF"

String

Description

The String scalar type represents textual data, represented as UTF-8 character sequences. The String type is most often used by GraphQL to represent free-form human-readable text.

Example
"abc123"

SubmitVerificationInput

Description

Input for submitting a government ID for verification

Fields
Input Field Description
documentData - String! Base64-encoded document image (max 10MB)
documentType - String! Document type: passport, drivers_license, or national_id
filename - String! Original filename with extension
Example
{
  "documentData": "abc123",
  "documentType": "abc123",
  "filename": "xyz789"
}

SubscriptionStatus

Description

Current subscription state for the organization

Fields
Field Name Description
planLevel - PlanLevel! Plan tier: free, pro, team, or enterprise
status - String! Stripe subscription status (active, trialing, past_due, canceled, etc.)
currentPeriodEnd - DateTime When the current billing period ends
cancelAtPeriodEnd - Boolean! Whether the subscription is scheduled to cancel at period end
trialEnd - DateTime Trial end date, present only when the subscription is trialing
Example
{
  "planLevel": "FREE",
  "status": "xyz789",
  "currentPeriodEnd": "2007-12-03T10:15:30Z",
  "cancelAtPeriodEnd": true,
  "trialEnd": "2007-12-03T10:15:30Z"
}

UUID

Description

UUID in standard 8-4-4-4-12 format

Example
"e62e7364-b824-4611-88df-75f2f8e4b81c"

UpdateCredentialInput

Description

Input for updating a credential

Fields
Input Field Description
displayName - String Updated display name
expirationDate - Date Updated expiration date
Example
{
  "displayName": "abc123",
  "expirationDate": "2007-12-03"
}

UpdateDocumentInput

Description

Input for updating a document

Fields
Input Field Description
name - String New document name
description - String New document description
visibility - DocumentVisibility New visibility setting
Example
{
  "name": "abc123",
  "description": "xyz789",
  "visibility": "PRIVATE"
}

UpdateFolderInput

Description

Input for updating a folder

Fields
Input Field Description
name - String New folder name
description - String New folder description
color - String New color for UI display
icon - String New icon name
parentId - UUID Move to a different parent folder
Example
{
  "name": "xyz789",
  "description": "abc123",
  "color": "xyz789",
  "icon": "xyz789",
  "parentId": "e62e7364-b824-4611-88df-75f2f8e4b81c"
}

Upload

Description

A file upload scalar type.

Represents a file uploaded via multipart form request. Contains the filename, content_type, and path to the temp file.

Example
Upload

UploadCertificateInput

Description

Input for uploading a PEM-encoded X.509 signing certificate

Fields
Input Field Description
name - String! User-assigned name for the certificate
description - String Optional description
certificatePem - String! PEM-encoded X.509 certificate (max 32KB)
privateKeyPem - String PEM-encoded private key (max 32KB, encrypted at rest)
isDefault - Boolean Set as default certificate for sealing
Example
{
  "name": "abc123",
  "description": "xyz789",
  "certificatePem": "xyz789",
  "privateKeyPem": "xyz789",
  "isDefault": true
}

UploadDocumentInput

Description

Input for uploading a document

Fields
Input Field Description
file - Upload! The file to upload
name - String Optional document name (defaults to filename)
description - String Optional description
folderId - UUID Folder ID to place the document in
visibility - DocumentVisibility Document visibility
Example
{
  "file": Upload,
  "name": "xyz789",
  "description": "xyz789",
  "folderId": "e62e7364-b824-4611-88df-75f2f8e4b81c",
  "visibility": "PRIVATE"
}

UploadResult

Description

Result of a successful file upload

Fields
Field Name Description
filename - String! The original filename
contentType - String! The file's MIME type
size - Int! The file size in bytes
fileHash - String! SHA256 hash of the file contents
Example
{
  "filename": "abc123",
  "contentType": "abc123",
  "size": 987,
  "fileHash": "abc123"
}

User

Description

A user in the system

Fields
Field Name Description
id - UUID! Unique user identifier
email - String! User's email address
displayName - String User's display name
role - String! User's system role
mfaEnabled - Boolean! Whether the user has MFA enabled
confirmedAt - DateTime When the user confirmed their email. Null until the user clicks the confirmation link sent at registration.
insertedAt - DateTime! When the account was created
updatedAt - DateTime! When the account was last updated
uiTheme - String! UI theme preference (light, dark, system)
stampExportSize - String! Default stamp export size
betaFeaturesEnabled - Boolean! Whether beta features are enabled for this user
verificationStatus - String Identity verification status (unverified, pending, verified)
credentialCount - Int! Number of credentials owned by this user (0 for other users)
trialActive - Boolean! Whether the user's free trial is currently active
Example
{
  "id": "e62e7364-b824-4611-88df-75f2f8e4b81c",
  "email": "abc123",
  "displayName": "xyz789",
  "role": "xyz789",
  "mfaEnabled": false,
  "confirmedAt": "2007-12-03T10:15:30Z",
  "insertedAt": "2007-12-03T10:15:30Z",
  "updatedAt": "2007-12-03T10:15:30Z",
  "uiTheme": "abc123",
  "stampExportSize": "xyz789",
  "betaFeaturesEnabled": false,
  "verificationStatus": "xyz789",
  "credentialCount": 987,
  "trialActive": false
}

VerificationMethod

Description

How the credential was verified

Values
Enum Value Description

VENDOR_API

Verified via licensing board vendor API

BOARD_LOOKUP

Verified via direct board database lookup

MANUAL

Manually verified by admin review
Example
"VENDOR_API"

VerificationResult

Description

Verification submission result

Fields
Field Name Description
id - UUID! Verification record identifier
status - String! Current verification status
Example
{
  "id": "e62e7364-b824-4611-88df-75f2f8e4b81c",
  "status": "xyz789"
}

WatermarkInput

Description

Input for adding a watermark

Fields
Input Field Description
documentId - UUID!
text - String!
fontSize - Int Font size in points (default: 48)
color - String Text color name (default: gray)
opacity - Float Opacity (0.0 = transparent, 1.0 = opaque, default: 0.3)
rotation - Float Rotation in degrees (default: -45)
pages - [Int!] 1-based page numbers (default: all)
Example
{
  "documentId": "e62e7364-b824-4611-88df-75f2f8e4b81c",
  "text": "abc123",
  "fontSize": 123,
  "color": "xyz789",
  "opacity": 123.45,
  "rotation": 123.45,
  "pages": [123]
}