Checkouts
The Checkout API Resource
Below you'll find all properties for the Vatly Checkout API resource.
Properties
| Name | Type | Description |
|---|---|---|
id | string | Unique identifier for the checkout (starts with checkout_). |
resource | string | The resource type. Always checkout. |
orderId | string | null | Unique identifier for the order created from this checkout. Only available when the checkout has been paid successfully. |
customerId | string | The customer associated with this checkout. Only present once a customer has been associated — for an anonymous checkout this happens when the buyer completes payment. |
testmode | boolean | Whether this checkout is in test mode. |
redirectUrlSuccess | string | The URL to which the checkout should redirect the user after the checkout has been paid successfully. May contain the literal {CHECKOUT_ID} placeholder, which Vatly substitutes with this checkout's ID at creation time (e.g. https://example.com/return?checkout_id={CHECKOUT_ID}). |
redirectUrlCanceled | string | The URL to which the user should get redirected when the user cancels the checkout. Supports the same {CHECKOUT_ID} placeholder as redirectUrlSuccess. |
metadata | object | null | Arbitrary key-value metadata for your application. Up to 50 keys, with key names up to 40 characters and values up to 500 characters. |
status | string | The status of the checkout. Can be created, paid, canceled, failed, or expired. |
expiresAt | string | null | When this checkout will expire (ISO 8601 format). |
createdAt | string | The moment the checkout was created, in ISO 8601 format. |
links | object | HATEOAS links to related resources. Contains checkoutUrl (the hosted checkout page URL), self, and optionally order (after completion). |
List all checkouts
GET /v1/checkouts
This endpoint allows you to retrieve a paginated list of all your checkouts. By default, a maximum of ten checkouts are shown per page.
Optional attributes
| Name | Type | Description |
|---|---|---|
limit | integer | The number of checkouts to return (default: 10, max: 100). |
startingAfter | string | A cursor for use in pagination. Returns results after this checkout ID. |
endingBefore | string | A cursor for use in pagination. Returns results before this checkout ID. |
curl -G https://api.vatly.com/v1/checkouts \
-H "Authorization: Bearer live_your_api_key_here" \
-d limit=10
$vatly = new \Vatly\API\VatlyApiClient();
$vatly->setApiKey('live_your_api_key_here');
$checkouts = $vatly->checkouts->page();
{
"data": [
{
"id": "checkout_QdEpFhdSrG4Y3DnfsdqsH",
"resource": "checkout",
"orderId": null,
"testmode": false,
"redirectUrlSuccess": "https://example.com/success",
"redirectUrlCanceled": "https://example.com/canceled",
"metadata": {},
"status": "created",
"expiresAt": "2024-01-16T10:30:00Z",
"createdAt": "2024-01-15T10:30:00Z",
"links": {
"checkoutUrl": {
"href": "https://checkout.vatly.com/checkout_QdEpFhdSrG4Y3DnfsdqsH",
"type": "text/html"
},
"self": {
"href": "https://api.vatly.com/v1/checkouts/checkout_QdEpFhdSrG4Y3DnfsdqsH",
"type": "application/json"
},
"order": null
}
}
],
"count": 1,
"links": {
"self": {
"href": "https://api.vatly.com/v1/checkouts",
"type": "application/json"
},
"next": null,
"prev": null
}
}
Create a checkout
POST /v1/checkouts
This endpoint allows you to start a new hosted Vatly Checkout. Make sure you have at least one subscription plan or one-off product configured in your Vatly account.
Once paid, any subscription plan product assigned to the checkout will kick off a new subscription for that plan.
Required attributes
| Name | Type | Description |
|---|---|---|
products | array | An array of product objects to include in this checkout. Each product can have: id (required, starts with one_off_product_ or subscription_plan_), quantity (optional, default: 1), price (optional, Money object), trialDays (optional, for subscription plans), metadata (optional). |
redirectUrlSuccess | string | The URL to which the checkout should redirect the user after the checkout has been paid successfully. You may include the literal {CHECKOUT_ID} placeholder anywhere in the URL — Vatly substitutes it with this checkout's ID, so your return page can read the checkout ID without a server-side token store. |
redirectUrlCanceled | string | The URL to which the user should get redirected when the user cancels the checkout. Supports the same {CHECKOUT_ID} placeholder. |
Optional attributes
| Name | Type | Description |
|---|---|---|
metadata | object | Arbitrary key-value metadata for your application. |
customerId | string | The ID for an existing customer to associate with this checkout. If provided, the customer's email will be pre-filled. Must match the testmode of the API token. |
curl https://api.vatly.com/v1/checkouts \
-H "Authorization: Bearer live_your_api_key_here" \
-H "Content-Type: application/json" \
-d '{
"products": [
{"id": "one_off_product_Vr8kQdFhSrG4Y3DnfsdqH", "quantity": 1},
{"id": "subscription_plan_Rk5pQrSvWm8NjLhYbUcP", "trialDays": 14}
],
"redirectUrlSuccess": "https://example.com/return?checkout_id={CHECKOUT_ID}",
"redirectUrlCanceled": "https://example.com/canceled"
}'
$vatly = new \Vatly\API\VatlyApiClient();
$vatly->setApiKey('live_your_api_key_here');
$checkout = $vatly->checkouts->create([
'products' => [
['id' => 'one_off_product_Vr8kQdFhSrG4Y3DnfsdqH', 'quantity' => 1],
['id' => 'subscription_plan_Rk5pQrSvWm8NjLhYbUcP', 'trialDays' => 14],
],
'redirectUrlSuccess' => 'https://example.com/return?checkout_id={CHECKOUT_ID}',
'redirectUrlCanceled' => 'https://example.com/canceled',
]);
// Redirect the user to the checkout URL
header('Location: ' . $checkout->links->checkoutUrl->href, true, 303);
{
"id": "checkout_Bm7xNvPwKr3YjTgHcZaE",
"resource": "checkout",
"orderId": null,
"testmode": false,
"redirectUrlSuccess": "https://example.com/return?checkout_id=checkout_Bm7xNvPwKr3YjTgHcZaE",
"redirectUrlCanceled": "https://example.com/canceled",
"metadata": {},
"status": "created",
"expiresAt": "2024-01-16T10:30:00Z",
"createdAt": "2024-01-15T10:30:00Z",
"links": {
"checkoutUrl": {
"href": "https://checkout.vatly.com/checkout_Bm7xNvPwKr3YjTgHcZaE",
"type": "text/html"
},
"self": {
"href": "https://api.vatly.com/v1/checkouts/checkout_Bm7xNvPwKr3YjTgHcZaE",
"type": "application/json"
},
"order": null
}
}
Custom pricing
Charge an amount that differs from the product's dashboard price by setting price on the item — a Money object (value is a decimal string, currency an ISO 4217 code). The id still references a product you created in the dashboard; products cannot be created on the fly via the API. Omit price to use the product's configured price.
curl https://api.vatly.com/v1/checkouts \
-H "Authorization: Bearer live_your_api_key_here" \
-H "Content-Type: application/json" \
-d '{
"products": [
{
"id": "one_off_product_Vr8kQdFhSrG4Y3DnfsdqH",
"quantity": 2,
"price": {"value": "49.99", "currency": "EUR"}
}
],
"redirectUrlSuccess": "https://example.com/success",
"redirectUrlCanceled": "https://example.com/canceled"
}'
$checkout = $vatly->checkouts->create([
'products' => [
[
'id' => 'one_off_product_Vr8kQdFhSrG4Y3DnfsdqH',
'quantity' => 2,
'price' => ['value' => '49.99', 'currency' => 'EUR'],
],
],
'redirectUrlSuccess' => 'https://example.com/success',
'redirectUrlCanceled' => 'https://example.com/canceled',
]);
Retrieve a checkout
GET /v1/checkouts/:id
This endpoint allows you to retrieve a checkout by providing the checkout id. Refer to the list at the top of this page to see which properties are included with checkout objects.
curl https://api.vatly.com/v1/checkouts/checkout_QdEpFhdSrG4Y3DnfsdqsH \
-H "Authorization: Bearer live_your_api_key_here"
$vatly = new \Vatly\API\VatlyApiClient();
$vatly->setApiKey('live_your_api_key_here');
$checkout = $vatly->checkouts->get('checkout_QdEpFhdSrG4Y3DnfsdqsH');
{
"id": "checkout_QdEpFhdSrG4Y3DnfsdqsH",
"resource": "checkout",
"orderId": "order_Jk4pQrSvWm8NjLhYbUcP",
"testmode": false,
"redirectUrlSuccess": "https://example.com/success",
"redirectUrlCanceled": "https://example.com/canceled",
"metadata": {
"campaign": "summer-sale"
},
"status": "paid",
"expiresAt": "2024-01-16T10:30:00Z",
"createdAt": "2024-01-15T10:30:00Z",
"links": {
"checkoutUrl": {
"href": "https://checkout.vatly.com/checkout_QdEpFhdSrG4Y3DnfsdqsH",
"type": "text/html"
},
"self": {
"href": "https://api.vatly.com/v1/checkouts/checkout_QdEpFhdSrG4Y3DnfsdqsH",
"type": "application/json"
},
"order": {
"href": "https://api.vatly.com/v1/orders/order_Jk4pQrSvWm8NjLhYbUcP",
"type": "application/json"
}
}
}