Solved here, extra function call to vpiContextSetCurrent is required to bind VPI context to the thread, overall structure is as follows:
CUcontext cuCtx;
cuCtxCreate(&cuCtx, CU_CTX_MAP_HOST, 0);
VPIContext vpiCtx;
vpiContextCreate(VPI_BACKEND_CUDA, &vpiCtx);
vpiContextSetCurrent(vpiCtx);
... do work ...
vpiContextDestroy(vpiCtx);
cuCtxDestroy(cuCtx);