NAV

Overview

Introduction

This API is intended for EasyProcess + IDEM Merchants who want to manage their account and customers through a web service.

EasyProcess + IDEM offers a whole new way to request and receive payments.

Thanks to this API, you can now request a single or recurring payment, to a single targeted person, with a given amount.

Once created, all requests will have a unique ID, link, and QRCode. Any person will be able to click on the provided link or scan the QRCode, to be redirected to a dedicated interface of payment.

Better than that, if the request targets a IDEM member and if he has the IDEM App on his smartphone, they will have received a push notification, and they only have to confirm their payment in one click.

The type of request will depend on the defined parameters during the creation.

But the main usage is to request a unique payment to one of your customer, therefor, you have to provide an amount, a first name, a last name, and an email address.

In return, you will have a unique ID to store on your side, and you will have a (unique) link to the payment interface and a link to the QRCode.

During the creation, you can choose to automatically send this information to the customer, otherwise, you will have to give this information by your own (by printing them on an invoice, a ticket, or sending it by email, etc.).

Next, all the payment parts are handled by the customer, either on a dedicated website or in the IDEM App. On your side, you only have to wait for notifications concerning this request (see WebHook).

More common operations like requests, customers, and transactions retrieving are also offered.

About the API

The API is built using restful endpoints and standard HTTP verbs.

You can view code examples in the dark area to the right, and you can switch the programming language of the examples with the tabs in the top right (for now only Shell, but more to come!).

Backwards Compatibility

The following changes are considered backwards compatible:

Testing

EasyProcess + IDEM offers a sandbox environment for simulating API requests to help you test your integration. To use the sandbox environment, you would need a sandbox API token when making calls to the sandbox API endpoints. The sandbox is available on https://gateway.idem-club.info/api/idem, while the live environment is on https://gateway.idem-club.com/api/idem. Therefore, please make sure you are using the right URL and token if you want to make sandbox rather than live requests.

Why use a sandbox environment?

You are allowed to make all the same API requests in the sandbox environment as you are in the live environment. You will also be notified of request status changes via the specified web hook. The key differences are, for sandbox requests:

The main reasons for using the sandbox environment are therefore to:

As payments are not real, the sandbox environment is NOT for:

Changelog

Date Changes
2024-12-16 Initial release
2025-09-17 Added JavaScript SDK

Usage

Endpoints

Please note that the sandbox and the live environment use different domains.

While you are testing, on sandbox, please make sure to use

https://gateway.idem-club.info/api/idem

And while you are live, please use

https://gateway.idem-club.com/api/idem

Authentication

Authentication

curl -s "https://gateway.idem-club.info/api/idem"
    -H "Authorization: Bearer your_api_token"

Sample Response

{
   "status" : "KO",
   "msg" : "Invalid token."
}

Make sure to replace your_api_token with your API token.

The API uses token-based authentication. You will be provided with a token which must be included in the header of all requests made to the API, in this format:

The API key must be included in all API requests to the server, in a header that looks like the following:

Authorization: Bearer your_api_token

All API requests must be made over HTTPS. Any requests made over HTTP will fail.

You will be provided with both live and sandbox tokens. Requests made with the sandbox token can be used to trial and test our API before going live. Requests made in sandbox-mode will return test data, and no credit will be credited or deducted from your account.

Pagination

Requests that return multiple items, e.g. "list of transactions," will be paginated to 20 items by default. You can specify further pages using the page_number parameter and specify page size using the per_page parameter.

Pagination details are included in the response.

HTTP Codes

Standard HTTP error codes are returned in the case of a failure.

The following HTTP codes are used:

Error Code Common Name Meaning
200 Success The request was processed correctly.
400 Bad Request Your request is invalid.
401 Unauthorized Your API token is wrong.
403 Forbidden You are not allowed to perform the requested action.
404 Not Found The requested endpoint could not be found.
405 Method Not Allowed You tried to access an endpoint with an invalid method.
406 Not Acceptable You requested is miss-formatted.
422 Unprocessable Entity General error. See msg and error_code for more info.
429 Too Many Requests You're requesting too many payments! Slow down!
500 Internal Server Error We had a problem with our server. Try again later.
503 Service Unavailable We're temporarily offline for maintenance. Please try again later.

Payment Request, Request and Transaction

In the system, each attempt to make a payment generates a request, which is assigned a unique ID for identification purposes. This ID must be referenced when communicating with the API.

It is important to note the distinction between a transaction and a request. A transaction represents a payment and is always linked to a request. However, not all requests lead to a transaction. For example, if a request is rejected due to invalid parameters, it will not result in a transaction. Therefore, it is crucial to use the request ID when referencing a payment attempt, rather than relying on a transaction ID.

Additionally, there is a concept of a payment request, which differs from a standard request. Payment requests are created using the "CreatePaymentRequest" function to solicit payment from a customer. A single payment request can generate multiple requests and their corresponding transactions.

To summarize:

WebHooks

Sample Webhook

<form method="post">
    <input type="hidden" name="MerchantApiResponse[status]" value="OK">
    <input type="hidden" name="MerchantApiResponse[request_id]" value="11122">
    <input type="hidden" name="MerchantApiResponse[request_status]" value="completed">
    <input type="hidden" name="MerchantApiResponse[tr_id]" value="22782">
    <input type="hidden" name="MerchantApiResponse[sub_account_id]" value="8888">
    <input type="hidden" name="MerchantApiResponse[ref_id]" value="1234">
    <input type="hidden" name="MerchantApiResponse[msg]" value="">
    <input type="hidden" name="MerchantApiResponse[info]" value="">
    <input type="hidden" name="MerchantApiResponse[phone_number]" value="[email protected]">
    <input type="hidden" name="MerchantApiResponse[w_number]" value="">
    <input type="hidden" name="MerchantApiResponse[PlatformRequest][request_id]" value="11122">
    <input type="hidden" name="MerchantApiResponse[PlatformRequest][tr_id]" value="22782">
    <input type="hidden" name="MerchantApiResponse[PlatformRequest][user_id]" value="6095">
    <input type="hidden" name="MerchantApiResponse[PlatformRequest][ref_id]" value="1234">
    <input type="hidden" name="MerchantApiResponse[PlatformRequest][sub_account_id]" value="8888">
    <input type="hidden" name="MerchantApiResponse[PlatformRequest][date]" value="2014-03-27 13:19:35">
    <input type="hidden" name="MerchantApiResponse[PlatformRequest][refund_date]" value="">
    <input type="hidden" name="MerchantApiResponse[PlatformRequest][expiration]" value="2014-03-28 01:19:35">
    <input type="hidden" name="MerchantApiResponse[PlatformRequest][statement_id]" value="">
    <input type="hidden" name="MerchantApiResponse[PlatformRequest][refund_statement_id]" value="">
    <input type="hidden" name="MerchantApiResponse[PlatformRequest][method]" value="gateway">
    <input type="hidden" name="MerchantApiResponse[PlatformRequest][currency]" value="USD">
    <input type="hidden" name="MerchantApiResponse[PlatformRequest][amount]" value="5.00">
    <input type="hidden" name="MerchantApiResponse[PlatformRequest][description]" value="Order number 1234">
    <input type="hidden" name="MerchantApiResponse[PlatformRequest][addinfo]" value="">
    <input type="hidden" name="MerchantApiResponse[PlatformRequest][status]" value="completed">
    <input type="hidden" name="MerchantApiResponse[PlatformRequest][status_infos]" value="">
    <input type="hidden" name="MerchantApiResponse[PlatformRequest][recurring_amount]" value="">
    <input type="hidden" name="MerchantApiResponse[PlatformRequest][recurring_cycles]" value="">
    <input type="hidden" name="MerchantApiResponse[PlatformRequest][recurring_period]" value="">
    <input type="hidden" name="MerchantApiResponse[PlatformRequest][recurring_start]" value="">
    <input type="hidden" name="MerchantApiResponse[PlatformRequest][recurring_end]" value="">
    <input type="hidden" name="MerchantApiResponse[PlatformRequest][recurring_status]" value="">
    <input type="hidden" name="MerchantApiResponse[PlatformRequest][recurring_info]" value="">
    <input type="hidden" name="MerchantApiResponse[PlatformRequest][transaction]" value="">
    <input type="hidden" name="MerchantApiResponse[PlatformRequest][employee_id]" value="">
    <input type="hidden" name="MerchantApiResponse[PlatformRequest][location_id]" value="">
    <input type="hidden" name="MerchantApiResponse[PlatformRequest][firstname]" value="">
    <input type="hidden" name="MerchantApiResponse[PlatformRequest][lastname]" value="">
    <input type="hidden" name="MerchantApiResponse[PlatformRequest][email]" value="">
    <input type="hidden" name="MerchantApiResponse[PlatformTransaction][tr_id]" value="22782">
    <input type="hidden" name="MerchantApiResponse[PlatformTransaction][tr_type]" value="creditcard2merchant">
    <input type="hidden" name="MerchantApiResponse[PlatformTransaction][tr_from_type]" value="creditcard">
    <input type="hidden" name="MerchantApiResponse[PlatformTransaction][tr_from_id]" value="*7457">
    <input type="hidden" name="MerchantApiResponse[PlatformTransaction][tr_from_currency]" value="USD">
    <input type="hidden" name="MerchantApiResponse[PlatformTransaction][tr_to_type]" value="merchant">
    <input type="hidden" name="MerchantApiResponse[PlatformTransaction][tr_to_id]" value="12345678">
    <input type="hidden" name="MerchantApiResponse[PlatformTransaction][tr_to_currency]" value="USD">
    <input type="hidden" name="MerchantApiResponse[PlatformTransaction][tr_requested_original]" value="5.0000">
    <input type="hidden" name="MerchantApiResponse[PlatformTransaction][tr_requested_currency]" value="USD">
    <input type="hidden" name="MerchantApiResponse[PlatformTransaction][tr_amount_requested]" value="5.0000">
    <input type="hidden" name="MerchantApiResponse[PlatformTransaction][tr_amount_transfered]" value="5.0000">
    <input type="hidden" name="MerchantApiResponse[PlatformTransaction][tr_amount_total_cost]" value="5.0000">
    <input type="hidden" name="MerchantApiResponse[PlatformTransaction][tr_amount_refunded]" value="">
    <input type="hidden" name="MerchantApiResponse[PlatformTransaction][tr_change_rate]" value="">
    <input type="hidden" name="MerchantApiResponse[PlatformTransaction][tr_fees]" value="0.0000">
    <input type="hidden" name="MerchantApiResponse[PlatformTransaction][tr_fees_currency]" value="USD">
    <input type="hidden" name="MerchantApiResponse[PlatformTransaction][tr_fees_type]" value="fixed">
    <input type="hidden" name="MerchantApiResponse[PlatformTransaction][tr_fees_rate_fixed]" value="0.0000">
    <input type="hidden" name="MerchantApiResponse[PlatformTransaction][tr_fees_rate_percent]" value="0.0000">
    <input type="hidden" name="MerchantApiResponse[PlatformTransaction][tr_fees_level]" value="2">
    <input type="hidden" name="MerchantApiResponse[PlatformTransaction][tr_date_created]" value="2014-03-27 13:19:35">
    <input type="hidden" name="MerchantApiResponse[PlatformTransaction][tr_date_updated]" value="2014-03-27 13:19:42">
    <input type="hidden" name="MerchantApiResponse[PlatformTransaction][tr_date_completed]" value="2014-03-27 13:19:42">
    <input type="hidden" name="MerchantApiResponse[PlatformTransaction][tr_date_refunded]" value="">
    <input type="hidden" name="MerchantApiResponse[PlatformTransaction][tr_notif_sender]" value="email">
    <input type="hidden" name="MerchantApiResponse[PlatformTransaction][tr_notif_receiver]" value="none">
    <input type="hidden" name="MerchantApiResponse[PlatformTransaction][tr_status]" value="completed">
    <input type="hidden" name="MerchantApiResponse[PlatformTransaction][tr_status_msg]" value="">
    <input type="hidden" name="MerchantApiResponse[PlatformTransaction][pay_infos]" value="">
    <input type="hidden" name="MerchantApiResponse[PlatformAccount][user_id]" value="6095">
    <input type="hidden" name="MerchantApiResponse[PlatformAccount][currency]" value="USD">
    <input type="hidden" name="MerchantApiResponse[PlatformAccount][email]" value="[email protected]">
    <input type="hidden" name="MerchantApiResponse[PlatformAccount][gender]" value="m">
    <input type="hidden" name="MerchantApiResponse[PlatformAccount][firstname]" value="John">
    <input type="hidden" name="MerchantApiResponse[PlatformAccount][middlename]" value="">
    <input type="hidden" name="MerchantApiResponse[PlatformAccount][lastname]" value="Doe">
    <input type="hidden" name="MerchantApiResponse[PlatformAccount][address]" value="Some street ">
    <input type="hidden" name="MerchantApiResponse[PlatformAccount][city]" value="Fort Lauderdale">
    <input type="hidden" name="MerchantApiResponse[PlatformAccount][zipcode]" value="33301">
    <input type="hidden" name="MerchantApiResponse[PlatformAccount][country]" value="US">
    <input type="hidden" name="MerchantApiResponse[PlatformAccount][state]" value="FL">
    <input type="hidden" name="MerchantApiResponse[PlatformAccount][phone]" value="33679555985">
    <input type="hidden" name="MerchantApiResponse[PlatformAccount][level]" value="">
    <input type="hidden" name="MerchantApiResponse[PlatformAccount][question1]" value="">
    <input type="hidden" name="MerchantApiResponse[PlatformAccount][answer1]" value="">
    <input type="hidden" name="MerchantApiResponse[PlatformAccount][question2]" value="">
    <input type="hidden" name="MerchantApiResponse[PlatformAccount][answer2]" value="">
    <input type="hidden" name="MerchantApiResponse[PlatformAccount][question3]" value="">
    <input type="hidden" name="MerchantApiResponse[PlatformAccount][answer3]" value="">
    <input type="hidden" name="MerchantApiResponse[hash]" value="def2e614513fc7cf0d85c97167fb10ab">
</form>

A WebHook, formerly know as Instant Payment Notification (IPN), is a message service that notifies you of events related to Easy Process transactions.

You can use it to automate back-office and administrative functions, such as fulfilling orders, tracking customers, and providing status and other information related to a transaction.

IPN notifies you when an event occurs that affects a transaction. Typically, these events represent various kinds of payments; however, the events may also represent authorizations, frauds management actions, and other actions, such as refunds, disputes, and chargebacks.

IPN is a message service that Easy Process uses to notify you about events. These events include the following:

In many cases, events can be generated by the Easy Process Gateway, an Easy Process agent, or by the customer themselves.

You detect and process IPN messages with a listener, sometimes called a handler, which is a script or program that you write, on your side. It waits for messages and passes them to various back-end or administrative processes that respond the messages.

The actions to take when your listener is notified of an event are specific to your needs. Examples of actions you might take when your listener receives an IPN message include the following:

You will “always” receive the IPN, no matter what the customer does after the transaction. This way IPN enables you to automate your response to events.

Sandbox requests and transactions also trigger webhook notifications.

The Webhook URL can be specified individually for each payment request. If not specified, the notification URL set in your merchant account will be used.

« When I will receive what and where? »

The most frequently asked question when a merchant integrates Easy Process Payment Button is « When and where I will receive the IPN? ».

The answer is « For the ‘where’, it depends on the provided URL OR on your global settings and for the ‘when’, IPN is sent automatically on all status change. ».

The IPN is sent automatically on the URL you specified, when the status of your transaction is updated (it can be completed, rejected, refunded, or chargeback).

Please note that there is no IPN for canceled transaction. In case of cancellation, the customer will simply be redirected to the URL you provided.

It is important to understand that the IPN is a server-to-server communication and that it does not require an action made by the customer, and it cannot be altered. This way, the IPN is more reliable than the simple “return on website”.

We encourage you to use the IPN to automatically process the transactions and to not trust the “return URL” alone.

Also note that, most of the time, your will receive the IPN before the customer returns to your website, but, in rare case, due to network latency, you may encounter a short delay.

Data sent in the IPN

These data are sent in a POST “array”.

In PHP, for example, you will access these data using $_POST[‘MerchantApiResponse’].

For a better understanding, we can represent these data as an HTML form, like the one on the right.

IP ADDRESSES

All webhook requests will be coming from the following IPs:

Sandbox 18.205.86.169

Production 18.205.86.169

Please make sure that you’ve allowlisted these IPs to receive webhook notifications.

IPN Data

Below are all the parameters of the WebHook / IPN explained.

Root data

Property Type Description
status string Has the value "OK" for successful, "PENDING" for pending transaction or "ERROR" for failure
request_id int Request ID is the unique ID of the request
request_status string Request status, it can be 'pending', 'accepted', 'rejected', 'cancelled', 'completed', 'refunded'
tr_id int Transaction ID is the unique ID of transaction associated to the request
sub_account_id string Sub Account ID for which you have associated this request
ref_id string Reference ID is the unique ID you've passed for this request
msg string Message
info string Additional information
PlatformTransaction PlatformTransactionType Easy Process Transaction information associated to a request/transaction
PlatformAccount PlatformAccountType Easy Process Account information associated to a request/transaction
PlatformRequest PlatformRequestType Easy Process Request with full information
hash string Hash code to check the authenticity of the IPN response

Quick Start

This API is typically used to request a payment from a customer and then wait for the payment to trigger automatic processes on your end.

To get started, you need to call the function to create a payment request.

When you make this call, it's a good idea to provide the customer's complete profile. This way, everything will be pre-filled for them, making the payment process quicker and easier.

At this stage, you can decide whether you want us to send the payment request or if you'd rather share the payment link yourself. You can control this using the sendmail parameter in the payment request.

On the right (or below on mobile) is what a basic call to this function might look like.

Basic Payment Request Payload

{
    "payment_request": {
        "amount": "20",
        "reference": "823456",
        "description_int": "Order #823456 / Customer #123",
        "description_pub": "Your order #823456 on https://our.web.site",
        "sendmail": true
    },
    "customer": {
        "email": "[email protected]",
        "firstname": "Michel",
        "lastname": "POIGNANT",
        "address1": "100 Pines Blvd ",
        "city": "Pembroke Pines",
        "zipcode": "33024",
        "country": "US",
        "state": "FL",
        "phone": "1948417329"
    }
}

In this example, the customer will receive an email that looks something like this:

Payment Request Notification E-mail

Inviting them to either follow a link or scan a QR code.

If you prefer to communicate this information yourself and have more control over the button URLs, you can add more parameters. (Check them out on the right or below if you're on mobile)

Advanced Payment Request Payload

{
    "payment_request": {
        "amount": "20",
        "reference": "823456",
        "description_int": "Order #823456 / Customer #123",
        "description_pub": "Your order #823456 on https://our.web.site",
        "sendmail": false,
        "notify_url": "https://our.web.site/idem/ipn",
        "back_url": "https://our.web.site/return/back?ref=923456",
        "back_label": "Go to the store",
        "paid_url": "https://our.web.site/return/paid?ref=923456",
        "paid_label": "Continue to the store"
    },
    "customer": {
        "email": "[email protected]",
        "firstname": "Michel",
        "lastname": "POIGNANT",
        "address1": "100 Pines Blvd ",
        "city": "Pembroke Pines",
        "zipcode": "33024",
        "country": "US",
        "state": "FL",
        "phone": "1948417329"
    }
}

If you choose to set sendmail to false (the default is true), make sure to share the payment request link with the customer OR redirect them to this link in some way.

Once they open the link, the customer will see an agreement page first, something like this:

Payment Request Agreement

Next they will have the payment page, like this:

Payment Request Idem

In this example, please note the "Go to the Store" button, which was specified in the request. You can also note that no additional information is requested from the customer, as all necessary details have already been provided in the request.

Once the payment is made, the customer will see a page like this one: And, if provided, the customer will be redirected to your paid_url.

Payment Request Paid

At this point, you should have received the webhook at the provided URL. (Please take a look at the webhook example on the right or below if you're on mobile.)

Payment Request Webhook

{
  "request_id": "355",
  "tr_id": "317",
  "order_ref": "923456",
  "w_number": "",
  "phone_number": "",
  "tr_status": "completed",
  "tr_amount": "20",
  "tr_currency": "USD",
  "tr_requested_amount": "20",
  "tr_requested_currency": "USD",
  "tr_change_rate": "",
  "hash": "b8224f277bd79d322651355bbae81aa0",
  "MerchantApiResponse": {
    "status": "OK",
    "request_id": "355",
    "request_status": "completed",
    "tr_id": "317",
    "sub_account_id": null,
    "ref_id": "923456",
    "description": "Your order #923456 on https://our.web.site",
    "msg": null,
    "info": null,
    "PlatformRequest": {
      "request_id": "355",
      "pr_id": "17",
      "tr_id": "317",
      "user_id": "10",
      "ref_id": "923456",
      "sub_account_id": null,
      "key": null,
      "date": "2024-12-19 13:15:40",
      "refund_date": null,
      "refund_amount": null,
      "expiration": "2024-12-21 13:15:40",
      "statement_id": null,
      "refund_statement_id": null,
      "method": "gateway",
      "type": "creditcard",
      "is_pre_auth": null,
      "is_recurring": null,
      "is_a_cycle": null,
      "recurring_id": null,
      "currency": "USD",
      "amount": "20",
      "description": "Your order #923456 on https://our.web.site",
      "addinfo": null,
      "status": "completed",
      "status_infos": null,
      "recurring_amount": null,
      "recurring_cycles": null,
      "recurring_period": null,
      "recurring_start": null,
      "recurring_end": null,
      "recurring_status": null,
      "recurring_info": null,
      "transaction": null,
      "card_present": null,
      "employee_id": null,
      "location_id": null,
      "firstname": null,
      "lastname": null,
      "email": null,
      "Documents": null
    },
    "PlatformTransaction": {
      "tr_id": "317",
      "tr_type": "creditcard2merchant",
      "tr_from_type": "creditcard",
      "tr_from_id": "20",
      "tr_from_currency": "USD",
      "tr_to_type": "merchant",
      "tr_to_id": "12345678",
      "tr_to_currency": "USD",
      "tr_requested_original": "20",
      "tr_requested_currency": "USD",
      "tr_amount_requested": "20",
      "tr_amount_transfered": "20",
      "tr_amount_total_cost": "20",
      "tr_amount_refunded": null,
      "tr_change_rate": null,
      "tr_fees": "0",
      "tr_fees_currency": "USD",
      "tr_fees_type": "fixed",
      "tr_fees_rate_fixed": "0",
      "tr_fees_rate_percent": "0",
      "tr_fees_level": "0",
      "tr_date_created": "2024-12-19 13:15:40",
      "tr_date_updated": "2024-12-19 13:15:40",
      "tr_date_completed": "2024-12-19 13:15:40",
      "tr_date_refunded": null,
      "tr_notif_sender": "email",
      "tr_notif_receiver": "none",
      "tr_status": "completed",
      "tr_status_msg": null,
      "pay_infos": "57609138"
    },
    "PlatformAccount": {
      "user_id": "10",
      "email": "[email protected]",
      "gender": "m",
      "firstname": "Michel",
      "lastname": "POIGNANT",
      "address": "100 Pines Blvd ",
      "city": "Pembroke Pines",
      "zipcode": "33024",
      "country": "US",
      "state": "FL",
      "phone": "1948417329",
    },
    "PlatformPaymentRequest": {
      "pr_id": "17",
      "pr_code": "763ab528",
      "user_id": "10",
      "type": "idem",
      "creation_date": "2024-12-19 12:50:52",
      "validity": null,
      "expiration_date": null,
      "amount": "20",
      "currency": "USD",
      "ref_id": "923456",
      "description_internal": "Order #923456 / Customer #123",
      "description_public": "Your order #923456 on https://our.web.site",
      "addinfo": "Any add. info your want to store",
      "link": "https://gateway.idem-club.info/763ab528",
      "qrcode_url": "https://gateway.idem-club.info/files/merchants/12345678/2024/12/763ab528.png",
      "notify_url": "https://our.web.site/webhook.php",
      "back_url": "https://our.web.site/return/back?ref=923456",
      "back_label": "Go to the store",
      "paid_url": "https://our.web.site/return/paid?ref=923456",
      "paid_label": "Continue to the store",
      "status": "completed",
      "Documents": null,
      "Requests": null
    },
    "hash": "de560d1f79b3329e16a58c372c72edb3"
  }
}

And then, you can process the payment on your side if the PlatformRequest->status is completed.

At any time, you can also check the status of your payment request with the function Retrieve a payment request.

JavaScript SDK

Introduction

The JavaScript SDK provides an easy way to integrate EasyProcess + IDEM payment processing directly into your web application. With just a few lines of code, you can create secure payment forms that handle card processing, 3D Secure authentication, and real-time status updates.

Prerequisites

Contact your sales representative to enable the SDK for your account.

Configuration

Step 1: Enable SDK in Settings

Go to your merchant settings and configure the SDK:

Make sure to note your Merchant ID (an 8-digit number), as you will need it for initialization.

Quick Start

Basic HTML Setup

Please take a look at the HTML example, on the right or below if you're on mobile.

Basic HTML Setup for the SDK

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Payment Page</title>

    <!-- SDK Files (use the correct domain for your environment) -->
    <!-- Prod: https://gateway.idem-club.com | Sandbox: https://gateway.idem-club.info -->
    <script src="https://gateway.idem-club.com/sdk/v1/sdk.min.js"></script>
    <!-- Minimal styling for the SDK -->
    <link rel="stylesheet" href="https://gateway.idem-club.com/sdk/v1/sdk.min.css">

    <!-- Optional: Your custom styles -->
    <style>
        #payment-container {
            max-width: 400px;
            margin: 50px auto;
            padding: 20px;
            border: 1px solid #ddd;
            border-radius: 8px;
        }
    </style>
</head>
<body>
    <div id="payment-container">
        <h2>Complete Payment</h2>
        <div id="payment-form"></div>
    </div>

    <script>
        // Your JavaScript goes here (see next section)
    </script>
</body>
</html>

JavaScript Implementation

Please take a look at the JavaScript example, on the right or below if you're on mobile.

JavaScript SDK Implementation

// Initialize the SDK (environment is inferred from the domain serving the SDK)
var sdk = PaymentSDK.init({
    merchantId: '12345678',     // Replace with your merchant ID
    sdkKey: 'YOUR_SDK_KEY_HERE' // Replace with your SDK key
});

// Create the payment form
var paymentForm = sdk.createPaymentForm({
    container: '#payment-form',

    // Payment details
    amount: 49.99,
    currency: 'USD',
    orderRef: '1234', // Your reference - must be unique per transaction

    // Customer information (required fields)
    customer: {
        email: '[email protected]',
        firstname: 'John',
        lastname: 'Doe',
        zipcode: '10001',
        country: 'US'
    },

    // Success handler
    onSuccess: function(result) {
        console.log('Payment successful!', result);
        alert('Payment completed! Transaction ID: ' + result.transaction_id);
        // Redirect to success page
        window.location.href = '/payment-success';
    },

    // Error handler
    onError: function(error) {
        console.error('Payment failed:', error);
        alert('Payment failed: ' + error.message);
    },

    // Pending handler (for async processors)
    onPending: function(context) {
        console.log('Processing payment...');
        // SDK automatically handles status updates via SSE
        // The form will update when payment completes
    }
});

Testing

Sandbox Environment

Browser Console

  1. Open Developer Tools (F12)
  2. Check Console for any errors
  3. Verify SDK initialization message

Common Test Scenarios

Production Checklist

Advanced Features

Debug Logging

Use the optional onLog function to surface SDK internal logs to your console.

Please take a look at the JavaScript example, on the right or below if you're on mobile.

Debug Logging

var sdk = PaymentSDK.init({
    merchantId: '12345678',
    sdkKey: 'YOUR_SDK_KEY_HERE',
    onLog: function() {
        // Prefix logs for easy filtering in the console
        try {
            console.log('[PaymentSDK]', Array.prototype.slice.call(arguments));
        } catch (e) {}
    }
});

What gets logged:

Handle Async Payments

Please take a look at the JavaScript example, on the right or below if you're on mobile.

Handle Async Payments

onPending: function(context) {
    // Show custom loading UI
    document.getElementById('loading-message').style.display = 'block';

    // Session ID available for status checking
    console.log('Session ID:', context.session_id);

    // SSE automatically handles updates
    // onSuccess or onError will be called when complete
}

IDEM Club Integration

For merchants with IDEM Club integration enabled (m_idem = 1), the SDK automatically handles:

The mr_idem_user_id field will be automatically set when processing payments for IDEM Club members.

Webhook Integration

Do not rely on JavaScript callbacks alone for fulfillment or accounting. Always implement a backend Webhook listener to receive authoritative status updates even if the browser closes or the network drops.

Error Codes

Code Description User Action
declined Payment was declined Try different payment method
attempts_exceeded Too many failed attempts Wait and try again later
session_expired Payment session expired Refresh page and start over
idem_user_invalid IDEM Club validation failed Check customer information
browser_not_supported Browser doesn't support SSE Use modern browser (not IE)

Troubleshooting

Issue Solution
"Missing Authorization header" Check SDK key is correct
"Origin not allowed" Verify domain in sdk_allowed_origins
"Session expired" Payment took too long, refresh page
"SDK disabled" Contact support to enable SDK
Form doesn't appear Check container selector exists
SSE connection fails Ensure CloudFlare or similar is not blocking SSE

Debugging 400 Bad Request

If calling PaymentSDK.init() results in a 400 Bad Request during POST /api/sdk/auth/token:

  1. Enable logging - Initialize with onLog to capture SDK messages
  2. Verify domain/environment - Ensure correct domain (sandbox: .info, prod: .ai)
  3. Inspect Network tab - Check the request body and response
  4. Common causes:
    • Invalid/missing merchant_id
    • Invalid sdk_key or key not issued for this merchant
    • SDK disabled for this merchant
    • Origin not allowed (add exact Origin to sdk_allowed_origins)
    • Sandbox key used from prod domain (or vice versa)
  5. Provide correlation_id to support for faster tracing

Objects / Models

The Response object

Sample Response object

{
  "status": "OK",
  "msg": "Sample Response",
  "payment_request": null,
  "customer": null,
  "transaction": null,
  "request": null,
  "requests": [],
  "transactions": [],
  "data": [],
  "per_page": null,
  "current_page": null,
  "total_items": null
}
Name Type Description Apply to
status string Request status. Can be "OK" or "KO" all
msg string Additional info on the status all
payment_request Payment Request A payment request /payment-request/*
customer Customer A customer /payment-request/* /request/* /customer/*
request Request A merchant request / transaction / payment /request/*
payment_requests[] Payment Request[] Array of payment requests /payment-requests/*
requests[] Request[] Array of merchant requests /requests/*
customers[] Customers[] Array of customers /customers/*
data[] array Versatile data as array Future usages
per_page integer Items per page /payment-requests/* /requests/* /customers/*
current_page integer The current page /payment-requests/* /requests/* /customers/*
total_items integer The total count of items /payment-requests/* /requests/* /customers/*

PlatformPaymentRequestType

Name Type Property Description
pr_id integer unique - readonly Internal unique ID in the system for this payment request
pr_code char(8) unique - readonly Internal unique code in the system for this payment request
type string mandatory Type of payment request: 'single', for a one time payment, 'multiple', for multiple payments
creation_date datetime readonly The date and time at which the request was made
validity integer optional Number of minutes for which the request will be valid
expiration datetime readonly Expiration date of the payment request; calculated if validity is provided
amount double optional Requested amount for this payment
currency char(3) optional Currency used for the requested amount (ex: USD)
reference string mandatory - unique Your reference ID (must be unique)
user_id integer optional Internal unique ID of a customer in the system. Only filled if the request is linked to an existing account.
description_internal string optional Internal description of this request
description_public string optional Public description of this request (visible by customer)
addinfo string optional Additional infos that you may want to store
qrcode_url string readonly Https link to retrieve the QR Code of this request (PNG picture)
link string readonly Https link to open in a browser in order to proceed to the payment
notify_url string optional URL on which you want to receive the webhook for this request
back_url string optional A return URL for the customer, present at any moment on the regular payment page
back_label string optional Label for your return URL, default is "Back to store"
paid_url string optional A return URL for the customer, present only after a successful payment on the regular payment page
paid_label string optional Label for your success return URL, default is "Back to store"
status string readonly Payment Request status, can be 'open', 'expired', 'cancelled', 'completed'
documents array readonly Array fo associated documents
request array readonly Array fo associated requests

PlatformAccountType

Properties Type Description
user_id int Internal unique ID in the Easy Process system
email string Email address – UNIQUE per customer.
gender string Gender: 'M' for Male / 'F' for Female.
firstname string First name
lastname string Last name
address string Address
city string City
zipcode string Zip/Postal code
country string Country code (2 chars)
state string State code (2 chars / for US citizen only)
phone string Phone number. Used for contact purpose only.
birthday string Birthday. Format: YYYY-MM-DD

PlatformRequestType

Propertie Type Description
request_id integer Internal unique ID in the Easy Process system for this request
tr_id integer Internal unique ID in the Easy Process system for the associated transaction
user_id integer Internal unique ID of a customer in the Easy Process system
ref_id string Your reference ID
sub_account_id string Sub Account ID
date string Date of the request (format: YYYY-MM-DD HH:MM:SS)
refund_date string Refund date of the request (format: YYYY-MM-DD HH:MM:SS)
expiration string Expiration date (format: YYYY-MM-DD HH:MM:SS)
statement_id integer Statement ID (if transaction has been settled to the merchant)
refund_statement_id integer Refund statement ID (if transaction has been refunded on a statement)
method string Request method (api, gateway, terminal)
is_recurring boolean True if the request has been initiated as a recurring transaction
is_a_cycle boolean True if the request is part of a recurring cycle
recurring_id integer Main/parent recurring request ID (filled if $is_a_cycle is true)
type string Transaction type. Possible values are: "credit card"
currency string Request currency
amount float Original requested amount or Initial amount for recurring request
description string Description
addinfo string Additional info that you have provided
status string Request status
status_infos string Additional info’s on the status
recurring_amount float Recurring amount
recurring_cycles integer Number of recurring cycles
recurring_period string Recurring period ('weeks', 'months', 'years')
recurring_start string Recurring payment start date (format: YYYY-MM-DD HH:MM:SS)
recurring_end string Recurring payment end date (format: YYYY-MM-DD HH:MM:SS)
recurring_status string Recurring status. Possible values are: "pending", "open", "stopped", "terminated"
transaction PlatformTransactionType Associated transaction

PlatformTransactionType

Property Type Description
tr_id int Internal unique ID in the Easy Process system for this transaction
tr_type string Transaction type.
tr_from_type string Transaction source type.
tr_from_id string Transaction source id.
tr_from_currency string The main currency of the source account
tr_to_type string Transaction destination type. Usually "merchant"
tr_to_id string Transaction destination id.
tr_to_currency string Transaction destination currency.
tr_requested_original float Transaction original requested amount
tr_requested_currency string Transaction original requested currency
tr_amount_requested float Transaction converted requested amount (used currency is defined in tr_from_currency)
tr_amount_transfered float Transaction converted transferred amount (used currency is defined in tr_to_currency)
tr_amount_total_cost float Transaction total cost including fees (used currency is defined in tr_from_currency)
tr_amount_refunded float Transaction refunded amount (used currency is defined in tr_from_currency)
tr_change_rate float Transaction change rate from tr_requested_currency and the tr_from_currency if not the same
tr_fees float Transaction fees that generally apply to the sender (tr_from_id)
tr_fees_currency string Transaction fees currency (generally the same as tr_from_currency)
tr_fees_type string Type of fees ('fixed', 'percent', 'both')
tr_fees_rate_fixed float Fixed part of the fees
tr_fees_rate_percent float Variable part of the fees
tr_fees_level int User level applied to the fees and limits
tr_date_created string Transaction creation date
tr_date_updated string Transaction last update
tr_date_completed string Transaction processing date
tr_date_refunded string Transaction refund date
tr_notif_sender string Type of notification sent to the sender
tr_notif_receiver string Type of notification sent to the receiver
tr_status string Transaction status ('waiting', 'rejected', 'played', 'refunded', 'loaded', 'confirmed', 'completed', 'cancelled')
tr_status_msg string Transaction status additional information

Payment Requests

Create a payment request

Create a payment request

# Standard Request
curl --location 'https://gateway.idem-club.info/api/idem/payment-request/create' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer your_api_token' \
--data-raw '{
    "payment_request": {
        "amount": "20",
        "reference": "623456",
        "description_internal": "Order #623456 / Customer #123",
        "description_public": "Your order #623456 on https://our.web.site",
        "addinfo": "Any add. info your want to store",
        "sendmail": true
    },
    "customer": {
        "email": "[email protected]",
        "firstname": "Michel",
        "lastname": "POIGNANT",
        "address": "100 Pines Blvd ",
        "city": "Pembroke Pines",
        "zipcode": "33024",
        "country": "US",
        "state": "FL",
        "phone": "1948417329"
    },
}'

# Attach a document and provide dedicated URLs
curl --location 'https://gateway.idem-club.info/api/idem/payment-request/create' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer your_api_token' \
--data-raw '{
    "payment_request": {
        "expiration": "0",
        "amount": "20",
        "reference": "623456",
        "description_internal": "Order #623456 / Customer #123",
        "description_public": "Your order #623456 on https://our.web.site",
        "addinfo": "Any add. info your want to store",
        "sendmail": true,
        "notify_url": "https://our.web.site/idem/ipn",
        "back_url": "https://our.web.site/return/back?ref=623456",
        "back_label": "Go to the store",
        "paid_url": "https://our.web.site/return/paid?ref=623456",
        "paid_label": "Continue to the store"
    },
    "customer": {
        "email": "[email protected]",
        "firstname": "Michel",
        "lastname": "POIGNANT",
        "address": "100 Pines Blvd ",
        "city": "Pembroke Pines",
        "zipcode": "33024",
        "country": "US",
        "state": "FL",
        "phone": "1948417329"
    },
    "files": [
        {
            "file_type": "invoice",
            "file_name": "invoice.pdf",
            "file_desc_int": "Internal desc.",
            "file_desc_pub": "Public desc.",
            "file_is_public": "1",
            "content": "JVBERi0xLjMKMSAwIG9iago8PCAvQXV0aG9yICgpIC9DcmVhdGlvbkRhdGUgKEQ6MjAyNDEyMTgxNjM4NDQrMDEnMDAnKSAvQ3JlYXRvciAoTml0cm8gUERGIFBybykgL0tleXdvcmRzICgpIC9Nb2REYXRlIChEOjIwMjQxMjE4MTYzOTE3KzAxJzAwJykgL1Byb2R1Y2VyIChOaXRybyBQREYgUHJvKSAvU3ViamVjdCAoKSAvVGl0bGUgKCk+PgplbmRvYmoKMiAwIG9iago8PCAvRmlsdGVyIC9GbGF0ZURlY29kZSAvTGVuZ3RoIDI4MT4+CnN0cmVhbQ0KeJw9ksttAzEMBe+qghXE1If6nLcCY9tYH4wc0n70KD0hMDIcG2NZ3K/IW76iPyZ/8rp+o1z3nKoWM2uTejXTnieNoSNpkfsSnX8fsWHz/zNfscsnYJyAOdf99gTMVvY8AXNLe56AeTA3vBei9i1A/g2JSZCbwijITWUWtM6lYZu+TzpOeaxyiiyD3GSWQW4s7R8IctN4ZJCbzjLIb0HPNegq57TLAeSm8MygdXd6Lm+Vc2MZ5Gac8qgBpkSeGeQmswxyYyyD3FSWQU+YprMM8t3pWZ6usiWWQWu/eha8NmjGMsg/01gGuRmnPFa5RpZBbjI3OGmZwjLITWUZ5KazDPInTrlB0HoG9TyEq9wyy6BHbnn/A3WUoXoKZW5kc3RyZWFtCmVuZG9iagozIDAgb2JqCjw8IC9Db3VudCAxIC9LaWRzIFsgMTIgMCBSIF0gL01lZGlhQm94IFsgMCAwIDYxMiA3OTIgXSAvVHlwZSAvUGFnZXM+PgplbmRvYmoKNyAwIG9iago8PCAvT3V0bGluZXMgMTMgMCBSIC9QYWdlcyAzIDAgUiAvVHlwZSAvQ2F0YWxvZz4+CmVuZG9iago5IDAgb2JqClsgL0lDQ0Jhc2VkIDEwIDAgUiBdCmVuZG9iagoxMCAwIG9iago8PCAvQWx0ZXJuYXRlIC9EZXZpY2VSR0IgL0ZpbHRlciAvRmxhdGVEZWNvZGUgL0xlbmd0aCAyNjEyIC9OIDM+PgpzdHJlYW0NCngBnZZ3VFPZFofPvTe90BIiICX0GnoJINI7SBUEUYlJgFAChoQmdkQFRhQRKVZkVMABR4ciY0UUC4OCYtcJ8hBQxsFRREXl3YxrCe+tNfPemv3HWd/Z57fX2Wfvfde6AFD8ggTCdFgBgDShWBTu68FcEhPLxPcCGBABDlgBwOFmZgRH+EQC1Py9PZmZqEjGs/buLoBku9ssv1Amc9b/f5EiN0MkBgAKRdU2PH4mF+UClFOzxRky/wTK9JUpMoYxMhahCaKsIuPEr2z2p+Yru8mYlybkoRpZzhm8NJ6Mu1DemiXho4wEoVyYJeBno3wHZb1USZoA5fco09P4nEwAMBSZX8znJqFsiTJFFBnuifICAAiUxDm8cg6L+TlongB4pmfkigSJSWKmEdeYaeXoyGb68bNT+WIxK5TDTeGIeEzP9LQMjjAXgK9vlkUBJVltmWiR7a0c7e1Z1uZo+b/Z3x5+U/09yHr7VfEm7M+eQYyeWd9s7KwvvRYA9iRamx2zvpVVALRtBkDl4axP7yAA8gUAtN6c8x6GbF6SxOIMJwuL7OxscwGfay4r6Df7n4Jvyr+GOfeZy+77VjumFz+BI0kVM2VF5aanpktEzMwMDpfPZP33EP/jwDlpzcnDLJyfwBfxhehVUeiUCYSJaLuFPIFYkC5kCoR/1eF/GDYnBxl+nWsUaHVfAH2FOVC4SQfIbz0AQyMDJG4/egJ961sQMQrIvrxorZGvc48yev7n+h8LXIpu4UxBIlPm9gyPZHIloiwZo9+EbMECEpAHdKAKNIEuMAIsYA0cgDNwA94gAISASBADlgMuSAJpQASyQT7YAApBMdgBdoNqcADUgXrQBE6CNnAGXARXwA1wCwyAR0AKhsFLMAHegWkIgvAQFaJBqpAWpA+ZQtYQG1oIeUNBUDgUA8VDiZAQkkD50CaoGCqDqqFDUD30I3Qaughdg/qgB9AgNAb9AX2EEZgC02EN2AC2gNmwOxwIR8LL4ER4FZwHF8Db4Uq4Fj4Ot8IX4RvwACyFX8KTCEDICAPRRlgIG/FEQpBYJAERIWuRIqQCqUWakA6kG7mNSJFx5AMGh6FhmBgWxhnjh1mM4WJWYdZiSjDVmGOYVkwX5jZmEDOB+YKlYtWxplgnrD92CTYRm40txFZgj2BbsJexA9hh7DscDsfAGeIccH64GFwybjWuBLcP14y7gOvDDeEm8Xi8Kt4U74IPwXPwYnwhvgp/HH8e348fxr8nkAlaBGuCDyGWICRsJFQQGgjnCP2EEcI0UYGoT3QihhB5xFxiKbGO2EG8SRwmTpMUSYYkF1IkKZm0gVRJaiJdJj0mvSGTyTpkR3IYWUBeT64knyBfJQ+SP1CUKCYUT0ocRULZTjlKuUB5QHlDpVINqG7UWKqYup1aT71EfUp9L0eTM5fzl+PJrZOrkWuV65d7JU+U15d3l18unydfIX9K/qb8uAJRwUDBU4GjsFahRuG0wj2FSUWaopViiGKaYolig+I1xVElvJKBkrcST6lA6bDSJaUhGkLTpXnSuLRNtDraZdowHUc3pPvTk+nF9B/ovfQJZSVlW+Uo5RzlGuWzylIGwjBg+DNSGaWMk4y7jI/zNOa5z+PP2zavaV7/vCmV+SpuKnyVIpVmlQGVj6pMVW/VFNWdqm2qT9QwaiZqYWrZavvVLquNz6fPd57PnV80/+T8h+qwuol6uPpq9cPqPeqTGpoavhoZGlUalzTGNRmabprJmuWa5zTHtGhaC7UEWuVa57VeMJWZ7sxUZiWzizmhra7tpy3RPqTdqz2tY6izWGejTrPOE12SLls3Qbdct1N3Qk9LL1gvX69R76E+UZ+tn6S/R79bf8rA0CDaYItBm8GooYqhv2GeYaPhYyOqkavRKqNaozvGOGO2cYrxPuNbJrCJnUmSSY3JTVPY1N5UYLrPtM8Ma+ZoJjSrNbvHorDcWVmsRtagOcM8yHyjeZv5Kws9i1iLnRbdFl8s7SxTLessH1kpWQVYbbTqsPrD2sSaa11jfceGauNjs86m3ea1rakt33a/7X07ml2w3Ra7TrvP9g72Ivsm+zEHPYd4h70O99h0dii7hH3VEevo4bjO8YzjByd7J7HTSaffnVnOKc4NzqMLDBfwF9QtGHLRceG4HHKRLmQujF94cKHUVduV41rr+sxN143ndsRtxN3YPdn9uPsrD0sPkUeLx5Snk+cazwteiJevV5FXr7eS92Lvau+nPjo+iT6NPhO+dr6rfS/4Yf0C/Xb63fPX8Of61/tPBDgErAnoCqQERgRWBz4LMgkSBXUEw8EBwbuCHy/SXyRc1BYCQvxDdoU8CTUMXRX6cxguLDSsJux5uFV4fnh3BC1iRURDxLtIj8jSyEeLjRZLFndGyUfFRdVHTUV7RZdFS5dYLFmz5EaMWowgpj0WHxsVeyR2cqn30t1Lh+Ps4grj7i4zXJaz7NpyteWpy8+ukF/BWXEqHhsfHd8Q/4kTwqnlTK70X7l35QTXk7uH+5LnxivnjfFd+GX8kQSXhLKE0USXxF2JY0muSRVJ4wJPQbXgdbJf8oHkqZSQlKMpM6nRqc1phLT4tNNCJWGKsCtdMz0nvS/DNKMwQ7rKadXuVROiQNGRTChzWWa7mI7+TPVIjCSbJYNZC7Nqst5nR2WfylHMEeb05JrkbssdyfPJ+341ZjV3dWe+dv6G/ME17msOrYXWrlzbuU53XcG64fW+649tIG1I2fDLRsuNZRvfbore1FGgUbC+YGiz7+bGQrlCUeG9Lc5bDmzFbBVs7d1ms61q25ciXtH1YsviiuJPJdyS699ZfVf53cz2hO29pfal+3fgdgh33N3puvNYmWJZXtnQruBdreXM8qLyt7tX7L5WYVtxYA9pj2SPtDKosr1Kr2pH1afqpOqBGo+a5r3qe7ftndrH29e/321/0wGNA8UHPh4UHLx/yPdQa61BbcVh3OGsw8/rouq6v2d/X39E7Ujxkc9HhUelx8KPddU71Nc3qDeUNsKNksax43HHb/3g9UN7E6vpUDOjufgEOCE58eLH+B/vngw82XmKfarpJ/2f9rbQWopaodbc1om2pDZpe0x73+mA050dzh0tP5v/fPSM9pmas8pnS8+RzhWcmzmfd37yQsaF8YuJF4c6V3Q+urTk0p2usK7ey4GXr17xuXKp2737/FWXq2euOV07fZ19ve2G/Y3WHruell/sfmnpte9tvelws/2W462OvgV95/pd+y/e9rp95Y7/nRsDiwb67i6+e/9e3D3pfd790QepD14/zHo4/Wj9Y+zjoicKTyqeqj+t/dX412apvfTsoNdgz7OIZ4+GuEMv/5X5r0/DBc+pzytGtEbqR61Hz4z5jN16sfTF8MuMl9Pjhb8p/rb3ldGrn353+71nYsnE8GvR65k/St6ovjn61vZt52To5NN3ae+mp4req74/9oH9oftj9MeR6exP+E+Vn40/d3wJ/PJ4Jm1m5t/3hPP7CmVuZHN0cmVhbQplbmRvYmoKMTEgMCBvYmoKPDwgL0NvbG9yU3BhY2UgPDwgL0NzMSA5IDAgUj4+IC9Qcm9jU2V0IFsgL1BERiBdPj4KZW5kb2JqCjEyIDAgb2JqCjw8IC9Db250ZW50cyAyIDAgUiAvTWVkaWFCb3ggWyAwIDAgNTk1IDg0MiBdIC9QYXJlbnQgMyAwIFIgL1Jlc291cmNlcyAxMSAwIFIgL1R5cGUgL1BhZ2U+PgplbmRvYmoKMTMgMCBvYmoKPDwgPj4KZW5kb2JqCnhyZWYKMCAxNAowMDAwMDAwMDAwIDY1NTM1IGYgCjAwMDAwMDAwMDkgMDAwMDAgbiAKMDAwMDAwMDIwMSAwMDAwMCBuIAowMDAwMDAwNTU0IDAwMDAwIG4gCjAwMDAwMDAwMDAgNjU1MzUgZiAKMDAwMDAwMDAwMCA2NTUzNSBmIAowMDAwMDAwMDAwIDY1NTM1IGYgCjAwMDAwMDA2MzkgMDAwMDAgbiAKMDAwMDAwMDAwMCA2NTUzNSBmIAowMDAwMDAwNzA0IDAwMDAwIG4gCjAwMDAwMDA3NDAgMDAwMDAgbiAKMDAwMDAwMzQ1MyAwMDAwMCBuIAowMDAwMDAzNTIwIDAwMDAwIG4gCjAwMDAwMDM2MjcgMDAwMDAgbiAKdHJhaWxlcgo8PCAvSUQgWyA8MjE4ODc5NzRCOUM2NDIwMTkwRjk0QzVEMUE0OUM4MkI+IDwyMTg4Nzk3NEI5QzY0MjAxOTBGOTRDNUQxQTQ5QzgyQj4gXSAvSW5mbyAxIDAgUiAvUERGcGVuVmVyc2lvbiAoMTQuNCkgL1Jvb3QgNyAwIFIgL1NpemUgMTQ+PgpzdGFydHhyZWYKMzY0OQolJUVPRgo="
        }
    ]
}'

Sample Response

{
  "status": "OK",
  "msg": "Your request has well been sent.",
  "code": 200,
  "customer": {
    "user_id": "10",
    "email": "[email protected]",
    "gender": "m",
    "firstname": "Michel",
    "lastname": "POIGNANT",
    "address": "100 Pines Blvd ",
    "city": "Pembroke Pines",
    "zipcode": "33024",
    "country": "US",
    "state": "FL",
    "phone": "1948417329"
  },
  "payment_request": {
    "pr_id": "14",
    "pr_code": "fc8adb32",
    "user_id": "10",
    "type": "idem",
    "creation_date": "2024-12-19 05:12:37",
    "validity": null,
    "expiration_date": null,
    "amount": "20",
    "currency": "USD",
    "reference": "623456",
    "description_internal": "Order #623456 / Customer #123",
    "description_public": "Your order #623456 on https://our.web.site",
    "addinfo": "Any add. info your want to store",
    "link": "https://gateway.idem-club.info/fc8adb32",
    "qrcode_url": "https://gateway.idem-club.info/files/merchants/12345678/2024/12/fc8adb32.png",
    "notify_url": "https://our.web.site/idem/ipn",
    "back_url": "https://our.web.site/return/back?ref=623456",
    "back_label": "Go to the store",
    "paid_url": "https://our.web.site/return/paid?ref=623456",
    "paid_label": "Continue to the store",
    "status": "open",
    "documents": [
      {
        "file_id": "22",
        "file_type": "invoice",
        "file_name": "invoice.pdf",
        "file_mimetype": "application/pdf",
        "file_extension": "pdf",
        "file_size": "4106",
        "file_is_public": "1",
        "file_desc_pub": "Public desc.",
        "file_desc_int": "Internal desc.",
        "file_creation": "2024-12-19 05:12:37"
      }
    ],
    "requests": null
  }
}

This function is used to request a payment to anyone using IDEM payment methods. See chapter "Introduction" for more details.

HTTP Request

Environment Request type URL
Sandbox POST https://gateway.idem-club.info/api/idem/payment-request/create
Production POST https://gateway.idem-club.com/api/idem/payment-request/create

Query Parameters

Parameter Required Description
payment_request[reference] true Your reference ID (must be unique)
payment_request[validity] false See the payment request object
payment_request[amount] false See the payment request object
payment_request[currency] false See the payment request object
payment_request[description_internal] false See the payment request object
payment_request[description_public] false See the payment request object
payment_request[additional_info] false See the payment request object
payment_request[web_hook_url] false See the payment request object
payment_request[back_btn_url] false See the payment request object
payment_request[back_btn_label] false See the payment request object
payment_request[paid_btn_url] false See the payment request object
payment_request[paid_btn_label] false See the payment request object
customer[id] false See the customer object
customer[firstname] false See the customer object
customer[lastname] false See the customer object
customer[email] false See the customer object
customer[phone] false See the customer object
customer[address] false See the customer object
customer[city] false See the customer object
customer[zipcode] false See the customer object
customer[country] false See the customer object
customer[state] false See the customer object
documents[] false See the document object

Retrieve a payment request

Retrieve a payment request

curl -s -G "https://gateway.idem-club.info/api/idem/request/get/14" \
  -H "Authorization: Bearer your_api_token" \
  --data-urlencode 'documents=false'

Sample Response

{
  "status": "OK",
  "msg": null,
  "code": 200,
  "customer": {
    "user_id": "10",
    "email": "[email protected]",
    "gender": "m",
    "firstname": "Michel",
    "lastname": "POIGNANT",
    "address": "100 Pines Blvd ",
    "city": "Pembroke Pines",
    "zipcode": "33024",
    "country": "US",
    "state": "FL",
    "phone": "1948417329",
    "birthday": null
  },
  "payment_request": {
    "pr_id": "15",
    "pr_code": "5347296f",
    "user_id": "10",
    "type": "idem",
    "creation_date": "2024-12-19 05:24:41",
    "reference": "723456",
    "validity": null,
    "expiration_date": null,
    "amount": "20",
    "min_amount": null,
    "max_amount": null,
    "currency": "USD",
    "description_internal": "Order #723456 / Customer #123",
    "description_public": "Your order #723456 on https://our.web.site",
    "addinfo": "Any add. info your want to store",
    "link": "https://gateway.idem-club.info/5347296f",
    "qrcode_url": "https://gateway.idem-club.info/files/merchants/12345678/2024/12/5347296f.png",
    "notify_url": "https://our.web.site/idem/ipn",
    "back_url": "https://our.web.site/return/back?ref=723456",
    "back_label": "Go to the store",
    "paid_url": "https://our.web.site/return/paid?ref=723456",
    "paid_label": "Continue to the store",
    "status": "open",
    "documents": [
      {
        "file_id": "23",
        "file_type": "invoice",
        "file_name": "invoice.pdf",
        "file_mimetype": "application/pdf",
        "file_extension": "pdf",
        "file_size": "4106",
        "file_is_public": "1",
        "file_desc_pub": "Public desc.",
        "file_desc_int": "Internal desc.",
        "file_creation": "2024-12-19 05:24:41"
      }
    ],
    "requests": null
  }
}

This function is used to retrieve a single payment request by its internal ID.

HTTP Request

Environment Request type URL
Sandbox GET https://gateway.idem-club.info/api/idem/payment-request/get/{id}
Production GET https://gateway.idem-club.com/api/idem/payment-request/get/{id}

Query Parameters

Parameter Required Description
documents false Returns the documents content as a base64 string - Default to false

Cancel a payment request

Cancel a payment request

curl -s -G "https://gateway.idem-club.info/api/idem/request/cancel/15" \
  -H "Authorization: Bearer your_api_token" \
  --data-urlencode 'reason='

Sample Response

{
  "status": "OK",
  "msg": null,
  "code": 200,
  "customer": {
    "user_id": "10",
    "email": "[email protected]",
    "gender": "m",
    "firstname": "Michel",
    "middlename": "NC",
    "lastname": "POIGNANT",
    "address": "100 Pines Blvd ",
    "city": "Pembroke Pines",
    "zipcode": "33024",
    "country": "US",
    "state": "FL",
    "phone": "1948417329",
    "birthday": null
  },
  "payment_request": {
    "pr_id": "15",
    "pr_code": "5347296f",
    "user_id": "10",
    "type": "idem",
    "creation_date": "2024-12-19 05:24:41",
    "validity": null,
    "expiration_date": null,
    "amount": "20",
    "min_amount": null,
    "max_amount": null,
    "currency": "USD",
    "description_internal": "Order #723456 / Customer #123",
    "description_public": "Your order #723456 on https://our.web.site",
    "addinfo": "Any add. info your want to store",
    "link": "https://gateway.idem-club.info/5347296f",
    "qrcode_url": "https://gateway.idem-club.info/files/merchants/12345678/2024/12/5347296f.png",
    "notify_url": "https://our.web.site/idem/ipn",
    "back_url": "https://our.web.site/return/back?ref=723456",
    "back_label": "Go to the store",
    "paid_url": "https://our.web.site/return/paid?ref=723456",
    "paid_label": "Continue to the store",
    "status": "cancelled",
    "documents": [
      {
        "file_id": "23",
        "file_type": "invoice",
        "file_name": "invoice.pdf",
        "file_mimetype": "application/pdf",
        "file_extension": "pdf",
        "file_size": "4106",
        "file_is_public": "1",
        "file_desc_pub": "Public desc.",
        "file_desc_int": "Internal desc.",
        "file_creation": "2024-12-19 05:24:41"
      }
    ],
    "requests": null,
    "reference": "723456"
  }
}

This function is used to cancel a pending payment request.

HTTP Request

Environment Request type URL
Sandbox GET https://gateway.idem-club.info/api/idem/payment-request/cancel/{id}
Production GET https://gateway.idem-club.com/api/idem/payment-request/cancel/{id}

Query Parameters

Parameter Required Description
reason false Reason of this cancellation

List your payment requests

List your payment requests

curl -s -G "https://gateway.idem-club.info/api/idem/payment-requests" \
  -H "Authorization: Bearer your_api_token" \
  --data-urlencode 'per_page=10' \
  --data-urlencode 'status=completed'

Sample Response


This function is used to list / search your payment requests using several filters.

HTTP Request

Environment Request type URL
Sandbox GET https://gateway.idem-club.info/api/idem/payment-requests
Production GET https://gateway.idem-club.com/api/idem/payment-requests

Query Parameters

Parameter Type Description
page_number integer See pagination
per_page integer See pagination
period_start datetime Format: YYYY-MM-DD HH:MM:SS
period_end datetime Format: YYYY-MM-DD HH:MM:SS
reference string See the payment request object
status string See the payment request object
amount double See the payment request object
operator char(1) Operator to apply to the amount parameter. Can be <, > or =.
currency char(3) See the payment request object
customer_id integer EasyProcess Customer ID
customer_email string Customer email

Merchant Request / Transactions

Retrieve a request

Retrieve a request

curl -s -G "https://gateway.idem-club.info/api/idem/request/get/{id}" \
  -H "Authorization: Bearer your_api_token"

Sample Response

{
  "status": "OK",
  "msg": null,
  "code": 200,
  "customer": {
    "user_id": "10",
    "email": "[email protected]",
    "gender": "m",
    "firstname": "Michel",
    "lastname": "POIGNANT",
    "address": "100 Pines Blvd ",
    "city": "Pembroke Pines",
    "zipcode": "33024",
    "country": "US",
    "state": "FL",
    "phone": "1948417329",
    "birthday": null
  },
  "transaction": {
    "tr_id": "312",
    "tr_type": "creditcard2merchant",
    "tr_from_type": "creditcard",
    "tr_from_id": "20",
    "tr_from_currency": "USD",
    "tr_to_type": "merchant",
    "tr_to_id": "12345678",
    "tr_to_currency": "USD",
    "tr_requested_original": "30",
    "tr_requested_currency": "USD",
    "tr_amount_requested": "30",
    "tr_amount_transfered": "30",
    "tr_amount_total_cost": "30",
    "tr_amount_refunded": null,
    "tr_change_rate": null,
    "tr_fees": "0",
    "tr_fees_currency": "USD",
    "tr_fees_type": "fixed",
    "tr_fees_rate_fixed": "0",
    "tr_fees_rate_percent": "0",
    "tr_fees_level": "0",
    "tr_date_created": "2024-11-26 05:45:17",
    "tr_date_updated": "2024-11-26 05:45:17",
    "tr_date_completed": "2024-11-26 05:45:17",
    "tr_date_refunded": null,
    "tr_notif_sender": "email",
    "tr_notif_receiver": "none",
    "tr_status": "completed",
    "tr_status_msg": null,
    "pay_infos": "40852791"
  },
  "request": {
    "request_id": "350",
    "pr_id": "7",
    "tr_id": "312",
    "user_id": "10",
    "ref_id": "PR8",
    "sub_account_id": null,
    "key": null,
    "date": "2024-11-26 05:45:17",
    "refund_date": null,
    "refund_amount": null,
    "expiration": "2024-11-28 05:45:17",
    "statement_id": null,
    "refund_statement_id": null,
    "method": "gateway",
    "type": "creditcard",
    "is_pre_auth": null,
    "is_recurring": null,
    "is_a_cycle": null,
    "recurring_id": null,
    "currency": "USD",
    "amount": "30",
    "description": "Pub.",
    "addinfo": null,
    "status": "completed",
    "status_infos": null,
    "recurring_amount": null,
    "recurring_cycles": null,
    "recurring_period": null,
    "recurring_start": null,
    "recurring_end": null,
    "recurring_status": null,
    "recurring_info": null,
    "transaction": null,
    "card_present": null,
    "employee_id": null,
    "location_id": null,
    "firstname": null,
    "lastname": null,
    "email": null,
    "documents": null
  }
}

This function is used to retrieve a single merchant request and the associated transaction and customer.

HTTP Request

Environment Request type URL
Sandbox GET https://gateway.idem-club.info/api/idem/request/get
Production GET https://gateway.idem-club.com/api/idem/request/get

Query Parameters

Parameter Required Description
id true The request unique ID

Cancel a request

Cancel a request

curl --location 'https://gateway.idem-club.info/api/idem/request/cancel/347?reason=Order%20cancelled'
--header 'Authorization: ••••••' \

Sample Response

{
  "status": "OK",
  "msg": "The request 347 has been cancelled",
  "code": 200,
  "customer": {
    "user_id": null,
    "email": null,
    "gender": null,
    "firstname": null,
    "lastname": null,
    "address": null,
    "city": null,
    "zipcode": null,
    "country": null,
    "state": null,
    "phone": null,
    "birthday": null
  },
  "request": {
    "request_id": "347",
    "pr_id": null,
    "tr_id": null,
    "user_id": null,
    "ref_id": "548754",
    "sub_account_id": null,
    "key": null,
    "date": "2024-11-22 09:58:21",
    "refund_date": null,
    "refund_amount": null,
    "expiration": "2024-11-22 21:58:21",
    "statement_id": null,
    "refund_statement_id": null,
    "method": "gateway",
    "type": "creditcard",
    "is_pre_auth": null,
    "is_recurring": null,
    "is_a_cycle": null,
    "recurring_id": null,
    "currency": "USD",
    "amount": "35",
    "description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi ut elementum enim.",
    "addinfo": null,
    "status": "cancelled",
    "status_infos": null,
    "recurring_amount": null,
    "recurring_cycles": null,
    "recurring_period": null,
    "recurring_start": null,
    "recurring_end": null,
    "recurring_status": null,
    "recurring_info": null,
    "transaction": null,
    "card_present": null,
    "employee_id": null,
    "location_id": null,
    "firstname": null,
    "lastname": null,
    "email": null,
    "documents": null
  }
}

This function is used to cancel a pending request.

HTTP Request

Environment Request type URL
Sandbox POST https://gateway.idem-club.info/api/idem/request/cancel/{id}
Production POST https://gateway.idem-club.com/api/idem/request/cancel/{id}

Query Parameters

Parameter Required Description
id true The request unique ID

Refund a request

Refund a request

curl --location 'https://gateway.idem-club.info/api/idem/request/refund' \
--header 'Content-Type: application/json' \
--header 'Authorization: ••••••' \
--data-raw '{
    "id": 332,
    "secret_key": "••••••",
    "reason": "Cancelled order"
}'

Sample Response

{
  "status": "OK",
  "msg": "The request 332 has been refunded. The transaction 296 has been refunded",
  "code": 200,
  "customer": {
    "user_id": "57",
    "email": "[email protected]",
    "gender": "m",
    "firstname": "John",
    "lastname": "Doe",
    "address": "NC ",
    "city": "Fort Lauderdale",
    "zipcode": "33301",
    "country": "US",
    "state": "FL",
    "phone": "NC",
    "birthday": null
  },
  "transaction": {
    "tr_id": "296",
    "tr_type": "creditcard2merchant",
    "tr_from_type": "creditcard",
    "tr_from_id": "116",
    "tr_from_currency": "USD",
    "tr_to_type": "merchant",
    "tr_to_id": "12345678",
    "tr_to_currency": "USD",
    "tr_requested_original": "48",
    "tr_requested_currency": "USD",
    "tr_amount_requested": "48",
    "tr_amount_transfered": "48",
    "tr_amount_total_cost": "48",
    "tr_amount_refunded": "48",
    "tr_change_rate": null,
    "tr_fees": "0",
    "tr_fees_currency": "USD",
    "tr_fees_type": "fixed",
    "tr_fees_rate_fixed": "0",
    "tr_fees_rate_percent": "0",
    "tr_fees_level": "0",
    "tr_date_created": "2024-11-08 08:04:45",
    "tr_date_updated": "2024-12-19 08:30:16",
    "tr_date_completed": "2024-11-08 08:04:45",
    "tr_date_refunded": "2024-12-19 08:30:10",
    "tr_notif_sender": "email",
    "tr_notif_receiver": "none",
    "tr_status": "refunded",
    "tr_status_msg": "Transaction refunded on 2024-12-19 08:30:16",
    "pay_infos": "93124758"
  },
  "request": {
    "request_id": "332",
    "pr_id": null,
    "tr_id": "296",
    "user_id": "57",
    "ref_id": "Order #6924",
    "sub_account_id": "1",
    "key": null,
    "date": "2024-11-08 08:04:44",
    "refund_date": null,
    "refund_amount": null,
    "expiration": "2024-11-10 08:04:44",
    "statement_id": null,
    "refund_statement_id": null,
    "method": "gateway",
    "type": "creditcard",
    "is_pre_auth": null,
    "is_recurring": null,
    "is_a_cycle": null,
    "recurring_id": null,
    "currency": "USD",
    "amount": "48",
    "description": "Your order at XYZ store",
    "addinfo": null,
    "status": "completed",
    "status_infos": null,
    "recurring_amount": null,
    "recurring_cycles": null,
    "recurring_period": null,
    "recurring_start": null,
    "recurring_end": null,
    "recurring_status": null,
    "recurring_info": null,
    "transaction": null,
    "card_present": null,
    "employee_id": null,
    "location_id": null,
    "firstname": null,
    "lastname": null,
    "email": null,
    "documents": null
  }
}

This function is used to refund a request.

HTTP Request

Environment Request type URL
Sandbox POST https://gateway.idem-club.info/api/idem/request/refund
Production POST https://gateway.idem-club.com/api/idem/request/refund

Query Parameters

Parameter Required Description
id true The request unique ID
secret_key true Your secret key (this is NOT your token)
amount false Specify the amount to refund - for partial refund only - leave blank for full amount
currency false Required if the amount to refund is specified
reason true Reason of this refund

List your requests

List your requests

curl -s -G "https://gateway.idem-club.info/api/idem/requests" \
  -H "Authorization: Bearer your_api_token" \
  --data-urlencode "status=refunded"

Sample Response


This function is used to list / search your requests using several filters.

HTTP Request

Environment Request type URL
Sandbox GET https://gateway.idem-club.info/api/idem/requests
Production GET https://gateway.idem-club.com/api/idem/requests

Query Parameters

Parameter Type Description
page_number integer See pagination
per_page integer See pagination
pr_id integer EasyProcess + IDEM Payment Request ID
customer_id integer See the request object
created_at_start datetime Format: YYYY-MM-DD HH:MM:SS
created_at_end datetime Format: YYYY-MM-DD HH:MM:SS
updated_at_start datetime Format: YYYY-MM-DD HH:MM:SS
updated_at_end datetime Format: YYYY-MM-DD HH:MM:SS
paid_at_start datetime Format: YYYY-MM-DD HH:MM:SS
paid_at_end datetime Format: YYYY-MM-DD HH:MM:SS
refunded_at_start datetime Format: YYYY-MM-DD HH:MM:SS
refunded_at_end datetime Format: YYYY-MM-DD HH:MM:SS
requested_amount double See the request object
requested_currency char(3) See the request object
fees_amount double See the request object
fees_currency char(3) See the request object
received_amount double See the request object
received_currency char(3) See the request object
paid_amount double See the request object
paid_currency char(3) See the request object
reference string See the request object
status string See the request object
operator char(1) Operator to apply to the amount parameter. Can be <, > or =.

Customers

Retrieve a customer

Retrieve a customer

curl --location 'https://gateway.idem-club.info/api/idem/customer/get/?email=demo%40idem.one' \
--header 'Authorization: ••••••'

Sample Response

{
  "status": null,
  "code": 200,
  "msg": null,
  "customer": {
    "user_id": "10",
    "email": "[email protected]",
    "gender": "m",
    "firstname": "Michel",
    "middlename": "NC",
    "lastname": "POIGNANT",
    "address": "100 Pines Blvd ",
    "city": "Pembroke Pines",
    "zipcode": "33024",
    "country": "US",
    "state": "FL",
    "phone": "1948417329"
  }
}

This function is used to retrieve a single EasyProcess + IDEM customer, by ID or Email.

HTTP Request

Environment Request type URL
Sandbox GET https://gateway.idem-club.info/api/idem/customer/get/{id?}
Production GET https://gateway.idem-club.com/api/idem/customer/get/{id?}

Query Parameters

Parameter Required Description
id conditional The EasyProcess + IDEM Customer ID
email conditional The customer's email (unique in the EasyProcess + IDEM system)

List your customers

List your customers

curl --location 'https://gateway.idem-club.info/api/idem/customers' \
--form 'country_code="FR"'

Sample Response


This function is used to list/search your customers with some basic filters.

HTTP Request

Environment Request type URL
Sandbox POST https://gateway.idem-club.info/api/idem/customers
Production POST https://gateway.idem-club.com/api/idem/customers

Query Parameters

Parameter Type Description
page_number integer See pagination
per_page integer See pagination
created_from datetime Format: YYYY-MM-DD HH:MM:SS
created_to datetime Format: YYYY-MM-DD HH:MM:SS
country_code char(2)
state_code string
firstname string
lastname string
city string
zipcode string
phone string
email string

Postman Collection

To help you get started quickly,
you can find here a Postman collection with the following functions:

More functions will be added in the next releases