+struct fres_transaction_t_type;
+
+/* frsh_transaction_t is a pointer to resemble how frsh_contract_t is
+ * defined. */
+typedef struct fres_transaction_t_type *frsh_transaction_t;
+
+/**
+ * Initialize a transaction.
+ *
+ * @param transaction
+ *
+ * @param name The name of the transaction which can be used in
+ * frsh_transaction_wait_for_name().
+ *
+ * @return Zero on success, non-zero error code on return.
+ */
+int
+frsh_transaction_init(frsh_transaction_t *transaction,
+ char *name);
+
+/**
+ * Deallocates memory of the transaction object.
+ *
+ * @param transaction
+ */
+void
+frsh_transaction_destroy(frsh_transaction_t *transaction);
+
+/**
+ * Add a contract to the transaction.
+ *
+ * @param transaction Transaction
+ * @param contract Contract to add
+ *
+ * @param id ID of the contract within the transaction. The ID is used
+ * in frsh_transaction_alloc_vres(). The ID of the first added
+ * contract must be zero, of the second contract one, etc.
+ *
+ * @return Zero on success, non-zero error code on return.
+ */
+int
+frsh_transaction_add_contract(frsh_transaction_t *transaction,
+ frsh_contract_t *contract,
+ int id);