+ * \return User ID
+ */
+extern int Bank_GetUserAuth(const char *Salt, const char *Username, const char *Password);
+
+/**
+ * \brief Get an account ID from a MIFARE card ID
+ * \param CardID MIFARE card ID
+ * \return Account ID
+ */
+extern int Bank_GetAcctByCard(const char *CardID);
+
+/**
+ * \brief Add a card to an account
+ * \param AcctID Account ID
+ * \param CardID MIFARE card ID
+ * \return Boolean failure
+ * \retval 0 Success
+ * \retval 1 Bad account ID
+ * \retval 2 Card in use
+ */
+extern int Bank_AddAcctCard(int AcctID, const char *CardID);
+
+// === Item Manipulation ===
+#if 0
+extern tItem *Items_GetItem(char *Handler, int ID);
+/**
+ * \brief Create an item iterator
+ * \return Pointer to an iterator across the selected data set
+ */
+extern tItemIterator *Items_Iterator(int Flags, char *Handler, int MaxPrice);
+
+/**
+ * \brief Get the current entry in the iterator and move to the next
+ * \param It Iterator returned by Items_Iterator
+ * \return Item ID, or -1 for end of list
+ */
+extern tItem *Items_IteratorNext(tItemIterator *It);
+
+/**
+ * \brief Free an allocated iterator
+ * \param It Iterator returned by Items_Iterator
+ */
+extern void Items_DelIterator(tItemIterator *It);
+#endif
+
+// ---
+// Server provided helper functions
+// ---
+/**
+ * \brief Create a formatted string on the heap
+ * \param Format Format string
+ * \return Heap string
+ */
+extern char *mkstr(const char *Format, ...);
+
+/**
+ * \brief Dispense log access
+ * \note Try not to over-use, only stuff that matters should go in here