only use client api