add optional success and fail callbacks