canonical: https://jentic.com/apis/documents.resistant.ai/resistant-ai

# Documents Resistant Resistant Documents API

The Resistant Documents API analyses uploaded documents for fraud, content integrity, and quality issues. A typical interaction has three stages: create a submission to obtain a pre-signed upload URL, PUT the document to that URL, then poll the analysis result endpoints (fraud, content, quality, decision, classification, report) using the submission_id. Authentication is OAuth 2.0, and Resistant.ai recommends polling with exponential backoff. The API supports identity-document and financial-document fraud detection workflows, KYC pipelines, and compliance review systems.

## For AI agents

Submit a document for fraud analysis, fetch fraud, quality, and adaptive-decision results, and post feedback through the Resistant Documents OAuth-protected API.

## Scope

Does not handle biometric liveness, OCR field extraction, or sanctions screening - use for document fraud, quality, and adaptive-decision analysis only.

## Capabilities

- Create a submission and receive a pre-signed upload URL via POST `/v2/submission`
- Attach metadata to a submission via PUT `/v2/submission/{submission_id}/characteristics`
- Fetch fraud analysis results with GET `/v2/submission/{submission_id}/fraud`
- Retrieve quality and content scores for a submission
- Get an adaptive decision verdict via GET `/v2/submission/{submission_id}/decision`
- Submit feedback on analysis accuracy with PUT `/v2/submission/{submission_id}/feedback`

## Use cases

### Document Fraud Detection in KYC

Run uploaded identity documents through the three-step submission flow (create submission, upload via the pre-signed URL, poll /fraud) to flag forgeries, manipulations, and synthetic documents in a KYC pipeline. The API issues a stable submission_id you can store alongside the customer record. Polling with exponential backoff keeps load low while the analysis runs.

Example prompt: POST `/v2/submission`, PUT the document to the returned upload_url, then poll GET `/v2/submission/{submission_id}/fraud` until status is final and capture the fraud verdict.

### Adaptive Decisioning

Use GET `/v2/submission/{submission_id}/decision` to retrieve a single adaptive verdict that combines fraud, quality, and content signals. This is the most direct path for systems that want one yes/no/review output rather than each component score, suitable for automated review queues.

Example prompt: GET `/v2/submission/{submission_id}/decision` after upload completes and route the document to auto-approve, manual-review, or reject based on the verdict.

### Quality and Content Inspection

Fetch quality and content scores via GET `/v2/submission/{submission_id}/quality` and /content to assess whether a document is legible and contains the expected fields before it enters downstream OCR or extraction. Combined with /classification, an integration can route the right documents to the right processors.

Example prompt: After submission, call GET `/v2/submission/{submission_id}/quality` and /classification, and reject any document where quality is below threshold before invoking OCR.

### AI Agent Compliance Review via Jentic

An AI agent uses Jentic to search for fraud-detection intents, load the Resistant Documents operations, and orchestrate the submit-upload-poll flow while Jentic manages the OAuth token. This lets compliance agents triage suspect documents without holding the client secret in their runtime context.

Example prompt: Search Jentic for 'check a document for fraud', execute the create-submission, upload, and fraud-poll sequence, and write the verdict to the case record.

## Key endpoints

| Method | Path | Description |
| --- | --- | --- |
| POST | `/v2/submission` | Create a submission and get an upload URL |
| GET | `/v2/submission/{submission_id}/fraud` | Fetch fraud result |
| GET | `/v2/submission/{submission_id}/decision` | Fetch adaptive decision |
| GET | `/v2/submission/{submission_id}/quality` | Fetch quality result |
| GET | `/v2/submission/{submission_id}/classification` | Fetch document classification |
| PUT | `/v2/submission/{submission_id}/feedback` | Add analysis feedback |

## Key resources

- **Submission** — Create, characterise, and delete document submissions
- **Fraud** — Fetch fraud analysis verdicts for a submission
- **Quality** — Retrieve document quality and legibility scores
- **Decision** — Adaptive yes/no/review verdicts combining all signals
- **Feedback** — Submit and retrieve analyst feedback on analyses

## Why Jentic

- **Setup:** Wiring the Resistant Documents API by hand means running its OAuth2 token exchange, carrying the bearer token, and sequencing submission, upload, and result-poll calls yourself before you get a fraud verdict. Through Jentic you install once, import the Resistant Documents API from the API Directory, store the OAuth client credentials once, and your agent calls it.
- **Permission scoping:** Resistant Documents puts the submission id in the URL path (`/v2/submission/{submission_id}/fraud`), so a rule can pin your agent to one submission: it reads that submission's fraud, quality, decision, and classification results and nothing else. You choose the operations it may call, so writing feedback is not included unless you add it.
- **Credential handling:** Your Resistant Documents OAuth client credentials are stored once, encrypted, by your own Jentic One instance and injected at execution time. They never enter the agent's prompt, logs, or context.
- **Discovery method:** Agents search Jentic by intent such as 'check a document for fraud', and Jentic returns the create-submission and result operations with their input schemas so the agent calls the right endpoint without browsing the reference docs.

## Related APIs

- **Onfido** — Identity verification including document and biometric checks
- **Veriff** — End-to-end identity verification SaaS
- **Affinda** — Document data extraction and OCR

## FAQ

### What authentication does the Resistant Documents API use?

OAuth 2.0. Clients exchange their credentials for an access token and pass it as a Bearer token on each call. Through Jentic, the OAuth client credentials are stored encrypted in the vault and tokens are minted at execution time so the agent never holds the client secret.

### Can I detect manipulated identity documents with the Resistant Documents API?

Yes. Create a submission via POST `/v2/submission`, upload the document to the returned pre-signed URL with PUT, then poll GET `/v2/submission/{submission_id}/fraud` for the fraud verdict including manipulation, synthetic, and tampering signals.

### What are the rate limits for the Resistant Documents API?

The spec does not declare explicit rate limits. Resistant.ai recommends polling result endpoints with exponential backoff to avoid overloading the analysis engine while a submission is processing.

### How do I run a fraud check through the Resistant Documents API via Jentic?

Run pip install jentic and search for 'check a document for fraud'. Jentic returns the create-submission, upload, and fraud-poll operations. Execute them in order; Jentic handles the OAuth token exchange and injects the Bearer header automatically.

### Can I get a single decision instead of separate scores?

Yes. GET `/v2/submission/{submission_id}/decision` returns an adaptive verdict that combines fraud, quality, and content signals into one output, useful when you want a single approve/review/reject answer.

### How do I submit feedback on an analysis result?

PUT `/v2/submission/{submission_id}/feedback` writes feedback for the submission. GET on the same path retrieves previously submitted feedback. This helps tune the model when analyst review confirms or contradicts the verdict.

### Can I limit what my agent is allowed to do with the Resistant Documents API?

Yes. Because you run Jentic One yourself, your own rules decide which Resistant Documents operations and credentials the agent may use. Since the submission id sits in the URL path, you can pin the agent to a single submission and let it read only that submission's fraud, quality, decision, and classification results. You pick the operations it may call, so writing feedback via PUT `/v2/submission/{submission_id}/feedback` is excluded unless you explicitly allow it.
