...
Moved Invoice and Credit Note Template files into AWS S3 buckets allowing template updates to be made without the need to log into the LogiSense Billing AdminPortal
Added a new Invoice Template Type XML eInvoice which stores the template as a PEPPOL 3.0 standard text document instead of a Word Mail Merge template
An Invoice Delivery can be setup to use the eInvoice template which renders the XML text document during billing
The XML text document can be exported to an external transfer location using the Offline Delivery option
Added the fields ‘Added VAT #’, ‘eInvoice Scheme ID’ and ‘eInvoice Endpoint’ fields to the Account / Settings screen Account tab
Modified Invoicing logic to adjust invoices with a negative balance to a zero balance value as new invoices are created and the negative balance is applied to the next invoice. This approach addresses issues with aged invoice balance reports
Added a new Account Id invoice token
Added a currency 'Format' field when configuring invoice or credit note templates. This setting allows the default formatting for tokens of type 'Money' to be overridden on invoices/credit notes
Adjusted validation to allow using the same Alias name when adding custom reports to invoice templates
...
API Enhancements:
API error handling fixes and improvements
Added the ability to specify a Idempotency Key which can be optionally sent in with a non-GET API request
Added a new Client ID/Secret Authentication Type for API Users (configured on the Setup / Users & Accounts / Users screen). Instead of authenticating with a username/password, with the password following password expiry rules, the user will authenticate with a Client ID (the username) and client secret (an API key), which does not expire
Deprecated APIs:
Account/Summary (all versions)
Account/Summary/Paged (all versions)
Udr/Aggregate/UsageRate (all versions)
Udr/Aggregate/UsageRate/Paged (all versions)
Udr/Aggregate/UsageRate/<id> (all versions)
v9/BillRun/Schedule//Recurring (v5-v8 versions still available)
v9/Account/Summary/{id:int} (v5-v8 versions still available)
Updated APIs:
v9/Account/Package/FromCatalog: added nonBillableServiceStatusTypeName to AccountPackageFromCatalogServiceDTO, added ImportLastUsageBilled to AccountService (but not on AccountServiceDTO)
v5-v8/Package/Frequency/id/Detail: PriceBookId is now included in the usageBucketTiers, moneyBuckets detail sections
v9/Package/Frequency/id/Detail (Get): usageBucketTiers, moneyBuckets, defaultUsageBucketTiers, defaultMoneyBuckets are no longer returned in the detail section
v5-v8/Package/Frequency/id/Detail (Get): PackageFrequencyDetail.usageBucketTiers, PackageFrequencyDetail.defaultUsageBucketTiers to use new DTO UsageUnitsBucketTierDTO PackageFrequencyDetail.moneyBuckets, PackageFrequencyDetail.defaultMoneyBucketTiers to use new DTO MoneyUnitsBucketTierDTO
v9/Package/Frequency/id/Detail (Post, Put): PackageFrequencyDetail.usageBucketTiers, PackageFrequencyDetail.defaultUsageBucketTiers to use new DTO UsageUnitsBucketTierDTO PackageFrequencyDetail.moneyBuckets, PackageFrequencyDetail.defaultMoneyBucketTiers to use new DTO MoneyUnitsBucketTierDTO
v9/Template (Get): made public
v9/Template/{id} (Get): made public
V9//Invoice/Item (Get): Added public int InvoicerAccountId { get; set; }, public string InvoicerAccountName { get; set; }
V9//Invoice/Item/Paged (Get): Added public int InvoicerAccountId { get; set; }, public string InvoicerAccountName { get; set; }
V9//Invoice/Item/Paged/Detail (Get): Added public int InvoicerAccountId { get; set; }, public string InvoicerAccountName { get; set; }
V9//Invoice/Item/{id} (Get): Added public int InvoicerAccountId { get; set; }, public string InvoicerAccountName { get; set; }
V9//Invoice/Item/{id}/Detail (Get): Added public int InvoicerAccountId { get; set; }, public string InvoicerAccountName { get; set; }
v9/Payment (Get, Post): Added public int PaymentStatusTypeId { get; set; }
v9/EventSubscription/Webhook (Post, Patch): Added public string OAuthClientSecret { get; set; }
Account/Package/{id}/Detail (Get, Post, Patch): Removed AccountService CurrentRatePlan from accountServices Detail and removed AccountPackageRecurringPriceTier CurrentRatePlan from AccountPackageRecurringPriceTier Detail
Account/Package/Paged/Detail (Get, Post, Patch): Removed AccountService CurrentRatePlan from accountServices Detail and removed AccountPackageRecurringPriceTier CurrentRatePlan from AccountPackageRecurringPriceTier Detail
Account/Service/{id}/Detail (Get, Post, Patch): Removed AccountService CurrentRatePlan from Detail
Account/PricePlan/{id}/Detail (Get, Post, Patch): Removed AccountPricePlan CurrentRatePlan from Detail
Account/PricePlan/Paged/Detail (Get, Post, Patch): Removed AccountPricePlan CurrentRatePlan from Detail
Package/Service/PricePlan (Get, Post, Patch): Removed RecurringPriceTier CurrentRatePlan from RecurringPriceTier Detail
v9/Owner (Get): Added public bool IsReportingDatabaseEnabled { get; set; }
v9/ReportDefinition (Get, Post, Put, Patch): Added public bool UseReportingDatabase { get; set; }
AuthorizationServer/api/V9/Access/Login (Post): Added public string client_secret { get; set; }
v9/Account/Detail (Get, Post, Put, Patch): Added public ListResultsDTO<AccountTaxExemptionDTO> AccountTaxExemptions { get; set; }, removed public ListResultsDTO<AccountTaxExemptLevelDTO> AccountTaxExemptLevels { get; set; }
v9/ReportDefinition/{reportDefinitionId}/Render (Post): ReportRequest Header Updated:
Added “onDemandFilters” as of v9
Supports dataSourceName and dataSourceColumnName
filterId removed
Deprecated “filters” (can use in API version v8 and below)
v9/Usage/Rate (Get, Post, Put, Patch): Added GeneralLedgeId and ServiceTaxCategoryId
v9/Owner (Get, Patch): Added public bool BillPrepaidAdjustments { get; set; }
v9/Account/Package/FromCatalog (Post): Added public int ? discountPromoCodeId { get; set; } and
public string discountPromoCodeName { get; set; }v9/Order (Get, Post, Put, Patch): Added public int discountPromoCodeId { get; set; }
v9/Usage/Rate/Group (Get, Post, Put, Patch): Added public int GeneralLedgerId { get; set; }
and public string GeneralLedgerName { get; set; }v9/Usage/Rate/Group (Post, Get): Added public bool IsTaxInclusive { get; set; }
v9/Account (Get, Post, Put, Patch): public bool ZeroInclusiveTaxWhenExempt{ get; set; }
v9/Account (Post, Put, Patch, Delete):
Added optional custom taxAddresses to details
public ListResultsDTO<TaxAddressDTO> TaxAddresses { get; set; }
and TaxAddressDTO:
public string Name { get; set; }
public bool IsShared { get; set; }
public int ? AccountId { get; set; }
public string AccountName { get; set; }\
public int AddressId { get; set; }
public bool SaveTaxAddressOnInvoicer { get; set; }
public string Address1 { get; set; }
public string Address2 { get; set; }
public int ? StateId { get; set; }
public string StateName { get; set; }
public string StateCode { get; set; }
public int ? CountryId { get; set; }
public string CountryName { get; set; }
public string CountryCode { get; set; }
public string ZipCode { get; set; }
public long ? TaxJurisdictionCode { get; set; }
public string CityName { get; set; }
public DateTime ? TaxJurisdictionCodeUpdated { get; set; }
public long ? TaxJurisdictionCodeOverride { get; set; }
public bool ? IsIncorporated { get; set; }
v9/Account/Package (Get, Post, Put, Patch, Delete): Added ability to set optional shared taxAddressId or custom taxAddress in details
v9/Account/Package/FromCatalog (Post): Added ability to set optional shared taxAddressId or custom taxAddress
v9/Order (Get, Post, Put, Patch, Delete): Added ability to set optional shared taxAddressId or custom taxAddress in OrderPackage
v9/Rerate (Get, Post, Put, Delete): public in v5, internal in v6 onwards
v9/Account/Package (Post, Patch): Added int IsFreeTrial { get; set; }
v9/PaymentMethod/CreditCard (Post): Added int PaymentGatewayId and string PaymentGatewayName
NOTE: this is a Breaking Change as more than one PaymentType is now permitted to use the same CardType on different PaymentGateways. Prior to this change a CardType could only be used once, so a PaymentType was unique
This does not affect Adyen integrations since only one Adyen PaymentGateway is allowed
For Spreedly, if a CardType is used multiple times, then the PaymentGateway MUST be provided for these API routes, or an error will be returned
v9/PaymentMethod/BankAccount (Post): Added int PaymentGatewayId and string PaymentGatewayName
NOTE: this is a Breaking Change as more than one PaymentType is now permitted to use the same CardType on different PaymentGateways. Prior to this change a CardType could only be used once, so a PaymentType was unique
This does not affect Adyen integrations since only one Adyen PaymentGateway is allowed
For Spreedly, if a CardType is used multiple times, then the PaymentGateway MUST be provided for these API routes, or an error will be returned
v9/PaymentMethod (Get): Added int PaymentGatewayId and string PaymentGatewayName
New APIs:
v9Package/Frequency/{id}/PriceBook/{id}/Currency/{id}/UsageBucketTier (Get)
v9/Package/Frequency/{id}/PriceBook/{id}/Currency/{CurrencyCode}/UsageBucketTier (Get)
v9/Template/CreditNote (Post)
v9/Template/Invoice (Post)
v9/Template/CreditNote/{id} (Put)
v9/Template/Invoice/{id} (Put)
v9/JsonApi/ApiVersion/Available (Get)
v9/UsageRatedExceptionSchedule/Reprocess (Post)
v9/UsageRatedExceptionType (Get)
v9/Administration/User/* (Get, Post, Patch)
v9/PaymentMethod/Import/Sync (Post)
V9/CustomDataSource/ByConnection/{id:int}/Paged?useReportingDatabase=(true/false) (Get)
V9/CustomDataSource/ByConnection/{id:int}?useReportingDatabase=(true/false) (Get)
v9/Account/ByName/Search (Post)
v9/Account/ByHierarchy/Search (Post)
v9/Account/[id]/Balance?asOf=[Date] (Get)
v9/ResourceServer/api/Ping (Get)
v9/AuthorizationServer/api/Ping (Get)
v9/UsageIdentifier/ByIdentifier/Search (Post)
v9/Account/{id}/TaxAddress/Search (Post)
v9/Account/{id}/TaxAddress/AvailableFor/Search (Post)
v9/Account/Package/ByExtension/Search (Post)
...