Grow's payment flow has a step most integrations get wrong - the transaction is not final until your server approves it. What createPaymentProcess and approveTransaction actually do, and why instalments change your accounting.
Key takeaways
- The name changed. Meshulam is now Grow, and documentation lives at grow.business/api-developers - searching the old name returns older material that may not match the current interface.
- The flow is two-step: createPaymentProcess opens the payment page, and after the callback your server calls approveTransaction. Skipping the second step is how a payment appears successful and never settles.
- Instalments are a first-class feature in the Israeli market and they change your bookkeeping. Decide with the accountant whether the document reflects the full amount or the instalment, before you build.
- The callback is the source of truth, not the browser. A customer who closes the tab after paying never returns to your page, but your server still hears about it.
The first thing worth knowing is that the product name changed: Meshulam is now Grow, and the developer documentation lives at grow.business/api-developers. Searching the old name still returns material, but some of it is dated and may not match the current interface - open the official docs rather than relying on an example you found.
The flow - and the difference that breaks integrations
The core pattern is two-step, and this is the part that matters most:
createPaymentProcess- your server creates a payment process and receives a payment page you can embed in an iframe or redirect to.- The customer pays on Grow's page. Card details never pass through you.
- Grow notifies your server via callback.
approveTransaction- your server approves the transaction.
Step four is what most people miss. An integration that receives the callback, marks the order paid, and never calls approveTransaction will look like it works in testing, because the payment page reported success. In practice the transaction was not properly finalised, and it surfaces during reconciliation against the reports.
Why two steps exist at all: it gives your server a chance to validate before final approval - that the amount is right, that the order exists, that it has not already been paid. This is not bureaucracy, it is a control point, and it is worth using.
What to do between the steps
Once the callback arrives and before approveTransaction:
- Cross-check the amount against the order, server-side. If it does not match, do not approve - flag it for review.
- Check the order is not already paid. Callbacks can arrive twice.
- Log the full response before continuing. If something fails later, that is the evidence.
Instalments - the feature that changes your bookkeeping
Splitting into instalments (up to 12) is a first-class capability in the Israeli market, and unlike most features it is not merely a payments matter - it is an accounting one.
The question to put to the business's accountant, before writing code:
When a customer pays in 6 instalments, does the document reflect the full amount at the time of the transaction, or does each instalment produce its own entry?
Both approaches have logic, and the answer depends on the business's reporting method. What is not legitimate is the developer deciding alone - this determines when revenue is recognised.
The practical consequence: your system needs to know both the total amount and the number of instalments, and store both. If you stored only what was collected this month, you have lost the context.
The callback is the source of truth
As with every gateway - Cardcom, Tranzila, PayPlus - the browser redirect is not a reliable update mechanism.
A customer who closes the tab the moment payment clears, whose connection drops, or who simply does not wait, will not return to your page. If that is where you mark the order paid, it stays "pending" while the money has been taken.
The rule: the callback updates order state and triggers approveTransaction. The browser shows a thank-you screen. Never the other way round.
And the callback endpoint must be idempotent - the same notification can arrive twice, and that must not mark two orders paid or ship twice.
Who issues the document
The decision that recurs in every project connecting payments and accounting: if the gateway is configured to issue a document automatically and your system also issues one through your invoicing system, one transaction produces two tax documents.
It surfaces at month end, at the accountant's desk. Pick one side and document it before writing a line.
Security
- Do not touch card details. They are entered on Grow's page. Do not relay, log or store them - doing so pulls you into PCI DSS scope.
- Authenticate the callback. A public endpoint that marks orders paid and triggers transaction approval is an obvious target. Do not rely on the URL being secret.
- Server-side secrets only. The credentials authorise collecting money in the business's name - not in source control, not in logs, not in a browser.
Pre-launch checklist
- Open the documentation at
grow.business/api-developers- do not search for "Meshulam", the name changed. - Confirm
approveTransactionis called on every successful path. This is the most commonly missed check. - Test the case where the customer pays and immediately closes the tab - did the order update?
- Test a duplicate callback - was the order marked twice?
- Get written confirmation from the accountant on how an instalment transaction is recorded.
- Confirm there is no double document issuance.
- Test a real failure, not only success.
For a comparison of the Israeli gateways, see Israeli payment gateways compared.
Frequently asked questions
Is Meshulam the same as Grow?
Yes - Meshulam rebranded to Grow, and the developer documentation is published at grow.business/api-developers. Searching the old name still returns results, but some of that material predates the current interface, so work from the official documentation rather than from an older example you find in a forum or blog post.
What does approveTransaction do in the Grow flow?
It finalises the transaction from your server after the callback arrives. The flow is createPaymentProcess, the customer pays on Grow's page, Grow calls your server back, and then you call approveTransaction. Skipping that last step produces an integration that looks correct in testing - the payment page reported success - while the transaction was never properly finalised.
What should happen between the Grow callback and approving the transaction?
Validation. Cross-check the amount against the order server-side and refuse to approve if it does not match, confirm the order has not already been paid since callbacks can repeat, and log the full response before continuing. The two-step design exists precisely to give you this control point - it is worth using rather than approving blindly.
How should instalment payments be recorded in the accounts?
That is the business accountant's decision, not the developer's. Ask explicitly whether a document should reflect the full amount at the time of the transaction or whether each instalment produces its own entry - both have logic, and the answer depends on the business's reporting method. Your system must store both the total and the instalment count regardless, or the context is lost.
Should order status be updated on the Grow redirect or the callback?
The callback. The browser redirect depends on the customer staying on the page, and anyone who closes the tab as soon as payment clears never returns - leaving the order pending while the money was collected. Use the callback to update state and trigger approveTransaction, keep the redirect purely for a thank-you screen, and make the callback endpoint idempotent.
Keep reading
Related service
Integrations
Make the systems you already pay for talk to each other.
About the author
Yehonatan Saadia
Freelance automation, web & MVP engineer
I'm Yehonatan Saadia, a senior engineer who builds business automation, custom websites, and MVPs for small and mid-sized companies across the US, Europe, and Israel. These guides come from real client work, not theory.
Work with meHave a project like this?
Tell me what you're trying to automate or build and I'll tell you the fastest reliable way to ship it.
