Payment Link Generator

Enter your project details below. Your Gammal Tech account must be approved and payments enabled for the project before customers can pay.

Find this in your dashboard
Max 200 characters. This is what the customer sees.
Must be HTTPS. Customer is sent here after paying.
Select an international currency (not EGP) to enable recurring payments.

Your Payment Link
Open Link ↗

Three Payment Modes

The payment mode is determined by the currency parameter in the link.

Wallet

No currency parameter. Customer pays from their Gammal Tech wallet balance in EGP. Phone, identity verification, then PIN.

Egyptian Card

Currency set to EGP. Customer pays with a local Egyptian debit or credit card. No login needed.

International Card

Currency set to USD, EUR, GBP, etc. Customer pays with an international card. Supports recurring subscriptions. No login needed.

Does the customer need a Gammal Tech account? Card checkout does not require a Gammal Tech login. Wallet payments use the customer's Gammal Tech wallet. These customer checkout options are separate from the approved account and project the merchant needs to create payment links.

Can I create an international payment link? Select a supported currency such as USD, EUR, or GBP to use international-card checkout. The builder also offers monthly and yearly recurring links for supported currencies other than EGP. Currency support does not establish merchant eligibility in every country.

Recurring payments. When you set recurrence to monthly or yearly, the customer subscribes and their card is automatically charged on each billing cycle. Only available with international card payments (not EGP or wallet).

Parameters Reference

ParameterRequiredDescription
pid Required Your Project ID. Find it in your dashboard.
amount Required Payment amount as a positive number. The builder applies the listed minimum where available (for example, 1 for USD and 70 for EGP). Checkout confirms the applicable minimum for your selected currency.
desc Required What the customer is paying for. Max 200 characters. Spaces can be + or %20.
currency Optional If omitted: wallet mode (customer pays from their Gammal Tech balance in EGP).
If EGP: Egyptian card mode (customer pays with a local Egyptian card).
If another supported currency: international card mode (customer pays with an international card).
Supported: EGP, USD, EUR, GBP, AED, SAR, KWD, QAR, BHD, OMR, CAD, AUD, JPY, JOD, CNY, INR, CHF, SEK, NOK, DKK, PLN.
recurrence Optional Set to monthly or yearly to create a recurring subscription. The customer's card is automatically charged on each billing cycle.
Only works with international card payments (when currency is set to something other than EGP). Ignored in wallet and Egyptian card modes.
callback Optional HTTPS URL to redirect the customer after successful payment. If omitted, the customer sees a success page on Gammal Tech.

Handling the Callback

For card payments, a callback URL can return the customer to your site with the parameters shown below. These signed payment-token examples describe card checkout. Wallet callbacks follow their own payment flow; check the current payment documentation before integrating them.

// One time payment success https://yoursite.com/thanks?status=success&txn=GT-TXN-abc123...&payment_token=eyJhbGc... // Subscription success (includes subscription ID and recurrence) https://yoursite.com/thanks?status=success&txn=GT-TXN-abc123...&payment_token=eyJhbGc...&subscription=sub_1abc...&recurrence=monthly // Cancelled — customer closed the payment page https://yoursite.com/thanks?status=cancelled
The txn parameter is the Gammal Tech transaction ID. Each one is unique and starts with GT-TXN-. For subscriptions, you also receive a subscription ID that you can store for reference. The payment_token is a signed proof of payment — see the next section to learn how to verify it.
Never trust the URL alone. Anyone can type ?status=success into their browser and visit your callback page without paying. Before delivering the product, you must verify the payment_token using our SDK. See Verify the Payment below.

Verify the Payment

When a card-payment callback includes payment_token, verify it with Gammal Tech. The browser example can display the verification result; protected product delivery also needs trusted fulfillment checks. Two distinctions matter:

  1. Prevent fakes. A malicious visitor could type ?status=success in the URL to fool a naive checkout page. Verifying the payment_token with us proves the payment is real.
  2. Track verification separately from delivery. The response distinguishes a first token check from a repeat. A first verification does not prove that fulfillment completed; a browser can close before the next step.

Add this script to your callback page to display the verification result. The browser verification helper needs no API key. For protected downloads, account access, or order fulfillment, your trusted service must independently validate payment evidence and match the expected project, amount, currency, and order before granting access. See the current integration documentation for the applicable payment flow.

<!-- Add to your thank-you page --> <p id="payment-status" role="status">Checking your payment...</p> <script src="https://api.gammal.tech/sdk/pay/link/verify.js"></script> <script> GammalVerify(function (payment) { var status = document.getElementById('payment-status'); if (payment.status === 1) { status.textContent = 'Payment verified. Check your order status for fulfillment.'; } else if (payment.status === 2) { status.textContent = 'This payment was checked previously. Check your order status.'; } else { status.textContent = 'Payment confirmation is unavailable. Please contact support if you were charged.'; } }); </script>

Status codes

StatusMeaningWhat to do
1 Valid, first verification. The token is genuine and has never been verified before. Show the verified payment result. Your trusted fulfillment service separately validates the order and records delivery.
2 Valid, but already verified. The token is genuine, but someone (often the customer reloading the page or following a bookmark) has verified it before. Show the existing order status from your records. A prior verification is not proof of completed delivery; the fulfillment service handles retries without duplicate delivery.
0 Invalid. The token is fake, expired, malformed, or the request failed. Do not grant access from this result. Show a neutral confirmation message and a support route if the customer was charged.

Full example with payment status display

A customer-facing display example. It does not authorize or perform product delivery:

<p id="order-status" role="status">Checking your payment...</p> <script src="https://api.gammal.tech/sdk/pay/link/verify.js"></script> <script> GammalVerify(function (payment) { var status = document.getElementById('order-status'); if (payment.status === 1 || payment.status === 2) { // This updates the customer-facing display only. status.textContent = 'Payment verified: ' + String(payment.currency) + ' ' + String(payment.amount) + '. Check your order status for fulfillment.'; } else { status.textContent = 'Payment confirmation is unavailable. ' + 'Please contact support if you were charged.'; } // Never grant protected access from this browser result alone. // Your trusted fulfillment service validates the payment evidence, // matches the expected project, amount, currency and order, // and records fulfillment once for each transaction. }); </script>

Response details

The payment object passed to your callback contains:

FieldTypeDescription
status number Always present. 0 = invalid, 1 = valid first time, 2 = valid but already verified.
txn string Transaction ID, starts with GT-TXN-. Present on status 1 and 2.
amount number Payment amount as a number. Present on status 1 and 2.
currency string Currency code (EGP, USD, EUR, etc). Present on status 1 and 2.
description string What the customer paid for. Present on status 1 and 2.
project_id number Your project ID — useful when handling payments from multiple projects on the same callback page. Present on status 1 and 2.
first_verified_at string Timestamp of the first verification, in YYYY-MM-DD HH:MM:SS format. Present only on status 2.
verification_count number How many times this token has been verified, including the current call. Present only on status 2.
reason string Short error code: invalid_signature, missing_token, network_error, timeout, etc. Present only on status 0.

Advanced: explicit token and timeout

Use GammalVerifyAdvanced when you need to pass the callback token explicitly or set a timeout. This example reads the token from the current URL without persisting it in browser storage:

<p id="advanced-payment-status" role="status">Checking your payment...</p> <script src="https://api.gammal.tech/sdk/pay/link/verify.js"></script> <script> var token = new URL(window.location.href).searchParams.get('payment_token'); GammalVerifyAdvanced({ payment_token: token, timeout: 15000 }, function (payment) { var status = document.getElementById('advanced-payment-status'); status.textContent = payment.status === 1 || payment.status === 2 ? 'Payment verified. Check your order status for fulfillment.' : 'Payment confirmation is unavailable. Please contact support if you were charged.'; }); </script>
A repeat verification is different from a repeat delivery. Status 1 identifies the first successful token verification; status 2 identifies a token that was verified previously. Your trusted fulfillment service should record each transaction uniquely and make delivery idempotent, so retries cannot create duplicate orders or access grants.

Best practices

For digital products and instant delivery (downloads, account upgrades, course access), keep protected resources behind trusted authorization. Browser verification can update the page, while your fulfillment service independently checks the payment evidence and expected order before granting access.
For physical products or anything requiring fulfillment, do not trust transaction or amount values supplied by the browser. Your trusted service must validate payment evidence with Gammal Tech, bind it to the expected project, amount, currency, and order, and use txn to prevent duplicate fulfillment.
Plan for interrupted checkout returns. A customer may close the browser before your callback page loads. Use the trusted notification and reconciliation flow documented for your payment integration, validate its evidence, and keep fulfillment retry-safe. Consult the current payment documentation before implementing delivery.
Articles & Guides