> Portal Navigation: > > - Append `.md` to any URL under `https://dev.wix.com/docs/` to get its markdown version. > - Pages are either content pages (article or reference text) or menu pages (a list of links to child pages). > - To get a menu page, truncate any URL to a parent path and append `.md` (e.g. `https://dev.wix.com/docs/sdk.md`, `https://dev.wix.com/docs/sdk/core-modules.md`). > - Top-level index of all portals: https://dev.wix.com/docs/llms.txt > - Full concatenated docs: https://dev.wix.com/docs/llms-full.txt # Package: accounts # Namespace: imports # Webhook link: https://dev.wix.com/docs/api-reference/crm/loyalty-program/accounts/imports/loyalty-import-created.md ## Introduction Triggered when a loyalty import is created. --- ## REST API ### Schema ``` Webhook: Loyalty Import Created Description: Triggered when a loyalty import is created. Event body: - name: id | type: string | description: Unique event ID. Allows clients to ignore duplicate events. - name: entityFqdn | type: string | description: Fully qualified domain name of the entity associated with the event. - name: slug | type: string | description: Event name. - name: entityId | type: string | description: ID of the entity associated with the event. - name: eventTime | type: string (date-time) | description: Event timestamp. - name: triggeredByAnonymizeRequest | type: boolean | description: Whether the event was triggered as a result of a privacy regulation application such as GDPR. - name: originatedFrom | type: string | description: If present, indicates the action that triggered the event. - name: createdEvent | type: object | description: Created event details. - name: entity | type: LoyaltyImport | description: The created entity. - name: id | type: string | description: The GUID of the import. - name: asyncImportJobId | type: string | description: GUID of the asynchronous import job associated with this import. - name: revision | type: string | description: Revision number, which increments by 1 each time the loyalty import is updated. To prevent conflicting changes, the current `revision` must be passed when updating the loyalty import. Ignored when creating a loyalty import. - name: createdDate | type: string | description: Date and time the loyalty import was created. - name: updatedDate | type: string | description: Date and time the loyalty import was last updated. - name: status | type: ImportStatus | description: Current status of the import process. - enum: - UNKNOWN: Status is unknown or not specified. - INITIATED: The import has initiated but processing hasn't started yet. - PARSING: The system is currently parsing the import file. - PARSED: The import file has been successfully parsed and is ready to import. - IMPORTING: The system is currently importing the parsed data. - IMPORTED: The import process is complete. This status indicates the process finished, but doesn't guarantee all data imported successfully. - FAILED: The import process has failed. - name: fileMetadata | type: FileMetadata | description: Metadata of the uploaded file containing loyalty points data. - name: size | type: integer | description: Size of the uploaded file in bytes. Max: `10 MB`. - name: name | type: string | description: Name of the uploaded file. - name: url | type: string | description: URL of the uploaded file. - name: header | type: FileHeader | description: Column headings from the first row of the uploaded CSV file. - name: values | type: array | description: Column headings from the first row of the uploaded file. - name: headerMappingInfo | type: HeaderMappingInfo | description: Mapping between loyalty data fields and the corresponding columns in the uploaded file. Must include mappings for both `EMAIL` and `POINTS` to be valid. - name: headerMappings | type: array | description: Mappings between required loyalty data fields and file columns. Must contain exactly 2 mappings: one for `"EMAIL"` and one for `"POINTS"`. - name: columnName | type: ColumnName | description: The required loyalty data field that this mapping corresponds to. Must be either `"EMAIL"` or `"POINTS"`. - enum: - EMAIL: Column containing the customer's email address. - POINTS: Column containing the customer's loyalty point balance to be imported or updated. - name: columnIndex | type: integer | description: The zero-based index of the column in the uploaded file that contains the data for this loyalty field. For example, if the email addresses are in the second column of the CSV file, this value would be `1`. - name: sampleDataRows | type: array | description: Up to 5 sample rows from the import file, providing a preview of the data to be imported. - name: values | type: array | description: Values in one sample data row. Each value corresponds to a column in the CSV file. The number of values matches the number of columns in the file. - name: parseResult | type: ParseResult | description: Results of parsing the uploaded file, including the number of rows parsed and any parse errors. - name: parsedRowCount | type: integer | description: Number of rows parsed from the uploaded import file. - name: parseErrorReason | type: string | description: Reason code explaining why parsing failed, if applicable. - name: importResult | type: ImportResult | description: Results of the import process, including success and failure counts. - name: errorFileExists | type: boolean | description: Whether an error file detailing import failures is available for download. The file includes row-by-row import status, error reasons, and original data. - name: successCount | type: integer | description: Number of rows successfully imported. - name: failureCount | type: integer | description: Number of rows that failed to import due to errors. ``` ### Examples ```curl { "id": "52269077-05f2-4b59-ba4f-36ef8c4c1e11", "entityFqdn": "wix.loyalty.imports.v1.loyalty_import", "slug": "created", "entityId": "8046df3c-7575-4098-a5ab-c91ad8f33c47", "createdEvent": { "entityAsJson": "{\"loyaltyImport\":{\"id\":\"8046df3c-7575-4098-a5ab-c91ad8f33c47\",\"revision\":1,\"createdDate\":\"2019-10-30T17:22:10.299Z\",\"updatedDate\":\"2019-10-30T17:22:10.299Z\",\"loremUppercase\":\"LOREM UPPERCASE\",\"ipsum\":\"lorem ipsum\",\"businessAddress\":\"Pankivska 14a\"}}" }, "eventTime": "2020-10-18T13:40:58.304800Z", "triggeredByAnonymizeRequest": false } ``` --- ## JavaScript SDK ### Schema ``` Webhook: onLoyaltyImportCreated Description: Triggered when a loyalty import is created. Payload: LoyaltyImportCreatedEnvelope - name: entity | type: LoyaltyImport | description: none - name: _id | type: string | description: The GUID of the import. - name: asyncImportJobId | type: string | description: GUID of the asynchronous import job associated with this import. - name: revision | type: string | description: Revision number, which increments by 1 each time the loyalty import is updated. To prevent conflicting changes, the current `revision` must be passed when updating the loyalty import. Ignored when creating a loyalty import. - name: _createdDate | type: Date | description: Date and time the loyalty import was created. - name: _updatedDate | type: Date | description: Date and time the loyalty import was last updated. - name: status | type: ImportStatus | description: Current status of the import process. - enum: - UNKNOWN: Status is unknown or not specified. - INITIATED: The import has initiated but processing hasn't started yet. - PARSING: The system is currently parsing the import file. - PARSED: The import file has been successfully parsed and is ready to import. - IMPORTING: The system is currently importing the parsed data. - IMPORTED: The import process is complete. This status indicates the process finished, but doesn't guarantee all data imported successfully. - FAILED: The import process has failed. - name: fileMetadata | type: FileMetadata | description: Metadata of the uploaded file containing loyalty points data. - name: size | type: integer | description: Size of the uploaded file in bytes. Max: `10 MB`. - name: name | type: string | description: Name of the uploaded file. - name: url | type: string | description: URL of the uploaded file. - name: header | type: FileHeader | description: Column headings from the first row of the uploaded CSV file. - name: values | type: array | description: Column headings from the first row of the uploaded file. - name: headerMappingInfo | type: HeaderMappingInfo | description: Mapping between loyalty data fields and the corresponding columns in the uploaded file. Must include mappings for both `EMAIL` and `POINTS` to be valid. - name: headerMappings | type: array | description: Mappings between required loyalty data fields and file columns. Must contain exactly 2 mappings: one for `"EMAIL"` and one for `"POINTS"`. - name: columnName | type: ColumnName | description: The required loyalty data field that this mapping corresponds to. Must be either `"EMAIL"` or `"POINTS"`. - enum: - EMAIL: Column containing the customer's email address. - POINTS: Column containing the customer's loyalty point balance to be imported or updated. - name: columnIndex | type: integer | description: The zero-based index of the column in the uploaded file that contains the data for this loyalty field. For example, if the email addresses are in the second column of the CSV file, this value would be `1`. - name: sampleDataRows | type: array | description: Up to 5 sample rows from the import file, providing a preview of the data to be imported. - name: values | type: array | description: Values in one sample data row. Each value corresponds to a column in the CSV file. The number of values matches the number of columns in the file. - name: parseResult | type: ParseResult | description: Results of parsing the uploaded file, including the number of rows parsed and any parse errors. - name: parsedRowCount | type: integer | description: Number of rows parsed from the uploaded import file. - name: parseErrorReason | type: string | description: Reason code explaining why parsing failed, if applicable. - name: importResult | type: ImportResult | description: Results of the import process, including success and failure counts. - name: errorFileExists | type: boolean | description: Whether an error file detailing import failures is available for download. The file includes row-by-row import status, error reasons, and original data. - name: successCount | type: integer | description: Number of rows successfully imported. - name: failureCount | type: integer | description: Number of rows that failed to import due to errors. - name: metadata | type: EventMetadata | description: none - name: instanceId | type: string | description: App instance GUID. - name: eventType | type: string | description: Event type. - name: identity | type: IdentificationData | description: The identification type and identity data. - ONE-OF: - name: anonymousVisitorId | type: string | description: GUID of a site visitor that has not logged in to the site. - name: memberId | type: string | description: GUID of a site visitor that has logged in to the site. - name: wixUserId | type: string | description: GUID of a Wix user (site owner, contributor, etc.). - name: appId | type: string | description: GUID of an app. - name: identityType | type: WebhookIdentityType | description: - enum: UNKNOWN, ANONYMOUS_VISITOR, MEMBER, WIX_USER, APP - name: accountInfo | type: AccountInfo | description: Details related to the account - name: accountId | type: string | description: GUID of the Wix account associated with the event. - name: parentAccountId | type: string | description: GUID of the parent Wix account. Only included when accountId belongs to a child account. - name: siteId | type: string | description: GUID of the Wix site associated with the event. Only included when the event is tied to a specific site. - name: _id | type: string | description: Event GUID. With this GUID you can easily spot duplicated events and ignore them. - name: entityFqdn | type: string | description: Fully Qualified Domain Name of an entity. This is a unique identifier assigned to the API main business entities. For example, `wix.stores.catalog.product`, `wix.bookings.session`, `wix.payments.transaction`. - name: slug | type: string | description: Event action name, placed at the top level to make it easier for users to dispatch messages. For example: `created`/`updated`/`deleted`/`started`/`completed`/`email_opened`. - name: entityId | type: string | description: GUID of the entity associated with the event. - name: eventTime | type: Date | description: Event timestamp in [ISO-8601](https://en.wikipedia.org/wiki/ISO_8601) format and UTC time. For example, `2020-04-26T13:57:50.699Z`. - name: triggeredByAnonymizeRequest | type: boolean | description: Whether the event was triggered as a result of a privacy regulation application (for example, GDPR). - name: originatedFrom | type: string | description: If present, indicates the action that triggered the event. - name: entityEventSequence | type: string | description: A sequence number that indicates the order of updates to an entity. For example, if an entity was updated at 16:00 and then again at 16:01, the second update will always have a higher sequence number. You can use this number to make sure you're handling updates in the right order. Just save the latest sequence number on your end and compare it to the one in each new message. If the new message has an older (lower) number, you can safely ignore it. ``` ### Examples ```javascript import { imports } from '@wix/loyalty'; imports.onLoyaltyImportCreated((event) => { // handle your event here }); ``` ```javascript import { createClient, AppStrategy } from '@wix/sdk'; import { imports } from '@wix/loyalty'; const wixClient = createClient({ auth: AppStrategy({ appId: 'MY-APP-ID', publicKey: 'YOUR_APP_PUBLIC_KEY', }), modules: { imports, }, }); wixClient.imports.onLoyaltyImportCreated((event) => { // handle your event here }); ``` ---