src/lib-storage/mail-storage.h and mail-storage-private.h describes mailbox API, among others. Mailbox life cycle often goes like:
mailbox_alloc() allocates memory for the mailbox and initializes some internal settings, but doesn't actually try to open it.
mailbox_open() opens the mailbox. It's not necessary to always call this, for example syncing implicitly opens unopened mailboxes.
mailbox_close() closes and frees the mailbox.
There are a lot of functions to deal with mailboxes. The most important ones are:
mailbox_get_status() to get a summary of mailbox, such as number of messages in it.
mailbox_sync_*() to synchronize changes from the backend to memory.
mailbox_transaction_*() for transaction handling. All message reads and writes are done in a transaction
mailbox_search_*() is used for searching messages. Even simple operations like "get all messages" go through this API, it'll then simply do "search all".
mailbox_save_*() and mailbox_copy() is used for saving/copying new messages to mailbox.