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

ArgumentTypeDescription
inputApplySessionCreateInput!

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

FieldTypeDescription
emailEmail!
configurationIdID!

type ApplySession

FieldTypeDescription
idID!
expiresAtDateTime!

The time at which the session expires.

expiredBoolean!

True when expiresAt is in the past. Computed at read time.

emailEmail

The email address the applicant started the session with (the OTP recipient). Identifies which owner is the applicant themselves.

applicationIdID!

The Application opened for this session's email + agency. Set when the session is started or created.

applicationStatusApplicationStatus!

Status of the linked Application. Resolved at read time; not persisted on the session.

businessInformationApplySessionBusinessInformation!

Business information for the linked Application. Resolved at read time; not persisted on the session.

productsAndServicesApplySessionProductsAndServices!

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.

idvCompletedBoolean!

True when the linked Application's identity-verification session has reached a terminal state (Success, Failed, or PendingReview). Resolved at read time.

businessInfoCompletedBoolean!

True when the linked Application has all required business-information fields populated. Resolved at read time.

productsAndServicesCompletedBoolean!

True when the linked Application has all required products-and-services fields populated. Resolved at read time.

bankLinkedBoolean!

True when an ACH bank account has been linked to the Application via Plaid. Resolved at read time.

totalOwnershipInt!

Sum of the percentageOwnership across all owners on the linked Application. Resolved at read time.

ownersCompletedBoolean!

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.

agreementsCompletedBoolean!

True when the merchant has accepted the agreements on the linked Application. Resolved at read time.

transferInstrumentCompletedBoolean!

True when a transfer instrument (Card payout account) has been attached on the linked Application. Currently hardcoded to true pending CLP webhook integration.

entityTypeLockedBoolean!

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.

totalSectionsInt!

Total number of sections in the apply wizard. Equal to sections.length. Resolved at read time.

completedSectionsInt!

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 review
  • pending — 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 underwriting
  • declined — Application has been reviewed and was declined by underwriting

type ApplySessionBusinessInformation

FieldTypeDescription
legalNameString
dbaString
startDateString
websiteString
countryCountry
entityTypeEntityType
einString

Deprecated; use taxInfo.

Deprecated: Use `taxInfo` instead.
taxInfo[TaxInfo!]!

Tax identifiers of the business. Only maskedNumber is filled; number is always null here.

phoneString
addressString
address2String

Second line of the street address (suite, unit, floor, building or district). Sent to CLP as street2. Null when there is none.

cityString
stateString

State, province or other region, as its ISO 3166-2 subdivision code without the country prefix, e.g. WY or ON.

postalCodeString
avgOrderAmountAvgOrderAmount
stockMarketIdentifierString
stockNumberString
stockTickerSymbolString

type ApplySessionProductsAndServices

FieldTypeDescription
industryString
industryOtherString
servicesString
supportEmailEmail
supportPhoneString

type ApplySessionOwner

FieldTypeDescription
idID!
givenNameString
familyNameString
titleString
emailEmail
phoneString
dobString
maskedSsnString

Deprecated; use taxInfo. The owner's national id with only its last group visible, grouped as their country writes it: ***-**-1234 for a US SSN, --789 for a Canadian SIN.

Deprecated: Use `taxInfo` instead.
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.

addressString
address2String

Second line of the street address (suite, unit, floor, building or district). Sent to CLP as street2. Null when there is none.

countryCountry

Country of the owner's residential address. May differ from the business's country. Null on owners created before this field existed.

cityString
stateString

State, province or other region, as its ISO 3166-2 subdivision code without the country prefix, e.g. WY or ON.

postalCodeString
percentageOwnershipInt
ownerTypeApplicationOwnerType
ownerKindOwnerKind!
parentOwnerIdID
legalNameString
registrationNumberString

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 taxInfo. Optional; null when not given, for an individual, and for a business owner in any other country.

type ApplySectionStatus

A section of the apply wizard with its current completion state. The sections array is ordered for display.

FieldTypeDescription
nameApplySectionName!
completedBoolean!

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.

  • usa
  • can
  • chn
  • mex

enum EntityType

  • sp
  • gp
  • lp
  • llp
  • llc
  • ccorp
  • scorp
  • bcorp
  • nonprofit
  • coop
  • gov
  • pub — 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.

FieldTypeDescription
countryCountry!

The country that issued it.

numberString

The identifier, formatted in the official form for its type. Always null on the public apply-session types, where only maskedNumber is given.

maskedNumberString!

The identifier with only its last group visible, in its type's grouping. Always present.

typeTaxInfoType!

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 100
  • From100To500 — 100 to 500
  • From501To1000 — 501 to 1,000
  • Over1000 — 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.

FieldTypeDescription
countryCountry!

The country that issued it.

numberString

The number, in its stored form. Always null on the public apply-session types, where only maskedNumber is given.

maskedNumberString!

The number with only its last four characters visible. Always present.

typeIdentificationType!

enum ApplicationOwnerType

  • CONTROL_PERSON
  • BENEFICIAL_OWNER

enum OwnerKind

Whether an owner is a natural person or a business entity.

  • individual
  • business

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.