{
  "@context": {
    "@vocab": "https://schema.org/",
    "abstract": "https://developer.abstract.com/vocab#",
    "xsd": "http://www.w3.org/2001/XMLSchema#",
    "id": "@id",
    "type": "@type",
    "createdAt": {
      "@id": "schema:dateCreated",
      "@type": "xsd:dateTime"
    },
    "updatedAt": {
      "@id": "schema:dateModified",
      "@type": "xsd:dateTime"
    },
    "name": "schema:name",
    "description": "schema:description",
    "url": "schema:url",
    "avatarUrl": "schema:image",
    "logoUrl": "schema:logo",
    "username": "schema:alternateName",
    "organizationId": "abstract:organizationId",
    "projectId": "abstract:projectId",
    "branchId": "abstract:branchId",
    "fileId": "abstract:fileId",
    "layerId": "abstract:layerId",
    "pageId": "abstract:pageId",
    "commitSha": "abstract:commitSha",
    "sha": "abstract:sha",
    "status": "abstract:status",
    "role": "abstract:role",
    "visibility": "abstract:visibility",
    "sizeInBytes": {
      "@id": "schema:contentSize",
      "@type": "xsd:integer"
    }
  },
  "@graph": [
    {
      "@id": "abstract:AbstractAPI",
      "@type": "schema:WebAPI",
      "schema:name": "Abstract API",
      "schema:description": "The Abstract REST API provides programmatic access to design projects, branches, commits, files, collections, and component libraries managed within the Abstract platform.",
      "schema:url": "https://developer.abstract.com",
      "schema:documentation": "https://developer.abstract.com",
      "schema:provider": {
        "@id": "abstract:AbstractInc",
        "@type": "schema:Organization",
        "schema:name": "Abstract",
        "schema:url": "https://www.goabstract.com"
      },
      "schema:termsOfService": "https://www.goabstract.com/terms",
      "schema:endpointURL": "https://api.goabstract.com"
    },
    {
      "@id": "abstract:User",
      "@type": "schema:Person",
      "schema:name": "User",
      "schema:description": "An Abstract platform user account.",
      "schema:identifier": "abstract:userId",
      "abstract:hasProperty": [
        { "@id": "abstract:userId" },
        { "@id": "abstract:username" },
        { "@id": "schema:name" },
        { "@id": "schema:email" },
        { "@id": "schema:image" }
      ]
    },
    {
      "@id": "abstract:Organization",
      "@type": "schema:Organization",
      "schema:name": "Organization",
      "schema:description": "An Abstract organization that owns projects and manages team memberships.",
      "abstract:hasProperty": [
        { "@id": "abstract:organizationId" },
        { "@id": "schema:name" },
        { "@id": "schema:logo" }
      ]
    },
    {
      "@id": "abstract:Project",
      "@type": "schema:CreativeWork",
      "schema:name": "Project",
      "schema:description": "A design project within Abstract, containing branches, files, and version history.",
      "abstract:partOf": { "@id": "abstract:Organization" },
      "abstract:hasProperty": [
        { "@id": "abstract:projectId" },
        { "@id": "schema:name" },
        { "@id": "abstract:organizationId" },
        { "@id": "abstract:visibility" },
        { "@id": "schema:dateCreated" },
        { "@id": "schema:dateModified" }
      ]
    },
    {
      "@id": "abstract:Branch",
      "@type": "schema:CreativeWork",
      "schema:name": "Branch",
      "schema:description": "A branch within a project, analogous to a git branch, allowing parallel design work.",
      "abstract:partOf": { "@id": "abstract:Project" },
      "abstract:hasProperty": [
        { "@id": "abstract:branchId" },
        { "@id": "schema:name" },
        { "@id": "abstract:projectId" },
        { "@id": "abstract:status" }
      ]
    },
    {
      "@id": "abstract:Commit",
      "@type": "schema:UpdateAction",
      "schema:name": "Commit",
      "schema:description": "A commit representing a saved set of design changes pushed to a branch.",
      "abstract:partOf": { "@id": "abstract:Branch" },
      "abstract:hasProperty": [
        { "@id": "abstract:sha" },
        { "@id": "abstract:projectId" },
        { "@id": "schema:name" },
        { "@id": "schema:description" },
        { "@id": "schema:dateCreated" }
      ]
    },
    {
      "@id": "abstract:File",
      "@type": "schema:DigitalDocument",
      "schema:name": "File",
      "schema:description": "A design file (e.g. a Sketch file) stored within a branch.",
      "abstract:partOf": { "@id": "abstract:Branch" },
      "abstract:hasProperty": [
        { "@id": "abstract:fileId" },
        { "@id": "schema:name" },
        { "@id": "abstract:projectId" },
        { "@id": "abstract:isLibrary" }
      ]
    },
    {
      "@id": "abstract:Page",
      "@type": "schema:CreativeWork",
      "schema:name": "Page",
      "schema:description": "A page within a design file, containing design layers.",
      "abstract:partOf": { "@id": "abstract:File" },
      "abstract:hasProperty": [
        { "@id": "abstract:pageId" },
        { "@id": "schema:name" },
        { "@id": "abstract:fileId" }
      ]
    },
    {
      "@id": "abstract:Collection",
      "@type": "schema:Collection",
      "schema:name": "Collection",
      "schema:description": "A curated collection of design layers shared for review or presentation.",
      "abstract:partOf": { "@id": "abstract:Branch" },
      "abstract:hasProperty": [
        { "@id": "abstract:collectionId" },
        { "@id": "schema:name" },
        { "@id": "schema:description" },
        { "@id": "abstract:projectId" },
        { "@id": "abstract:branchId" }
      ]
    },
    {
      "@id": "abstract:Comment",
      "@type": "schema:Comment",
      "schema:name": "Comment",
      "schema:description": "A comment attached to a branch, commit, page, or layer, optionally with a positional annotation.",
      "abstract:hasProperty": [
        { "@id": "abstract:commentId" },
        { "@id": "schema:text" },
        { "@id": "abstract:userId" },
        { "@id": "abstract:projectId" }
      ]
    },
    {
      "@id": "abstract:Webhook",
      "@type": "schema:EntryPoint",
      "schema:name": "Webhook",
      "schema:description": "A webhook subscription that delivers Abstract events to an external URL.",
      "abstract:partOf": { "@id": "abstract:Organization" },
      "abstract:hasProperty": [
        { "@id": "abstract:webhookId" },
        { "@id": "schema:url" },
        { "@id": "abstract:events" },
        { "@id": "abstract:active" }
      ]
    },
    {
      "@id": "abstract:Membership",
      "@type": "schema:OrganizationRole",
      "schema:name": "Membership",
      "schema:description": "A user's role membership within an Abstract organization or project.",
      "abstract:hasProperty": [
        { "@id": "abstract:userId" },
        { "@id": "abstract:organizationId" },
        { "@id": "abstract:role" }
      ]
    }
  ]
}
