Skip to content

Commit

Permalink
v4.0.1: Introduce export referrals and Deprecare v1 integration endpo…
Browse files Browse the repository at this point in the history
…ints (#17)

<i id="toc"></i>
## Summary
  - [Management API](#user-content-management-api)
    - [Introduce `ExportReferrals` Endpoint](#user-content-export-referral)
  - [Integration API](#user-content-integration-api)
    - [Deprecation of Integration API@v1 endpoints](#user-content-deprecation-v1)

<i id="management-api"></i>
## Management API

<i id="export-referral"></i>
### Introduce [`ExportReferrals`](https://docs.talon.one/management-api/#operation/exportReferrals) Endpoint

We introduced an endpoint to export referrals in an application or specific campaign as a CSV file.

Please consult [the endpoint reference](https://docs.talon.one/management-api/#operation/exportReferrals) in our developer docs for more details and parameters.

[☝️ Back to Table of Contents](#user-content-toc)

<i id="integration-api"></i>
## Integration API

<i id="deprecation-v1"></i>
### ⚠️⚠️ Deprecation Notice: Integration API@v1 endpoints
Like we mentioned in the last few releases and months, from version 4.0.1 we won't include api@v1 endpoints as part of the official SDK.
The endpoints that are now deprecated are:

 - [Update a Customer Session (V1)](https://github.com/talon-one/TalonOne.cs/blob/master/docs/IntegrationApi.md#updatecustomersession)
 - [Update a Customer Profile (V1)](https://github.com/talon-one/TalonOne.cs/blob/master/docs/IntegrationApi.md#updatecustomerprofile)

If you don't use these as part of your integration, please discard this section.

**We will not remove the endpoints**, and they will still be accessible for you to use as part of older SDK versions or custom calls over http.

We highly encourage migrating to the correspondent v2 endpoints for easier and more granular integration, as well as new features support (See [our developer docs section](https://docs.talon.one/Getting-Started/APIV2) about API V2.0).

[☝️ Back to Table of Contents](#user-content-toc)


## Commit Summary
* Initial Commit
* Fix csv export endpoints deserialization (custom handler in Exec and ExecAsync)
  • Loading branch information
altJake authored Aug 13, 2021
1 parent 2b23738 commit 96d226f
Show file tree
Hide file tree
Showing 132 changed files with 7,191 additions and 1,580 deletions.
27 changes: 21 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ The API is available at the same hostname as these docs. For example, if you are
This C# SDK is automatically generated by the [OpenAPI Generator](https://openapi-generator.tech) project:

- API version: 1.0.0
- SDK version: 4.0.0
- SDK version: 4.0.1
- Build package: org.openapitools.codegen.languages.CSharpNetCoreClientCodegen

<a name="frameworks-supported"></a>
Expand Down Expand Up @@ -300,18 +300,22 @@ All URIs are relative to *http://localhost*

Class | Method | HTTP request | Description
------------ | ------------- | ------------- | -------------
*IntegrationApi* | [**CreateAudienceV2**](docs/IntegrationApi.md#createaudiencev2) | **POST** /v2/audiences | Create audience
*IntegrationApi* | [**CreateCouponReservation**](docs/IntegrationApi.md#createcouponreservation) | **POST** /v1/coupon_reservations/{couponValue} | Create coupon reservation
*IntegrationApi* | [**CreateReferral**](docs/IntegrationApi.md#createreferral) | **POST** /v1/referrals | Create referral code for an advocate
*IntegrationApi* | [**CreateReferralsForMultipleAdvocates**](docs/IntegrationApi.md#createreferralsformultipleadvocates) | **POST** /v1/referrals_for_multiple_advocates | Create referral codes for multiple advocates
*IntegrationApi* | [**DeleteAudienceMembershipsV2**](docs/IntegrationApi.md#deleteaudiencemembershipsv2) | **DELETE** /v2/audiences/{audienceId}/memberships | Delete audience memberships
*IntegrationApi* | [**DeleteAudienceV2**](docs/IntegrationApi.md#deleteaudiencev2) | **DELETE** /v2/audiences/{audienceId} | Delete audience
*IntegrationApi* | [**DeleteCouponReservation**](docs/IntegrationApi.md#deletecouponreservation) | **DELETE** /v1/coupon_reservations/{couponValue} | Delete coupon reservations
*IntegrationApi* | [**DeleteCustomerData**](docs/IntegrationApi.md#deletecustomerdata) | **DELETE** /v1/customer_data/{integrationId} | Delete the personal data of a customer
*IntegrationApi* | [**GetCustomerInventory**](docs/IntegrationApi.md#getcustomerinventory) | **GET** /v1/customer_profiles/{integrationId}/inventory | List all data associated with a specific customer profile
*IntegrationApi* | [**GetCustomerInventory**](docs/IntegrationApi.md#getcustomerinventory) | **GET** /v1/customer_profiles/{integrationId}/inventory | List data associated with a specific customer profile
*IntegrationApi* | [**GetReservedCustomers**](docs/IntegrationApi.md#getreservedcustomers) | **GET** /v1/coupon_reservations/customerprofiles/{couponValue} | List users that have this coupon reserved
*IntegrationApi* | [**TrackEvent**](docs/IntegrationApi.md#trackevent) | **POST** /v1/events | Track an Event
*IntegrationApi* | [**UpdateCustomerProfile**](docs/IntegrationApi.md#updatecustomerprofile) | **PUT** /v1/customer_profiles/{integrationId} | Update customer profile V1
*IntegrationApi* | [**UpdateAudienceCustomersAttributes**](docs/IntegrationApi.md#updateaudiencecustomersattributes) | **PUT** /v2/audience_customers/{audienceId}/attributes | Update profile attributes for all customers in audience
*IntegrationApi* | [**UpdateAudienceV2**](docs/IntegrationApi.md#updateaudiencev2) | **PUT** /v2/audiences/{audienceId} | Update audience
*IntegrationApi* | [**UpdateCustomerProfileAudiences**](docs/IntegrationApi.md#updatecustomerprofileaudiences) | **POST** /v2/customer_audiences | Update multiple customer profiles' audiences
*IntegrationApi* | [**UpdateCustomerProfileV2**](docs/IntegrationApi.md#updatecustomerprofilev2) | **PUT** /v2/customer_profiles/{integrationId} | Update customer profile
*IntegrationApi* | [**UpdateCustomerProfilesV2**](docs/IntegrationApi.md#updatecustomerprofilesv2) | **PUT** /v2/customer_profiles | Update multiple customer profiles
*IntegrationApi* | [**UpdateCustomerSession**](docs/IntegrationApi.md#updatecustomersession) | **PUT** /v1/customer_sessions/{customerSessionId} | Update customer session V1
*IntegrationApi* | [**UpdateCustomerSessionV2**](docs/IntegrationApi.md#updatecustomersessionv2) | **PUT** /v2/customer_sessions/{customerSessionId} | Update customer session
*ManagementApi* | [**AddLoyaltyPoints**](docs/ManagementApi.md#addloyaltypoints) | **PUT** /v1/loyalty_programs/{programID}/profile/{integrationID}/add_points | Add points in loyalty program for given customer
*ManagementApi* | [**CopyCampaignToApplications**](docs/ManagementApi.md#copycampaigntoapplications) | **POST** /v1/applications/{applicationId}/campaigns/{campaignId}/copy | Copy the campaign into every specified application
Expand All @@ -333,6 +337,7 @@ Class | Method | HTTP request | Description
*ManagementApi* | [**ExportEffects**](docs/ManagementApi.md#exporteffects) | **GET** /v1/applications/{applicationId}/export_effects | Export triggered effects to CSV file
*ManagementApi* | [**ExportLoyaltyBalance**](docs/ManagementApi.md#exportloyaltybalance) | **GET** /v1/loyalty_programs/{programID}/export_customer_balance | Export customer loyalty balance to a CSV file
*ManagementApi* | [**ExportLoyaltyLedger**](docs/ManagementApi.md#exportloyaltyledger) | **GET** /v1/loyalty_programs/{programID}/profile/{integrationID}/export_log | Export a customer's loyalty ledger log to CSV file
*ManagementApi* | [**ExportReferrals**](docs/ManagementApi.md#exportreferrals) | **GET** /v1/applications/{applicationId}/export_referrals | Export referrals to CSV file
*ManagementApi* | [**GetAccessLogsWithoutTotalCount**](docs/ManagementApi.md#getaccesslogswithouttotalcount) | **GET** /v1/applications/{applicationId}/access_logs/no_total | Get access logs for Application
*ManagementApi* | [**GetAccount**](docs/ManagementApi.md#getaccount) | **GET** /v1/accounts/{accountId} | Get account details
*ManagementApi* | [**GetAccountAnalytics**](docs/ManagementApi.md#getaccountanalytics) | **GET** /v1/accounts/{accountId}/analytics | Get account analytics
Expand Down Expand Up @@ -383,6 +388,7 @@ Class | Method | HTTP request | Description
*ManagementApi* | [**GetWebhookActivationLogs**](docs/ManagementApi.md#getwebhookactivationlogs) | **GET** /v1/webhook_activation_logs | List webhook activation log entries
*ManagementApi* | [**GetWebhookLogs**](docs/ManagementApi.md#getwebhooklogs) | **GET** /v1/webhook_logs | List webhook log entries
*ManagementApi* | [**GetWebhooks**](docs/ManagementApi.md#getwebhooks) | **GET** /v1/webhooks | List webhooks
*ManagementApi* | [**ImportCollection**](docs/ManagementApi.md#importcollection) | **POST** /v1/applications/{applicationId}/campaigns/{campaignId}/collections/{collectionId}/import | Import collection via CSV file
*ManagementApi* | [**ImportCoupons**](docs/ManagementApi.md#importcoupons) | **POST** /v1/applications/{applicationId}/campaigns/{campaignId}/import_coupons | Import coupons via CSV file
*ManagementApi* | [**ImportLoyaltyPoints**](docs/ManagementApi.md#importloyaltypoints) | **POST** /v1/loyalty_programs/{programID}/import_points | Import loyalty points via CSV file
*ManagementApi* | [**ImportPoolGiveaways**](docs/ManagementApi.md#importpoolgiveaways) | **POST** /v1/giveaways/pools/{poolId}/import | Import giveaway codes into a giveaway pool
Expand Down Expand Up @@ -452,9 +458,11 @@ Class | Method | HTTP request | Description
- [Model.Change](docs/Change.md)
- [Model.ChangeProfilePassword](docs/ChangeProfilePassword.md)
- [Model.CodeGeneratorSettings](docs/CodeGeneratorSettings.md)
- [Model.Collection](docs/Collection.md)
- [Model.Coupon](docs/Coupon.md)
- [Model.CouponConstraints](docs/CouponConstraints.md)
- [Model.CouponCreatedEffectProps](docs/CouponCreatedEffectProps.md)
- [Model.CouponCreationJob](docs/CouponCreationJob.md)
- [Model.CouponRejectionReason](docs/CouponRejectionReason.md)
- [Model.CouponReservations](docs/CouponReservations.md)
- [Model.CouponSearch](docs/CouponSearch.md)
Expand Down Expand Up @@ -488,7 +496,6 @@ Class | Method | HTTP request | Description
- [Model.EventType](docs/EventType.md)
- [Model.Export](docs/Export.md)
- [Model.FeatureFlag](docs/FeatureFlag.md)
- [Model.FeatureFlags](docs/FeatureFlags.md)
- [Model.FeaturesFeed](docs/FeaturesFeed.md)
- [Model.FeedNotification](docs/FeedNotification.md)
- [Model.FuncArgDef](docs/FuncArgDef.md)
Expand Down Expand Up @@ -536,10 +543,14 @@ Class | Method | HTTP request | Description
- [Model.IntegrationStateV2](docs/IntegrationStateV2.md)
- [Model.InventoryCoupon](docs/InventoryCoupon.md)
- [Model.LedgerEntry](docs/LedgerEntry.md)
- [Model.LedgerInfo](docs/LedgerInfo.md)
- [Model.LibraryAttribute](docs/LibraryAttribute.md)
- [Model.LimitConfig](docs/LimitConfig.md)
- [Model.LimitCounter](docs/LimitCounter.md)
- [Model.LoginParams](docs/LoginParams.md)
- [Model.Loyalty](docs/Loyalty.md)
- [Model.LoyaltyDashboardData](docs/LoyaltyDashboardData.md)
- [Model.LoyaltyDashboardPointsBreakdown](docs/LoyaltyDashboardPointsBreakdown.md)
- [Model.LoyaltyLedger](docs/LoyaltyLedger.md)
- [Model.LoyaltyLedgerEntry](docs/LoyaltyLedgerEntry.md)
- [Model.LoyaltyMembership](docs/LoyaltyMembership.md)
Expand Down Expand Up @@ -569,6 +580,8 @@ Class | Method | HTTP request | Description
- [Model.NewCampaignGroup](docs/NewCampaignGroup.md)
- [Model.NewCampaignSet](docs/NewCampaignSet.md)
- [Model.NewCampaignTemplate](docs/NewCampaignTemplate.md)
- [Model.NewCollection](docs/NewCollection.md)
- [Model.NewCouponCreationJob](docs/NewCouponCreationJob.md)
- [Model.NewCoupons](docs/NewCoupons.md)
- [Model.NewCouponsForMultipleRecipients](docs/NewCouponsForMultipleRecipients.md)
- [Model.NewCustomEffect](docs/NewCustomEffect.md)
Expand All @@ -577,7 +590,6 @@ Class | Method | HTTP request | Description
- [Model.NewCustomerSessionV2](docs/NewCustomerSessionV2.md)
- [Model.NewEvent](docs/NewEvent.md)
- [Model.NewEventType](docs/NewEventType.md)
- [Model.NewFeatureFlags](docs/NewFeatureFlags.md)
- [Model.NewGiveawaysPool](docs/NewGiveawaysPool.md)
- [Model.NewInvitation](docs/NewInvitation.md)
- [Model.NewInviteEmail](docs/NewInviteEmail.md)
Expand Down Expand Up @@ -626,6 +638,7 @@ Class | Method | HTTP request | Description
- [Model.TemplateArgDef](docs/TemplateArgDef.md)
- [Model.TemplateDef](docs/TemplateDef.md)
- [Model.TemplateLimitConfig](docs/TemplateLimitConfig.md)
- [Model.Tier](docs/Tier.md)
- [Model.TriggerWebhookEffectProps](docs/TriggerWebhookEffectProps.md)
- [Model.UpdateAccount](docs/UpdateAccount.md)
- [Model.UpdateApplication](docs/UpdateApplication.md)
Expand All @@ -634,11 +647,13 @@ Class | Method | HTTP request | Description
- [Model.UpdateCampaign](docs/UpdateCampaign.md)
- [Model.UpdateCampaignGroup](docs/UpdateCampaignGroup.md)
- [Model.UpdateCampaignTemplate](docs/UpdateCampaignTemplate.md)
- [Model.UpdateCollection](docs/UpdateCollection.md)
- [Model.UpdateCoupon](docs/UpdateCoupon.md)
- [Model.UpdateCouponBatch](docs/UpdateCouponBatch.md)
- [Model.UpdateCustomEffect](docs/UpdateCustomEffect.md)
- [Model.UpdateLoyaltyProgram](docs/UpdateLoyaltyProgram.md)
- [Model.UpdateReferral](docs/UpdateReferral.md)
- [Model.UpdateReferralBatch](docs/UpdateReferralBatch.md)
- [Model.UpdateRole](docs/UpdateRole.md)
- [Model.UpdateUser](docs/UpdateUser.md)
- [Model.UpdateUserLatestFeedTimestamp](docs/UpdateUserLatestFeedTimestamp.md)
Expand Down
2 changes: 1 addition & 1 deletion docs/Account.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ Name | Type | Description | Notes
**ApplicationCount** | **int** | The current number of Applications in your account. |
**UserCount** | **int** | The current number of Campaign Manager Users in your account. |
**CampaignsActiveCount** | **int** | The current number of active Campaigns in your account. |
**CampaignsInactiveCount** | **int** | The current number of in-active Campaigns in your account. |
**CampaignsInactiveCount** | **int** | The current number of inactive Campaigns in your account. |
**Attributes** | [**Object**](.md) | Arbitrary properties associated with this campaign | [optional]

[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
Expand Down
6 changes: 3 additions & 3 deletions docs/Application.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,10 @@ Name | Type | Description | Notes
**CampaignPriority** | **string** | Default priority for campaigns created in this application, can be one of (universal, stackable, exclusive). If no value is provided, this is set to \&quot;universal\&quot; | [optional]
**ExclusiveCampaignsStrategy** | **string** | The strategy used when choosing exclusive campaigns for evaluation, can be one of (listOrder, lowestDiscount, highestDiscount). If no value is provided, this is set to \&quot;listOrder\&quot; | [optional]
**DefaultDiscountScope** | **string** | The default scope to apply \&quot;setDiscount\&quot; effects on if no scope was provided with the effect. | [optional]
**EnableCascadingDiscounts** | **bool** | Flag indicating if discounts should cascade for this application | [optional]
**EnableFlattenedCartItems** | **bool** | Flag indicating if cart items of quantity larger than one should be separated into different items of quantity one | [optional]
**EnableCascadingDiscounts** | **bool** | Indicates if discounts should cascade for this application | [optional]
**EnableFlattenedCartItems** | **bool** | Indicates if cart items of quantity larger than one should be separated into different items of quantity one | [optional]
**AttributesSettings** | [**AttributesSettings**](AttributesSettings.md) | | [optional]
**Sandbox** | **bool** | Flag indicating if this is a live or sandbox application | [optional]
**Sandbox** | **bool** | Indicates if this is a live or sandbox application | [optional]
**LoyaltyPrograms** | [**List&lt;LoyaltyProgram&gt;**](LoyaltyProgram.md) | An array containing all the loyalty programs to which this application is subscribed |

[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
Expand Down
2 changes: 1 addition & 1 deletion docs/ApplicationSession.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ Name | Type | Description | Notes
**Profileintegrationid** | **string** | Integration ID of the customer for the session. | [optional]
**Coupon** | **string** | Any coupon code entered. |
**Referral** | **string** | Any referral code entered. |
**State** | **string** | Indicating if the customer session is in progress (\&quot;open\&quot;), \&quot;closed\&quot;, or \&quot;cancelled\&quot;. |
**State** | **string** | Indicating if the customer session is in progress (&#x60;open&#x60;), &#x60;closed&#x60;, or &#x60;cancelled&#x60;. For more information about customer sessions, see [Customer sessions](/docs/dev/concepts/entities#customer-session-states) in the docs. |
**CartItems** | [**List&lt;CartItem&gt;**](CartItem.md) | Serialized JSON representation. |
**Discounts** | **Dictionary&lt;string, decimal&gt;** | A map of labelled discount values, in the same currency as the session. |
**Total** | **decimal** | The total sum of the session before any discounts applied. |
Expand Down
1 change: 1 addition & 0 deletions docs/BaseLoyaltyProgram.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ Name | Type | Description | Notes
**DefaultValidity** | **string** | Indicates the default duration after which new loyalty points should expire. The format is a number, followed by one letter indicating the unit; like &#39;1h&#39; or &#39;40m&#39;. | [optional]
**DefaultPending** | **string** | Indicates the default duration for the pending time, after which points will be valid. The format is a number followed by a duration unit, like &#39;1h&#39; or &#39;40m&#39;. | [optional]
**AllowSubledger** | **bool** | Indicates if this program supports subledgers inside the program | [optional]
**Timezone** | **string** | A string containing an IANA timezone descriptor. | [optional]

[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)

2 changes: 1 addition & 1 deletion docs/Campaign.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ Name | Type | Description | Notes
**Name** | **string** | A user-facing name for this campaign. |
**Description** | **string** | A detailed description of the campaign. |
**StartTime** | **DateTime** | Timestamp when the campaign will become active. | [optional]
**EndTime** | **DateTime** | Timestamp the campaign will become in-active. | [optional]
**EndTime** | **DateTime** | Timestamp the campaign will become inactive. | [optional]
**Attributes** | [**Object**](.md) | Arbitrary properties associated with this campaign | [optional]
**State** | **string** | A disabled or archived campaign is not evaluated for rules or coupons. | [default to StateEnum.Enabled]
**ActiveRulesetId** | **int** | ID of Ruleset this campaign applies on customer session evaluation. | [optional]
Expand Down
2 changes: 1 addition & 1 deletion docs/CampaignCopy.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ Name | Type | Description | Notes
**ApplicationIds** | **List&lt;int&gt;** | Application IDs of the applications to which a campaign should be copied to |
**Description** | **string** | A detailed description of the campaign. | [optional]
**StartTime** | **DateTime** | Timestamp when the campaign will become active. | [optional]
**EndTime** | **DateTime** | Timestamp when the campaign will become in-active. | [optional]
**EndTime** | **DateTime** | Timestamp when the campaign will become inactive. | [optional]
**Tags** | **List&lt;string&gt;** | A list of tags for the campaign. | [optional]

[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
Expand Down
4 changes: 2 additions & 2 deletions docs/CartItem.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,15 @@ Name | Type | Description | Notes
------------ | ------------- | ------------- | -------------
**Name** | **string** | Name of item |
**Sku** | **string** | Stock keeping unit of item |
**Quantity** | **int** | Quantity of item |
**Quantity** | **int** | Quantity of item. **Important:** If you enabled [cart item flattening](https://help.talon.one/hc/en-us/articles/360016036899-Flattening-Cart-Items), the quantity is always one and the same cart item might receive multiple per-item discounts. Ensure you can process multiple discounts on one cart item correctly. |
**Price** | **decimal** | Price of item |
**Category** | **string** | Type, group or model of the item | [optional]
**Weight** | **decimal** | Weight of item in grams | [optional]
**Height** | **decimal** | Height of item in mm | [optional]
**Width** | **decimal** | Width of item in mm | [optional]
**Length** | **decimal** | Length of item in mm | [optional]
**Position** | **decimal** | Position of the Cart Item in the Cart (calculated internally) | [optional]
**Attributes** | [**Object**](.md) | Arbitrary properties associated with this item | [optional]
**Attributes** | [**Object**](.md) | Arbitrary properties associated with this item. You can use built-in attributes or create your own. See [Attributes](https://docs.talon.one/docs/dev/concepts/attributes). | [optional]

[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)

19 changes: 19 additions & 0 deletions docs/Collection.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# TalonOne.Model.Collection
## Properties

Name | Type | Description | Notes
------------ | ------------- | ------------- | -------------
**Id** | **int** | Unique ID for this entity. |
**Created** | **DateTime** | The exact moment this entity was created. |
**AccountId** | **int** | The ID of the account that owns this entity. |
**ApplicationId** | **int** | The ID of the application that owns this entity. |
**CampaignId** | **int** | The ID of the campaign that owns this entity. |
**Modified** | **DateTime** | The exact moment this entity was last modified. |
**Name** | **string** | The name of this collection. |
**Description** | **string** | A short description of the purpose of this collection. | [optional]
**Payload** | **List&lt;string&gt;** | Payload contains limited amount of collection items | [optional]
**ModifiedBy** | **int** | ID of the user who last updated this effect if available. | [optional]
**CreatedBy** | **int** | ID of the user who created this effect. |

[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)

Loading

0 comments on commit 96d226f

Please sign in to comment.