Skip to main content
Documents store identification and verification files for clients.

Creating Document Records

Documents are created in two steps: create the record, then upload the file.
import { DocumentCategory } from "@artu-ai/compliance-sdk";

const doc = await sdk.documents.create({
  clientId: "client_abc123",
  scope: "MX",
  type: "ine_front",
  category: DocumentCategory.Identity,
});

console.log(doc.id);
console.log(doc.status); // "pending_upload"

Document Categories

CategoryDescription
IdentityIdentity documents (INE, passport)
AddressProof of address
FinancialFinancial statements, tax records
LegalLegal documents (powers of attorney, articles)
OtherOther document types

Document Types

TypeEnumDescription
ine_frontMexDocumentType.IneFrontINE (voter ID) front
ine_backMexDocumentType.IneBackINE (voter ID) back
passportMexDocumentType.PassportPassport
curpMexDocumentType.CurpCURP document
rfc_constanciaMexDocumentType.RfcConstanciaRFC certificate
declaracion_anualMexDocumentType.DeclaracionAnualAnnual tax declaration
address_proofMexDocumentType.AddressProofProof of address
acta_constitutivaMexDocumentType.ActaConstitutivaArticles of incorporation
poder_notarialMexDocumentType.PoderNotarialPower of attorney
otherMexDocumentType.OtherOther document type
import { MexDocumentType } from "@artu-ai/shared";

const doc = await sdk.documents.create({
  clientId: "client_abc123",
  scope: "MX",
  type: MexDocumentType.IneFront,
  category: DocumentCategory.Identity,
});

Retrieving Documents

const doc = await sdk.documents.retrieve("doc_xyz789");

console.log(doc.id);
console.log(doc.type);
console.log(doc.status);
console.log(doc.isAvailable);
Need to search by your own IDs or metadata? Use retrieveByExternalId or retrieveByMetadata (see SDK reference).

Updating Documents

const updated = await sdk.documents.update("doc_xyz789", {
  expiresAt: new Date("2030-01-01"),
  metadata: {
    verified: true,
    verifiedBy: "admin@example.com",
  },
});

Listing Documents

All Documents

const { data } = await sdk.documents.list({
  limit: 50,
});

By Client

const { data } = await sdk.documents.listByClient("client_abc123");

By Type

const { data } = await sdk.documents.list({
  filter: {
    clientId: "client_abc123",
    type: "ine_front",
  },
});

Async Iterator

for await (const doc of sdk.documents.iterate()) {
  console.log(doc.id, doc.type);
}

Document Status

StatusDescription
pending_uploadRecord created, awaiting file upload
processingFile uploaded, being processed
availableDocument is available
failedProcessing failed
expiredDocument has expired

Checking Document Existence

// Check if a specific document type exists for a client
const hasINE = await sdk.documents.hasDocumentType(
  "client_abc123",
  "ine_front",
);

if (!hasINE) {
  console.log("Client needs to upload INE front");
}

Counting Documents

const count = await sdk.documents.countByClient("client_abc123");
console.log(`Client has ${count} documents`);

Deleting Documents

await sdk.documents.delete("doc_xyz789");

Document Model Properties

PropertyTypeDescription
idstringUnique identifier
clientIdstringParent client ID
typestringDocument type
categoryDocumentCategoryDocument category
scopestringScope code
statusDocumentStatusCurrent status
isAvailablebooleanTrue if available
filenamestring | undefinedOriginal filename
mimeTypestring | undefinedFile MIME type
sizenumber | undefinedFile size in bytes
expiresAtDate | undefinedExpiration date
metadataobject | undefinedCustom metadata
createdAtDateCreation timestamp
updatedAtDateLast update timestamp

Batch Operations

Create multiple document records:
const result = await sdk.documents.createMany([
  { clientId, type: "ine_front", category: DocumentCategory.Identity, ... },
  { clientId, type: "ine_back", category: DocumentCategory.Identity, ... },
]);

Mexico Document Fields

Mexico documents can include extracted field data:
import { isIneFront, isRfcConstancia } from "@artu-ai/compliance-sdk/mx";

const doc = await sdk.documents.retrieve("doc_xyz789");

if (isIneFront(doc)) {
  // Access INE-specific fields
  console.log(doc.fields.cic);
  console.log(doc.fields.ocr);
  console.log(doc.fields.claveElector);
  console.log(doc.fields.seccion);
}

if (isRfcConstancia(doc)) {
  // Access RFC constancia fields
  console.log(doc.fields.rfc);
  console.log(doc.fields.regimenFiscal);
}
See Mexico Scope for all document type guards.