Abstract · Schema

Abstract API Schemas

JSON Schema definitions for the Abstract design version control and collaboration API.

DesignVersion ControlCollaborationSketchDesign Systems
View JSON Schema on GitHub

JSON Schema

abstract-api.json Raw ↑
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "$id": "https://raw.githubusercontent.com/api-evangelist/abstract/main/json-schema/abstract-api.json",
  "title": "Abstract API Schemas",
  "description": "JSON Schema definitions for the Abstract design version control and collaboration API.",
  "definitions": {
    "User": {
      "type": "object",
      "description": "An Abstract platform user.",
      "properties": {
        "id": { "type": "string" },
        "primaryEmailId": { "type": "string" },
        "createdAt": { "type": "string", "format": "date-time" },
        "updatedAt": { "type": "string", "format": "date-time" },
        "deletedAt": { "type": "string", "format": "date-time" },
        "lastActiveAt": { "type": "string", "format": "date-time" },
        "username": { "type": "string" },
        "name": { "type": "string" },
        "avatarUrl": { "type": "string", "format": "uri" }
      },
      "required": ["id", "username", "name"]
    },
    "Organization": {
      "type": "object",
      "description": "An Abstract organization.",
      "properties": {
        "id": { "type": "string" },
        "name": { "type": "string" },
        "logoUrl": { "type": "string", "format": "uri" },
        "userId": { "type": "string" },
        "hasBillingInfo": { "type": "boolean" },
        "isUsernameOrganization": { "type": "boolean" },
        "isWithinSubscriptionTerm": { "type": "boolean" },
        "privateProjectPublicSharingEnabled": { "type": "boolean" },
        "publicSharingEnabled": { "type": "boolean" },
        "restrictedToDomains": {
          "type": "array",
          "items": { "type": "string" }
        },
        "trialEndsAt": { "type": "string", "format": "date-time" }
      },
      "required": ["id", "name", "userId"]
    },
    "Project": {
      "type": "object",
      "description": "An Abstract design project.",
      "properties": {
        "id": { "type": "string" },
        "name": { "type": "string" },
        "about": { "type": "string" },
        "color": { "type": "string" },
        "createdAt": { "type": "string", "format": "date-time" },
        "updatedAt": { "type": "string", "format": "date-time" },
        "deletedAt": { "type": "string", "format": "date-time" },
        "archivedAt": { "type": "string", "format": "date-time" },
        "organizationId": { "type": "string" },
        "createdByUser": { "$ref": "#/definitions/User" },
        "firstPushedAt": { "type": "string", "format": "date-time" },
        "pushedAt": { "type": "string", "format": "date-time" },
        "isNew": { "type": "boolean" },
        "repoCreatedAt": { "type": "string", "format": "date-time" },
        "type": { "type": ["string", "null"], "enum": ["cloud", null] },
        "visibility": { "type": "string", "enum": ["organization", "specific"] },
        "sizeInBytes": { "type": "integer" },
        "assetAutoGeneration": { "type": "string", "enum": ["all", "master", "off"] }
      },
      "required": ["id", "name", "organizationId"]
    },
    "NewProject": {
      "type": "object",
      "description": "Input object for creating a new project.",
      "properties": {
        "name": { "type": "string" },
        "organizationId": { "type": "string" },
        "about": { "type": "string" },
        "color": { "type": "string" },
        "sectionId": { "type": "string" },
        "createdAt": { "type": "string", "format": "date-time" },
        "type": { "type": "string", "enum": ["cloud"] },
        "visibility": { "type": "string", "enum": ["organization", "specific"] },
        "assetAutoGeneration": { "type": "string", "enum": ["all", "master", "off"] }
      },
      "required": ["name", "organizationId"]
    },
    "Branch": {
      "type": "object",
      "description": "A branch within an Abstract project, analogous to a git branch.",
      "properties": {
        "id": { "type": "string" },
        "name": { "type": "string" },
        "description": { "type": "string" },
        "userName": { "type": "string" },
        "userId": { "type": "string" },
        "createdAt": { "type": "string", "format": "date-time" },
        "updatedAt": { "type": "string", "format": "date-time" },
        "status": { "type": "string" },
        "parent": { "type": "string" },
        "startedAtSha": { "type": "string" },
        "head": { "type": "string" },
        "mergeSha": { "type": "string" },
        "mergedIntoBranchId": { "type": "string" },
        "divergedFromBranchId": { "type": "string" },
        "projectId": { "type": "string" },
        "user": { "$ref": "#/definitions/User" }
      },
      "required": ["id", "name", "projectId"]
    },
    "BranchInput": {
      "type": "object",
      "description": "Input object for updating a branch.",
      "properties": {
        "name": { "type": "string" },
        "description": { "type": "string" },
        "status": { "type": "string" }
      }
    },
    "BranchMergeState": {
      "type": "object",
      "description": "The merge state of a branch.",
      "properties": {
        "state": { "type": "string", "enum": ["CLEAN", "NEEDS_UPDATE", "NEEDS_REMOTE_UPDATE"] },
        "parentId": { "type": "string" },
        "parentCommit": { "type": "string" },
        "branchId": { "type": "string" },
        "branchCommit": { "type": "string" },
        "ahead": { "type": "integer" },
        "behind": { "type": "integer" }
      },
      "required": ["state"]
    },
    "Commit": {
      "type": "object",
      "description": "A commit representing a set of changes pushed to a branch.",
      "properties": {
        "sha": { "type": "string" },
        "projectId": { "type": "string" },
        "type": {
          "type": "string",
          "enum": [
            "PROJECT_CREATED", "FILE_ADDED", "FILE_RENAMED", "FILE_DELETED",
            "FILE_REPLACED", "FILE_UPGRADED", "LIBRARY_ADDED", "LIBRARY_REMOVED",
            "RESTORE", "UPDATE", "MERGE", "NORMAL"
          ]
        },
        "time": { "type": "string", "format": "date-time" },
        "title": { "type": "string" },
        "description": { "type": "string" },
        "userName": { "type": "string" },
        "userId": { "type": "string" },
        "fileIds": { "type": "array", "items": { "type": "string" } },
        "parents": { "type": "array", "items": { "type": "string" } },
        "destinationBranchId": { "type": "string" },
        "destinationBranchName": { "type": "string" },
        "sourceBranchId": { "type": "string" },
        "sourceBranchName": { "type": "string" }
      },
      "required": ["sha", "projectId", "type", "time", "title"]
    },
    "File": {
      "type": "object",
      "description": "A design file (e.g. Sketch file) within a branch.",
      "properties": {
        "applicationDocumentVersion": { "type": "integer" },
        "applicationVersion": { "type": "string" },
        "id": { "type": "string" },
        "isLibrary": { "type": "boolean" },
        "lastChangedAtSha": { "type": "string" },
        "name": { "type": "string" },
        "projectId": { "type": "string" },
        "sha": { "type": "string" },
        "type": { "type": "string" }
      },
      "required": ["id", "name", "projectId"]
    },
    "Page": {
      "type": "object",
      "description": "A page within a design file.",
      "properties": {
        "id": { "type": "string" },
        "name": { "type": "string" },
        "type": { "type": "string" },
        "order": { "type": "integer" },
        "fileId": { "type": "string" },
        "projectId": { "type": "string" }
      },
      "required": ["id", "name", "fileId"]
    },
    "Collection": {
      "type": "object",
      "description": "A curated collection of design layers.",
      "properties": {
        "id": { "type": "string" },
        "userId": { "type": "string" },
        "projectId": { "type": "string" },
        "branchId": { "type": "string" },
        "name": { "type": "string" },
        "description": { "type": "string" },
        "createdAt": { "type": "string", "format": "date-time" },
        "publishedAt": { "type": "string", "format": "date-time" },
        "layers": {
          "type": "array",
          "items": { "$ref": "#/definitions/CollectionLayer" }
        }
      },
      "required": ["id", "name", "projectId", "branchId"]
    },
    "NewCollection": {
      "type": "object",
      "description": "Input object for creating a new collection.",
      "properties": {
        "name": { "type": "string" },
        "branchId": { "type": "string" },
        "description": { "type": "string" },
        "published": { "type": "boolean" }
      },
      "required": ["name", "branchId"]
    },
    "UpdatedCollection": {
      "type": "object",
      "description": "Input object for updating a collection.",
      "properties": {
        "name": { "type": "string" },
        "description": { "type": "string" },
        "published": { "type": "boolean" }
      }
    },
    "CollectionLayer": {
      "type": "object",
      "description": "A layer within a collection.",
      "properties": {
        "collectionId": { "type": "string" },
        "fileId": { "type": "string" },
        "id": { "type": "string" },
        "isPinned": { "type": "boolean" },
        "layerId": { "type": "string" },
        "order": { "type": "integer" },
        "pageId": { "type": "string" },
        "projectId": { "type": "string" },
        "sha": { "type": "string" },
        "useLatestCommit": { "type": "boolean" }
      },
      "required": ["id", "collectionId", "fileId", "layerId", "pageId"]
    },
    "NewCollectionLayer": {
      "type": "object",
      "description": "Input object for adding a layer to a collection.",
      "properties": {
        "fileId": { "type": "string" },
        "isPinned": { "type": "boolean" },
        "layerId": { "type": "string" },
        "order": { "type": "integer" },
        "pageId": { "type": "string" },
        "sha": { "type": "string" },
        "useLatestCommit": { "type": "boolean" }
      },
      "required": ["fileId", "layerId", "pageId", "sha"]
    },
    "Comment": {
      "type": "object",
      "description": "A comment on a branch, commit, page, or layer.",
      "properties": {
        "id": { "type": "string" },
        "annotation": { "$ref": "#/definitions/Annotation" },
        "body": { "type": "string" },
        "createdAt": { "type": "string", "format": "date-time" },
        "updatedAt": { "type": "string", "format": "date-time" },
        "editedAt": { "type": "string", "format": "date-time" },
        "deletedAt": { "type": "string", "format": "date-time" },
        "projectId": { "type": "string" },
        "userId": { "type": "string" },
        "branchId": { "type": "string" },
        "commitSha": { "type": "string" },
        "fileId": { "type": "string" },
        "layerId": { "type": "string" },
        "pageId": { "type": "string" },
        "parentId": { "type": "string" },
        "reviewId": { "type": "string" },
        "reviewStatus": { "type": "string", "enum": ["REQUESTED", "REJECTED", "APPROVED"] },
        "replyIds": { "type": "array", "items": { "type": "string" } }
      },
      "required": ["id", "body", "userId", "projectId"]
    },
    "NewComment": {
      "type": "object",
      "description": "Input object for creating a new comment.",
      "properties": {
        "annotation": { "$ref": "#/definitions/Annotation" },
        "body": { "type": "string" }
      },
      "required": ["body"]
    },
    "Annotation": {
      "type": "object",
      "description": "A positional annotation on a layer for attaching a comment.",
      "properties": {
        "id": { "type": "string" },
        "x": { "type": "number" },
        "y": { "type": "number" },
        "width": { "type": "number" },
        "height": { "type": "number" },
        "editing": { "type": "boolean" },
        "scale": { "type": "number" },
        "number": { "type": "integer" }
      },
      "required": ["x", "y", "width", "height"]
    },
    "Membership": {
      "type": "object",
      "description": "A user's membership in an organization or project.",
      "properties": {
        "createdAt": { "type": "string", "format": "date-time" },
        "organizationId": { "type": "string" },
        "projectId": { "type": "string" },
        "role": { "type": "string", "enum": ["guest", "member", "owner"] },
        "subscriptionRole": { "type": "string", "enum": ["viewer", "contributor"] },
        "user": { "$ref": "#/definitions/User" },
        "userId": { "type": "string" }
      },
      "required": ["organizationId", "userId", "role", "subscriptionRole"]
    },
    "Webhook": {
      "type": "object",
      "description": "A webhook configured to receive Abstract events.",
      "properties": {
        "id": { "type": "string" },
        "active": { "type": "boolean" },
        "createdAt": { "type": "string", "format": "date-time" },
        "organizationId": { "type": "string" },
        "errorCount": { "type": "integer" },
        "events": { "type": "array", "items": { "type": "string" } },
        "lastPushedAt": { "type": "string", "format": "date-time" },
        "lastErrorAt": { "type": "string", "format": "date-time" },
        "signatureKey": { "type": "string" },
        "url": { "type": "string", "format": "uri" }
      },
      "required": ["id", "organizationId", "url"]
    },
    "NewWebhook": {
      "type": "object",
      "description": "Input object for creating a new webhook.",
      "properties": {
        "active": { "type": "boolean" },
        "events": { "type": "array", "items": { "type": "string" } },
        "url": { "type": "string", "format": "uri" }
      },
      "required": ["url", "events"]
    },
    "WebhookDelivery": {
      "type": "object",
      "description": "A single delivery record for a webhook event.",
      "properties": {
        "id": { "type": "string" },
        "webhookId": { "type": "string" },
        "createdAt": { "type": "string", "format": "date-time" },
        "event": { "type": "string" },
        "organizationId": { "type": "string" },
        "projectId": { "type": "string" },
        "status": { "type": "string" },
        "requestBody": { "type": "object" },
        "requestHeaders": { "type": "object" },
        "responseBody": { "type": "object" },
        "responseHeaders": { "type": "object" },
        "statusCode": { "type": "integer" }
      },
      "required": ["id", "webhookId", "event"]
    },
    "Asset": {
      "type": "object",
      "description": "An exportable asset generated from design layers.",
      "properties": {
        "fileId": { "type": "string" },
        "fileURL": { "type": "string", "format": "uri" },
        "formatName": { "type": "string" },
        "id": { "type": "string" },
        "layerId": { "type": "string" },
        "layerName": { "type": "string" },
        "namingScheme": { "type": "string" },
        "nestedLayerId": { "type": "string" },
        "projectId": { "type": "string" },
        "scale": { "type": "number" },
        "sha": { "type": "string" },
        "url": { "type": "string", "format": "uri" }
      },
      "required": ["id", "projectId", "fileId", "layerId"]
    },
    "Section": {
      "type": "object",
      "description": "A section grouping projects within an organization.",
      "properties": {
        "id": { "type": "string" },
        "name": { "type": "string" },
        "organizationId": { "type": "string" }
      },
      "required": ["id", "name", "organizationId"]
    },
    "Star": {
      "type": "object",
      "description": "A starred project or section.",
      "properties": {
        "createdAt": { "type": "string", "format": "date-time" },
        "projectId": { "type": "string" },
        "sectionId": { "type": "string" },
        "userId": { "type": "string" }
      },
      "required": ["userId"]
    },
    "Notification": {
      "type": "object",
      "description": "A user notification within the Abstract platform.",
      "properties": {
        "id": { "type": "string" },
        "activityId": { "type": "string" },
        "branchId": { "type": "string" },
        "commentId": { "type": "string" },
        "createdAt": { "type": "string", "format": "date-time" },
        "initiatingUser": { "$ref": "#/definitions/User" },
        "initiatingUserId": { "type": "string" },
        "messageType": { "type": "string" },
        "organization": { "$ref": "#/definitions/Organization" },
        "organizationId": { "type": "string" },
        "project": { "$ref": "#/definitions/Project" },
        "projectId": { "type": "string" },
        "readAt": { "type": "string", "format": "date-time" },
        "userId": { "type": "string" }
      },
      "required": ["id", "userId", "organizationId"]
    }
  }
}