Generate a client token with intent on the server side
curl -X POST "https://api.payload.co/access_tokens" \
-u secret_key_3bW9JMZtPVDOfFNzwRdfE: \
-H 'Content-Type: application/json'
-d '{
"intent": {
"payment_form": {
"payemnt": {
"amount": 100,
"description": "Test Payment"
}
}
}
}'
import payload
pl = payload.Session('secret_key_3bW9JMZtPVDOfFNzwRdfE')
@app.route('/form-token', method='post')
def checkout_redirect():
client_token = pl.ClientToken.create(
intent=dict(
payment_form=dict(
payment=dict(
amount=100,
description='Test Payment'
)
)
)
)
return jsonify({'client_token': client_token['id']})
require 'payload'
pl = Payload::Session.new('secret_key_3bW9JMZtPVDOfFNzwRdfE')
get '/form-token/' do
client_token = Payload::ClientToken.create(
intent: {
payment_form: {
payment: {
amount: 100,
description: 'Test Payment'
}
}
}
)
json({ client_token: client_token['id'] })
end
<?php
$pl_transaction_id = $_GET['pl_transaction_id'];
$clientToken = Payload\ClientToken::create([
"intent"=>[
"payment_form"=>[
"payment": [
"amount"=>100,
"description"=>"Test Payment"
]
]
]
]);
header('Content-Type: application/json; charset=utf-8');
echo json_encode(["client_token": $clientToken->id]);
?>
import payload from 'payload-api'
const pl = payload.Session('secret_key_3bW9JMZtPVDOfFNzwRdfE');
app.get('/form-token', (req, res) => {
const clientToken = pl.ClientToken.create({
intent: {
payment_form: {
payment: {
amount: 100,
description: 'Test Payment'
}
}
}
});
res.json({ client_token: clientToken.id });
})
using Payload;
[Route("form-token")]
public IHttpActionResult CheckoutRedirect() {
var pl = new Payload.Session("secret_key_3bW9JMZtPVDOfFNzwRdfE");
var client_token = await new pl.ClientToken.create(new {
intent=new {
payment_form=new {
new {
amount=100,
description="Test Payment"
}
}
}
});
return Json(new { client_token = client_token.id });
}
An ephemeral client token with an intent is required for authentication when using a client side ui element.
To create a new token use the ClientToken
object from one of our server side libraries
or use the endpoint /access_tokens
with the body {"type": "client"}
and a nested intent
object.
There's a few different types of intents depending on what ui element and request type you're trying to make. Below is a table of the different intent types and what they're used for.
Name | Description |
---|---|
checkout_plugin |
Use with the embedded checkout plugin. |
checkout_page |
Use with the checkout page redirect. |
processing_account_plugin |
Use with the processing account plugin. |
payment_form |
Use with secure input payment forms. |
payment_method_form |
Use with secure input payment method forms. |
Once the ClientToken
is generated, pass the resulting id
value back to the client. You can
then initialize Payload.js
with the value as shown below.
<script src="https://payload.co/Payload.js"></script>
<script>
fetch('/gen_token', {method: 'POST'})
.then(token=>Payload(token))
</script>
checkout_plugin
intentcurl -X POST "https://api.payload.co/access_tokens" \
-u secret_key_3bW9JMZtPVDOfFNzwRdfE: \
-H 'Content-Type: application/json'
-d '{
"intent": {
"checkout_plugin": {
"amount": 100,
"description": "Test Payment"
}
}
}'
import payload
pl = payload.Session('secret_key_3bW9JMZtPVDOfFNzwRdfE')
@app.route('/checkout-token', method='post')
def checkout_redirect():
client_token = pl.ClientToken.create(
intent=dict(
checkout_plugin=dict(
amount=100,
description='Test Payment'
)
)
)
return jsonify({'client_token': client_token['id']})
require 'payload'
pl = Payload::Session.new('secret_key_3bW9JMZtPVDOfFNzwRdfE')
get '/checkout-token/' do
client_token = Payload::ClientToken.create(
intent: {
checkout_plugin: {
amount: 100,
description: 'Test Payment'
}
}
)
json({ client_token: client_token['id'] })
end
<?php
$pl_transaction_id = $_GET['pl_transaction_id'];
$clientToken = Payload\ClientToken::create([
"intent"=>[
"checkout_plugin"=>[
"amount"=>100,
"description"=>"Test Payment"
]
]
]);
header('Content-Type: application/json; charset=utf-8');
echo json_encode(["client_token": $clientToken->id]);
?>
import payload from 'payload-api'
const pl = payload.Session('secret_key_3bW9JMZtPVDOfFNzwRdfE');
app.get('/checkout-token', (req, res) => {
const clientToken = pl.ClientToken.create({
intent: {
checkout_plugin: {
amount: 100,
description: 'Test Payment'
}
}
});
res.json({ client_token: clientToken.id });
})
using Payload;
[Route("checkout-token")]
public IHttpActionResult CheckoutRedirect() {
var pl = new Payload.Session("secret_key_3bW9JMZtPVDOfFNzwRdfE");
var client_token = await new pl.ClientToken.create(new {
intent=new {
checkout_plugin=new {
amount=100,
description="Test Payment"
}
}
});
return Json(new { client_token = client_token.id });
}
Name | Description |
---|---|
amount required without invoice id |
The payment amount. |
description required |
A description of the payment. |
amount_editable optional |
Allow custom amounts. |
processing_id optional |
The processing account id for the payment. |
customer_id optional |
The customer's account id. |
card_payments default: true |
Specifies if payments via card are accepted. |
bank_account_payments default: false |
Specifies if payments via bank account are accepted. |
order_number optional |
Provice a custom order number for the payment. |
billing_address default: false |
Use true or false to specify whether billing address fields are displayed. Default is false. |
invoice_id optional |
To tie the resulting payment to an invoice, pass the invoice id value. |
auto_billing_toggle default: false |
Adds an option to allow the customer to set the payment method as the billing default. |
keep_active_toggle default: false |
Adds an option to allow the customer to store the payment method for future use. |
payment_method_preview default: false |
Set to true to show a graphical preview of the payment method above the checkout form. |
attrs optional |
Transaction custom attributes JSON object. Example: {"example":"data"} |
status optional |
Set to authorized for a pre-auth payment. |
conv_fee optional |
Use true or false to specify whether the fee should be charged as a convenience. |
checkout_page
intentcurl -X POST "https://api.payload.co/access_tokens" \
-u secret_key_3bW9JMZtPVDOfFNzwRdfE: \
-H 'Content-Type: application/json'
-d '{
"intent": {
"checkout_page": {
"amount": 100,
"description": "Test Payment",
"redirects": {
"completed_url": "http://localhost/payment-complete",
"return_url": "http://localhost/cart"
}
}
}
}'
import payload
pl = payload.Session('secret_key_3bW9JMZtPVDOfFNzwRdfE')
@app.route('/checkout-redirect', method='post')
def checkout_redirect():
client_token = pl.ClientToken.create(
intent=dict(
checkout_page=dict(
amount=100,
description='Test Payment',
redirects=dict(
completed_url=url_for('/payment-complete'),
return_url=url_for('/cart'),
)
)
)
)
return redirect(client_token.intent['checkout_page']['url'])
require 'payload'
pl = Payload::Session.new('secret_key_3bW9JMZtPVDOfFNzwRdfE')
get '/checkout-redirect/' do
client_token = Payload::ClientToken.create(
intent: {
checkout_page: {
amount: 100,
description: 'Test Payment',
redirects: {
completed_url: 'http://localhost/payment-complete',
return_url: 'http://localhost/cart',
}
}
}
)
redirect client_token['intent']['checkout_page']['url']
end
<?php
$pl_transaction_id = $_GET['pl_transaction_id'];
$clientToken = Payload\ClientToken::create([
"intent"=>[
"checkout_page"=>[
"amount"=>100,
"description"=>"Test Payment",
"redirects"=>[
"completed_url"=>"http://localhost/payment-complete",
"return_url"=>"http://localhost/cart",
]
]
]
]);
header('Location: '.$clientToken->intent["checkout_page"]["url"]);
?>
import payload from 'payload-api'
const pl = payload.Session('secret_key_3bW9JMZtPVDOfFNzwRdfE');
app.get('/checkout-redirect', (req, res) => {
const clientToken = pl.ClientToken.create({
intent: {
checkout_page: {
amount: 100,
description: 'Test Payment',
redirects: {
completed_url: 'http://localhost/payment-complete',
return_url: 'http://localhost/cart',
}
}
}
});
res.redirect(clientToken.intent.checkout_page.url);
})
using Payload;
public CheckoutRedirect() {
var pl = new Payload.Session("secret_key_3bW9JMZtPVDOfFNzwRdfE");
var client_token = await new pl.ClientToken.create(new {
intent=new {
checkout_page=new {
amount=100,
description="Test Payment",
redirects=new {
completed_url="http://localhost/payment-complete",
return_url="http://localhost/cart"
}
}
}
});
return Redirect(client_token.intent.checkout_page.url);
}
Name | Description |
---|---|
amount required without invoice id |
The payment amount. |
description required |
A description of the payment. |
processing_id optional |
The processing account id for the payment. |
customer_id optional |
The customer's account id. |
card_payments default: true |
Specifies if payments via card are accepted. |
bank_account_payments default: false |
Specifies if payments via bank account are accepted. |
billing_address |
Use true or false to specify whether billing address fields are displayed. Default is false. |
invoice_id |
To tie the resulting payment to an invoice, pass the invoice id value. |
status |
Set to authorized for a pre-auth payment. |
payment_form
intentcurl -X POST "https://api.payload.co/access_tokens" \
-u secret_key_3bW9JMZtPVDOfFNzwRdfE: \
-H 'Content-Type: application/json'
-d '{
"intent": {
"payment_form": {
"payemnt": {
"amount": 100,
"description": "Test Payment"
}
}
}
}'
import payload
pl = payload.Session('secret_key_3bW9JMZtPVDOfFNzwRdfE')
@app.route('/form-token', method='post')
def checkout_redirect():
client_token = pl.ClientToken.create(
intent=dict(
payment_form=dict(
payment=dict(
amount=100,
description='Test Payment'
)
)
)
)
return jsonify({'client_token': client_token['id']})
require 'payload'
pl = Payload::Session.new('secret_key_3bW9JMZtPVDOfFNzwRdfE')
get '/form-token/' do
client_token = Payload::ClientToken.create(
intent: {
payment_form: {
payment: {
amount: 100,
description: 'Test Payment'
}
}
}
)
json({ client_token: client_token['id'] })
end
<?php
$pl_transaction_id = $_GET['pl_transaction_id'];
$clientToken = Payload\ClientToken::create([
"intent"=>[
"payment_form"=>[
"payment": [
"amount"=>100,
"description"=>"Test Payment"
]
]
]
]);
header('Content-Type: application/json; charset=utf-8');
echo json_encode(["client_token": $clientToken->id]);
?>
import payload from 'payload-api'
const pl = payload.Session('secret_key_3bW9JMZtPVDOfFNzwRdfE');
app.get('/form-token', (req, res) => {
const clientToken = pl.ClientToken.create({
intent: {
payment_form: {
payment: {
amount: 100,
description: 'Test Payment'
}
}
}
});
res.json({ client_token: clientToken.id });
})
using Payload;
[Route("form-token")]
public IHttpActionResult CheckoutRedirect() {
var pl = new Payload.Session("secret_key_3bW9JMZtPVDOfFNzwRdfE");
var client_token = await new pl.ClientToken.create(new {
intent=new {
payment_form=new {
payment=new {
new {
amount=100,
description="Test Payment"
}
}
}
}
});
return Json(new { client_token = client_token.id });
}
Name | Description |
---|---|
payment |
optional Add extra fields to include in the api request. |
payment_method_form
intentcurl -X POST "https://api.payload.co/access_tokens" \
-u secret_key_3bW9JMZtPVDOfFNzwRdfE: \
-H 'Content-Type: application/json'
-d '{
"intent": {
"payment_method_form": {
"payemnt_method": {
"transfer_type": "receive-only"
}
}
}
}'
import payload
pl = payload.Session('secret_key_3bW9JMZtPVDOfFNzwRdfE')
@app.route('/form-token', method='post')
def checkout_redirect():
client_token = pl.ClientToken.create(
intent=dict(
payemnt_method=dict(
payment_method=dict(
transfer_type='receive-only'
)
)
)
)
return jsonify({'client_token': client_token['id']})
require 'payload'
pl = Payload::Session.new('secret_key_3bW9JMZtPVDOfFNzwRdfE')
get '/form-token/' do
client_token = Payload::ClientToken.create(
intent: {
payment_method_form: {
payment_method: {
transfer_type: 'receive-only'
}
}
}
)
json({ client_token: client_token['id'] })
end
<?php
$pl_transaction_id = $_GET['pl_transaction_id'];
$clientToken = Payload\ClientToken::create([
"intent"=>[
"payment_method_form"=>[
"payment_method": [
"transfer_type"=>"receive-only"
]
]
]
]);
header('Content-Type: application/json; charset=utf-8');
echo json_encode(["client_token": $clientToken->id]);
?>
import payload from 'payload-api'
const pl = payload.Session('secret_key_3bW9JMZtPVDOfFNzwRdfE');
app.get('/form-token', (req, res) => {
const clientToken = pl.ClientToken.create({
intent: {
payment_method_form: {
payment_method: {
transfer_type: 'receive-only'
}
}
}
});
res.json({ client_token: clientToken.id });
})
using Payload;
[Route("form-token")]
public IHttpActionResult CheckoutRedirect() {
var pl = new Payload.Session("secret_key_3bW9JMZtPVDOfFNzwRdfE");
var client_token = await new pl.ClientToken.create(new {
intent=new {
payment_method_form=new {
payment_method=new {
new {
transfer_type="receive-only"
}
}
}
}
});
return Json(new { client_token = client_token.id });
}
Name | Description |
---|---|
payment_method |
optional Add extra fields to include in the api request. |