Well, kind of.
The newest versions of FreePBX (and there are several running along side-by-side) have several interfaces that can be used. One of them is “more or less” an API, but it is under construction and I’m not sure it will give you exactly what you’re looking for anyway.
In the past, we’ve recommended that developers use the “rasterisk command options” syntax as a pseudo-API. This works well for almost anything that a typical API could be used for, and is (since it’s a “system()” call) largely language agnostic.
The ‘rasterisk’ program is an alias to the ‘asterisk’ program that assumes a ‘-r’ option, so it gives you the ability to interact with the system without having to “log in” to Asterisk.
If you can’t do it directly from the Asterisk command-line (which I’m almost certain you can), you could also use the ASTDB database, which can be programmed using direct calls to the astdb, or can be modified (once again) through the ‘rasterisk database set …’ (or similar) program call.
There is a REST API being built into the newer (I think 14+) versions of FreePBX that you may be able to access, but IIRC the REST interface is managed on a ‘per module’ basis, so if the queue module (for example) doesn’t have a specific API, you’ll have to use one of the other, older methods.