mutation updatePaymentPlanSessionAuthenticated
Updates a payment plan session used by the checkout process to create and authorize a payment plan.
Returns PaymentPlanSession!
Arguments
| Argument | Type | Description |
|---|---|---|
input | UpdatePaymentPlanSessionInput! |
Example request
curl -X POST 'https://graph.clientloop.com/' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer <api-key>' \
-d '{
"query": "mutation UpdatePaymentPlanSession($input: UpdatePaymentPlanSessionInput!) { updatePaymentPlanSession(input: $input) { id orgId contactId contact { id orgId ownerId name givenName familyName email phone deletedAt createdAt updatedAt idv { status createdAt completedAt selfieVideoUrl nameMatch dateOfBirthMatch phoneNumberMatch addressMatch taxIdMatch livenessCheck facialComparisonCheck } } amount currency status frequency startDate occurrences callbackUrl cancelUrl successUrl link expirationDate paymentPlanId createdAt updatedAt checkoutConfigurationId brandLogoUrl brandName } }",
"variables": {
"input": {
"orgId": "abc123",
"id": "abc123"
}
}
}'const response = await fetch('https://graph.clientloop.com/', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer <api-key>',
},
body: JSON.stringify({
query: `
mutation UpdatePaymentPlanSession($input: UpdatePaymentPlanSessionInput!) {
updatePaymentPlanSession(input: $input) {
id
orgId
contactId
contact {
id
orgId
ownerId
name
givenName
familyName
email
phone
deletedAt
createdAt
updatedAt
idv {
status
createdAt
completedAt
selfieVideoUrl
nameMatch
dateOfBirthMatch
phoneNumberMatch
addressMatch
taxIdMatch
livenessCheck
facialComparisonCheck
}
}
amount
currency
status
frequency
startDate
occurrences
callbackUrl
cancelUrl
successUrl
link
expirationDate
paymentPlanId
createdAt
updatedAt
checkoutConfigurationId
brandLogoUrl
brandName
}
}
`,
variables: {
"input": {
"orgId": "abc123",
"id": "abc123"
}
},
}),
});
const { data, errors } = await response.json();<?php
$body = <<<'JSON'
{
"query": "mutation UpdatePaymentPlanSession($input: UpdatePaymentPlanSessionInput!) { updatePaymentPlanSession(input: $input) { id orgId contactId contact { id orgId ownerId name givenName familyName email phone deletedAt createdAt updatedAt idv { status createdAt completedAt selfieVideoUrl nameMatch dateOfBirthMatch phoneNumberMatch addressMatch taxIdMatch livenessCheck facialComparisonCheck } } amount currency status frequency startDate occurrences callbackUrl cancelUrl successUrl link expirationDate paymentPlanId createdAt updatedAt checkoutConfigurationId brandLogoUrl brandName } }",
"variables": {
"input": {
"orgId": "abc123",
"id": "abc123"
}
}
}
JSON;
$ch = curl_init('https://graph.clientloop.com/');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => [
'Content-Type: application/json',
'Authorization: Bearer <api-key>',
],
CURLOPT_POSTFIELDS => $body,
]);
$response = curl_exec($ch);
curl_close($ch);
$result = json_decode($response, true);import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
var body = """
{
"query": "mutation UpdatePaymentPlanSession($input: UpdatePaymentPlanSessionInput!) { updatePaymentPlanSession(input: $input) { id orgId contactId contact { id orgId ownerId name givenName familyName email phone deletedAt createdAt updatedAt idv { status createdAt completedAt selfieVideoUrl nameMatch dateOfBirthMatch phoneNumberMatch addressMatch taxIdMatch livenessCheck facialComparisonCheck } } amount currency status frequency startDate occurrences callbackUrl cancelUrl successUrl link expirationDate paymentPlanId createdAt updatedAt checkoutConfigurationId brandLogoUrl brandName } }",
"variables": {
"input": {
"orgId": "abc123",
"id": "abc123"
}
}
}
""";
var request = HttpRequest.newBuilder(URI.create("https://graph.clientloop.com/"))
.header("Content-Type", "application/json")
.header("Authorization", "Bearer <api-key>")
.POST(HttpRequest.BodyPublishers.ofString(body))
.build();
var response = HttpClient.newHttpClient()
.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());using System.Net.Http;
using System.Text;
var body = """
{
"query": "mutation UpdatePaymentPlanSession($input: UpdatePaymentPlanSessionInput!) { updatePaymentPlanSession(input: $input) { id orgId contactId contact { id orgId ownerId name givenName familyName email phone deletedAt createdAt updatedAt idv { status createdAt completedAt selfieVideoUrl nameMatch dateOfBirthMatch phoneNumberMatch addressMatch taxIdMatch livenessCheck facialComparisonCheck } } amount currency status frequency startDate occurrences callbackUrl cancelUrl successUrl link expirationDate paymentPlanId createdAt updatedAt checkoutConfigurationId brandLogoUrl brandName } }",
"variables": {
"input": {
"orgId": "abc123",
"id": "abc123"
}
}
}
""";
using var client = new HttpClient();
using var content = new StringContent(body, Encoding.UTF8, "application/json");
client.DefaultRequestHeaders.Add("Authorization", "Bearer <api-key>");
var response = await client.PostAsync("https://graph.clientloop.com/", content);
var result = await response.Content.ReadAsStringAsync();Types
input UpdatePaymentPlanSessionInput
| Field | Type | Description |
|---|---|---|
orgId | ID! | ID of the organization this payment session belongs to. |
id | ID! | Unique identifier for the payment plan session. |
contactId | ID | ID of the platform contact associated with this payment plan session |
amount | Amount | Payment amount to be charged on the configured frequency. |
currency | Currency | Currency of the payment |
frequency | PaymentPlanFrequency | Frequency of the payment plan |
startDate | Date | Start date of the payment plan |
occurrences | Int | Number of payment occurrences to be run on the configured frequency from the start date |
callbackUrl | URL | URL to receive payment session events |
cancelUrl | URL | URL to redirect after a payment session is canceled by the customer |
successUrl | URL | URL to redirect after a payment session is completed by the customer |
expirationDate | DateTime | Optional expiration date for the payment session. ISO 8601 format. |
paymentPlanId | ID | ID of the payment plan created by this payment plan session |
status | PaymentPlanSessionStatus | Status of the payment plan session. |
checkoutConfigurationId | ID | The checkout configuration ID to be used for this payment plan session. If a checkout configuration ID is not provided, the default checkout configuration will be used. |
brandLogoUrl | URL | Optional URL to a logo image to display during checkout, overriding the default branding. The caller supplies a URL that is used to render the logo. |
brandName | String | Optional brand or merchant name to display during checkout, overriding the organization name. |
type PaymentPlanSession
| Field | Type | Description |
|---|---|---|
id | ID! | Unique identifier for this payment plan session |
orgId | ID! | ID of the organization this payment session belongs to |
contactId | ID! | ID of the platform contact associated with this payment plan session |
contact | Contact | Platform contact associated with this payment plan session |
amount | Amount! | Payment amount to be charged on the configured frequency. |
currency | Currency! | Currency of the payment |
status | PaymentPlanSessionStatus! | Status of the payment plan session |
frequency | PaymentPlanFrequency! | Frequency of the payment plan |
startDate | Date! | Start date of the payment plan |
occurrences | Int! | Number of payment occurrences to be run on the configured frequency from the start date |
callbackUrl | URL | URL to receive payment session events |
cancelUrl | URL | URL to redirect after a payment session is canceled by the customer |
successUrl | URL | URL to redirect after a payment session is completed by the customer |
link | URL | Link to the payment plan session. This will be null if the session is expired or completed. This link is used to redirect the user to the payment page or may be used to embedded payment flow depending on the configuration provided. |
expirationDate | DateTime | Optional expiration date for the payment session. ISO 8601 format. |
paymentPlanId | ID | ID of the payment plan created by this payment plan session |
createdAt | DateTime! | Date the payment session was created |
updatedAt | DateTime! | Date the payment session was last updated |
checkoutConfigurationId | ID | The checkout configuration ID used for this payment session. |
brandLogoUrl | URL | Optional caller-supplied URL to a logo image to display during checkout, overriding the default branding. |
brandName | String | Optional caller-supplied brand or merchant name to display during checkout, overriding the organization name. |
scalar Amount
A monetary amount with up to two decimal places. Ex. 111.11
scalar Currency
Three letter ISO 4217 currency code. Ex. USD
enum PaymentPlanFrequency
WeeklyMonthlyQuarterlyYearly
scalar Date
ISO 8601 formatted date in the format YYYY-MM-DD
scalar URL
A URL with protocol and port. ex. https://example.com
scalar DateTime
ISO 8601 formatted date time. Ex. 2023-11-23T14:30:00Z
enum PaymentPlanSessionStatus
ExpiredActiveCompletedCanceled
type Contact
| Field | Type | Description |
|---|---|---|
id | ID! | Unique ID of the contact. |
orgId | ID! | ID of the organization that owns the contact. |
ownerId | ID! | Global ID of the owning organization ( |
name | String! | Full name of the contact. |
givenName | String | Given name of the contact. |
familyName | String | Family name of the contact. |
email | Email | Email address of the contact. |
phone | Phone | Phone number of the contact. This will be validated and normalized to the E.164 format. |
deletedAt | String | Set when the contact has been soft-deleted; null for an active contact. |
createdAt | String! | Date and time when the contact was created. |
updatedAt | String! | Date and time when the contact was last updated. |
idv | ContactIdvSessionDetail | The latest Plaid identity-verification session for this contact. On the public graph this exposes the session timestamps, the captured selfie video, the captured identity documents, and the individual check outcomes; the remaining detail is private-graph only. Null when the contact has never started a session. Fetched on demand from Plaid — request it only when needed. |
scalar Email
An email address
scalar Phone
E.164 formatted phone number. Ex. +14155554345
type ContactIdvSessionDetail
Details of a contact's Plaid identity-verification session, fetched on demand from Plaid. The public graph exposes the timestamps, the captured selfie video, the captured identity documents, and the individual check outcomes; the remaining fields — including the raw Plaid pass-throughs they are derived from — are private-graph only.
| Field | Type | Description |
|---|---|---|
status | ContactIdvSessionStatus! | Where the verification as a whole stands. Success, Failed and PendingReview are all terminal and all carry captured identity; Active is still in progress, and Expired or Canceled never produced one. |
createdAt | DateTime! | |
completedAt | DateTime | |
documents | [ContactIdvDocument!]! | Captured identity documents, pulled out of documentary_verification: each document's category and its captured images. |
selfieVideoUrl | String | URL of the captured selfie video, pulled out of selfieCheck for direct access. Plaid-hosted and expiring; null when the template did not capture a selfie video. |
nameMatch | IdvMatchSummary | How the name that the contact supplied compared against Plaid's data sources. Null when the KYC step has not run. |
dateOfBirthMatch | IdvMatchSummary | How the date of birth compared against Plaid's data sources. Null when the KYC step has not run. |
phoneNumberMatch | IdvMatchSummary | How the phone number compared against Plaid's data sources. Null when the KYC step has not run. |
addressMatch | IdvMatchSummary | How the address compared against Plaid's data sources. Null when the KYC step has not run. |
taxIdMatch | IdvMatchSummary | How the tax id (SSN) compared against Plaid's data sources, from Plaid's id_number check. Null when the KYC step has not run. |
livenessCheck | IdvLivenessStatus | Whether the captured selfie passed liveness detection. Null when the selfie step has not run or captured no analysis. |
facialComparisonCheck | IdvFacialComparisonStatus | Whether the captured selfie matched the face on the identity document. Null when the selfie step has not run or captured no analysis. |
enum ContactIdvSessionStatus
Where a contact's verification stands. Mirrors the shared IdvSessionStatus but is declared separately so the contact graph's public surface does not depend on a type owned by the application module.
ActiveExpiredCanceledSuccessFailedPendingReview
type ContactIdvDocument
A captured identity document from a contact's Plaid documentary verification.
| Field | Type | Description |
|---|---|---|
category | String | Document category as classified by Plaid (e.g. drivers_license, id_card, passport). Null when Plaid could not classify the document. |
images | [ContactIdvDocumentImage!]! | Captured images for this document (e.g. originalFront, croppedBack, face). |
enum IdvMatchSummary
How one value that the contact supplied compared against the data sources that Plaid checked it against. NoData means Plaid held nothing to compare with; NoInput means the contact supplied nothing to compare.
MatchPartialMatchNoMatchNoDataNoInput
enum IdvLivenessStatus
Whether the captured selfie passed liveness detection — that a live person was present rather than a photograph or a screen.
SuccessFailed
enum IdvFacialComparisonStatus
How the captured selfie compared against the face on the captured identity document. NoInput means one of the two was never captured.
MatchNoMatchNoInput
type ContactIdvDocumentImage
A single captured image belonging to a ContactIdvDocument. Plaid-hosted and expiring.
| Field | Type | Description |
|---|---|---|
name | String | Image identifier (e.g. originalFront, croppedBack, face). |
url | String | Plaid-hosted URL of the image. Expires. |