Create a payment for a customer or payment method. The payment method will be authorised and return a status of AUTHORISED
.
The payment will be captured immediately, and return a status of SUCCEEDED
.
If you have created a capture automation , then capture will only take place when your automation runs.
You should provide a payment method token here to reduce PCI requirement. You will be eligible for the simplest method of PCI validation: SAQ A.
Idempotency
The Create a Payment
API supports Idempotency.
orderId
String An optional order id you can use for tracking
flowId
String The flow to use for this payment.
You can get the flow id from developer settings in the web application
intentId
String If you are using Intent API, provide the id for an intent.
This allows you to available of additional data points while creating an automation
currencyCode
String ISO 4217 Code e.g. EUR
amount
Long Amount in minor units e.g. 5099 = 50.99
paymentMethod
PaymentMethodDtoInput paymentMethod.token
String The token for the payment method.
Only this field is needed to create a payment using a token.
All other card fields can be ignored
paymentMethod.type
String ﹡ e.g. CARD, APPLE_PAY, GOOGLE_PAY, PAYPAL, KLARNA
paymentMethod.walletToken
JSON The wallet token. When providing this, amount and currency are not needed.
paymentMethod.card
CardInputDto If you want to create a payment for a full card
paymentMethod.googlePay
GooglePayInput Google Pay specific data
customer
paymentMethodCustomerDtoInput Customer to associate with a payment
customer.id
String Customer id if you have previously created the customer
customer.email
String Customer email
customer.name
String Customer name
description
String A desc for the payment
metadata
JSON Use this to store custom data about this payment
perform3DSecure
Config3DSecure 3D Secure options
perform3DSecure.redirectUrl
String Redirect to the url indicated after customer finishes the 3D Secure authentication process
apmRedirectUrl
String When performing a payment for an APM, this is the URL that we will redirect back to.
fraud
Object Pass fraud data from your custom fraud service provider.
curl
-X POST
-H "Content-Type: application/json"
-H "Authorization: Bearer xxxxxxx"
-d '{
"query": "mutation authorizePayment($authorisePayment: AuthorisedPaymentInput!) {
authorizePayment(authorisePayment: $authorisePayment) {
id
status
}
}",
"variables": {
"authorisePayment": {
"orderId": "557512fb-e5f3-45ce-9e60-b9418b92153b",
"flowId": "2d0fc623-f1ca-4051-b60a-7366ca14783c",
"intentId": "9106d9e7-87ba-4b39-9e99-599559aede60",
"amount": 100,
"currencyCode": "ISO 4217",
"paymentMethod": {
"type": "CARD",
"token": "213dfsfd"
},
"customer": {
"id": "1ba5d56b-f6d6-4170-b246-ca886d1e111f"
},
"description": ""
}
}
}'
https://api.whenthen.com/api/graphql
id
ID ﹡ sourceId
String orderId
String connectionId
String date
DateTime ﹡ status
PaymentStatus amount
Amount refundedAmount
Long currency
String ISO 4217 Code e.g. EUR
country
String eci
String Electronic Commerce Indicator (ECI) is a value returned by Directory Servers (namely Visa, MasterCard, JCB, and American Express) indicating the outcome of authentication attempted on transactions enforced by 3DS
paymentProcessingOrigin
Enum AUTOMATION
HEADLESS
IMPORT
threeDSecureVersion
String Version of 3DSecure being used for authentication
threeDSecureAuthenticationResult
String Whether the authentication check was successful or not
paymentGateway
PaymentGateway paymentGateway.name
String paymentGateway.logo
String paymentCore
PaymentCore paymentCore.processorStatus
String paymentCore.paymentMethod
PaymentMethod paymentCore.outcome
PaymentOutcome paymentDetails
PaymentDetails paymentDetails.statementDescriptor
String paymentDetails.localCurrency
String ISO 4217 Code e.g. EUR
paymentDetails.localAmount
Amount paymentDetails.exchangeRate
String paymentDetails.fee
Amount paymentDetails.tax
Amount paymentDetails.processingFee
Amount paymentDetails.net
Amount paymentDetails.description
String paymentTimeline
PaymentTimeline paymentTimeline.overview
[PaymentTimelineEvent] paymentTimeline.flows
[FlowSummary] paymentCustomer
PaymentCustomer paymentCustomer.id
String paymentCustomer.email
String paymentCustomer.name
String paymentMethodDetails
PaymentMethodDetails paymentMethodDetails.id
String paymentMethodDetails.number
String paymentMethodDetails.expires
String paymentMethodDetails.fingerprint
String paymentMethodDetails.paymentMethod
PaymentMethod paymentMethodDetails.type
PaymentMethodCardtype paymentMethodDetails.product
String paymentMethodDetails.issuingBank
String paymentMethodDetails.category
String paymentMethodDetails.country
String paymentMethodDetails.brand
String paymentMethodDetails.name
String attachments
[Attachment] attachments.id
String attachments.fileName
String attachments.objectKey
String attachments.contenttype
String attachments.accessUrl
String {
"id":"4a027d61-e645-478b-b7aa-91bf0cdd0d71",
"date":"2022-09-14T20:58:05.387297Z",
"country":"USA",
"amount":{
"formattedAmount":"€90.02"
},
"refundedAmount": null,
"status":"SUCCEEDED",
"paymentGateway":{
"id":"0268a1f6-c203-4697-bf6f-a90e261f0222",
"name":"Braintree",
"logo":"https://media.graphcms.com/output=format:jpg/resize=,width:59,height:59,fit:crop/4N2n4aZ7SX6GIbaCS728"
},
"paymentCore":{
"paymentMethod":"AMEX",
"outcome":{
"networkStatus":null,
"reason":null,
"riskLevel":null,
"riskScore":null,
"type":"PAYMENT"
}
},
"paymentDetails":{
"statementDescriptor":null,
"localCurrency":"EUR",
"localAmount":{
"formattedAmount":"€90.02"
},
"exchangeRate":"null",
"fee":null,
"tax":null,
"processingFee":null,
"net":null,
"description":null
},
"paymentTimeline":{
"overview":null,
"flows":null
},
"paymentConnections":{
"latestCharge":"2022-02-28T10:36:51Z",
"invoice":null,
"payout":null
},
"paymentCustomer":{
"id":"179644955",
"email":"sduly1f@multiply.com"
},
"paymentMethodDetails":{
"id":"dg4kg9g",
"number":"0004",
"expires":"06/2024",
"fingerprint":null,
"paymentMethod":"AMEX"
},
"paymentReceipt":null,
"attachments":[
]
}
Capture the funds of an existing Payment when its status is AUTHORISED
,
You can capture a payment for the original amount, or you can provide an amount less than the original amount.
Amounts should be sent in minor units.
The currency from the original payment will be used.
If no amount is sent the the original payment amount is captured. If you provide an amount then this value will be captured.
Uncaptured Payments will be cancelled after approximately seven days. This can different per PSP. You should check the rules with your given PSP.
You only need to use this API if you have created a delayed capture automation, and have selected API as the mehod.
id
ID ﹡ The id to cancel
amount
Long If amount is not provided then the original amount of the payment authorisation will be used.
You can capture for an amount less than the original payment amount.
Amounts should be sent in minor units
curl
-X POST
-H "Content-Type: application/json"
-H "Authorization: Bearer xxxxxxx"
-d '{
"query": "mutation capturePayment($id: ID!, $amount: Long) {
capturePayment(id: $id, amount: $amount) {
id
status
}
}",
"variables":{
"id": "cc9d00ac-1c85-400f-8ad1-958100ca0e06",
"amount": 10000
}
}'
https://api.whenthen.com/api/graphql
A Payment can be refunded when it has a status of SUCCEEDED
,
A Payment with a status of AUTHORISED
should be cancelled
Funds will be refunded to the customer's payment method.
id
ID ﹡ amount
Long If amount is not provided then the original amount of the payment authorisation will be used.
You can capture for an amount less than the original payment amount.
Amounts should be sent in minor units
reason
String curl
-X POST
-H "Content-Type: application/json"
-H "Authorization: Bearer xxxxxxx"
-d '{
"query": "mutation refundPayment($id: ID!, $amount: Long, $reason: String) {
refundPayment(id: $id, amount: $amount, reason: $reason) {
id
status
}
}",
"variables":{
"id": "cc9d00ac-1c85-400f-8ad1-958100ca0e06",
"amount": 10000,
"reason":"some reason"
}
}'
https://api.whenthen.com/api/graphql
A Payment can be cancelled when it has a status of AUTHORISED
,
When a payment is cancelled, your PSP will not charge you any fees for the payment and payment will be refunded to the customer.
id
ID ﹡ The id to cancel
reason
String Reason the payment was cancelled
curl
-X POST
-H "Content-Type: application/json"
-H "Authorization: Bearer xxxxxxx"
-d '{
"query": "mutation cancelPayment($id: ID!, $reason: String) {
cancelPayment(id: $id, reason: $reason) {
id
status
}
}",
"variables":{
"id":"cc9d00ac-1c85-400f-8ad1-958100ca0e06",
"reason":"some reason"
}
}'
https://api.whenthen.com/api/graphql
id
ID ﹡ The id of the payment
curl
-X POST
-H "Content-Type: application/json"
-H "Authorization: Bearer xxxxxxx"
-d '{
"query": "query getPayment($id: ID!) {
getPayment(id: $id) {
id
status
}
}",
"variables":{
"id":"cc9d00ac-1c85-400f-8ad1-958100ca0e06"
}
}'
https://api.whenthen.com/api/graphql
walletType
String ﹡ payload
JSON ﹡ curl
-X POST
-H "Content-Type: application/json"
-H "Accept: */*"
-H "Authorization: Bearer xxxxxxx"
-d '{
"query":"mutation setupWallet($walletType: String!, $payload: JSON!) {
setupWallet(walletType: $walletType, payload: $payload)
}",
"variables":{
"walletType": "APPLE_PAY",
"payload": {
"merchantIdentifier": "merchant.com.whenthen",
"displayName": "TestStore",
"validationUrl": "apple-pay-gateway-cert.apple.com",
"initiativeContext": "whenthen-checkout-sdk-ui-applepay-sandbox-app-test"
}
}
}'
https://api.whenthen.com/api/graphql
epochTimestamp
Long expiresAt
Long merchantSessionIdentifier
String nonce
String merchantIdentifier
String domainName
String displayName
String signature
String operationalAnalyticsIdentifier
String Combination of the displayName
and merchantIdentifier
(displayName :merchantIdentifier
)
retries
Integer {
"data": {
"setupWallet": {
"epochTimestamp": 1648025487112,
"expiresAt": 1648029087112,
"merchantSessionIdentifier": "SSH45A996427C384416BFC1A40E588782A3_345435345354435342342324223",
"nonce": "111111111",
"merchantIdentifier": "2EAA91E49EB1BE8D8ED23A6F6F1940419F33B288F75790615CFF409760095799",
"domainName": "whenthen-checkout-sdk-ui-applepay-sandbox-app-test",
"displayName": "TestStore",
"signature": "308006032323232d010702a0803080020101310f300d06096086480165030402010500308006092a864886f70d0107010000a080308203e43082038ba003020102020859d8a1bcaaf4e3cd300a06082a8648ce3d040302307a312e302c06035504030c254170706c65204170706c69636174696f6e20496e746567726174696f6e204341202d20473331263024060355040b0c1d4170706c652043657274696669636174696f6e20417574686f7269747931133011060355040a0c0a4170706c6520496e632e310b3009060355040613025553301e170d3231303432303139333730305a170d3236303431393139333635395a30623128302606035504030c1f6563632d736d702d62726f6b65722d7369676e5f5543342d53414e44424f5831143012060355040b0c0b694f532053797374656d7331133011060355040a0c0a4170706c6520496e632e310b30090603550406130255533059301306072a8648ce3d020106082a8648ce3d030107034200048230fdabc39cf75e202c50d99b4512e637e2a901dd6cb3e0b1cd4b526798f8cf4ebde81a25a8c21e4c33ddce8e2a96c2f6afa1930345c4e87a4426ce951b1295a38202113082020d300c0603551d130101ff04023000301f0603551d2304183016801423f249c44f93e4ef27e6c4f6286c3fa2bbfd2e4b304506082b0601050507010104393037303506082b060105050730018629687474703a2f2f6f6373702e6170706c652e636f6d2f6f63737030342d6170706c65616963613330323082011d0603551d2004820114308201103082010c06092a864886f7636405013081fe3081c306082b060105050702023081b60c81b352656c69616e6365206f6e207468697320636572746966696361746520627920616e7920706172747920617373756d657320616363657074616e6365206f6620746865207468656e206170706c696361626c65207374616e64617264207465726d7320616e6420636f6e646974696f6e73206f66207573652c20636572746966696361746520706f6c69637920616e642063657274696669636174696f6e2070726163746963652073746174656d656e74732e303606082b06010505070201162a687474703a2f2f7777772e6170706c652e636f6d2f6365727469666963617465617574686f726974792f30340603551d1f042d302b3029a027a0258623687474703a2f2f63726c2e6170706c652e636f6d2f6170706c6561696361332e63726c301d0603551d0e041604140224300b9aeeed463197a4a65a299e4271821c45300e0603551d0f0101ff040403020780300f06092a864886f76364061d04020500300a06082a8648ce3d0403020347003044022074a1b324db4249430dd3274c5074c4808d9a1f480e3a85c5c1362566325fbca3022069369053abf50b5a52f9f6004dc58aad6c50a7d608683790e0a73ad01e4ad981308202ee30820275a0030201020208496d2fbf3a98da97300a06082a8648ce3d0403023067311b301906035504030c124170706c6520526f6f74204341202d20473331263024060355040b0c1d4170706c652043657274696669636174696f6e20417574686f7269747931133011060355040a0c0a4170706c6520496e632e310b3009060355040613025553301e170d3134303530363233343633305a170d3239303530363233343633305a307a312e302c06035504030c254170706c65204170706c69636174696f6e20496e746567726174696f6e204341202d20473331263024060355040b0c1d4170706c652043657274696669636174696f6e20417574686f7269747931133011060355040a0c0a4170706c6520496e632e310b30090603550406130255533059301306072a8648ce3d020106082a8648ce3d03010703420004f017118419d76485d51a5e25810776e880a2efde7bae4de08dfc4b93e13356d5665b35ae22d097760d224e7bba08fd7617ce88cb76bb6670bec8e82984ff5445a381f73081f4304606082b06010505070101043a3038303606082b06010505073001862a687474703a2f2f6f6373702e6170706c652e636f6d2f6f63737030342d6170706c65726f6f7463616733301d0603551d0e0416041423f249c44f93e4ef27e6c4f6286c3fa2bbfd2e4b300f0603551d130101ff040530030101ff301f0603551d23041830168014bbb0dea15833889aa48a99debebdebafdacb24ab30370603551d1f0430302e302ca02aa0288626687474703a2f2f63726c2e6170706c652e636f6d2f6170706c65726f6f74636167332e63726c300e0603551d0f0101ff0404030201063010060a2a864886f7636406020e04020500300a06082a8648ce3d040302036700306402303acf7283511699b186fb35c356ca62bff417edd90f754da28ebef19c815e42b789f898f79b599f98d5410d8f9de9c2fe0230322dd54421b0a305776c5df3383b9067fd177c2c216d964fc6726982126f54f87a7d1b99cb9b0989216106990f09921d00003182018c30820188020101308186307a312e302c06035504030c254170706c65204170706c69636174696f6e20496e746567726174696f6e204341202d20473331263024060355040b0c1d4170706c652043657274696669636174696f6e20417574686f7269747931133011060355040a0c0a4170706c6520496e632e310b3009060355040613025553020859d8a1bcaaf4e3cd300d06096086480165030402010500a08195301806092a864886f70d010903310b06092a864886f70d010701301c06092a864886f70d010905310f170d3232303332333038353132375a302a06092a864886f70d010934311d301b300d06096086480165030402010500a10a06082a8648ce3d040302302f06092a864886f70d010904312204205dc6d4907fc9064370e9ad6cb9045af64ef2ea0af3b43ad04485fb89ac52ba12300a06082a8648ce3d0403020447304502201e2c7599602c4bf266fe27c655ac3666c345829c4fbe994897f3767186309ff902210083826fad63e64fec946ab282dfdf9a6d18631b1372f74decd8a75751ea130f6a000000000000",
"operationalAnalyticsIdentifier": "TestStore:2EAA91ER434343940419F33B2343243243290615CFF409760095799",
"retries": 0
}
}
}
Used to retrieve a list of payments. List could be paginated and several filters applied to drill down to required payment data set.
first
Init ﹡ last
Init ﹡ after
String before
String data
PaymentFilterInput data.sort
[PaymentSortDataInput] data.filter
PaymentFilterDataInput curl
-X POST
-H "Content-Type: application/json"
-H "Authorization: Bearer xxxxxxx"
-d '{
"query":"query listPayments($first: Int, $after: String, $last: Int, $before: String, $data: PaymentFilterInput){
listPayments(first: $first, after: $after, last: $last, before: $before, data: $data) {
data {
id
teamId
customerId
userId
name
filter {
date {
verbs
selectedVerb
}
amount {
verbs
selectedVerb
}
status {
verbs
selectedVerb
}
dateRange {
verbs
selectedVerb
}
}
}
pageInfo {
hasNextPage
hasPreviousPage
startCursor
endCursor
totalSize
}
edges {
cursor
node {
id
date
country
amount {
formattedAmount
}
status
paymentGateway {
id
name
}
paymentCore {
paymentMethod
outcome {
networkStatus
reason
riskLevel
riskScore
type
}
}
paymentDetails {
statementDescriptor
localCurrency
localAmount {
formattedAmount
}
exchangeRate
fee {
formattedAmount
}
tax {
formattedAmount
}
processingFee {
formattedAmount
}
net {
formattedAmount
}
description
}
paymentConnections {
latestCharge
invoice
payout
}
paymentCustomer {
id
email
}
paymentMethodDetails {
id
number
expires
fingerprint
paymentMethod
type
}
paymentReceipt {
type
message
date
receiptUrl
}
attachments {
fileName
}
}
}
}
}",
"variables":{
"first":10,
"after":0
}
}'
https://api.whenthen.com/api/graphql
ListPayments
ListPayments ListPayments.data
JSON ListPayments.pageInfo
PageInfo ListPayments.edges
[Array] PaymentFilter
PageInfo.hasNextPage
Boolean PageInfo.hasPreviousPage
Boolean PageInfo.startCursor
String PageInfo.endCursor
String PageInfo.totalSize
Init {
"data": {
"listPayments": {
"data": {
"id": null,
"teamId": "58cb5b5e-9223-45a2-b4d0-8d4914d17283",
"customerId": null,
"userId": "cd4c18c1-95b8-414b-9f64-e5ac86ba65b4",
"name": "Default"
},
"pageInfo": {
"hasNextPage": false,
"hasPreviousPage": false,
"startCursor": "1",
"endCursor": "1",
"totalSize": 1
},
"edges": [
{
"cursor": "1",
"node": {
"id": "payments:f415645d-eda9-4f26-959d-7ea5c67d6896",
"date": "2022-06-29T09:14:10Z",
"country": "USA",
"amount": {
"formattedAmount": "€19.81"
},
"status": "SUCCEEDED",
"paymentGateway": {
"id": "0268a1f6-c203-4697-bf6f-a90e261f0111",
"name": "Stripe",
"logo": "https://media.graphcms.com/output=format:jpg/resize=,width:59,height:59,fit:crop/9PSnk32nSg6ovnOkRgdr"
},
"paymentCore": {
"paymentMethod": "VISA",
"outcome": {
"networkStatus": "approved_by_network",
"reason": null,
"riskLevel": "NORMAL",
"riskScore": 39,
"type": "PAYMENT"
}
},
"paymentDetails": {
"statementDescriptor": "WHENTHEN",
"localCurrency": "USD",
"localAmount": {
"formattedAmount": "$20.64"
},
"exchangeRate": "1.04169",
"fee": {
"formattedAmount": "$0.90"
},
"tax": {
"formattedAmount": "$0.00"
},
"processingFee": {
"formattedAmount": "$0.90"
},
"net": {
"formattedAmount": "$19.74"
},
"description": null
},
"paymentTimeline": {
"overview": null,
"flows": null
},
"paymentConnections": {
"latestCharge": "2022-06-29T09:14:10Z",
"invoice": null,
"payout": null
},
"paymentCustomer": {
"id": null,
"email": null
},
"paymentMethodDetails": {
"id": "4d39b168-4e77-4e4b-9770-9090f248ab68",
"number": "**** **** **** 4242",
"expires": "06/2024",
"fingerprint": "OCv7RJjDQJE3VNvI",
"paymentMethod": "VISA",
"type": "CREDIT",
"product": "Visa Classic",
"issuingBank": null,
"category": null
},
"paymentReceipt": {
"type": "payment",
"message": null,
"date": "2022-06-29T09:14:10Z",
"receiptUrl": "https://pay.stripe.com/receipts/acct_1KTSlBHhXo8OToPM/ch_3LFwyMHhXo8OToPM1Yqb6EDa/rcpt_LxsjGlrTMs21RHGwtGpYl7loovJWcsz"
},
"attachments": []
}
},
{
"cursor": "1",
"node": {
"id": "payments:82b178f3-cc68-43b7-90c4-f4459a281170",
"date": "2022-06-29T09:06:28.939515Z",
"country": null,
"amount": {
"formattedAmount": "€19.81"
},
"status": "DECLINED",
"paymentGateway": {
"id": "0268a1f6-c203-4697-bf6f-a90e261f0111",
"name": "Stripe",
"logo": "https://media.graphcms.com/output=format:jpg/resize=,width:59,height:59,fit:crop/9PSnk32nSg6ovnOkRgdr"
},
"paymentCore": {
"paymentMethod": null,
"outcome": {
"networkStatus": null,
"reason": "A PaymentIntent using type 'card' must be confirmed with either 'return_url' set to the desired URL or 'use_stripe_sdk' set to true (if using Stripe.js or the mobile SDKs). Please try confirming again in one of these two ways.",
"riskLevel": null,
"riskScore": null,
"type": "PAYMENT"
}
},
"paymentDetails": null,
"paymentTimeline": {
"overview": null,
"flows": null
},
"paymentConnections": null,
"paymentCustomer": null,
"paymentMethodDetails": {
"id": null,
"number": "**** **** **** 4242",
"expires": "06/2024",
"fingerprint": null,
"paymentMethod": "VISA",
"type": "CREDIT",
"product": "Visa Classic",
"issuingBank": null,
"category": null
},
"paymentReceipt": null,
"attachments": []
}
},
{
"cursor": "1",
"node": {
"id": "payments:af649684-d2a1-4e37-af42-e5b4e791caed",
"date": "2022-06-13T16:52:33Z",
"country": "USA",
"amount": {
"formattedAmount": "€18.24"
},
"status": "SUCCEEDED",
"paymentGateway": {
"id": "0268a1f6-c203-4697-bf6f-a90e261f0111",
"name": "Stripe",
"logo": "https://media.graphcms.com/output=format:jpg/resize=,width:59,height:59,fit:crop/9PSnk32nSg6ovnOkRgdr"
},
"paymentCore": {
"paymentMethod": "VISA",
"outcome": {
"networkStatus": "approved_by_network",
"reason": null,
"riskLevel": "NORMAL",
"riskScore": 37,
"type": "PAYMENT"
}
},
"paymentDetails": {
"statementDescriptor": "WHENTHEN",
"localCurrency": "USD",
"localAmount": {
"formattedAmount": "$18.87"
},
"exchangeRate": "1.03478",
"fee": {
"formattedAmount": "$0.85"
},
"tax": {
"formattedAmount": "$0.00"
},
"processingFee": {
"formattedAmount": "$0.85"
},
"net": {
"formattedAmount": "$18.02"
},
"description": null
},
"paymentTimeline": {
"overview": null,
"flows": null
},
"paymentConnections": {
"latestCharge": "2022-06-13T16:52:33Z",
"invoice": null,
"payout": null
},
"paymentCustomer": {
"id": "cus_LryrvZp8JdYjCY",
"email": null
},
"paymentMethodDetails": {
"id": "224c57fc-da40-4442-b062-7b4c9962d635",
"number": "**** **** **** 4242",
"expires": "06/2024",
"fingerprint": "OCv7RJjDQJE3VNvI",
"paymentMethod": "VISA",
"type": "CREDIT",
"product": "Visa Classic",
"issuingBank": null,
"category": null
},
"paymentReceipt": {
"type": "payment",
"message": null,
"date": "2022-06-13T16:52:33Z",
"receiptUrl": "https://pay.stripe.com/receipts/acct_1KTSlBHhXo8OToPM/ch_3LAGVBHhXo8OToPM0aEOpJB9/rcpt_Ls0WsEoJLjCUmakXamx5dYJoZ50KowS"
},
"attachments": []
}
},
{
"cursor": "1",
"node": {
"id": "payments:c1c151b9-00dd-4918-8937-4a47e9c94a4a",
"date": "2022-06-13T16:51:36Z",
"country": "USA",
"amount": {
"formattedAmount": "€15.82"
},
"status": "CANCELLED",
"paymentGateway": {
"id": "0268a1f6-c203-4697-bf6f-a90e261f0111",
"name": "Stripe",
"logo": "https://media.graphcms.com/output=format:jpg/resize=,width:59,height:59,fit:crop/9PSnk32nSg6ovnOkRgdr"
},
"paymentCore": {
"paymentMethod": "VISA",
"outcome": {
"networkStatus": "approved_by_network",
"reason": null,
"riskLevel": "NORMAL",
"riskScore": 45,
"type": "PAYMENT"
}
},
"paymentDetails": {
"statementDescriptor": "WHENTHEN",
"localCurrency": null,
"localAmount": null,
"exchangeRate": null,
"fee": {
"formattedAmount": "€0.00"
},
"tax": {
"formattedAmount": "€0.00"
},
"processingFee": {
"formattedAmount": "€0.00"
},
"net": {
"formattedAmount": "€0.00"
},
"description": null
},
"paymentTimeline": {
"overview": null,
"flows": null
},
"paymentConnections": {
"latestCharge": "2022-06-13T16:51:36Z",
"invoice": null,
"payout": null
},
"paymentCustomer": {
"id": "cus_LryrvZp8JdYjCY",
"email": null
},
"paymentMethodDetails": {
"id": "224c57fc-da40-4442-b062-7b4c9962d635",
"number": "**** **** **** 4242",
"expires": "06/2024",
"fingerprint": "OCv7RJjDQJE3VNvI",
"paymentMethod": "VISA",
"type": "CREDIT",
"product": "Visa Classic",
"issuingBank": null,
"category": null
},
"paymentReceipt": {
"type": "payment",
"message": null,
"date": "2022-06-13T16:51:36Z",
"receiptUrl": "https://pay.stripe.com/receipts/acct_1KTSlBHhXo8OToPM/ch_3LAGUFHhXo8OToPM0tyxa0Xp/rcpt_Ls0VXMssF7cGLsk9A8EQZqGmTHXCv9X"
},
"attachments": []
}
},
{
"cursor": "1",
"node": {
"id": "payments:8a44a9de-de79-484e-98c2-f50e2670fc24",
"date": "2022-06-13T16:41:41Z",
"country": "USA",
"amount": {
"formattedAmount": "€19.29"
},
"status": "SUCCEEDED",
"paymentGateway": {
"id": "0268a1f6-c203-4697-bf6f-a90e261f0111",
"name": "Stripe",
"logo": "https://media.graphcms.com/output=format:jpg/resize=,width:59,height:59,fit:crop/9PSnk32nSg6ovnOkRgdr"
},
"paymentCore": {
"paymentMethod": "VISA",
"outcome": {
"networkStatus": "approved_by_network",
"reason": null,
"riskLevel": "NORMAL",
"riskScore": 30,
"type": "PAYMENT"
}
},
"paymentDetails": {
"statementDescriptor": "WHENTHEN",
"localCurrency": "USD",
"localAmount": {
"formattedAmount": "$19.96"
},
"exchangeRate": "1.03478",
"fee": {
"formattedAmount": "$0.88"
},
"tax": {
"formattedAmount": "$0.00"
},
"processingFee": {
"formattedAmount": "$0.88"
},
"net": {
"formattedAmount": "$19.08"
},
"description": null
},
"paymentTimeline": {
"overview": null,
"flows": null
},
"paymentConnections": {
"latestCharge": "2022-06-13T16:41:41Z",
"invoice": null,
"payout": null
},
"paymentCustomer": {
"id": "cus_LryrvZp8JdYjCY",
"email": null
},
"paymentMethodDetails": {
"id": "224c57fc-da40-4442-b062-7b4c9962d635",
"number": "**** **** **** 4242",
"expires": "06/2024",
"fingerprint": "OCv7RJjDQJE3VNvI",
"paymentMethod": "VISA",
"type": "CREDIT",
"product": "Visa Classic",
"issuingBank": null,
"category": null
},
"paymentReceipt": {
"type": "payment",
"message": null,
"date": "2022-06-13T16:41:41Z",
"receiptUrl": "https://pay.stripe.com/receipts/acct_1KTSlBHhXo8OToPM/ch_3LAGKeHhXo8OToPM0LQiFGVo/rcpt_Ls0Lfxf5sh4EbEfy3eLm1yOC4waLUAc"
},
"attachments": []
}
},
{
"cursor": "1",
"node": {
"id": "payments:c01fbb84-2c41-4cdc-bd8d-37f6ed7771ae",
"date": "2022-06-13T15:25:40Z",
"country": "USA",
"amount": {
"formattedAmount": "€15.16"
},
"status": "CANCELLED",
"paymentGateway": {
"id": "0268a1f6-c203-4697-bf6f-a90e261f0111",
"name": "Stripe",
"logo": "https://media.graphcms.com/output=format:jpg/resize=,width:59,height:59,fit:crop/9PSnk32nSg6ovnOkRgdr"
},
"paymentCore": {
"paymentMethod": "VISA",
"outcome": {
"networkStatus": "approved_by_network",
"reason": null,
"riskLevel": "NORMAL",
"riskScore": 41,
"type": "PAYMENT"
}
},
"paymentDetails": {
"statementDescriptor": "WHENTHEN",
"localCurrency": null,
"localAmount": null,
"exchangeRate": null,
"fee": {
"formattedAmount": "€0.00"
},
"tax": {
"formattedAmount": "€0.00"
},
"processingFee": {
"formattedAmount": "€0.00"
},
"net": {
"formattedAmount": "€0.00"
},
"description": null
},
"paymentTimeline": {
"overview": null,
"flows": null
},
"paymentConnections": {
"latestCharge": "2022-06-13T15:25:40Z",
"invoice": null,
"payout": null
},
"paymentCustomer": {
"id": "cus_LryrvZp8JdYjCY",
"email": null
},
"paymentMethodDetails": {
"id": "224c57fc-da40-4442-b062-7b4c9962d635",
"number": "**** **** **** 4242",
"expires": "06/2024",
"fingerprint": "OCv7RJjDQJE3VNvI",
"paymentMethod": "VISA",
"type": "CREDIT",
"product": "Visa Classic",
"issuingBank": null,
"category": null
},
"paymentReceipt": {
"type": "payment",
"message": null,
"date": "2022-06-13T15:25:40Z",
"receiptUrl": "https://pay.stripe.com/receipts/acct_1KTSlBHhXo8OToPM/ch_3LAF95HhXo8OToPM16BEGfTb/rcpt_Lrz77V6gOREMxxPrDhEsI2aLK8ZvvR4"
},
"attachments": []
}
},
{
"cursor": "1",
"node": {
"id": "payments:d2773177-ad5c-4290-9ba4-53cd1b72354e",
"date": "2022-06-13T15:09:37Z",
"country": "USA",
"amount": {
"formattedAmount": "€12.97"
},
"status": "AUTHORISED",
"paymentGateway": {
"id": "0268a1f6-c203-4697-bf6f-a90e261f0111",
"name": "Stripe",
"logo": "https://media.graphcms.com/output=format:jpg/resize=,width:59,height:59,fit:crop/9PSnk32nSg6ovnOkRgdr"
},
"paymentCore": {
"paymentMethod": "VISA",
"outcome": {
"networkStatus": "approved_by_network",
"reason": null,
"riskLevel": "NORMAL",
"riskScore": 38,
"type": "PAYMENT"
}
},
"paymentDetails": {
"statementDescriptor": "WHENTHEN",
"localCurrency": null,
"localAmount": null,
"exchangeRate": null,
"fee": {
"formattedAmount": "€0.00"
},
"tax": {
"formattedAmount": "€0.00"
},
"processingFee": {
"formattedAmount": "€0.00"
},
"net": {
"formattedAmount": "€0.00"
},
"description": null
},
"paymentTimeline": null,
"paymentConnections": {
"latestCharge": "2022-06-13T15:09:37Z",
"invoice": null,
"payout": null
},
"paymentCustomer": {
"id": "cus_LryrvZp8JdYjCY",
"email": null
},
"paymentMethodDetails": {
"id": "pm_1LAEtXHhXo8OToPMOEghLAcL",
"number": "4242",
"expires": "06/2024",
"fingerprint": "OCv7RJjDQJE3VNvI",
"paymentMethod": "VISA",
"type": "CREDIT",
"product": null,
"issuingBank": null,
"category": null
},
"paymentReceipt": {
"type": "payment",
"message": null,
"date": "2022-06-13T15:09:37Z",
"receiptUrl": "https://pay.stripe.com/receipts/acct_1KTSlBHhXo8OToPM/ch_3LAEtYHhXo8OToPM1FR3MTrd/rcpt_LryrSnyW17SZIi3xy8Ahd8KFdASSbMh"
},
"attachments": []
}
}
]
}
}
}
Create a payment for a customer or payment method. The payment method will be authorised and return a status of AUTHORISED
.
Use the capture API to capture the payment and return a status of SUCCEEDED
.
You should provide a payment method token here to reduce PCI requirement. You will be eligible for the simplest method of PCI validation: SAQ A.
Idempotency
The Create a Headless Payment
API supports Idempotency.
orderId
String An optional order id you can use for tracking
intentId
String If you are using Intent API, provide the id for an intent.
This allows you to available of additional data points while creating an automation
currencyCode
String ISO 4217 Code e.g. EUR
amount
Long Amount in minor units e.g. 5099 = 50.99
paymentMethod
PaymentMethodDtoInput paymentMethod.token
String The token for the payment method.
Only this field is needed to create a payment using a token.
All other card fields can be ignored
paymentMethod.type
String ﹡ e.g. CARD, APPLE_PAY, GOOGLE_PAY, PAYPAL, KLARNA
paymentMethod.walletToken
JSON The wallet token. When providing this, amount and currency are not needed.
paymentMethod.card
CardInputDto If you want to create a payment for a full card
paymentMethod.googlePay
GooglePayInput Google Pay specific data
customer
paymentMethodCustomerDtoInput Customer to associate with a payment
customer.id
String Customer id if you have previously created the customer
customer.email
String Customer email
customer.name
String Customer name
description
String A desc for the payment
metadata
JSON Use this to store custom data about this payment
performHeadless3DSecure
HeadlessThreeDSecureDtoInput 3D Secure options
performHeadless3DSecure.redirectUrl
String ﹡ Redirect to the url indicated after customer finishes the 3D Secure authentication process
performHeadless3DSecure.perform3DSecure
Boolean ﹡ Explicitly request 3D Secure to take place for this payment
apmRedirectUrl
String When performing a payment for an APM, this is the URL that we will redirect back to.
paymentProcessorConnectionId
String ﹡ This is the ID in WhenThen of the payment processor you want to process the payment through.
fraud
Object Pass fraud data from your custom fraud service provider.
curl
-X POST
-H "Content-Type: application/json"
-H "Authorization: Bearer xxxxxxx"
-d '{
"query": "mutation authorizePayment($authorisePayment: AuthorisedPaymentInput!) {
authorizePayment(authorisePayment: $authorisePayment) {
id
status
}
}",
"variables": {
"authorisePayment": {
"orderId": "557512fb-e5f3-45ce-9e60-b9418b92153b",
"flowId": "2d0fc623-f1ca-4051-b60a-7366ca14783c",
"intentId": "9106d9e7-87ba-4b39-9e99-599559aede60",
"amount": 100,
"currencyCode": "ISO 4217",
"paymentMethod": {
"type": "CARD",
"token": "213dfsfd"
},
"customer": {
"id": "1ba5d56b-f6d6-4170-b246-ca886d1e111f"
},
"description": ""
}
}
}'
https://api.whenthen.com/api/graphql
id
ID ﹡ sourceId
String orderId
String connectionId
String date
DateTime ﹡ status
PaymentStatus amount
Amount refundedAmount
Long currency
String ISO 4217 Code e.g. EUR
country
String eci
String Electronic Commerce Indicator (ECI) is a value returned by Directory Servers (namely Visa, MasterCard, JCB, and American Express) indicating the outcome of authentication attempted on transactions enforced by 3DS
paymentProcessingOrigin
Enum AUTOMATION
HEADLESS
IMPORT
threeDSecureVersion
String Version of 3DSecure being used for authentication
threeDSecureAuthenticationResult
String Whether the authentication check was successful or not
paymentGateway
PaymentGateway paymentGateway.name
String paymentGateway.logo
String paymentCore
PaymentCore paymentCore.processorStatus
String paymentCore.paymentMethod
PaymentMethod paymentCore.outcome
PaymentOutcome paymentDetails
PaymentDetails paymentDetails.statementDescriptor
String paymentDetails.localCurrency
String ISO 4217 Code e.g. EUR
paymentDetails.localAmount
Amount paymentDetails.exchangeRate
String paymentDetails.fee
Amount paymentDetails.tax
Amount paymentDetails.processingFee
Amount paymentDetails.net
Amount paymentDetails.description
String paymentTimeline
PaymentTimeline paymentTimeline.overview
[PaymentTimelineEvent] paymentTimeline.flows
[FlowSummary] paymentCustomer
PaymentCustomer paymentCustomer.id
String paymentCustomer.email
String paymentCustomer.name
String paymentMethodDetails
PaymentMethodDetails paymentMethodDetails.id
String paymentMethodDetails.number
String paymentMethodDetails.expires
String paymentMethodDetails.fingerprint
String paymentMethodDetails.paymentMethod
PaymentMethod paymentMethodDetails.type
PaymentMethodCardtype paymentMethodDetails.product
String paymentMethodDetails.issuingBank
String paymentMethodDetails.category
String paymentMethodDetails.country
String paymentMethodDetails.brand
String paymentMethodDetails.name
String attachments
[Attachment] attachments.id
String attachments.fileName
String attachments.objectKey
String attachments.contenttype
String attachments.accessUrl
String {
"id":"4a027d61-e645-478b-b7aa-91bf0cdd0d71",
"date":"2022-09-14T20:58:05.387297Z",
"country":"USA",
"amount":{
"formattedAmount":"€90.02"
},
"refundedAmount": null,
"status":"SUCCEEDED",
"paymentGateway":{
"id":"0268a1f6-c203-4697-bf6f-a90e261f0222",
"name":"Braintree",
"logo":"https://media.graphcms.com/output=format:jpg/resize=,width:59,height:59,fit:crop/4N2n4aZ7SX6GIbaCS728"
},
"paymentCore":{
"paymentMethod":"AMEX",
"outcome":{
"networkStatus":null,
"reason":null,
"riskLevel":null,
"riskScore":null,
"type":"PAYMENT"
}
},
"paymentDetails":{
"statementDescriptor":null,
"localCurrency":"EUR",
"localAmount":{
"formattedAmount":"€90.02"
},
"exchangeRate":"null",
"fee":null,
"tax":null,
"processingFee":null,
"net":null,
"description":null
},
"paymentTimeline":{
"overview":null,
"flows":null
},
"paymentConnections":{
"latestCharge":"2022-02-28T10:36:51Z",
"invoice":null,
"payout":null
},
"paymentCustomer":{
"id":"179644955",
"email":"sduly1f@multiply.com"
},
"paymentMethodDetails":{
"id":"dg4kg9g",
"number":"0004",
"expires":"06/2024",
"fingerprint":null,
"paymentMethod":"AMEX"
},
"paymentReceipt":null,
"attachments":[
]
}
id
ID Dispute Date
Date Response Date
Date Currency
String Amount
Long Status
Enum Processor Status
String Reason
Enum Processor Reason
String {
"data": {
"id": "db1ef945-d8c5-4ec8-b583-311da693ae7a",
"disputeDate" : "2022-10-07T12:18:52+0000",
"responseDate" : "2022-10-16T23:59:59+0000",
"currency" :"EUR",
"amount" : {
"rawAmount" : "20600",
"currency" : "EUR",
"formattedAmount" : "€206.00"
},
"status" : "NEEDS_RESPONSE",
"processorStatus" : "needs_response",
"reason" : "FRAUD",
"processorReason" : "fraudulent"
}
}
Payment authorised, ready to be captured
Payment is waiting for 3D Secure before being authorised
Payment was successful
Payment was refunded
Payment was cancelled
Payment failed
Payment was declined
Payment in dispute
Mastercard
Paypal
Automated Clearing House (ACH) payments
Account payments
Digital Wallet
Cash
Crypto
Visa
American Express
Apple Pay
Google Pay
Unknown Card
Buy now pay later
Direct Debit
Amount in minor units.
ISO 4217 Code e.g. EUR
Formatted amount
Credit Card
Debit Card
Prepaid Card
Undefined
This reason covers disputes related to fraud.
This reason covers disputes such as declined authorization, no authorization, etc.
This reason covers disputes such as incorrect amount, currency, duplicate transactions, etc.
This reason covers disputes such as goods/service not received, goods/service not as described, cancelled recurring transactions, etc.
This reason covers disputes which do not fall into one of the above categories.
A dispute has been opened and needs a response from you.
You have submitted a response against the dispute. The response is now being reviewed by the network.
You have refunded customer for this dispute.
This dispute has been closed or cancelled by the customer or issuer.
You have lost this dispute.
You won this dispute.
An alert informing you of a problematic payment which may become a dispute.