10/29/2026 Release (Tentative)
This release checks that every owner's date of birth is plausible across the Merchant API, boarding forms, and CSV import, and sends one merchant.updated webhook per change with final connection statuses, alongside a faster boarding form, activity-log entries for connection actions, and fixes to the transaction detail drawer and boarding-form locations.
Jump to: Improvements · Bug Fixes
Improvements
Owner date of birth checks
Preczn now requires an owner's date of birth to be a real date for someone at least 18 and under 100 years old. Each surface reports an out-of-range date before the merchant boards.
- The Merchant API enforces the range.
POST /v1/merchants,POST /v1/merchants/{merchantId}/owners, andPATCH /v1/merchants/{merchantId}/owners/{ownerId}return400withdob must be a valid date (YYYY-MM-DD) for an owner at least 18 and under 100 years oldwhendobisn't a real calendar date before today or falls outside the range. The API evaluates the date in UTC. Owners under 18 are now rejected. - Omit
dobto keep the stored date. Responses return a masked date of birth, such as1970****. If you send a masked value back on a create or update, the API now returns400withdob must not be a masked value. Omit dob to keep the stored value.APATCHwithoutdobkeeps the stored date. - CSV import checks each owner. In the bulk merchant import, an
owner.N.dobthat isn't inYYYY-MM-DDformat, is masked, or is out of range fails that row with a message that names the owner. Reformat spreadsheet dates such as4/12/1980before you upload. - The boarding form explains what's wrong. The form now says Owner must be 18 or older., Owner must be under 100 years old., or Date of birth must be before today. instead of a generic message. The oldest allowed age drops from 150 to 100.
- The dashboard warns but doesn't block. When you edit an owner in the Merchant Vault or merchant detail, a date outside the range shows a warning, such as This owner would be under 18. Check the date before saving., and you can still save. Use the dashboard for a legitimate owner outside the range.
- Existing owners are unchanged. Preczn doesn't modify dates already on file, and an update that omits
dobstill saves for an owner whose stored date is outside the range.
Merchant API
- One
merchant.updatedwebhook per change. When a merchant has a boarding connection, a change now sends onemerchant.updatedwebhook after Preczn re-checks the connection's requirements, instead of possibly two. The webhook carries each connection's re-checked status and missing requirements, and the payload shape is unchanged. Because it waits for the re-check, the webhook arrives a few seconds later than before. Merchants without a boarding connection, and updates from processor status polling, still send the webhook right away. - More dashboard actions send
merchant.updated. Reset connection and Update external ID in the dashboard now send the webhook. Evaluatingis reported only while a re-check is pending. A connection showsEvaluatingonGET /v1/merchants/{merchantId}, on merchant write responses, and in webhooks while Preczn is re-checking its requirements, for up to 15 minutes.GET /v1/merchantsreturns the connection's stored status instead, so a single-merchant read and the list can briefly differ. Sendingstatus: Evaluatingrequests a re-check and keeps the connection's current status.
Loans API
- Page on
hasMore, not on page size. When you callGET /v1/loanswithoutmerchantId, a page can hold fewer than 10 loans whilehasMoreistrue. Keep requesting pages withlastIduntilhasMoreisfalse. AlastIdthat doesn't belong to your platform now returns400withBad lastId provided.
Transaction API
- Frame transactions carry your metadata. Preczn now sends a transaction's
metadatato Frame and shortens each value to Frame's 100-character limit. The metadata stored in Preczn keeps its full values.
Dashboard
- Connection actions appear in the activity log. Change status, Reset connection, Onboard, and Update external ID on a merchant's connection now write an activity-log entry that names the user who acted. Change status, Reset connection, and Onboard each have their own activity type:
connectionStatusChanged,connectionReset, andconnectionOnboardSubmitted. A reset entry lists the names of the fields it cleared, never their values. - Open a transaction from merchant detail. On a merchant's Transactions tab, selecting a Transaction ID opens the transaction detail drawer over the merchant page. Closing the drawer keeps your place in the table, and the page address lets you link to the open transaction.
- NAICS codes in the bulk merchant import. The merchant CSV import accepts an optional
naicsClassificationCodecolumn aftermcc. The value must be a valid 6-digit NAICS code. Leave the cell blank to use your platform's default NAICS code. - A simpler Merchant Vault. The MCC column shows the code followed by its name, without repeating the code. The Connections Summary column is removed, because each connection already has its own status column. If your saved layout included it, the vault drops it.
- Create Form keeps connections in checklist order. The Create Form drawer saves the selected connections in the order the checklist shows them, not the order you clicked them.
Boarding form
- Faster loading and saving. The boarding form starts without waiting for maps to load, and loads each step's data in parallel. When you edit a form template, newly opened forms pick up the change within a minute.
- Clear message when a request times out. If a request takes longer than 30 seconds, or 90 seconds for uploads and submission, the step shows The request timed out. Please try again.
- Connection steps follow a fixed order. A form with several connections lists their steps in the same order, whatever order you added the connections in: Adyen for Platforms, Jack Henry, Payrix, Rainforest, and Stripe Connect, then GreenSky, Jaris, and Synchrony, then Ramp.
- Clearer routing number guidance. The check diagram on the Banking step no longer says the routing number always comes first. It points to the number between the two ⑆ transit symbols and notes that some business checks print the check number first.
Find the 9-digit routing number on the bottom of a check, between two ⑆ transit symbols (a bar beside two stacked squares). It’s usually the first group, but some business checks print the check number first. Don’t copy the number from a deposit slip, because a deposit slip can show a different routing number.
Bug Fixes
Dashboard
- The transaction detail drawer looks consistent. The lifecycle timeline's border now runs the full height of the drawer, status pills show the same status dot as the Transaction Log, the Transaction ID and Token ID each stay on one line, and dark-mode code blocks have a visible border and syntax highlighting.
- Editing a BIN rule keeps its BIN. Saving a BIN rule without changing its BIN no longer fails with BIN should be unique. This BIN number already in use.
- Every routing rule shows its processor's icon. Rules that route to Frame, Jack Henry, Synchrony, CardPointe, or Finix now show the processor icon in the rules table and the rule drawer, and the Send transaction to field shows one hover outline around the whole field.
- Sign-in works when the browser reports no time zone. The dashboard now falls back to UTC instead of failing silently at login.
- Help links open the right pages. The help links on the Loans page and in the merchant import open their current documentation pages.
Boarding form
- Save & Go Back works with an incomplete location. On the Business Location step, saving a business edit and going back no longer stops on a location the merchant hasn't finished. Save & Continue still requires every location to be complete.
- RFI review links open the right step. In an RFI form's review, each field link opens the step where the merchant can edit that field.
- One Tab leaves the phone country selector. On the Business Identity step, one Tab press moves focus out of the country selector on Business Phone Number and Customer Service Phone Number.
