{"swagger": "2.0", "info": {"title": "Cannoli Backend API", "description": "Cannoli Backend", "contact": {"email": "daniel@scalero.io"}, "version": "v1"}, "host": "api.cannoli.app", "schemes": ["http"], "basePath": "/api/v1", "consumes": ["application/json"], "produces": ["application/json"], "securityDefinitions": {}, "paths": {"/esps/": {"get": {"operationId": "esps_list", "summary": "List of ESPs for a given user", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/EmailServiceProvider"}}}}, "tags": ["Email Service Providers"]}, "post": {"operationId": "esps_create", "summary": "ESP creation", "description": "\nHere you can integration your own ESP accounts. We currently have support for the following providers:\n* KL: Klaviyo\n* MC: Mailchimp\n\nIn order to create a new ESP you must send the API key generated on your account, as well as which ESP\nit belongs to. The previous list contains the two character value you must send create the ESP integration,\nbut you can also find it below in the possible values for `email_service_provider`.\n", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/EmailServiceProvider"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/EmailServiceProvider"}}}, "tags": ["Email Service Providers"]}, "parameters": []}, "/esps/{id}/": {"get": {"operationId": "esps_read", "summary": "ESP detail", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/EmailServiceProviderDetail"}}}, "tags": ["Email Service Providers"]}, "put": {"operationId": "esps_update", "summary": "Update ESP", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/EmailServiceProviderDetail"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/EmailServiceProviderDetail"}}}, "tags": ["Email Service Providers"]}, "patch": {"operationId": "esps_partial_update", "summary": "Update ESP", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/EmailServiceProviderDetail"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/EmailServiceProviderDetail"}}}, "tags": ["Email Service Providers"]}, "delete": {"operationId": "esps_delete", "summary": "Delete ESP", "description": "", "parameters": [], "responses": {"204": {"description": ""}}, "tags": ["Email Service Providers"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this email service provider.", "required": true, "type": "integer"}]}, "/figma/file/{file_id}/file_versions/": {"get": {"operationId": "figma_file_file_versions_list", "summary": "Get a list of MJML versions for a given file", "description": "\nEach time a File is saved the following checks are made to determine if a new version is created\nautomatically\"\n- The last version was created 5 or more minutes ago\n- The MJML JSON is not equal\n\nThis endpoint is sorted by `created_at` descending.\n\nThis endpoint is paged to a maximum number for 10 results per page.\n", "parameters": [{"name": "page", "in": "query", "description": "A page number within the paginated result set.", "required": false, "type": "integer"}, {"name": "page_size", "in": "query", "description": "Number of results to return per page.", "required": false, "type": "integer"}], "responses": {"200": {"description": "", "schema": {"required": ["count", "results"], "type": "object", "properties": {"count": {"type": "integer"}, "next": {"type": "string", "format": "uri", "x-nullable": true}, "previous": {"type": "string", "format": "uri", "x-nullable": true}, "results": {"type": "array", "items": {"$ref": "#/definitions/FileVersionList"}}}}}}, "tags": ["Figma"]}, "parameters": [{"name": "file_id", "in": "path", "required": true, "type": "string"}]}, "/figma/files/": {"get": {"operationId": "figma_files_list", "summary": "Get all your Cannoli files", "description": "\n### Ordering\nThe file list is order by `created_at` descending. You can override the ordering through the \n`ordering` query parameter with the following fields:\n* `created_at`\n* `updated_at` \n* `name`  \n\nFields are ordered as ascending by default and you can change it to descending by adding `-` before\nthe field, eg `-created_at`\n\nHere are a few examples to update the file list ordering.\n\nOrder by creation date, ascending\n\n    /api/v1/figma/files/?ordering=created_at\n\nOrder by creation date, descending\n\n    /api/v1/figma/files/?ordering=-created_at\n\nYou can also order by multiple fields separating by comma\n\n    /api/v1/figma/files/?ordering=-created_at,name\n", "parameters": [{"name": "ordering", "in": "query", "description": "Which field to use when ordering the results.", "required": false, "type": "string"}], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/FileList"}}}}, "tags": ["Figma"]}, "post": {"operationId": "figma_files_create", "summary": "Create a new Cannoli File", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/FileCreateSerializerV2"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/FileCreateSerializerV2"}}}, "tags": ["Figma"]}, "parameters": []}, "/figma/files/{file_id}/export/{esp_id}/": {"post": {"operationId": "figma_files_export_create", "summary": "Create HTML template", "description": "\nSend the HTML from one of your Cannoli files to a given Email Service Provider (ESP).\n\nSend a POST request with the name Cannoli will assign to the ESP template. You must send the ID for your \nfile, followed by the ID f your pre-configured ESP.\n", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/CreateESPTemplate"}}], "responses": {"200": {"description": "ESP integration created successfully", "schema": {"$ref": "#/definitions/CreateESPTemplateResponse"}}}, "tags": ["Export File to ESP"]}, "parameters": [{"name": "esp_id", "in": "path", "required": true, "type": "string"}, {"name": "file_id", "in": "path", "required": true, "type": "string"}]}, "/figma/files/{file_id}/regen_compare/": {"get": {"operationId": "figma_files_regen_compare_list", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/FileRegenComparison"}}}}, "tags": ["figma"]}, "post": {"operationId": "figma_files_regen_compare_create", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/FileRegenComparisonCreate"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/FileRegenComparisonCreate"}}}, "tags": ["figma"]}, "parameters": [{"name": "file_id", "in": "path", "required": true, "type": "string"}]}, "/figma/files/{file_id}/regen_compare/{id}/": {"get": {"operationId": "figma_files_regen_compare_read", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/FileRegenComparison"}}}, "tags": ["figma"]}, "put": {"operationId": "figma_files_regen_compare_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/FileRegenComparison"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/FileRegenComparison"}}}, "tags": ["figma"]}, "patch": {"operationId": "figma_files_regen_compare_partial_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/FileRegenComparison"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/FileRegenComparison"}}}, "tags": ["figma"]}, "delete": {"operationId": "figma_files_regen_compare_delete", "description": "", "parameters": [], "responses": {"204": {"description": ""}}, "tags": ["figma"]}, "parameters": [{"name": "file_id", "in": "path", "required": true, "type": "string"}, {"name": "id", "in": "path", "description": "A unique integer value identifying this file regen comparison.", "required": true, "type": "integer"}]}, "/figma/files/{file_id}/regen_compare/{regen_id}/close/": {"post": {"operationId": "figma_files_regen_compare_close_create", "description": "", "parameters": [], "responses": {"201": {"description": ""}}, "tags": ["figma"]}, "parameters": [{"name": "file_id", "in": "path", "required": true, "type": "string"}, {"name": "regen_id", "in": "path", "required": true, "type": "string"}]}, "/figma/files/{file_id}/regen_compare/{regen_id}/refresh/": {"post": {"operationId": "figma_files_regen_compare_refresh_create", "description": "", "parameters": [], "responses": {"201": {"description": ""}}, "tags": ["figma"]}, "parameters": [{"name": "file_id", "in": "path", "required": true, "type": "string"}, {"name": "regen_id", "in": "path", "required": true, "type": "string"}]}, "/figma/files/{id}/": {"get": {"operationId": "figma_files_read", "summary": "Get detail for a Cannoli file", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/FileDetail"}}}, "tags": ["Figma"]}, "put": {"operationId": "figma_files_update", "summary": "Update a Cannoli file", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/FileUpdate"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/FileUpdate"}}}, "tags": ["Figma"]}, "patch": {"operationId": "figma_files_partial_update", "summary": "Update a Cannoli file", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/FileUpdate"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/FileUpdate"}}}, "tags": ["Figma"]}, "delete": {"operationId": "figma_files_delete", "summary": "Delete a Cannoli file", "description": "", "parameters": [], "responses": {"204": {"description": ""}}, "tags": ["Figma"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this file.", "required": true, "type": "integer"}]}, "/figma/files/{id}/compare/": {"get": {"operationId": "figma_files_compare_list", "parameters": [], "responses": {"200": {"description": ""}}, "tags": ["Figma"]}, "parameters": [{"name": "id", "in": "path", "required": true, "type": "string"}]}, "/figma/files/{id}/preview/": {"put": {"operationId": "figma_files_preview_update", "summary": "Update a Cannoli file's preview image", "description": "\nThis endpoint allows you to update a Cannoli file's preview image. The input must be an image type file.\n\nYou must send the file as a multipart/form-data.\n", "parameters": [{"name": "preview", "in": "formData", "required": false, "type": "file", "x-nullable": true}], "responses": {"201": {"description": "response description", "schema": {"$ref": "#/definitions/FilePreviewUpdate"}}}, "consumes": ["multipart/form-data"], "tags": ["Figma"]}, "parameters": [{"name": "id", "in": "path", "required": true, "type": "string"}]}, "/figma/files/{id}/refresh/": {"post": {"operationId": "figma_files_refresh_create", "summary": "Refresh a Cannoli file", "description": "This endpoint allows users to refresh their Cannoli file's Figma JSON. Make a POST request to this endpoint\n(no POST data is required) and you will get a get a File Detail response with the udated JSON.", "parameters": [], "responses": {"201": {"description": "response description", "schema": {"$ref": "#/definitions/FileDetail"}}}, "tags": ["Figma"]}, "parameters": [{"name": "id", "in": "path", "required": true, "type": "string"}]}, "/figma/files/{id}/send_mail/": {"post": {"operationId": "figma_files_send_mail_create", "summary": "Email Cannoli File", "description": "\nSend the HTML from one of your Cannoli files to a recipient.\n\nBy default the email is sent to the file owner's email. You can override this by sending the desired email\nrecipient in the optional `recipient` argument.\n", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/FileSendMail"}}], "responses": {"201": {"description": ""}}, "tags": ["Figma"]}, "parameters": [{"name": "id", "in": "path", "required": true, "type": "string"}]}, "/figma/files/{id}/share_hash/": {"get": {"operationId": "figma_files_share_hash_list", "description": "", "parameters": [], "responses": {"200": {"description": ""}}, "tags": ["figma"]}, "post": {"operationId": "figma_files_share_hash_create", "description": "", "parameters": [], "responses": {"201": {"description": ""}}, "tags": ["figma"]}, "delete": {"operationId": "figma_files_share_hash_delete", "description": "", "parameters": [], "responses": {"204": {"description": ""}}, "tags": ["figma"]}, "parameters": [{"name": "id", "in": "path", "required": true, "type": "string"}]}, "/figma/files/{id}/update_preview_from_html/": {"put": {"operationId": "figma_files_update_preview_from_html_update", "summary": "Update a Cannoli file's preview image", "description": "\nThis endpoint allows you to update a Cannoli file's preview image. The input must be an image type file.\n\nYou must send the file as a multipart/form-data.\n", "parameters": [], "responses": {"200": {"description": ""}}, "tags": ["Figma"]}, "parameters": [{"name": "id", "in": "path", "required": true, "type": "string"}]}, "/figma/files_by_team_and_project/": {"get": {"operationId": "figma_files_by_team_and_project_list", "summary": "Get a list of all Cannoli files by Team/Project", "description": "", "parameters": [], "responses": {"200": {"description": "", "examples": {"application/json": {"teams": [{"id": 0, "name": "string", "logo": "http://example.com/", "projects": [{"id": 0, "name": "string", "files": [{"id": 0, "name": "string", "figma_file_id": "string", "created_at": "2019-08-24T14:15:22Z", "updated_at": "2019-08-24T14:15:22Z", "preview": "http://example.com/"}]}]}]}}}}, "tags": ["Figma"]}, "parameters": []}, "/figma/files_paginated/": {"get": {"operationId": "figma_files_paginated_list", "summary": "Get all your Cannoli files paginated", "description": "\n### Ordering\nThe file list is order by `created_at` descending. You can override the ordering through the \n`ordering` query parameter with the following fields:\n* `created_at`\n* `updated_at` \n* `name`  \n\nFields are ordered as ascending by default and you can change it to descending by adding `-` before\nthe field, eg `-created_at`\n\nHere are a few examples to update the file list ordering.\n\nOrder by creation date, ascending\n\n    /api/v1/figma/files_paginated/?ordering=created_at\n\nOrder by creation date, descending\n\n    /api/v1/figma/files_paginated/?ordering=-created_at\n\nYou can also order by multiple fields separating by comma\n\n    /api/v1/figma/files_paginated/?ordering=-created_at,name\n\n### Pagination\nThis endpoint is paged to 30 results per page. You can override the page size with  the `page_size`\nquery parameter. You can also override the page number with the `page` query parameter.\n\n    /api/v1/figma/files_paginated/?page_size=20&page=2\n\n### Filtering\nYou can filter the file list by `team_id` using the `team` query parameter.\n\n    /api/v1/figma/files_paginated/?team=<TEAM_ID>\n\nYou can also filter the file list by `project_id` using the `project` query parameter.\n\n    /api/v1/figma/files_paginated/?project=<PROJECT_ID>\n\n", "parameters": [{"name": "ordering", "in": "query", "description": "Which field to use when ordering the results.", "required": false, "type": "string"}, {"name": "page", "in": "query", "description": "A page number within the paginated result set.", "required": false, "type": "integer"}, {"name": "page_size", "in": "query", "description": "Number of results to return per page.", "required": false, "type": "integer"}], "responses": {"200": {"description": "", "schema": {"required": ["count", "results"], "type": "object", "properties": {"count": {"type": "integer"}, "next": {"type": "string", "format": "uri", "x-nullable": true}, "previous": {"type": "string", "format": "uri", "x-nullable": true}, "results": {"type": "array", "items": {"$ref": "#/definitions/FileList"}}}}}}, "tags": ["Figma"]}, "parameters": []}, "/figma/query/": {"post": {"operationId": "figma_query_create", "summary": "Arbitrary query to Figma API", "description": "This endpoint allows logged in users to freely query the figma API. It takes a URL type, validates the netloc     'api.figma.com', adds authentication headers and sends it to Figma without any modification.\n\nParameters\n    - url: URL type field which must contain 'api.figma.com' as netloc\n\nExample URL parameters\n\n    - https://api.figma.com/v1/files/Ys3esNJOLKkqEHxbFEJhJV\n\n    - https://api.figma.com/v1/files/Ys3esNJOLKkqEHxbFEJhJV/nodes?ids=205:558", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/FigmaQuery"}}], "responses": {"200": {"description": "response description", "schema": {"$ref": "#/definitions/FigmaResponse"}}}, "tags": ["Figma"]}, "parameters": []}, "/fonts/google_fonts/": {"get": {"operationId": "fonts_google_fonts_list", "summary": "List of Google fonts", "description": "", "parameters": [{"name": "family", "in": "query", "description": "", "required": false, "type": "string"}, {"name": "page", "in": "query", "description": "A page number within the paginated result set.", "required": false, "type": "integer"}, {"name": "page_size", "in": "query", "description": "Number of results to return per page.", "required": false, "type": "integer"}], "responses": {"200": {"description": "", "schema": {"required": ["count", "results"], "type": "object", "properties": {"count": {"type": "integer"}, "next": {"type": "string", "format": "uri", "x-nullable": true}, "previous": {"type": "string", "format": "uri", "x-nullable": true}, "results": {"type": "array", "items": {"$ref": "#/definitions/Font"}}}}}}, "tags": ["Fonts"]}, "parameters": []}, "/fonts/google_fonts/{id}/": {"get": {"operationId": "fonts_google_fonts_read", "summary": "Google font detail", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/Font"}}}, "tags": ["Fonts"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this font.", "required": true, "type": "integer"}]}, "/fonts/safe_fonts/": {"get": {"operationId": "fonts_safe_fonts_list", "summary": "List of Google fonts", "description": "", "parameters": [{"name": "family", "in": "query", "description": "", "required": false, "type": "string"}, {"name": "page", "in": "query", "description": "A page number within the paginated result set.", "required": false, "type": "integer"}, {"name": "page_size", "in": "query", "description": "Number of results to return per page.", "required": false, "type": "integer"}], "responses": {"200": {"description": "", "schema": {"required": ["count", "results"], "type": "object", "properties": {"count": {"type": "integer"}, "next": {"type": "string", "format": "uri", "x-nullable": true}, "previous": {"type": "string", "format": "uri", "x-nullable": true}, "results": {"type": "array", "items": {"$ref": "#/definitions/Font"}}}}}}, "tags": ["Fonts"]}, "parameters": []}, "/fonts/safe_fonts/{id}/": {"get": {"operationId": "fonts_safe_fonts_read", "summary": "Google font detail", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/Font"}}}, "tags": ["Fonts"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this font.", "required": true, "type": "integer"}]}, "/fonts/variants/": {"get": {"operationId": "fonts_variants_list", "summary": "List of font variants", "description": "\nYou can filter fonts by team by sending the get param `team_id={id}`\n", "parameters": [{"name": "team_id", "in": "query", "description": "", "required": false, "type": "string"}, {"name": "page", "in": "query", "description": "A page number within the paginated result set.", "required": false, "type": "integer"}, {"name": "page_size", "in": "query", "description": "Number of results to return per page.", "required": false, "type": "integer"}], "responses": {"200": {"description": "", "schema": {"required": ["count", "results"], "type": "object", "properties": {"count": {"type": "integer"}, "next": {"type": "string", "format": "uri", "x-nullable": true}, "previous": {"type": "string", "format": "uri", "x-nullable": true}, "results": {"type": "array", "items": {"$ref": "#/definitions/FontVariant"}}}}}}, "tags": ["Fonts"]}, "parameters": []}, "/fonts/variants/{id}/": {"get": {"operationId": "fonts_variants_read", "summary": "Font variant detail", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/FontVariant"}}}, "tags": ["Fonts"]}, "put": {"operationId": "fonts_variants_update", "summary": "Update font variant", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/FontVariant"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/FontVariant"}}}, "tags": ["Fonts"]}, "patch": {"operationId": "fonts_variants_partial_update", "summary": "Update font variant", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/FontVariant"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/FontVariant"}}}, "tags": ["Fonts"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this font variant.", "required": true, "type": "integer"}]}, "/images/": {"get": {"operationId": "images_list", "summary": "List of uploaded files", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/UserUploadedImage"}}}}, "tags": ["Figma"]}, "post": {"operationId": "images_create", "summary": "Upload file", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/UserUploadedImage"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/UserUploadedImage"}}}, "tags": ["Figma"]}, "parameters": []}, "/images/{id}/": {"get": {"operationId": "images_read", "summary": "Uploaded file", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/UserUploadedImage"}}}, "tags": ["Figma"]}, "put": {"operationId": "images_update", "summary": "Update uploaded File", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/UserUploadedImage"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/UserUploadedImage"}}}, "tags": ["Figma"]}, "patch": {"operationId": "images_partial_update", "summary": "Update uploaded File", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/UserUploadedImage"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/UserUploadedImage"}}}, "tags": ["Figma"]}, "delete": {"operationId": "images_delete", "summary": "Delete uploaded File", "description": "", "parameters": [], "responses": {"204": {"description": ""}}, "tags": ["Figma"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this user uploaded image.", "required": true, "type": "integer"}]}, "/login/": {"get": {"operationId": "login_list", "summary": "Login to API using Figma OAuth", "description": "\n### Token creation\nUser Authentication and creation is done through Figma's OAuth2. When you request this endpoint you will first\nreceive a URL to allow the user to give access to Cannoli with a pre-configured redirect uri. You can override\nthis through the `redirect_uri` GET parameter:\n\n    /api/v1/login/?redirect_uri=<YOUR_REDIRECT_URI>\n\nIn order to complete the authentication process Figma returns a code which is used by the backend to complete\nthe handshake process. If you want to login through a separate frontend you need to override the `redirect_uri`, \nreceive the `code` and send it back to this endpoint along with the `redirect_uri` you configured:\n\n    /api/v1/login/?redirect_uri=<YOUR_REDIRECT_URI>&code=<CODE_FROM_FIGMA> \n\nOnce you complete the authentication process you'll receive a jwt token to authenticate with the API. The \n`access_token` has a lifetime of 30 minutes and the `refresh_token` has a lifetime of 7 days.\n\n### Authenticating with the API once you have your token\nOnce you complete the authentication procces you must send your `access_token` as a Bearer header:\n\n    curl -H \"Content-Type: application/json\" -H \"Authorization: Bearer <YOUR_ACCESS_TOKEN>\" \\\n    https://api-dev.cannoli.app/api/v1/figma/files/ \n", "parameters": [{"name": "code", "in": "query", "description": "Figma's response code which is used to verify the user's authorization and create the API credentials", "type": "string"}, {"name": "redirect_uri", "in": "query", "description": "Allows you to override redirect_uri for multi-environment support", "type": "string"}], "responses": {"200": {"description": "User login response", "schema": {"$ref": "#/definitions/FigmaLogin"}}}, "tags": ["Authentication"]}, "parameters": []}, "/o/authorize/": {"post": {"operationId": "o_authorize_create", "summary": "Authorize an OAuth client", "description": "\nAuthorize the user to access the Cannoli API.\n\nYou must first make a request to the create_key_pair endpoint in order to obtain the read and write keys.\n\nThe write key must be sent in the `state` parameter to assign the created token to the previously requested\nkey pair.\n", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/FigmaAllow"}}], "responses": {"200": {"description": "User login response", "schema": {"$ref": "#/definitions/TokenResponse"}}}, "tags": ["OAuth"]}, "parameters": []}, "/o/create_key_pair/": {"get": {"operationId": "o_create_key_pair_list", "summary": "Create Key Pair", "description": "\nCreate a key pair to asynchronously read created tokens\n", "parameters": [], "responses": {"200": {"description": "Create key pair response", "schema": {"$ref": "#/definitions/IdentificationKeyPair"}}}, "tags": ["OAuth"]}, "parameters": []}, "/o/read_token/": {"get": {"operationId": "o_read_token_list", "summary": "Read Token", "description": "\nYou must send the `read_token` obtained from the Create Key Pair endpoint to obtain the user's OAuth tokens.\n\nThe endpoint will return a 404 error until authentication is completed. Once the user completes their\nauthentication flow the endpoint will return the access and refresh tokens. Afterwards the key pair will\nbecome locked and any further requests using a spent `read_key` will return a 404 error.`\n", "parameters": [{"name": "read_key", "in": "query", "description": "Read key obtained from the Create Key Pair endpoint", "type": "string"}], "responses": {"200": {"description": "Get OAuth token", "schema": {"$ref": "#/definitions/TokenResponse"}}}, "tags": ["OAuth"]}, "parameters": []}, "/o/refresh/": {"post": {"operationId": "o_refresh_create", "summary": "Refresh an OAuth token", "description": "\nOAuth tokens expire after x days so you'll need to renew your your tokens by using the `refresh_token`.\n", "parameters": [{"name": "grant_type", "in": "formData", "required": true, "type": "string", "enum": ["refresh_token"]}, {"name": "refresh_token", "in": "formData", "required": true, "type": "string", "minLength": 1}, {"name": "client_id", "in": "formData", "required": true, "type": "string", "minLength": 1}, {"name": "client_secret", "in": "formData", "required": true, "type": "string", "minLength": 1}], "responses": {"200": {"description": "User login response", "schema": {"$ref": "#/definitions/TokenResponse"}}}, "consumes": ["application/x-www-form-urlencoded"], "tags": ["OAuth"]}, "parameters": []}, "/public/files/{id}/": {"get": {"operationId": "public_files_read", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/FileDetailPublic"}}}, "tags": ["public"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this file.", "required": true, "type": "integer"}]}, "/refresh/": {"post": {"operationId": "refresh_create", "summary": "Refresh JWT token", "description": "Takes a refresh type JSON web token and returns an access type JSON web token if the refresh token is valid.", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/CustomTokenRefresh"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/CustomTokenRefresh"}}}, "tags": ["Authentication"]}, "parameters": []}, "/services/new_order/": {"post": {"operationId": "services_new_order_create", "description": "Creates a new order, verifies if the email corresponds to a user,\nif so, it adds the user to the order. If not, it creates a new user\nwith the email provided and adds it to the order.", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Order"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/Order"}}}, "tags": ["services"]}, "parameters": []}, "/subscriptions/create_team_subscription/": {"post": {"operationId": "subscriptions_create_team_subscription_create", "summary": "New Team Subscription", "description": "\nThis endpoint creates a new subscription for the specified team.\n**It requires the user to be logged in**, the team ID and the\nnumber of seats, and it returns the Stripe checkout URL.\n", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/TeamSubscription"}}], "responses": {"201": {"description": "", "examples": {"application/json": {"checkout": "URL to Stripe Checkout"}}}}, "tags": ["Subscriptions"]}, "parameters": []}, "/subscriptions/create_user_free_subscription/": {"post": {"operationId": "subscriptions_create_user_free_subscription_create", "summary": "New User Free Subscription", "description": "\nThis endpoint creates a new free subscription for the user, and the\n**user needs to be logged in**.\n", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/UserSubscription"}}], "responses": {"201": {"description": "", "examples": {"application/json": {}}}}, "tags": ["Subscriptions"]}, "parameters": []}, "/subscriptions/create_user_subscription/": {"post": {"operationId": "subscriptions_create_user_subscription_create", "summary": "New User Subscription", "description": "\nThis endpoint creates a new pro subscription for the user, and the\n**user needs to be logged in**.\nIt returns the Stripe checkout URL.\n", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/UserSubscription"}}], "responses": {"201": {"description": "", "examples": {"application/json": {"checkout": "URL to Stripe Checkout"}}}}, "tags": ["Subscriptions"]}, "parameters": []}, "/subscriptions/create_user_trial_subscription/": {"post": {"operationId": "subscriptions_create_user_trial_subscription_create", "summary": "New User Trial Subscription", "description": "\nThis endpoint creates a new free subscription for the user with a \ntrial of 30 days, and the **user needs to be logged in**.\n", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/UserSubscription"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/UserSubscription"}}}, "tags": ["Subscriptions"]}, "parameters": []}, "/subscriptions/update_user_subscription/": {"post": {"operationId": "subscriptions_update_personal_subscription", "summary": "Update Personal Subscription", "description": "\nThis endpoint returns a stripe URL to add a payment method if the\nuser doesn\u2019t have one. Other way, it changes the subscription from\nFree to Pro or Free to Pro, depending on the current subscription.\n", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/UserSubscription"}}], "responses": {"201": {"description": "", "examples": {"application/json": {"checkout": "URL to Stripe Checkout"}}}}, "tags": ["Subscriptions"]}, "parameters": []}, "/subscriptions/{id}/": {"get": {"operationId": "subscriptions_read", "summary": "Retrive Subscription Info", "description": "\n\n", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/SubscriptionInfo"}}}, "tags": ["Subscriptions"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this subscription.", "required": true, "type": "integer"}]}, "/subscriptions/{id}/cancel_subscription/": {"post": {"operationId": "subscriptions_cancel_subscription_update", "summary": "Cancel Subscription", "description": "\n\n", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/InfoReadSubscription"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/InfoReadSubscription"}}}, "tags": ["Subscriptions"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this subscription.", "required": true, "type": "integer"}]}, "/subscriptions/{id}/collect_invoice/": {"post": {"operationId": "subscriptions_post", "summary": "Collect Invoice", "description": "\n\n", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/StripeInvoiceId"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/StripeInvoiceId"}}}, "tags": ["Subscriptions"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this subscription.", "required": true, "type": "integer"}]}, "/subscriptions/{id}/complete_subscription_payment/": {"get": {"operationId": "subscriptions_complete_subscription_payment_read", "summary": "Complete Subscription Payment", "description": "\n\n", "parameters": [], "responses": {"200": {"description": "", "examples": {"application/json": {"checkout": "URL to Stripe Checkout"}}}}, "tags": ["Subscriptions"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this subscription.", "required": true, "type": "integer"}]}, "/subscriptions/{id}/reactivate_subscription/": {"post": {"operationId": "subscriptions_post", "summary": "Reactivate Subscription", "description": "\n\n", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/InfoReadSubscription"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/InfoReadSubscription"}}}, "tags": ["Subscriptions"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this subscription.", "required": true, "type": "integer"}]}, "/subscriptions/{id}/reactivate_team_subscription/": {"post": {"operationId": "subscriptions_reactivate_team_subscription_update", "summary": "Reactivate Team Subscription", "description": "\n\n", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/TeamSubscriptionUpdate"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/TeamSubscriptionUpdate"}}}, "tags": ["Subscriptions"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this subscription.", "required": true, "type": "integer"}]}, "/subscriptions/{id}/update_default_payment/": {"post": {"operationId": "subscriptions_update_default_payment_method", "summary": "Update Default Payment Method", "description": "\n\n", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/UserSubscription"}}], "responses": {"201": {"description": "", "examples": {"application/json": {"checkout": "URL to Stripe Checkout"}}}}, "tags": ["Subscriptions"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this subscription.", "required": true, "type": "integer"}]}, "/subscriptions/{id}/update_team_subscription/": {"post": {"operationId": "subscriptions_update_team_subscription_update", "summary": "Update Team Subscription", "description": "\n\n", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/TeamSubscriptionUpdate"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/TeamSubscriptionUpdate"}}}, "tags": ["Subscriptions"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this subscription.", "required": true, "type": "integer"}]}, "/teams/": {"get": {"operationId": "teams_list", "summary": "List of Teams", "description": "\n", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/Team"}}}}, "consumes": ["multipart/form-data"], "tags": ["Teams"]}, "post": {"operationId": "teams_create", "summary": "Create a new Team", "description": "", "parameters": [{"name": "name", "in": "formData", "required": true, "type": "string", "maxLength": 128, "minLength": 1}, {"name": "logo", "in": "formData", "required": false, "type": "file", "x-nullable": true}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/Team"}}}, "consumes": ["multipart/form-data"], "tags": ["Teams"]}, "parameters": []}, "/teams/{id}/": {"get": {"operationId": "teams_read", "summary": "Team Detail", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/Team"}}}, "consumes": ["multipart/form-data"], "tags": ["Teams"]}, "put": {"operationId": "teams_update", "summary": "Update a Team", "description": "", "parameters": [{"name": "name", "in": "formData", "required": true, "type": "string", "maxLength": 128, "minLength": 1}, {"name": "logo", "in": "formData", "required": false, "type": "file", "x-nullable": true}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/Team"}}}, "consumes": ["multipart/form-data"], "tags": ["Teams"]}, "patch": {"operationId": "teams_partial_update", "summary": "Update a Team", "description": "", "parameters": [{"name": "name", "in": "formData", "required": true, "type": "string", "maxLength": 128, "minLength": 1}, {"name": "logo", "in": "formData", "required": false, "type": "file", "x-nullable": true}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/Team"}}}, "consumes": ["multipart/form-data"], "tags": ["Teams"]}, "delete": {"operationId": "teams_delete", "summary": "Delete a Team", "description": "", "parameters": [], "responses": {"204": {"description": ""}}, "consumes": ["multipart/form-data"], "tags": ["Teams"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this team.", "required": true, "type": "integer"}]}, "/teams/{team_id}/components/": {"get": {"operationId": "teams_components_list", "summary": "Detail of Team Component", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/TeamComponent"}}}}, "tags": ["Team Components"]}, "post": {"operationId": "teams_components_create", "summary": "Create Team Component", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/TeamComponent"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/TeamComponent"}}}, "tags": ["Team Components"]}, "parameters": [{"name": "team_id", "in": "path", "required": true, "type": "string"}]}, "/teams/{team_id}/components/{id}/": {"get": {"operationId": "teams_components_read", "summary": "Detail of Team Component", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/TeamComponent"}}}, "tags": ["Team Components"]}, "put": {"operationId": "teams_components_update", "summary": "Update Team Component", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/TeamComponent"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/TeamComponent"}}}, "tags": ["Team Components"]}, "patch": {"operationId": "teams_components_partial_update", "summary": "Update Team Component", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/TeamComponent"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/TeamComponent"}}}, "tags": ["Team Components"]}, "delete": {"operationId": "teams_components_delete", "summary": "Delete Team Component", "description": "", "parameters": [], "responses": {"204": {"description": ""}}, "tags": ["Team Components"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this component.", "required": true, "type": "integer"}, {"name": "team_id", "in": "path", "required": true, "type": "string"}]}, "/teams/{team_id}/components_paginated/": {"get": {"operationId": "teams_components_paginated_list", "summary": "List of Team Components Paginated", "description": "\n### Ordering\nThe file list is order by `created_at` descending. You can override the ordering through the\n`ordering` query parameter with the following fields:\n* `created_at`\n* `updated_at`\n* `name`\n\nFields are ordered as ascending by default and you can change it to descending by adding `-` before\nthe field, eg `-created_at`\n\nHere are a few examples to update the file list ordering.\n\nOrder by creation date, ascending\n\n    /api/v1/teams/{team_id}/components_paginated/?ordering=created_at\n\nOrder by creation date, descending\n\n    /api/v1/teams/{team_id}/components_paginated/?ordering=-created_at\n\nYou can also order by multiple fields separating by comma\n\n    /api/v1/teams/{team_id}/components_paginated/?ordering=-created_at,name\n\n### Pagination\nThis endpoint is paged to 30 results per page. You can override the page size with  the `page_size`\nquery parameter. You can also override the page number with the `page` query parameter.\n\n    /api/v1/teams/{team_id}/components_paginated/?page_size=20&page=2\n\n", "parameters": [{"name": "ordering", "in": "query", "description": "Which field to use when ordering the results.", "required": false, "type": "string"}, {"name": "page", "in": "query", "description": "A page number within the paginated result set.", "required": false, "type": "integer"}, {"name": "page_size", "in": "query", "description": "Number of results to return per page.", "required": false, "type": "integer"}], "responses": {"200": {"description": "", "schema": {"required": ["count", "results"], "type": "object", "properties": {"count": {"type": "integer"}, "next": {"type": "string", "format": "uri", "x-nullable": true}, "previous": {"type": "string", "format": "uri", "x-nullable": true}, "results": {"type": "array", "items": {"$ref": "#/definitions/TeamComponent"}}}}}}, "tags": ["Team Components"]}, "parameters": [{"name": "team_id", "in": "path", "required": true, "type": "string"}]}, "/teams/{team_id}/font_stack/": {"get": {"operationId": "teams_font_stack_list", "summary": "Detail Team Font Stack", "description": "", "parameters": [{"name": "page", "in": "query", "description": "A page number within the paginated result set.", "required": false, "type": "integer"}, {"name": "page_size", "in": "query", "description": "Number of results to return per page.", "required": false, "type": "integer"}], "responses": {"200": {"description": "", "schema": {"required": ["count", "results"], "type": "object", "properties": {"count": {"type": "integer"}, "next": {"type": "string", "format": "uri", "x-nullable": true}, "previous": {"type": "string", "format": "uri", "x-nullable": true}, "results": {"type": "array", "items": {"$ref": "#/definitions/TeamFontStack"}}}}}}, "tags": ["Fonts"]}, "post": {"operationId": "teams_font_stack_create", "summary": "Create Team Font Stack", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/TeamFontStack"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/TeamFontStack"}}}, "tags": ["Fonts"]}, "parameters": [{"name": "team_id", "in": "path", "required": true, "type": "string"}]}, "/teams/{team_id}/font_stack/{id}/": {"get": {"operationId": "teams_font_stack_read", "summary": "Detail Team Font Stack", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/TeamFontStack"}}}, "tags": ["Fonts"]}, "put": {"operationId": "teams_font_stack_update", "summary": "Update Team Font Stack", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/TeamFontStack"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/TeamFontStack"}}}, "tags": ["Fonts"]}, "patch": {"operationId": "teams_font_stack_partial_update", "summary": "Update Team Font Stack", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/TeamFontStack"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/TeamFontStack"}}}, "tags": ["Fonts"]}, "delete": {"operationId": "teams_font_stack_delete", "summary": "Delete Team Font Stack", "description": "", "parameters": [], "responses": {"204": {"description": ""}}, "tags": ["Fonts"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this font stack.", "required": true, "type": "integer"}, {"name": "team_id", "in": "path", "required": true, "type": "string"}]}, "/teams/{team_id}/members/": {"get": {"operationId": "teams_members_list", "summary": "List of members for a given team", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/TeamMemberRead"}}}}, "tags": ["Teams"]}, "post": {"operationId": "teams_members_create", "summary": "Team member creation", "description": "\n### Permissions\nHere you can create new members for a given team.\n\nThe optional permission field sets the user's access to a team's files:\n* R: Read\n* W: Write\n* A: Admin\n\nIf no permission is assiged on creation the default value is 'R'.\n\n### Multiple TeamMember creation\nYou can optionally send the TeamMember creation JSON as a list to create multiple members at once:\n\n    [{\"email\": \"user@example.com\"}, {\"email\": \"user2@example.com\"}]\n\n", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/AddTeamMember"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/AddTeamMember"}}}, "tags": ["Teams"]}, "parameters": [{"name": "team_id", "in": "path", "required": true, "type": "string"}]}, "/teams/{team_id}/members/{id}/": {"get": {"operationId": "teams_members_read", "summary": "Team member detail", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/TeamMemberRead"}}}, "tags": ["Teams"]}, "put": {"operationId": "teams_members_update", "summary": "Update team member", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/TeamMemberUpdate"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/TeamMemberUpdate"}}}, "tags": ["Teams"]}, "patch": {"operationId": "teams_members_partial_update", "summary": "Update team member", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/TeamMemberUpdate"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/TeamMemberUpdate"}}}, "tags": ["Teams"]}, "delete": {"operationId": "teams_members_delete", "summary": "Delete team member", "description": "", "parameters": [], "responses": {"204": {"description": ""}}, "tags": ["Teams"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this team member.", "required": true, "type": "integer"}, {"name": "team_id", "in": "path", "required": true, "type": "string"}]}, "/teams/{team_id}/projects/": {"get": {"operationId": "teams_projects_list", "summary": "List of project for a given team", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/TeamProject"}}}}, "tags": ["Teams"]}, "post": {"operationId": "teams_projects_create", "summary": "Team project creation", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/TeamProject"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/TeamProject"}}}, "tags": ["Teams"]}, "parameters": [{"name": "team_id", "in": "path", "required": true, "type": "string"}]}, "/teams/{team_id}/projects/{id}/": {"get": {"operationId": "teams_projects_read", "summary": "Team project detail", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/TeamProject"}}}, "tags": ["Teams"]}, "put": {"operationId": "teams_projects_update", "summary": "Update team project", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/TeamProjectEdit"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/TeamProjectEdit"}}}, "tags": ["Teams"]}, "patch": {"operationId": "teams_projects_partial_update", "summary": "Update team project", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/TeamProjectEdit"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/TeamProjectEdit"}}}, "tags": ["Teams"]}, "delete": {"operationId": "teams_projects_delete", "summary": "Delete team project", "description": "", "parameters": [], "responses": {"204": {"description": ""}}, "tags": ["Teams"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this team project.", "required": true, "type": "integer"}, {"name": "team_id", "in": "path", "required": true, "type": "string"}]}, "/teams/{team_id}/projects/{project_id}/templates/": {"get": {"operationId": "teams_projects_templates_list", "summary": "Detail of Template", "description": "", "parameters": [{"name": "ordering", "in": "query", "description": "Which field to use when ordering the results.", "required": false, "type": "string"}, {"name": "page", "in": "query", "description": "A page number within the paginated result set.", "required": false, "type": "integer"}, {"name": "page_size", "in": "query", "description": "Number of results to return per page.", "required": false, "type": "integer"}], "responses": {"200": {"description": "", "schema": {"required": ["count", "results"], "type": "object", "properties": {"count": {"type": "integer"}, "next": {"type": "string", "format": "uri", "x-nullable": true}, "previous": {"type": "string", "format": "uri", "x-nullable": true}, "results": {"type": "array", "items": {"$ref": "#/definitions/TeamTemplate"}}}}}}, "tags": ["Templates"]}, "post": {"operationId": "teams_projects_templates_create", "summary": "Create Template", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/TeamTemplate"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/TeamTemplate"}}}, "tags": ["Templates"]}, "parameters": [{"name": "project_id", "in": "path", "required": true, "type": "string"}, {"name": "team_id", "in": "path", "required": true, "type": "string"}]}, "/teams/{team_id}/projects/{project_id}/templates/{id}/": {"get": {"operationId": "teams_projects_templates_read", "summary": "Detail of Template", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/TeamTemplate"}}}, "tags": ["Templates"]}, "put": {"operationId": "teams_projects_templates_update", "summary": "Update Template", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/TeamTemplate"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/TeamTemplate"}}}, "tags": ["Templates"]}, "patch": {"operationId": "teams_projects_templates_partial_update", "summary": "Update Template", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/TeamTemplate"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/TeamTemplate"}}}, "tags": ["Templates"]}, "delete": {"operationId": "teams_projects_templates_delete", "summary": "Delete Template", "description": "", "parameters": [], "responses": {"204": {"description": ""}}, "tags": ["Templates"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this template.", "required": true, "type": "integer"}, {"name": "project_id", "in": "path", "required": true, "type": "string"}, {"name": "team_id", "in": "path", "required": true, "type": "string"}]}, "/teams/{team_id}/projects/{project_id}/templates/{template_id}/component_templates/": {"get": {"operationId": "teams_projects_templates_component_templates_list", "summary": "Detail of Template Component", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/TeamComponentTemplateRead"}}}}, "tags": ["Components for Templates"]}, "post": {"operationId": "teams_projects_templates_component_templates_create", "summary": "Create Template Component", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/TeamComponentTemplate"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/TeamComponentTemplate"}}}, "tags": ["Components for Templates"]}, "parameters": [{"name": "project_id", "in": "path", "required": true, "type": "string"}, {"name": "team_id", "in": "path", "required": true, "type": "string"}, {"name": "template_id", "in": "path", "required": true, "type": "string"}]}, "/teams/{team_id}/projects/{project_id}/templates/{template_id}/component_templates/{id}/": {"get": {"operationId": "teams_projects_templates_component_templates_read", "summary": "Detail of Template Component", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/TeamComponentTemplateRead"}}}, "tags": ["Components for Templates"]}, "put": {"operationId": "teams_projects_templates_component_templates_update", "summary": "Update Template Component", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/TeamComponentTemplate"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/TeamComponentTemplate"}}}, "tags": ["Components for Templates"]}, "patch": {"operationId": "teams_projects_templates_component_templates_partial_update", "summary": "Update Template Component", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/TeamComponentTemplate"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/TeamComponentTemplate"}}}, "tags": ["Components for Templates"]}, "delete": {"operationId": "teams_projects_templates_component_templates_delete", "summary": "Delete Template Component", "description": "", "parameters": [], "responses": {"204": {"description": ""}}, "tags": ["Components for Templates"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this component template.", "required": true, "type": "integer"}, {"name": "project_id", "in": "path", "required": true, "type": "string"}, {"name": "team_id", "in": "path", "required": true, "type": "string"}, {"name": "template_id", "in": "path", "required": true, "type": "string"}]}, "/teams/{team_id}/projects/{project_id}/templates/{template_id}/create_file/": {"post": {"operationId": "teams_projects_templates_create_file_create", "description": "", "parameters": [], "responses": {"201": {"description": ""}}, "tags": ["teams"]}, "parameters": [{"name": "project_id", "in": "path", "required": true, "type": "string"}, {"name": "team_id", "in": "path", "required": true, "type": "string"}, {"name": "template_id", "in": "path", "required": true, "type": "string"}]}, "/templates/": {"get": {"operationId": "templates_list", "summary": "List of Templates", "description": "\n", "parameters": [{"name": "ordering", "in": "query", "description": "Which field to use when ordering the results.", "required": false, "type": "string"}, {"name": "page", "in": "query", "description": "A page number within the paginated result set.", "required": false, "type": "integer"}, {"name": "page_size", "in": "query", "description": "Number of results to return per page.", "required": false, "type": "integer"}], "responses": {"200": {"description": "", "schema": {"required": ["count", "results"], "type": "object", "properties": {"count": {"type": "integer"}, "next": {"type": "string", "format": "uri", "x-nullable": true}, "previous": {"type": "string", "format": "uri", "x-nullable": true}, "results": {"type": "array", "items": {"$ref": "#/definitions/Template"}}}}}}, "tags": ["Templates"]}, "post": {"operationId": "templates_create", "summary": "Create Template", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Template"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/Template"}}}, "tags": ["Templates"]}, "parameters": []}, "/templates/{id}/": {"get": {"operationId": "templates_read", "summary": "Detail of Template", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/Template"}}}, "tags": ["Templates"]}, "put": {"operationId": "templates_update", "summary": "Update Template", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Template"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/Template"}}}, "tags": ["Templates"]}, "patch": {"operationId": "templates_partial_update", "summary": "Update Template", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Template"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/Template"}}}, "tags": ["Templates"]}, "delete": {"operationId": "templates_delete", "summary": "Delete Template", "description": "", "parameters": [], "responses": {"204": {"description": ""}}, "tags": ["Templates"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this template.", "required": true, "type": "integer"}]}, "/templates/{template_id}/component_templates/": {"get": {"operationId": "templates_component_templates_list", "summary": "Detail of Template Component", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/ComponentTemplateRead"}}}}, "tags": ["Components for Templates"]}, "post": {"operationId": "templates_component_templates_create", "summary": "Create Template Component", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/ComponentTemplate"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/ComponentTemplate"}}}, "tags": ["Components for Templates"]}, "parameters": [{"name": "template_id", "in": "path", "required": true, "type": "string"}]}, "/templates/{template_id}/component_templates/{id}/": {"get": {"operationId": "templates_component_templates_read", "summary": "Detail of Template Component", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/ComponentTemplateRead"}}}, "tags": ["Components for Templates"]}, "put": {"operationId": "templates_component_templates_update", "summary": "Update Template Component", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/ComponentTemplate"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/ComponentTemplate"}}}, "tags": ["Components for Templates"]}, "patch": {"operationId": "templates_component_templates_partial_update", "summary": "Update Template Component", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/ComponentTemplate"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/ComponentTemplate"}}}, "tags": ["Components for Templates"]}, "delete": {"operationId": "templates_component_templates_delete", "summary": "Delete Template Component", "description": "", "parameters": [], "responses": {"204": {"description": ""}}, "tags": ["Components for Templates"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this component template.", "required": true, "type": "integer"}, {"name": "template_id", "in": "path", "required": true, "type": "string"}]}, "/templates/{template_id}/create_file/": {"post": {"operationId": "templates_create_file_create", "description": "", "parameters": [], "responses": {"201": {"description": ""}}, "tags": ["templates"]}, "parameters": [{"name": "template_id", "in": "path", "required": true, "type": "string"}]}, "/timer_designs/": {"get": {"operationId": "timer_designs_list", "summary": "List of Timer designs", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/CountdownTimerDesign"}}}}, "tags": ["Timer"]}, "post": {"operationId": "timer_designs_create", "summary": "Create Timer design", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/CountdownTimerDesign"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/CountdownTimerDesign"}}}, "tags": ["Timer"]}, "parameters": []}, "/timer_designs/{id}/": {"get": {"operationId": "timer_designs_read", "summary": "Timer design", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/CountdownTimerDesign"}}}, "tags": ["Timer"]}, "put": {"operationId": "timer_designs_update", "summary": "Update Timer design", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/CountdownTimerDesign"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/CountdownTimerDesign"}}}, "tags": ["Timer"]}, "patch": {"operationId": "timer_designs_partial_update", "summary": "Update Timer design", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/CountdownTimerDesign"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/CountdownTimerDesign"}}}, "tags": ["Timer"]}, "delete": {"operationId": "timer_designs_delete", "summary": "Delete Timer design", "description": "", "parameters": [], "responses": {"204": {"description": ""}}, "tags": ["Timer"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this countdown timer design.", "required": true, "type": "integer"}]}, "/timers/": {"get": {"operationId": "timers_list", "summary": "List of Timers", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/CountdownTimerV2"}}}}, "tags": ["Timer"]}, "post": {"operationId": "timers_create", "summary": "Create Timer", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/CountdownTimerV2"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/CountdownTimerV2"}}}, "tags": ["Timer"]}, "parameters": []}, "/timers/{id}/": {"get": {"operationId": "timers_read", "summary": "Timer", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/CountdownTimerV2"}}}, "tags": ["Timer"]}, "put": {"operationId": "timers_update", "summary": "Update Timer", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/CountdownTimerV2"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/CountdownTimerV2"}}}, "tags": ["Timer"]}, "patch": {"operationId": "timers_partial_update", "summary": "Update Timer", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/CountdownTimerV2"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/CountdownTimerV2"}}}, "tags": ["Timer"]}, "delete": {"operationId": "timers_delete", "summary": "Delete Timer", "description": "", "parameters": [], "responses": {"204": {"description": ""}}, "tags": ["Timer"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this countdown timer v2.", "required": true, "type": "integer"}]}, "/user/": {"get": {"operationId": "user_read", "summary": "Get your user's information", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/User"}}}, "tags": ["Users"]}, "put": {"operationId": "user_update", "summary": "Update your user's information", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/User"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/User"}}}, "tags": ["Users"]}, "patch": {"operationId": "user_partial_update", "summary": "Update your user's information", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/User"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/User"}}}, "tags": ["Users"]}, "parameters": []}, "/user/components/": {"get": {"operationId": "user_components_list", "summary": "List of Components", "description": "\n", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/Component"}}}}, "tags": ["Components"]}, "post": {"operationId": "user_components_create", "summary": "Create Team Component", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Component"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/Component"}}}, "tags": ["Components"]}, "parameters": []}, "/user/components/from_figma/": {"post": {"operationId": "user_components_from_figma_create", "summary": "Create a new Component from File", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/FileCreateSerializerV2"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/FileCreateSerializerV2"}}}, "tags": ["Components"]}, "parameters": []}, "/user/components/from_figma/{id}/": {"get": {"operationId": "user_components_from_figma_read", "summary": "Get detail for a Cannoli to Component file", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/FileToComponentDetail"}}}, "tags": ["Components"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this file.", "required": true, "type": "integer"}]}, "/user/components/{id}/": {"get": {"operationId": "user_components_read", "summary": "Detail of Component", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/Component"}}}, "tags": ["Components"]}, "put": {"operationId": "user_components_update", "summary": "Update Component", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Component"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/Component"}}}, "tags": ["Components"]}, "patch": {"operationId": "user_components_partial_update", "summary": "Update Component", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Component"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/Component"}}}, "tags": ["Components"]}, "delete": {"operationId": "user_components_delete", "summary": "Delete Component", "description": "", "parameters": [], "responses": {"204": {"description": ""}}, "tags": ["Components"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this component.", "required": true, "type": "integer"}]}, "/user/components_paginated/": {"get": {"operationId": "user_components_paginated_list", "summary": "List of Components Paginated", "description": "\n### Ordering\nThe file list is order by `created_at` descending. You can override the ordering through the \n`ordering` query parameter with the following fields:\n* `created_at`\n* `updated_at` \n* `name`  \n\nFields are ordered as ascending by default and you can change it to descending by adding `-` before\nthe field, eg `-created_at`\n\nHere are a few examples to update the file list ordering.\n\nOrder by creation date, ascending\n\n    /api/v1/user/components_paginated/?ordering=created_at\n\nOrder by creation date, descending\n\n    /api/v1/user/components_paginated/?ordering=-created_at\n\nYou can also order by multiple fields separating by comma\n\n    /api/v1/user/components_paginated/?ordering=-created_at,name\n\n### Pagination\nThis endpoint is paged to 30 results per page. You can override the page size with  the `page_size`\nquery parameter. You can also override the page number with the `page` query parameter.\n\n    /api/v1/user/components_paginated/?page_size=20&page=2\n\n", "parameters": [{"name": "ordering", "in": "query", "description": "Which field to use when ordering the results.", "required": false, "type": "string"}, {"name": "page", "in": "query", "description": "A page number within the paginated result set.", "required": false, "type": "integer"}, {"name": "page_size", "in": "query", "description": "Number of results to return per page.", "required": false, "type": "integer"}], "responses": {"200": {"description": "", "schema": {"required": ["count", "results"], "type": "object", "properties": {"count": {"type": "integer"}, "next": {"type": "string", "format": "uri", "x-nullable": true}, "previous": {"type": "string", "format": "uri", "x-nullable": true}, "results": {"type": "array", "items": {"$ref": "#/definitions/Component"}}}}}}, "tags": ["Components"]}, "parameters": []}, "/user/font_stack/": {"get": {"operationId": "user_font_stack_list", "summary": "List User Font Stack", "description": "", "parameters": [{"name": "page", "in": "query", "description": "A page number within the paginated result set.", "required": false, "type": "integer"}, {"name": "page_size", "in": "query", "description": "Number of results to return per page.", "required": false, "type": "integer"}], "responses": {"200": {"description": "", "schema": {"required": ["count", "results"], "type": "object", "properties": {"count": {"type": "integer"}, "next": {"type": "string", "format": "uri", "x-nullable": true}, "previous": {"type": "string", "format": "uri", "x-nullable": true}, "results": {"type": "array", "items": {"$ref": "#/definitions/UserFontStack"}}}}}}, "tags": ["Fonts"]}, "post": {"operationId": "user_font_stack_create", "summary": "Create User Font Stack", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/UserFontStack"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/UserFontStack"}}}, "tags": ["Fonts"]}, "parameters": []}, "/user/font_stack/{id}/": {"get": {"operationId": "user_font_stack_read", "summary": "Detail User Font Stack", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/UserFontStack"}}}, "tags": ["Fonts"]}, "put": {"operationId": "user_font_stack_update", "summary": "Update User Font Stack", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/UserFontStack"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/UserFontStack"}}}, "tags": ["Fonts"]}, "patch": {"operationId": "user_font_stack_partial_update", "summary": "Update User Font Stack", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/UserFontStack"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/UserFontStack"}}}, "tags": ["Fonts"]}, "delete": {"operationId": "user_font_stack_delete", "summary": "Delete User Font Stack", "description": "", "parameters": [], "responses": {"204": {"description": ""}}, "tags": ["Fonts"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this font stack.", "required": true, "type": "integer"}]}, "/user/login/": {"post": {"operationId": "user_login_create", "summary": "Username/Password Login", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/LoginUser"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/LoginResponse"}}}, "tags": ["Users"]}, "parameters": []}}, "definitions": {"EmailServiceProvider": {"required": ["key", "email_service_provider"], "type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "key": {"title": "Key", "type": "string", "maxLength": 128, "minLength": 1}, "email_service_provider": {"title": "Email service provider", "type": "string", "enum": ["KL", "MC"]}}}, "EmailServiceProviderDetail": {"required": ["key"], "type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "key": {"title": "Key", "type": "string", "maxLength": 128, "minLength": 1}, "email_service_provider": {"title": "Email service provider", "type": "string", "enum": ["KL", "MC"], "readOnly": true}, "owner": {"title": "Owner", "type": "integer", "readOnly": true}}}, "FileVersionList": {"required": ["mjml", "file"], "type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "deleted": {"title": "Deleted", "type": "string", "format": "date-time", "readOnly": true}, "deleted_by_cascade": {"title": "Deleted by cascade", "type": "boolean", "readOnly": true}, "created_at": {"title": "Created at", "type": "string", "format": "date-time", "readOnly": true}, "updated_at": {"title": "Updated at", "type": "string", "format": "date-time", "readOnly": true}, "mjml": {"title": "Mjml", "type": "object"}, "file": {"title": "File", "type": "integer"}}}, "Project": {"required": ["name"], "type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "name": {"title": "Name", "type": "string", "maxLength": 128, "minLength": 1}, "team_id": {"title": "Team id", "type": "string", "readOnly": true}, "team_name": {"title": "Team name", "type": "string", "readOnly": true}, "created_at": {"title": "Created at", "type": "string", "format": "date-time", "readOnly": true}, "last_updated_at": {"title": "Last updated at", "type": "string", "format": "date-time", "readOnly": true}}}, "Team": {"required": ["name"], "type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "name": {"title": "Name", "type": "string", "maxLength": 128, "minLength": 1}, "organization": {"title": "Organization", "type": "string", "readOnly": true}, "owner": {"title": "Owner", "type": "string", "readOnly": true}, "permission": {"title": "Permission", "type": "string", "readOnly": true}, "logo": {"title": "Logo", "type": "string", "readOnly": true, "x-nullable": true, "format": "uri"}, "can_add_more_members": {"title": "Can add more members", "type": "string", "readOnly": true}, "projects": {"type": "array", "items": {"$ref": "#/definitions/Project"}, "readOnly": true}}}, "FileList": {"required": ["node", "url", "team", "project"], "type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "name": {"title": "Name", "type": "string", "maxLength": 64, "x-nullable": true}, "created_by": {"title": "Created by", "type": "string", "readOnly": true}, "figma_file_id": {"title": "Figma file id", "type": "string", "readOnly": true, "minLength": 1}, "node": {"title": "Node", "type": "string", "maxLength": 128, "minLength": 1}, "url": {"title": "Url", "type": "string", "format": "uri", "maxLength": 200, "minLength": 1}, "team": {"$ref": "#/definitions/Team"}, "created_at": {"title": "Created at", "type": "string", "format": "date-time", "readOnly": true}, "updated_at": {"title": "Updated at", "type": "string", "format": "date-time", "readOnly": true}, "public": {"title": "Public", "type": "boolean"}, "preview": {"title": "Preview", "type": "string", "readOnly": true, "x-nullable": true, "format": "uri"}, "project": {"$ref": "#/definitions/Project"}, "plugin_metadata": {"title": "Plugin metadata", "type": "object", "x-nullable": true}}}, "FileCreateSerializerV2": {"required": ["node", "url"], "type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "name": {"title": "Name", "type": "string", "maxLength": 64, "x-nullable": true}, "figma_file_id": {"title": "Figma file id", "type": "string", "readOnly": true, "minLength": 1}, "node": {"title": "Node", "type": "string", "maxLength": 128, "minLength": 1}, "url": {"title": "Url", "type": "string", "format": "uri", "maxLength": 200, "minLength": 1}, "team": {"title": "Team", "type": "integer", "x-nullable": true}, "project": {"title": "Project", "type": "integer", "x-nullable": true}, "created_at": {"title": "Created at", "type": "string", "format": "date-time", "readOnly": true}, "updated_at": {"title": "Updated at", "type": "string", "format": "date-time", "readOnly": true}, "public": {"title": "Public", "type": "boolean"}, "preview": {"title": "Preview", "type": "string", "readOnly": true, "format": "uri"}, "plugin_metadata": {"title": "Plugin metadata", "type": "object", "x-nullable": true}}}, "CreateESPTemplate": {"required": ["name"], "type": "object", "properties": {"name": {"title": "Name", "type": "string", "minLength": 1}}}, "CreateESPTemplateResponse": {"required": ["detail"], "type": "object", "properties": {"detail": {"title": "Detail", "type": "string", "enum": ["success"]}}}, "FileRegenComparison": {"type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "processing_errors": {"title": "Processing errors", "type": "string", "readOnly": true, "minLength": 1}, "successfully_processed": {"title": "Successfully processed", "type": "boolean", "readOnly": true}, "created_at": {"title": "Created at", "type": "string", "format": "date-time", "readOnly": true}, "updated_at": {"title": "Updated at", "type": "string", "format": "date-time", "readOnly": true}, "closed_at": {"title": "Closed at", "type": "string", "format": "date-time", "readOnly": true}, "file_mjml": {"title": "File mjml", "type": "string", "readOnly": true, "minLength": 1}, "figma_mjml": {"title": "Figma mjml", "type": "string", "readOnly": true, "minLength": 1}, "new_mjml": {"title": "New mjml", "type": "string", "x-nullable": true}, "file": {"title": "File", "type": "integer", "readOnly": true}}}, "FileRegenComparisonCreate": {"type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "processing_errors": {"title": "Processing errors", "type": "string", "readOnly": true, "minLength": 1}, "successfully_processed": {"title": "Successfully processed", "type": "boolean", "readOnly": true}, "created_at": {"title": "Created at", "type": "string", "format": "date-time", "readOnly": true}, "updated_at": {"title": "Updated at", "type": "string", "format": "date-time", "readOnly": true}, "closed_at": {"title": "Closed at", "type": "string", "format": "date-time", "readOnly": true}, "file_mjml": {"title": "File mjml", "type": "string", "readOnly": true, "minLength": 1}, "figma_mjml": {"title": "Figma mjml", "type": "string", "readOnly": true, "minLength": 1}, "new_mjml": {"title": "New mjml", "type": "string", "readOnly": true, "minLength": 1}}}, "FontVariant": {"type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "font_id": {"title": "Font id", "type": "string", "readOnly": true}, "variant": {"title": "Variant", "type": "string", "readOnly": true, "minLength": 1}, "url": {"title": "Url", "type": "string", "format": "uri", "maxLength": 512, "x-nullable": true}, "family": {"title": "Family", "type": "string", "readOnly": true}, "team_id": {"title": "Team id", "type": "string", "readOnly": true}, "uploaded_url": {"title": "Uploaded url", "type": "string", "readOnly": true, "x-nullable": true, "format": "uri"}}}, "FileDetail": {"required": ["project", "node", "url", "font_variants"], "type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "name": {"title": "Name", "type": "string", "maxLength": 64, "x-nullable": true}, "template": {"title": "Template", "type": "integer", "readOnly": true}, "created_by": {"title": "Created by", "type": "string", "readOnly": true}, "preview": {"title": "Preview", "type": "string", "readOnly": true, "x-nullable": true, "format": "uri"}, "figma_preview": {"title": "Figma preview", "type": "string", "readOnly": true, "x-nullable": true, "format": "uri"}, "public": {"title": "Public", "type": "boolean"}, "team": {"title": "Team", "type": "integer", "x-nullable": true}, "project": {"$ref": "#/definitions/Project"}, "figma_file_id": {"title": "Figma file id", "type": "string", "x-nullable": true}, "node": {"title": "Node", "type": "string", "maxLength": 128, "minLength": 1}, "url": {"title": "Url", "type": "string", "format": "uri", "maxLength": 200, "minLength": 1}, "fetched_all_images": {"title": "Fetched all images", "type": "string", "readOnly": true}, "images": {"title": "Images", "type": "string", "readOnly": true}, "node_images": {"title": "Node images", "type": "string", "readOnly": true}, "json_data": {"title": "Json data", "type": "string", "readOnly": true, "x-nullable": true, "format": "uri"}, "errors": {"title": "Errors", "type": "object", "x-nullable": true}, "mjml": {"title": "Mjml", "type": "object", "x-nullable": true}, "created_at": {"title": "Created at", "type": "string", "format": "date-time", "readOnly": true}, "updated_at": {"title": "Updated at", "type": "string", "format": "date-time", "readOnly": true}, "parsed_mjml": {"title": "Parsed mjml", "type": "string", "readOnly": true, "minLength": 1}, "parsed_html": {"title": "Parsed html", "type": "string", "readOnly": true, "minLength": 1}, "successfully_processed": {"title": "Successfully processed", "type": "boolean", "readOnly": true}, "plugin_metadata": {"title": "Plugin metadata", "type": "object", "x-nullable": true}, "font_variants": {"type": "array", "items": {"$ref": "#/definitions/FontVariant"}}}}, "FileUpdate": {"required": ["node"], "type": "object", "properties": {"mjml": {"title": "Mjml", "type": "object", "x-nullable": true}, "html": {"title": "Html", "type": "string", "x-nullable": true}, "errors": {"title": "Errors", "type": "object", "x-nullable": true}, "selected_frame": {"title": "Selected frame", "type": "string", "maxLength": 128, "x-nullable": true}, "node": {"title": "Node", "type": "string", "maxLength": 128, "minLength": 1}, "name": {"title": "Name", "type": "string", "maxLength": 64, "x-nullable": true}, "team": {"title": "Team", "type": "integer", "x-nullable": true}, "project": {"title": "Project", "type": "integer", "x-nullable": true}, "public": {"title": "Public", "type": "boolean"}, "plugin_metadata": {"title": "Plugin metadata", "type": "object", "x-nullable": true}}}, "FilePreviewUpdate": {"type": "object", "properties": {"preview": {"title": "Preview", "type": "string", "readOnly": true, "x-nullable": true, "format": "uri"}}}, "FileSendMail": {"type": "object", "properties": {"recipient": {"title": "Recipient", "type": "string", "format": "email", "minLength": 1}}}, "FigmaQuery": {"required": ["url"], "type": "object", "properties": {"url": {"title": "Url", "type": "string", "format": "uri", "minLength": 1}}}, "FigmaResponse": {"required": ["response"], "type": "object", "properties": {"response": {"title": "Response", "type": "object"}}}, "Font": {"required": ["family"], "type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "family": {"title": "Family", "type": "string", "maxLength": 64, "minLength": 1}, "category": {"title": "Category", "type": "string", "maxLength": 32, "x-nullable": true}, "variants": {"type": "array", "items": {"$ref": "#/definitions/FontVariant"}, "readOnly": true}}}, "UserUploadedImage": {"required": ["file"], "type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "image": {"title": "Image", "type": "string", "readOnly": true, "format": "uri"}, "created_at": {"title": "Created at", "type": "string", "format": "date-time", "readOnly": true}, "file": {"title": "File", "type": "integer"}}}, "Subscription": {"type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "seats": {"title": "Seats", "type": "integer", "maximum": 2147483647, "minimum": 2}, "tier": {"title": "Tier", "type": "string", "enum": ["F", "P", "T"]}, "status": {"title": "Status", "type": "string", "enum": ["A", "O", "P", "C"]}, "current_period_start": {"title": "Current period start", "type": "string", "format": "date-time", "x-nullable": true}, "current_period_end": {"title": "Current period end", "type": "string", "format": "date-time", "x-nullable": true}, "team": {"title": "Team", "type": "integer", "x-nullable": true}, "user": {"title": "User", "type": "integer", "x-nullable": true}}}, "User": {"required": ["teams", "team_subscriptions", "subscriptions"], "type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "username": {"title": "Username", "description": "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.", "type": "string", "readOnly": true, "minLength": 1}, "first_name": {"title": "First name", "type": "string", "maxLength": 150}, "last_name": {"title": "Last name", "type": "string", "maxLength": 150}, "email": {"title": "Email address", "type": "string", "format": "email", "maxLength": 254}, "figma_email": {"title": "Figma email", "type": "string", "format": "email", "readOnly": true, "minLength": 1}, "avatar": {"title": "Avatar", "type": "string", "readOnly": true, "x-nullable": true, "format": "uri"}, "default_font": {"title": "Default font", "type": "integer", "x-nullable": true}, "is_pro_user": {"title": "Is pro user", "type": "string", "readOnly": true}, "is_team_user": {"title": "Is team user", "type": "string", "readOnly": true}, "can_create_more_files": {"title": "Can create more files", "type": "string", "readOnly": true}, "is_vip": {"title": "Is vip", "type": "string", "readOnly": true}, "teams": {"type": "array", "items": {"$ref": "#/definitions/Team"}}, "team_subscriptions": {"type": "array", "items": {"$ref": "#/definitions/Subscription"}}, "subscriptions": {"$ref": "#/definitions/Subscription"}, "trial_end_date": {"title": "Trial end date", "type": "string", "format": "date-time", "readOnly": true}, "trial_start_date": {"title": "Trial start date", "type": "string", "format": "date-time", "readOnly": true}, "has_valid_trial": {"title": "Has valid trial", "type": "string", "readOnly": true}, "trial_days_left": {"title": "Trial days left", "type": "string", "readOnly": true}, "is_elegible_for_trial": {"title": "Is elegible for trial", "type": "string", "readOnly": true}}}, "FigmaLogin": {"required": ["user", "access_token", "refresh_token", "access_token_expires_in", "refresh_token_expires_in"], "type": "object", "properties": {"user": {"$ref": "#/definitions/User"}, "access_token": {"title": "Access token", "type": "string", "minLength": 1}, "refresh_token": {"title": "Refresh token", "type": "string", "minLength": 1}, "access_token_expires_in": {"title": "Access token expires in", "type": "number"}, "refresh_token_expires_in": {"title": "Refresh token expires in", "type": "number"}}}, "FigmaAllow": {"required": ["redirect_uri", "scope", "client_id", "state", "response_type"], "type": "object", "properties": {"allow": {"title": "Allow", "type": "boolean"}, "redirect_uri": {"title": "Redirect uri", "type": "string", "minLength": 1}, "scope": {"title": "Scope", "type": "string", "minLength": 1}, "client_id": {"title": "Client id", "type": "string", "minLength": 1}, "state": {"title": "State", "type": "string", "minLength": 1}, "response_type": {"title": "Response type", "type": "string", "minLength": 1}}}, "TokenResponse": {"required": ["access_token", "expires_in", "token_type", "scope", "refresh_token"], "type": "object", "properties": {"access_token": {"title": "Access token", "type": "string", "minLength": 1}, "expires_in": {"title": "Expires in", "type": "integer"}, "token_type": {"title": "Token type", "type": "string", "enum": ["Bearer"]}, "scope": {"title": "Scope", "type": "string", "minLength": 1}, "refresh_token": {"title": "Refresh token", "type": "string", "minLength": 1}}}, "IdentificationKeyPair": {"type": "object", "properties": {"read_key": {"title": "Read key", "type": "string", "readOnly": true, "minLength": 1}, "write_key": {"title": "Write key", "type": "string", "readOnly": true, "minLength": 1}}}, "FileDetailPublic": {"type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "name": {"title": "Name", "type": "string", "maxLength": 64, "x-nullable": true}, "template": {"title": "Template", "type": "integer", "x-nullable": true}, "preview": {"title": "Preview", "type": "string", "readOnly": true, "x-nullable": true, "format": "uri"}, "mjml": {"title": "Mjml", "type": "object", "x-nullable": true}}}, "CustomTokenRefresh": {"required": ["refresh_token"], "type": "object", "properties": {"refresh_token": {"title": "Refresh token", "type": "string", "minLength": 1}, "access_token": {"title": "Access token", "type": "string", "readOnly": true}}}, "Order": {"required": ["email", "first_name", "last_name"], "type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "email": {"title": "Email", "type": "string", "format": "email", "maxLength": 254, "minLength": 1}, "number_of_tasks": {"title": "Number of tasks", "type": "integer", "maximum": 2147483647, "minimum": 1}, "wants_newsletter": {"title": "Wants newsletter", "type": "boolean", "default": false}, "first_name": {"title": "First name", "type": "string", "maxLength": 200, "minLength": 1}, "last_name": {"title": "Last name", "type": "string", "maxLength": 200, "minLength": 1}, "brief": {"title": "Brief", "type": "string", "x-nullable": true}, "coupon_code": {"title": "Coupon code", "type": "string"}, "order_type": {"title": "Order type", "type": "string", "enum": ["WD", "WOD"]}}}, "TeamSubscription": {"type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "tier": {"title": "Tier", "type": "string", "enum": ["F", "P", "T"], "readOnly": true}, "status": {"title": "Status", "type": "string", "enum": ["A", "O", "P", "C"], "readOnly": true}, "current_period_start": {"title": "Current period start", "type": "string", "format": "date-time", "readOnly": true}, "current_period_end": {"title": "Current period end", "type": "string", "format": "date-time", "readOnly": true}, "team": {"title": "Team", "type": "integer", "x-nullable": true}, "seats": {"title": "Seats", "type": "integer", "maximum": 2147483647, "minimum": 2}}}, "UserSubscription": {"type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "tier": {"title": "Tier", "type": "string", "enum": ["F", "P", "T"], "readOnly": true}, "status": {"title": "Status", "type": "string", "enum": ["A", "O", "P", "C"], "readOnly": true}, "current_period_start": {"title": "Current period start", "type": "string", "format": "date-time", "readOnly": true}, "current_period_end": {"title": "Current period end", "type": "string", "format": "date-time", "readOnly": true}}}, "StripeInvoiceInfo": {"required": ["created", "amount_paid", "status", "hosted_invoice_url", "invoice_pdf", "invoice_id"], "type": "object", "properties": {"created": {"title": "Created", "type": "string", "format": "date-time"}, "amount_paid": {"title": "Amount paid", "type": "integer"}, "status": {"title": "Status", "type": "string", "maxLength": 200, "minLength": 1}, "hosted_invoice_url": {"title": "Hosted invoice url", "type": "string", "format": "uri", "minLength": 1}, "invoice_pdf": {"title": "Invoice pdf", "type": "string", "format": "uri", "minLength": 1}, "invoice_id": {"title": "Invoice id", "type": "string", "maxLength": 200, "minLength": 1}}}, "SubscriptionInfo": {"required": ["status", "stripe_status", "cancel_at_period_end", "plan", "team", "user", "current_period_end", "current_period_start", "billing_interval", "payment_method_last4", "payment_method_brand", "billing_email", "invoice_list"], "type": "object", "properties": {"status": {"title": "Status", "type": "string", "maxLength": 200, "minLength": 1}, "stripe_status": {"title": "Stripe status", "type": "string", "maxLength": 200, "minLength": 1}, "cancel_at_period_end": {"title": "Cancel at period end", "type": "boolean"}, "plan": {"title": "Plan", "type": "string", "maxLength": 200, "minLength": 1}, "team": {"title": "Team", "type": "integer"}, "user": {"title": "User", "type": "integer"}, "current_period_end": {"title": "Current period end", "type": "string", "format": "date-time"}, "current_period_start": {"title": "Current period start", "type": "string", "format": "date-time"}, "billing_interval": {"title": "Billing interval", "type": "string", "maxLength": 200, "minLength": 1}, "payment_method_last4": {"title": "Payment method last4", "type": "string", "maxLength": 200, "minLength": 1}, "payment_method_brand": {"title": "Payment method brand", "type": "string", "maxLength": 200, "minLength": 1}, "billing_email": {"title": "Billing email", "type": "string", "format": "email", "minLength": 1}, "invoice_list": {"type": "array", "items": {"$ref": "#/definitions/StripeInvoiceInfo"}}}}, "InfoReadSubscription": {"type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "tier": {"title": "Tier", "type": "string", "enum": ["F", "P", "T"], "readOnly": true}, "status": {"title": "Status", "type": "string", "enum": ["A", "O", "P", "C"], "readOnly": true}, "current_period_start": {"title": "Current period start", "type": "string", "format": "date-time", "readOnly": true}, "current_period_end": {"title": "Current period end", "type": "string", "format": "date-time", "readOnly": true}, "user": {"title": "User", "type": "integer", "readOnly": true}}}, "StripeInvoiceId": {"required": ["invoice_id"], "type": "object", "properties": {"invoice_id": {"title": "Invoice id", "type": "string", "maxLength": 200, "minLength": 1}}}, "TeamSubscriptionUpdate": {"type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "tier": {"title": "Tier", "type": "string", "enum": ["F", "P", "T"], "readOnly": true}, "status": {"title": "Status", "type": "string", "enum": ["A", "O", "P", "C"], "readOnly": true}, "current_period_start": {"title": "Current period start", "type": "string", "format": "date-time", "readOnly": true}, "current_period_end": {"title": "Current period end", "type": "string", "format": "date-time", "readOnly": true}, "team": {"title": "Team", "type": "integer", "readOnly": true}, "seats": {"title": "Seats", "type": "integer", "maximum": 2147483647, "minimum": 2}}}, "TeamComponent": {"required": ["name", "content", "file"], "type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "name": {"title": "Name", "type": "string", "maxLength": 64, "minLength": 1}, "content": {"title": "Content", "type": "object"}, "virtual_mj_head": {"title": "Virtual mj head", "type": "string", "readOnly": true}, "preview": {"title": "Preview", "type": "string", "readOnly": true, "format": "uri"}, "created_at": {"title": "Created at", "type": "string", "format": "date-time", "readOnly": true}, "updated_at": {"title": "Updated at", "type": "string", "format": "date-time", "readOnly": true}, "file": {"title": "File", "type": "integer"}, "css": {"title": "Css", "type": "string", "x-nullable": true}}}, "TeamFontStack": {"required": ["name", "stack", "font"], "type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "name": {"title": "Name", "type": "string", "maxLength": 64, "minLength": 1}, "stack": {"title": "Stack", "type": "object"}, "font": {"title": "Font", "type": "integer"}, "font_family": {"title": "Font family", "type": "string", "readOnly": true}, "google_font": {"title": "Google font", "type": "string", "readOnly": true}, "safe_font": {"title": "Safe font", "type": "string", "readOnly": true}, "font_variants": {"title": "Font variants", "type": "string", "readOnly": true}}}, "TeamMemberRead": {"type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "first_name": {"title": "First name", "type": "string", "readOnly": true, "minLength": 1}, "last_name": {"title": "Last name", "type": "string", "readOnly": true, "minLength": 1}, "email": {"title": "Email", "type": "string", "format": "email", "readOnly": true, "minLength": 1}, "avatar": {"title": "Avatar", "type": "string", "readOnly": true, "format": "uri"}, "team": {"title": "Team", "type": "string", "readOnly": true, "minLength": 1}, "permission": {"title": "Permission", "type": "string", "readOnly": true}, "owner": {"title": "Owner", "type": "string", "readOnly": true}}}, "AddTeamMember": {"required": ["email"], "type": "object", "properties": {"email": {"title": "Email", "type": "string", "format": "email", "minLength": 1}, "team": {"title": "Team", "type": "integer", "readOnly": true}, "user": {"title": "User", "type": "integer", "readOnly": true}, "permission": {"title": "Permission", "type": "string", "enum": ["R", "W", "A"]}}}, "TeamMemberUpdate": {"type": "object", "properties": {"permission": {"title": "Permission", "type": "string", "enum": ["R", "W", "A"]}}}, "TeamProject": {"required": ["name"], "type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "name": {"title": "Name", "type": "string", "maxLength": 128, "minLength": 1}, "created_at": {"title": "Created at", "type": "string", "format": "date-time", "readOnly": true}, "last_updated_at": {"title": "Last updated at", "type": "string", "format": "date-time", "readOnly": true}}}, "TeamProjectEdit": {"required": ["name"], "type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "name": {"title": "Name", "type": "string", "maxLength": 128, "minLength": 1}, "created_at": {"title": "Created at", "type": "string", "format": "date-time", "readOnly": true}, "last_updated_at": {"title": "Last updated at", "type": "string", "format": "date-time", "readOnly": true}}}, "Component": {"required": ["name", "content", "file"], "type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "name": {"title": "Name", "type": "string", "maxLength": 64, "minLength": 1}, "content": {"title": "Content", "type": "object"}, "virtual_mj_head": {"title": "Virtual mj head", "type": "string", "readOnly": true}, "css": {"title": "Css", "type": "string", "x-nullable": true}, "preview": {"title": "Preview", "type": "string", "readOnly": true, "format": "uri"}, "created_at": {"title": "Created at", "type": "string", "format": "date-time", "readOnly": true}, "updated_at": {"title": "Updated at", "type": "string", "format": "date-time", "readOnly": true}, "file": {"title": "File", "type": "integer"}}}, "ComponentTemplateRead": {"type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "component": {"$ref": "#/definitions/Component"}, "position": {"title": "Position", "type": "integer", "maximum": 2147483647, "minimum": 0}}}, "TeamTemplate": {"required": ["name"], "type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "components": {"type": "array", "items": {"$ref": "#/definitions/Component"}, "readOnly": true}, "template_components": {"type": "array", "items": {"$ref": "#/definitions/ComponentTemplateRead"}, "readOnly": true}, "deleted": {"title": "Deleted", "type": "string", "format": "date-time", "readOnly": true}, "deleted_by_cascade": {"title": "Deleted by cascade", "type": "boolean", "readOnly": true}, "name": {"title": "Name", "type": "string", "maxLength": 64, "minLength": 1}, "description": {"title": "Description", "type": "string", "x-nullable": true}, "created_at": {"title": "Created at", "type": "string", "format": "date-time", "readOnly": true}, "updated_at": {"title": "Updated at", "type": "string", "format": "date-time", "readOnly": true}}}, "TeamComponentTemplateRead": {"type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "component": {"$ref": "#/definitions/Component"}, "position": {"title": "Position", "type": "integer", "maximum": 2147483647, "minimum": 0}}}, "TeamComponentTemplate": {"required": ["component"], "type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "component": {"title": "Component", "type": "integer"}, "position": {"title": "Position", "type": "integer", "maximum": 2147483647, "minimum": 0}}}, "Template": {"required": ["name"], "type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "components": {"type": "array", "items": {"$ref": "#/definitions/Component"}, "readOnly": true}, "template_components": {"type": "array", "items": {"$ref": "#/definitions/ComponentTemplateRead"}, "readOnly": true}, "deleted": {"title": "Deleted", "type": "string", "format": "date-time", "readOnly": true}, "deleted_by_cascade": {"title": "Deleted by cascade", "type": "boolean", "readOnly": true}, "name": {"title": "Name", "type": "string", "maxLength": 64, "minLength": 1}, "description": {"title": "Description", "type": "string", "x-nullable": true}, "created_at": {"title": "Created at", "type": "string", "format": "date-time", "readOnly": true}, "updated_at": {"title": "Updated at", "type": "string", "format": "date-time", "readOnly": true}, "team": {"title": "Team", "type": "integer", "x-nullable": true}, "project": {"title": "Project", "type": "integer", "x-nullable": true}}}, "ComponentTemplate": {"required": ["component"], "type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "component": {"title": "Component", "type": "integer"}, "position": {"title": "Position", "type": "integer", "maximum": 2147483647, "minimum": 0}}}, "CountdownTimerDesign": {"required": ["name"], "type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "name": {"title": "Name", "type": "string", "maxLength": 64, "minLength": 1}, "base_design": {"title": "Base design", "type": "string", "readOnly": true, "format": "uri"}, "positions": {"title": "Positions", "type": "object", "x-nullable": true}, "character_overrides": {"title": "Character overrides", "type": "object", "x-nullable": true}, "font": {"title": "Font", "type": "string", "readOnly": true, "format": "uri"}, "design_preview": {"title": "Design preview", "type": "string", "readOnly": true, "format": "uri"}, "font_size": {"title": "Font size", "type": "integer", "maximum": 2147483647, "minimum": -2147483648}, "font_color": {"title": "Font color", "type": "string", "maxLength": 8, "minLength": 1}, "time_preview": {"title": "Time preview", "type": "string", "maxLength": 8, "minLength": 1}}}, "CountdownTimerV2": {"required": ["name", "end_time", "design"], "type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "name": {"title": "Name", "type": "string", "maxLength": 64, "minLength": 1}, "timer": {"title": "Timer", "type": "string", "readOnly": true, "format": "uri"}, "end_time": {"title": "End time", "type": "string", "format": "date-time"}, "design": {"title": "Design", "type": "integer"}}}, "FileToComponentDetail": {"required": ["project", "node", "url"], "type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "name": {"title": "Name", "type": "string", "maxLength": 64, "x-nullable": true}, "created_by": {"title": "Created by", "type": "string", "readOnly": true}, "public": {"title": "Public", "type": "boolean"}, "team": {"title": "Team", "type": "integer", "x-nullable": true}, "project": {"$ref": "#/definitions/Project"}, "figma_file_id": {"title": "Figma file id", "type": "string", "x-nullable": true}, "node": {"title": "Node", "type": "string", "maxLength": 128, "minLength": 1}, "url": {"title": "Url", "type": "string", "format": "uri", "maxLength": 200, "minLength": 1}, "errors": {"title": "Errors", "type": "object", "x-nullable": true}, "created_at": {"title": "Created at", "type": "string", "format": "date-time", "readOnly": true}, "updated_at": {"title": "Updated at", "type": "string", "format": "date-time", "readOnly": true}, "successfully_processed": {"title": "Successfully processed", "type": "boolean", "readOnly": true}, "component_id": {"title": "Component id", "type": "string", "readOnly": true}}}, "UserFontStack": {"required": ["name", "stack", "font"], "type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "name": {"title": "Name", "type": "string", "maxLength": 64, "minLength": 1}, "stack": {"title": "Stack", "type": "object"}, "font": {"title": "Font", "type": "integer"}, "font_family": {"title": "Font family", "type": "string", "readOnly": true}, "google_font": {"title": "Google font", "type": "string", "readOnly": true}, "safe_font": {"title": "Safe font", "type": "string", "readOnly": true}, "font_variants": {"title": "Font variants", "type": "string", "readOnly": true}}}, "LoginUser": {"required": ["username", "password"], "type": "object", "properties": {"username": {"title": "Username", "type": "string", "minLength": 1}, "password": {"title": "Password", "type": "string", "minLength": 1}}}, "LoginResponse": {"required": ["user", "token"], "type": "object", "properties": {"user": {"$ref": "#/definitions/User"}, "token": {"title": "Token", "type": "string", "minLength": 1}}}}, "tags": [{"name": "Cannoli API Overview", "description": "\nCannoli is a project which allows users to convert Figma files to the MJML email framework. Most\nof the work is done in the frontend and the backend serves as a proxy to Figma to allow the frontend\nto pull any information required and to store file data and the generated MJML code.\n"}, {"name": "Authentication"}, {"name": "Users", "description": "User details"}, {"name": "Figma", "description": "All endpoints related to Figma"}, {"name": "Teams", "description": "\nThese section describes the endpoints used to handle Teams for a User.\n\n"}]}