Resistant AI Submission API
The Submission API from Resistant AI — 10 operation(s) for submission.
The Submission API from Resistant AI — 10 operation(s) for submission.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/resistant-ai-submission-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: Resistant Documents Submission API
version: 2.0.0b
description: '
Resistant Documents provides this API to programmatically interact with its document analysis engine.
Interaction with the API can be divided into three phases:
1. Creating document submission
2. Uploading a file for for analysis to an address returned from step 1.
3. Fetching analysis results
In the first step, the submission is created by posting to the `/v2/submission` endpoint. The response contains a `submission_id` uniquely identifying the document to be analyzed throughout the entire interaction, and is used to fetch analysis results later.
Submission response also returns `upload_url` containing a pre-signed URL. This URL should be used to upload the actual document to be analyzed in the second step. Please note the document has to be uploaded using HTTP `PUT` method with `Content-Type` HTTP header set to `application/octet-stream`.
In the last step, client should repeatedly poll using the `/v2/submission/{submission_id}/fraud` endpoint for analysis results. The best practice is to use polling with an [exponential back-off](https://en.wikipedia.org/wiki/Exponential_backoff) to reduce load on the API.
# Authentication
<SecurityDefinitions />'
servers:
- url: https://{environment}.resistant.ai
variables:
environment:
default: api.documents
enum:
- api.documents
- api.us-1.documents
- api.ca-1.documents
- api.ap-2.documents
- api.ap-3.documents
- api.documents.testing
tags:
- name: Submission
paths:
/v2/submission:
post:
summary: Create a submission
description: Create a new submission for a document to be analyzed
operationId: createSubmission
security:
- OAuth2:
- submissions.write
responses:
'200':
description: Submission created successfully
content:
application/json:
schema:
$ref: '#/components/schemas/SubmissionResponse'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'415':
$ref: '#/components/responses/UnsupportedMediaType'
'429':
$ref: '#/components/responses/TooManyRequests'
requestBody:
required: false
content:
application/json:
schema:
$ref: '#/components/schemas/SubmissionRequest'
tags:
- Submission
/v2/submission/{submission_id}/characteristics:
put:
summary: Add submission characteristics
operationId: putSubmissionCharacteristics
description: 'Attach submission characteristics to the submission. Submission characteristics are properties associated with the <i>original</i> submission of the document (i.e., from the end user).
In descriptions of the properties, "user" refers to the person who initially submitted the document, "customer" refers to a customer of Resistant.ai using this API.
Calling this endpoint is only allowed if `enable_submission_characteristics` is set to `true` when creating the submission. When submission characteristics are enabled for the submission, submitting then is <b>required</b> (the document will not be analyzed without them).'
security:
- OAuth2:
- submissions.write
parameters:
- in: path
name: submission_id
required: true
schema:
type: string
responses:
'204':
description: Submission characteristics were submitted successfully
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'415':
$ref: '#/components/responses/UnsupportedMediaType'
'429':
$ref: '#/components/responses/TooManyRequests'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/SubmissionCharacteristicsRequest'
tags:
- Submission
/v2/submission/{submission_id}/fraud:
get:
summary: Fetch fraud result
operationId: getFraud
description: Fetch fraud analysis result
security:
- OAuth2:
- submissions.read
parameters:
- in: query
name: with_metadata
description: Enables indicator medatadata in the response object
required: false
schema:
type: boolean
default: false
- in: path
name: submission_id
required: true
schema:
type: string
responses:
'200':
description: Asynchronous processing finished (either with a success or an error). Result of the processing is described by the specific response object.
content:
application/json:
schema:
$ref: '#/components/schemas/AnalysisResponse'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'415':
$ref: '#/components/responses/UnsupportedMediaType'
'429':
$ref: '#/components/responses/TooManyRequests'
tags:
- Submission
/v2/submission/{submission_id}/content:
get:
summary: Fetch content result [limited]
description: Fetch content extraction result
operationId: getContent
security:
- OAuth2:
- submissions.read
parameters:
- in: path
name: submission_id
required: true
schema:
type: string
responses:
'200':
description: Asynchronous processing finished (either with a success or an error). Result of the processing is described by specific response object.
content:
application/json:
schema:
$ref: '#/components/schemas/ContentResponse'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'415':
$ref: '#/components/responses/UnsupportedMediaType'
'429':
$ref: '#/components/responses/TooManyRequests'
tags:
- Submission
/v2/submission/{submission_id}/quality:
get:
summary: Fetch quality result
operationId: getQuality
security:
- OAuth2:
- submissions.read
parameters:
- in: path
name: submission_id
required: true
schema:
type: string
responses:
'200':
description: Asynchronous processing finished (either with a success or an error). Result of the processing is described by specific response object.
content:
application/json:
schema:
$ref: '#/components/schemas/QualityResponse'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'415':
$ref: '#/components/responses/UnsupportedMediaType'
'429':
$ref: '#/components/responses/TooManyRequests'
tags:
- Submission
/v2/submission/{submission_id}/decision:
get:
summary: Fetch Adaptive Decision result
description: Fetch Adaptive Decision result
operationId: getDecision
security:
- OAuth2:
- submissions.read
parameters:
- in: path
name: submission_id
required: true
schema:
type: string
- in: query
name: embed
description: Comma-separated list of `decision_inputs` that should include the full data in its `data` attribute, e.g. `?embed=fraud`.
example: fraud
required: false
schema:
type: string
responses:
'200':
description: Results of Adaptive Decision if Adaptive Decision was enabled for the submission.
content:
application/json:
schema:
$ref: '#/components/schemas/AdaptiveDecisionResponse'
'400':
description: Bad request. Submission must be created with `enable_decision` flag set to `true`.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
description: Not found. Submission doesn't exist or verdict is not ready yet.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'415':
$ref: '#/components/responses/UnsupportedMediaType'
'429':
$ref: '#/components/responses/TooManyRequests'
tags:
- Submission
/v2/submission/{submission_id}/classification:
get:
summary: Fetch document classification
operationId: getClassification
description: Fetch classification of the type of the submitted document
security:
- OAuth2:
- submissions.read
parameters:
- in: path
name: submission_id
required: true
schema:
type: string
responses:
'200':
description: Results of document type classification if classification analysis was enabled for the submission.
content:
application/json:
schema:
$ref: '#/components/schemas/ClassificationResponse'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'429':
$ref: '#/components/responses/TooManyRequests'
tags:
- Submission
/v2/submission/{submission_id}/report:
get:
summary: Fetch report [preview]
operationId: getReport
description: Fetch fraud analysis report of the submitted document
security:
- OAuth2:
- submissions.read
parameters:
- in: path
name: submission_id
required: true
schema:
type: string
- in: query
name: include_decision
description: Include Adaptive Decision result in report
schema:
type: boolean
responses:
'200':
description: Download URL to get the fraud analysis report.
content:
application/json:
schema:
$ref: '#/components/schemas/ReportResponse'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'409':
description: The report cannot be downloaded because the fraud analysis or adaptive decision was not completed successfully or was skipped.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'429':
$ref: '#/components/responses/TooManyRequests'
tags:
- Submission
/v2/submission/{submission_id}:
delete:
summary: Delete submission
description: Permanently deletes the submission. Can be used, e.g., to remove a document before the configured retention period.
operationId: deleteSubmission
security:
- OAuth2:
- submissions.write
parameters:
- in: path
name: submission_id
required: true
schema:
type: string
responses:
'204':
description: Submission deleted.
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
description: Submission doesn't exist.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'409':
description: Submission cannot be deleted while it is being processed. Retry the request later.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'415':
$ref: '#/components/responses/UnsupportedMediaType'
'429':
$ref: '#/components/responses/TooManyRequests'
tags:
- Submission
/v2/submission/{submission_id}/feedback:
put:
summary: Add analysis feedback
description: "Add custom feedback for the document analysis result. \n\nAll custom feedback provided for a document must be reviewed by the customer before submission to ensure it does not contain any Personally Identifiable Information (PII). Submitted feedback will be securely stored indefinitely to support ongoing product improvements."
operationId: putFeedback
security:
- OAuth2:
- submissions.write
parameters:
- in: path
name: submission_id
required: true
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/FeedbackRequest'
responses:
'200':
description: Custom feedback for fraud analysis.
content:
application/json:
schema:
$ref: '#/components/schemas/FeedbackResponse'
'400':
description: Bad request. Feedback must be sent with all required properties.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
description: Not found. Submission doesn't exist.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'415':
$ref: '#/components/responses/UnsupportedMediaType'
'429':
$ref: '#/components/responses/TooManyRequests'
tags:
- Submission
get:
summary: Get analysis feedback
description: Get custom feedback for the document analysis result previously stored with a PUT request to this endpoint.
operationId: getFeedback
security:
- OAuth2:
- submissions.read
parameters:
- in: path
name: submission_id
required: true
schema:
type: string
responses:
'200':
description: Custom feedback for fraud analysis.
content:
application/json:
schema:
$ref: '#/components/schemas/FeedbackResponse'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
description: Not found. Submission or feedback doesn't exist.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'415':
$ref: '#/components/responses/UnsupportedMediaType'
'429':
$ref: '#/components/responses/TooManyRequests'
tags:
- Submission
components:
schemas:
IndicatorMetadata:
title: Indicator metadata
description: Additional metadata associated with the indicator. <b>Content of metadata evolves and can change without prior notice</b>. It is intended mainly for visualization in UI and tracking purposes.
discriminator:
propertyName: type
mapping:
DataOnly: '#/components/schemas/DataOnlyIndicatorMetadata'
ElementsCollection: '#/components/schemas/ElementsCollectionIndicatorMetadata'
CombiningIndicatorMetadata: '#/components/schemas/CombiningIndicatorMetadata'
anyOf:
- $ref: '#/components/schemas/DataOnlyIndicatorMetadata'
- $ref: '#/components/schemas/ElementsCollectionIndicatorMetadata'
- $ref: '#/components/schemas/CombiningIndicatorMetadata'
AnalysisFeedback:
title: Analysis Feedback
description: Type of feedback on the result of document analysis.
enum:
- CORRECT
- NOT_CORRECT
type: string
AnalysisResponse:
title: Fraud analysis response
discriminator:
propertyName: status
mapping:
SUCCESS: '#/components/schemas/AnalysisSuccessResponse'
FAILED: '#/components/schemas/PipelineFailedResponse'
INVALID_INPUT: '#/components/schemas/PipelineInvalidInputResponse'
SKIPPED: '#/components/schemas/PipelineSkippedResponse'
anyOf:
- $ref: '#/components/schemas/AnalysisSuccessResponse'
- $ref: '#/components/schemas/PipelineFailedResponse'
- $ref: '#/components/schemas/PipelineInvalidInputResponse'
- $ref: '#/components/schemas/PipelineSkippedResponse'
FraudScore:
title: FraudScore
description: Fraud score produced by the document analysis.
enum:
- NORMAL
- TRUSTED
- WARNING
- HIGH_RISK
type: string
UtilityBillType:
title: UtilityBillType
description: An enumeration.
enum:
- unknown
- electricity
- electricity_gas_water
- mobile_phone
- internet
- internet_mobile_television
- municipal_services
type: string
SpecialPayment:
title: SpecialPayment
type: object
properties:
description:
title: Special payment description
type: string
amount:
title: Payment amount
type: number
identification:
title: Payment ID
type:
- string
- 'null'
required:
- description
- amount
AdaptiveDecisionNonSuccessResponse:
title: Adaptive Decision failed response
type: object
properties:
status:
title: Status
description: '`INVALID_INPUT` status indicates the submitted document is not parsable.
`INVALID_PIPELINE_CONFIG` status indicates that some key part of the pipeline is missing.
`FAILED` status indicates document analysis or Adaptive Decision failed.
`SKIPPED` status indicates that the Adaptive Decision has not run and was skipped.'
enum:
- FAILED
- INVALID_INPUT
- INVALID_PIPELINE_CONFIG
- SKIPPED
type: string
message:
title: Error message
minLength: 0
maxLength: 256
type: string
adaptive_decision_version:
title: Version of Adaptive Decision configuration
type: string
required:
- status
- adaptive_decision_version
SerialFraudIndicatorAttributes:
title: Additional attributes for Serial fraud indicator
properties:
indicator_id:
title: Indicator ID
type: string
enum:
- in_transaction_cluster
- in_transaction_cluster_benevolent
serial_fraud_cluster_id:
title: Serial fraud cluster ID
type: string
cluster_submission_ids_sample:
title: Other submissions in the same serial fraud cluster
type: array
items:
type: string
cluster_query_ids_sample:
title: Other query ids in the same serial fraud cluster
type: array
items:
type: string
QualityIndicator:
title: Quality indicator
type: object
properties:
indicator_id:
title: Indicator ID
description: Unique identifier for the indicator
minLength: 0
maxLength: 256
type: string
type:
title: Indicator type
description: Type of indicator.
$ref: '#/components/schemas/IndicatorType'
category:
title: Indicator category
description: Category of indicator (e.g. `modifications`, `text_hiding`, etc.)
minLength: 0
maxLength: 256
type: string
title:
title: Indicator title
minLength: 0
maxLength: 256
type: string
description:
title: Indicator description
description: Detailed description of the indicator.
minLength: 0
maxLength: 2048
type: string
metadata:
title: Indicator metadata
$ref: '#/components/schemas/IndicatorMetadata'
type:
- object
- 'null'
origin:
title: Origin
enum:
- quality
type: string
required:
- indicator_id
- type
- category
- title
- description
- origin
BBoxGroupsMetadataElement:
title: Metadata element with multiple bounding boxes
type: object
properties:
type:
title: Type
enum:
- BBoxGroups
type: string
page_id:
title: Page id
description: Number of the page corresponding to the modification. Note that first page has page_id = 0. In case of images, the page_id is always 0.
type: integer
bbox:
title: Bounding boxes
description: Group of bounding boxes corresponding to given modification, e.g. copy-move detection where single character is copied to multiple places
type: array
items:
$ref: '#/components/schemas/BoundingBox'
required:
- type
- page_id
- bbox
HasLogoIndicatorAttributes:
title: Additional attributes for Has logo indicator
properties:
indicator_id:
title: Indicator ID
type: string
enum:
- has_logo
logo_primary:
title: Primary detected logo
$ref: '#/components/schemas/LogoAttributes'
detected_logos:
title: List of detected logos
type: array
items:
$ref: '#/components/schemas/LogoAttributes'
required:
- indicator_id
- detected_logos
DocumentClassificationScore:
title: Document type
description: Toplevel score for classification
type:
- string
- 'null'
enum:
- CLASSIFIED
- DOCUMENT_MISSING
- NOT_CLASSIFIED
TextMetadataElement:
title: Metadata element with bounding box and additional text data
type: object
properties:
type:
title: Type
enum:
- BBoxWithText
type: string
page_id:
title: Page id
description: Number of the page corresponding to the modification. Note that first page has page_id = 0. In case of images, the page_id is always 0.
type: integer
bbox:
title: Bounding box
description: Bounding box corresponding to given modification
$ref: '#/components/schemas/BoundingBox'
text:
title: Text
type:
- string
- 'null'
required:
- type
- page_id
- bbox
- text
AnalysisSuccessResponse:
title: Analysis success response
type: object
properties:
status:
title: Status
enum:
- SUCCESS
type: string
analysis_time:
title: Analysis time
description: Timestamp of analysis
type: string
file_type:
title: File type
description: General type of the input file
$ref: '#/components/schemas/FileType'
mime_type:
title: Mime type
description: Mime type of the input file, e.g. `application/pdf`, `image/jpeg`, etc.
minLength: 0
maxLength: 256
type: string
deployment_version:
title: Deployment version
description: Version of quality engine used for analysis
minLength: 0
maxLength: 256
type: string
query_id:
title: Query ID
description: Customer's own submission ID. This field may contain customer's own internal ID of analyzed file (e.g. ID in database).
minLength: 0
maxLength: 2048
type:
- string
- 'null'
sha256:
title: File sha256
description: Sha256 of the input file
minLength: 64
maxLength: 64
type: string
filtered_parsed_pages:
title: Filtered pages
description: List of pages that were selected from document for processing, empty list means all pages were selected
type: array
items:
type: integer
minItems: 0
num_pages:
title: Number of pages in document
description: Number of pages in submitted document. Note that, for images, this is equal to 1
type: integer
score:
title: Overall score
description: Overall score of analyzed sample. A TRUSTED score is attributed to documents where the system has identified a reason to trust them. A NORMAL score describes the documents where the system has no particular reason to trust or distrust them. A WARNING score is given to documents that are identified as more likely to have been modified, such as scanned documents. A HIGH_RISK score identifies the documents where the system has identified modifications that are frequently associated with fraud or forgery attempts.
$ref: '#/components/schemas/FraudScore'
sample_metadata:
title: Sample metadata
description: Metadata extracted from the analyzed file. This field may contain various information such as creation date, software used to create the file, etc.
$ref: '#/components/schemas/SampleMetadata'
indicators:
title: Indicators
description: Indicators contains detailed information about the specific results of our analysis. This field contains detailed observations that the system was able to make about the file. Some indicators may be positive and may increase the Trust score, while the others would be negative and would increase the Risk.
type: array
items:
$ref: '#/components/schemas/Indicator'
document_class:
title: Document class(Deprecated)
$ref: '#/components/schemas/DocumentClassType'
required:
- status
- analysis_time
- file_type
- mime_type
- deployment_version
- query_id
- sha256
- score
- sample_metadata
- indicators
- filtered_parsed_pages
- num_pages
InvoiceContent:
title: Invoice content
type: object
properties:
content:
title: Non-normalized invoice content
type: object
additionalProperties: {}
content_type:
title: Content Type
enum:
- invoice
type: string
required:
- content
- content_type
CardGeneration:
title: CardGeneration
description: An enumeration.
enum:
- UNKNOWN
- ISSUED_BEFORE_2012
- ISSUED_AFTER_2012
type: string
SubmissionRequest:
title: SubmissionRequest
type: object
properties:
query_id:
title: Query ID
description: User-defined ID of analyzed file - typically refers to internal ID of the analyzed document in user's CMS. Please ensure the query_id of any document is reviewed prior to submitting to ensure no PII is shared. Query_id is used for subsequent indexing of outputs from the document forensics analysis.
minLength: 0
maxLength: 1024
type:
- string
- 'null'
pipeline_configuration:
title: Pipeline configuration enum
description: Type of analysis pipeline to execute.
default: FRAUD_ONLY
$ref: '#/components/schemas/PipelineConfiguration'
enable_decision:
title: Adaptive Decision enable flag
description: '`true` to enable Adaptive Decision for the submitted document, `false` to disable it'
default: false
type: boolean
enable_submission_characteristics:
title: Submission characteristics enable flag.
description: '`true` to enable attachment of submission characteristics for the submitted document, `false` to disable it (see `submission_characteristics_upload_url` field in the response object)'
default: false
type: boolean
MaritalStatus:
title: MaritalStatus
description: An enumeration.
enum:
- UNKNOWN
- SINGLE
- MARRIED
- DIVORCED
- WIDOWED
type: string
AdaptiveDecisionSuccessResponse:
title: Adaptive Decision success response
type: object
properties:
status:
title: Status
description: '`SUCCESS` status indicates the Adaptive Decision result is available'
type: string
enum:
- SUCCESS
decision:
title: Decision
type: string
description: 'Value range of this field is determined by tenant configuration, however default values are enum: `APPROVED`, `DECLINED`, `MANUAL_REVIEW`'
decision_inputs:
title: Decision inputs
description: Inputs the decision is based on
type: object
properties:
fraud:
title: Fraud analysis result
description: Link to fraud analysis result. Full `data` is only included if requested with the `embed` query string parameter
type: object
properties:
url:
title: Fraud analysis result URL
description: URL where full fraud analysis can be retrieved
example: /v2/submission/submission123/fraud
type: string
format: uri
data:
$ref: '#/components/schemas/AnalysisResponse'
required:
- url
adaptive_decision_version:
title: Version of Adaptive Decision configuration
type: string
reason:
title: Customer-specific explanation of the decision
type:
- object
- 'null'
properties:
sub_reason:
type: object
properties:
value:
title: Reason identifier
description: Machine-readable identifier of the reason
type: string
maxLength: 1024
label:
title: Reason description
description: Human-readable description of the reason
type: string
maxLength: 1024
required:
- status
- decision
- decision_inputs
- adaptive_decision_version
Error:
title: Error
type: object
properties:
message:
title: Error message
description: Detailed error message
minLength: 0
maxLength: 512
type: string
required:
- message
DocumentType:
title: DocumentType
description: An enumeration.
enum:
- mixed
- unknown
- account_confirmation
- account_statement
- bank_details
- delivery_note
- company_detail
- earnings_confirmation
- employer_id
# --- truncated at 32 KB (105 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/resistant-ai/refs/heads/main/openapi/resistant-ai-submission-api-openapi.yml