---
# System prepended metadata

title: Users

---

# Users
### GET '/users/talent/stats'
### GET '/users/talent/earnings?duration=${duration}',
### GET '/users/talent/fans'
### GET '/users/talent/payout_earnings?payoutDuration=${payoutDuration}',
### GET '/users/talent/validate_bank_account?accountId=${accountId}',
### GET '/users/talent/generate_account_link?accountId=${accountId}',
### GET '/users?email=${email?.toLowerCase()}'
### GET '/users?username=${username?.toLowerCase()}'
### GET '/users?verificationCode=${code}'
### GET '/users/validation/validate_star_code?code=${code}',
### PUT '/users/${signUpData.id}'
### GET '/users/me'
### GET '/users/talent/fetch?username=${name}'
### GET '/users/${id}'
### GET '/users/talent/${username}/share-link'
### GET '/users/talent/blocked'

### POST '/users/talent/add_external_account'
    {
        account_id,
        bank_name,
        account_number,
        account_holder_name,
        routing_number,
        country,
        currency,
    }

### POST '/users/add-to-favourite'
    {
        talentId,
        notifyLive,
        notifySchedule,
    }

### POST '/users/remove-from-favourite'
    {
        talentId
    }

### POST '/users/toggle-notifications'
    {
        id,
        notificationsLive,
        notificationsSchedule,
    }

### POST '/users/add-to-blocked-list'
    {
        referenceId: order?.referenceId,
        userId: order?.user?.id,
        comment,
    }

### POST '/users/remove-from-blocked-list'
    {
        talentId
    }

### PUT '/users/${id}'
### In code twice, once for users and once for talent -- this one is for Users
    {
        privateMode
    }

    {
        user_details: {
        mode: 'TALENT' | 'USER'
    }

    {
        user_details: {
        intro: null,
    }

    {
        email: values.email,
        firstName: values.firstName,
        lastName: values.lastName,
        displayName: '${values.firstName} ${values.lastName}',
        username: values.username,
        user_details: {
            phone,
            country,
            birthDate: birthDate ? moment(birthDate).format('YYYY-MM-DD') : null,
        },
    }

    {
        privateMode,
    }

    {
        payment_details: {
            stripeAccId: bankAccountResponse.payload.bankAccountId,
        },
    }

    {
        abnNumber,
    }

 // todo Instant  User Upadte??
### PUT '/users/${id}'
### In code twice, once for users and once for talent -- this one is Talent
    {
        displayName,
        username,
        categories,
        primaryCategory,
        sub_categories,
        user_details: {
            id: userDetails?.id,
            shortDescription,
            bio,
            sub_categories
        }
    }

    {
        user_details: {
            id,
            Prices: [meetAndGreetShort, meetAndGreet],
        },
    }
    {
        user_details: {
            id: userDetails?.id,
            Prices: [meetAndGreetShort, meetAndGreet],
        },
    }
    {
        user_details: {
        VisibleVirtualSelfies: [??] // I think that these are "Meetings" objects
        }
    }
    {
        user_details: {
            VisibleReviews: [??], // I think that these are "Meetings objects"
        },
    }
    {
        email,
        password,
        phone
    }
    {
        selectedSocials: [{[socialName]: url}],
        unusedSocials: [??],
        playlistUrl:
    }

# Auth
### POST '/auth/local/register'
    Fan:
        {
            displayName: '${name} ${lastName}',
            firstName: name,
            lastName,
            email,
            password,
            user_details,
            payment_details: {
                stripeCustomerId: customerId,
            },
        }
    Star:
        //todo


### POST '/auth/local'
    {
        identifier: email, 
        password
    }

### POST '/auth/mobile/provider'
    {
        id,
        provider: 'facebook',
        name,
        email,
        photoUrl: picture.data.url,
        token: accessToken,
    }

### POST '/auth/mobile/provider'
    {
        id,
        provider: 'google',
        name,
        email,
        photoUrl: photo,
        token: idToken,
    }

### POST '/auth/mobile/provider'
    {
        provider: 'apple',
        name: '${givenName} ${familyName}',
        email,
        appleUsername: user,
        token: authorizationCode,
    }

### POST '/auth/token'
    {
        refreshToken
    }

### POST '/auth/forgot-password'
    {
        email
    }

### POST '/auth/create-bank-account'
    {
        username,
        country,
        email,
        first_name,
        last_name,
        phone,
    }

### POST '/auth/delete'
#### Deletes an account
    {
        password
    }

# Payment-Details
### PUT '/payment-details/${id}'
#### Deprecated? Unused?
    //todo

# User-Details
### GET '/user-details/blocked-list'
### PUT '/user-details/${id}'
    {
        mode: "USER"|"TALENT"
    }

# Home
### GET '/home/favourites?start=${start}&size=${size}',
### GET '/home/trending?start=${start}&size=${size}'
### GET '/home'
### GET '/home/see_all?category=${category}'
### GET '/home?search=${searchValue}'

# Orders
### GET '/orders'
### GET '/orders/${orderID}'
### GET '/orders/${data.orderId}'
### GET '/orders/${queryParams.order}'
### GET '/orders/${orderId}'
### GET '/orders/twilio-token?roomName=${roomName}'
### GET '/orders/by-day?date=${date}&talentId=${talentId}',
### GET '/orders/generate/zoom-token?roomName=${roomName}',
### GET '/orders/generate/agora-token?channelId=${channelId}&uid=${uid}',
### GET '/orders?user.id=${userId}&status_in=PENDING&status_in=ACCEPTED&date_gt=${new Date().toISOString()}&_start=${start}&_limit=${size}&_sort=updated_at:DESC';
### GET '/orders?user.id=${userId}&status_in=PENDING&status_in=ACCEPTED&date_lt=${new Date().toISOString()}&_start=${start}&_limit=${size}&_sort=updated_at:DESC';
### GET '/orders?user.id=${userId}&status_in=${statuses.join( '&status_in=',)}&_start=${start}&_limit=${size}&_sort=updated_at:DESC'
### GET '/orders?talent.id=${userId}&status_in=PENDING&status_in=ACCEPTED&date_gt=${new Date().toISOString()}&_start=${start}&_limit=${size}&_sort=created_at:DESC';
### GET '/orders?talent.id=${userId}&status_in=PENDING&status_in=ACCEPTED&date_lt=${new Date().toISOString()}&_start=${start}&_limit=${size}&_sort=created_at:DESC';
### GET '/orders?talent.id=${userId}&status_in=${statuses.join( '&status_in=',)}&_start=${start}&_limit=${size}&_sort=created_at:DESC'
### GET '/orders/by-day?date=${dayDate}&talentId=${talentId}&_sort=created_at:desc',
### GET '/orders/count?status_in=COMPLETED&status_in=PAID&type=SHOT_OUT&talent=${talentId}',
### GET '/orders/count?status_in=COMPLETED&status_in=PAID&type=MEET_AND_GREET&talent=${talentId}',
### GET '/orders/cancel/${orderId}'
### GET '/orders?talent.id=${id}&date_gt=${date}&_sort=date:asc')

### POST '/orders/generate/agora-token'
    {
        recordingConfig: {
            channelName,
            uid: uid?.toString(), //userId
            isStar,
        }
    }

### POST '/orders'
    //todo getState().talentDetailsReducer

### POST '/orders/accept'
    {
        id: orderId,
    }

### POST '/orders/complete'
    {
        id: orderId,
    }

### PUT '/orders/${order.id}'
    {
        missedNotificationSent: true
    }

### PUT '/orders/${id}'
    {
        status: 'COMPLETED',
    }

### PUT '/orders/${orderId}'
    { 
        description
    }


# Meetings
### POST '/meetings/complete'
#### Deprecated? Unused?
    {
        id
    }

### DELETE '/meetings/remove/${orderId}'
#### This endpoint is used to remove virtual selfies? 
    {
        id
    }

### PUT '/meetings/${meetingId}'
### This endpoint is used to "archive" virtual selfies, what is the difference between an archive and a delete?
    {
        status: 'COMPLETED',
    }

# My-Meetings
### GET '/my-meetings'
#### Deprecated? Unused?

# Reviews
### GET '/reviews?order.talent=${talentId}&archived=false',
### POST '/reviews'
    {
        video: videoId,
        noWatermarkVideo: videoNoWatermarkId,
        order: orderId,
    }

### PUT '/reviews/${id}'
    {
        archived: true
    }

# My-Shoutouts
### Should be "shoutouts" we should refactor to correct this typo at some point
### GET '/my-shotouts'

# Shotouts
### Should be "shoutouts" we should refactor to correct this typo at some point
### DELETE '/shotouts/remove/${orderId}'

# Availability Slots
### Is this a real feature?

### GET '/availability-slots/my'
#### Deprecated? Unused?
### GET '/availability-slots?user=${id}'
#### Deprecated? Unused?

### POST '/availability-slots/'
#### Deprecated? Unused?
    {
        startDateTime,
        end,
        repeatDaily,
        repeatWeekly,
        enable10MinMeetAndGreets,
    }

### DELETE '/availability-slots/${id}'
#### Deprecated? Unused?
### PUT '/availability-slots/${id}'
#### Deprecated? Unused?
    {
        startDateTime,
        end,
        repeatDaily,
        repeatWeekly,
        enable10MinMeetAndGreets,
        closedFurtherBookings,
    }

# Settings
### GET '/settings'

# Reports
### POST '/reports'
    {
        referenceId,
        userId: order?.user?.id,
        comment,
    }

# Emails
### Move this logic to a backend service that responds to notifications from the selfie store?
### POST '/emails/virtualSelfie'
    {
        orderId,
    }
### POST '/emails/videoMessage'
    {
        orderId,
    }

# Occasions
### GET '/occasions?_sort=id:ASC'
#### Deprecated? Unused?

# Stripe
### GET '/stripe/payment_intents/${id}'

### GET '/stripe/card-wallet'
#### Deprecated? Unused?

### GET '/stripe/capture-payment-intent/${id}'
#### Deprecated? Unused?


### POST '/stripe/setup_intents/${setupIntentId}/confirm'
#### Deprecated? Unused?
    {
        payment_details: paymentDetails,
        return_url,
    }

### POST '/stripe/create-capture-intent'
#### Deprecated? Unused?

### POST '/stripe/refund/'
#### Deprecated? Unused?
    {
        id
    }

### POST '/stripe/apple/verify-receipt'
#### Deprecated? Unused?

### POST '/stripe/payment-sheet'
    {
        price,
        currency,
    }

