api.wonderful.one
Open in
urlscan Pro
2606:4700:20::681a:3a1
Public Scan
URL:
https://api.wonderful.one/
Submission: On March 25 via api from US — Scanned from US
Submission: On March 25 via api from US — Scanned from US
Form analysis
16 forms found in the DOM<form id="form-GETv2-customers" data-method="GET" data-path="v2/customers" data-authed="1" data-hasfiles="0" data-isarraybody="0" autocomplete="off" onsubmit="event.preventDefault(); executeTryOut('GETv2-customers', this);">
<h3> Request </h3>
<p>
<small class="badge badge-green">GET</small>
<b><code>v2/customers</code></b>
</p>
<h4 class="fancy-heading-panel"><b>Headers</b></h4>
<div style="padding-left: 28px; clear: unset;">
<b style="line-height: 2;"><code>Authorization</code></b> <input type="text" style="display: none" name="Authorization" class="auth-value" data-endpoint="GETv2-customers" value="Bearer {YOUR_AUTH_KEY}"
data-component="header">
<br>
<p>Example: <code>Bearer {YOUR_AUTH_KEY}</code></p>
</div>
<div style="padding-left: 28px; clear: unset;">
<b style="line-height: 2;"><code>Content-Type</code></b> <input type="text" style="display: none" name="Content-Type" data-endpoint="GETv2-customers" value="application/json" data-component="header">
<br>
<p>Example: <code>application/json</code></p>
</div>
<div style="padding-left: 28px; clear: unset;">
<b style="line-height: 2;"><code>Accept</code></b> <input type="text" style="display: none" name="Accept" data-endpoint="GETv2-customers" value="application/json" data-component="header">
<br>
<p>Example: <code>application/json</code></p>
</div>
<h4 class="fancy-heading-panel"><b>Query Parameters</b></h4>
<div style="padding-left: 28px; clear: unset;">
<b style="line-height: 2;"><code>search</code></b> <small>string</small> <i>optional</i> <input type="text" style="display: none" name="search" data-endpoint="GETv2-customers" value="john.testmore@example.com"
data-component="query">
<br>
<p>Filter customer results by name or email. Example: "John" or "email@example.com". Example: <code>john.testmore@example.com</code></p>
</div>
<div style="padding-left: 28px; clear: unset;">
<b style="line-height: 2;"><code>sort</code></b> <small>string</small> <i>optional</i> <input type="text" style="display: none" name="sort" data-endpoint="GETv2-customers" value="last_name_asc" data-component="query">
<br>
<p>Order results by column. Example: <code>last_name_asc</code></p> Must be one of: <ul style="list-style-type: square;">
<li><code>created_asc</code></li>
<li><code>created_desc</code></li>
<li><code>first_name_asc</code></li>
<li><code>first_name_desc</code></li>
<li><code>last_name_asc</code></li>
<li><code>last_name_desc</code></li>
<li><code>last_order_asc</code></li>
<li><code>last_order_desc</code></li>
</ul>
</div>
<div style="padding-left: 28px; clear: unset;">
<b style="line-height: 2;"><code>start_date</code></b> <small>string</small> <i>optional</i> <input type="text" style="display: none" name="start_date" data-endpoint="GETv2-customers" value="2023-07-01"
data-component="query">
<br>
<p>Start date in yyyy-mm-dd format. Must be a valid date. Example: <code>2023-07-01</code></p>
</div>
<div style="padding-left: 28px; clear: unset;">
<b style="line-height: 2;"><code>end_date</code></b> <small>string</small> <i>optional</i> <input type="text" style="display: none" name="end_date" data-endpoint="GETv2-customers" value="2023-12-31"
data-component="query">
<br>
<p>End date in yyyy-mm-dd format. Must be a valid date. Example: <code>2023-12-31</code></p>
</div>
<div style="padding-left: 28px; clear: unset;">
<b style="line-height: 2;"><code>per_page</code></b> <small>integer</small> <i>optional</i> <input type="number" style="display: none" step="any" name="per_page" data-endpoint="GETv2-customers" value="10"
data-component="query">
<br>
<p>Number of results per page. Default: 25. Must be at least 1. Must not be greater than 1000. Example: <code>10</code></p>
</div>
</form>
<form id="form-POSTv2-customers" data-method="POST" data-path="v2/customers" data-authed="1" data-hasfiles="0" data-isarraybody="0" autocomplete="off" onsubmit="event.preventDefault(); executeTryOut('POSTv2-customers', this);">
<h3> Request </h3>
<p>
<small class="badge badge-black">POST</small>
<b><code>v2/customers</code></b>
</p>
<h4 class="fancy-heading-panel"><b>Headers</b></h4>
<div style="padding-left: 28px; clear: unset;">
<b style="line-height: 2;"><code>Authorization</code></b> <input type="text" style="display: none" name="Authorization" class="auth-value" data-endpoint="POSTv2-customers" value="Bearer {YOUR_AUTH_KEY}"
data-component="header">
<br>
<p>Example: <code>Bearer {YOUR_AUTH_KEY}</code></p>
</div>
<div style="padding-left: 28px; clear: unset;">
<b style="line-height: 2;"><code>Content-Type</code></b> <input type="text" style="display: none" name="Content-Type" data-endpoint="POSTv2-customers" value="application/json" data-component="header">
<br>
<p>Example: <code>application/json</code></p>
</div>
<div style="padding-left: 28px; clear: unset;">
<b style="line-height: 2;"><code>Accept</code></b> <input type="text" style="display: none" name="Accept" data-endpoint="POSTv2-customers" value="application/json" data-component="header">
<br>
<p>Example: <code>application/json</code></p>
</div>
<h4 class="fancy-heading-panel"><b>Body Parameters</b></h4>
<div style=" padding-left: 28px; clear: unset;">
<b style="line-height: 2;"><code>first_name</code></b> <small>string</small> <i>optional</i> <input type="text" style="display: none" name="first_name" data-endpoint="POSTv2-customers" value="John" data-component="body">
<br>
<p>Customer first (given) name. Must not be greater than 255 characters. Example: <code>John</code></p>
</div>
<div style=" padding-left: 28px; clear: unset;">
<b style="line-height: 2;"><code>last_name</code></b> <small>string</small> <i>optional</i> <input type="text" style="display: none" name="last_name" data-endpoint="POSTv2-customers" value="Smith" data-component="body">
<br>
<p>Customer last (family) name. Must not be greater than 255 characters. Example: <code>Smith</code></p>
</div>
<div style=" padding-left: 28px; clear: unset;">
<b style="line-height: 2;"><code>email</code></b> <small>string</small> <input type="text" style="display: none" name="email" data-endpoint="POSTv2-customers" value="john.smith@example.com" data-component="body">
<br>
<p>Customer email address. Must be a valid email address. Must not be greater than 255 characters. Example: <code>john.smith@example.com</code></p>
</div>
<div style=" padding-left: 28px; clear: unset;">
<b style="line-height: 2;"><code>telephone</code></b> <small>string</small> <i>optional</i> <input type="text" style="display: none" name="telephone" data-endpoint="POSTv2-customers" value="01234 567890"
data-component="body">
<br>
<p>Customer Telephone number. Must not be greater than 255 characters. Example: <code>01234 567890</code></p>
</div>
<div style=" padding-left: 28px; clear: unset;">
<b style="line-height: 2;"><code>address</code></b> <small>string</small> <i>optional</i> <input type="text" style="display: none" name="address" data-endpoint="POSTv2-customers" value="123 Some Street, London, UK"
data-component="body">
<br>
<p>Customer Address. Must not be greater than 255 characters. Example: <code>123 Some Street, London, UK</code></p>
</div>
<div style=" padding-left: 28px; clear: unset;">
<b style="line-height: 2;"><code>marketing_consent</code></b> <small>boolean</small> <i>optional</i> <label data-endpoint="POSTv2-customers" style="display: none">
<input type="radio" name="marketing_consent" value="true" data-endpoint="POSTv2-customers" data-component="body">
<code>true</code>
</label>
<label data-endpoint="POSTv2-customers" style="display: none">
<input type="radio" name="marketing_consent" value="false" data-endpoint="POSTv2-customers" data-component="body">
<code>false</code>
</label>
<br>
<p>Customer has opted in to marketing. Example: <code>true</code></p>
</div>
</form>
<form id="form-GETv2-customers--id-" data-method="GET" data-path="v2/customers/{id}" data-authed="1" data-hasfiles="0" data-isarraybody="0" autocomplete="off" onsubmit="event.preventDefault(); executeTryOut('GETv2-customers--id-', this);">
<h3> Request </h3>
<p>
<small class="badge badge-green">GET</small>
<b><code>v2/customers/{id}</code></b>
</p>
<h4 class="fancy-heading-panel"><b>Headers</b></h4>
<div style="padding-left: 28px; clear: unset;">
<b style="line-height: 2;"><code>Authorization</code></b> <input type="text" style="display: none" name="Authorization" class="auth-value" data-endpoint="GETv2-customers--id-" value="Bearer {YOUR_AUTH_KEY}"
data-component="header">
<br>
<p>Example: <code>Bearer {YOUR_AUTH_KEY}</code></p>
</div>
<div style="padding-left: 28px; clear: unset;">
<b style="line-height: 2;"><code>Content-Type</code></b> <input type="text" style="display: none" name="Content-Type" data-endpoint="GETv2-customers--id-" value="application/json" data-component="header">
<br>
<p>Example: <code>application/json</code></p>
</div>
<div style="padding-left: 28px; clear: unset;">
<b style="line-height: 2;"><code>Accept</code></b> <input type="text" style="display: none" name="Accept" data-endpoint="GETv2-customers--id-" value="application/json" data-component="header">
<br>
<p>Example: <code>application/json</code></p>
</div>
<h4 class="fancy-heading-panel"><b>URL Parameters</b></h4>
<div style="padding-left: 28px; clear: unset;">
<b style="line-height: 2;"><code>id</code></b> <small>string</small> <input type="text" style="display: none" name="id" data-endpoint="GETv2-customers--id-" value="1d368e62" data-component="url">
<br>
<p>The Public API Hash ID of the customer. Example: <code>1d368e62</code></p>
</div>
</form>
<form id="form-PUTv2-customers--id-" data-method="PUT" data-path="v2/customers/{id}" data-authed="1" data-hasfiles="0" data-isarraybody="0" autocomplete="off" onsubmit="event.preventDefault(); executeTryOut('PUTv2-customers--id-', this);">
<h3> Request </h3>
<p>
<small class="badge badge-darkblue">PUT</small>
<b><code>v2/customers/{id}</code></b>
</p>
<p>
<small class="badge badge-purple">PATCH</small>
<b><code>v2/customers/{id}</code></b>
</p>
<h4 class="fancy-heading-panel"><b>Headers</b></h4>
<div style="padding-left: 28px; clear: unset;">
<b style="line-height: 2;"><code>Authorization</code></b> <input type="text" style="display: none" name="Authorization" class="auth-value" data-endpoint="PUTv2-customers--id-" value="Bearer {YOUR_AUTH_KEY}"
data-component="header">
<br>
<p>Example: <code>Bearer {YOUR_AUTH_KEY}</code></p>
</div>
<div style="padding-left: 28px; clear: unset;">
<b style="line-height: 2;"><code>Content-Type</code></b> <input type="text" style="display: none" name="Content-Type" data-endpoint="PUTv2-customers--id-" value="application/json" data-component="header">
<br>
<p>Example: <code>application/json</code></p>
</div>
<div style="padding-left: 28px; clear: unset;">
<b style="line-height: 2;"><code>Accept</code></b> <input type="text" style="display: none" name="Accept" data-endpoint="PUTv2-customers--id-" value="application/json" data-component="header">
<br>
<p>Example: <code>application/json</code></p>
</div>
<h4 class="fancy-heading-panel"><b>URL Parameters</b></h4>
<div style="padding-left: 28px; clear: unset;">
<b style="line-height: 2;"><code>id</code></b> <small>string</small> <input type="text" style="display: none" name="id" data-endpoint="PUTv2-customers--id-" value="1d368e62" data-component="url">
<br>
<p>The Public API Hash ID of the customer. Example: <code>1d368e62</code></p>
</div>
<h4 class="fancy-heading-panel"><b>Body Parameters</b></h4>
<div style=" padding-left: 28px; clear: unset;">
<b style="line-height: 2;"><code>first_name</code></b> <small>string</small> <i>optional</i> <input type="text" style="display: none" name="first_name" data-endpoint="PUTv2-customers--id-" value="John"
data-component="body">
<br>
<p>Customer first (given) name. Must not be greater than 255 characters. Example: <code>John</code></p>
</div>
<div style=" padding-left: 28px; clear: unset;">
<b style="line-height: 2;"><code>last_name</code></b> <small>string</small> <i>optional</i> <input type="text" style="display: none" name="last_name" data-endpoint="PUTv2-customers--id-" value="Smith"
data-component="body">
<br>
<p>Customer last (family) name. Must not be greater than 255 characters. Example: <code>Smith</code></p>
</div>
<div style=" padding-left: 28px; clear: unset;">
<b style="line-height: 2;"><code>email</code></b> <small>string</small> <input type="text" style="display: none" name="email" data-endpoint="PUTv2-customers--id-" value="john.smith@example.com" data-component="body">
<br>
<p>Customer email address. Must be a valid email address. Must not be greater than 255 characters. Example: <code>john.smith@example.com</code></p>
</div>
<div style=" padding-left: 28px; clear: unset;">
<b style="line-height: 2;"><code>telephone</code></b> <small>string</small> <i>optional</i> <input type="text" style="display: none" name="telephone" data-endpoint="PUTv2-customers--id-" value="01234 567890"
data-component="body">
<br>
<p>Customer Telephone number. Must not be greater than 255 characters. Example: <code>01234 567890</code></p>
</div>
<div style=" padding-left: 28px; clear: unset;">
<b style="line-height: 2;"><code>address</code></b> <small>string</small> <i>optional</i> <input type="text" style="display: none" name="address" data-endpoint="PUTv2-customers--id-" value="123 Some Street, London, UK"
data-component="body">
<br>
<p>Customer Address. Must not be greater than 255 characters. Example: <code>123 Some Street, London, UK</code></p>
</div>
<div style=" padding-left: 28px; clear: unset;">
<b style="line-height: 2;"><code>marketing_consent</code></b> <small>boolean</small> <i>optional</i> <label data-endpoint="PUTv2-customers--id-" style="display: none">
<input type="radio" name="marketing_consent" value="true" data-endpoint="PUTv2-customers--id-" data-component="body">
<code>true</code>
</label>
<label data-endpoint="PUTv2-customers--id-" style="display: none">
<input type="radio" name="marketing_consent" value="false" data-endpoint="PUTv2-customers--id-" data-component="body">
<code>false</code>
</label>
<br>
<p>Customer has opted in to marketing. Example: <code>true</code></p>
</div>
</form>
<form id="form-DELETEv2-customers--id-" data-method="DELETE" data-path="v2/customers/{id}" data-authed="1" data-hasfiles="0" data-isarraybody="0" autocomplete="off" onsubmit="event.preventDefault(); executeTryOut('DELETEv2-customers--id-', this);">
<h3> Request </h3>
<p>
<small class="badge badge-red">DELETE</small>
<b><code>v2/customers/{id}</code></b>
</p>
<h4 class="fancy-heading-panel"><b>Headers</b></h4>
<div style="padding-left: 28px; clear: unset;">
<b style="line-height: 2;"><code>Authorization</code></b> <input type="text" style="display: none" name="Authorization" class="auth-value" data-endpoint="DELETEv2-customers--id-" value="Bearer {YOUR_AUTH_KEY}"
data-component="header">
<br>
<p>Example: <code>Bearer {YOUR_AUTH_KEY}</code></p>
</div>
<div style="padding-left: 28px; clear: unset;">
<b style="line-height: 2;"><code>Content-Type</code></b> <input type="text" style="display: none" name="Content-Type" data-endpoint="DELETEv2-customers--id-" value="application/json" data-component="header">
<br>
<p>Example: <code>application/json</code></p>
</div>
<div style="padding-left: 28px; clear: unset;">
<b style="line-height: 2;"><code>Accept</code></b> <input type="text" style="display: none" name="Accept" data-endpoint="DELETEv2-customers--id-" value="application/json" data-component="header">
<br>
<p>Example: <code>application/json</code></p>
</div>
<h4 class="fancy-heading-panel"><b>URL Parameters</b></h4>
<div style="padding-left: 28px; clear: unset;">
<b style="line-height: 2;"><code>id</code></b> <small>string</small> <input type="text" style="display: none" name="id" data-endpoint="DELETEv2-customers--id-" value="1d368e62" data-component="url">
<br>
<p>The Public API Hash ID of the customer. Example: <code>1d368e62</code></p>
</div>
</form>
<form id="form-GETv2-orders" data-method="GET" data-path="v2/orders" data-authed="1" data-hasfiles="0" data-isarraybody="0" autocomplete="off" onsubmit="event.preventDefault(); executeTryOut('GETv2-orders', this);">
<h3> Request </h3>
<p>
<small class="badge badge-green">GET</small>
<b><code>v2/orders</code></b>
</p>
<h4 class="fancy-heading-panel"><b>Headers</b></h4>
<div style="padding-left: 28px; clear: unset;">
<b style="line-height: 2;"><code>Authorization</code></b> <input type="text" style="display: none" name="Authorization" class="auth-value" data-endpoint="GETv2-orders" value="Bearer {YOUR_AUTH_KEY}"
data-component="header">
<br>
<p>Example: <code>Bearer {YOUR_AUTH_KEY}</code></p>
</div>
<div style="padding-left: 28px; clear: unset;">
<b style="line-height: 2;"><code>Content-Type</code></b> <input type="text" style="display: none" name="Content-Type" data-endpoint="GETv2-orders" value="application/json" data-component="header">
<br>
<p>Example: <code>application/json</code></p>
</div>
<div style="padding-left: 28px; clear: unset;">
<b style="line-height: 2;"><code>Accept</code></b> <input type="text" style="display: none" name="Accept" data-endpoint="GETv2-orders" value="application/json" data-component="header">
<br>
<p>Example: <code>application/json</code></p>
</div>
<h4 class="fancy-heading-panel"><b>Query Parameters</b></h4>
<div style="padding-left: 28px; clear: unset;">
<b style="line-height: 2;"><code>search</code></b> <small>string</small> <i>optional</i> <input type="text" style="display: none" name="search" data-endpoint="GETv2-orders" value="Smith" data-component="query">
<br>
<p>Filter orders by customer first name, last name, or email. Example: "Smith" or "john.smith@example.com". Must not be greater than 255 characters. Example: <code>Smith</code></p>
</div>
<div style="padding-left: 28px; clear: unset;">
<b style="line-height: 2;"><code>sort</code></b> <small>string</small> <i>optional</i> <input type="text" style="display: none" name="sort" data-endpoint="GETv2-orders" value="amount_desc" data-component="query">
<br>
<p>Order results by column. Example: <code>amount_desc</code></p> Must be one of: <ul style="list-style-type: square;">
<li><code>created_asc</code></li>
<li><code>created_desc</code></li>
<li><code>amount_asc</code></li>
<li><code>amount_desc</code></li>
</ul>
</div>
<div style="padding-left: 28px; clear: unset;">
<b style="line-height: 2;"><code>payment_status</code></b> <small>string</small> <i>optional</i> <input type="text" style="display: none" name="payment_status" data-endpoint="GETv2-orders" value="paid"
data-component="query">
<br>
<p>Filter orders by payment status. Example: <code>paid</code></p> Must be one of: <ul style="list-style-type: square;">
<li><code>created</code></li>
<li><code>pending</code></li>
<li><code>paid</code></li>
<li><code>failed</code></li>
<li><code>cancelled</code></li>
<li><code>refunded</code></li>
</ul>
</div>
<div style="padding-left: 28px; clear: unset;">
<b style="line-height: 2;"><code>start_date</code></b> <small>string</small> <i>optional</i> <input type="text" style="display: none" name="start_date" data-endpoint="GETv2-orders" value="2023-01-01"
data-component="query">
<br>
<p>Start date in yyyy-mm-dd format. Must be a valid date. Example: <code>2023-01-01</code></p>
</div>
<div style="padding-left: 28px; clear: unset;">
<b style="line-height: 2;"><code>end_date</code></b> <small>string</small> <i>optional</i> <input type="text" style="display: none" name="end_date" data-endpoint="GETv2-orders" value="2023-12-31" data-component="query">
<br>
<p>End date in yyyy-mm-dd format. Must be a valid date. Example: <code>2023-12-31</code></p>
</div>
<div style="padding-left: 28px; clear: unset;">
<b style="line-height: 2;"><code>per_page</code></b> <small>integer</small> <i>optional</i> <input type="number" style="display: none" step="any" name="per_page" data-endpoint="GETv2-orders" value="100"
data-component="query">
<br>
<p>Number of results per page. Default: 25. Must be at least 1. Must not be greater than 1000. Example: <code>100</code></p>
</div>
</form>
<form id="form-GETv2-orders--id-" data-method="GET" data-path="v2/orders/{id}" data-authed="1" data-hasfiles="0" data-isarraybody="0" autocomplete="off" onsubmit="event.preventDefault(); executeTryOut('GETv2-orders--id-', this);">
<h3> Request </h3>
<p>
<small class="badge badge-green">GET</small>
<b><code>v2/orders/{id}</code></b>
</p>
<h4 class="fancy-heading-panel"><b>Headers</b></h4>
<div style="padding-left: 28px; clear: unset;">
<b style="line-height: 2;"><code>Authorization</code></b> <input type="text" style="display: none" name="Authorization" class="auth-value" data-endpoint="GETv2-orders--id-" value="Bearer {YOUR_AUTH_KEY}"
data-component="header">
<br>
<p>Example: <code>Bearer {YOUR_AUTH_KEY}</code></p>
</div>
<div style="padding-left: 28px; clear: unset;">
<b style="line-height: 2;"><code>Content-Type</code></b> <input type="text" style="display: none" name="Content-Type" data-endpoint="GETv2-orders--id-" value="application/json" data-component="header">
<br>
<p>Example: <code>application/json</code></p>
</div>
<div style="padding-left: 28px; clear: unset;">
<b style="line-height: 2;"><code>Accept</code></b> <input type="text" style="display: none" name="Accept" data-endpoint="GETv2-orders--id-" value="application/json" data-component="header">
<br>
<p>Example: <code>application/json</code></p>
</div>
<h4 class="fancy-heading-panel"><b>URL Parameters</b></h4>
<div style="padding-left: 28px; clear: unset;">
<b style="line-height: 2;"><code>id</code></b> <small>string</small> <input type="text" style="display: none" name="id" data-endpoint="GETv2-orders--id-" value="culpa" data-component="url">
<br>
<p>The Public API Hash ID of the Payment record. Example: <code>culpa</code></p>
</div>
</form>
<form id="form-POSTv2-quick-pay" data-method="POST" data-path="v2/quick-pay" data-authed="1" data-hasfiles="0" data-isarraybody="0" autocomplete="off" onsubmit="event.preventDefault(); executeTryOut('POSTv2-quick-pay', this);">
<h3> Request </h3>
<p>
<small class="badge badge-black">POST</small>
<b><code>v2/quick-pay</code></b>
</p>
<h4 class="fancy-heading-panel"><b>Headers</b></h4>
<div style="padding-left: 28px; clear: unset;">
<b style="line-height: 2;"><code>Authorization</code></b> <input type="text" style="display: none" name="Authorization" class="auth-value" data-endpoint="POSTv2-quick-pay" value="Bearer {YOUR_AUTH_KEY}"
data-component="header">
<br>
<p>Example: <code>Bearer {YOUR_AUTH_KEY}</code></p>
</div>
<div style="padding-left: 28px; clear: unset;">
<b style="line-height: 2;"><code>Content-Type</code></b> <input type="text" style="display: none" name="Content-Type" data-endpoint="POSTv2-quick-pay" value="application/json" data-component="header">
<br>
<p>Example: <code>application/json</code></p>
</div>
<div style="padding-left: 28px; clear: unset;">
<b style="line-height: 2;"><code>Accept</code></b> <input type="text" style="display: none" name="Accept" data-endpoint="POSTv2-quick-pay" value="application/json" data-component="header">
<br>
<p>Example: <code>application/json</code></p>
</div>
<h4 class="fancy-heading-panel"><b>Body Parameters</b></h4>
<div style=" padding-left: 28px; clear: unset;">
<b style="line-height: 2;"><code>amount</code></b> <small>integer</small> <input type="number" style="display: none" step="any" name="amount" data-endpoint="POSTv2-quick-pay" value="1234" data-component="body">
<br>
<p>Amount in base currency units (GB Pence). Must be at least 5. Example: <code>1234</code></p>
</div>
<div style=" padding-left: 28px; clear: unset;">
<b style="line-height: 2;"><code>merchant_payment_reference</code></b> <small>string</small> <input type="text" style="display: none" name="merchant_payment_reference" data-endpoint="POSTv2-quick-pay" value="ORDER-1234"
data-component="body">
<br>
<p>Merchant payment reference to show on the bank statement. Must not be greater than 18 characters. Example: <code>ORDER-1234</code></p>
</div>
<div style=" padding-left: 28px; clear: unset;">
<b style="line-height: 2;"><code>payment_description</code></b> <small>string</small> <i>optional</i> <input type="text" style="display: none" name="payment_description" data-endpoint="POSTv2-quick-pay"
value="Website Order 1234" data-component="body">
<br>
<p>Payment description to show against the Order record. Must not be greater than 255 characters. Example: <code>Website Order 1234</code></p>
</div>
<div style=" padding-left: 28px; clear: unset;">
<b style="line-height: 2;"><code>customer_email_address</code></b> <small>string</small> <i>optional</i> <input type="text" style="display: none" name="customer_email_address" data-endpoint="POSTv2-quick-pay"
value="john.smith@example.com" data-component="body">
<br>
<p>Customer email address. If set, this will link the Order to the Customer record. Must be a valid email address. Must not be greater than 255 characters. Example: <code>john.smith@example.com</code></p>
</div>
<div style=" padding-left: 28px; clear: unset;">
<b style="line-height: 2;"><code>redirect_url</code></b> <small>string</small> <input type="text" style="display: none" name="redirect_url" data-endpoint="POSTv2-quick-pay" value="https://your-website.example.com/success"
data-component="body">
<br>
<p>The URL to redirect to after the payment has been completed. Must be a valid URL. Example: <code>https://your-website.example.com/success</code></p>
</div>
<div style=" padding-left: 28px; clear: unset;">
<b style="line-height: 2;"><code>webhook_url</code></b> <small>string</small> <i>optional</i> <input type="text" style="display: none" name="webhook_url" data-endpoint="POSTv2-quick-pay"
value="https://your-website.example.com/webhooks" data-component="body">
<br>
<p>The URL to send webhook notifications to. Must be a valid URL. Example: <code>https://your-website.example.com/webhooks</code></p>
</div>
</form>
<form id="form-GETv2-payments" data-method="GET" data-path="v2/payments" data-authed="1" data-hasfiles="0" data-isarraybody="0" autocomplete="off" onsubmit="event.preventDefault(); executeTryOut('GETv2-payments', this);">
<h3> Request </h3>
<p>
<small class="badge badge-green">GET</small>
<b><code>v2/payments</code></b>
</p>
<h4 class="fancy-heading-panel"><b>Headers</b></h4>
<div style="padding-left: 28px; clear: unset;">
<b style="line-height: 2;"><code>Authorization</code></b> <input type="text" style="display: none" name="Authorization" class="auth-value" data-endpoint="GETv2-payments" value="Bearer {YOUR_AUTH_KEY}"
data-component="header">
<br>
<p>Example: <code>Bearer {YOUR_AUTH_KEY}</code></p>
</div>
<div style="padding-left: 28px; clear: unset;">
<b style="line-height: 2;"><code>Content-Type</code></b> <input type="text" style="display: none" name="Content-Type" data-endpoint="GETv2-payments" value="application/json" data-component="header">
<br>
<p>Example: <code>application/json</code></p>
</div>
<div style="padding-left: 28px; clear: unset;">
<b style="line-height: 2;"><code>Accept</code></b> <input type="text" style="display: none" name="Accept" data-endpoint="GETv2-payments" value="application/json" data-component="header">
<br>
<p>Example: <code>application/json</code></p>
</div>
<h4 class="fancy-heading-panel"><b>Query Parameters</b></h4>
<div style="padding-left: 28px; clear: unset;">
<b style="line-height: 2;"><code>search</code></b> <small>string</small> <i>optional</i> <input type="text" style="display: none" name="search" data-endpoint="GETv2-payments" value="ORDER" data-component="query">
<br>
<p>Filter payment results by order reference. Example: "ONE" or "ABC123". Must not be greater than 255 characters. Example: <code>ORDER</code></p>
</div>
<div style="padding-left: 28px; clear: unset;">
<b style="line-height: 2;"><code>sort</code></b> <small>string</small> <i>optional</i> <input type="text" style="display: none" name="sort" data-endpoint="GETv2-payments" value="amount_desc" data-component="query">
<br>
<p>Order results by column. Example: <code>amount_desc</code></p> Must be one of: <ul style="list-style-type: square;">
<li><code>created_asc</code></li>
<li><code>created_desc</code></li>
<li><code>amount_asc</code></li>
<li><code>amount_desc</code></li>
</ul>
</div>
<div style="padding-left: 28px; clear: unset;">
<b style="line-height: 2;"><code>start_date</code></b> <small>string</small> <i>optional</i> <input type="text" style="display: none" name="start_date" data-endpoint="GETv2-payments" value="2023-01-01"
data-component="query">
<br>
<p>Start date in yyyy-mm-dd format. Must be a valid date. Example: <code>2023-01-01</code></p>
</div>
<div style="padding-left: 28px; clear: unset;">
<b style="line-height: 2;"><code>end_date</code></b> <small>string</small> <i>optional</i> <input type="text" style="display: none" name="end_date" data-endpoint="GETv2-payments" value="2023-12-31" data-component="query">
<br>
<p>End date in yyyy-mm-dd format. Must be a valid date. Example: <code>2023-12-31</code></p>
</div>
<div style="padding-left: 28px; clear: unset;">
<b style="line-height: 2;"><code>per_page</code></b> <small>integer</small> <i>optional</i> <input type="number" style="display: none" step="any" name="per_page" data-endpoint="GETv2-payments" value="100"
data-component="query">
<br>
<p>Number of results per page. Default: 25. Must be at least 1. Must not be greater than 1000. Example: <code>100</code></p>
</div>
</form>
<form id="form-GETv2-payments--id-" data-method="GET" data-path="v2/payments/{id}" data-authed="1" data-hasfiles="0" data-isarraybody="0" autocomplete="off" onsubmit="event.preventDefault(); executeTryOut('GETv2-payments--id-', this);">
<h3> Request </h3>
<p>
<small class="badge badge-green">GET</small>
<b><code>v2/payments/{id}</code></b>
</p>
<h4 class="fancy-heading-panel"><b>Headers</b></h4>
<div style="padding-left: 28px; clear: unset;">
<b style="line-height: 2;"><code>Authorization</code></b> <input type="text" style="display: none" name="Authorization" class="auth-value" data-endpoint="GETv2-payments--id-" value="Bearer {YOUR_AUTH_KEY}"
data-component="header">
<br>
<p>Example: <code>Bearer {YOUR_AUTH_KEY}</code></p>
</div>
<div style="padding-left: 28px; clear: unset;">
<b style="line-height: 2;"><code>Content-Type</code></b> <input type="text" style="display: none" name="Content-Type" data-endpoint="GETv2-payments--id-" value="application/json" data-component="header">
<br>
<p>Example: <code>application/json</code></p>
</div>
<div style="padding-left: 28px; clear: unset;">
<b style="line-height: 2;"><code>Accept</code></b> <input type="text" style="display: none" name="Accept" data-endpoint="GETv2-payments--id-" value="application/json" data-component="header">
<br>
<p>Example: <code>application/json</code></p>
</div>
<h4 class="fancy-heading-panel"><b>URL Parameters</b></h4>
<div style="padding-left: 28px; clear: unset;">
<b style="line-height: 2;"><code>id</code></b> <small>string</small> <input type="text" style="display: none" name="id" data-endpoint="GETv2-payments--id-" value="culpa" data-component="url">
<br>
<p>The Public API Hash ID of the Payment record. Example: <code>culpa</code></p>
</div>
</form>
<form id="form-GETv2-qr-codes" data-method="GET" data-path="v2/qr-codes" data-authed="1" data-hasfiles="0" data-isarraybody="0" autocomplete="off" onsubmit="event.preventDefault(); executeTryOut('GETv2-qr-codes', this);">
<h3> Request </h3>
<p>
<small class="badge badge-green">GET</small>
<b><code>v2/qr-codes</code></b>
</p>
<h4 class="fancy-heading-panel"><b>Headers</b></h4>
<div style="padding-left: 28px; clear: unset;">
<b style="line-height: 2;"><code>Authorization</code></b> <input type="text" style="display: none" name="Authorization" class="auth-value" data-endpoint="GETv2-qr-codes" value="Bearer {YOUR_AUTH_KEY}"
data-component="header">
<br>
<p>Example: <code>Bearer {YOUR_AUTH_KEY}</code></p>
</div>
<div style="padding-left: 28px; clear: unset;">
<b style="line-height: 2;"><code>Content-Type</code></b> <input type="text" style="display: none" name="Content-Type" data-endpoint="GETv2-qr-codes" value="application/json" data-component="header">
<br>
<p>Example: <code>application/json</code></p>
</div>
<div style="padding-left: 28px; clear: unset;">
<b style="line-height: 2;"><code>Accept</code></b> <input type="text" style="display: none" name="Accept" data-endpoint="GETv2-qr-codes" value="application/json" data-component="header">
<br>
<p>Example: <code>application/json</code></p>
</div>
</form>
<form id="form-POSTv2-qr-codes" data-method="POST" data-path="v2/qr-codes" data-authed="1" data-hasfiles="0" data-isarraybody="0" autocomplete="off" onsubmit="event.preventDefault(); executeTryOut('POSTv2-qr-codes', this);">
<h3> Request </h3>
<p>
<small class="badge badge-black">POST</small>
<b><code>v2/qr-codes</code></b>
</p>
<h4 class="fancy-heading-panel"><b>Headers</b></h4>
<div style="padding-left: 28px; clear: unset;">
<b style="line-height: 2;"><code>Authorization</code></b> <input type="text" style="display: none" name="Authorization" class="auth-value" data-endpoint="POSTv2-qr-codes" value="Bearer {YOUR_AUTH_KEY}"
data-component="header">
<br>
<p>Example: <code>Bearer {YOUR_AUTH_KEY}</code></p>
</div>
<div style="padding-left: 28px; clear: unset;">
<b style="line-height: 2;"><code>Content-Type</code></b> <input type="text" style="display: none" name="Content-Type" data-endpoint="POSTv2-qr-codes" value="application/json" data-component="header">
<br>
<p>Example: <code>application/json</code></p>
</div>
<div style="padding-left: 28px; clear: unset;">
<b style="line-height: 2;"><code>Accept</code></b> <input type="text" style="display: none" name="Accept" data-endpoint="POSTv2-qr-codes" value="application/json" data-component="header">
<br>
<p>Example: <code>application/json</code></p>
</div>
<h4 class="fancy-heading-panel"><b>Body Parameters</b></h4>
<div style=" padding-left: 28px; clear: unset;">
<b style="line-height: 2;"><code>amount</code></b> <small>integer</small> <input type="number" style="display: none" step="any" name="amount" data-endpoint="POSTv2-qr-codes" value="1234" data-component="body">
<br>
<p>Amount in base currency units (GB Pence). Must not be greater than 5000000. Example: <code>1234</code></p>
</div>
<div style=" padding-left: 28px; clear: unset;">
<b style="line-height: 2;"><code>label</code></b> <small>string</small> <input type="text" style="display: none" name="label" data-endpoint="POSTv2-qr-codes" value="Blue Widget" data-component="body">
<br>
<p>QR Code label or description (shown to customers). Must not be greater than 255 characters. Example: <code>Blue Widget</code></p>
</div>
</form>
<form id="form-GETv2-qr-codes--id-" data-method="GET" data-path="v2/qr-codes/{id}" data-authed="1" data-hasfiles="0" data-isarraybody="0" autocomplete="off" onsubmit="event.preventDefault(); executeTryOut('GETv2-qr-codes--id-', this);">
<h3> Request </h3>
<p>
<small class="badge badge-green">GET</small>
<b><code>v2/qr-codes/{id}</code></b>
</p>
<h4 class="fancy-heading-panel"><b>Headers</b></h4>
<div style="padding-left: 28px; clear: unset;">
<b style="line-height: 2;"><code>Authorization</code></b> <input type="text" style="display: none" name="Authorization" class="auth-value" data-endpoint="GETv2-qr-codes--id-" value="Bearer {YOUR_AUTH_KEY}"
data-component="header">
<br>
<p>Example: <code>Bearer {YOUR_AUTH_KEY}</code></p>
</div>
<div style="padding-left: 28px; clear: unset;">
<b style="line-height: 2;"><code>Content-Type</code></b> <input type="text" style="display: none" name="Content-Type" data-endpoint="GETv2-qr-codes--id-" value="application/json" data-component="header">
<br>
<p>Example: <code>application/json</code></p>
</div>
<div style="padding-left: 28px; clear: unset;">
<b style="line-height: 2;"><code>Accept</code></b> <input type="text" style="display: none" name="Accept" data-endpoint="GETv2-qr-codes--id-" value="application/json" data-component="header">
<br>
<p>Example: <code>application/json</code></p>
</div>
<h4 class="fancy-heading-panel"><b>URL Parameters</b></h4>
<div style="padding-left: 28px; clear: unset;">
<b style="line-height: 2;"><code>id</code></b> <small>string</small> <input type="text" style="display: none" name="id" data-endpoint="GETv2-qr-codes--id-" value="0e261265" data-component="url">
<br>
<p>the Public API Hash ID of the QR Code. Example: <code>0e261265</code></p>
</div>
</form>
<form id="form-PUTv2-qr-codes--id-" data-method="PUT" data-path="v2/qr-codes/{id}" data-authed="1" data-hasfiles="0" data-isarraybody="0" autocomplete="off" onsubmit="event.preventDefault(); executeTryOut('PUTv2-qr-codes--id-', this);">
<h3> Request </h3>
<p>
<small class="badge badge-darkblue">PUT</small>
<b><code>v2/qr-codes/{id}</code></b>
</p>
<p>
<small class="badge badge-purple">PATCH</small>
<b><code>v2/qr-codes/{id}</code></b>
</p>
<h4 class="fancy-heading-panel"><b>Headers</b></h4>
<div style="padding-left: 28px; clear: unset;">
<b style="line-height: 2;"><code>Authorization</code></b> <input type="text" style="display: none" name="Authorization" class="auth-value" data-endpoint="PUTv2-qr-codes--id-" value="Bearer {YOUR_AUTH_KEY}"
data-component="header">
<br>
<p>Example: <code>Bearer {YOUR_AUTH_KEY}</code></p>
</div>
<div style="padding-left: 28px; clear: unset;">
<b style="line-height: 2;"><code>Content-Type</code></b> <input type="text" style="display: none" name="Content-Type" data-endpoint="PUTv2-qr-codes--id-" value="application/json" data-component="header">
<br>
<p>Example: <code>application/json</code></p>
</div>
<div style="padding-left: 28px; clear: unset;">
<b style="line-height: 2;"><code>Accept</code></b> <input type="text" style="display: none" name="Accept" data-endpoint="PUTv2-qr-codes--id-" value="application/json" data-component="header">
<br>
<p>Example: <code>application/json</code></p>
</div>
<h4 class="fancy-heading-panel"><b>URL Parameters</b></h4>
<div style="padding-left: 28px; clear: unset;">
<b style="line-height: 2;"><code>id</code></b> <small>string</small> <input type="text" style="display: none" name="id" data-endpoint="PUTv2-qr-codes--id-" value="0e261265" data-component="url">
<br>
<p>The Public API Hash ID of the QR Code. Example: <code>0e261265</code></p>
</div>
<h4 class="fancy-heading-panel"><b>Body Parameters</b></h4>
<div style=" padding-left: 28px; clear: unset;">
<b style="line-height: 2;"><code>amount</code></b> <small>integer</small> <input type="number" style="display: none" step="any" name="amount" data-endpoint="PUTv2-qr-codes--id-" value="1234" data-component="body">
<br>
<p>Amount in base currency units (GB Pence). Must not be greater than 5000000. Example: <code>1234</code></p>
</div>
<div style=" padding-left: 28px; clear: unset;">
<b style="line-height: 2;"><code>label</code></b> <small>string</small> <input type="text" style="display: none" name="label" data-endpoint="PUTv2-qr-codes--id-" value="Blue Widget" data-component="body">
<br>
<p>QR Code label or description (shown to customers). Must not be greater than 255 characters. Example: <code>Blue Widget</code></p>
</div>
</form>
<form id="form-DELETEv2-qr-codes--id-" data-method="DELETE" data-path="v2/qr-codes/{id}" data-authed="1" data-hasfiles="0" data-isarraybody="0" autocomplete="off" onsubmit="event.preventDefault(); executeTryOut('DELETEv2-qr-codes--id-', this);">
<h3> Request </h3>
<p>
<small class="badge badge-red">DELETE</small>
<b><code>v2/qr-codes/{id}</code></b>
</p>
<h4 class="fancy-heading-panel"><b>Headers</b></h4>
<div style="padding-left: 28px; clear: unset;">
<b style="line-height: 2;"><code>Authorization</code></b> <input type="text" style="display: none" name="Authorization" class="auth-value" data-endpoint="DELETEv2-qr-codes--id-" value="Bearer {YOUR_AUTH_KEY}"
data-component="header">
<br>
<p>Example: <code>Bearer {YOUR_AUTH_KEY}</code></p>
</div>
<div style="padding-left: 28px; clear: unset;">
<b style="line-height: 2;"><code>Content-Type</code></b> <input type="text" style="display: none" name="Content-Type" data-endpoint="DELETEv2-qr-codes--id-" value="application/json" data-component="header">
<br>
<p>Example: <code>application/json</code></p>
</div>
<div style="padding-left: 28px; clear: unset;">
<b style="line-height: 2;"><code>Accept</code></b> <input type="text" style="display: none" name="Accept" data-endpoint="DELETEv2-qr-codes--id-" value="application/json" data-component="header">
<br>
<p>Example: <code>application/json</code></p>
</div>
<h4 class="fancy-heading-panel"><b>URL Parameters</b></h4>
<div style="padding-left: 28px; clear: unset;">
<b style="line-height: 2;"><code>id</code></b> <small>string</small> <input type="text" style="display: none" name="id" data-endpoint="DELETEv2-qr-codes--id-" value="0e261265" data-component="url">
<br>
<p>The Public API Hash ID of the QR code. Example: <code>0e261265</code></p>
</div>
</form>
<form id="form-GETv2-supported-banks" data-method="GET" data-path="v2/supported-banks" data-authed="1" data-hasfiles="0" data-isarraybody="0" autocomplete="off" onsubmit="event.preventDefault(); executeTryOut('GETv2-supported-banks', this);">
<h3> Request </h3>
<p>
<small class="badge badge-green">GET</small>
<b><code>v2/supported-banks</code></b>
</p>
<h4 class="fancy-heading-panel"><b>Headers</b></h4>
<div style="padding-left: 28px; clear: unset;">
<b style="line-height: 2;"><code>Authorization</code></b> <input type="text" style="display: none" name="Authorization" class="auth-value" data-endpoint="GETv2-supported-banks" value="Bearer {YOUR_AUTH_KEY}"
data-component="header">
<br>
<p>Example: <code>Bearer {YOUR_AUTH_KEY}</code></p>
</div>
<div style="padding-left: 28px; clear: unset;">
<b style="line-height: 2;"><code>Content-Type</code></b> <input type="text" style="display: none" name="Content-Type" data-endpoint="GETv2-supported-banks" value="application/json" data-component="header">
<br>
<p>Example: <code>application/json</code></p>
</div>
<div style="padding-left: 28px; clear: unset;">
<b style="line-height: 2;"><code>Accept</code></b> <input type="text" style="display: none" name="Accept" data-endpoint="GETv2-supported-banks" value="application/json" data-component="header">
<br>
<p>Example: <code>application/json</code></p>
</div>
</form>
Text Content
MENU bash javascript php python * Introduction * Authenticating requests * Endpoints * Customers * List Customers * Create Customer * Show Customer * Update Customer * Delete Customer * Orders * List Orders * Show Order * Payments * Quick Pay * List Payments * Show Payment * QR Codes * List QR Codes * Create QR Code * Show QR Code * Update QR Code. * Delete QR Code * Supported Banks. * Documentation powered by Scribe ✍ * Last updated: March 11, 2024 INTRODUCTION One by Wonderful: Public API Documentation Base URL: https://api.wonderful.one This documentation aims to provide all the information you need to work with our API. As you scroll, you'll see code examples for working with the API in different programming languages in the dark area to the right (or as part of the content on mobile). You can switch the language used with the tabs at the top right (or from the nav menu at the top left on mobile). AUTHENTICATING REQUESTS To authenticate requests, include an Authorization header with the value "Bearer {YOUR_AUTH_KEY}". All authenticated endpoints are marked with a requires authentication badge in the documentation below. You can retrieve your token by visiting your dashboard and clicking Generate API token. ENDPOINTS CUSTOMERS LIST CUSTOMERS requires authentication List customers for the merchant. Supports basic searching on name and email address, ordering of results, and pagination. Default pagination is 25 results per page. > Example request: curl --request GET \ --get "https://api.wonderful.one/v2/customers?search=john.testmore%40example.com&sort=last_name_asc&start_date=2023-07-01&end_date=2023-12-31&per_page=10" \ --header "Authorization: Bearer {YOUR_AUTH_KEY}" \ --header "Content-Type: application/json" \ --header "Accept: application/json" const url = new URL( "https://api.wonderful.one/v2/customers" ); const params = { "search": "john.testmore@example.com", "sort": "last_name_asc", "start_date": "2023-07-01", "end_date": "2023-12-31", "per_page": "10", }; Object.keys(params) .forEach(key => url.searchParams.append(key, params[key])); const headers = { "Authorization": "Bearer {YOUR_AUTH_KEY}", "Content-Type": "application/json", "Accept": "application/json", }; fetch(url, { method: "GET", headers, }).then(response => response.json()); $client = new \GuzzleHttp\Client(); $url = 'https://api.wonderful.one/v2/customers'; $response = $client->get( $url, [ 'headers' => [ 'Authorization' => 'Bearer {YOUR_AUTH_KEY}', 'Content-Type' => 'application/json', 'Accept' => 'application/json', ], 'query' => [ 'search' => 'john.testmore@example.com', 'sort' => 'last_name_asc', 'start_date' => '2023-07-01', 'end_date' => '2023-12-31', 'per_page' => '10', ], ] ); $body = $response->getBody(); print_r(json_decode((string) $body)); import requests import json url = 'https://api.wonderful.one/v2/customers' params = { 'search': 'john.testmore@example.com', 'sort': 'last_name_asc', 'start_date': '2023-07-01', 'end_date': '2023-12-31', 'per_page': '10', } headers = { 'Authorization': 'Bearer {YOUR_AUTH_KEY}', 'Content-Type': 'application/json', 'Accept': 'application/json' } response = requests.request('GET', url, headers=headers, params=params) response.json() > Example response (200): { "data": [ { "id": "", "first_name": "Terry", "last_name": null, "full_name": "Terry", "email": "zrunolfsson@example.org", "address": "6443 Weimann Squares", "telephone": "+1-317-265-8763", "marketing_consented_at": null, "created_at": null, "updated_at": null }, { "id": "", "first_name": "Derrick", "last_name": null, "full_name": "Derrick", "email": "clifford.jenkins@example.net", "address": "734 Reilly Lock Suite 222", "telephone": "1-209-417-1194", "marketing_consented_at": null, "created_at": null, "updated_at": null } ], "links": { "first": "/?page=1", "last": null, "prev": null, "next": null }, "meta": { "current_page": 1, "from": 1, "path": "/", "per_page": "25", "to": 2 } } > Example response (200): { "data": [ { "id": "1d368e62", "first_name": "John", "last_name": "Testmore", "full_name": "John Testmore", "email": "john.testmore@example.com", "address": "1 Test Street, Test Town", "telephone": "0123456789", "marketing_consented_at": null, "created_at": "2023-05-02T22:07:21.000000Z", "updated_at": "2023-05-02T22:07:21.000000Z" } ], "links": { "first": "https://api.wonderful.one/v2/customers?page=1", "last": null, "prev": null, "next": null }, "meta": { "current_page": 1, "from": 1, "path": "https://api.wonderful.one/v2/customers", "per_page": 25, "to": 1 } } > Example response (401, Invalid auth token): { "error": true, "message": "Unauthenticated." } > Received response: > Request failed with error: Tip: Check that you're properly connected to the network. If you're a maintainer of ths API, verify that your API is running and you've enabled CORS. You can check the Dev Tools console for debugging information. REQUEST GET v2/customers HEADERS Authorization Example: Bearer {YOUR_AUTH_KEY} Content-Type Example: application/json Accept Example: application/json QUERY PARAMETERS search string optional Filter customer results by name or email. Example: "John" or "email@example.com". Example: john.testmore@example.com sort string optional Order results by column. Example: last_name_asc Must be one of: * created_asc * created_desc * first_name_asc * first_name_desc * last_name_asc * last_name_desc * last_order_asc * last_order_desc start_date string optional Start date in yyyy-mm-dd format. Must be a valid date. Example: 2023-07-01 end_date string optional End date in yyyy-mm-dd format. Must be a valid date. Example: 2023-12-31 per_page integer optional Number of results per page. Default: 25. Must be at least 1. Must not be greater than 1000. Example: 10 RESPONSE RESPONSE FIELDS id string Public API Hash ID of the Customer first_name string Customer's first name. Example: John last_name string Customer's last name. Example: Testmore full_name string Customer's full name. Example: John Testmore email string Customer's email address. Example: john.testmore@example.com address string Customer's address. Example: 1 Test Street, Test Town telephone string Customer's telephone number. Example: 0123456789 marketing_consented_at string nullable The date and time the Customer last opted in to marketing. Example: 2023-05-02T22:07:21.000000Z created_at string The date and time the Customer was created. Example: 2023-05-02T22:07:21.000000Z updated_at string The date and time the Customer was last updated. Example: 2023-05-02T22:07:21.000000Z CREATE CUSTOMER requires authentication Inserts a new customer record. > Example request: curl --request POST \ "https://api.wonderful.one/v2/customers" \ --header "Authorization: Bearer {YOUR_AUTH_KEY}" \ --header "Content-Type: application/json" \ --header "Accept: application/json" \ --data "{ \"first_name\": \"John\", \"last_name\": \"Smith\", \"email\": \"john.smith@example.com\", \"telephone\": \"01234 567890\", \"address\": \"123 Some Street, London, UK\", \"marketing_consent\": true }" const url = new URL( "https://api.wonderful.one/v2/customers" ); const headers = { "Authorization": "Bearer {YOUR_AUTH_KEY}", "Content-Type": "application/json", "Accept": "application/json", }; let body = { "first_name": "John", "last_name": "Smith", "email": "john.smith@example.com", "telephone": "01234 567890", "address": "123 Some Street, London, UK", "marketing_consent": true }; fetch(url, { method: "POST", headers, body: JSON.stringify(body), }).then(response => response.json()); $client = new \GuzzleHttp\Client(); $url = 'https://api.wonderful.one/v2/customers'; $response = $client->post( $url, [ 'headers' => [ 'Authorization' => 'Bearer {YOUR_AUTH_KEY}', 'Content-Type' => 'application/json', 'Accept' => 'application/json', ], 'json' => [ 'first_name' => 'John', 'last_name' => 'Smith', 'email' => 'john.smith@example.com', 'telephone' => '01234 567890', 'address' => '123 Some Street, London, UK', 'marketing_consent' => true, ], ] ); $body = $response->getBody(); print_r(json_decode((string) $body)); import requests import json url = 'https://api.wonderful.one/v2/customers' payload = { "first_name": "John", "last_name": "Smith", "email": "john.smith@example.com", "telephone": "01234 567890", "address": "123 Some Street, London, UK", "marketing_consent": true } headers = { 'Authorization': 'Bearer {YOUR_AUTH_KEY}', 'Content-Type': 'application/json', 'Accept': 'application/json' } response = requests.request('POST', url, headers=headers, json=payload) response.json() > Example response (200): { "data": { "id": "", "first_name": "Samanta", "last_name": null, "full_name": "Samanta", "email": "heloise.littel@example.org", "address": "222 Wisoky Extensions Suite 092", "telephone": "689-919-2730", "marketing_consented_at": null, "created_at": null, "updated_at": null } } > Example response (201, Created successfully): { "data": { "id": "1d368e62", "first_name": "John", "last_name": "Testmore", "full_name": "John Testmore", "email": "john.testmore@example.com", "address": "1 Test Street, Test Town", "telephone": "0123456789", "marketing_consented_at": null, "created_at": "2023-05-02T22:07:21.000000Z", "updated_at": "2023-05-02T22:07:21.000000Z" } } > Example response (422, Validation error): { "error": true, "message": "Validation failed", "invalid_fields": { "email": [ "The email field is required." ] } } > Received response: > Request failed with error: Tip: Check that you're properly connected to the network. If you're a maintainer of ths API, verify that your API is running and you've enabled CORS. You can check the Dev Tools console for debugging information. REQUEST POST v2/customers HEADERS Authorization Example: Bearer {YOUR_AUTH_KEY} Content-Type Example: application/json Accept Example: application/json BODY PARAMETERS first_name string optional Customer first (given) name. Must not be greater than 255 characters. Example: John last_name string optional Customer last (family) name. Must not be greater than 255 characters. Example: Smith email string Customer email address. Must be a valid email address. Must not be greater than 255 characters. Example: john.smith@example.com telephone string optional Customer Telephone number. Must not be greater than 255 characters. Example: 01234 567890 address string optional Customer Address. Must not be greater than 255 characters. Example: 123 Some Street, London, UK marketing_consent boolean optional true false Customer has opted in to marketing. Example: true RESPONSE RESPONSE FIELDS id string Public API Hash ID of the Customer first_name string Customer's first name. Example: John last_name string Customer's last name. Example: Testmore full_name string Customer's full name. Example: John Testmore email string Customer's email address. Example: john.testmore@example.com address string Customer's address. Example: 1 Test Street, Test Town telephone string Customer's telephone number. Example: 0123456789 marketing_consented_at string nullable The date and time the Customer last opted in to marketing. Example: 2023-05-02T22:07:21.000000Z created_at string The date and time the Customer was created. Example: 2023-05-02T22:07:21.000000Z updated_at string The date and time the Customer was last updated. Example: 2023-05-02T22:07:21.000000Z SHOW CUSTOMER requires authentication Show the details of a specific customer record. Pass the Public API Hash ID of the customer you want to retrieve on the URL. > Example request: curl --request GET \ --get "https://api.wonderful.one/v2/customers/1d368e62" \ --header "Authorization: Bearer {YOUR_AUTH_KEY}" \ --header "Content-Type: application/json" \ --header "Accept: application/json" const url = new URL( "https://api.wonderful.one/v2/customers/1d368e62" ); const headers = { "Authorization": "Bearer {YOUR_AUTH_KEY}", "Content-Type": "application/json", "Accept": "application/json", }; fetch(url, { method: "GET", headers, }).then(response => response.json()); $client = new \GuzzleHttp\Client(); $url = 'https://api.wonderful.one/v2/customers/1d368e62'; $response = $client->get( $url, [ 'headers' => [ 'Authorization' => 'Bearer {YOUR_AUTH_KEY}', 'Content-Type' => 'application/json', 'Accept' => 'application/json', ], ] ); $body = $response->getBody(); print_r(json_decode((string) $body)); import requests import json url = 'https://api.wonderful.one/v2/customers/1d368e62' headers = { 'Authorization': 'Bearer {YOUR_AUTH_KEY}', 'Content-Type': 'application/json', 'Accept': 'application/json' } response = requests.request('GET', url, headers=headers) response.json() > Example response (200): { "data": { "id": "", "first_name": "Tara", "last_name": null, "full_name": "Tara", "email": "serena86@example.net", "address": "227 Marcel Underpass", "telephone": "651-832-6809", "marketing_consented_at": null, "created_at": null, "updated_at": null } } > Example response (200): { "data": { "id": "1d368e62", "first_name": "John", "last_name": "Testmore", "full_name": "John Testmore", "email": "john.testmore@example.com", "address": "1 Test Street, Test Town", "telephone": "0123456789", "marketing_consented_at": null, "created_at": "2023-05-02T22:07:21.000000Z", "updated_at": "2023-05-02T22:07:21.000000Z" } } > Example response (404, Customer not found): { "error": true, "message": "Customer not found" } > Received response: > Request failed with error: Tip: Check that you're properly connected to the network. If you're a maintainer of ths API, verify that your API is running and you've enabled CORS. You can check the Dev Tools console for debugging information. REQUEST GET v2/customers/{id} HEADERS Authorization Example: Bearer {YOUR_AUTH_KEY} Content-Type Example: application/json Accept Example: application/json URL PARAMETERS id string The Public API Hash ID of the customer. Example: 1d368e62 RESPONSE RESPONSE FIELDS id string Public API Hash ID of the Customer first_name string Customer's first name. Example: John last_name string Customer's last name. Example: Testmore full_name string Customer's full name. Example: John Testmore email string Customer's email address. Example: john.testmore@example.com address string Customer's address. Example: 1 Test Street, Test Town telephone string Customer's telephone number. Example: 0123456789 marketing_consented_at string nullable The date and time the Customer last opted in to marketing. Example: 2023-05-02T22:07:21.000000Z created_at string The date and time the Customer was created. Example: 2023-05-02T22:07:21.000000Z updated_at string The date and time the Customer was last updated. Example: 2023-05-02T22:07:21.000000Z UPDATE CUSTOMER requires authentication Note: Pushing an update to a customer record will update the entire entity, so you must pass all the fields including those that have not been changed. > Example request: curl --request PUT \ "https://api.wonderful.one/v2/customers/1d368e62" \ --header "Authorization: Bearer {YOUR_AUTH_KEY}" \ --header "Content-Type: application/json" \ --header "Accept: application/json" \ --data "{ \"first_name\": \"John\", \"last_name\": \"Smith\", \"email\": \"john.smith@example.com\", \"telephone\": \"01234 567890\", \"address\": \"123 Some Street, London, UK\", \"marketing_consent\": true }" const url = new URL( "https://api.wonderful.one/v2/customers/1d368e62" ); const headers = { "Authorization": "Bearer {YOUR_AUTH_KEY}", "Content-Type": "application/json", "Accept": "application/json", }; let body = { "first_name": "John", "last_name": "Smith", "email": "john.smith@example.com", "telephone": "01234 567890", "address": "123 Some Street, London, UK", "marketing_consent": true }; fetch(url, { method: "PUT", headers, body: JSON.stringify(body), }).then(response => response.json()); $client = new \GuzzleHttp\Client(); $url = 'https://api.wonderful.one/v2/customers/1d368e62'; $response = $client->put( $url, [ 'headers' => [ 'Authorization' => 'Bearer {YOUR_AUTH_KEY}', 'Content-Type' => 'application/json', 'Accept' => 'application/json', ], 'json' => [ 'first_name' => 'John', 'last_name' => 'Smith', 'email' => 'john.smith@example.com', 'telephone' => '01234 567890', 'address' => '123 Some Street, London, UK', 'marketing_consent' => true, ], ] ); $body = $response->getBody(); print_r(json_decode((string) $body)); import requests import json url = 'https://api.wonderful.one/v2/customers/1d368e62' payload = { "first_name": "John", "last_name": "Smith", "email": "john.smith@example.com", "telephone": "01234 567890", "address": "123 Some Street, London, UK", "marketing_consent": true } headers = { 'Authorization': 'Bearer {YOUR_AUTH_KEY}', 'Content-Type': 'application/json', 'Accept': 'application/json' } response = requests.request('PUT', url, headers=headers, json=payload) response.json() > Example response (200): { "data": { "id": "", "first_name": "Pat", "last_name": null, "full_name": "Pat", "email": "ivy.mann@example.net", "address": "97159 Antonetta Rest", "telephone": "(979) 392-1698", "marketing_consented_at": null, "created_at": null, "updated_at": null } } > Example response (200, Updated successfully): { "data": { "id": "1d368e62", "first_name": "John", "last_name": "Testmore", "full_name": "John Testmore", "email": "john.testmore@example.com", "address": "1 Test Street, Test Town", "telephone": "0123456789", "marketing_consented_at": null, "created_at": "2023-05-02T22:07:21.000000Z", "updated_at": "2023-05-02T22:07:21.000000Z" } } > Example response (422, Validation error): { "error": true, "message": "Validation failed", "invalid_fields": { "email": [ "The email field is required." ] } } > Received response: > Request failed with error: Tip: Check that you're properly connected to the network. If you're a maintainer of ths API, verify that your API is running and you've enabled CORS. You can check the Dev Tools console for debugging information. REQUEST PUT v2/customers/{id} PATCH v2/customers/{id} HEADERS Authorization Example: Bearer {YOUR_AUTH_KEY} Content-Type Example: application/json Accept Example: application/json URL PARAMETERS id string The Public API Hash ID of the customer. Example: 1d368e62 BODY PARAMETERS first_name string optional Customer first (given) name. Must not be greater than 255 characters. Example: John last_name string optional Customer last (family) name. Must not be greater than 255 characters. Example: Smith email string Customer email address. Must be a valid email address. Must not be greater than 255 characters. Example: john.smith@example.com telephone string optional Customer Telephone number. Must not be greater than 255 characters. Example: 01234 567890 address string optional Customer Address. Must not be greater than 255 characters. Example: 123 Some Street, London, UK marketing_consent boolean optional true false Customer has opted in to marketing. Example: true RESPONSE RESPONSE FIELDS id string Public API Hash ID of the Customer first_name string Customer's first name. Example: John last_name string Customer's last name. Example: Testmore full_name string Customer's full name. Example: John Testmore email string Customer's email address. Example: john.testmore@example.com address string Customer's address. Example: 1 Test Street, Test Town telephone string Customer's telephone number. Example: 0123456789 marketing_consented_at string nullable The date and time the Customer last opted in to marketing. Example: 2023-05-02T22:07:21.000000Z created_at string The date and time the Customer was created. Example: 2023-05-02T22:07:21.000000Z updated_at string The date and time the Customer was last updated. Example: 2023-05-02T22:07:21.000000Z DELETE CUSTOMER requires authentication The delete customer endpoint will "soft-delete" a customer record. There is no mechanism via the API to restore a deleted record, if you need to restore a previously deleted record you will need to contact the support team. Note that a successful delete will return a HTTP 204 with an empty response body. Attempting to delete an already deleted record will return a HTTP 404 "not found" response. > Example request: curl --request DELETE \ "https://api.wonderful.one/v2/customers/1d368e62" \ --header "Authorization: Bearer {YOUR_AUTH_KEY}" \ --header "Content-Type: application/json" \ --header "Accept: application/json" const url = new URL( "https://api.wonderful.one/v2/customers/1d368e62" ); const headers = { "Authorization": "Bearer {YOUR_AUTH_KEY}", "Content-Type": "application/json", "Accept": "application/json", }; fetch(url, { method: "DELETE", headers, }).then(response => response.json()); $client = new \GuzzleHttp\Client(); $url = 'https://api.wonderful.one/v2/customers/1d368e62'; $response = $client->delete( $url, [ 'headers' => [ 'Authorization' => 'Bearer {YOUR_AUTH_KEY}', 'Content-Type' => 'application/json', 'Accept' => 'application/json', ], ] ); $body = $response->getBody(); print_r(json_decode((string) $body)); import requests import json url = 'https://api.wonderful.one/v2/customers/1d368e62' headers = { 'Authorization': 'Bearer {YOUR_AUTH_KEY}', 'Content-Type': 'application/json', 'Accept': 'application/json' } response = requests.request('DELETE', url, headers=headers) response.json() > Example response (204, Customer deleted): Empty response > Example response (403, Customer has orders): { "error": true, "message": "Cannot delete customer with orders" } > Example response (404, Customer not found): { "error": true, "message": "Customer not found" } > Received response: > Request failed with error: Tip: Check that you're properly connected to the network. If you're a maintainer of ths API, verify that your API is running and you've enabled CORS. You can check the Dev Tools console for debugging information. REQUEST DELETE v2/customers/{id} HEADERS Authorization Example: Bearer {YOUR_AUTH_KEY} Content-Type Example: application/json Accept Example: application/json URL PARAMETERS id string The Public API Hash ID of the customer. Example: 1d368e62 ORDERS LIST ORDERS requires authentication List all orders associated with the merchant. Supports basic searching on customer name and email address, ordering of results, and pagination. Default pagination is 25 results per page. > Example request: curl --request GET \ --get "https://api.wonderful.one/v2/orders?search=Smith&sort=amount_desc&payment_status=paid&start_date=2023-01-01&end_date=2023-12-31&per_page=100" \ --header "Authorization: Bearer {YOUR_AUTH_KEY}" \ --header "Content-Type: application/json" \ --header "Accept: application/json" const url = new URL( "https://api.wonderful.one/v2/orders" ); const params = { "search": "Smith", "sort": "amount_desc", "payment_status": "paid", "start_date": "2023-01-01", "end_date": "2023-12-31", "per_page": "100", }; Object.keys(params) .forEach(key => url.searchParams.append(key, params[key])); const headers = { "Authorization": "Bearer {YOUR_AUTH_KEY}", "Content-Type": "application/json", "Accept": "application/json", }; fetch(url, { method: "GET", headers, }).then(response => response.json()); $client = new \GuzzleHttp\Client(); $url = 'https://api.wonderful.one/v2/orders'; $response = $client->get( $url, [ 'headers' => [ 'Authorization' => 'Bearer {YOUR_AUTH_KEY}', 'Content-Type' => 'application/json', 'Accept' => 'application/json', ], 'query' => [ 'search' => 'Smith', 'sort' => 'amount_desc', 'payment_status' => 'paid', 'start_date' => '2023-01-01', 'end_date' => '2023-12-31', 'per_page' => '100', ], ] ); $body = $response->getBody(); print_r(json_decode((string) $body)); import requests import json url = 'https://api.wonderful.one/v2/orders' params = { 'search': 'Smith', 'sort': 'amount_desc', 'payment_status': 'paid', 'start_date': '2023-01-01', 'end_date': '2023-12-31', 'per_page': '100', } headers = { 'Authorization': 'Bearer {YOUR_AUTH_KEY}', 'Content-Type': 'application/json', 'Accept': 'application/json' } response = requests.request('GET', url, headers=headers, params=params) response.json() > Example response (200): { "data": [ { "id": "", "total": 72312, "total_formatted": "£723.12", "order_status": "pending", "ordered_at": "2024-02-15T23:31:22.000000Z", "updated_at": null, "created_at": null }, { "id": "", "total": 70589, "total_formatted": "£705.89", "order_status": "pending", "ordered_at": "2024-03-11T07:30:39.000000Z", "updated_at": null, "created_at": null } ], "links": { "first": "/?page=1", "last": null, "prev": null, "next": null }, "meta": { "current_page": 1, "from": 1, "path": "/", "per_page": "25", "to": 2 } } > Example response (401, Invalid auth token): { "error": true, "message": "Unauthenticated." } > Received response: > Request failed with error: Tip: Check that you're properly connected to the network. If you're a maintainer of ths API, verify that your API is running and you've enabled CORS. You can check the Dev Tools console for debugging information. REQUEST GET v2/orders HEADERS Authorization Example: Bearer {YOUR_AUTH_KEY} Content-Type Example: application/json Accept Example: application/json QUERY PARAMETERS search string optional Filter orders by customer first name, last name, or email. Example: "Smith" or "john.smith@example.com". Must not be greater than 255 characters. Example: Smith sort string optional Order results by column. Example: amount_desc Must be one of: * created_asc * created_desc * amount_asc * amount_desc payment_status string optional Filter orders by payment status. Example: paid Must be one of: * created * pending * paid * failed * cancelled * refunded start_date string optional Start date in yyyy-mm-dd format. Must be a valid date. Example: 2023-01-01 end_date string optional End date in yyyy-mm-dd format. Must be a valid date. Example: 2023-12-31 per_page integer optional Number of results per page. Default: 25. Must be at least 1. Must not be greater than 1000. Example: 100 RESPONSE RESPONSE FIELDS id string The public API hash ID of the Order. total integer The total amount of the Order in base currency units (GB Pence). total_formatted string The total amount of the Order as a formatted currency string. order_status string The status of the Order. ordered_at string The date and time the Order was ordered. updated_at string The date and time the Order was last updated. created_at string The date and time the Order was created on the system. customer object The Customer record associated with the Order. payments object[] All Payment records associated with the Order. order_lines object[] All OrderLine records associated with the Order. SHOW ORDER requires authentication Shows the specific details for a single order. > Example request: curl --request GET \ --get "https://api.wonderful.one/v2/orders/culpa" \ --header "Authorization: Bearer {YOUR_AUTH_KEY}" \ --header "Content-Type: application/json" \ --header "Accept: application/json" const url = new URL( "https://api.wonderful.one/v2/orders/culpa" ); const headers = { "Authorization": "Bearer {YOUR_AUTH_KEY}", "Content-Type": "application/json", "Accept": "application/json", }; fetch(url, { method: "GET", headers, }).then(response => response.json()); $client = new \GuzzleHttp\Client(); $url = 'https://api.wonderful.one/v2/orders/culpa'; $response = $client->get( $url, [ 'headers' => [ 'Authorization' => 'Bearer {YOUR_AUTH_KEY}', 'Content-Type' => 'application/json', 'Accept' => 'application/json', ], ] ); $body = $response->getBody(); print_r(json_decode((string) $body)); import requests import json url = 'https://api.wonderful.one/v2/orders/culpa' headers = { 'Authorization': 'Bearer {YOUR_AUTH_KEY}', 'Content-Type': 'application/json', 'Accept': 'application/json' } response = requests.request('GET', url, headers=headers) response.json() > Example response (200): { "data": { "id": "", "total": 21240, "total_formatted": "£212.40", "order_status": "pending", "ordered_at": "2023-10-02T05:00:39.000000Z", "updated_at": null, "created_at": null } } > Example response (200, Order found): { "data": { "id": "ed6d3016", "total": 8957, "total_formatted": "£89.57", "order_status": "pending", "ordered_at": "2024-03-05T11:50:43.000000Z", "updated_at": "2024-03-05T11:50:43.000000Z", "created_at": "2024-03-05T11:50:43.000000Z", "customer": { "id": "89650465", "first_name": null, "last_name": null, "full_name": "", "email": "john.smith@example.com", "address": null, "telephone": null, "marketing_consented_at": null, "created_at": "2024-03-05T11:50:43.000000Z", "updated_at": "2024-03-05T11:50:43.000000Z" }, "payments": [ { "id": "ed6d3016", "order_id": "ed6d3016", "amount": 8957, "amount_formatted": "£89.57", "status": "created", "reference": "ORDER-DE81", "pay_link": "https://api.wonderful.one/pay/DE81", "created_at": "2024-03-05T11:50:43.000000Z", "updated_at": "2024-03-05T11:50:43.000000Z" } ], "order_lines": [ { "id": "ed6d87e6", "order_id": "ed6d3016", "quantity": 1, "description": "Gorgeous Fresh Soap", "price": 8957, "price_formatted": "£89.57", "created_at": "2024-03-05T11:50:43.000000Z", "updated_at": "2024-03-05T11:50:43.000000Z" } ] } } > Example response (401, Invalid auth token): { "error": true, "message": "Unauthenticated." } > Example response (404, Order not found): { "error": true, "message": "Order not found" } > Received response: > Request failed with error: Tip: Check that you're properly connected to the network. If you're a maintainer of ths API, verify that your API is running and you've enabled CORS. You can check the Dev Tools console for debugging information. REQUEST GET v2/orders/{id} HEADERS Authorization Example: Bearer {YOUR_AUTH_KEY} Content-Type Example: application/json Accept Example: application/json URL PARAMETERS id string The Public API Hash ID of the Payment record. Example: culpa RESPONSE RESPONSE FIELDS id string The public API hash ID of the Order. total integer The total amount of the Order in base currency units (GB Pence). total_formatted string The total amount of the Order as a formatted currency string. order_status string The status of the Order. ordered_at string The date and time the Order was ordered. updated_at string The date and time the Order was last updated. created_at string The date and time the Order was created on the system. customer object The Customer record associated with the Order. payments object[] All Payment records associated with the Order. order_lines object[] All OrderLine records associated with the Order. PAYMENTS QUICK PAY requires authentication The Quick Pay endpoint allows you to create a customer, order, order line, and payment in one request. The minimum data required is the amount and a merchant payment reference (which is shown on the customer's bank statement). If you also provide a customer email address, the order will be linked to the customer record. > Example request: curl --request POST \ "https://api.wonderful.one/v2/quick-pay" \ --header "Authorization: Bearer {YOUR_AUTH_KEY}" \ --header "Content-Type: application/json" \ --header "Accept: application/json" \ --data "{ \"amount\": 1234, \"merchant_payment_reference\": \"ORDER-1234\", \"payment_description\": \"Website Order 1234\", \"customer_email_address\": \"john.smith@example.com\", \"redirect_url\": \"https:\\/\\/your-website.example.com\\/success\", \"webhook_url\": \"https:\\/\\/your-website.example.com\\/webhooks\" }" const url = new URL( "https://api.wonderful.one/v2/quick-pay" ); const headers = { "Authorization": "Bearer {YOUR_AUTH_KEY}", "Content-Type": "application/json", "Accept": "application/json", }; let body = { "amount": 1234, "merchant_payment_reference": "ORDER-1234", "payment_description": "Website Order 1234", "customer_email_address": "john.smith@example.com", "redirect_url": "https:\/\/your-website.example.com\/success", "webhook_url": "https:\/\/your-website.example.com\/webhooks" }; fetch(url, { method: "POST", headers, body: JSON.stringify(body), }).then(response => response.json()); $client = new \GuzzleHttp\Client(); $url = 'https://api.wonderful.one/v2/quick-pay'; $response = $client->post( $url, [ 'headers' => [ 'Authorization' => 'Bearer {YOUR_AUTH_KEY}', 'Content-Type' => 'application/json', 'Accept' => 'application/json', ], 'json' => [ 'amount' => 1234, 'merchant_payment_reference' => 'ORDER-1234', 'payment_description' => 'Website Order 1234', 'customer_email_address' => 'john.smith@example.com', 'redirect_url' => 'https://your-website.example.com/success', 'webhook_url' => 'https://your-website.example.com/webhooks', ], ] ); $body = $response->getBody(); print_r(json_decode((string) $body)); import requests import json url = 'https://api.wonderful.one/v2/quick-pay' payload = { "amount": 1234, "merchant_payment_reference": "ORDER-1234", "payment_description": "Website Order 1234", "customer_email_address": "john.smith@example.com", "redirect_url": "https:\/\/your-website.example.com\/success", "webhook_url": "https:\/\/your-website.example.com\/webhooks" } headers = { 'Authorization': 'Bearer {YOUR_AUTH_KEY}', 'Content-Type': 'application/json', 'Accept': 'application/json' } response = requests.request('POST', url, headers=headers, json=payload) response.json() > Example response (200): { "data": { "id": "1d368e62", "order_id": "1d368e62", "amount": 33969, "amount_formatted": "£339.69", "status": "refunded", "reference": "ONE-0980", "pay_link": "http://api.wonderful.one/pay/0980", "created_at": "2023-04-19T13:48:33.000000Z", "updated_at": "2023-05-02T18:47:29.000000Z" } } > Example response (201, Success): { "data": { "id": "ed6d3316", "order_id": "ed6d3316", "amount": 6482, "amount_formatted": "£64.82", "status": "created", "reference": "ORDER-585516", "pay_link": "https://api.wonderful.one/pay/DEE1", "created_at": "2024-03-05T12:20:47.000000Z", "updated_at": "2024-03-05T12:20:47.000000Z" } } > Example response (401, Invalid auth token): { "error": true, "message": "Unauthenticated." } > Example response (422, Validation failed): { "error": true, "message": "Validation failed", "invalid_fields": { "amount": [ "The amount field is required." ], "merchant_payment_reference": [ "The merchant payment reference field is required." ] } } > Received response: > Request failed with error: Tip: Check that you're properly connected to the network. If you're a maintainer of ths API, verify that your API is running and you've enabled CORS. You can check the Dev Tools console for debugging information. REQUEST POST v2/quick-pay HEADERS Authorization Example: Bearer {YOUR_AUTH_KEY} Content-Type Example: application/json Accept Example: application/json BODY PARAMETERS amount integer Amount in base currency units (GB Pence). Must be at least 5. Example: 1234 merchant_payment_reference string Merchant payment reference to show on the bank statement. Must not be greater than 18 characters. Example: ORDER-1234 payment_description string optional Payment description to show against the Order record. Must not be greater than 255 characters. Example: Website Order 1234 customer_email_address string optional Customer email address. If set, this will link the Order to the Customer record. Must be a valid email address. Must not be greater than 255 characters. Example: john.smith@example.com redirect_url string The URL to redirect to after the payment has been completed. Must be a valid URL. Example: https://your-website.example.com/success webhook_url string optional The URL to send webhook notifications to. Must be a valid URL. Example: https://your-website.example.com/webhooks RESPONSE RESPONSE FIELDS id string Public API Hash ID of the Payment. Example: 3ed6d864 order_id string Public API Hash ID of the Order. Example: 3ed6d864 amount integer The amount in base currency units (GB Pence). Example: 1000 amount_formatted string The amount as a formatted currency string. Example: £10.00 status string The status of the Payment. Example: paid reference string The reference of the Payment. Example: ONE-3ed6 pay_link string The URL to redirect the customer to for payment. Example: https://wonderful.one/pay/abc123 created_at string The date and time the Payment was created. Example: 2023-05-02T22: updated_at string The date and time the Payment was last updated. Example: 2023-05-02T22: LIST PAYMENTS requires authentication Returns a collection of all Payment records associated with the Merchant. > Example request: curl --request GET \ --get "https://api.wonderful.one/v2/payments?search=ORDER&sort=amount_desc&start_date=2023-01-01&end_date=2023-12-31&per_page=100" \ --header "Authorization: Bearer {YOUR_AUTH_KEY}" \ --header "Content-Type: application/json" \ --header "Accept: application/json" const url = new URL( "https://api.wonderful.one/v2/payments" ); const params = { "search": "ORDER", "sort": "amount_desc", "start_date": "2023-01-01", "end_date": "2023-12-31", "per_page": "100", }; Object.keys(params) .forEach(key => url.searchParams.append(key, params[key])); const headers = { "Authorization": "Bearer {YOUR_AUTH_KEY}", "Content-Type": "application/json", "Accept": "application/json", }; fetch(url, { method: "GET", headers, }).then(response => response.json()); $client = new \GuzzleHttp\Client(); $url = 'https://api.wonderful.one/v2/payments'; $response = $client->get( $url, [ 'headers' => [ 'Authorization' => 'Bearer {YOUR_AUTH_KEY}', 'Content-Type' => 'application/json', 'Accept' => 'application/json', ], 'query' => [ 'search' => 'ORDER', 'sort' => 'amount_desc', 'start_date' => '2023-01-01', 'end_date' => '2023-12-31', 'per_page' => '100', ], ] ); $body = $response->getBody(); print_r(json_decode((string) $body)); import requests import json url = 'https://api.wonderful.one/v2/payments' params = { 'search': 'ORDER', 'sort': 'amount_desc', 'start_date': '2023-01-01', 'end_date': '2023-12-31', 'per_page': '100', } headers = { 'Authorization': 'Bearer {YOUR_AUTH_KEY}', 'Content-Type': 'application/json', 'Accept': 'application/json' } response = requests.request('GET', url, headers=headers, params=params) response.json() > Example response (200): { "data": [ { "id": "1d368e62", "order_id": "1d368e62", "amount": 33969, "amount_formatted": "£339.69", "status": "refunded", "reference": "ONE-0980", "pay_link": "http://api.wonderful.one/pay/0980", "created_at": "2023-04-19T13:48:33.000000Z", "updated_at": "2023-05-02T18:47:29.000000Z" }, { "id": "1d368e62", "order_id": "1d368e62", "amount": 33969, "amount_formatted": "£339.69", "status": "refunded", "reference": "ONE-0980", "pay_link": "http://api.wonderful.one/pay/0980", "created_at": "2023-04-19T13:48:33.000000Z", "updated_at": "2023-05-02T18:47:29.000000Z" } ] } > Example response (200, Filtered search, ordered by descending value): { "data": [ { "id": "ed6d3316", "order_id": "ed6d3316", "amount": 6482, "amount_formatted": "£64.82", "status": "created", "reference": "ORDER-585516", "pay_link": "https://api.wonderful.one/pay/DEE1", "created_at": "2024-03-05T12:20:47.000000Z", "updated_at": "2024-03-05T12:20:47.000000Z" }, { "id": "e2610086", "order_id": "e2610086", "amount": 4765, "amount_formatted": "£47.65", "status": "created", "reference": "ORDER-115103", "pay_link": "https://api.wonderful.one/pay/8552", "created_at": "2024-03-05T11:58:24.000000Z", "updated_at": "2024-03-05T11:58:24.000000Z" }, { "id": "05644446", "order_id": "05644446", "amount": 3058, "amount_formatted": "£30.58", "status": "created", "reference": "ORDER-314744", "pay_link": "https://api.wonderful.one/pay/6666", "created_at": "2024-03-05T11:58:22.000000Z", "updated_at": "2024-03-05T11:58:22.000000Z" }, { "id": "d368ee26", "order_id": "d368ee26", "amount": 510, "amount_formatted": "£5.10", "status": "created", "reference": "ORDER-302271", "pay_link": "https://api.wonderful.one/pay/9887", "created_at": "2024-03-05T11:58:23.000000Z", "updated_at": "2024-03-05T11:58:23.000000Z" } ], "links": { "first": "https://api.wonderful.one/v2/payments?page=1", "last": null, "prev": null, "next": null }, "meta": { "current_page": 1, "from": 1, "path": "https://api.wonderful.one/v2/payments", "per_page": "100", "to": 4 } } > Example response (401, Invalid auth token): { "error": true, "message": "Unauthenticated." } > Received response: > Request failed with error: Tip: Check that you're properly connected to the network. If you're a maintainer of ths API, verify that your API is running and you've enabled CORS. You can check the Dev Tools console for debugging information. REQUEST GET v2/payments HEADERS Authorization Example: Bearer {YOUR_AUTH_KEY} Content-Type Example: application/json Accept Example: application/json QUERY PARAMETERS search string optional Filter payment results by order reference. Example: "ONE" or "ABC123". Must not be greater than 255 characters. Example: ORDER sort string optional Order results by column. Example: amount_desc Must be one of: * created_asc * created_desc * amount_asc * amount_desc start_date string optional Start date in yyyy-mm-dd format. Must be a valid date. Example: 2023-01-01 end_date string optional End date in yyyy-mm-dd format. Must be a valid date. Example: 2023-12-31 per_page integer optional Number of results per page. Default: 25. Must be at least 1. Must not be greater than 1000. Example: 100 RESPONSE RESPONSE FIELDS id string Public API Hash ID of the Payment. Example: 3ed6d864 order_id string Public API Hash ID of the Order. Example: 3ed6d864 amount integer The amount in base currency units (GB Pence). Example: 1000 amount_formatted string The amount as a formatted currency string. Example: £10.00 status string The status of the Payment. Example: paid reference string The reference of the Payment. Example: ONE-3ed6 pay_link string The URL to redirect the customer to for payment. Example: https://wonderful.one/pay/abc123 created_at string The date and time the Payment was created. Example: 2023-05-02T22: updated_at string The date and time the Payment was last updated. Example: 2023-05-02T22: SHOW PAYMENT requires authentication Shows the details of a specific Payment record. > Example request: curl --request GET \ --get "https://api.wonderful.one/v2/payments/culpa" \ --header "Authorization: Bearer {YOUR_AUTH_KEY}" \ --header "Content-Type: application/json" \ --header "Accept: application/json" const url = new URL( "https://api.wonderful.one/v2/payments/culpa" ); const headers = { "Authorization": "Bearer {YOUR_AUTH_KEY}", "Content-Type": "application/json", "Accept": "application/json", }; fetch(url, { method: "GET", headers, }).then(response => response.json()); $client = new \GuzzleHttp\Client(); $url = 'https://api.wonderful.one/v2/payments/culpa'; $response = $client->get( $url, [ 'headers' => [ 'Authorization' => 'Bearer {YOUR_AUTH_KEY}', 'Content-Type' => 'application/json', 'Accept' => 'application/json', ], ] ); $body = $response->getBody(); print_r(json_decode((string) $body)); import requests import json url = 'https://api.wonderful.one/v2/payments/culpa' headers = { 'Authorization': 'Bearer {YOUR_AUTH_KEY}', 'Content-Type': 'application/json', 'Accept': 'application/json' } response = requests.request('GET', url, headers=headers) response.json() > Example response (200): { "data": { "id": "1d368e62", "order_id": "1d368e62", "amount": 33969, "amount_formatted": "£339.69", "status": "refunded", "reference": "ONE-0980", "pay_link": "http://api.wonderful.one/pay/0980", "created_at": "2023-04-19T13:48:33.000000Z", "updated_at": "2023-05-02T18:47:29.000000Z" } } > Example response (200): { "data": { "id": "e2611865", "order_id": "e2611865", "amount": 1000, "amount_formatted": "£10.00", "status": "created", "reference": "ONE-0862", "pay_link": "https://api.wonderful.one/pay/0862", "created_at": "2023-07-07T08:59:55.000000Z", "updated_at": "2023-07-07T08:59:55.000000Z" } } > Example response (401, Invalid auth token): { "error": true, "message": "Unauthenticated." } > Received response: > Request failed with error: Tip: Check that you're properly connected to the network. If you're a maintainer of ths API, verify that your API is running and you've enabled CORS. You can check the Dev Tools console for debugging information. REQUEST GET v2/payments/{id} HEADERS Authorization Example: Bearer {YOUR_AUTH_KEY} Content-Type Example: application/json Accept Example: application/json URL PARAMETERS id string The Public API Hash ID of the Payment record. Example: culpa RESPONSE RESPONSE FIELDS id string Public API Hash ID of the Payment. Example: 3ed6d864 order_id string Public API Hash ID of the Order. Example: 3ed6d864 amount integer The amount in base currency units (GB Pence). Example: 1000 amount_formatted string The amount as a formatted currency string. Example: £10.00 status string The status of the Payment. Example: paid reference string The reference of the Payment. Example: ONE-3ed6 pay_link string The URL to redirect the customer to for payment. Example: https://wonderful.one/pay/abc123 created_at string The date and time the Payment was created. Example: 2023-05-02T22: updated_at string The date and time the Payment was last updated. Example: 2023-05-02T22: QR CODES LIST QR CODES requires authentication Lists all QR Codes associated with the Merchant > Example request: curl --request GET \ --get "https://api.wonderful.one/v2/qr-codes" \ --header "Authorization: Bearer {YOUR_AUTH_KEY}" \ --header "Content-Type: application/json" \ --header "Accept: application/json" const url = new URL( "https://api.wonderful.one/v2/qr-codes" ); const headers = { "Authorization": "Bearer {YOUR_AUTH_KEY}", "Content-Type": "application/json", "Accept": "application/json", }; fetch(url, { method: "GET", headers, }).then(response => response.json()); $client = new \GuzzleHttp\Client(); $url = 'https://api.wonderful.one/v2/qr-codes'; $response = $client->get( $url, [ 'headers' => [ 'Authorization' => 'Bearer {YOUR_AUTH_KEY}', 'Content-Type' => 'application/json', 'Accept' => 'application/json', ], ] ); $body = $response->getBody(); print_r(json_decode((string) $body)); import requests import json url = 'https://api.wonderful.one/v2/qr-codes' headers = { 'Authorization': 'Bearer {YOUR_AUTH_KEY}', 'Content-Type': 'application/json', 'Accept': 'application/json' } response = requests.request('GET', url, headers=headers) response.json() > Example response (200): { "data": [ { "id": "1d368e62", "amount": 1000, "amount_formatted": "£10.00", "label": "My first QR code", "pay_link": "http://api.wonderful.one/qr-code/e24e", "image_link": "http://api.wonderful.one/qr-code-image/e24e", "created_at": "2023-07-05T15:03:23.000000Z", "updated_at": "2023-07-05T15:03:23.000000Z" }, { "id": "1d368e62", "amount": 1000, "amount_formatted": "£10.00", "label": "My first QR code", "pay_link": "http://api.wonderful.one/qr-code/e24e", "image_link": "http://api.wonderful.one/qr-code-image/e24e", "created_at": "2023-07-05T15:03:23.000000Z", "updated_at": "2023-07-05T15:03:23.000000Z" } ] } > Example response (200): { "data": [ { "id": "1d368e62", "amount": 1000, "amount_formatted": "£10.00", "label": "My first QR code", "pay_link": "https://api.wonderful-one.test/qr-code/e24e", "image_link": "https://api.wonderful-one.test/qr-code-image/e24e", "created_at": "2023-07-05T15:03:23.000000Z", "updated_at": "2023-07-05T15:03:23.000000Z" }, { "id": "0e261265", "amount": 1234, "amount_formatted": "£12.34", "label": "My second QR code", "pay_link": "https://api.wonderful-one.test/qr-code/ed4e", "image_link": "https://api.wonderful-one.test/qr-code-image/ed4e", "created_at": "2023-07-05T15:04:05.000000Z", "updated_at": "2023-07-05T15:04:05.000000Z" } ] } > Example response (401, Invalid auth token): { "error": true, "message": "Unauthenticated." } > Received response: > Request failed with error: Tip: Check that you're properly connected to the network. If you're a maintainer of ths API, verify that your API is running and you've enabled CORS. You can check the Dev Tools console for debugging information. REQUEST GET v2/qr-codes HEADERS Authorization Example: Bearer {YOUR_AUTH_KEY} Content-Type Example: application/json Accept Example: application/json RESPONSE RESPONSE FIELDS id string Public API Hash ID of the QR Code. Example: 3ed6d864 amount integer The amount in base currency units (GB Pence). Example: 1000 amount_formatted string The amount as a formatted currency string. Example: £10.00 label string The label of the QR Code. Example: Blue Widget pay_link string The URL to redirect the customer to for payment. Example: https://api.wonderful.one/qr-code/abc123 image_link string Generated QR code image URL that will redirect the customer to the Pay Link. Example: https://api.wonderful.one/qr-code-image/abc123 created_at string The date and time the QR Code was created. Example: 2023-05-02T22:07:21.000000Z updated_at string The date and time the QR Code was last updated. Example: 2023-05-02T22:07:21.000000Z CREATE QR CODE requires authentication Inserts a new QR Code record. > Example request: curl --request POST \ "https://api.wonderful.one/v2/qr-codes" \ --header "Authorization: Bearer {YOUR_AUTH_KEY}" \ --header "Content-Type: application/json" \ --header "Accept: application/json" \ --data "{ \"amount\": 1234, \"label\": \"Blue Widget\" }" const url = new URL( "https://api.wonderful.one/v2/qr-codes" ); const headers = { "Authorization": "Bearer {YOUR_AUTH_KEY}", "Content-Type": "application/json", "Accept": "application/json", }; let body = { "amount": 1234, "label": "Blue Widget" }; fetch(url, { method: "POST", headers, body: JSON.stringify(body), }).then(response => response.json()); $client = new \GuzzleHttp\Client(); $url = 'https://api.wonderful.one/v2/qr-codes'; $response = $client->post( $url, [ 'headers' => [ 'Authorization' => 'Bearer {YOUR_AUTH_KEY}', 'Content-Type' => 'application/json', 'Accept' => 'application/json', ], 'json' => [ 'amount' => 1234, 'label' => 'Blue Widget', ], ] ); $body = $response->getBody(); print_r(json_decode((string) $body)); import requests import json url = 'https://api.wonderful.one/v2/qr-codes' payload = { "amount": 1234, "label": "Blue Widget" } headers = { 'Authorization': 'Bearer {YOUR_AUTH_KEY}', 'Content-Type': 'application/json', 'Accept': 'application/json' } response = requests.request('POST', url, headers=headers, json=payload) response.json() > Example response (200): { "data": { "id": "1d368e62", "amount": 1000, "amount_formatted": "£10.00", "label": "My first QR code", "pay_link": "http://api.wonderful.one/qr-code/e24e", "image_link": "http://api.wonderful.one/qr-code-image/e24e", "created_at": "2023-07-05T15:03:23.000000Z", "updated_at": "2023-07-05T15:03:23.000000Z" } } > Example response (201, Created successfully): { "data": { "id": "0e261265", "amount": 1000, "amount_formatted": "£10.00", "label": "My first QR code", "pay_link": "https://api.wonderful-one.test/qr-code/ed4e", "image_link": "https://api.wonderful-one.test/qr-code-image/ed4e", "created_at": "2023-07-05T15:04:05.000000Z", "updated_at": "2023-07-05T15:04:05.000000Z" } } > Example response (422, Validation error): { "error": true, "message": "Validation failed", "invalid_fields": { "amount": [ "The amount field is required." ], "label": [ "The label field is required." ] } } > Received response: > Request failed with error: Tip: Check that you're properly connected to the network. If you're a maintainer of ths API, verify that your API is running and you've enabled CORS. You can check the Dev Tools console for debugging information. REQUEST POST v2/qr-codes HEADERS Authorization Example: Bearer {YOUR_AUTH_KEY} Content-Type Example: application/json Accept Example: application/json BODY PARAMETERS amount integer Amount in base currency units (GB Pence). Must not be greater than 5000000. Example: 1234 label string QR Code label or description (shown to customers). Must not be greater than 255 characters. Example: Blue Widget RESPONSE RESPONSE FIELDS id string Public API Hash ID of the QR Code. Example: 3ed6d864 amount integer The amount in base currency units (GB Pence). Example: 1000 amount_formatted string The amount as a formatted currency string. Example: £10.00 label string The label of the QR Code. Example: Blue Widget pay_link string The URL to redirect the customer to for payment. Example: https://api.wonderful.one/qr-code/abc123 image_link string Generated QR code image URL that will redirect the customer to the Pay Link. Example: https://api.wonderful.one/qr-code-image/abc123 created_at string The date and time the QR Code was created. Example: 2023-05-02T22:07:21.000000Z updated_at string The date and time the QR Code was last updated. Example: 2023-05-02T22:07:21.000000Z SHOW QR CODE requires authentication Show the details of a specific QR Code record. Pass the Public API Hash ID of the QR Code you wand to retrieve on the URL. > Example request: curl --request GET \ --get "https://api.wonderful.one/v2/qr-codes/0e261265" \ --header "Authorization: Bearer {YOUR_AUTH_KEY}" \ --header "Content-Type: application/json" \ --header "Accept: application/json" const url = new URL( "https://api.wonderful.one/v2/qr-codes/0e261265" ); const headers = { "Authorization": "Bearer {YOUR_AUTH_KEY}", "Content-Type": "application/json", "Accept": "application/json", }; fetch(url, { method: "GET", headers, }).then(response => response.json()); $client = new \GuzzleHttp\Client(); $url = 'https://api.wonderful.one/v2/qr-codes/0e261265'; $response = $client->get( $url, [ 'headers' => [ 'Authorization' => 'Bearer {YOUR_AUTH_KEY}', 'Content-Type' => 'application/json', 'Accept' => 'application/json', ], ] ); $body = $response->getBody(); print_r(json_decode((string) $body)); import requests import json url = 'https://api.wonderful.one/v2/qr-codes/0e261265' headers = { 'Authorization': 'Bearer {YOUR_AUTH_KEY}', 'Content-Type': 'application/json', 'Accept': 'application/json' } response = requests.request('GET', url, headers=headers) response.json() > Example response (200): { "data": { "id": "1d368e62", "amount": 1000, "amount_formatted": "£10.00", "label": "My first QR code", "pay_link": "http://api.wonderful.one/qr-code/e24e", "image_link": "http://api.wonderful.one/qr-code-image/e24e", "created_at": "2023-07-05T15:03:23.000000Z", "updated_at": "2023-07-05T15:03:23.000000Z" } } > Example response (200): { "data": { "id": "0e261265", "amount": 1000, "amount_formatted": "£10.00", "label": "My first QR code", "pay_link": "https://api.wonderful-one.test/qr-code/ed4e", "image_link": "https://api.wonderful-one.test/qr-code-image/ed4e", "created_at": "2023-07-05T15:04:05.000000Z", "updated_at": "2023-07-05T15:04:05.000000Z" } } > Example response (404, QR code not found): { "error": true, "message": "QR code not found" } > Received response: > Request failed with error: Tip: Check that you're properly connected to the network. If you're a maintainer of ths API, verify that your API is running and you've enabled CORS. You can check the Dev Tools console for debugging information. REQUEST GET v2/qr-codes/{id} HEADERS Authorization Example: Bearer {YOUR_AUTH_KEY} Content-Type Example: application/json Accept Example: application/json URL PARAMETERS id string the Public API Hash ID of the QR Code. Example: 0e261265 RESPONSE RESPONSE FIELDS id string Public API Hash ID of the QR Code. Example: 3ed6d864 amount integer The amount in base currency units (GB Pence). Example: 1000 amount_formatted string The amount as a formatted currency string. Example: £10.00 label string The label of the QR Code. Example: Blue Widget pay_link string The URL to redirect the customer to for payment. Example: https://api.wonderful.one/qr-code/abc123 image_link string Generated QR code image URL that will redirect the customer to the Pay Link. Example: https://api.wonderful.one/qr-code-image/abc123 created_at string The date and time the QR Code was created. Example: 2023-05-02T22:07:21.000000Z updated_at string The date and time the QR Code was last updated. Example: 2023-05-02T22:07:21.000000Z UPDATE QR CODE. requires authentication Note: You must pass both the amount and label values even if only one of them has changed. > Example request: curl --request PUT \ "https://api.wonderful.one/v2/qr-codes/0e261265" \ --header "Authorization: Bearer {YOUR_AUTH_KEY}" \ --header "Content-Type: application/json" \ --header "Accept: application/json" \ --data "{ \"amount\": 1234, \"label\": \"Blue Widget\" }" const url = new URL( "https://api.wonderful.one/v2/qr-codes/0e261265" ); const headers = { "Authorization": "Bearer {YOUR_AUTH_KEY}", "Content-Type": "application/json", "Accept": "application/json", }; let body = { "amount": 1234, "label": "Blue Widget" }; fetch(url, { method: "PUT", headers, body: JSON.stringify(body), }).then(response => response.json()); $client = new \GuzzleHttp\Client(); $url = 'https://api.wonderful.one/v2/qr-codes/0e261265'; $response = $client->put( $url, [ 'headers' => [ 'Authorization' => 'Bearer {YOUR_AUTH_KEY}', 'Content-Type' => 'application/json', 'Accept' => 'application/json', ], 'json' => [ 'amount' => 1234, 'label' => 'Blue Widget', ], ] ); $body = $response->getBody(); print_r(json_decode((string) $body)); import requests import json url = 'https://api.wonderful.one/v2/qr-codes/0e261265' payload = { "amount": 1234, "label": "Blue Widget" } headers = { 'Authorization': 'Bearer {YOUR_AUTH_KEY}', 'Content-Type': 'application/json', 'Accept': 'application/json' } response = requests.request('PUT', url, headers=headers, json=payload) response.json() > Example response (200): { "data": { "id": "1d368e62", "amount": 1000, "amount_formatted": "£10.00", "label": "My first QR code", "pay_link": "http://api.wonderful.one/qr-code/e24e", "image_link": "http://api.wonderful.one/qr-code-image/e24e", "created_at": "2023-07-05T15:03:23.000000Z", "updated_at": "2023-07-05T15:03:23.000000Z" } } > Example response (200, Updated successfully): { "data": { "id": "0e261265", "amount": 1000, "amount_formatted": "£10.00", "label": "My first QR code", "pay_link": "https://api.wonderful-one.test/qr-code/ed4e", "image_link": "https://api.wonderful-one.test/qr-code-image/ed4e", "created_at": "2023-07-05T15:04:05.000000Z", "updated_at": "2023-07-05T15:04:05.000000Z" } } > Example response (422, Validation error): { "error": true, "message": "Validation failed", "invalid_fields": { "amount": [ "The amount field is required." ], "label": [ "The label field is required." ] } } > Received response: > Request failed with error: Tip: Check that you're properly connected to the network. If you're a maintainer of ths API, verify that your API is running and you've enabled CORS. You can check the Dev Tools console for debugging information. REQUEST PUT v2/qr-codes/{id} PATCH v2/qr-codes/{id} HEADERS Authorization Example: Bearer {YOUR_AUTH_KEY} Content-Type Example: application/json Accept Example: application/json URL PARAMETERS id string The Public API Hash ID of the QR Code. Example: 0e261265 BODY PARAMETERS amount integer Amount in base currency units (GB Pence). Must not be greater than 5000000. Example: 1234 label string QR Code label or description (shown to customers). Must not be greater than 255 characters. Example: Blue Widget RESPONSE RESPONSE FIELDS id string Public API Hash ID of the QR Code. Example: 3ed6d864 amount integer The amount in base currency units (GB Pence). Example: 1000 amount_formatted string The amount as a formatted currency string. Example: £10.00 label string The label of the QR Code. Example: Blue Widget pay_link string The URL to redirect the customer to for payment. Example: https://api.wonderful.one/qr-code/abc123 image_link string Generated QR code image URL that will redirect the customer to the Pay Link. Example: https://api.wonderful.one/qr-code-image/abc123 created_at string The date and time the QR Code was created. Example: 2023-05-02T22:07:21.000000Z updated_at string The date and time the QR Code was last updated. Example: 2023-05-02T22:07:21.000000Z DELETE QR CODE requires authentication The delete QR code endpoint will "soft-delete" a QR code record. There is no mechanism via the API to restore a deleted record, if you need to restore a previously deleted record you will need to contact the support team. Note that a successful delete will return a HTTP 204 with an empty response body. Attempting to delete an already deleted record will return a HTTP 404 "not found" response. > Example request: curl --request DELETE \ "https://api.wonderful.one/v2/qr-codes/0e261265" \ --header "Authorization: Bearer {YOUR_AUTH_KEY}" \ --header "Content-Type: application/json" \ --header "Accept: application/json" const url = new URL( "https://api.wonderful.one/v2/qr-codes/0e261265" ); const headers = { "Authorization": "Bearer {YOUR_AUTH_KEY}", "Content-Type": "application/json", "Accept": "application/json", }; fetch(url, { method: "DELETE", headers, }).then(response => response.json()); $client = new \GuzzleHttp\Client(); $url = 'https://api.wonderful.one/v2/qr-codes/0e261265'; $response = $client->delete( $url, [ 'headers' => [ 'Authorization' => 'Bearer {YOUR_AUTH_KEY}', 'Content-Type' => 'application/json', 'Accept' => 'application/json', ], ] ); $body = $response->getBody(); print_r(json_decode((string) $body)); import requests import json url = 'https://api.wonderful.one/v2/qr-codes/0e261265' headers = { 'Authorization': 'Bearer {YOUR_AUTH_KEY}', 'Content-Type': 'application/json', 'Accept': 'application/json' } response = requests.request('DELETE', url, headers=headers) response.json() > Example response (204, QR code deleted): Empty response > Example response (404, QR code not found): { "error": true, "message": "QR code not found" } > Received response: > Request failed with error: Tip: Check that you're properly connected to the network. If you're a maintainer of ths API, verify that your API is running and you've enabled CORS. You can check the Dev Tools console for debugging information. REQUEST DELETE v2/qr-codes/{id} HEADERS Authorization Example: Bearer {YOUR_AUTH_KEY} Content-Type Example: application/json Accept Example: application/json URL PARAMETERS id string The Public API Hash ID of the QR code. Example: 0e261265 SUPPORTED BANKS. requires authentication Some API endponts require a bank to be selected. Use this endpoint to get a list of all the currently active bank IDs, along with their display names and logos. > Example request: curl --request GET \ --get "https://api.wonderful.one/v2/supported-banks" \ --header "Authorization: Bearer {YOUR_AUTH_KEY}" \ --header "Content-Type: application/json" \ --header "Accept: application/json" const url = new URL( "https://api.wonderful.one/v2/supported-banks" ); const headers = { "Authorization": "Bearer {YOUR_AUTH_KEY}", "Content-Type": "application/json", "Accept": "application/json", }; fetch(url, { method: "GET", headers, }).then(response => response.json()); $client = new \GuzzleHttp\Client(); $url = 'https://api.wonderful.one/v2/supported-banks'; $response = $client->get( $url, [ 'headers' => [ 'Authorization' => 'Bearer {YOUR_AUTH_KEY}', 'Content-Type' => 'application/json', 'Accept' => 'application/json', ], ] ); $body = $response->getBody(); print_r(json_decode((string) $body)); import requests import json url = 'https://api.wonderful.one/v2/supported-banks' headers = { 'Authorization': 'Bearer {YOUR_AUTH_KEY}', 'Content-Type': 'application/json', 'Accept': 'application/json' } response = requests.request('GET', url, headers=headers) response.json() > Example response (200): { "data": [ { "bank_id": "aib", "bank_name": "Allied Irish Bank (GB)", "bank_logo": "https://wonderful.co.uk/img/bank_logos/aib.png", "status": "online" }, { "bank_id": "danske", "bank_name": "Danske Bank", "bank_logo": "https://wonderful.co.uk/img/bank_logos/danske.png", "status": "online" }, { "bank_id": "barclays", "bank_name": "Barclays", "bank_logo": "https://wonderful.co.uk/img/bank_logos/barclays.png", "status": "issues" }, { "bank_id": "monzo", "bank_name": "Monzo", "bank_logo": "https://wonderful.co.uk/img/bank_logos/monzo.png", "status": "online" }, { "bank_id": "natwest", "bank_name": "Natwest", "bank_logo": "https://wonderful.co.uk/img/bank_logos/natwest.png", "status": "online" }, { "bank_id": "revolut", "bank_name": "Revolut", "bank_logo": "https://wonderful.co.uk/img/bank_logos/revolut.png", "status": "online" }, { "bank_id": "santander", "bank_name": "Santander", "bank_logo": "https://wonderful.co.uk/img/bank_logos/santander.png", "status": "issues" }, { "bank_id": "starling", "bank_name": "Starling", "bank_logo": "https://wonderful.co.uk/img/bank_logos/starling.png", "status": "online" }, { "bank_id": "tesco", "bank_name": "Tesco", "bank_logo": "https://wonderful.co.uk/img/bank_logos/tesco.png", "status": "online" }, { "bank_id": "tide", "bank_name": "Tide", "bank_logo": "https://wonderful.co.uk/img/bank_logos/tide.png", "status": "online" }, { "bank_id": "tsb", "bank_name": "TSB", "bank_logo": "https://wonderful.co.uk/img/bank_logos/tsb.png", "status": "online" } ] } > Example response (401, Invalid auth token): { "error": true, "message": "Unauthenticated." } > Received response: > Request failed with error: Tip: Check that you're properly connected to the network. If you're a maintainer of ths API, verify that your API is running and you've enabled CORS. You can check the Dev Tools console for debugging information. REQUEST GET v2/supported-banks HEADERS Authorization Example: Bearer {YOUR_AUTH_KEY} Content-Type Example: application/json Accept Example: application/json RESPONSE RESPONSE FIELDS bank_id string Bank Identifier. Example: 'bos' bank_name string Display name that can be shown to the customer. Example: 'Bank of Scotland' bank_logo string URL of the logo that can be shown to the customer. Example: https://wonderful.co.uk/img/bank_logos/bos.png status string Status of the bank. Possible values are: online, issues, offline. Example: 'online' bash javascript php python