Canva · Schema

Canva Connect API Core Models

JSON Schema defining the core data models for the Canva Connect API, including designs, assets, folders, exports, comments, brand templates, and related resources.

AppsAutomationBrand ManagementCollaborationDesignGraphicsMarketingPrintTemplatesVisual Content
View JSON Schema on GitHub

JSON Schema

canva-design-schema.json Raw ↑
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://api.canva.com/schemas/canva-design.json",
  "title": "Canva Connect API Core Models",
  "description": "JSON Schema defining the core data models for the Canva Connect API, including designs, assets, folders, exports, comments, brand templates, and related resources.",
  "type": "object",
  "$defs": {
    "Design": {
      "type": "object",
      "description": "A Canva design containing visual content across one or more pages",
      "required": ["id", "title", "owner", "urls", "created_at", "updated_at"],
      "properties": {
        "id": {
          "type": "string",
          "description": "Unique identifier for the design"
        },
        "title": {
          "type": "string",
          "description": "The display title of the design",
          "minLength": 1,
          "maxLength": 255
        },
        "owner": {
          "$ref": "#/$defs/Owner"
        },
        "urls": {
          "$ref": "#/$defs/DesignUrls"
        },
        "created_at": {
          "type": "integer",
          "description": "Unix timestamp in seconds when the design was created"
        },
        "updated_at": {
          "type": "integer",
          "description": "Unix timestamp in seconds when the design was last modified"
        },
        "thumbnail": {
          "$ref": "#/$defs/Thumbnail"
        },
        "page_count": {
          "type": "integer",
          "description": "The number of pages in the design. Some design types may not have pages.",
          "minimum": 0
        }
      }
    },
    "Owner": {
      "type": "object",
      "description": "The owner of a Canva resource, identified by user and team",
      "required": ["user_id", "team_id"],
      "properties": {
        "user_id": {
          "type": "string",
          "description": "The unique identifier of the owning user"
        },
        "team_id": {
          "type": "string",
          "description": "The unique identifier of the owning team"
        }
      }
    },
    "DesignUrls": {
      "type": "object",
      "description": "Temporary URLs for accessing a design, valid for 30 days",
      "required": ["edit_url", "view_url"],
      "properties": {
        "edit_url": {
          "type": "string",
          "format": "uri",
          "description": "URL to open the design in the Canva editor (expires in 30 days)"
        },
        "view_url": {
          "type": "string",
          "format": "uri",
          "description": "URL to view the design in read-only mode (expires in 30 days)"
        }
      }
    },
    "Thumbnail": {
      "type": "object",
      "description": "A thumbnail image representation of a Canva resource. The URL expires after 15 minutes.",
      "required": ["width", "height", "url"],
      "properties": {
        "width": {
          "type": "integer",
          "description": "Thumbnail width in pixels",
          "minimum": 1
        },
        "height": {
          "type": "integer",
          "description": "Thumbnail height in pixels",
          "minimum": 1
        },
        "url": {
          "type": "string",
          "format": "uri",
          "description": "URL to the thumbnail image (expires in 15 minutes)"
        }
      }
    },
    "Asset": {
      "type": "object",
      "description": "An uploaded image or video asset in a user's Canva account",
      "required": ["id", "type", "name", "created_at", "updated_at", "owner"],
      "properties": {
        "id": {
          "type": "string",
          "description": "Unique identifier for the asset"
        },
        "type": {
          "type": "string",
          "description": "The media type of the asset",
          "enum": ["image", "video"]
        },
        "name": {
          "type": "string",
          "description": "The display name of the asset",
          "minLength": 1,
          "maxLength": 50
        },
        "tags": {
          "type": "array",
          "description": "User-facing tags associated with the asset",
          "items": {
            "type": "string"
          }
        },
        "created_at": {
          "type": "integer",
          "description": "Unix timestamp in seconds when the asset was uploaded"
        },
        "updated_at": {
          "type": "integer",
          "description": "Unix timestamp in seconds when the asset was last modified"
        },
        "owner": {
          "$ref": "#/$defs/Owner"
        },
        "thumbnail": {
          "$ref": "#/$defs/Thumbnail"
        },
        "import_status": {
          "$ref": "#/$defs/ImportStatus"
        }
      }
    },
    "ImportStatus": {
      "type": "object",
      "description": "The processing status of an imported asset (deprecated)",
      "properties": {
        "state": {
          "type": "string",
          "description": "The current import processing state",
          "enum": ["failed", "in_progress", "success"]
        },
        "error": {
          "type": "object",
          "description": "Error details if the import failed",
          "properties": {
            "message": {
              "type": "string",
              "description": "Human-readable error description"
            },
            "code": {
              "type": "string",
              "description": "Machine-readable error code",
              "enum": ["file_too_big", "import_failed"]
            }
          },
          "required": ["message", "code"]
        }
      }
    },
    "Folder": {
      "type": "object",
      "description": "A folder for organizing designs and assets in Canva",
      "required": ["id", "name", "created_at", "updated_at"],
      "properties": {
        "id": {
          "type": "string",
          "description": "Unique identifier for the folder"
        },
        "name": {
          "type": "string",
          "description": "The display name of the folder"
        },
        "created_at": {
          "type": "integer",
          "description": "Unix timestamp in seconds when the folder was created"
        },
        "updated_at": {
          "type": "integer",
          "description": "Unix timestamp in seconds when the folder was last modified"
        },
        "thumbnail": {
          "$ref": "#/$defs/Thumbnail"
        }
      }
    },
    "FolderItem": {
      "type": "object",
      "description": "An item contained within a folder, which can be a design, subfolder, or image asset",
      "required": ["type"],
      "properties": {
        "type": {
          "type": "string",
          "description": "The type of the folder item",
          "enum": ["design", "folder", "image"]
        },
        "design": {
          "$ref": "#/$defs/Design"
        },
        "folder": {
          "$ref": "#/$defs/Folder"
        },
        "image": {
          "$ref": "#/$defs/Asset"
        }
      },
      "oneOf": [
        {
          "properties": { "type": { "const": "design" } },
          "required": ["type", "design"]
        },
        {
          "properties": { "type": { "const": "folder" } },
          "required": ["type", "folder"]
        },
        {
          "properties": { "type": { "const": "image" } },
          "required": ["type", "image"]
        }
      ]
    },
    "ExportJob": {
      "type": "object",
      "description": "An asynchronous job for exporting a design to a downloadable format such as PDF, PNG, JPG, GIF, PPTX, or MP4",
      "required": ["id", "status"],
      "properties": {
        "id": {
          "type": "string",
          "description": "Unique identifier for the export job"
        },
        "status": {
          "type": "string",
          "description": "The current processing status of the export",
          "enum": ["in_progress", "success", "failed"]
        },
        "urls": {
          "type": "array",
          "description": "Download URLs for the exported files, one per page. Valid for 24 hours. Present only when status is success.",
          "items": {
            "type": "string",
            "format": "uri"
          }
        },
        "error": {
          "$ref": "#/$defs/ExportError"
        }
      }
    },
    "ExportError": {
      "type": "object",
      "description": "Error details for a failed export job",
      "required": ["code", "message"],
      "properties": {
        "code": {
          "type": "string",
          "description": "Machine-readable error code indicating the failure reason",
          "enum": ["license_required", "approval_required", "internal_failure"]
        },
        "message": {
          "type": "string",
          "description": "Human-readable error description"
        }
      }
    },
    "Comment": {
      "type": "object",
      "description": "A comment on a Canva design, either a top-level parent comment or a reply",
      "required": ["type", "id", "message", "author", "created_at", "updated_at"],
      "properties": {
        "type": {
          "type": "string",
          "description": "Whether this is a top-level comment or a reply",
          "enum": ["parent", "reply"]
        },
        "id": {
          "type": "string",
          "description": "Unique identifier for the comment"
        },
        "message": {
          "type": "string",
          "description": "The comment text. User mentions use the format [user_id:team_id].",
          "minLength": 1,
          "maxLength": 2048
        },
        "author": {
          "$ref": "#/$defs/CommentUser"
        },
        "created_at": {
          "type": "integer",
          "description": "Unix timestamp in seconds when the comment was created"
        },
        "updated_at": {
          "type": "integer",
          "description": "Unix timestamp in seconds when the comment was last updated"
        },
        "assignee": {
          "$ref": "#/$defs/CommentUser",
          "description": "The user assigned to resolve this comment (deprecated)"
        },
        "resolver": {
          "$ref": "#/$defs/CommentUser",
          "description": "The user who resolved this comment (deprecated)"
        },
        "mentions": {
          "type": "object",
          "description": "Dictionary of users mentioned in the comment, keyed by mention identifier",
          "additionalProperties": {
            "$ref": "#/$defs/MentionedUser"
          }
        },
        "attached_to": {
          "$ref": "#/$defs/CommentAttachment"
        }
      }
    },
    "CommentUser": {
      "type": "object",
      "description": "A user referenced in a comment (as author, assignee, or resolver)",
      "properties": {
        "id": {
          "type": "string",
          "description": "The user ID"
        },
        "display_name": {
          "type": "string",
          "description": "The user display name (deprecated)"
        }
      }
    },
    "MentionedUser": {
      "type": "object",
      "description": "A user mentioned in a comment message",
      "properties": {
        "user_id": {
          "type": "string",
          "description": "The mentioned user's ID"
        },
        "team_id": {
          "type": "string",
          "description": "The mentioned user's team ID"
        },
        "display_name": {
          "type": "string",
          "description": "The mentioned user's display name"
        }
      }
    },
    "CommentAttachment": {
      "type": "object",
      "description": "The design that a comment is attached to",
      "required": ["type", "design_id"],
      "properties": {
        "type": {
          "type": "string",
          "description": "The attachment type",
          "const": "design"
        },
        "design_id": {
          "type": "string",
          "description": "The ID of the design the comment is attached to"
        }
      }
    },
    "BrandTemplate": {
      "type": "object",
      "description": "A Canva brand template that can be used for autofilling designs. Requires Canva Enterprise.",
      "required": ["id", "title", "created_at", "updated_at"],
      "properties": {
        "id": {
          "type": "string",
          "description": "Unique identifier for the brand template"
        },
        "title": {
          "type": "string",
          "description": "The display title of the brand template"
        },
        "view_url": {
          "type": "string",
          "format": "uri",
          "description": "URL to view the brand template"
        },
        "create_url": {
          "type": "string",
          "format": "uri",
          "description": "URL to create a new design from this brand template"
        },
        "created_at": {
          "type": "integer",
          "description": "Unix timestamp in seconds when the template was created"
        },
        "updated_at": {
          "type": "integer",
          "description": "Unix timestamp in seconds when the template was last modified"
        },
        "thumbnail": {
          "$ref": "#/$defs/Thumbnail"
        }
      }
    },
    "DatasetField": {
      "type": "object",
      "description": "A data field within a brand template dataset, defining what type of content can be autofilled",
      "required": ["type"],
      "properties": {
        "type": {
          "type": "string",
          "description": "The data type this field accepts",
          "enum": ["image", "text", "chart"]
        }
      }
    },
    "TeamUser": {
      "type": "object",
      "description": "The authenticated user and their associated Canva team",
      "required": ["user_id", "team_id"],
      "properties": {
        "user_id": {
          "type": "string",
          "description": "The unique identifier of the authenticated user"
        },
        "team_id": {
          "type": "string",
          "description": "The unique identifier of the user's Canva team"
        }
      }
    },
    "AutofillJob": {
      "type": "object",
      "description": "An asynchronous job for creating a design by autofilling a brand template with data",
      "required": ["id", "status"],
      "properties": {
        "id": {
          "type": "string",
          "description": "Unique identifier for the autofill job"
        },
        "status": {
          "type": "string",
          "description": "The current processing status",
          "enum": ["in_progress", "success", "failed"]
        },
        "result": {
          "type": "object",
          "description": "The result of a successful autofill, containing the generated design",
          "required": ["type", "design"],
          "properties": {
            "type": {
              "type": "string",
              "const": "create_design"
            },
            "design": {
              "$ref": "#/$defs/Design"
            }
          }
        },
        "error": {
          "type": "object",
          "description": "Error details for a failed autofill job",
          "required": ["code", "message"],
          "properties": {
            "code": {
              "type": "string",
              "enum": ["autofill_error", "thumbnail_generation_error", "create_design_error"]
            },
            "message": {
              "type": "string",
              "description": "Human-readable error description"
            }
          }
        }
      }
    },
    "ResizeJob": {
      "type": "object",
      "description": "An asynchronous job for resizing a design to new dimensions or a preset type",
      "required": ["id", "status"],
      "properties": {
        "id": {
          "type": "string",
          "description": "Unique identifier for the resize job"
        },
        "status": {
          "type": "string",
          "description": "The current processing status",
          "enum": ["in_progress", "success", "failed"]
        },
        "result": {
          "type": "object",
          "description": "The result of a successful resize, containing the new design",
          "properties": {
            "design": {
              "$ref": "#/$defs/Design"
            }
          }
        },
        "error": {
          "type": "object",
          "description": "Error details for a failed resize job",
          "required": ["code", "message"],
          "properties": {
            "code": {
              "type": "string"
            },
            "message": {
              "type": "string",
              "description": "Human-readable error description"
            }
          }
        }
      }
    },
    "DesignType": {
      "oneOf": [
        { "$ref": "#/$defs/PresetDesignType" },
        { "$ref": "#/$defs/CustomDesignType" }
      ],
      "description": "Specifies the type and dimensions for a new or resized design"
    },
    "PresetDesignType": {
      "type": "object",
      "description": "A preset design type such as document, whiteboard, or presentation",
      "required": ["type", "name"],
      "properties": {
        "type": {
          "type": "string",
          "const": "preset"
        },
        "name": {
          "type": "string",
          "description": "The preset design type",
          "enum": ["doc", "whiteboard", "presentation"]
        }
      }
    },
    "CustomDesignType": {
      "type": "object",
      "description": "A custom design type with explicit pixel dimensions",
      "required": ["type", "width", "height"],
      "properties": {
        "type": {
          "type": "string",
          "const": "custom"
        },
        "width": {
          "type": "integer",
          "description": "Design width in pixels",
          "minimum": 40,
          "maximum": 8000
        },
        "height": {
          "type": "integer",
          "description": "Design height in pixels",
          "minimum": 40,
          "maximum": 8000
        }
      }
    }
  }
}