Everything Is Already an API

Ask the editor what it has

:lua =vim.fn.getcompletion('nvim_', 'function')
:lua =vim.fn.getcompletion('', 'option')
:lua =vim.fn.getcompletion('', 'command')

Three lists: every API function, every option, every Ex command. That is your whole surface.

The namespaces

NamespaceIs
vim.apithe raw editor — buffers, windows, marks, virtual text
vim.fnevery classic Vimscript function
vim.opt / vim.ooptions, readable and writable while it runs
vim.keymapmappings
vim.lsp, vim.diagnostic, vim.treesitterthe modern subsystems
vim.uvtimers, processes, file watching

Prove it

:lua =vim.api.nvim_get_current_buf()

No plugin, no setup, nothing installed — it just answers.

A plugin is not a special kind of program. It is you, calling the same functions your config already calls.