Create Payment via Tokenisation
This endpoint allows you to create a card payment intent using a previously tokenised or newly provided card.
tokenobject is required and should contain aidandtypecard method reference.webhook_notificationobject is optional. If not provided, we will use your default webhook configuration that you’ve previously set up. If provided, we will send webhook notifications to the specified endpoint for this specific payment.- When the card requires 3DS authentication, we will return a
pay_codeobject containing{3ds_url: ''}. You must direct your customer to this URL to authorise the payment. After successful authorisation, customer back toreturn_urland you can use the capture API normally to collect the payment from the user.
curl --request POST \
--url https://sandbox-api.lightningpay.me/api/v2/cards/create_payment \
--header 'Content-Type: application/json' \
--header 'app-id: <api-key>' \
--header 'secret-key: <api-key>' \
--data '
{
"amount": 1000,
"currency": "USD",
"token": {
"id": "tok_dfe1988a1ffc0d6562d3",
"type": "card"
},
"external_id": "order_test_xxx",
"return_url": "https://example.com",
"capture": false,
"payment_type": "regular",
"charge_reason": "resubmission",
"previous_payment_uuid": "1GKPTU7E"
}
'import requests
url = "https://sandbox-api.lightningpay.me/api/v2/cards/create_payment"
payload = {
"amount": 1000,
"currency": "USD",
"token": {
"id": "tok_dfe1988a1ffc0d6562d3",
"type": "card"
},
"external_id": "order_test_xxx",
"return_url": "https://example.com",
"capture": False,
"payment_type": "regular",
"charge_reason": "resubmission",
"previous_payment_uuid": "1GKPTU7E"
}
headers = {
"app-id": "<api-key>",
"secret-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'app-id': '<api-key>',
'secret-key': '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
amount: 1000,
currency: 'USD',
token: {id: 'tok_dfe1988a1ffc0d6562d3', type: 'card'},
external_id: 'order_test_xxx',
return_url: 'https://example.com',
capture: false,
payment_type: 'regular',
charge_reason: 'resubmission',
previous_payment_uuid: '1GKPTU7E'
})
};
fetch('https://sandbox-api.lightningpay.me/api/v2/cards/create_payment', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://sandbox-api.lightningpay.me/api/v2/cards/create_payment",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'amount' => 1000,
'currency' => 'USD',
'token' => [
'id' => 'tok_dfe1988a1ffc0d6562d3',
'type' => 'card'
],
'external_id' => 'order_test_xxx',
'return_url' => 'https://example.com',
'capture' => false,
'payment_type' => 'regular',
'charge_reason' => 'resubmission',
'previous_payment_uuid' => '1GKPTU7E'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"app-id: <api-key>",
"secret-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://sandbox-api.lightningpay.me/api/v2/cards/create_payment"
payload := strings.NewReader("{\n \"amount\": 1000,\n \"currency\": \"USD\",\n \"token\": {\n \"id\": \"tok_dfe1988a1ffc0d6562d3\",\n \"type\": \"card\"\n },\n \"external_id\": \"order_test_xxx\",\n \"return_url\": \"https://example.com\",\n \"capture\": false,\n \"payment_type\": \"regular\",\n \"charge_reason\": \"resubmission\",\n \"previous_payment_uuid\": \"1GKPTU7E\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("app-id", "<api-key>")
req.Header.Add("secret-key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://sandbox-api.lightningpay.me/api/v2/cards/create_payment")
.header("app-id", "<api-key>")
.header("secret-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"amount\": 1000,\n \"currency\": \"USD\",\n \"token\": {\n \"id\": \"tok_dfe1988a1ffc0d6562d3\",\n \"type\": \"card\"\n },\n \"external_id\": \"order_test_xxx\",\n \"return_url\": \"https://example.com\",\n \"capture\": false,\n \"payment_type\": \"regular\",\n \"charge_reason\": \"resubmission\",\n \"previous_payment_uuid\": \"1GKPTU7E\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://sandbox-api.lightningpay.me/api/v2/cards/create_payment")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["app-id"] = '<api-key>'
request["secret-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"amount\": 1000,\n \"currency\": \"USD\",\n \"token\": {\n \"id\": \"tok_dfe1988a1ffc0d6562d3\",\n \"type\": \"card\"\n },\n \"external_id\": \"order_test_xxx\",\n \"return_url\": \"https://example.com\",\n \"capture\": false,\n \"payment_type\": \"regular\",\n \"charge_reason\": \"resubmission\",\n \"previous_payment_uuid\": \"1GKPTU7E\"\n}"
response = http.request(request)
puts response.read_body{
"uuid": "7PPPMXIGH",
"name": "Testing",
"email": "test@example.com",
"external_id": "wc_order_6C1hcvg4T7Pom",
"status": "authorised",
"pay_code": {
"3ds_url": "https://3ds-auth.example.com/verify"
},
"currency": "USD",
"amount": 10000,
"total": 10000,
"paid_amount": 0,
"is_refundable": false,
"payment_method": "card",
"expired_at": "",
"webhook_notification": {
"endpoint_url": "https://webhook.site/456adb8f-4407-4bce-90fe-2c431db19696",
"authorization_header": "****"
},
"refund_information": {
"total_amount": 123,
"refund_amount": 123,
"description": "<string>"
},
"sender_details": {
"card": {
"card_type": "card",
"card_brand": "visa",
"card_last_4": "4242",
"card_country": "US"
}
},
"capture": false,
"payment_type": "regular",
"created_at": "2025-05-28T04:22:21.567+0000"
}{
"errors": {
"code": "REQUIRE_LOGIN",
"message": "Not Authorised"
}
}{
"errors": {
"code": "token_id_required",
"message": "Token ID is required."
}
}Authorizations
A unique identifier assigned to each application.
A secure token associated with the app-id.
Body
Amount in smallest currency unit (e.g., cents)
1000
ISO 4217 currency code (e.g., AUD, USD)
"USD"
The card token object
Show child attributes
Show child attributes
External ID
"order_test_xxx"
Return URL
"https://example.com"
Whether to auto capture the payment (if applicable)
The type of payment.
regular, unscheduled Indicates the reason for a merchant-initiated payment request. Should be provided if payment_type is unscheduled.
resubmission, delayed_charge, no_show, reauthorisation "resubmission"
An identifier that links the payment to an existing series of payments. Should be provided if payment_type is unscheduled.
"1GKPTU7E"
Show child attributes
Show child attributes
Response
Payment created
"7PPPMXIGH"
"Testing"
"test@example.com"
"wc_order_6C1hcvg4T7Pom"
pending, authorised, waiting, received, expired, return_pending, return_expired, partially_refunded, return_received, return_rejected, failed, in_dispute, dispute_lost "authorised"
Show child attributes
Show child attributes
"USD"
10000
10000
0
false
"card"
""
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
false
"regular"
"2025-05-28T04:22:21.567+0000"
curl --request POST \
--url https://sandbox-api.lightningpay.me/api/v2/cards/create_payment \
--header 'Content-Type: application/json' \
--header 'app-id: <api-key>' \
--header 'secret-key: <api-key>' \
--data '
{
"amount": 1000,
"currency": "USD",
"token": {
"id": "tok_dfe1988a1ffc0d6562d3",
"type": "card"
},
"external_id": "order_test_xxx",
"return_url": "https://example.com",
"capture": false,
"payment_type": "regular",
"charge_reason": "resubmission",
"previous_payment_uuid": "1GKPTU7E"
}
'import requests
url = "https://sandbox-api.lightningpay.me/api/v2/cards/create_payment"
payload = {
"amount": 1000,
"currency": "USD",
"token": {
"id": "tok_dfe1988a1ffc0d6562d3",
"type": "card"
},
"external_id": "order_test_xxx",
"return_url": "https://example.com",
"capture": False,
"payment_type": "regular",
"charge_reason": "resubmission",
"previous_payment_uuid": "1GKPTU7E"
}
headers = {
"app-id": "<api-key>",
"secret-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'app-id': '<api-key>',
'secret-key': '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
amount: 1000,
currency: 'USD',
token: {id: 'tok_dfe1988a1ffc0d6562d3', type: 'card'},
external_id: 'order_test_xxx',
return_url: 'https://example.com',
capture: false,
payment_type: 'regular',
charge_reason: 'resubmission',
previous_payment_uuid: '1GKPTU7E'
})
};
fetch('https://sandbox-api.lightningpay.me/api/v2/cards/create_payment', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://sandbox-api.lightningpay.me/api/v2/cards/create_payment",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'amount' => 1000,
'currency' => 'USD',
'token' => [
'id' => 'tok_dfe1988a1ffc0d6562d3',
'type' => 'card'
],
'external_id' => 'order_test_xxx',
'return_url' => 'https://example.com',
'capture' => false,
'payment_type' => 'regular',
'charge_reason' => 'resubmission',
'previous_payment_uuid' => '1GKPTU7E'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"app-id: <api-key>",
"secret-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://sandbox-api.lightningpay.me/api/v2/cards/create_payment"
payload := strings.NewReader("{\n \"amount\": 1000,\n \"currency\": \"USD\",\n \"token\": {\n \"id\": \"tok_dfe1988a1ffc0d6562d3\",\n \"type\": \"card\"\n },\n \"external_id\": \"order_test_xxx\",\n \"return_url\": \"https://example.com\",\n \"capture\": false,\n \"payment_type\": \"regular\",\n \"charge_reason\": \"resubmission\",\n \"previous_payment_uuid\": \"1GKPTU7E\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("app-id", "<api-key>")
req.Header.Add("secret-key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://sandbox-api.lightningpay.me/api/v2/cards/create_payment")
.header("app-id", "<api-key>")
.header("secret-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"amount\": 1000,\n \"currency\": \"USD\",\n \"token\": {\n \"id\": \"tok_dfe1988a1ffc0d6562d3\",\n \"type\": \"card\"\n },\n \"external_id\": \"order_test_xxx\",\n \"return_url\": \"https://example.com\",\n \"capture\": false,\n \"payment_type\": \"regular\",\n \"charge_reason\": \"resubmission\",\n \"previous_payment_uuid\": \"1GKPTU7E\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://sandbox-api.lightningpay.me/api/v2/cards/create_payment")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["app-id"] = '<api-key>'
request["secret-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"amount\": 1000,\n \"currency\": \"USD\",\n \"token\": {\n \"id\": \"tok_dfe1988a1ffc0d6562d3\",\n \"type\": \"card\"\n },\n \"external_id\": \"order_test_xxx\",\n \"return_url\": \"https://example.com\",\n \"capture\": false,\n \"payment_type\": \"regular\",\n \"charge_reason\": \"resubmission\",\n \"previous_payment_uuid\": \"1GKPTU7E\"\n}"
response = http.request(request)
puts response.read_body{
"uuid": "7PPPMXIGH",
"name": "Testing",
"email": "test@example.com",
"external_id": "wc_order_6C1hcvg4T7Pom",
"status": "authorised",
"pay_code": {
"3ds_url": "https://3ds-auth.example.com/verify"
},
"currency": "USD",
"amount": 10000,
"total": 10000,
"paid_amount": 0,
"is_refundable": false,
"payment_method": "card",
"expired_at": "",
"webhook_notification": {
"endpoint_url": "https://webhook.site/456adb8f-4407-4bce-90fe-2c431db19696",
"authorization_header": "****"
},
"refund_information": {
"total_amount": 123,
"refund_amount": 123,
"description": "<string>"
},
"sender_details": {
"card": {
"card_type": "card",
"card_brand": "visa",
"card_last_4": "4242",
"card_country": "US"
}
},
"capture": false,
"payment_type": "regular",
"created_at": "2025-05-28T04:22:21.567+0000"
}{
"errors": {
"code": "REQUIRE_LOGIN",
"message": "Not Authorised"
}
}{
"errors": {
"code": "token_id_required",
"message": "Token ID is required."
}
}