---
title: "Import up to 100 document fingerprints"
method: POST
path: "/anchor/import"
tags: ["Anchoring"]
---

# Import up to 100 document fingerprints

`POST /anchor/import`

## Request

- Base URL: `https://app.arkova.ai/api/v1`
- URL: `https://app.arkova.ai/api/v1/anchor/import`
- Auth: one of:
  - HTTP bearer
  - API key in header `X-API-Key`

API-key transport for canonical queue or instant submission. Every row uses the same idempotency, quota, credit, tag, metadata, and recipient-linking rules as single submit. The organization is derived from the authenticated key; caller-supplied cross-tenant org_id is rejected. Recipient assignment requires owner/admin authority: without it every row is still anchored and the recipient-bearing rows report recipient_provisioning_forbidden, rather than the request being rejected.

## Request body

- object
  - `org_id` string, uuid, nullable: JWT transport only: selected caller-owned organization, or null for personal import. API-key transport derives this from the key.
  - `action` 'queue' | 'instant', required
  - `description` string: Shared public description; at most 500 characters, the record limit
  - `private_tags` object: Import-wide private tags; never public or included in webhooks
    - `user` string[]
    - `organization` string[]
  - `rows` object[], required
    - `fingerprint` string, required
    - `filename` string, required
    - `file_size` integer
    - `credential_type` 'DEGREE' | 'LICENSE' | 'CERTIFICATE' | 'TRANSCRIPT' | 'PROFESSIONAL' | 'CPE' | 'CLE' | 'BADGE' | 'ATTESTATION' | 'FINANCIAL' | 'LEGAL' | 'INSURANCE' | 'SEC_FILING' | 'PATENT' | 'REGULATION' | 'PUBLICATION' | 'CHARITY' | 'ACCREDITATION' | 'FINANCIAL_ADVISOR' | 'BUSINESS_ENTITY' | 'RESUME' | 'MEDICAL' | 'MILITARY' | 'IDENTITY' | 'CONTRACT_PRESIGNING' | 'CONTRACT_POSTSIGNING' | 'OTHER'
    - `metadata` object: PII-stripped extraction/source metadata. Reserved private keys and underscore-prefixed keys are dropped; invalid public evidence claims are rejected per row.
    - `fingerprint_provided` boolean, required: True only when the imported fingerprint was computed from document bytes; false remains unclassified.
    - `recipient_email` string, email: Optional recipient assignment. Assigns the record to that third party and can cause an activation email to be sent to that address. Requires owner/admin authority for the selected organization; without it the row is still anchored and reports recipient_provisioning_forbidden.
    - `recipient_name` string

## Response `200`

Every row created or idempotently skipped

- object
  - `total` integer, required
  - `created` integer, required
  - `skipped` integer, required
  - `failed` integer, required
  - `recipient_link_failed` integer: Rows whose anchor committed but whose recipient did not resolve. Already included in created/skipped; never in failed. Counts rows whose recipient was never linked AND rows that were linked but whose invitation did not go out - see each row reason.
  - `results` object[], required
    - `fingerprint` string, required
    - `status` 'created' | 'skipped' | 'failed' | 'created_recipient_failed' | 'skipped_recipient_failed', required: The *_recipient_failed values mean the anchor exists and must not be re-submitted; the recipient did not resolve. The status does not say whether the recipient was linked - the reason code does. The anchor_recipients link commits before the activation email is sent, so recipient_activation_* reasons mean the recipient WAS linked and only the invitation did not go out (or its delivery is unknown), while reasons thrown at or before the link insert mean it was not linked. recipient_provisioning_forbidden means the caller may not assign recipients at all.
    - `public_id` string
    - `reason` string: Bounded machine-readable failure code
    - `instant_status` 'QUEUED' | 'PROCESSING' | 'NEEDS_CREDIT' | 'RETRYABLE' | 'HELD' | 'SUBMITTED' | 'FAILED'
    - `recipient_status` 'linked' | 'activation_pending': Present only when the row carried a recipient and it was linked. activation_pending means the recipient is a new, unconfirmed account that was invited to activate; linked means an existing account.

## Other responses

- `207`: Bounded partial result; at least one row failed while successful rows remain committed and retry-safe
- `400`: Invalid request
- `401`: Authentication required
- `403`: Insufficient permissions
- `429`: Import request rate limit exceeded
- `503`: API not enabled (feature flag off)

---

[API](https://skmtc.dev/arkova/apis/arkova-verification-api.md) · [All operations](https://skmtc.dev/arkova/apis/arkova-verification-api/llms.txt) · [OpenAPI document](https://skmtc.dev/arkova/apis/arkova-verification-api/revisions/a14858d1efd4?raw)
