Documentation for JIRA 4.1. Documentation for other versions of JIRA is available too.
Once you start building your own plugins, it is likely that you'll need to call on JIRA code to accomplish certain tasks; for example, to retreive a list of users, make workflow changes or add new data to issues. We've compiled some resources about how JIRA works under the hood to help you know how to access that functionality.
JIRA uses PicoContainer to manage object creation throughout the system. It is important to understand how dependency injection works before trying to call JIRA functionality from your plugin. Here is a brief introduction to PicoContainer and JIRA.
It may be useful to understand how JIRA interacts with the database.
You should try not to manipulate JIRA's database directly, if you can avoid doing so.
There are several docs that explain how to retreive and manipulate issues and fields.
You can always looking things up in the API documentation..