mutation applySessionCreateAuthenticated
Starts a verified session for the provided email directly, bypassing the start/verify OTP exchange, and returns the session details.
Returns ApplySession
Arguments
| Argument | Type | Description |
|---|---|---|
input | ApplySessionCreateInput! |
Example request
curl -X POST 'https://graph.clientloop.com/' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer <api-key>' \
-d '{
"query": "mutation ApplySessionCreate($input: ApplySessionCreateInput!) { applySessionCreate(input: $input) { id expiresAt expired email applicationId applicationStatus businessInformation { legalName dba startDate website country entityType ein taxInfo { country number maskedNumber type } phone address address2 city state postalCode avgOrderAmount stockMarketIdentifier stockNumber stockTickerSymbol } productsAndServices { industry industryOther services supportEmail supportPhone } owners { id givenName familyName title email phone dob maskedSsn taxInfo { country number maskedNumber type } identification { country number maskedNumber type } address address2 country city state postalCode percentageOwnership ownerType ownerKind parentOwnerId legalName registrationNumber } idvCompleted businessInfoCompleted productsAndServicesCompleted bankLinked totalOwnership ownersCompleted agreementsCompleted transferInstrumentCompleted entityTypeLocked totalSections completedSections sections { name completed } } }",
"variables": {
"input": {
"email": "user@example.com",
"configurationId": "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 ApplySessionCreate($input: ApplySessionCreateInput!) {
applySessionCreate(input: $input) {
id
expiresAt
expired
email
applicationId
applicationStatus
businessInformation {
legalName
dba
startDate
website
country
entityType
ein
taxInfo {
country
number
maskedNumber
type
}
phone
address
address2
city
state
postalCode
avgOrderAmount
stockMarketIdentifier
stockNumber
stockTickerSymbol
}
productsAndServices {
industry
industryOther
services
supportEmail
supportPhone
}
owners {
id
givenName
familyName
title
email
phone
dob
maskedSsn
taxInfo {
country
number
maskedNumber
type
}
identification {
country
number
maskedNumber
type
}
address
address2
country
city
state
postalCode
percentageOwnership
ownerType
ownerKind
parentOwnerId
legalName
registrationNumber
}
idvCompleted
businessInfoCompleted
productsAndServicesCompleted
bankLinked
totalOwnership
ownersCompleted
agreementsCompleted
transferInstrumentCompleted
entityTypeLocked
totalSections
completedSections
sections {
name
completed
}
}
}
`,
variables: {
"input": {
"email": "user@example.com",
"configurationId": "abc123"
}
},
}),
});
const { data, errors } = await response.json();<?php
$body = <<<'JSON'
{
"query": "mutation ApplySessionCreate($input: ApplySessionCreateInput!) { applySessionCreate(input: $input) { id expiresAt expired email applicationId applicationStatus businessInformation { legalName dba startDate website country entityType ein taxInfo { country number maskedNumber type } phone address address2 city state postalCode avgOrderAmount stockMarketIdentifier stockNumber stockTickerSymbol } productsAndServices { industry industryOther services supportEmail supportPhone } owners { id givenName familyName title email phone dob maskedSsn taxInfo { country number maskedNumber type } identification { country number maskedNumber type } address address2 country city state postalCode percentageOwnership ownerType ownerKind parentOwnerId legalName registrationNumber } idvCompleted businessInfoCompleted productsAndServicesCompleted bankLinked totalOwnership ownersCompleted agreementsCompleted transferInstrumentCompleted entityTypeLocked totalSections completedSections sections { name completed } } }",
"variables": {
"input": {
"email": "user@example.com",
"configurationId": "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 ApplySessionCreate($input: ApplySessionCreateInput!) { applySessionCreate(input: $input) { id expiresAt expired email applicationId applicationStatus businessInformation { legalName dba startDate website country entityType ein taxInfo { country number maskedNumber type } phone address address2 city state postalCode avgOrderAmount stockMarketIdentifier stockNumber stockTickerSymbol } productsAndServices { industry industryOther services supportEmail supportPhone } owners { id givenName familyName title email phone dob maskedSsn taxInfo { country number maskedNumber type } identification { country number maskedNumber type } address address2 country city state postalCode percentageOwnership ownerType ownerKind parentOwnerId legalName registrationNumber } idvCompleted businessInfoCompleted productsAndServicesCompleted bankLinked totalOwnership ownersCompleted agreementsCompleted transferInstrumentCompleted entityTypeLocked totalSections completedSections sections { name completed } } }",
"variables": {
"input": {
"email": "user@example.com",
"configurationId": "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 ApplySessionCreate($input: ApplySessionCreateInput!) { applySessionCreate(input: $input) { id expiresAt expired email applicationId applicationStatus businessInformation { legalName dba startDate website country entityType ein taxInfo { country number maskedNumber type } phone address address2 city state postalCode avgOrderAmount stockMarketIdentifier stockNumber stockTickerSymbol } productsAndServices { industry industryOther services supportEmail supportPhone } owners { id givenName familyName title email phone dob maskedSsn taxInfo { country number maskedNumber type } identification { country number maskedNumber type } address address2 country city state postalCode percentageOwnership ownerType ownerKind parentOwnerId legalName registrationNumber } idvCompleted businessInfoCompleted productsAndServicesCompleted bankLinked totalOwnership ownersCompleted agreementsCompleted transferInstrumentCompleted entityTypeLocked totalSections completedSections sections { name completed } } }",
"variables": {
"input": {
"email": "user@example.com",
"configurationId": "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 ApplySessionCreateInput
| Field | Type | Description |
|---|---|---|
email | Email! | |
configurationId | ID! |
type ApplySession
| Field | Type | Description |
|---|---|---|
id | ID! | |
expiresAt | DateTime! | The time at which the session expires. |
expired | Boolean! | True when expiresAt is in the past. Computed at read time. |
email | Email | The email address the applicant started the session with (the OTP recipient). Identifies which owner is the applicant themselves. |
applicationId | ID! | The Application opened for this session's email + agency. Set when the session is started or created. |
applicationStatus | ApplicationStatus! | Status of the linked Application. Resolved at read time; not persisted on the session. |
businessInformation | ApplySessionBusinessInformation! | Business information for the linked Application. Resolved at read time; not persisted on the session. |
productsAndServices | ApplySessionProductsAndServices! | Products & services for the linked Application. Resolved at read time; not persisted on the session. |
owners | [ApplySessionOwner!]! | Owners on the linked Application. Resolved at read time; not persisted on the session. |
idvCompleted | Boolean! | True when the linked Application's identity-verification session has reached a terminal state (Success, Failed, or PendingReview). Resolved at read time. |
businessInfoCompleted | Boolean! | True when the linked Application has all required business-information fields populated. Resolved at read time. |
productsAndServicesCompleted | Boolean! | True when the linked Application has all required products-and-services fields populated. Resolved at read time. |
bankLinked | Boolean! | True when an ACH bank account has been linked to the Application via Plaid. Resolved at read time. |
totalOwnership | Int! | Sum of the percentageOwnership across all owners on the linked Application. Resolved at read time. |
ownersCompleted | Boolean! | True when the listed owners on the linked Application collectively represent at least 75% ownership (no threshold for a publicly traded company, whose owners must instead be confirmed, as they stand, in the apply wizard) and at least one direct owner is a decision maker. Each company that owns part of the business also needs a decision maker among its own owners; its owners holding 25% or more of the business through it are asked for too. Resolved at read time. |
agreementsCompleted | Boolean! | True when the merchant has accepted the agreements on the linked Application. Resolved at read time. |
transferInstrumentCompleted | Boolean! | True when a transfer instrument (Card payout account) has been attached on the linked Application. Currently hardcoded to true pending CLP webhook integration. |
entityTypeLocked | Boolean! | True when the entity type is locked because the merchant's business details have been submitted to the payment processor (their CLP legal entity exists) or a bank account has been linked. The apply UI prevents editing the entity-type field when true. |
totalSections | Int! | Total number of sections in the apply wizard. Equal to sections.length. Resolved at read time. |
completedSections | Int! | Number of completed apply-wizard sections — the count of sections entries with completed: true. Resolved at read time. |
sections | [ApplySectionStatus!]! | Ordered list of apply-wizard sections with their completion state. Order matches the order they should be shown in the UI. Length equals totalSections; count of completed entries equals completedSections. Resolved at read time. |
scalar Email
An email address
scalar DateTime
ISO 8601 formatted date time. Ex. 2023-11-23T14:30:00Z
enum ApplicationStatus
draft— Application was opened and is in the process of being filled out.submitted— Application was submitted by the merchant and is ready for reviewpending— Deprecated and no longer used.signed— Deprecated and no longer used.voided— Deprecated and no longer used.completed— Deprecated and no longer used.canceled— Application was canceled and will not be reviewed. Canceling is available while the application is still open and after it has been submitted.approved— Application has been reviewed and was approved by underwritingdeclined— Application has been reviewed and was declined by underwriting
type ApplySessionBusinessInformation
| Field | Type | Description |
|---|---|---|
legalName | String | |
dba | String | |
startDate | String | |
website | String | |
country | Country | |
entityType | EntityType | |
ein | String | Deprecated; use |
taxInfo | [TaxInfo!]! | Tax identifiers of the business. Only maskedNumber is filled; number is always null here. |
phone | String | |
address | String | |
address2 | String | Second line of the street address (suite, unit, floor, building or district). Sent to CLP as street2. Null when there is none. |
city | String | |
state | String | State, province or other region, as its ISO 3166-2 subdivision code without the country prefix, e.g. |
postalCode | String | |
avgOrderAmount | AvgOrderAmount | |
stockMarketIdentifier | String | |
stockNumber | String | |
stockTickerSymbol | String |
type ApplySessionProductsAndServices
| Field | Type | Description |
|---|---|---|
industry | String | |
industryOther | String | |
services | String | |
supportEmail | Email | |
supportPhone | String |
type ApplySessionOwner
| Field | Type | Description |
|---|---|---|
id | ID! | |
givenName | String | |
familyName | String | |
title | String | |
email | Email | |
phone | String | |
dob | String | |
maskedSsn | String | Deprecated; use |
taxInfo | [TaxInfo!]! | Tax identifiers of the owner. Only maskedNumber is filled; number is always null here. |
identification | [Identification!]! | Identification numbers of the owner that are not tax ids, such as a Mexican CURP. Only maskedNumber is filled; number is always null here. |
address | String | |
address2 | String | Second line of the street address (suite, unit, floor, building or district). Sent to CLP as street2. Null when there is none. |
country | Country | Country of the owner's residential address. May differ from the business's country. Null on owners created before this field existed. |
city | String | |
state | String | State, province or other region, as its ISO 3166-2 subdivision code without the country prefix, e.g. |
postalCode | String | |
percentageOwnership | Int | |
ownerType | ApplicationOwnerType | |
ownerKind | OwnerKind! | |
parentOwnerId | ID | |
legalName | String | |
registrationNumber | String | Company registration number of a business owner, as its registry issues it: a Canadian Business Incorporation Number (BIN) or company number, or a Chinese Unified Social Credit Code (USCC), stored without separators. Not a tax id: a Chinese company's USCC goes here, not in |
type ApplySectionStatus
A section of the apply wizard with its current completion state. The sections array is ordered for display.
| Field | Type | Description |
|---|---|---|
name | ApplySectionName! | |
completed | Boolean! |
enum Country
A country, as its ISO 3166-1 alpha-3 code in lower case: usa, can, chn, mex. Applications are accepted from US businesses only for now; owners may be in any of these.
usacanchnmex
enum EntityType
spgplpllpllcccorpscorpbcorpnonprofitcoopgovpub— Publicly traded company. Its owners are complete once a decision maker is among its direct owners and, if the application has been opened in the apply wizard, the applicant has confirmed them there; any change to the owners clears that confirmation until they are confirmed again. The 75% ownership other entity types list does not apply.
type TaxInfo
A tax identifier: the national id a person's country issues them as a tax id, or a business's tax id. A company's registry number goes in registrationNumber instead, and a person's identity numbers that are not tax ids in identification. The Owner Identifiers by Country guide lists which each country uses.
| Field | Type | Description |
|---|---|---|
country | Country! | The country that issued it. |
number | String | The identifier, formatted in the official form for its type. Always null on the public apply-session types, where only maskedNumber is given. |
maskedNumber | String! | The identifier with only its last group visible, in its type's grouping. Always present. |
type | TaxInfoType! |
enum AvgOrderAmount
Bucketed average invoice or order amount the merchant typically transacts. Amounts are USD for US merchants and CAD for Canadian merchants — interpreted at display time from the application's country.
Under100— Less than 100From100To500— 100 to 500From501To1000— 501 to 1,000Over1000— More than 1,000
type Identification
A national identity number of a person that is not a tax id, such as a Mexican CURP. People only: a business owner carries none. Sent to CLP as the person's identification data. The Owner Identifiers by Country guide lists which countries take one.
| Field | Type | Description |
|---|---|---|
country | Country! | The country that issued it. |
number | String | The number, in its stored form. Always null on the public apply-session types, where only maskedNumber is given. |
maskedNumber | String! | The number with only its last four characters visible. Always present. |
type | IdentificationType! |
enum ApplicationOwnerType
CONTROL_PERSONBENEFICIAL_OWNER
enum OwnerKind
Whether an owner is a natural person or a business entity.
individualbusiness
enum ApplySectionName
Stable identifier for a section of the apply wizard. Order in which these appear in Application.sections / ApplySession.sections is the order they should be rendered in the UI.
Idv— Identity verification (Plaid IDV).BusinessInfo— Tell-us-about-your-business form.Owners— Business owners.ProductsAndServices— Products and services.BankLink— ACH bank account link (Plaid). Present when plaidTransferEnabled is true, which is the fallback when no ApplyConfiguration value is resolved.TransferInstrument— Card payout transfer instrument (CLP).Agreements— Review and accept agreements.
enum TaxInfoType
The kind of a tax identifier. The country that issues it follows from the kind.
ein— US Employer Identification Number, stored as XX-XXXXXXX.ssn— US Social Security Number, stored as XXX-XX-XXXX.bn— Canadian Business Number, stored as nine digits.sin— Canadian Social Insurance Number, stored as XXX-XXX-XXX.cn_id— Chinese Resident Identity Card number of a person, stored as its 18 characters, the last a digit or X.rfc— Mexican RFC (Federal Taxpayer Registry number) of a company, stored as its 12 characters.
enum IdentificationType
The kind of an identification number that is not a tax id.
curp— Mexican CURP (Unique Population Registry Code), stored as its 18 characters.