Download OpenAPI specification:Download
Group: Electronic Business to Business
Definition: Interface for an issuer to authorize a transaction at a Merchant's fueling dispenser.
Description:
The proposed version of Host-to-Host APIs uses message calls that are equivalent to the Authorization Request, Financial Request and Financial Advice used in the IFSF ISO8583 based H2H standard. For clarity, however, it is not intended that this API is a direct conversion of ISO8583 messages into JSON message structures nor is it intended that this API be completely interoperable with ISO8583. It may be convertible in some limited use cases, but this is not guaranteed.
This proposal enables reusing backend logic and co-existence of traditional and APIs based integration. Limiting the number of APIs to accomplish a payment transaction, also reduces the potential exceptions that might occur executing the payment process; it eliminates the necessity of a stateful handling of multiple APIs, before completing mandatory and optionally information required for authorization and capture of the payment transaction
This approach assumes that the application server accepting the payment requests and sending the Payment APIs has the capability to manage the status of the requests till their completion (responsibility that might reside in an eCommerce platform, or ultimately in a payment terminal connecting into this server
Background:
Payment APIs enable extending business opportunities and new channels of sales and payment acceptance. As the payment industry has diversified Method of Payments, channels of acceptance and technologies, IFSF has the opportunity to define modern interoperability standards for Fuel Retailers and B2B payment offers.
Benefits of Payment APIs are:
Use Case Summary:
The use case enables the Issuer App being accepted through the Acquiring agreement of the Merchant; the Issuer manages all the App users and it is in full control of the tokens.
The Acquirer enables the request from the site, plus the unattended sales on the forecourt: the status with the site is maintained by the Acquirer, but the status of the App is maintained by the Issuer; this involves that the status is shared among Acquirer and Issuer.
Issuer Consumer
approaches a fueling position, and activates is own application. Issuer Host
determines the identity of the fueling point, and communicates that position to the Merchant Host
. Merchant Host
initiates the transaction and requests the Site System
to reserve the fueling point. Issuer Host
obtaines authorization for the transaction funds and requests fueling point authorization to Merchant Host
.Merchant Host
communicates with the Site System
to authorize the fueling point.Site System
confirms the authorization to the Merchant Host
which in turn reports to the Issuer Host
.Issuer Consumer
fuels. Site System
sends a finalization.Issuer Host
sends EFT receipt information to the Merchant Host
for the Site System
to merge with transaction receipt.Issuer Host
collects complete transaction receipt from Merchant Host
.Additional Alternate Flows are supported:
QR
, Site and Fueling Point
or any other unique Point of Interaction Identifier.Out Of Scope:
Architecture:
This API uses RESTFul Web Services, associating required functionality with resources and operations on those resources.
For handling unsolicited events from the service provider to the client, it uses HTML5 constructs such as Server Sent Events
and Web Sockets
. The interfaces are "highly cohesive" and "loosely coupled" in order to provide
maximum flexibility to the implementer, and to allow implementation as micro-services, if that construction is useful
to the implementer.
Referenced Standards:
Scope: IFSF
Part of: Payments Working Group
Use GET to retrieve transaction information
UMTI required | string [ 1 .. 40 ] characters UMTI (Unique Message Transaction Identifier) |
{- "statusReturn": {
- "timestamp": "2009-11-20T17:30:50",
- "result": "success",
- "error": "ERRCD_OK",
- "message": "Operation completed successfully"
}, - "trxDetails": {
- "transactionInfo": {
- "trxUmti": "968b12ea-caa5-1921-ecec-4cb5503d6266",
- "trxDateTime": "2021-11-26T17:17:24.600Z",
- "POI": {
- "siteID": "e0d60cdd-024d-4b41-80b1-1dc0e5142c26",
- "country": "GB",
- "POIType": "FP",
- "fuelingPointID": "FP 01"
}, - "trxState": "Fulfilled",
- "transactionLines": [
- {
- "trxLineSequenceNumber": 1,
- "productCode": 1,
- "unitPrice": {
- "value": "2.159"
}, - "salesQuantity": {
- "value": "0.926"
}, - "salesAmount": {
- "value": "2.00"
}, - "refillingPointID": "FP 01"
}
]
}, - "paymentInfo": {
- "paymentInfoID": "jhglsfjlasfjldasfjladsforteowtowetljlsfjlsdfjls",
- "cardPANPrint": "XXXXXXXXXXXX1234",
- "cardISO": "123456",
- "cardCircuit": "OpenRetailingCard",
- "paymentMethod": "credit",
- "paymentState": "Authorized",
- "preAuthAmount": {
- "value": "2.00"
}, - "finalAmount": {
- "value": "2.00"
}, - "cardType": "OpenRetailing"
}, - "customerPreferences": {
- "receiptChoice": "yes"
}
}
}
GET to retrieve receipt data
UMTI required | string [ 1 .. 40 ] characters UMTI (Unique Message Transaction Identifier) |
{- "statusReturn": {
- "timestamp": "2009-11-20T17:30:50",
- "result": "success",
- "error": "ERRCD_OK",
- "message": "Operation completed successfully"
}, - "receipt": [
- {
- "alignment": "Center",
- "charStyle": "Bold",
- "text": "WELCOME"
}, - {
- "alignment": "Center",
- "charStyle": "Bold",
- "text": "2141 NONAME ST"
}, - {
- "alignment": "Center",
- "charStyle": "Bold",
- "text": "IFSF"
}, - {
- "alignment": "Center",
- "charStyle": "Bold",
- "text": "VAT No GB9294758678"
}, - {
- "alignment": "Left",
- "charStyle": "Bold",
- "text": "PayCard Mobile"
}, - {
- "alignment": "Left",
- "charStyle": "Bold",
- "text": "PAN 38785768*****7645963"
}, - {
- "alignment": "Left",
- "charStyle": "Bold",
- "text": "Auth # 675465"
}, - {
- "alignment": "Left",
- "charStyle": "Normal",
- "text": "EFT # 546783"
}, - {
- "text": "DATE 09/07/16 12:29"
}, - {
- "text": "FP# 01"
}, - {
- "text": "PRODUCT: PLUS"
}, - {
- "text": "GALLONS: 0.926"
}, - {
- "text": "PRICE/G: $ 2.159"
}, - {
- "text": "FUEL SALE $ 2.00"
}, - {
- "text": "THANK YOU"
}, - {
- "text": "HAVE A NICE DAY"
}
]
}
POST to send EFT receipt and retrieve transaction receipt which combines EFT and merchant information. The transaction state changes to "completed"
UMTI required | string [ 1 .. 40 ] characters UMTI (Unique Message Transaction Identifier) |
openretailing-application-sender required | string <= 100 characters The controlling device identification |
transmissionDateTime required | string <date-time> [ 10 .. 30 ] characters transmission date / time |
alignment | string <= 10 characters Enum: "Left" "Right" "Center" "Justified" Text line Printer(/Display) alignment of text line |
height | string <= 6 characters Enum: "Single" "Double" "Half" Text line Printer(/Display) height of chars |
width | string <= 6 characters Enum: "Single" "Double" Text line Printer(/Display) widht of chars |
string or string Text line Printer(/Display) style of chars | |
text required | string <= 100 characters 100 character description. |
[- {
- "alignment": "Left",
- "charStyle": "Bold",
- "text": "PayCard Mobile"
}, - {
- "alignment": "Left",
- "charStyle": "Bold",
- "text": "PAN 38785768*****7645963"
}, - {
- "alignment": "Left",
- "charStyle": "Bold",
- "text": "Auth # 675465"
}, - {
- "alignment": "Left",
- "charStyle": "Normal",
- "text": "EFT # 546783"
}, - {
- "alignment": "Left",
- "charStyle": "Normal",
- "text": "Payment Total 2.00"
}, - {
- "alignment": "Center",
- "charStyle": "Bold",
- "text": "Customer Copy"
}, - {
- "alignment": "Center",
- "charStyle": "Bold",
- "text": "Mobile verified"
}, - {
- "alignment": "Center",
- "charStyle": "Bold",
- "text": "Please Retain for your records"
}
]
{- "statusReturn": {
- "timestamp": "2009-11-20T17:30:50",
- "result": "success",
- "error": "ERRCD_OK",
- "message": "Operation completed successfully"
}, - "receipt": [
- {
- "alignment": "Center",
- "charStyle": "Bold",
- "text": "WELCOME"
}, - {
- "alignment": "Center",
- "charStyle": "Bold",
- "text": "2141 NONAME ST"
}, - {
- "alignment": "Center",
- "charStyle": "Bold",
- "text": "IFSF"
}, - {
- "alignment": "Center",
- "charStyle": "Bold",
- "text": "VAT No GB9294758678"
}, - {
- "alignment": "Left",
- "charStyle": "Bold",
- "text": "PayCard Mobile"
}, - {
- "alignment": "Left",
- "charStyle": "Bold",
- "text": "PAN 38785768*****7645963"
}, - {
- "alignment": "Left",
- "charStyle": "Bold",
- "text": "Auth # 675465"
}, - {
- "alignment": "Left",
- "charStyle": "Normal",
- "text": "EFT # 546783"
}, - {
- "text": "DATE 09/07/16 12:29"
}, - {
- "text": "FP# 01"
}, - {
- "text": "PRODUCT: PLUS"
}, - {
- "text": "GALLONS: 0.926"
}, - {
- "text": "PRICE/G: $ 2.159"
}, - {
- "text": "FUEL SALE $ 2.00"
}, - {
- "text": "THANK YOU"
}, - {
- "text": "HAVE A NICE DAY"
}
]
}
POST to send EFT receipt (optional)
UMTI required | string [ 1 .. 40 ] characters UMTI (Unique Message Transaction Identifier) |
openretailing-application-sender required | string <= 100 characters The controlling device identification |
transmissionDateTime required | string <date-time> [ 10 .. 30 ] characters transmission date / time |
alignment | string <= 10 characters Enum: "Left" "Right" "Center" "Justified" Text line Printer(/Display) alignment of text line |
height | string <= 6 characters Enum: "Single" "Double" "Half" Text line Printer(/Display) height of chars |
width | string <= 6 characters Enum: "Single" "Double" Text line Printer(/Display) widht of chars |
string or string Text line Printer(/Display) style of chars | |
text required | string <= 100 characters 100 character description. |
[- {
- "alignment": "Left",
- "charStyle": "Bold",
- "text": "PayCard Mobile"
}, - {
- "alignment": "Left",
- "charStyle": "Bold",
- "text": "PAN 38785768*****7645963"
}, - {
- "alignment": "Left",
- "charStyle": "Bold",
- "text": "Auth # 675465"
}, - {
- "alignment": "Left",
- "charStyle": "Normal",
- "text": "EFT # 546783"
}, - {
- "alignment": "Left",
- "charStyle": "Normal",
- "text": "Payment Total 2.00"
}, - {
- "alignment": "Center",
- "charStyle": "Bold",
- "text": "Customer Copy"
}, - {
- "alignment": "Center",
- "charStyle": "Bold",
- "text": "Mobile verified"
}, - {
- "alignment": "Center",
- "charStyle": "Bold",
- "text": "Please Retain for your records"
}
]
{- "timestamp": "2009-11-20T17:30:50",
- "result": "success",
- "error": "ERRCD_OK",
- "message": "Operation completed successfully"
}
POST to reconcile
Both Issuer and Merchant totals will include trx count and trx total, grouped by country, currency and issuer.
If for the same IssuerID, two Reconciliation requests are received with the same DateTime, the response will de "200, ERRCD_DONE, Duplicated Request. No new reconciliation totals will be calculated, and the same results should be returned as per the previous request.
openretailing-application-sender required | string <= 100 characters The controlling device identification |
transmissionDateTime required | string <date-time> [ 10 .. 30 ] characters transmission date / time |
issuerDateTime | string <date-time> [ 10 .. 30 ] characters |
Array of objects <= 1000 items This is the schema used to provide reconciliation totals from issuer and merchant |
{- "issuerDateTime": "2021-11-29T16:03:25.766Z",
- "issuerReconciliationTotals": [
- {
- "issuerID": "H2HIFSF",
- "country": "GB",
- "trxCount": 34,
- "trxTotals": {
- "value": "288.22",
- "currency": "GBP"
}
}, - {
- "issuerID": "H2HIFSF",
- "country": "CH",
- "trxCount": 24,
- "trxTotals": {
- "value": "67.22",
- "currency": "CHF"
}
}, - {
- "issuerID": "H2HIFSF",
- "country": "IT",
- "trxCount": 17,
- "trxTotals": {
- "value": "55.46",
- "currency": "EUR"
}
}
]
}
{- "statusReturn": {
- "timestamp": "2009-11-20T17:30:50",
- "result": "success",
- "error": "ERRCD_OK",
- "message": "Operation completed successfully"
}, - "merchantReconciliation": {
- "merchantFromDateTime": "2021-11-28T15:02:55.766Z",
- "merchantToDateTime": "2021-11-29T16:03:25.766Z",
- "merchantReconciliationTotals": [
- {
- "issuerID": "H2HIFSF",
- "country": "GB",
- "trxCount": 34,
- "trxTotals": {
- "value": "288.22",
- "currency": "GBP"
}
}, - {
- "issuerID": "H2HIFSF",
- "country": "CH",
- "trxCount": 24,
- "trxTotals": {
- "value": "67.22",
- "currency": "CHF"
}
}, - {
- "issuerID": "H2HIFSF",
- "country": "IT",
- "trxCount": 17,
- "trxTotals": {
- "value": "55.46",
- "currency": "EUR"
}
}
]
}
}
Returns a URL to receive an event stream to notify the selected events to the client. Event data field conforms to the schema described in ..\schemas\ MerchantEventObject where each type of event returned is described.
eType | Array of strings <= 20 items [ items <= 40 characters ] Items Enum: "trxStateChange" "masterChanges" List of the type of events to subscribe to. |
{- "statusReturn": {
- "timestamp": "2019-08-24T14:15:22Z",
- "result": "success",
- "error": "ERRCD_OK",
- "message": "string",
- "uuid": "string",
- "apiKey": "stringstringstringstringstringst"
}, - "endpointDesignator": {
- "errorCode": "ERRCD_OK",
- "endpointType": "SSE"
}
}