# Start a meeting for a non-logged in or API user > The code on this page works with either the **default UI** or the **custom UI**. After getting the [Zoom Access Key (ZAK) token](/docs/api/users/#tag/users/GET/users/me/zak), pass it to start meetings with either a meeting number or a vanity ID. ## Start with a meeting number To start a meeting with meeting number, first get a `MeetingService` instance from ZoomSDK. ```java int ret = -1; MeetingService meetingService = mZoomSDK.getMeetingService(); if(meetingService == null) { return ret; } ``` Then configure `StartMeetingOptions` and prepare `StartMeetingParamsWithoutLogin`. ```java StartMeetingOptions opts =ZoomMeetingUISettingHelper.getMeetingOptions(); StartMeetingParamsWithoutLogin params = new StartMeetingParamsWithoutLogin(); ``` Store the user ID, Zoom Access Key (`zoomAccessToken`), display name, and meeting number in the `StartMeetingParamsWithoutLogin` instance, and start the meeting by calling `startMeetingWithParams` method. ```java APIUserInfo userInfo = APIUserInfoHelper.getAPIUserInfo(); if (userInfo != null) { params.userId = userInfo.userId; params.zoomToken = userInfo.userZoomToken; params.userType = STYPE; params.displayName = DISPLAY_NAME; params.zoomAccessToken = userInfo.userZoomAccessToken; params.meetingNo = meetingNo; ret = meetingService.startMeetingWithParams(context, params, opts); Log.i(TAG, "startMeetingWithNumber, ret=" + ret); } return ret; ``` ## Start with a vanity ID **Vanity ID** is a personalized ID that uniquely belongs to a user. To start a meeting with a vanity ID, the process is almost the same as starting a meeting with a meeting number. Just store the vanity ID inside the `StartMeetingParamsWithoutLogin` instance instead of the meeting number. ```java int ret = -1; MeetingService meetingService = mZoomSDK.getMeetingService(); if(meetingService == null) { return ret; } StartMeetingOptions opts = ZoomMeetingUISettingHelper.getMeetingOptions(); StartMeetingParamsWithoutLogin params = new StartMeetingParamsWithoutLogin(); APIUserInfo userInfo = APIUserInfoHelper.getAPIUserInfo(); if (userInfo != null) { params.userId = userInfo.userId; params.zoomToken = userInfo.userZoomToken; params.userType = STYPE; params.displayName = DISPLAY_NAME; params.zoomAccessToken = userInfo.userZoomAccessToken; params.vanityID = vanityId; ret = meetingService.startMeetingWithParams(context, params, opts); Log.i(TAG, "startMeetingWithVanityId, ret=" + ret); } return ret; ``` ## Start meeting status To know whether the start meeting action succeeded, didn't succeed, or resulted in an error, implement the `onMeetingStatusChange` method. ```java @Override public void onMeetingStatusChanged(MeetingStatus meetingStatus, int errorCode, int internalErrorCode) { Log.i(TAG, "onMeetingStatusChanged, meetingStatus=" + meetingStatus + ", errorCode=" + errorCode + ", internalErrorCode=" + internalErrorCode); if(meetingStatus == MeetingStatus.MEETING_STATUS_FAILED && errorCode == MeetingError.MEETING_ERROR_CLIENT_INCOMPATIBLE) { Toast.makeText(this, "Version of ZoomSDK is too low!", Toast.LENGTH_LONG).show(); } } ``` ---