export interface Contact { /** * Contact ID. * @readonly */ id?: string; /** * Revision number, which increments by 1 each time the contact is updated. * To prevent conflicting changes, * the existing `revision` must be specified when updating a contact. * @readonly */ revision?: number; /** * Details about the contact's source. * @readonly */ source?: ContactSource; /** * Date and time the contact was created. * @readonly */ createdDate?: Date | null; /** * Date and time the contact was last updated. * @readonly */ updatedDate?: Date | null; /** * Details about the contact's last action in the site. * @readonly */ lastActivity?: ContactActivity; /** * Contact's primary phone and email. * @readonly */ primaryInfo?: PrimaryContactInfo; /** Contact's details. */ info?: ContactInfo; /** * Contact's primary email details. * @readonly */ primaryEmail?: PrimaryEmail; /** * Contact's primary phone details. * @readonly */ primaryPhone?: PrimaryPhone; } export interface ContactSource { /** * Source type. * @readonly */ sourceType?: ContactSourceType; /** * App ID, if the contact was created by an app. * @readonly */ appId?: string | null; } export declare enum ContactSourceType { OTHER = "OTHER", ADMIN = "ADMIN", WIX_APP = "WIX_APP", IMPORT = "IMPORT", THIRD_PARTY = "THIRD_PARTY", WIX_BOOKINGS = "WIX_BOOKINGS", WIX_CHAT = "WIX_CHAT", WIX_EMAIL_MARKETING = "WIX_EMAIL_MARKETING", WIX_EVENTS = "WIX_EVENTS", WIX_FORMS = "WIX_FORMS", WIX_GROUPS = "WIX_GROUPS", WIX_HOTELS = "WIX_HOTELS", WIX_MARKET_PLACE = "WIX_MARKET_PLACE", WIX_MUSIC = "WIX_MUSIC", WIX_RESTAURANTS = "WIX_RESTAURANTS", WIX_SITE_MEMBERS = "WIX_SITE_MEMBERS", WIX_STORES = "WIX_STORES", WIX_CODE = "WIX_CODE", HOPP = "HOPP" } export interface ContactActivity { /** Date and time of the last action. */ activityDate?: Date | null; /** Contact's last action in the site. */ activityType?: ContactActivityType; } export declare enum ContactActivityType { /** Visited the site. */ GENERAL = "GENERAL", /** Became a new contact. */ CONTACT_CREATED = "CONTACT_CREATED", /** Logged in. */ MEMBER_LOGIN = "MEMBER_LOGIN", /** Requested a site membership. */ MEMBER_REGISTER = "MEMBER_REGISTER", /** Was approved, blocked, or unblocked. */ MEMBER_STATUS_CHANGED = "MEMBER_STATUS_CHANGED", /** Submitted a form. */ FORM_SUBMITTED = "FORM_SUBMITTED", /** Started a chat. */ INBOX_FORM_SUBMITTED = "INBOX_FORM_SUBMITTED", /** Paid a payment request. */ INBOX_PAYMENT_REQUEST_PAID = "INBOX_PAYMENT_REQUEST_PAID", /** Received a message from the site. */ INBOX_MESSAGE_TO_CUSTOMER = "INBOX_MESSAGE_TO_CUSTOMER", /** Sent a new message to the site. */ INBOX_MESSAGE_FROM_CUSTOMER = "INBOX_MESSAGE_FROM_CUSTOMER", /** Subscribed to a site newsletter through a form. */ NEWSLETTER_SUBSCRIPTION_FORM_SUBMITTED = "NEWSLETTER_SUBSCRIPTION_FORM_SUBMITTED", /** Unsubscribed from a site newsletter. */ NEWSLETTER_SUBSCRIPTION_UNSUBSCRIBE = "NEWSLETTER_SUBSCRIPTION_UNSUBSCRIBE", /** Made a purchase. */ ECOM_PURCHASE = "ECOM_PURCHASE", /** Abandoned a shopping cart. */ ECOM_CART_ABANDON = "ECOM_CART_ABANDON", /** Checked out shopping cart and submitted buyer info (but didn’t complete the purchase yet). */ ECOM_CHECKOUT_BUYER = "ECOM_CHECKOUT_BUYER", /** Booked an appointment. */ BOOKINGS_APPOINTMENT = "BOOKINGS_APPOINTMENT", /** Made a Wix Hotels reservation. */ HOTELS_RESERVATION = "HOTELS_RESERVATION", /** Paid for a Wix Hotels reservation. */ HOTELS_PURCHASE = "HOTELS_PURCHASE", /** Confirmed a Wix Hotels reservation. */ HOTELS_CONFIRMATION = "HOTELS_CONFIRMATION", /** Canceled a Wix Hotels reservation. */ HOTELS_CANCEL = "HOTELS_CANCEL", /** Purchased a video. */ VIDEO_PURCHASE = "VIDEO_PURCHASE", /** Rented a video. */ VIDEO_RENT = "VIDEO_RENT", /** Made a purchase with a pay button. */ CASHIER_BUTTON_PURCHASE = "CASHIER_BUTTON_PURCHASE", /** Became a new Wix Marketplace lead. */ ARENA_NEW_LEAD = "ARENA_NEW_LEAD", /** RSVP'd to an event. */ EVENTS_RSVP = "EVENTS_RSVP", /** Paid an invoice. */ INVOICE_PAY = "INVOICE_PAY", /** An invoice is now overdue. */ INVOICE_OVERDUE = "INVOICE_OVERDUE", /** Accepted a price quote. */ PRICE_QUOTE_ACCEPT = "PRICE_QUOTE_ACCEPT", /** A price quote has expired. */ PRICE_QUOTE_EXPIRE = "PRICE_QUOTE_EXPIRE", /** Ordered food with Wix Restaurants. */ RESTAURANTS_ORDER = "RESTAURANTS_ORDER", /** Made a Wix Restaurants reservation. */ RESTAURANTS_RESERVATION = "RESTAURANTS_RESERVATION", /** Opened an email from the site. */ SHOUTOUT_OPEN = "SHOUTOUT_OPEN", /** Clicked a link in an email from the site. */ SHOUTOUT_CLICK = "SHOUTOUT_CLICK", /** Merged with another contact. */ CONTACT_MERGED = "CONTACT_MERGED", /** Subscribed to a site newsletter. */ NEWSLETTER_SUBSCRIPTION_SUBSCRIBE = "NEWSLETTER_SUBSCRIPTION_SUBSCRIBE", /** Subscription status to site newsletters is pending confirmation. */ NEWSLETTER_SUBSCRIPTION_PENDING = "NEWSLETTER_SUBSCRIPTION_PENDING", /** Subscription status to site newsletters is not set. */ NEWSLETTER_SUBSCRIPTION_NOT_SET = "NEWSLETTER_SUBSCRIPTION_NOT_SET", /** Subscribed to phone notifications. */ PHONE_SUBSCRIPTION_SUBSCRIBE = "PHONE_SUBSCRIPTION_SUBSCRIBE", /** Subscription to phone notificatons is pending confirmation. */ PHONE_SUBSCRIPTION_PENDING = "PHONE_SUBSCRIPTION_PENDING", /** Subscription to phone notificatons is not set. */ PHONE_SUBSCRIPTION_NOT_SET = "PHONE_SUBSCRIPTION_NOT_SET", /** Subscribed to phone notifications. */ PHONE_SUBSCRIPTION_UNSUBSCRIBE = "PHONE_SUBSCRIPTION_UNSUBSCRIBE" } export interface ActivityIcon { /** Icon name */ name?: string | null; /** Icon url */ url?: string | null; } export interface PrimaryContactInfo { /** * Primary email address. * * This property reflects the email address in `info.emails` * where `primary` is `true`. * @readonly */ email?: string | null; /** * Primary phone number. * * This property reflects the phone number in `info.phones` * where `primary` is `true`. * @readonly */ phone?: string | null; } export interface Image { /** * WixMedia image ID. * This property is written by Wix when an image is uploaded to the Wix Media Manager. */ id?: string; /** Image source: Either a Media Manager URL or external URL. */ url?: string; /** Height of the original image. */ height?: number; /** Width of the original image. */ width?: number; /** Image alt text (optional). */ altText?: string | null; /** * Image URL expiration date (optional). * @readonly */ urlExpirationDate?: Date | null; } export interface ContactInfo { /** Contact's first and last name. */ name?: ContactName; /** Contact's email addresses. */ emails?: ContactEmailsWrapper; /** Contact's phone numbers. */ phones?: ContactPhonesWrapper; /** Contact's street addresses. */ addresses?: ContactAddressesWrapper; /** Contact's company name. */ company?: string | null; /** Contact's job title. */ jobTitle?: string | null; /** Birth date in `YYYY-MM-DD` format. For example, `2020-03-15`. */ birthdate?: string | null; /** * Locale in * [IETF BCP 47 language tag](https://en.wikipedia.org/wiki/IETF_language_tag) format. * Typically, this is a lowercase 2-letter language code, * followed by a hyphen, followed by an uppercase 2-letter country code. * For example, `en-US` for U.S. English, and `de-DE` for Germany German. */ locale?: string | null; /** * List of contact's labels. * * Labels are used to organize contacts. Labels can be * added and removed using Label Contact and Unlabel Contact, respectively. * * To view or manage contact labels, use the Labels API. */ labelKeys?: LabelsWrapper; /** * Additional custom fields. * * Empty fields are not returned. */ extendedFields?: ExtendedFieldsWrapper; /** Contact's profile picture. */ picture?: ContactPicture; } export interface ContactName { /** Contact's first name. */ first?: string | null; /** Contact's last name. */ last?: string | null; } export interface ContactEmailsWrapper { /** List of up to 50 email addresses. */ items?: ContactEmail[]; } export interface ContactEmail { /** * Email ID. * @readonly */ id?: string | null; /** * Email type. * * `UNTAGGED` is shown as "Other" in the Contact List. */ tag?: EmailTag; /** Email address. */ email?: string; /** * Indicates whether this is the contact's primary email address. * When changing `primary` to `true` for an email, * the contact's other emails become `false`. * Changing the primary email of a contact also affects the subscription status to marketing emails that are decided based on the primary email. */ primary?: boolean | null; } export declare enum EmailTag { UNTAGGED = "UNTAGGED", MAIN = "MAIN", HOME = "HOME", WORK = "WORK" } export interface ContactPhonesWrapper { /** List of up to 50 phone numbers. */ items?: ContactPhone[]; } export interface ContactPhone { /** * Phone ID. * @readonly */ id?: string | null; /** * Phone type. * * `UNTAGGED` is shown as "Other" in the Contact List. */ tag?: PhoneTag; /** [ISO-3166 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2) country code. */ countryCode?: string | null; /** Phone number. */ phone?: string; /** * [ITU E.164-formatted](https://www.itu.int/rec/T-REC-E.164/) * phone number. * Automatically generated using `phone` and `countryCode`, pending both values are valid. * @readonly */ e164Phone?: string | null; /** * Indicates whether this is the contact's primary phone number. * When changing `primary` to `true` for a phone, * the contact's `primary` field for other phones becomes `false`. * Changing the primary phone number also affects the subscription status to SMS messages that are decided based on the primary phone. */ primary?: boolean | null; } export declare enum PhoneTag { UNTAGGED = "UNTAGGED", MAIN = "MAIN", HOME = "HOME", MOBILE = "MOBILE", WORK = "WORK", FAX = "FAX" } export interface ContactAddressesWrapper { /** List of up to 50 addresses. */ items?: ContactAddress[]; } export interface ContactAddress { /** * Street address ID. * @readonly */ id?: string | null; /** * Address type. * `UNTAGGED` is shown as "Other" in the Contact List. */ tag?: AddressTag; /** Street address. */ address?: Address; } export declare enum AddressTag { UNTAGGED = "UNTAGGED", HOME = "HOME", WORK = "WORK", BILLING = "BILLING", SHIPPING = "SHIPPING" } /** Physical address */ export interface Address extends AddressStreetOneOf { /** Street address object, with number and name in separate fields. */ streetAddress?: StreetAddress; /** Main address line, usually street and number, as free text. */ addressLine?: string | null; /** * 2-letter country code in an * [ISO-3166 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2) format. */ country?: string | null; /** * Code for a subdivision (such as state, prefecture, or province) in an * [ISO 3166-2](https://en.wikipedia.org/wiki/ISO_3166-2) format. */ subdivision?: string | null; /** City name. */ city?: string | null; /** Postal or zip code. */ postalCode?: string | null; /** * Free text providing more detailed address information, * such as apartment, suite, or floor. */ addressLine2?: string | null; } /** @oneof */ export interface AddressStreetOneOf { /** Street address object, with number and name in separate fields. */ streetAddress?: StreetAddress; /** Main address line, usually street and number, as free text. */ addressLine?: string | null; } export interface StreetAddress { /** Street number. */ number?: string; /** Street name. */ name?: string; } export interface AddressLocation { /** Address's latitude. */ latitude?: number | null; /** Address's longitude. */ longitude?: number | null; } export interface Subdivision { /** subdivision short code */ code?: string; /** Full subdivision name. */ name?: string; } export declare enum SubdivisionType { UNKNOWN_SUBDIVISION_TYPE = "UNKNOWN_SUBDIVISION_TYPE", /** State */ ADMINISTRATIVE_AREA_LEVEL_1 = "ADMINISTRATIVE_AREA_LEVEL_1", /** County */ ADMINISTRATIVE_AREA_LEVEL_2 = "ADMINISTRATIVE_AREA_LEVEL_2", /** City/town */ ADMINISTRATIVE_AREA_LEVEL_3 = "ADMINISTRATIVE_AREA_LEVEL_3", /** Neighborhood/quarter */ ADMINISTRATIVE_AREA_LEVEL_4 = "ADMINISTRATIVE_AREA_LEVEL_4", /** Street/block */ ADMINISTRATIVE_AREA_LEVEL_5 = "ADMINISTRATIVE_AREA_LEVEL_5", /** ADMINISTRATIVE_AREA_LEVEL_0. Indicates the national political entity, and is typically the highest order type returned by the Geocoder. */ COUNTRY = "COUNTRY" } export interface AssigneesWrapper { /** List of site contributor user IDs. */ items?: string[]; } export interface LabelsWrapper { /** * List of contact label keys. * * Contact labels help categorize contacts. Label keys must exist to be added to the contact. * Contact labels can be created or retrieved with Find or Create Label or List Labels. */ items?: string[]; } export interface ExtendedFieldsWrapper { /** * Contact's extended fields, * where each key is the field key, * and each value is the field's value for the contact. * * To view and manage extended fields, use the Extended Fields API. */ items?: Record; } export interface LocationsWrapper { /** List of location ids. */ items?: string[]; } /** TEST contact picture description */ export interface ContactPicture { /** * Image. * This can contain an image URL or a Wix Media image ID. */ image?: Image; } export declare enum ImageProvider { UNKNOWN = "UNKNOWN", /** Image stored outside Wix */ EXTERNAL = "EXTERNAL", /** Stored in wix media platform, Must be uploaded by using `GeneratePictureUploadUrl` */ WIX_MEDIA = "WIX_MEDIA" } export interface SegmentsWrapper { /** List of Contact segment IDs */ items?: string[]; } export interface PrimaryEmail { /** * Primary email address. * * This property reflects the email address in `info.emails` * where `primary` is `true`. * @readonly */ email?: string | null; /** * Indicates the recipient's opt-in or opt-out status for marketing emails. * * - `NOT_SET`: No status specified. Default. * - `PENDING`: Subscription confirmation was requested, * but recipient hasn't confirmed yet. * - `SUBSCRIBED`: Recipient has opted in to marketing emails. * - `UNSUBSCRIBED`: Recipient has opted out of marketing emails. * @readonly */ subscriptionStatus?: SubscriptionStatus; /** * Indicates last reported status of sent emails. * * - `NOT_SET`: No status reported. Default. * - `VALID`: Emails are being successfully delivered. * - `BOUNCED`: The last email to the recipient bounced or was rejected. * - `SPAM_COMPLAINT`: Recipient registered a spam complaint * with their email provider. * - `INACTIVE`: Multiple emails have been delivered without any kind of engagement from the recipient. * @readonly */ deliverabilityStatus?: EmailDeliverabilityStatus; } export declare enum SubscriptionStatus { NO_SUBSCRIPTION_STATUS = "NO_SUBSCRIPTION_STATUS", NOT_SET = "NOT_SET", PENDING = "PENDING", SUBSCRIBED = "SUBSCRIBED", UNSUBSCRIBED = "UNSUBSCRIBED" } export declare enum EmailDeliverabilityStatus { NOT_SET = "NOT_SET", VALID = "VALID", BOUNCED = "BOUNCED", SPAM_COMPLAINT = "SPAM_COMPLAINT", INACTIVE = "INACTIVE" } export interface PrimaryPhone { /** [ISO-3166 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2) country code of the primary phone. */ countryCode?: string | null; /** * [ITU E.164-formatted](https://www.itu.int/rec/T-REC-E.164/) * phone number. * Automatically generated using `phone` and `countryCode`, * as long as both of those values are valid. * @readonly */ e164Phone?: string | null; /** * Formatted phone. Automatically generated using phone and countryCode. * @readonly */ formattedPhone?: string | null; /** * Indicates the recipient's opt-in or opt-out status for SMS messages. * * - `NO_SUBSCRIPTION_STATUS`: No status exists. This is the status when the phone is not a valid E164 phone. * - `NOT_SET`: No status specified. Default when the phone is a valid E164 phone. * - `PENDING`: Subscription confirmation was requested, * but recipient hasn't confirmed yet. * - `SUBSCRIBED`: Recipient has opted in to SMS messages. * - `UNSUBSCRIBED`: Recipient has opted out of SMS messages. * @readonly */ subscriptionStatus?: SubscriptionStatus; /** * Primary phone number. * * This property reflects the phone number in `info.phones` * where `primary` is `true`. * @readonly */ phone?: string | null; } export declare enum PhoneDeliverabilityStatus { NO_PHONE_DELIVERABILITY_STATUS = "NO_PHONE_DELIVERABILITY_STATUS", NOT_SET = "NOT_SET" } export interface MemberInfo { /** Member ID */ memberId?: string | null; /** Signup date */ signupDate?: Date | null; /** Login email */ email?: string | null; /** Indicate whether the email is verified */ emailVerified?: boolean | null; /** Indicates whether the member is required to verify their email */ emailVerificationRequired?: boolean | null; /** * Member status. * - `PENDING`: Member created and is waiting for approval by site owner. * - `ACTIVE`: Member can log in to the site. * - `OFFLINE`: Member is a [managed writer](https://support.wix.com/en/article/wix-blog-adding-managed-writers-to-your-blog) for the site blog and cannot log in to the site. * - `BLOCKED': Member is blocked and cannot log in to the site. */ status?: MemberStatus; /** Profile info */ profileInfo?: ProfileInfo; /** User info */ userInfo?: UserInfo; /** Session info */ sessionInfo?: SessionInfo; /** Group info */ groupInfo?: GroupInfo; } export declare enum MemberStatus { PENDING = "PENDING", ACTIVE = "ACTIVE", DELETED = "DELETED", BLOCKED = "BLOCKED", OFFLINE = "OFFLINE" } export interface ProfileInfo { /** Nickname */ nickname?: string | null; /** Privacy status */ privacyStatus?: PrivacyStatus; /** Indicate whether the member is reported */ reported?: boolean | null; /** Indicate whether the member is muted */ muted?: boolean | null; /** Profile photo */ photo?: Image; } export declare enum PrivacyStatus { PRIVATE = "PRIVATE", PUBLIC = "PUBLIC" } export interface UserInfo { /** User ID */ userId?: string; /** The user's role on the website */ role?: Role; } export declare enum Role { UNSPECIFIED_ROLE = "UNSPECIFIED_ROLE", OWNER = "OWNER", CONTRIBUTOR = "CONTRIBUTOR" } export interface SessionInfo { /** Last time the member logged in to the website */ lastWebLogin?: Date | null; /** Last time the member logged in to one of the mobile apps */ lastMobileLogin?: Date | null; /** List of mobile apps that the member has ever logged in to */ mobileAppNames?: string[]; } export interface GroupInfo { /** Group IDs */ groupIds?: string[]; } export interface ContactSubmitted { /** Pass through data, submitted with the contact */ passThroughData?: string | null; /** Submitted activity */ activity?: ContactActivity; /** Submitted Contact (after processing) */ contact?: Contact; } export interface ContactChanged { /** The Contact before the changes */ previousContact?: Contact; /** The Contact after the changes */ currentContact?: Contact; } export interface ContactEmailSubscriptionUpdated { /** The updated contact ID. */ contactId?: string; /** The revision of the contact. */ revision?: number; /** The primary email of the contact with the updated subscription and deliverability status. */ primaryEmail?: PrimaryEmail; /** Date and time the contact was updated with the email subscription or deliverability status. */ updatedDate?: Date | null; } export interface ContactPhoneSubscriptionUpdated { /** The updated contact ID. */ contactId?: string; /** The revision of the contact. */ revision?: number; /** The primary phone of the contact with the updated subscription status. */ primaryPhone?: PrimaryPhone; /** Date and time the contact was updated with the SMS subscription status. */ updatedDate?: Date | null; } /** * This message is an internal message used by this app and it is used to trigger * the update of the subscription status of the contact asynchronously. * It is published after a contact is created/updated/merged. */ export interface ContactPrimaryInfoUpdated { /** The updated contact ID. */ contactId?: string; /** Indication whether the primary email was updated. */ primaryEmailUpdated?: boolean; /** Indication whether primary phone was updated. */ primaryPhoneUpdated?: boolean; /** previous primary email subscription status */ previousPrimaryEmailSubscriptionStatus?: PrimarySubscriptionStatus; /** previous primary phone subscription status */ previousPrimaryPhoneSubscriptionStatus?: PrimarySubscriptionStatus; } export interface PrimarySubscriptionStatus { /** subscription status */ subscriptionStatus?: SubscriptionStatus; } /** * This message is an internal message used by this app and it is used to trigger * the update of the contact's last activity is done asynchronously. */ export interface LastActivityUpdate { /** The contact ID. */ contactId?: string; /** Activity date. */ activityDate?: Date | null; /** Activity translation key. */ activityTranslationKey?: string; /** Activity icon. */ icon?: string | null; } /** Contact creation options. */ export interface CreateContactRequest { /** Contact info. */ info: ContactInfo; /** * Controls whether the call will succeed * if the new contact information contains an email or a phone number already used by another contact. * * If set to `true`, * the call will succeed even if an email address or phone number is used by another contact. * If set to `false`, * the call will fail if the given email address is used by another contact or, * if the email address is not given and the given phone number is used by another contact. * * Default: `false` */ allowDuplicates?: boolean; } /** Contact. */ export interface CreateContactResponse { /** Contact. */ contact?: Contact; } export interface DuplicateContactExists { duplicateContactId?: string | null; duplicateEmail?: string | null; duplicatePhone?: string | null; } export interface UpdateContactRequest { /** ID of the contact to update. */ contactId: string; /** * Revision number. * When updating, include the existing `revision` * to prevent conflicting updates. */ revision: number | null; /** * Controls whether the call will succeed * if the new contact information contains an email or a phone number already used by another contact. * * If set to `true`, * the call will succeed even if an email address or phone number is used by another contact. * If set to `false`, * the call will fail if the given email address is used by another contact or, * if the email address is not given and the given phone number is used by another contact. * * Default: `false` */ allowDuplicates?: boolean; /** Contact info. */ info: ContactInfo; } /** Updated contact. */ export interface UpdateContactResponse { /** Updated contact. */ contact?: Contact; } export interface MergeContactsRequest { /** Target contact ID. */ targetContactId: string; /** * Target contact revision number, which increments by 1 each time the contact is updated. * To prevent conflicting changes, * the target contact's current `revision` must be specified. */ targetContactRevision: number | null; /** * IDs of up to 5 contacts to merge into the target contact. * When you merge more than one source contact, * the first source is given precedence, then the second, and so on. */ sourceContactIds?: string[]; } export interface MergeContactsResponse { /** Updated target contact. */ contact?: Contact; } export interface ContactMerged { /** ID of the contact the source contacts were merged into. */ targetContactId?: string; /** IDs of contacts that were merged into the target contact. */ sourceContactIds?: string[]; /** Updated target contact. */ targetContact?: Contact; } export interface PreviewMergeContactsRequest { /** Target contact ID. */ targetContactId?: string; /** * IDs of up to 5 contacts to merge into the target contact. * When you merge more than one source contact, * the first source is given precedence, then the second, and so on. */ sourceContactIds?: string[]; } export interface PreviewMergeContactsResponse { /** Preview of the updated target contact. */ contact?: Contact; } export interface DeleteContactRequest { /** ID of the contact to delete. */ contactId: string; } export interface DeleteContactResponse { } export interface LabelContactRequest { /** ID of the contact to add labels to. */ contactId: string; /** * List of label keys to add to the contact. * * Label keys must exist to be added to the contact. * Use the Labels API to create or retrieve labels. */ labelKeys: string[]; } /** Updated contact. */ export interface LabelContactResponse { /** Updated contact. */ contact?: Contact; } export interface UnlabelContactRequest { /** ID of the contact to remove labels from. */ contactId: string; /** List of label keys to remove from the contact. */ labelKeys: string[]; } /** Updated contact. */ export interface UnlabelContactResponse { /** Updated contact. */ contact?: Contact; } export interface LabelAndUnlabelContactRequest { /** Contact ID. */ contactId?: string; /** * List of label keys to add to the contact. * * Label keys must exist to be added to the contact. * Contact labels can be created or retrieved with * [Find or Create Label](https://dev.wix.com/api/rest/contacts/labels/find-or-create-label) * or * [List Labels](https://dev.wix.com/api/rest/contacts/labels/list-labels). */ labelKeysToAdd?: string[]; /** List of label keys to remove from the contact. */ labelKeysToRemove?: string[]; } export interface LabelAndUnlabelContactResponse { /** Updated contact. */ contact?: Contact; } export interface ListContactsRequest { /** [Sort order](https://dev.wix.com/api/rest/contacts/contacts/sort-and-filter). */ sort?: Sorting; /** [Pagination](https://dev.wix.com/api/rest/getting-started/pagination), defaults to offset = 0 and limit = 50 (max limit 1,000). */ paging?: Paging; /** * List of projected fields to return. * If both `fields` and `fieldsets` are sent in the request, * the union of both lists is returned. * `id` and `revision` are always returned. * * Supported properties: * `source`, `createdDate`, `updatedDate`, `lastActivity`, `primaryInfo`, * `info.name`, `info.emails`, `info.phones`, `info.addresses`, `info.company`, * `info.jobTitle`, `info.picture`, `info.birthdate`, `info.locale`, * `info.labelKeys`, `info.locations`, `info.extendedFields` */ fields?: string[]; fieldsets?: ContactFieldSet[]; } export interface Sorting { /** * Field to sort by. * * Supported properties: * `createdDate`, `lastActivity.activityDate`, `primaryInfo.email`, `info.name.first`, `info.name.last`, `info.company`, * `info.jobTitle`, `info.birthdate` */ fieldName?: string; /** * Sort order. * Use `ASC` for ascending order or `DESC` for descending order. * * Defaults to `ASC`. */ order?: SortOrder; } export declare enum SortOrder { ASC = "ASC", DESC = "DESC" } export interface Paging { /** * Number of items to return. Learn more about pagination in API Query Language([SDK](https://dev.wix.com/docs/sdk/articles/work-with-the-sdk/api-query-language)|[REST](https://dev.wix.com/docs/rest/articles/getting-started/api-query-language#paging). * * Default: `50`.
* Maximum: `1000`. */ limit?: number | null; /** Number of items to skip in the current sort order. */ offset?: number | null; } export declare enum ContactFieldSet { /** name, primaryEmail, primaryPhone */ BASIC = "BASIC", /** name, phones, emails, addresses */ COMMUNICATION_DETAILS = "COMMUNICATION_DETAILS", /** name, primaryInfo(email, phone), extendedFields */ EXTENDED = "EXTENDED", /** Full contact object */ FULL = "FULL" } /** List of contacts. */ export interface ListContactsResponse { /** List of contacts. */ contacts?: Contact[]; /** Details on the paged set of results returned. */ pagingMetadata?: PagingMetadata; } export interface PagingMetadata { /** The number of items returned in this response. */ count?: number | null; /** The offset which was requested. */ offset?: number | null; /** The total number of items that match the query. */ total?: number | null; /** A flag that indicates the server failed to calculate 'total' field. */ tooManyToCount?: boolean | null; } export interface QueryContactsRequest { /** * Plain text search for an exact match. * * Supported properties: * `info.name.first`, `info.name.last`, `info.emails.email`, `info.phones.phone` * * Max: 100 characters */ search?: string | null; /** Query options. */ query?: Query; } export interface Query { /** * Filter object. * See [API Query Language](https://dev.wix.com/api/rest/getting-started/api-query-language) * for more information. * * For a detailed list of supported filters, see * [Supported Filters](https://dev.wix.com/api/rest/contacts/contacts/supported-filters). */ filter?: Record | null; /** * Sorting options. * See [Sorting and Paging](https://dev.wix.com/api/rest/getting-started/pagination) * for more information. * * Max: 1 sort object */ sort?: Sorting[]; /** Pagination options. */ paging?: Paging; /** * List of projected fields to return. * If both `fields` and `fieldsets` are sent in the request, * the union of both lists is returned. * `id` and `revision` are always returned. * * Supported properties: * `source`, `createdDate`, `updatedDate`, `lastActivity`, `primaryInfo`, * `info.name`, `info.emails`, `info.phones`, `info.addresses`, `info.company`, * `info.jobTitle`, `info.picture`, `info.birthdate`, `info.locale`, * `info.labelKeys`, `info.locations`, `info.extendedFields` */ fields?: string[]; /** * Predefined sets of fields to return. * If both `fields` and `fieldsets` are sent in the request, * the union of both lists is returned. * * - `BASIC`: Returns `id`, `revision`, `primaryInfo`, `info.name`. * - `COMMUNICATION_DETAILS`: Returns `id`, `revision`, `primaryInfo`, `info.name`, `info.emails`, `info.phones`, `info.addresses`. * - `EXTENDED`: Returns `id`, `revision`, `primaryInfo`, `info.name`, `info.extendedFields`. * - `FULL`: Returns all fields. * * Default: If `fields` is omitted from the request, `FULL`. */ fieldsets?: ContactFieldSet[]; } /** List of contacts. */ export interface QueryContactsResponse { /** List of contacts. */ contacts?: Contact[]; /** Details on the paged set of results returned. */ pagingMetadata?: PagingMetadata; } export interface ListFacetsRequest { /** Pagination options. */ paging?: Paging; /** Language for localization. */ language?: string | null; } export interface ListFacetsResponse { /** List of facets. */ facets?: ContactsFacet[]; /** Details on the paged set of results returned. */ pagingMetadata?: PagingMetadata; } export interface ContactsFacet { /** Type of facet. */ facetType?: ContactsFacetType; /** * Scope for facet keys. * When a facet key exists in a namespace, * each key is unique within that namespace. * * Currently, facets not created by Wix are in the `custom` namespace. */ namespace?: string | null; /** Human-readable display name. */ namespaceDisplayName?: string | null; /** Facet key, automatically generated. */ facetKey?: string | null; /** Human-readable name. Shown in the Wix UI. */ facetDisplayName?: string | null; /** Number of contacts the facet applies to. */ count?: number | null; /** Filter used to query contacts of this facet. */ queryFilter?: Record | null; } export declare enum ContactsFacetType { UNKNOWN = "UNKNOWN", ALL_CONTACTS = "ALL_CONTACTS", NOT_LABELED = "NOT_LABELED", LABEL = "LABEL", SUBSCRIPTION_STATUS = "SUBSCRIPTION_STATUS", MEMBERSHIP_STATUS = "MEMBERSHIP_STATUS" } export interface QueryFacetsRequest { /** Pagination options. */ paging?: Paging; /** Language for localization. */ language?: string | null; /** * Filterable fields: * - `'info.extendedFields.emailSubscriptions.effectiveEmail'` (`$exists`). * - `'info.extendedFields.emailSubscriptions.subscriptionStatus'` (`$eq`, `$ne`, `$in`, `$nin`). * - `'info.extendedFields.emailSubscriptions.deliverabilityStatus'` (`$eq`, `$ne`, `$in`, `$nin`). */ filter?: Record | null; } export interface QueryFacetsResponse { /** List of facets. */ facets?: ContactsFacet[]; /** Details on the paged set of results returned. */ pagingMetadata?: PagingMetadata; } export interface BulkDeleteContactsRequest { /** * Filter object. * * Possible filters: * `$eq`, `$exists`, `$gt`, `$gte`, `$hasAll`, `$hasSome`, `$in`, `$lt`, `$lte`, `$ne`, `$startsWith`. * * See [Sort, Filter, and Search](https://dev.wix.com/docs/rest/crm/members-contacts/contacts/contacts/contact-v4/sort-filter-and-search) * for a detailed list of supported filters for contact properties, extended fields, and custom fields. * * * Example: * `{ "filter": { "info.name.last": "Smith" } }` */ filter?: Record | null; /** * Plain text search for an exact match, up to 100 characters. * * Searchable fields: * * - `info.name.first` * - `info.name.last` * - `info.emails.email` * - `info.phones.phone` */ search?: string | null; } export interface BulkDeleteContactsResponse { /** * Bulk job ID. * The job's status can be retrieved with Get Bulk Job. */ jobId?: string; } export interface BulkUpdateContactsRequest { /** * Filter object. * * Possible filters: * `$eq`, `$exists`, `$gt`, `$gte`, `$hasAll`, `$hasSome`, `$in`, `$lt`, `$lte`, `$ne`, `$startsWith`. * * See [Sort, Filter, and Search](https://dev.wix.com/docs/rest/crm/members-contacts/contacts/contacts/contact-v4/sort-filter-and-search) * for a detailed list of supported filters for contact properties, extended fields, and custom fields. * * * Example: * `{ "filter": { "info.name.last": "Smith" } }` */ filter?: Record | null; /** * Plain text search for an exact match, up to 100 characters. * * Searchable fields: * * - `info.name.first` * - `info.name.last` * - `info.emails.email` * - `info.phones.phone` */ search?: string | null; /** Contact info. */ info?: ContactInfo; } export interface BulkUpdateContactsResponse { /** * Bulk job ID. * The job's status can be retrieved with Get Bulk Job. */ jobId?: string; } export interface BulkLabelAndUnlabelContactsRequest { /** * Filter options. * Labels will be removed from contacts that meet the `filter` and `search` criteria. * * See * [Field Support for Filtering, Sorting, and Searching](https://dev.wix.com/docs/rest/crm/members-contacts/contacts/contacts/contact-v4/sort-filter-and-search) * for a list of supported filters and fields. */ filter?: Record | null; /** * Plain text search for an exact match, up to 100 characters. * Labels will be removed from contacts that meet the `filter` and `search` criteria. * * See * [Field Support for Filtering, Sorting, and Searching](https://dev.wix.com/docs/rest/crm/members-contacts/contacts/contacts/contact-v4/sort-filter-and-search) * for a list of searchable fields. */ search?: string | null; /** * List of label keys to add to the contacts. * * Label keys must exist to be added to the contact. * Contact labels can be created or retrieved with * [Find or Create Label](https://dev.wix.com/api/rest/contacts/labels/find-or-create-label) * or * [List Labels](https://dev.wix.com/api/rest/contacts/labels/list-labels) */ labelKeysToAdd?: string[]; /** List of label keys to remove from the contacts. */ labelKeysToRemove?: string[]; } export interface BulkLabelAndUnlabelContactsResponse { /** * Bulk job ID. * The job's status can be retrieved with Get Bulk Job. */ jobId?: string; } export interface BulkUpsertContactsRequest { info?: ContactInfo[]; returnFullEntity?: boolean; } export interface BulkUpsertContactsResponse { results?: Item[]; metadata?: BulkUpsertContactsResponseMetadata; } export declare enum Action { UNKNOWN = "UNKNOWN", UPDATED = "UPDATED", CREATED = "CREATED" } export interface Error { /** Error code. */ code?: string; /** Error details. */ message?: string | null; } export interface Metadata { id?: string | null; originalIndex?: number; action?: Action; success?: boolean; error?: Error; } export interface Item { contact?: Contact; metadata?: Metadata; } export interface BulkUpsertContactsResponseMetadata { totalSuccess?: number; totalFailure?: number; totalCreated?: number; totalUpdated?: number; } export interface UpsertContactRequest { info?: ContactInfo; } export interface UpsertContactResponse { /** Upserted contact. */ contact?: Contact; action?: UpsertContactResponseAction; } export declare enum UpsertContactResponseAction { UNKNOWN = "UNKNOWN", UPDATED = "UPDATED", CREATED = "CREATED" } export interface GeneratePictureUploadUrlRequest { /** ID of the contact whose picture is being updated. */ contactId?: string; /** * Mime Type. Must be one of: * `image/png`, `image/jpeg`. * Defaults to `image/png`. */ mimeType?: string | null; } export interface GeneratePictureUploadUrlResponse { /** URL to upload the image */ uploadUrl?: string; } export interface GetContactRequest { /** ID of the contact to retrieve. */ id: string; /** * List of projected fields to return. * If both `fields` and `fieldsets` are sent in the request, * the union of both lists is returned. * `id` and `revision` are always returned. * * Supported properties: * `source`, `createdDate`, `updatedDate`, `lastActivity`, `primaryInfo`, * `info.name`, `info.emails`, `info.phones`, `info.addresses`, `info.company`, * `info.jobTitle`, `info.picture`, `info.birthdate`, `info.locale`, * `info.labelKeys`, `info.locations`, `info.extendedFields` */ fields?: string[]; /** * Predefined sets of fields to return. * If both `fields` and `fieldsets` are sent in the request, * the union of both lists is returned. * * - `BASIC`: Returns `id`, `revision`, `primaryInfo`, `info.name`. * - `COMMUNICATION_DETAILS`: Returns `id`, `revision`, `primaryInfo`, `info.name`, `info.emails`, `info.phones`, `info.addresses`. * - `EXTENDED`: Returns `id`, `revision`, `primaryInfo`, `info.name`, `info.extendedFields`. * - `FULL`: Returns all fields. * * Default: If `fields` is omitted from the request, `FULL`. */ fieldsets?: ContactFieldSet[]; } /** The requested contact. */ export interface GetContactResponse { /** The requested contact. */ contact?: Contact; /** Contact response type. */ responseType?: GetContactResponseType; } export declare enum GetContactResponseType { /** The specified contact was returned. */ REGULAR = "REGULAR", /** Not used. */ IMPLICIT = "IMPLICIT", /** The specified contact was previously merged with another contact and the new contact was returned. */ MERGED = "MERGED" } export interface SyncSubmitContactRequest { contactInfo?: ContactInfo; activity?: ContactActivity; passThroughData?: string | null; contactId?: string; submitOperation?: SubmitOperation; /** Need to resolve source in allocator, because of server sign */ sourceType?: ContactSourceType; sourceId?: string | null; hideFromContactList?: boolean; } export declare enum SubmitOperation { UNKNOWN = "UNKNOWN", CREATE = "CREATE", UPDATE = "UPDATE" } export interface SyncSubmitContactResponse { } export interface CountContactsRequest { } export interface CountContactsResponse { count?: number; } export interface SearchContactsRequest { /** Search object. Encapsulates filter, sorting, paging and other details */ search?: Search; } export interface Search extends SearchPagingMethodOneOf { /** Cursor pointing to page of results. 'cursorPaging.cursor' can not be used together with 'filter' or 'sort' */ cursorPaging?: CursorPaging; /** A filter object. See documentation [here](https://bo.wix.com/wix-docs/rnd/platformization-guidelines/api-query-language#platformization-guidelines_api-query-language_defining-in-protobuf) */ filter?: Record | null; /** Sort object in the form [{"fieldName":"sortField1"},{"fieldName":"sortField2","direction":"DESC"}] */ sort?: Sorting[]; /** * List of projected fields to return. * * If used in the request, * all the fields contained in `fields` and `fieldsets` are returned. * If left blank, `fieldsets` is used to determine which fields to return. * * For a list of valid projected fields, see * [Valid Contact Projection Fields](https://dev.wix.com/api/rest/contacts/contacts/fieldsets-and-projected-fields#contacts_contacts_fieldsets-and-projected-fields_valid-contact-projection-fields). */ fields?: string[]; /** * Predefined sets of fields to return. * * Defaults to `FULL`. * Ignored if left empty when `fields` is used in the request. * * For more information, * see [Contact Fieldsets](https://dev.wix.com/api/rest/contacts/contacts/fieldsets-and-projected-fields#contacts_contacts_fieldsets-and-projected-fields_contact-fieldsets). */ fieldsets?: string[]; /** free text to match in searchable fields */ search?: SearchDetails; } /** @oneof */ export interface SearchPagingMethodOneOf { /** Cursor pointing to page of results. 'cursorPaging.cursor' can not be used together with 'filter' or 'sort' */ cursorPaging?: CursorPaging; } export interface SearchDetails { /** boolean search mode. Default is `OR` */ mode?: Mode; /** search term or expression */ expression?: string | null; /** * fields to search in. if empty - server will search in own default fieldsDefault searchable fields: * * - `info.name.first` * - `info.name.last` * - `info.emails.email` * - `info.phones.phone` */ fields?: string[]; /** flag if should use auto fuzzy search (allowing typos by a managed proximity algorithm) */ fuzzy?: boolean; } export declare enum Mode { /** any */ OR = "OR", /** all */ AND = "AND" } export interface CursorPaging { /** The number of contacts to load (default = 50, max = 1000) */ limit?: number | null; /** Cursor returned in last query response. Should not be provided on first page request */ cursor?: string | null; } export interface SearchContactsResponse { /** List of contacts. */ contacts?: Contact[]; /** Details on the paged set of results returned. */ cursorPagingMetadata?: CursorPagingMetadata; } /** This is the preferred message for cursor-paging enabled services */ export interface CursorPagingMetadata { /** Number of items returned in the response. */ count?: number | null; /** Cursor strings that point to the next page, previous page, or both. */ cursors?: Cursors; /** * Whether there are more pages to retrieve following the current page. * * + `true`: Another page of results can be retrieved. * + `false`: This is the last page. */ hasNext?: boolean | null; } export interface Cursors { /** Cursor pointing to next result page */ next?: string | null; /** Cursor pointing to previous result page */ prev?: string | null; } export interface BulkAddSegmentToContactsRequest { /** Segment id */ segmentId?: string; /** List of Contact ids */ contactIds?: string[]; /** List of existing segment ids */ existsSegmentIds?: string[]; } export interface BulkAddSegmentToContactsResponse { /** List of action results */ results?: ItemMetadata[]; /** Metadata on the bulk action */ bulkActionMetadata?: BulkActionMetadata; } export interface ItemMetadata { /** Item ID. Should always be available, unless it's impossible (for example, when failing to create an item). */ id?: string | null; /** Index of the item within the request array. Allows for correlation between request and response items. */ originalIndex?: number; /** Whether the requested action was successful for this item. When `false`, the `error` field is populated. */ success?: boolean; /** Details about the error in case of failure. */ error?: ApplicationError; } export interface ApplicationError { /** Error code. */ code?: string; /** Description of the error. */ description?: string; /** Data related to the error. */ data?: Record | null; } export interface BulkActionMetadata { /** Number of items that were successfully processed. */ totalSuccesses?: number; /** Number of items that couldn't be processed. */ totalFailures?: number; /** Number of failures without details because detailed failure threshold was exceeded. */ undetailedFailures?: number; } export interface ContactAddedToSegment { /** Id of the segment to which the contact was added */ segmentId?: string; /** The contact that was added */ contact?: Contact; } export interface BulkRemoveSegmentFromContactsRequest { /** Segment id */ segmentId?: string; /** List of Contact ids */ contactIds?: string[]; } export interface BulkRemoveSegmentFromContactsResponse { /** List of action results */ results?: ItemMetadata[]; /** Metadata on the bulk action */ bulkActionMetadata?: BulkActionMetadata; } export interface ContactRemovedFromSegment { /** Id of the segment from which the contact was removed */ segmentId?: string; /** The contact that was removed */ contact?: Contact; } export interface ListContactIdsBySegmentRequest { /** Segment id */ segmentId?: string; /** Cursor paging. */ cursorPaging?: CursorPaging; } export interface ListContactIdsBySegmentResponse { /** List of contact IDs */ contactIds?: string[]; /** Paging metadata */ cursorPagingMetadata?: CursorPagingMetadata; } export interface DomainEvent extends DomainEventBodyOneOf { createdEvent?: EntityCreatedEvent; updatedEvent?: EntityUpdatedEvent; deletedEvent?: EntityDeletedEvent; actionEvent?: ActionEvent; /** * Unique event ID. * Allows clients to ignore duplicate webhooks. */ id?: string; /** * Assumes actions are also always typed to an entity_type * Example: wix.stores.catalog.product, wix.bookings.session, wix.payments.transaction */ entityFqdn?: string; /** * This is top level to ease client code dispatching of messages (switch on entity_fqdn+slug) * This is although the created/updated/deleted notion is duplication of the oneof types * Example: created/updated/deleted/started/completed/email_opened */ slug?: string; /** ID of the entity associated with the event. */ entityId?: string; /** Event timestamp in [ISO-8601](https://en.wikipedia.org/wiki/ISO_8601) format and UTC time. For example: 2020-04-26T13:57:50.699Z */ eventTime?: Date | null; /** * Whether the event was triggered as a result of a privacy regulation application * (for example, GDPR). */ triggeredByAnonymizeRequest?: boolean | null; /** If present, indicates the action that triggered the event. */ originatedFrom?: string | null; /** * A sequence number defining the order of updates to the underlying entity. * For example, given that some entity was updated at 16:00 and than again at 16:01, * it is guaranteed that the sequence number of the second update is strictly higher than the first. * As the consumer, you can use this value to ensure that you handle messages in the correct order. * To do so, you will need to persist this number on your end, and compare the sequence number from the * message against the one you have stored. Given that the stored number is higher, you should ignore the message. */ entityEventSequence?: string | null; } /** @oneof */ export interface DomainEventBodyOneOf { createdEvent?: EntityCreatedEvent; updatedEvent?: EntityUpdatedEvent; deletedEvent?: EntityDeletedEvent; actionEvent?: ActionEvent; } export interface EntityCreatedEvent { entityAsJson?: string; /** Indicates the event was triggered by a restore-from-trashbin operation for a previously deleted entity */ restoreInfo?: RestoreInfo; } export interface RestoreInfo { deletedDate?: Date | null; } export interface EntityUpdatedEvent { /** * Since platformized APIs only expose PATCH and not PUT we can't assume that the fields sent from the client are the actual diff. * This means that to generate a list of changed fields (as opposed to sent fields) one needs to traverse both objects. * We don't want to impose this on all developers and so we leave this traversal to the notification recipients which need it. */ currentEntityAsJson?: string; } export interface EntityDeletedEvent { /** Entity that was deleted */ deletedEntityAsJson?: string | null; } export interface ActionEvent { bodyAsJson?: string; } export interface MessageEnvelope { /** App instance ID. */ instanceId?: string | null; /** Event type. */ eventType?: string; /** The identification type and identity data. */ identity?: IdentificationData; /** Stringify payload. */ data?: string; } export interface IdentificationData extends IdentificationDataIdOneOf { /** ID of a site visitor that has not logged in to the site. */ anonymousVisitorId?: string; /** ID of a site visitor that has logged in to the site. */ memberId?: string; /** ID of a Wix user (site owner, contributor, etc.). */ wixUserId?: string; /** ID of an app. */ appId?: string; /** @readonly */ identityType?: WebhookIdentityType; } /** @oneof */ export interface IdentificationDataIdOneOf { /** ID of a site visitor that has not logged in to the site. */ anonymousVisitorId?: string; /** ID of a site visitor that has logged in to the site. */ memberId?: string; /** ID of a Wix user (site owner, contributor, etc.). */ wixUserId?: string; /** ID of an app. */ appId?: string; } export declare enum WebhookIdentityType { UNKNOWN = "UNKNOWN", ANONYMOUS_VISITOR = "ANONYMOUS_VISITOR", MEMBER = "MEMBER", WIX_USER = "WIX_USER", APP = "APP" } interface ContactSourceNonNullableFields { sourceType: ContactSourceType; } interface ContactActivityNonNullableFields { activityType: ContactActivityType; } interface ImageNonNullableFields { id: string; url: string; height: number; width: number; } interface ContactEmailNonNullableFields { tag: EmailTag; email: string; } interface ContactEmailsWrapperNonNullableFields { items: ContactEmailNonNullableFields[]; } interface ContactPhoneNonNullableFields { tag: PhoneTag; phone: string; } interface ContactPhonesWrapperNonNullableFields { items: ContactPhoneNonNullableFields[]; } interface StreetAddressNonNullableFields { number: string; name: string; apt: string; } interface SubdivisionNonNullableFields { code: string; name: string; type: SubdivisionType; } interface AddressNonNullableFields { streetAddress?: StreetAddressNonNullableFields; subdivisions: SubdivisionNonNullableFields[]; } interface ContactAddressNonNullableFields { tag: AddressTag; address?: AddressNonNullableFields; } interface ContactAddressesWrapperNonNullableFields { items: ContactAddressNonNullableFields[]; } interface AssigneesWrapperNonNullableFields { items: string[]; } interface LabelsWrapperNonNullableFields { items: string[]; } interface LocationsWrapperNonNullableFields { items: string[]; } interface ContactPictureNonNullableFields { image?: ImageNonNullableFields; imageProvider: ImageProvider; } interface ContactInfoNonNullableFields { emails?: ContactEmailsWrapperNonNullableFields; phones?: ContactPhonesWrapperNonNullableFields; addresses?: ContactAddressesWrapperNonNullableFields; assignedUserIds?: AssigneesWrapperNonNullableFields; labelKeys?: LabelsWrapperNonNullableFields; locations?: LocationsWrapperNonNullableFields; picture?: ContactPictureNonNullableFields; } interface SegmentsWrapperNonNullableFields { items: string[]; } interface PrimaryEmailNonNullableFields { subscriptionStatus: SubscriptionStatus; deliverabilityStatus: EmailDeliverabilityStatus; } interface PrimaryPhoneNonNullableFields { subscriptionStatus: SubscriptionStatus; deliverabilityStatus: PhoneDeliverabilityStatus; } interface ProfileInfoNonNullableFields { privacyStatus: PrivacyStatus; photo?: ImageNonNullableFields; } interface UserInfoNonNullableFields { userId: string; role: Role; } interface SessionInfoNonNullableFields { mobileAppNames: string[]; } interface GroupInfoNonNullableFields { groupIds: string[]; } interface MemberInfoNonNullableFields { status: MemberStatus; profileInfo?: ProfileInfoNonNullableFields; userInfo?: UserInfoNonNullableFields; sessionInfo?: SessionInfoNonNullableFields; groupInfo?: GroupInfoNonNullableFields; } interface ContactNonNullableFields { id: string; revision: number; source?: ContactSourceNonNullableFields; lastActivity?: ContactActivityNonNullableFields; picture?: ImageNonNullableFields; info?: ContactInfoNonNullableFields; segments?: SegmentsWrapperNonNullableFields; primaryEmail?: PrimaryEmailNonNullableFields; primaryPhone?: PrimaryPhoneNonNullableFields; memberInfo?: MemberInfoNonNullableFields; } export interface CreateContactResponseNonNullableFields { contact?: ContactNonNullableFields; } export interface UpdateContactResponseNonNullableFields { contact?: ContactNonNullableFields; } export interface MergeContactsResponseNonNullableFields { contact?: ContactNonNullableFields; } export interface LabelContactResponseNonNullableFields { contact?: ContactNonNullableFields; } export interface UnlabelContactResponseNonNullableFields { contact?: ContactNonNullableFields; } export interface QueryContactsResponseNonNullableFields { contacts: ContactNonNullableFields[]; } export interface GetContactResponseNonNullableFields { contact?: ContactNonNullableFields; responseType: GetContactResponseType; } export {};