Approve Payment Request
curl --request PATCH \
--url https://api.royalti.io/payment-request/{id}/approve \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: multipart/form-data' \
--form 'title=<string>' \
--form transactionDate=2023-11-07T05:31:56Z \
--form 'currency=<string>' \
--form amount=123 \
--form amountUSD=123 \
--form conversionRate=123 \
--form 'memo=<string>' \
--form method=vertofx \
--form 'walletId=<string>' \
--form 'purposeCode=<string>' \
--form 'files=<string>' \
--form files.items='@example-file'import requests
url = "https://api.royalti.io/payment-request/{id}/approve"
files = { "files.items": ("example-file", open("example-file", "rb")) }
payload = {
"title": "<string>",
"transactionDate": "2023-11-07T05:31:56Z",
"currency": "<string>",
"amount": "123",
"amountUSD": "123",
"conversionRate": "123",
"memo": "<string>",
"method": "vertofx",
"walletId": "<string>",
"purposeCode": "<string>",
"files": "<string>"
}
headers = {"Authorization": "Bearer <token>"}
response = requests.patch(url, data=payload, files=files, headers=headers)
print(response.text)const form = new FormData();
form.append('title', '<string>');
form.append('transactionDate', '2023-11-07T05:31:56Z');
form.append('currency', '<string>');
form.append('amount', '123');
form.append('amountUSD', '123');
form.append('conversionRate', '123');
form.append('memo', '<string>');
form.append('method', 'vertofx');
form.append('walletId', '<string>');
form.append('purposeCode', '<string>');
form.append('files', '<string>');
form.append('files.items', '{
"fileName": "example-file"
}');
const options = {method: 'PATCH', headers: {Authorization: 'Bearer <token>'}};
options.body = form;
fetch('https://api.royalti.io/payment-request/{id}/approve', 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://api.royalti.io/payment-request/{id}/approve",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"title\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"transactionDate\"\r\n\r\n2023-11-07T05:31:56Z\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"currency\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"amount\"\r\n\r\n123\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"amountUSD\"\r\n\r\n123\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"conversionRate\"\r\n\r\n123\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"memo\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"method\"\r\n\r\nvertofx\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"walletId\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"purposeCode\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"files\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"files.items\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n{\r\n \"fileName\": \"example-file\"\r\n}\r\n-----011000010111000001101001--",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: multipart/form-data"
],
]);
$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://api.royalti.io/payment-request/{id}/approve"
payload := strings.NewReader("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"title\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"transactionDate\"\r\n\r\n2023-11-07T05:31:56Z\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"currency\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"amount\"\r\n\r\n123\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"amountUSD\"\r\n\r\n123\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"conversionRate\"\r\n\r\n123\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"memo\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"method\"\r\n\r\nvertofx\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"walletId\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"purposeCode\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"files\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"files.items\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n{\r\n \"fileName\": \"example-file\"\r\n}\r\n-----011000010111000001101001--")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.patch("https://api.royalti.io/payment-request/{id}/approve")
.header("Authorization", "Bearer <token>")
.body("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"title\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"transactionDate\"\r\n\r\n2023-11-07T05:31:56Z\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"currency\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"amount\"\r\n\r\n123\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"amountUSD\"\r\n\r\n123\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"conversionRate\"\r\n\r\n123\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"memo\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"method\"\r\n\r\nvertofx\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"walletId\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"purposeCode\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"files\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"files.items\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n{\r\n \"fileName\": \"example-file\"\r\n}\r\n-----011000010111000001101001--")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.royalti.io/payment-request/{id}/approve")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer <token>'
request.body = "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"title\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"transactionDate\"\r\n\r\n2023-11-07T05:31:56Z\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"currency\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"amount\"\r\n\r\n123\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"amountUSD\"\r\n\r\n123\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"conversionRate\"\r\n\r\n123\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"memo\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"method\"\r\n\r\nvertofx\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"walletId\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"purposeCode\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"files\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"files.items\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n{\r\n \"fileName\": \"example-file\"\r\n}\r\n-----011000010111000001101001--"
response = http.request(request)
puts response.read_body{
"message": "Payment request approved successfully",
"paymentRequest": {
"id": "0654cd19-cea3-4fad-b92e-4033c4252c79",
"status": "approved"
}
}{
"success": false,
"error": {
"code": "<string>",
"message": "<string>",
"details": [
"<string>"
]
}
}{
"success": false,
"error": {
"code": "<string>",
"message": "<string>",
"details": [
"<string>"
]
}
}{
"success": false,
"error": {
"code": "<string>",
"message": "<string>",
"details": [
"<string>"
]
}
}Payment Requests
Approve Payment Request
Approve Payment Request
PATCH
/
payment-request
/
{id}
/
approve
Approve Payment Request
curl --request PATCH \
--url https://api.royalti.io/payment-request/{id}/approve \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: multipart/form-data' \
--form 'title=<string>' \
--form transactionDate=2023-11-07T05:31:56Z \
--form 'currency=<string>' \
--form amount=123 \
--form amountUSD=123 \
--form conversionRate=123 \
--form 'memo=<string>' \
--form method=vertofx \
--form 'walletId=<string>' \
--form 'purposeCode=<string>' \
--form 'files=<string>' \
--form files.items='@example-file'import requests
url = "https://api.royalti.io/payment-request/{id}/approve"
files = { "files.items": ("example-file", open("example-file", "rb")) }
payload = {
"title": "<string>",
"transactionDate": "2023-11-07T05:31:56Z",
"currency": "<string>",
"amount": "123",
"amountUSD": "123",
"conversionRate": "123",
"memo": "<string>",
"method": "vertofx",
"walletId": "<string>",
"purposeCode": "<string>",
"files": "<string>"
}
headers = {"Authorization": "Bearer <token>"}
response = requests.patch(url, data=payload, files=files, headers=headers)
print(response.text)const form = new FormData();
form.append('title', '<string>');
form.append('transactionDate', '2023-11-07T05:31:56Z');
form.append('currency', '<string>');
form.append('amount', '123');
form.append('amountUSD', '123');
form.append('conversionRate', '123');
form.append('memo', '<string>');
form.append('method', 'vertofx');
form.append('walletId', '<string>');
form.append('purposeCode', '<string>');
form.append('files', '<string>');
form.append('files.items', '{
"fileName": "example-file"
}');
const options = {method: 'PATCH', headers: {Authorization: 'Bearer <token>'}};
options.body = form;
fetch('https://api.royalti.io/payment-request/{id}/approve', 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://api.royalti.io/payment-request/{id}/approve",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"title\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"transactionDate\"\r\n\r\n2023-11-07T05:31:56Z\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"currency\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"amount\"\r\n\r\n123\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"amountUSD\"\r\n\r\n123\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"conversionRate\"\r\n\r\n123\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"memo\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"method\"\r\n\r\nvertofx\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"walletId\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"purposeCode\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"files\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"files.items\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n{\r\n \"fileName\": \"example-file\"\r\n}\r\n-----011000010111000001101001--",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: multipart/form-data"
],
]);
$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://api.royalti.io/payment-request/{id}/approve"
payload := strings.NewReader("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"title\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"transactionDate\"\r\n\r\n2023-11-07T05:31:56Z\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"currency\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"amount\"\r\n\r\n123\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"amountUSD\"\r\n\r\n123\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"conversionRate\"\r\n\r\n123\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"memo\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"method\"\r\n\r\nvertofx\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"walletId\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"purposeCode\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"files\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"files.items\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n{\r\n \"fileName\": \"example-file\"\r\n}\r\n-----011000010111000001101001--")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.patch("https://api.royalti.io/payment-request/{id}/approve")
.header("Authorization", "Bearer <token>")
.body("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"title\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"transactionDate\"\r\n\r\n2023-11-07T05:31:56Z\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"currency\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"amount\"\r\n\r\n123\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"amountUSD\"\r\n\r\n123\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"conversionRate\"\r\n\r\n123\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"memo\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"method\"\r\n\r\nvertofx\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"walletId\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"purposeCode\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"files\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"files.items\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n{\r\n \"fileName\": \"example-file\"\r\n}\r\n-----011000010111000001101001--")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.royalti.io/payment-request/{id}/approve")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer <token>'
request.body = "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"title\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"transactionDate\"\r\n\r\n2023-11-07T05:31:56Z\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"currency\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"amount\"\r\n\r\n123\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"amountUSD\"\r\n\r\n123\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"conversionRate\"\r\n\r\n123\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"memo\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"method\"\r\n\r\nvertofx\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"walletId\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"purposeCode\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"files\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"files.items\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n{\r\n \"fileName\": \"example-file\"\r\n}\r\n-----011000010111000001101001--"
response = http.request(request)
puts response.read_body{
"message": "Payment request approved successfully",
"paymentRequest": {
"id": "0654cd19-cea3-4fad-b92e-4033c4252c79",
"status": "approved"
}
}{
"success": false,
"error": {
"code": "<string>",
"message": "<string>",
"details": [
"<string>"
]
}
}{
"success": false,
"error": {
"code": "<string>",
"message": "<string>",
"details": [
"<string>"
]
}
}{
"success": false,
"error": {
"code": "<string>",
"message": "<string>",
"details": [
"<string>"
]
}
}This endpoint requires authentication. Include your Bearer token in the Authorization header.
Description
Approve Payment Request Description:The
/payment-request/{id}/approve endpoint approves a specific payment request.
Authorization:
- Required role:
adminor higher
PATCH
Path Parameter:
| Parameter | Type | Description |
|---|---|---|
| id | string | The unique identifier of the payment request |
| Parameter | Type | Description |
|---|---|---|
| title (Optional) | string | Title for the payment (defaults to “Payment for [original request title]“) |
| transactionDate (Optional) | string | Transaction date (defaults to current date) |
| currency (Optional) | string | Currency code (defaults to request currency) |
| amount (Optional) | number | Payment amount (defaults to request amount) |
| amountUSD (Optional) | number | Payment amount in USD (defaults to request amountUSD) |
| conversionRate (Optional) | number | Conversion rate if different from default |
| memo (Optional) | string | Additional notes about the payment |
| method (Optional) | string | Payment method (only ‘vertofx’ requires additional fields) |
| walletId (Optional) | string | Required if method is ‘vertofx’ - Wallet ID for VertoFX |
| purposeCode (Optional) | string | Required if method is ‘vertofx’ - Purpose code for VertoFX |
| files (Optional) | array | Optional receipt or supporting documents (multipart/form-data) |
multipart/form-data content type. PDF receipt is automatically generated upon approval.
Code Examples
const response = await fetch('https://api.royalti.io/payment-request/example-id/approve', {
method: 'PATCH',
headers: {
'Authorization': `Bearer ${token}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
"title": "sample-title",
"transactionDate": "2024-01-21T12:00:00Z",
"currency": "sample-currency",
"amount": 1,
"amountUSD": 1,
"conversionRate": 1,
"memo": "sample-memo",
"method": "sample-method",
"walletId": "sample-walletId",
"purposeCode": "sample-purposeCode",
"files": [
{}
]
})
});
const data = await response.json();
console.log(data);
import requests
response = requests.patch(
'https://api.royalti.io/payment-request/example-id/approve',
headers={
'Authorization': f'Bearer {token}'
},
json={"title":"sample-title","transactionDate":"2024-01-21T12:00:00Z","currency":"sample-currency","amount":1,"amountUSD":1,"conversionRate":1,"memo":"sample-memo","method":"sample-method","walletId":"sample-walletId","purposeCode":"sample-purposeCode","files":[{}]}
)
data = response.json()
print(data)
curl -X PATCH https://api.royalti.io/payment-request/example-id/approve \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"title":"sample-title","transactionDate":"2024-01-21T12:00:00Z","currency":"sample-currency","amount":1,"amountUSD":1,"conversionRate":1,"memo":"sample-memo","method":"sample-method","walletId":"sample-walletId","purposeCode":"sample-purposeCode","files":[{}]}'
Authorizations
JWT Authorization header using the Bearer scheme. Format: "Bearer {token}"
Path Parameters
Payment Request ID
Body
multipart/form-dataapplication/json
Title for the payment (defaults to "Payment for [original request title]")
Transaction date (defaults to current date)
Currency code (defaults to request currency)
Payment amount (defaults to request amount)
Payment amount in USD (defaults to request amountUSD)
Conversion rate if different from default
Additional notes about the payment
Payment method (only 'vertofx' requires additional fields)
Available options:
vertofx Required if method is 'vertofx' - Wallet ID for VertoFX
Required if method is 'vertofx' - Purpose code for VertoFX
Receipt files (PDF, images, etc.)
⌘I