Integrating Israeli payment gateways is complex due to unique requirements like FormData request format (not JSON), server-side-only restrictions, and mandatory steps like the approveTransaction call that many developers miss. Grow (Meshulam) is one of Israel's leading payment providers, but its documentation is spread across multiple pages and common pitfalls cost developers hours of debugging time.
Author: @skills-il
Integrate Grow by Meshulam payment gateway into Israeli applications -- covers payment pages (iframe/redirect/SDK), tokenization, recurring billing, payment links, refunds, invoices, webhooks, and 3DS authentication via the Grow Light API. Use when user asks to accept payments via Grow or Meshulam, set up "slikat ashrai" with Grow, create payment links (drishat tashlum), handle recurring charges (hora'ot keva) via Grow tokens, process refunds or Bit cancellations, integrate Grow webhooks, or mentions "Grow", "Meshulam", "grow-il", "meshulam.co.il", Grow payment page, or Grow API. Prevents costly integration mistakes by guiding correct FormData request format, server-side-only restrictions, and the mandatory approveTransaction step that many developers miss. Do NOT use for Cardcom integration (use cardcom-payment-gateway), Tranzila integration (use tranzila-payment-gateway), general payment orchestration across multiple gateways (use israeli-payment-orchestrator), or non-payment queries.
npx skills-il add skills-il/tax-and-finance --skill grow-payment-gatewayGrow (formerly Meshulam) is one of Israel's leading payment gateways, powering thousands of businesses with credit card processing, Bit payments, Apple Pay, Google Pay, and more. Unlike other Israeli gateways, Grow offers a unified API (the "Light API") that covers payment pages, tokenization, recurring billing, payment links, invoices, and webhooks in a single integration.
This skill guides integration with Grow's Light API for the full payment lifecycle: accepting payments, saving tokens for recurring charges, creating payment links for invoices, processing refunds, and handling real-time webhook notifications.
Official docs: https://grow-il.readme.io/
Developer support: apisupport@grow.business
Grow uses three credentials provided during merchant onboarding:
| Credential | Purpose | Notes |
|---|---|---|
userId |
Merchant identifier | Unique per business account |
pageCode |
Payment page configuration | Different page codes for different payment types (credit card, Bit, recurring, etc.) |
apiKey |
API authentication | Required when managing multiple businesses or specific configurations |
Environments:
| Environment | Base URL |
|---|---|
| Sandbox (testing) | https://sandbox.meshulam.co.il |
| Production | https://api.meshulam.co.il |
Critical: Server-side only. All API requests must originate from your server. Client-side (browser) requests are blocked by Grow.
Critical: FormData format. All request bodies use multipart/form-data, NOT JSON. This is a common mistake -- if you send application/json, the API will reject the request.
| Pattern | How It Works | Best For |
|---|---|---|
| Payment Page (iframe/redirect) | Grow hosts the payment form; you embed via iframe or redirect | E-commerce checkout, one-time payments |
| SDK Wallet | Modular JS SDK embedded in your page | Custom UX without iframe/redirect overhead |
| Payment Link | Generate a URL to send to customers | Invoicing, freelancer billing, remote payments |
| Token Charge (server-to-server) | Charge a saved token directly | Recurring billing, subscriptions, repeat customers |
Most Israeli merchants use Payment Page for the first payment (which also saves a token), then Token Charge for recurring billing.
This is the most common integration -- create a hosted payment page and redirect or iframe the customer to it.
Endpoint: POST /api/light/server/1.0/createPaymentProcess
Required parameters:
| Parameter | Type | Description |
|---|---|---|
pageCode |
string | Payment page identifier (provided by Grow) |
userId |
string | Your merchant ID |
sum |
number | Payment amount (e.g., 10.99) |
successUrl |
string | Redirect URL after successful payment (HTTPS required) |
cancelUrl |
string | Redirect URL if payment is cancelled |
description |
string | Product/service description |
pageField[fullName] |
string | Customer name (must contain at least two names) |
pageField[phone] |
string | Valid Israeli mobile phone number |
Optional parameters:
| Parameter | Type | Description |
|---|---|---|
pageField[email] |
string | Customer email |
paymentNum |
integer | Fixed number of installments (1-12) |
maxPaymentNum |
integer | Max installments customer can choose (2-N) |
chargeType |
integer | 1 = regular charge |
notifyUrl |
string | Server-to-server callback URL |
invoiceNotifyUrl |
string | Invoice webhook URL |
cField1 - cField9 |
string | Custom merchant fields (passed back in callbacks) |
transactionTypes[0] |
integer | Payment method filter (see table below) |
Payment method codes (transactionTypes):
| Code | Payment Method |
|---|---|
| 1 | Credit Card |
| 5 | Pay Box |
| 6 | Bit |
| 13 | Apple Pay |
| 14 | Google Pay |
| 15 | Bank Transfer |
Invoice line items (optional):
| Parameter | Type | Description |
|---|---|---|
productData[0][catalogNumber] |
integer | Item catalog number |
productData[0][quantity] |
integer | Item quantity |
productData[0][price] |
number | Item price |
productData[0][itemDescription] |
string | Item description |
Example request:
curl -X POST https://sandbox.meshulam.co.il/api/light/server/1.0/createPaymentProcess \
-F "pageCode=YOUR_PAGE_CODE" \
-F "userId=YOUR_USER_ID" \
-F "sum=149.90" \
-F "successUrl=https://yoursite.com/payment/success" \
-F "cancelUrl=https://yoursite.com/payment/cancel" \
-F "description=Monthly subscription" \
-F "pageField[fullName]=Israel Israeli" \
-F "pageField[phone]=0501234567" \
-F "pageField[email]=customer@example.com" \
-F "paymentNum=1" \
-F "notifyUrl=https://yoursite.com/api/grow/webhook" \
-F "cField1=order-12345"The response includes a url field -- redirect the customer there or embed as an iframe.
Important: The payment page URL is valid for 10 minutes. Generate a fresh URL for each checkout session.
After the customer completes payment, two things happen:
successUrl with response=success appendednotifyUrl with full transaction detailsAlways verify via server callback, not the client redirect (which can be spoofed).
After receiving the server callback, you MUST call approveTransaction to confirm receipt. This does not alter the payment -- it closes the transaction loop with Grow.
Endpoint: POST /api/light/server/1.0/approveTransaction
curl -X POST https://sandbox.meshulam.co.il/api/light/server/1.0/approveTransaction \
-F "pageCode=YOUR_PAGE_CODE" \
-F "transactionId=TRANSACTION_ID_FROM_CALLBACK"Do NOT call approveTransaction for: token-only saves, delayed (J4J5) transactions, or createTransactionWithToken charges.
Get transaction info:
POST /api/light/server/1.0/getTransactionInfo
| Parameter | Type | Description |
|---|---|---|
pageCode |
string | Page identifier |
transactionId |
string | Transaction ID to query |
Get payment process info:
POST /api/light/server/1.0/getPaymentProcessInfo
| Parameter | Type | Description |
|---|---|---|
pageCode |
string | Page identifier |
processId |
string | Process ID from createPaymentProcess |
Refund a credit card transaction:
POST /api/light/server/1.0/refundTransaction
| Parameter | Type | Description |
|---|---|---|
pageCode |
string | Page identifier |
transactionId |
string | Transaction to refund |
refundSum |
number | Amount to refund (partial or full) |
Cancel a Bit transaction:
POST /api/light/server/1.0/cancelBitTransaction
| Parameter | Type | Description |
|---|---|---|
pageCode |
string | Page identifier |
transactionId |
string | Bit transaction to cancel |
Payment links (drishat tashlum) let you send a payment URL to customers via email, SMS, or WhatsApp. Useful for invoicing and remote payments.
Endpoint: POST /api/light/server/1.0/createPaymentLink
| Parameter | Type | Description |
|---|---|---|
pageCode |
string | Page identifier |
userId |
string | Merchant ID |
sum |
number | Payment amount |
description |
string | Payment description |
pageField[fullName] |
string | Customer name |
pageField[phone] |
string | Customer phone |
pageField[email] |
string | Customer email |
The response includes a shareable payment URL. You can also update (updatePaymentLink) or query (getPaymentLinkInfo) existing links.
Grow supports three recurring payment models:
Use a dedicated recurring page code configured in the Grow dashboard:
createPaymentProcess using the recurring page codesum to the monthly charge amount and paymentNum to total iterationsUse createTransactionWithToken with automatic scheduling:
curl -X POST https://sandbox.meshulam.co.il/api/light/server/1.0/createTransactionWithToken \
-F "pageCode=YOUR_PAGE_CODE" \
-F "userId=YOUR_USER_ID" \
-F "sum=99.00" \
-F "token=SAVED_TOKEN" \
-F "paymentType=1" \
-F "paymentNum=12"Setting paymentType=1 with paymentNum tells Grow to manage 12 monthly charges.
You control when each charge fires:
First payment (save token):
curl -X POST https://sandbox.meshulam.co.il/api/light/server/1.0/createTransactionWithToken \
-F "pageCode=YOUR_PAGE_CODE" \
-F "userId=YOUR_USER_ID" \
-F "sum=99.00" \
-F "token=SAVED_TOKEN" \
-F "isRecurringDebitId=1"The response includes recurringDebitId -- save this to link future charges.
Subsequent charges:
curl -X POST https://sandbox.meshulam.co.il/api/light/server/1.0/createTransactionWithToken \
-F "pageCode=YOUR_PAGE_CODE" \
-F "userId=YOUR_USER_ID" \
-F "sum=99.00" \
-F "token=SAVED_TOKEN" \
-F "recurringDebitId=RECURRING_DEBIT_ID"Update recurring payment:
POST /api/light/server/1.0/updateRecurringPayment -- change amount, pause, or cancel.
Token transaction lookup:
POST /api/light/server/1.0/getTokenTransactionsByExternalIdentifiers -- find all transactions for a given token using external reference IDs.
Premium recurring features:
J4J5 allows 4 interest-free installments (tashlumim l'lo ribit), a popular payment option in Israel:
Create delayed payment:
POST /api/light/server/1.0/createPaymentProcess with J4J5 page code
Settle when ready:
POST /api/light/server/1.0/settleSuspendedTransaction
| Parameter | Type | Description |
|---|---|---|
pageCode |
string | Page identifier |
transactionId |
string | Suspended transaction to settle |
Grow sends real-time notifications to your server for various events. Contact apisupport@grow.business to enable webhooks for your account.
Webhook trigger options:
| Trigger | Description |
|---|---|
| All one-time transactions | Every payment across all pages |
| Specific payment pages | Filter by page code |
| Specific payment links | Filter by payment link |
| Recurring payments | From 2nd charge onward |
| Failed recurring | When a recurring charge fails |
| POS transactions | In-person payments |
| Invoice creation | When invoices are generated |
| Mobile app transactions | Payments via Grow app |
Common webhook payload fields:
| Field | Description |
|---|---|
webhookKey |
Unique webhook identifier |
transactionCode |
Transaction reference |
paymentSum |
Amount charged |
paymentDate |
Transaction timestamp |
fullName |
Payer name |
payerPhone |
Payer phone |
payerEmail |
Payer email |
cardSuffix |
Last 4 digits of card |
cardBrand |
Card brand (Visa, Mastercard, etc.) |
asmachta |
Reference number (asmakhta) |
paymentSource |
Origin (page, link, POS, etc.) |
Recurring payment webhook (additional fields):
| Field | Description |
|---|---|
directDebitId |
Recurring series identifier |
paymentsNum |
Payment number in series |
periodicalPaymentSum |
Recurring charge amount |
Failed recurring webhook (additional fields):
| Field | Description |
|---|---|
error_message |
Failure reason |
charges_attempts |
Number of retry attempts |
regular_payment_id |
Failed recurring payment ID |
Invoice webhook (set via invoiceNotifyUrl):
| Field | Description |
|---|---|
transactionCode |
Related transaction |
invoiceNumber |
Generated invoice number |
invoiceUrl |
URL to download invoice PDF |
Grow offers pre-configured payment page types, each with a different pageCode:
| Page Type | Description | Notes |
|---|---|---|
| SDK Wallet | Modular JS widget | No iframe/redirect needed |
| Generic | Credit card + Bit | Customizable, up to 2 extra fields |
| Credit Card | Card payments only | Supports regular and recurring |
| Google Pay | Google Pay only | Chrome on Android; requires allow="payment" on iframe |
| Apple Pay | Apple Pay only | Requires domain verification for iframe |
| Bit | Bit mobile payment | Best on mobile, full-screen recommended |
| Bit QR | QR code for Bit | For desktop/in-store display |
iframe integration:
<iframe src="PAYMENT_URL_FROM_API"
width="100%" height="600"
allow="payment"
style="border: none;">
</iframe>HTTPS is mandatory for iframe integrations. HTTP will not work.
URL length limit: 2000 characters. Use cField values instead of long query strings.
| Problem | Cause | Solution |
|---|---|---|
| API returns 403 or empty response | Client-side request | Move API calls to your server; Grow blocks browser requests |
| Request returns parsing error | Using JSON content type | Switch to multipart/form-data (FormData), not application/json |
| Payment page URL expired | URL older than 10 minutes | Call createPaymentProcess again for a fresh URL |
| Webhook not received | Webhooks not enabled | Contact apisupport@grow.business to enable |
| Transaction not found | Wrong environment | Ensure sandbox transactions are queried against sandbox URL |
| Recurring charge failed | Expired card | Enable premium recurring for automatic card expiry updates |
| localhost in successUrl | Not allowed | Use a tunnel (ngrok) or deployed URL for testing |
| iframe blank on HTTP | HTTPS required | Serve your page over HTTPS |
| Apple Pay iframe fails | Domain not verified | Complete Apple domain verification via Grow dashboard |
Supported Agents
Help me implement a Grow payment page in my Next.js app. I need to create a payment process with createPaymentProcess, embed the payment page in an iframe, handle the server callback, and call approveTransaction. The amount is 149.90 NIS.
I need to implement a monthly subscription system with Grow. The first payment should save a token, then charge the token monthly using createTransactionWithToken with recurringDebitId. Show me the complete flow.
Help me create payment links with the Grow API and set up a webhook endpoint that receives payment notifications. I need to send the link to customers and get notified when they pay.
I need to implement a refund flow in my app -- partial or full refunds for credit card transactions with refundTransaction, and Bit transaction cancellations with cancelBitTransaction.
Trust Score
This skill can access environment variables which may contain secrets.
3 occurrences found in code
This skill can make network requests to external services.
5 occurrences found in code
Manage daily operations for Israeli freelancers (osek murshe, osek patur) — invoice aging, utility bill collection, tax deadline reminders, and accountant packages. Use when user asks about "freelancer operations", "osek murshe workflow", "osek patur tracking", "invoice aging", "accountant package", "freelancer tax deadlines", "utility bills collection", or "חבילה לרואה חשבון". Covers VAT filing deadline alerts, Bituach Leumi payment tracking, osek patur threshold monitoring, and organized monthly accounting exports. Do NOT use for invoice generation (use israeli-e-invoice), VAT reporting (use israeli-vat-reporting), or payroll calculation.
Navigate the Israeli pension and savings system including pension funds (keren pensia), manager's insurance (bituach menahalim), training funds (keren hishtalmut), and retirement planning. Use when user asks about Israeli pension, "pensia", "keren hishtalmut", retirement savings, "bituach menahalim", pension contributions, or tax benefits from savings. Covers mandatory pension, voluntary savings, and withdrawal rules. Do NOT provide specific investment recommendations or fund performance comparisons.
Integrate Cardcom payment processing and Israeli invoice generation into applications -- covers Low Profile payments, tokenization, recurring billing, and automatic tax invoice/receipt creation per Israeli law. Use when user asks to accept payments via Cardcom, generate Israeli invoices with payments, set up "slikat ashrai" with hashbonit, handle recurring billing (hora'ot keva), or mentions "Cardcom", "CardCom API", "Low Profile", Israeli payment with invoicing, or needs combined payment + document generation. Supports REST API V11 and legacy endpoints. Do NOT use for Tranzila integration (use tranzila-payment-gateway), general accounting, or non-payment queries.
Want to build your own skill? Try the Skill Creator · Submit a Skill