DESIGN · FILES & DOCS
Projects, files, pages, and comment threads in their own design teams.
Each user connects their own account. Every call carries both identities — the agent and the person it is acting for — so the agent can never reach past what that individual can already do.
Tokens live in the vault and attach server-side at call time. The agent holds a session, not a secret, and revoking access does not mean rotating a key.
Who asked, which agent acted, which action ran, and the verdict that let it through — one audit trail across every integration, not one per vendor.
Each action is granted on its own. An agent allowed to read is not thereby allowed to write, and the scope beside each row is what the acting user must have connected for it to run at all.
penpot_post_add_team_to_organizationWRITEAdd team to organization via POST /api/main/methods/add-team-to-organization
penpot_post_all_org_members_in_teamREADAll org members in team via POST /api/main/methods/all-org-members-in-team
penpot_post_all_team_members_in_orgsREADAll team members in orgs via POST /api/main/methods/all-team-members-in-orgs
penpot_post_check_nitrate_ssoREADCheck if a user needs to login into the organization SSO. Returns {:authorized true} when SSO is not active for the team. Returns {:authorized false :redirect-uri <url>} when SSO is active; the client must redirect there. The OIDC provider itself handles re-authentication transparently if the user already has an active SSO session. via POST /api/main/methods/check-nitrate-sso
penpot_post_check_org_membersREADCheck org members via POST /api/main/methods/check-org-members
penpot_post_check_team_external_invitationsREADCheck team external invitations via POST /api/main/methods/check-team-external-invitations
penpot_post_clone_file_media_objectWRITEClone file media object via POST /api/main/methods/clone-file-media-object
penpot_post_clone_templateWRITEClone into the specified project the template by its id. via POST /api/main/methods/clone-template
penpot_post_create_commentWRITECreate comment via POST /api/main/methods/create-comment
penpot_post_create_comment_threadWRITECreate comment thread via POST /api/main/methods/create-comment-thread
penpot_post_create_fileWRITECreate file via POST /api/main/methods/create-file
penpot_post_create_file_media_object_from_urlWRITECreate file media object from url via POST /api/main/methods/create-file-media-object-from-url
penpot_post_create_file_snapshotWRITECreate file snapshot via POST /api/main/methods/create-file-snapshot
penpot_post_create_font_variantWRITEUpload a font variant. Font data may be provided either as a Transit-encoded `:data` map (keyed by mime-type) for small fonts, or as an `:uploads` map (keyed by mime-type, values are upload-session UUIDs from the chunked-upload API) for large fonts. Exactly one of the two must be present. via POST /api/main/methods/create-font-variant
penpot_post_create_projectWRITECreate project via POST /api/main/methods/create-project
penpot_post_create_share_linkWRITECreates a share-link object. Share links are resources that allows external users access to specific pages of a file with specific permissions (who-comment and who-inspect). via POST /api/main/methods/create-share-link
penpot_post_create_teamWRITECreate team via POST /api/main/methods/create-team
penpot_post_create_team_access_requestWRITEA rpc call that allow to request for an invitations to join the team. via POST /api/main/methods/create-team-access-request
penpot_post_create_team_invitationsWRITEA rpc call that allows to send single or multiple invitations to join the team. Supports two parameter formats: 1. emails (set) + role (single role for all emails) 2. invitations (vector of {:email :role} maps for individual roles) via POST /api/main/methods/create-team-invitations
penpot_post_create_team_with_invitationsWRITECreate team with invitations via POST /api/main/methods/create-team-with-invitations
penpot_post_create_webhookWRITECreate webhook via POST /api/main/methods/create-webhook
penpot_post_delete_commentWRITEDelete comment via POST /api/main/methods/delete-comment
penpot_post_delete_comment_threadWRITEDelete comment thread via POST /api/main/methods/delete-comment-thread
penpot_post_delete_fileWRITEDelete file via POST /api/main/methods/delete-file
penpot_post_delete_file_object_thumbnailWRITEDelete file object thumbnail via POST /api/main/methods/delete-file-object-thumbnail
penpot_post_delete_file_object_thumbnailsWRITEDelete file object thumbnails via POST /api/main/methods/delete-file-object-thumbnails
penpot_post_delete_file_snapshotWRITEDelete file snapshot via POST /api/main/methods/delete-file-snapshot
penpot_post_delete_fontWRITEDelete font via POST /api/main/methods/delete-font
penpot_post_delete_font_variantWRITEDelete font variant via POST /api/main/methods/delete-font-variant
penpot_post_delete_profile_photoWRITEDelete profile photo via POST /api/main/methods/delete-profile-photo
penpot_post_delete_projectWRITEDelete project via POST /api/main/methods/delete-project
penpot_post_delete_share_linkWRITEDelete share link via POST /api/main/methods/delete-share-link
penpot_post_delete_teamWRITEDelete team via POST /api/main/methods/delete-team
penpot_post_delete_team_invitationWRITEDelete team invitation via POST /api/main/methods/delete-team-invitation
penpot_post_delete_team_memberWRITEDelete team member via POST /api/main/methods/delete-team-member
penpot_post_delete_webhookWRITEDelete webhook via POST /api/main/methods/delete-webhook
penpot_post_duplicate_fileWRITEDuplicate a single file in the same team. via POST /api/main/methods/duplicate-file
penpot_post_duplicate_projectWRITEDuplicate an entire project with all the files via POST /api/main/methods/duplicate-project
penpot_post_get_all_projectsREADGet all projects via POST /api/main/methods/get-all-projects
penpot_post_get_comment_threadREADGet comment thread via POST /api/main/methods/get-comment-thread
penpot_post_get_comment_threadsREADGet comment threads via POST /api/main/methods/get-comment-threads
penpot_post_get_commentsREADGet comments via POST /api/main/methods/get-comments
penpot_post_get_error_reportREADGet error report via POST /api/main/methods/get-error-report
penpot_post_get_error_reportsREADGet error reports via POST /api/main/methods/get-error-reports
penpot_post_get_fileREADRetrieve a file by its ID. Only authenticated users. via POST /api/main/methods/get-file
penpot_post_get_file_data_for_thumbnailREADRetrieves the data for generate the thumbnail of the file. Used mainly for render thumbnails on dashboard. via POST /api/main/methods/get-file-data-for-thumbnail
penpot_post_get_file_fragmentREADRetrieve a file fragment by its ID. Only authenticated users. via POST /api/main/methods/get-file-fragment
penpot_post_get_file_infoREADRetrieve minimal file info by its ID. via POST /api/main/methods/get-file-info
penpot_post_get_file_librariesREADGet libraries used by the specified file. via POST /api/main/methods/get-file-libraries
penpot_post_get_file_object_thumbnailsREADRetrieve a file object thumbnails. via POST /api/main/methods/get-file-object-thumbnails
penpot_post_get_file_snapshotREADRetrieve a file bundle with data from a specific snapshot for read-only preview. Does not modify any database state. via POST /api/main/methods/get-file-snapshot
penpot_post_get_file_snapshotsREADGet file snapshots via POST /api/main/methods/get-file-snapshots
penpot_post_get_file_statsREADReturn aggregate statistics for a single file: page count, shape counts by type, component/color/typography counts, and inbound and outbound library reference counts. Cheap alternative to `get-file` when only metrics are needed. via POST /api/main/methods/get-file-stats
penpot_post_get_file_summaryREADRetrieve a file summary by its ID. Only authenticated users. via POST /api/main/methods/get-file-summary
penpot_post_get_font_variantsREADGet font variants via POST /api/main/methods/get-font-variants
penpot_post_get_leave_org_summaryREADGet leave org summary via POST /api/main/methods/get-leave-org-summary
penpot_post_get_library_file_referencesREADReturns all the file references that use specified file (library) id. via POST /api/main/methods/get-library-file-references
penpot_post_get_library_usageREADGets the number of files that use the specified library. via POST /api/main/methods/get-library-usage
penpot_post_get_nitrate_connectivityREADGet nitrate connectivity via POST /api/main/methods/get-nitrate-connectivity
penpot_post_get_owned_teamsREADGet owned teams via POST /api/main/methods/get-owned-teams
penpot_post_get_pageREADRetrieves the page data from file and returns it. If no page-id is specified, the first page will be returned. If object-id is specified, only that object and its children will be returned in the page objects data structure. If you specify the object-id, the page-id parameter becomes mandatory. Mainly used for rendering purposes on the exporter. It does not accepts client features. via POST /api/main/methods/get-page
penpot_post_get_profileREADGet profile via POST /api/main/methods/get-profile
penpot_post_get_profiles_for_file_commentsREADRetrieves a list of profiles with limited set of properties of all participants on comment threads of the file. via POST /api/main/methods/get-profiles-for-file-comments
penpot_post_get_projectREADGet project via POST /api/main/methods/get-project
penpot_post_get_project_filesREADGet all files for the specified project. via POST /api/main/methods/get-project-files
penpot_post_get_projectsREADGet projects via POST /api/main/methods/get-projects
penpot_post_get_sso_providerREADGet sso provider via POST /api/main/methods/get-sso-provider
penpot_post_get_subscription_warningREADGet subscription warning via POST /api/main/methods/get-subscription-warning
penpot_post_get_teamREADGet team via POST /api/main/methods/get-team
penpot_post_get_team_deleted_filesREADGet team deleted files via POST /api/main/methods/get-team-deleted-files
penpot_post_get_team_infoREADRetrieve minimal team info by its ID. via POST /api/main/methods/get-team-info
penpot_post_get_team_invitation_tokenREADGet team invitation token via POST /api/main/methods/get-team-invitation-token
penpot_post_get_team_invitationsREADGet team invitations via POST /api/main/methods/get-team-invitations
penpot_post_get_team_membersREADGet team members via POST /api/main/methods/get-team-members
penpot_post_get_team_recent_filesREADGet team recent files via POST /api/main/methods/get-team-recent-files
penpot_post_get_team_shared_filesREADGet all file (libraries) for the specified team. via POST /api/main/methods/get-team-shared-files
penpot_post_get_team_statsREADGet team stats via POST /api/main/methods/get-team-stats
penpot_post_get_team_usersREADGet team users by team-id or by file-id via POST /api/main/methods/get-team-users
penpot_post_get_teamsREADGet teams via POST /api/main/methods/get-teams
penpot_post_get_unread_comment_threadsREADGet unread comment threads via POST /api/main/methods/get-unread-comment-threads
penpot_post_get_view_only_bundleREADGet view only bundle via POST /api/main/methods/get-view-only-bundle
penpot_post_get_webhooksREADGet webhooks via POST /api/main/methods/get-webhooks
penpot_post_has_file_librariesREADChecks if the file has libraries. Returns a boolean via POST /api/main/methods/has-file-libraries
penpot_post_ignore_file_library_sync_statusWRITEIgnore updates in linked files via POST /api/main/methods/ignore-file-library-sync-status
penpot_post_leave_orgWRITELeave org via POST /api/main/methods/leave-org
penpot_post_leave_teamWRITELeave team via POST /api/main/methods/leave-team
penpot_post_link_file_to_libraryWRITELink a file to a library. Returns the recursive list of libraries used by that library via POST /api/main/methods/link-file-to-library
penpot_post_lock_file_snapshotWRITELock file snapshot via POST /api/main/methods/lock-file-snapshot
penpot_post_mark_all_threads_as_readWRITEMark all threads as read via POST /api/main/methods/mark-all-threads-as-read
penpot_post_move_filesWRITEMove a set of files from one project to other. via POST /api/main/methods/move-files
penpot_post_move_projectWRITEMove projects between teams via POST /api/main/methods/move-project
penpot_post_permanently_delete_team_filesWRITEMark the specified files to be deleted immediatelly on the specified team. The team-id on params will be used to filter and check writable permissons on team. via POST /api/main/methods/permanently-delete-team-files
penpot_post_push_audit_eventsWRITEPush audit events via POST /api/main/methods/push-audit-events
penpot_post_redeem_nitrate_activation_codeWRITERedeem nitrate activation code via POST /api/main/methods/redeem-nitrate-activation-code
penpot_post_remove_team_from_orgWRITERemove team from org via POST /api/main/methods/remove-team-from-org
penpot_post_rename_fileWRITERename file via POST /api/main/methods/rename-file
penpot_post_rename_projectWRITERename project via POST /api/main/methods/rename-project
penpot_post_restore_deleted_team_filesWRITERemoves the deletion mark from the specified files (and respective projects) on the specified team. via POST /api/main/methods/restore-deleted-team-files
penpot_post_restore_file_snapshotWRITERestore file snapshot via POST /api/main/methods/restore-file-snapshot
penpot_post_search_filesREADSearch files via POST /api/main/methods/search-files
penpot_post_send_user_feedbackWRITESend user feedback via POST /api/main/methods/send-user-feedback
penpot_post_set_file_sharedWRITESet file shared via POST /api/main/methods/set-file-shared
penpot_post_unlink_file_from_libraryWRITEUnlink file from library via POST /api/main/methods/unlink-file-from-library
penpot_post_unlock_file_snapshotWRITEUnlock file snapshot via POST /api/main/methods/unlock-file-snapshot
penpot_post_update_commentWRITEUpdate comment via POST /api/main/methods/update-comment
penpot_post_update_comment_threadWRITEUpdate comment thread via POST /api/main/methods/update-comment-thread
penpot_post_update_comment_thread_frameWRITEUpdate comment thread frame via POST /api/main/methods/update-comment-thread-frame
penpot_post_update_comment_thread_positionWRITEUpdate comment thread position via POST /api/main/methods/update-comment-thread-position
penpot_post_update_comment_thread_statusWRITEUpdate comment thread status via POST /api/main/methods/update-comment-thread-status
penpot_post_update_fileWRITEUpdate file via POST /api/main/methods/update-file The `changes` / `changesWithMetadata` schemas are deliberately opaque here: each entry is one operation of Penpot's own file-change vocabulary, whose full union lives in Penpot's OpenAPI document rather than in this tool listing.
penpot_post_update_file_library_sync_statusWRITEUpdate the synchronization status of a file->library link via POST /api/main/methods/update-file-library-sync-status
penpot_post_update_file_snapshotWRITEUpdate file snapshot via POST /api/main/methods/update-file-snapshot
penpot_post_update_fontWRITEUpdate font via POST /api/main/methods/update-font
penpot_post_update_profileWRITEUpdate profile via POST /api/main/methods/update-profile
penpot_post_update_profile_notificationsWRITEUpdate profile notifications via POST /api/main/methods/update-profile-notifications
penpot_post_update_profile_propsWRITEUpdate profile props via POST /api/main/methods/update-profile-props
penpot_post_update_project_pinWRITEUpdate project pin via POST /api/main/methods/update-project-pin
penpot_post_update_teamWRITEUpdate team via POST /api/main/methods/update-team
penpot_post_update_team_invitation_roleWRITEUpdate team invitation role via POST /api/main/methods/update-team-invitation-role
penpot_post_update_team_member_roleWRITEUpdate team member role via POST /api/main/methods/update-team-member-role
penpot_post_update_webhookWRITEUpdate webhook via POST /api/main/methods/update-webhook
Put Penpot behind one governed endpoint.
Same permissions, same audit trail, whatever else you connect next.