Skip to content

Edge Payment Technologies, Inc {json:api} Specification (1.0)

Edge Payment Technologies offers payment solutions for merchants in diverse legal industries. To learn more about Edge's proposition see our about page.

Authentication

Before starting with the API, you must create a merchant account and obtain API keys from the Developer tab in your account dashboard. You will use the “Publishable key” with Edge JavaScript SDK and the “Secret key” with any SDK or HTTP API call. The Edge HTTP API requires in every request a Authorization header with a Bearer token.

JSONAPI

The Edge API is based upon REST principles, returns JSON responses, and uses standard HTTP response codes. We speficially use the JSON:API specification.

Browser SDK

If you're wanting to use Edge Payment Technologies in the browser to make a charge you're going to need to include the Edge javascript SDK. The Edge JavaScript SDK is a toolkit for encrypting data in the browser. Using the Edge JavaScript SDK means your customer's data never leaves their browser unencrypted. You can get the URL to the SDK on the Developers page.

Then after that you need to initialize the client:

const publishableToken = "publishableToken";
const formFactor = "inputs";
const paymentButton = document.querySelector("button#pay");

console.log("Initializing Edge JS with Payment ID:", paymentId);
console.log("Publishable Key:", publishableToken);
const edgeClient = new Edge(publishableToken, {});

Once initialized you'll need to wait for webhook subscriptions in your backend, but you can also define optimistic javascript event callbacks:

edgeClient.on("payment_method_verifying", (payload) => {
  console.log("Verifying payment method", payload.detail);
  // ...
});

edgeClient.on("payment_method_ready", (payload) => {
  console.log("Payment method ready", payload.detail);
  if (paymentButton) {
    // ...
  }
});

edgeClient.on("payment_approved", (payload) => {
  console.log("Payment approved", payload.detail);
});

edgeClient.on("subscription_approved", (payload) => {
  console.log("Subscription approved", payload.detail);
  // ...
});

edgeClient.on("payment_method_verified", async (payload) => {
  console.log("Payment method verified", payload.detail);
  // ...
});

edgeClient.on("payment_failed", (payload) => {
  console.log("Payment failed", payload.detail);
  // ...
});

edgeClient.on("payment_timeout", (payload) => {
  console.log("Payment timeout", payload.detail);
  // ...
});

// Pay button click triggers payment method verification
paymentButton.addEventListener("click", function () {
  // ...
  edgeClient.verifyPaymentMethod().catch((err) => {
    console.error("Payment method verification failed", err);
    // ...
  });
});

Finally you need to mount the edge client to the form:

edgeClient.mountPaymentForm("edge-js", paymentId);

Test Card Numbers (By network)

Card Number3DS ResultNetwork Result
4005519200000004Frictionless SuccessVisa Success
4444333322221111455Frictionless SuccessVisa (19 Digit Pan) Success
5406004444444443Frictionless SuccessMastercard Success
6011450103333333Frictionless SuccessDiscover Success
370000999999990Frictionless SuccessAmEx Success
36006666333344Frictionless SuccessDinner's Club Success
6771798021000008Frictionless SuccessMaestro Success
4124939999999990Frictionless SuccessGeneric Decline
4444333322221111Frictionless SuccessInsufficient Funds
5555341244441115Frictionless SuccessLost Card
6011601160116611Frictionless SuccessStolen Card
370000000000002Frictionless SuccessIncorrect CVC
4917300800000000Frictionless SuccessAlways Blocked
5407721000353481Frictionless SuccessHighest risk
370000000100018Frictionless Rejection-
5100060000000002Challenge PromptSuccess
4012000077777777Not Enrolled-
4166676667666746Issuer Rejected, Unattempted-

JSON:API Filtering

EPT supports advanced filtering for all JSON:API resources via query parameters. You can filter by attributes, relationships, and relationship attributes using dot notation.

Filter by a direct attribute:

GET /api/payment_demands?filter[status]=pending

Filter by a relationship's ID:

GET /api/payment_demands?filter[payer]=<payer_id>

Filter by an attribute of a related resource using dot notation:

GET /api/payment_demands?filter[payer.email]=john@example.com

This works for any resource and any relationship chain, e.g. consumer_addresses?filter[customer.name]=John+Doe.

Notes

  • Multiple filters can be combined: filter[status]=pending&filter[payer.email]=john@example.com
  • Relationship chains of arbitrary depth are supported: filter[merchant.account.owner.email]=ceo@acme.com
  • All filters are applied as SQL AND conditions.
Download OpenAPI description
Languages
Servers
https://api.tryedge.test

Consumer Addresses

Related to physical consumer locations

Operations

Customers

Related to people who participate in a transaction

Operations

Payment Methods

Related to payment methods

Operations

Beneficial Owners

Related to ownership of merchants

Operations

List all records

Request

Security
bearerAuth
Query
filterstring

filter[NAME]=value(s)

fieldsstring

sparse fieldsets: fields[TYPE]=field1,field2,...

page[size]integer(int32)

size of page for paginated results

page[number]integer(int32)

page number of results

page[limit]integer(int32)

limit for this page of paginated results

page[offset]integer(int32)

collection items offset for paginated results

Headers
User-Agentstringrequired

The name and version of the client making the request

Example: CHOAM EPT Client v10191 (Ruby Client v3)
curl -i -X GET \
  https://api.tryedge.test/v2/beneficial_owners \
  -H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
  -H 'User-Agent: CHOAM EPT Client v10191 (Ruby Client v3)'

Responses

Bodyapplication/vnd.api+json
dataArray of objectsunique
Example: [{"attributes":{"created_at":"2024-06-06T21:48:33.382755Z","updated_at":"2024-06-06T21:48:33.382755Z"},"id":"8b886f49-384f-4473-a4cb-4c7dadb9076e","links":{},"relationships":{},"type":"beneficial_owners"}]
jsonapiobject(jsonapi)

An object describing the server's implementation

linksobject(links)required

May contain self, related, or pagination links (first, last, prev, next).

links.​firststring or object(link)

A link MUST be represented as either: a string containing the link's URL or a link object.

One of:

A link MUST be represented as either: a string containing the link's URL or a link object.

string(uri-reference)
links.​laststring or object(link)

A link MUST be represented as either: a string containing the link's URL or a link object.

One of:

A link MUST be represented as either: a string containing the link's URL or a link object.

string(uri-reference)
links.​nextstring or object(link)

A link MUST be represented as either: a string containing the link's URL or a link object.

One of:

A link MUST be represented as either: a string containing the link's URL or a link object.

string(uri-reference)
links.​prevstring or object(link)

A link MUST be represented as either: a string containing the link's URL or a link object.

One of:

A link MUST be represented as either: a string containing the link's URL or a link object.

string(uri-reference)
links.​relatedstring or object(link)

A link MUST be represented as either: a string containing the link's URL or a link object.

One of:

A link MUST be represented as either: a string containing the link's URL or a link object.

string(uri-reference)
links.​selfstring or object(link)

A link MUST be represented as either: a string containing the link's URL or a link object.

One of:

A link MUST be represented as either: a string containing the link's URL or a link object.

string(uri-reference)
metaobject(meta)

Non-standard meta-information that can not be represented as an attribute or relationship.

Response
application/vnd.api+json
{ "data": [ {} ], "links": {}, "meta": { "authors": [], "copyright": "2026 Edge Payment Technologies, Inc." } }

Create a new record

Request

Security
bearerAuth
Query
fieldsstring

sparse fieldsets: fields[TYPE]=field1,field2,...

Headers
User-Agentstringrequired

The name and version of the client making the request

Example: CHOAM EPT Client v10191 (Ruby Client v3)
curl -i -X POST \
  https://api.tryedge.test/v2/beneficial_owners \
  -H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
  -H 'User-Agent: CHOAM EPT Client v10191 (Ruby Client v3)'

Responses

Created. Assigned id and/or any other changes are in this response.

Bodyapplication/vnd.api+json
dataobject

A FinancialInstitution refers to an entity that can act as an intermediary for financial transactions, most likely a Bank.

Example: {"attributes":{"created_at":"2024-06-06T21:48:33.382755Z","updated_at":"2024-06-06T21:48:33.382755Z"},"id":"ad8c984a-81bd-44f7-87f0-2d2b06a67304","links":{},"relationships":{},"type":"beneficial_owners"}
jsonapiobject(jsonapi)

An object describing the server's implementation

linksobject(links)required

May contain self, related, or pagination links (first, last, prev, next).

links.​firststring or object(link)

A link MUST be represented as either: a string containing the link's URL or a link object.

One of:

A link MUST be represented as either: a string containing the link's URL or a link object.

string(uri-reference)
links.​laststring or object(link)

A link MUST be represented as either: a string containing the link's URL or a link object.

One of:

A link MUST be represented as either: a string containing the link's URL or a link object.

string(uri-reference)
links.​nextstring or object(link)

A link MUST be represented as either: a string containing the link's URL or a link object.

One of:

A link MUST be represented as either: a string containing the link's URL or a link object.

string(uri-reference)
links.​prevstring or object(link)

A link MUST be represented as either: a string containing the link's URL or a link object.

One of:

A link MUST be represented as either: a string containing the link's URL or a link object.

string(uri-reference)
links.​relatedstring or object(link)

A link MUST be represented as either: a string containing the link's URL or a link object.

One of:

A link MUST be represented as either: a string containing the link's URL or a link object.

string(uri-reference)
links.​selfstring or object(link)

A link MUST be represented as either: a string containing the link's URL or a link object.

One of:

A link MUST be represented as either: a string containing the link's URL or a link object.

string(uri-reference)
metaobject(meta)

Non-standard meta-information that can not be represented as an attribute or relationship.

Response
application/vnd.api+json
{ "data": { "attributes": {}, "id": "ad8c984a-81bd-44f7-87f0-2d2b06a67304", "links": {}, "relationships": {}, "type": "beneficial_owners" }, "links": {}, "meta": { "authors": [], "copyright": "2026 Edge Payment Technologies, Inc." } }

Fetch related personal_identification

Request

Security
bearerAuth
Path
idstring(uuid)(id)required

the identifier of the record

Query
fieldsstring

sparse fieldsets: fields[TYPE]=field1,field2,...

Headers
User-Agentstringrequired

The name and version of the client making the request

Example: CHOAM EPT Client v10191 (Ruby Client v3)
curl -i -X GET \
  'https://api.tryedge.test/v2/beneficial_owners/{id}/relationships/personal_identification' \
  -H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
  -H 'User-Agent: CHOAM EPT Client v10191 (Ruby Client v3)'

Responses

Bodyapplication/vnd.api+json
dataobject

TODO: Fill in

Example: {"attributes":{"created_at":"2024-06-06T21:48:33.382755Z","dob":"1990-01-01","email":"johndoe@example.com","full_name":"John Doe","id_number":"123-45-6789","name_on_document":"John Doe","nationality":"USA","personal_name":"John","phone_number":"+1234567890","updated_at":"2024-06-06T21:48:33.382755Z"},"id":"80c815a1-6a8d-4cd3-957e-b2705f6cdab0","links":{},"relationships":{},"type":"personal_identifications"}
jsonapiobject(jsonapi)

An object describing the server's implementation

linksobject(links)required

May contain self, related, or pagination links (first, last, prev, next).

links.​firststring or object(link)

A link MUST be represented as either: a string containing the link's URL or a link object.

One of:

A link MUST be represented as either: a string containing the link's URL or a link object.

string(uri-reference)
links.​laststring or object(link)

A link MUST be represented as either: a string containing the link's URL or a link object.

One of:

A link MUST be represented as either: a string containing the link's URL or a link object.

string(uri-reference)
links.​nextstring or object(link)

A link MUST be represented as either: a string containing the link's URL or a link object.

One of:

A link MUST be represented as either: a string containing the link's URL or a link object.

string(uri-reference)
links.​prevstring or object(link)

A link MUST be represented as either: a string containing the link's URL or a link object.

One of:

A link MUST be represented as either: a string containing the link's URL or a link object.

string(uri-reference)
links.​relatedstring or object(link)

A link MUST be represented as either: a string containing the link's URL or a link object.

One of:

A link MUST be represented as either: a string containing the link's URL or a link object.

string(uri-reference)
links.​selfstring or object(link)

A link MUST be represented as either: a string containing the link's URL or a link object.

One of:

A link MUST be represented as either: a string containing the link's URL or a link object.

string(uri-reference)
metaobject(meta)

Non-standard meta-information that can not be represented as an attribute or relationship.

Response
application/vnd.api+json
{ "data": { "attributes": {}, "id": "80c815a1-6a8d-4cd3-957e-b2705f6cdab0", "links": {}, "relationships": {}, "type": "personal_identifications" }, "links": {}, "meta": { "authors": [], "copyright": "2026 Edge Payment Technologies, Inc." } }

Corporate Officials

Related to corporate responsibilities of merchants

Operations

Financial Institutions

Related to known financial institutions in the edge network

Operations

Personal Identifications

Related to personal information for people

Operations

Processor Details

Related to payment processor information

Operations

Events

Related to events

Operations

Integrations

Related to third party services

Operations

Merchant Integrations

Related to the direct integration of services to merchants

Operations

Webhook Deliveries

Related to information about webhook delieveries

Operations

Webhook Subscriptions

Related to the subscriptions to notifications of events

Operations

Payment Demands

Related to transactions

Operations

Refund Demands

Related to refunds

Operations

Payment Subscriptions

Related to recurring payments

Operations

Account Alerts

Relating to alerts and notifications

Operations

Accounts

Relating to user accounts and profiles

Operations

Memberships

Related to account memberships of merchants

Operations

Merchant Punitive Actions

Related to punitive actions against merchants

Operations

Merchant Tokens

Related to API tokens

Operations

Merchants

Relating to merchant businesses

Operations

Permissions

Related to membership permissions

Operations

Red Flags

Related to official notices against merchants

Operations