mutation updateContactAuthenticated

Updates an existing contact.

Returns Contact!

Arguments

ArgumentTypeDescription
inputUpdateContactInput!

Example request

curl -X POST 'https://graph.clientloop.com/' \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer <api-key>' \
  -d '{
    "query": "mutation UpdateContact($input: UpdateContactInput!) { updateContact(input: $input) { id orgId ownerId name givenName familyName email phone deletedAt createdAt updatedAt idv { status createdAt completedAt documents { category } selfieVideoUrl nameMatch dateOfBirthMatch phoneNumberMatch addressMatch taxIdMatch livenessCheck facialComparisonCheck } } }",
    "variables": {
      "input": {
        "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 UpdateContact($input: UpdateContactInput!) {
        updateContact(input: $input) {
          id
          orgId
          ownerId
          name
          givenName
          familyName
          email
          phone
          deletedAt
          createdAt
          updatedAt
          idv {
            status
            createdAt
            completedAt
            documents {
              category
            }
            selfieVideoUrl
            nameMatch
            dateOfBirthMatch
            phoneNumberMatch
            addressMatch
            taxIdMatch
            livenessCheck
            facialComparisonCheck
          }
        }
      }
    `,
    variables: {
      "input": {
        "id": "abc123"
      }
    },
  }),
});

const { data, errors } = await response.json();
<?php

$body = <<<'JSON'
{
  "query": "mutation UpdateContact($input: UpdateContactInput!) { updateContact(input: $input) { id orgId ownerId name givenName familyName email phone deletedAt createdAt updatedAt idv { status createdAt completedAt documents { category } selfieVideoUrl nameMatch dateOfBirthMatch phoneNumberMatch addressMatch taxIdMatch livenessCheck facialComparisonCheck } } }",
  "variables": {
    "input": {
      "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 UpdateContact($input: UpdateContactInput!) { updateContact(input: $input) { id orgId ownerId name givenName familyName email phone deletedAt createdAt updatedAt idv { status createdAt completedAt documents { category } selfieVideoUrl nameMatch dateOfBirthMatch phoneNumberMatch addressMatch taxIdMatch livenessCheck facialComparisonCheck } } }",
  "variables": {
    "input": {
      "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 UpdateContact($input: UpdateContactInput!) { updateContact(input: $input) { id orgId ownerId name givenName familyName email phone deletedAt createdAt updatedAt idv { status createdAt completedAt documents { category } selfieVideoUrl nameMatch dateOfBirthMatch phoneNumberMatch addressMatch taxIdMatch livenessCheck facialComparisonCheck } } }",
  "variables": {
    "input": {
      "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 UpdateContactInput

FieldTypeDescription
orgIdID

ID of the organization that owns the contact.

ownerIdID

Global ID of the owning organization (Org#<id>). Deprecated; use orgId.

Deprecated: Use `orgId` instead.
idID!

Unique ID of the contact.

nameString

Full name of the contact.

givenNameString

Given name of the contact.

familyNameString

Family name of the contact.

emailEmail

Email address of the contact.

phonePhone

Phone number of the contact. This will be validated and normalized to the E.164 format.

type Contact

FieldTypeDescription
idID!

Unique ID of the contact.

orgIdID!

ID of the organization that owns the contact.

ownerIdID!

Global ID of the owning organization (Org#<id>). Deprecated; use orgId.

Deprecated: Use `orgId` instead.
nameString!

Full name of the contact.

givenNameString

Given name of the contact.

familyNameString

Family name of the contact.

emailEmail

Email address of the contact.

phonePhone

Phone number of the contact. This will be validated and normalized to the E.164 format.

deletedAtString

Set when the contact has been soft-deleted; null for an active contact.

createdAtString!

Date and time when the contact was created.

updatedAtString!

Date and time when the contact was last updated.

idvContactIdvSessionDetail

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.

FieldTypeDescription
statusContactIdvSessionStatus!

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.

createdAtDateTime!
completedAtDateTime
documents[ContactIdvDocument!]!

Captured identity documents, pulled out of documentary_verification: each document's category and its captured images.

selfieVideoUrlString

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.

nameMatchIdvMatchSummary

How the name that the contact supplied compared against Plaid's data sources. Null when the KYC step has not run.

dateOfBirthMatchIdvMatchSummary

How the date of birth compared against Plaid's data sources. Null when the KYC step has not run.

phoneNumberMatchIdvMatchSummary

How the phone number compared against Plaid's data sources. Null when the KYC step has not run.

addressMatchIdvMatchSummary

How the address compared against Plaid's data sources. Null when the KYC step has not run.

taxIdMatchIdvMatchSummary

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.

livenessCheckIdvLivenessStatus

Whether the captured selfie passed liveness detection. Null when the selfie step has not run or captured no analysis.

facialComparisonCheckIdvFacialComparisonStatus

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.

  • Active
  • Expired
  • Canceled
  • Success
  • Failed
  • PendingReview

scalar DateTime

ISO 8601 formatted date time. Ex. 2023-11-23T14:30:00Z

type ContactIdvDocument

A captured identity document from a contact's Plaid documentary verification.

FieldTypeDescription
categoryString

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.

  • Match
  • PartialMatch
  • NoMatch
  • NoData
  • NoInput

enum IdvLivenessStatus

Whether the captured selfie passed liveness detection — that a live person was present rather than a photograph or a screen.

  • Success
  • Failed

enum IdvFacialComparisonStatus

How the captured selfie compared against the face on the captured identity document. NoInput means one of the two was never captured.

  • Match
  • NoMatch
  • NoInput

type ContactIdvDocumentImage

A single captured image belonging to a ContactIdvDocument. Plaid-hosted and expiring.

FieldTypeDescription
nameString

Image identifier (e.g. originalFront, croppedBack, face).

urlString

Plaid-hosted URL of the image. Expires.