# Batch create annotations Source: https://docs.affinda.com/api-reference/annotations/batch-create-annotations https://api.affinda.com/static/v3/api_spec.yaml post /v3/annotations/batch_create Batch create annotations # Batch delete annotations Source: https://docs.affinda.com/api-reference/annotations/batch-delete-annotations https://api.affinda.com/static/v3/api_spec.yaml post /v3/annotations/batch_delete Batch delete annotations # Batch update annotations Source: https://docs.affinda.com/api-reference/annotations/batch-update-annotations https://api.affinda.com/static/v3/api_spec.yaml post /v3/annotations/batch_update Batch update annotations # Create a annotation Source: https://docs.affinda.com/api-reference/annotations/create-a-annotation https://api.affinda.com/static/v3/api_spec.yaml post /v3/annotations Create a annotation # Delete an annotation Source: https://docs.affinda.com/api-reference/annotations/delete-an-annotation https://api.affinda.com/static/v3/api_spec.yaml delete /v3/annotations/{id} Deletes the specified annotation from the database. # Get list of all annotations Source: https://docs.affinda.com/api-reference/annotations/get-list-of-all-annotations https://api.affinda.com/static/v3/api_spec.yaml get /v3/annotations Returns your annotations. # Get specific annotation Source: https://docs.affinda.com/api-reference/annotations/get-specific-annotation https://api.affinda.com/static/v3/api_spec.yaml get /v3/annotations/{id} Return a specific annotation. # Update an annotation Source: https://docs.affinda.com/api-reference/annotations/update-an-annotation https://api.affinda.com/static/v3/api_spec.yaml patch /v3/annotations/{id} Update data of an annotation. # Add value for a data source Source: https://docs.affinda.com/api-reference/data-sources/add-value-for-a-data-source https://api.affinda.com/static/v3/api_spec.yaml post /v3/mapping_data_sources/{identifier}/values Adds a value to a mapping data source # Create a data source Source: https://docs.affinda.com/api-reference/data-sources/create-a-data-source https://api.affinda.com/static/v3/api_spec.yaml post /v3/mapping_data_sources Create a custom mapping data source. # Delete specific data source Source: https://docs.affinda.com/api-reference/data-sources/delete-specific-data-source https://api.affinda.com/static/v3/api_spec.yaml delete /v3/mapping_data_sources/{identifier} Delete the specified mapping data source from the database. # Delete specific data source value Source: https://docs.affinda.com/api-reference/data-sources/delete-specific-data-source-value https://api.affinda.com/static/v3/api_spec.yaml delete /v3/mapping_data_sources/{identifier}/values/{value} Delete the specified mapping data source value from the database. # Get specific data source Source: https://docs.affinda.com/api-reference/data-sources/get-specific-data-source https://api.affinda.com/static/v3/api_spec.yaml get /v3/mapping_data_sources/{identifier} Return a specific mapping data source. # Get specific data source value Source: https://docs.affinda.com/api-reference/data-sources/get-specific-data-source-value https://api.affinda.com/static/v3/api_spec.yaml get /v3/mapping_data_sources/{identifier}/values/{value} Return a specific mapping dta source value. # List data sources Source: https://docs.affinda.com/api-reference/data-sources/list-data-sources https://api.affinda.com/static/v3/api_spec.yaml get /v3/mapping_data_sources Returns the list of all custom mapping data sources. # List values for a data source Source: https://docs.affinda.com/api-reference/data-sources/list-values-for-a-data-source https://api.affinda.com/static/v3/api_spec.yaml get /v3/mapping_data_sources/{identifier}/values Returns the list of all values in a mapping data source # Replace values for a data source Source: https://docs.affinda.com/api-reference/data-sources/replace-values-for-a-data-source https://api.affinda.com/static/v3/api_spec.yaml put /v3/mapping_data_sources/{identifier}/values Replaces the list of all values in a mapping data source Note: For large data sources (e.g. > 1000 values), it can take a few minutes after the request completes for the new values to be searchable. # Update specific data source value Source: https://docs.affinda.com/api-reference/data-sources/update-specific-data-source-value https://api.affinda.com/static/v3/api_spec.yaml put /v3/mapping_data_sources/{identifier}/values/{value} Update the specified mapping data source value. # Create a collection Source: https://docs.affinda.com/api-reference/deprecated-end-points/create-a-collection https://api.affinda.com/static/v3/api_spec.yaml post /v3/collections Create a collection # Create a data point Source: https://docs.affinda.com/api-reference/deprecated-end-points/create-a-data-point https://api.affinda.com/static/v3/api_spec.yaml post /v3/data_points Create a custom data point. # Create a data point choice Source: https://docs.affinda.com/api-reference/deprecated-end-points/create-a-data-point-choice https://api.affinda.com/static/v3/api_spec.yaml post /v3/data_point_choices Create a custom data point choice. # Create a mapping Source: https://docs.affinda.com/api-reference/deprecated-end-points/create-a-mapping https://api.affinda.com/static/v3/api_spec.yaml post /v3/mappings Create a custom mapping. # Create data field for a collection along with a new data point. Source: https://docs.affinda.com/api-reference/deprecated-end-points/create-data-field-for-a-collection-along-with-a-new-data-point https://api.affinda.com/static/v3/api_spec.yaml post /v3/collections/{identifier}/create_data_field Create data field for a collection along with a new data point. # Delete a collection Source: https://docs.affinda.com/api-reference/deprecated-end-points/delete-a-collection https://api.affinda.com/static/v3/api_spec.yaml delete /v3/collections/{identifier} Deletes the specified collection from the database. # Delete a data point Source: https://docs.affinda.com/api-reference/deprecated-end-points/delete-a-data-point https://api.affinda.com/static/v3/api_spec.yaml delete /v3/data_points/{identifier} Deletes the specified data point from the database. # Delete a data point choice Source: https://docs.affinda.com/api-reference/deprecated-end-points/delete-a-data-point-choice https://api.affinda.com/static/v3/api_spec.yaml delete /v3/data_point_choices/{id} Deletes the specified data point choice from the database. # Delete specific mapping Source: https://docs.affinda.com/api-reference/deprecated-end-points/delete-specific-mapping https://api.affinda.com/static/v3/api_spec.yaml delete /v3/mappings/{identifier} Delete the specified mapping from the database. # Get data field for a collection assosciated with a data point. Source: https://docs.affinda.com/api-reference/deprecated-end-points/get-data-field-for-a-collection-assosciated-with-a-data-point https://api.affinda.com/static/v3/api_spec.yaml get /v3/collections/{identifier}/fields/{datapoint_identifier} Get a data field for a collection assosciated with a data point # Get list of all collections Source: https://docs.affinda.com/api-reference/deprecated-end-points/get-list-of-all-collections https://api.affinda.com/static/v3/api_spec.yaml get /v3/collections Returns your collections. # Get list of all data points Source: https://docs.affinda.com/api-reference/deprecated-end-points/get-list-of-all-data-points https://api.affinda.com/static/v3/api_spec.yaml get /v3/data_points Returns your custom data points as well as Affinda's off-the-shelf data points. # Get list of data point choices Source: https://docs.affinda.com/api-reference/deprecated-end-points/get-list-of-data-point-choices https://api.affinda.com/static/v3/api_spec.yaml get /v3/data_point_choices Returns available choices for a specific enum data point. # Get specific collection Source: https://docs.affinda.com/api-reference/deprecated-end-points/get-specific-collection https://api.affinda.com/static/v3/api_spec.yaml get /v3/collections/{identifier} Return a specific collection. # Get specific data point Source: https://docs.affinda.com/api-reference/deprecated-end-points/get-specific-data-point https://api.affinda.com/static/v3/api_spec.yaml get /v3/data_points/{identifier} Return a specific data point. # Get specific data point choice Source: https://docs.affinda.com/api-reference/deprecated-end-points/get-specific-data-point-choice https://api.affinda.com/static/v3/api_spec.yaml get /v3/data_point_choices/{id} Return a specific data point choice. # Get specific mapping Source: https://docs.affinda.com/api-reference/deprecated-end-points/get-specific-mapping https://api.affinda.com/static/v3/api_spec.yaml get /v3/mappings/{identifier} Return a specific mapping. # Get usage by collection Source: https://docs.affinda.com/api-reference/deprecated-end-points/get-usage-by-collection https://api.affinda.com/static/v3/api_spec.yaml get /v3/collections/{identifier}/usage Return monthly credits consumption of a collection. Deprecated: use `GET /v3/usage?organization={id}&document_type={id}` instead. The new endpoint returns a unified daily series and uses the modern "document type" terminology. # List mappings Source: https://docs.affinda.com/api-reference/deprecated-end-points/list-mappings https://api.affinda.com/static/v3/api_spec.yaml get /v3/mappings Returns the list of all custom data mappings. # Replace choices of a data point Source: https://docs.affinda.com/api-reference/deprecated-end-points/replace-choices-of-a-data-point https://api.affinda.com/static/v3/api_spec.yaml post /v3/data_point_choices/replace Replace choices of a data point. Existing choices and incoming choices are matched base on their `value`. New `value` will be created, existing `value` will be updated, and `value` not in incoming choices will be deleted. # Update a collection Source: https://docs.affinda.com/api-reference/deprecated-end-points/update-a-collection https://api.affinda.com/static/v3/api_spec.yaml patch /v3/collections/{identifier} Update data of a collection. # Update a data point Source: https://docs.affinda.com/api-reference/deprecated-end-points/update-a-data-point https://api.affinda.com/static/v3/api_spec.yaml patch /v3/data_points/{identifier} Update data of a data point. # Update a data point choice Source: https://docs.affinda.com/api-reference/deprecated-end-points/update-a-data-point-choice https://api.affinda.com/static/v3/api_spec.yaml patch /v3/data_point_choices/{id} Update data of a data point choice. # Update data field for a collection assosciated with a data point. Source: https://docs.affinda.com/api-reference/deprecated-end-points/update-data-field-for-a-collection-assosciated-with-a-data-point https://api.affinda.com/static/v3/api_spec.yaml patch /v3/collections/{identifier}/fields/{datapoint_identifier} Update data field for a collection assosciated with a data point # Update specific mapping Source: https://docs.affinda.com/api-reference/deprecated-end-points/update-specific-mapping https://api.affinda.com/static/v3/api_spec.yaml patch /v3/mappings/{identifier} Updates a specific mapping. # Create a document type Source: https://docs.affinda.com/api-reference/document-types/create-a-document-type https://api.affinda.com/static/v3/api_spec.yaml post /v3/document_types Create a new document type in the specified organization. # Delete a document type Source: https://docs.affinda.com/api-reference/document-types/delete-a-document-type https://api.affinda.com/static/v3/api_spec.yaml delete /v3/document_types/{identifier} Delete a document type. # Generate JSON schema from a document type Source: https://docs.affinda.com/api-reference/document-types/generate-json-schema-from-a-document-type https://api.affinda.com/static/v3/api_spec.yaml get /v3/document_types/{identifier}/json_schema Generate JSON schema from a document type. # Generate Pydantic models from a document type Source: https://docs.affinda.com/api-reference/document-types/generate-pydantic-models-from-a-document-type https://api.affinda.com/static/v3/api_spec.yaml get /v3/document_types/{identifier}/pydantic_models Generate Pydantic models from a document type. # Get a document type Source: https://docs.affinda.com/api-reference/document-types/get-a-document-type https://api.affinda.com/static/v3/api_spec.yaml get /v3/document_types/{identifier} Returns the details of a specific document type. # List document types Source: https://docs.affinda.com/api-reference/document-types/list-document-types https://api.affinda.com/static/v3/api_spec.yaml get /v3/document_types Returns a list of document types that the user has access to. # Update a document type Source: https://docs.affinda.com/api-reference/document-types/update-a-document-type https://api.affinda.com/static/v3/api_spec.yaml patch /v3/document_types/{identifier} Update an existing document type. # Delete a document Source: https://docs.affinda.com/api-reference/documents/delete-a-document https://api.affinda.com/static/v3/api_spec.yaml delete /v3/documents/{identifier} Deletes the specified document from the database. # Get list of all documents Source: https://docs.affinda.com/api-reference/documents/get-list-of-all-documents https://api.affinda.com/static/v3/api_spec.yaml get /v3/documents Returns all the document summaries for that user, limited to 300 per page. # Get redacted document Source: https://docs.affinda.com/api-reference/documents/get-redacted-document https://api.affinda.com/static/v3/api_spec.yaml get /v3/documents/{identifier}/redacted Get the redacted version of a document. The original document is not modified. # Get specific document Source: https://docs.affinda.com/api-reference/documents/get-specific-document https://api.affinda.com/static/v3/api_spec.yaml get /v3/documents/{identifier} Return a specific document. # Update a document Source: https://docs.affinda.com/api-reference/documents/update-a-document https://api.affinda.com/static/v3/api_spec.yaml patch /v3/documents/{identifier} Update file name, expiry time, or move to another collection, etc. # Upload a document for parsing Source: https://docs.affinda.com/api-reference/documents/upload-a-document-for-parsing https://api.affinda.com/static/v3/api_spec.yaml post /v3/documents Uploads a document for parsing via file upload or URL. When successful, returns an `identifier` in the response for subsequent use with the [/documents/{identifier}](#get-/v3/documents/-identifier-) endpoint to check processing status and retrieve results.
# Delete an invoice Source: https://docs.affinda.com/api-reference/invoice-extractor/delete-an-invoice https://api.affinda.com/static/v2/api_spec.yaml delete /v2/invoices/{identifier} Delete the specified invoice from the database. Note, any invoices deleted from the database will no longer be used in any tailored customer models. # Get list of all invoices Source: https://docs.affinda.com/api-reference/invoice-extractor/get-list-of-all-invoices https://api.affinda.com/static/v2/api_spec.yaml get /v2/invoices Returns all the invoice summaries for that user, limited to 300 per page. # Get parse results for a specific invoice Source: https://docs.affinda.com/api-reference/invoice-extractor/get-parse-results-for-a-specific-invoice https://api.affinda.com/static/v2/api_spec.yaml get /v2/invoices/{identifier} Returns all the parse results for that invoice if processing is completed. The `identifier` is the unique ID returned after POST-ing the invoice via the [/invoices](#post-/invoices) endpoint. # Upload an invoice for parsing Source: https://docs.affinda.com/api-reference/invoice-extractor/upload-an-invoice-for-parsing https://api.affinda.com/static/v2/api_spec.yaml post /v2/invoices Uploads an invoice for parsing. When successful, returns an `identifier` in the response for subsequent use with the [/invoices/{identifier}](#get-/invoices/-identifier-) endpoint to check processing status and retrieve results. # Delete a job description Source: https://docs.affinda.com/api-reference/job-description-parser/delete-a-job-description https://api.affinda.com/static/v2/api_spec.yaml delete /v2/job_descriptions/{identifier} Deletes the specified job description from the database # Get job description results for a specific job description file Source: https://docs.affinda.com/api-reference/job-description-parser/get-job-description-results-for-a-specific-job-description-file https://api.affinda.com/static/v2/api_spec.yaml get /v2/job_descriptions/{identifier} Returns all the results for that job description if processing is completed. The `identifier` is the unique ID returned after POST-ing the resume via the [/job_descriptions](#post-/job_descriptions) endpoint. # Get list of all job descriptions Source: https://docs.affinda.com/api-reference/job-description-parser/get-list-of-all-job-descriptions https://api.affinda.com/static/v2/api_spec.yaml get /v2/job_descriptions Returns all the job descriptions for that user, limited to 300 per page. # Update a job description's data Source: https://docs.affinda.com/api-reference/job-description-parser/update-a-job-descriptions-data https://api.affinda.com/static/v2/api_spec.yaml patch /v2/job_descriptions/{identifier} Update data of a job description. The `identifier` is the unique ID returned after POST-ing the job description via the [/job_descriptions](#post-/job_descriptions) endpoint. # Upload a job description for parsing Source: https://docs.affinda.com/api-reference/job-description-parser/upload-a-job-description-for-parsing https://api.affinda.com/static/v2/api_spec.yaml post /v2/job_descriptions Uploads a job description for parsing. When successful, returns an `identifier` in the response for subsequent use with the [/job_descriptions/{identifier}](#get-/job_descriptions/-identifier-) endpoint to check processing status and retrieve results. Job Descriptions can be uploaded as a file or a URL. In addition, data can be added directly if users want to upload directly without parsing any resume file. For uploading resume data, the `data` argument provided must be a JSON-encoded string. Data uploads will not impact upon parsing credits. # Get detail of an organization Source: https://docs.affinda.com/api-reference/organizations/get-detail-of-an-organization https://api.affinda.com/static/v3/api_spec.yaml get /v3/organizations/{identifier} Get detail of an organization. # Get list of all organizations Source: https://docs.affinda.com/api-reference/organizations/get-list-of-all-organizations https://api.affinda.com/static/v3/api_spec.yaml get /v3/organizations Returns all the organizations # Delete a resume Source: https://docs.affinda.com/api-reference/resume-parser/delete-a-resume https://api.affinda.com/static/v2/api_spec.yaml delete /v2/resumes/{identifier} Deletes the specified resume from the database # Get list of all resumes Source: https://docs.affinda.com/api-reference/resume-parser/get-list-of-all-resumes https://api.affinda.com/static/v2/api_spec.yaml get /v2/resumes Returns all the resume summaries for that user, limited to 300 per page. # Get parse results for a specific resume Source: https://docs.affinda.com/api-reference/resume-parser/get-parse-results-for-a-specific-resume https://api.affinda.com/static/v2/api_spec.yaml get /v2/resumes/{identifier} Returns all the parse results for that resume if processing is completed. The `identifier` is the unique ID returned after POST-ing the resume via the [/resumes](#post-/resumes) endpoint. # Update a resume's data Source: https://docs.affinda.com/api-reference/resume-parser/update-a-resumes-data https://api.affinda.com/static/v2/api_spec.yaml patch /v2/resumes/{identifier} Update data of a parsed resume. The `identifier` is the unique ID returned after POST-ing the resume via the [/resumes](#post-/resumes) endpoint. # Upload a resume for parsing Source: https://docs.affinda.com/api-reference/resume-parser/upload-a-resume-for-parsing https://api.affinda.com/static/v2/api_spec.yaml post /v2/resumes **New customers:** this endpoint is part of our legacy v2 API. We recommend using the [POST /documents](#post-/documents) endpoint from our updated API instead — it supports parsing of all document types (resumes, invoices, etc.) through a single, unified interface.

Uploads a resume for parsing. When successful, returns an `identifier` in the response for subsequent use with the [/resumes/{identifier}](#get-/resumes/-identifier-) endpoint to check processing status and retrieve results.
Resumes can be uploaded as a file or a URL. In addition, data can be added directly if users want to upload directly without parsing any resume file. For uploading resume data, the `data` argument provided must be a JSON-encoded string. Data uploads will not impact upon parsing credits. # Delete a redacted resume Source: https://docs.affinda.com/api-reference/resume-redactor/delete-a-redacted-resume https://api.affinda.com/static/v2/api_spec.yaml delete /v2/redacted_resumes/{identifier} Deletes the specified resume from the database # Get list of all redacted resumes Source: https://docs.affinda.com/api-reference/resume-redactor/get-list-of-all-redacted-resumes https://api.affinda.com/static/v2/api_spec.yaml get /v2/redacted_resumes Returns all the redacted resume information for that resume # Get redaction results for a specific resume Source: https://docs.affinda.com/api-reference/resume-redactor/get-redaction-results-for-a-specific-resume https://api.affinda.com/static/v2/api_spec.yaml get /v2/redacted_resumes/{identifier} Returns all the redaction results for that resume if processing is completed. The `identifier` is the unique ID returned after POST-ing the resume via the [/redacted_resumes](#post-/redacted_resumes) endpoint. # Upload a resume for redacting Source: https://docs.affinda.com/api-reference/resume-redactor/upload-a-resume-for-redacting https://api.affinda.com/static/v2/api_spec.yaml post /v2/redacted_resumes Uploads a resume for redacting. # Create a signed URL for the embeddable job description search tool Source: https://docs.affinda.com/api-reference/search-&-match--embedding/create-a-signed-url-for-the-embeddable-job-description-search-tool https://api.affinda.com/static/v2/api_spec.yaml post /v2/job_description_search/embed Create and return a signed URL of the job description search tool which then can be embedded on a web page. An optional parameter `config_override` can be passed to override the user-level configurations of the embeddable search tool. # Create a signed URL for the embeddable resume search tool Source: https://docs.affinda.com/api-reference/search-&-match--embedding/create-a-signed-url-for-the-embeddable-resume-search-tool https://api.affinda.com/static/v2/api_spec.yaml post /v2/resume_search/embed Create and return a signed URL of the resume search tool which then can be embedded on a web page. An optional parameter `config_override` can be passed to override the user-level configurations of the embeddable resume search tool. # Get the config for the logged in user's embeddable job description search tool Source: https://docs.affinda.com/api-reference/search-&-match--embedding/get-the-config-for-the-logged-in-users-embeddable-job-description-search-tool https://api.affinda.com/static/v2/api_spec.yaml get /v2/job_description_search/config Return configurations such as which fields can be displayed in the logged in user's embeddable job description search tool, what are their weights, what is the maximum number of results that can be returned, etc. # Get the config for the logged in user's embeddable resume search tool Source: https://docs.affinda.com/api-reference/search-&-match--embedding/get-the-config-for-the-logged-in-users-embeddable-resume-search-tool https://api.affinda.com/static/v2/api_spec.yaml get /v2/resume_search/config Return configurations such as which fields can be displayed in the logged in user's embeddable resume search tool, what are their weights, what is the maximum number of results that can be returned, etc. # Update the config for the logged in user's embeddable job description search tool Source: https://docs.affinda.com/api-reference/search-&-match--embedding/update-the-config-for-the-logged-in-users-embeddable-job-description-search-tool https://api.affinda.com/static/v2/api_spec.yaml patch /v2/job_description_search/config Update configurations such as which fields can be displayed in the logged in user's embeddable job description search tool, what are their weights, what is the maximum number of results that can be returned, etc. # Update the config for the logged in user's embeddable resume search tool Source: https://docs.affinda.com/api-reference/search-&-match--embedding/update-the-config-for-the-logged-in-users-embeddable-resume-search-tool https://api.affinda.com/static/v2/api_spec.yaml patch /v2/resume_search/config Update configurations such as which fields can be displayed in the logged in user's embeddable resume search tool, what are their weights, what is the maximum number of results that can be returned, etc. # Create a new index Source: https://docs.affinda.com/api-reference/search-&-match--indexing/create-a-new-index https://api.affinda.com/static/v2/api_spec.yaml post /v2/index Create an index for the search tool # Delete an index Source: https://docs.affinda.com/api-reference/search-&-match--indexing/delete-an-index https://api.affinda.com/static/v2/api_spec.yaml delete /v2/index/{name} Deletes the specified index from the database # Delete an indexed document Source: https://docs.affinda.com/api-reference/search-&-match--indexing/delete-an-indexed-document https://api.affinda.com/static/v2/api_spec.yaml delete /v2/index/{name}/documents/{identifier} Delete the specified indexed document from the database # Get indexed documents for a specific index Source: https://docs.affinda.com/api-reference/search-&-match--indexing/get-indexed-documents-for-a-specific-index https://api.affinda.com/static/v2/api_spec.yaml get /v2/index/{name}/documents Returns all the indexed documents for that index # Get list of all indexes Source: https://docs.affinda.com/api-reference/search-&-match--indexing/get-list-of-all-indexes https://api.affinda.com/static/v2/api_spec.yaml get /v2/index Returns all the indexes # Index a new document Source: https://docs.affinda.com/api-reference/search-&-match--indexing/index-a-new-document https://api.affinda.com/static/v2/api_spec.yaml post /v2/index/{name}/documents Create an indexed document for the search tool # Update an index Source: https://docs.affinda.com/api-reference/search-&-match--indexing/update-an-index https://api.affinda.com/static/v2/api_spec.yaml patch /v2/index/{name} Updates the specified index # Get job title suggestions based on provided job title(s) Source: https://docs.affinda.com/api-reference/search-&-match--searching/get-job-title-suggestions-based-on-provided-job-titles https://api.affinda.com/static/v2/api_spec.yaml get /v2/resume_search/suggestion_job_title Provided one or more job titles, get related suggestions for your search. # Get search result of specific job description Source: https://docs.affinda.com/api-reference/search-&-match--searching/get-search-result-of-specific-job-description https://api.affinda.com/static/v2/api_spec.yaml post /v2/job_description_search/details/{identifier} This contains more detailed information about the matching score of the search criteria, or which search criteria is missing in this job description. The `identifier` is the unique ID returned via the [/job_description_search](#post-/job_description_search) endpoint. # Get search result of specific resume Source: https://docs.affinda.com/api-reference/search-&-match--searching/get-search-result-of-specific-resume https://api.affinda.com/static/v2/api_spec.yaml post /v2/resume_search/details/{identifier} This contains more detailed information about the matching score of the search criteria, or which search criteria is missing in this resume. The `identifier` is the unique ID returned via the [/resume_search](#post-/resume_search) endpoint. # Get skill suggestions based on provided skill(s) Source: https://docs.affinda.com/api-reference/search-&-match--searching/get-skill-suggestions-based-on-provided-skills https://api.affinda.com/static/v2/api_spec.yaml get /v2/resume_search/suggestion_skill Provided one or more skills, get related suggestions for your search. # List occupation groups Source: https://docs.affinda.com/api-reference/search-&-match--searching/list-occupation-groups https://api.affinda.com/static/v2/api_spec.yaml get /v2/occupation_groups Returns the list of searchable occupation groups. # Match a single resume and job description Source: https://docs.affinda.com/api-reference/search-&-match--searching/match-a-single-resume-and-job-description https://api.affinda.com/static/v2/api_spec.yaml get /v2/resume_search/match Get the matching score between a resume and a job description. The score ranges between 0 and 1, with 0 being not a match at all, and 1 being perfect match.
Note, this score will not directly match the score returned from POST [/resume_search/details/{identifier}](#post-/resume_search/details/-identifier-). # Search through parsed job descriptions Source: https://docs.affinda.com/api-reference/search-&-match--searching/search-through-parsed-job-descriptions https://api.affinda.com/static/v2/api_spec.yaml post /v2/job_description_search Searches through parsed job descriptions. You can search with custom criterias or a resume. # Search through parsed resumes Source: https://docs.affinda.com/api-reference/search-&-match--searching/search-through-parsed-resumes https://api.affinda.com/static/v2/api_spec.yaml post /v2/resume_search Searches through parsed resumes. Users have 3 options to create a search:

1. Match to a job description - a parsed job description is used to find candidates that suit it
2. Match to a resume - a parsed resume is used to find other candidates that have similar attributes
3. Search using custom criteria

Users should only populate 1 of jobDescription, resume or the custom criteria. # Create a document from raw data Source: https://docs.affinda.com/api-reference/search-&-match/create-a-document-from-raw-data https://api.affinda.com/static/v3/api_spec.yaml post /v3/documents/create_from_data Creates a document directly from structured resume or job description data for use in Search & Match functionality. This endpoint is specifically designed for programmatic document creation without file uploads.
If you want to upload a document with a file or URL, see the main [POST /v3/documents](#post-/v3/documents) endpoint under the Documents tag.
When successful, returns an `identifier` in the response for subsequent use with the [/documents/{identifier}](#get-/v3/documents/-identifier-) endpoint to check processing status and retrieve results.
# Create a new index Source: https://docs.affinda.com/api-reference/search-&-match/create-a-new-index https://api.affinda.com/static/v3/api_spec.yaml post /v3/index Create an index for the search tool # Create a signed URL for the embeddable job description search tool Source: https://docs.affinda.com/api-reference/search-&-match/create-a-signed-url-for-the-embeddable-job-description-search-tool https://api.affinda.com/static/v3/api_spec.yaml post /v3/job_description_search/embed Create and return a signed URL of the job description search tool which then can be embedded on a web page. An optional parameter `config_override` can be passed to override the user-level configurations of the embeddable search tool. # Create a signed URL for the embeddable resume search tool Source: https://docs.affinda.com/api-reference/search-&-match/create-a-signed-url-for-the-embeddable-resume-search-tool https://api.affinda.com/static/v3/api_spec.yaml post /v3/resume_search/embed Create and return a signed URL of the resume search tool which then can be embedded on a web page. An optional parameter `config_override` can be passed to override the user-level configurations of the embeddable resume search tool. # Delete an index Source: https://docs.affinda.com/api-reference/search-&-match/delete-an-index https://api.affinda.com/static/v3/api_spec.yaml delete /v3/index/{name} Deletes the specified index from the database # Delete an indexed document Source: https://docs.affinda.com/api-reference/search-&-match/delete-an-indexed-document https://api.affinda.com/static/v3/api_spec.yaml delete /v3/index/{name}/documents/{identifier} Delete the specified indexed document from the database # Get indexed documents for a specific index Source: https://docs.affinda.com/api-reference/search-&-match/get-indexed-documents-for-a-specific-index https://api.affinda.com/static/v3/api_spec.yaml get /v3/index/{name}/documents Returns all the indexed documents for that index # Get job title suggestions based on provided job title(s) Source: https://docs.affinda.com/api-reference/search-&-match/get-job-title-suggestions-based-on-provided-job-titles https://api.affinda.com/static/v3/api_spec.yaml get /v3/resume_search/suggestion_job_title Provided one or more job titles, get related suggestions for your search. # Get list of all indexes Source: https://docs.affinda.com/api-reference/search-&-match/get-list-of-all-indexes https://api.affinda.com/static/v3/api_spec.yaml get /v3/index Returns all the indexes # Get search result of specific job description Source: https://docs.affinda.com/api-reference/search-&-match/get-search-result-of-specific-job-description https://api.affinda.com/static/v3/api_spec.yaml post /v3/job_description_search/details/{identifier} This contains more detailed information about the matching score of the search criteria, or which search criteria is missing in this job description. The `identifier` is the unique ID returned via the [/job_description_search](#post-/job_description_search) endpoint. # Get search result of specific resume Source: https://docs.affinda.com/api-reference/search-&-match/get-search-result-of-specific-resume https://api.affinda.com/static/v3/api_spec.yaml post /v3/resume_search/details/{identifier} This contains more detailed information about the matching score of the search criteria, or which search criteria is missing in this resume. The `identifier` is the unique ID returned via the [/resume_search](#post-/resume_search) endpoint. # Get skill suggestions based on provided skill(s) Source: https://docs.affinda.com/api-reference/search-&-match/get-skill-suggestions-based-on-provided-skills https://api.affinda.com/static/v3/api_spec.yaml get /v3/resume_search/suggestion_skill Provided one or more skills, get related suggestions for your search. # Get the config for the logged in user's embeddable job description search tool Source: https://docs.affinda.com/api-reference/search-&-match/get-the-config-for-the-logged-in-users-embeddable-job-description-search-tool https://api.affinda.com/static/v3/api_spec.yaml get /v3/job_description_search/config Return configurations such as which fields can be displayed in the logged in user's embeddable job description search tool, what are their weights, what is the maximum number of results that can be returned, etc. # Get the config for the logged in user's embeddable resume search tool Source: https://docs.affinda.com/api-reference/search-&-match/get-the-config-for-the-logged-in-users-embeddable-resume-search-tool https://api.affinda.com/static/v3/api_spec.yaml get /v3/resume_search/config Return configurations such as which fields can be displayed in the logged in user's embeddable resume search tool, what are their weights, what is the maximum number of results that can be returned, etc. # Index a new document Source: https://docs.affinda.com/api-reference/search-&-match/index-a-new-document https://api.affinda.com/static/v3/api_spec.yaml post /v3/index/{name}/documents Create an indexed document for the search tool # List occupation groups Source: https://docs.affinda.com/api-reference/search-&-match/list-occupation-groups https://api.affinda.com/static/v3/api_spec.yaml get /v3/occupation_groups Returns the list of searchable occupation groups. # Match a single resume and job description Source: https://docs.affinda.com/api-reference/search-&-match/match-a-single-resume-and-job-description https://api.affinda.com/static/v3/api_spec.yaml get /v3/resume_search/match Get the matching score between a resume and a job description. The score ranges between 0 and 1, with 0 being not a match at all, and 1 being perfect match.
Note, this score will not directly match the score returned from POST [/resume_search/details/{identifier}](#post-/resume_search/details/-identifier-). # Re-index a document Source: https://docs.affinda.com/api-reference/search-&-match/re-index-a-document https://api.affinda.com/static/v3/api_spec.yaml post /v3/index/{name}/documents/{identifier}/re_index Re-index a document. This is relevant if you updated the document's data via the /annotations endpoint, and want to refresh the document's data in the search index. # Search through parsed job descriptions Source: https://docs.affinda.com/api-reference/search-&-match/search-through-parsed-job-descriptions https://api.affinda.com/static/v3/api_spec.yaml post /v3/job_description_search Searches through parsed job descriptions. You can search with custom criterias or a resume. # Search through parsed resumes Source: https://docs.affinda.com/api-reference/search-&-match/search-through-parsed-resumes https://api.affinda.com/static/v3/api_spec.yaml post /v3/resume_search Searches through parsed resumes. Users have 3 options to create a search:

1. Match to a job description - a parsed job description is used to find candidates that suit it
2. Match to a resume - a parsed resume is used to find other candidates that have similar attributes
3. Search using custom criteria

Users should only populate 1 of jobDescription, resume or the custom criteria. # Update a document's data Source: https://docs.affinda.com/api-reference/search-&-match/update-a-documents-data https://api.affinda.com/static/v3/api_spec.yaml post /v3/documents/{identifier}/update_data Update data of a document. Only applicable for resumes and job descriptions. For other document types, please use the `PATCH /annotations/{id}` endpoint or the `POST /annotations/batch_update` endpoint. # Update an index Source: https://docs.affinda.com/api-reference/search-&-match/update-an-index https://api.affinda.com/static/v3/api_spec.yaml patch /v3/index/{name} Updates the specified index # Update the config for the logged in user's embeddable job description search tool Source: https://docs.affinda.com/api-reference/search-&-match/update-the-config-for-the-logged-in-users-embeddable-job-description-search-tool https://api.affinda.com/static/v3/api_spec.yaml patch /v3/job_description_search/config Update configurations such as which fields can be displayed in the logged in user's embeddable job description search tool, what are their weights, what is the maximum number of results that can be returned, etc. # Update the config for the logged in user's embeddable resume search tool Source: https://docs.affinda.com/api-reference/search-&-match/update-the-config-for-the-logged-in-users-embeddable-resume-search-tool https://api.affinda.com/static/v3/api_spec.yaml patch /v3/resume_search/config Update configurations such as which fields can be displayed in the logged in user's embeddable resume search tool, what are their weights, what is the maximum number of results that can be returned, etc. # Add a tag to documents Source: https://docs.affinda.com/api-reference/tags/add-a-tag-to-documents https://api.affinda.com/static/v3/api_spec.yaml post /v3/documents/batch_add_tag Add a tag to documents. Tags are used to group documents together. Tags can be used to filter documents. # Create a tag Source: https://docs.affinda.com/api-reference/tags/create-a-tag https://api.affinda.com/static/v3/api_spec.yaml post /v3/tags Create a tag # Delete an tag Source: https://docs.affinda.com/api-reference/tags/delete-an-tag https://api.affinda.com/static/v3/api_spec.yaml delete /v3/tags/{id} Deletes the specified tag from the database. # Get list of all tags Source: https://docs.affinda.com/api-reference/tags/get-list-of-all-tags https://api.affinda.com/static/v3/api_spec.yaml get /v3/tags Returns your tags. # Get specific tag Source: https://docs.affinda.com/api-reference/tags/get-specific-tag https://api.affinda.com/static/v3/api_spec.yaml get /v3/tags/{id} Return a specific tag. # Remove a tag from documents Source: https://docs.affinda.com/api-reference/tags/remove-a-tag-from-documents https://api.affinda.com/static/v3/api_spec.yaml post /v3/documents/batch_remove_tag Remove a tag from documents. # Update a tag Source: https://docs.affinda.com/api-reference/tags/update-a-tag https://api.affinda.com/static/v3/api_spec.yaml patch /v3/tags/{id} Update data of an tag. # Get usage Source: https://docs.affinda.com/api-reference/usage/get-usage https://api.affinda.com/static/v3/api_spec.yaml get /v3/usage Returns daily credits consumption for an organization over a date range. Optionally scope the report to a single workspace, a single document type, or a single (workspace × document type) pair by supplying both `workspace` and `document_type`. # Batch create validation results Source: https://docs.affinda.com/api-reference/validation-results/batch-create-validation-results https://api.affinda.com/static/v3/api_spec.yaml post /v3/validation_results/batch_create Batch create validation results. # Batch delete validation results Source: https://docs.affinda.com/api-reference/validation-results/batch-delete-validation-results https://api.affinda.com/static/v3/api_spec.yaml post /v3/validation_results/batch_delete Batch delete validation results # Create a validation result Source: https://docs.affinda.com/api-reference/validation-results/create-a-validation-result https://api.affinda.com/static/v3/api_spec.yaml post /v3/validation_results Create a validation result. # Delete a validation result Source: https://docs.affinda.com/api-reference/validation-results/delete-a-validation-result https://api.affinda.com/static/v3/api_spec.yaml delete /v3/validation_results/{id} Remove validation result. # Get list of all validation results Source: https://docs.affinda.com/api-reference/validation-results/get-list-of-all-validation-results https://api.affinda.com/static/v3/api_spec.yaml get /v3/validation_results Returns the validation results of a document. # Get specific validation result Source: https://docs.affinda.com/api-reference/validation-results/get-specific-validation-result https://api.affinda.com/static/v3/api_spec.yaml get /v3/validation_results/{id} Return a specific validation result. # Update a validation result Source: https://docs.affinda.com/api-reference/validation-results/update-a-validation-result https://api.affinda.com/static/v3/api_spec.yaml patch /v3/validation_results/{id} Update a validation result. # Activate a resthook subscription Source: https://docs.affinda.com/api-reference/webhook-api/activate-a-resthook-subscription https://api.affinda.com/static/v2/api_spec.yaml post /v2/resthook_subscriptions/activate After creating a subscription, we'll send a POST request to your target URL with a `X-Hook-Secret` header. You should response to this with a 200 status code, and use the value of the `X-Hook-Secret` header that you received to activate the subscription using this endpoint. # Create a resthook subscription Source: https://docs.affinda.com/api-reference/webhook-api/create-a-resthook-subscription https://api.affinda.com/static/v2/api_spec.yaml post /v2/resthook_subscriptions After a subscription is successfully created, we'll send a POST request to your target URL with a `X-Hook-Secret` header.
You need to response to this request with a 200 status code to confirm your subscribe intention.
Then, you need to use the `X-Hook-Secret` to activate the subscription using the [/resthook_subscriptions/activate](#post-/v3/resthook_subscriptions/activate) endpoint.
For more information and detailed instructions, [see our webhooks documentation here.](https://docs.affinda.com/docs/webhooks) # Delete a resthook subscription Source: https://docs.affinda.com/api-reference/webhook-api/delete-a-resthook-subscription https://api.affinda.com/static/v2/api_spec.yaml delete /v2/resthook_subscriptions/{id} Deletes the specified resthook subscription from the database. # Get list of all resthook subscriptions Source: https://docs.affinda.com/api-reference/webhook-api/get-list-of-all-resthook-subscriptions https://api.affinda.com/static/v2/api_spec.yaml get /v2/resthook_subscriptions Returns your resthook subscriptions. # Get specific resthook subscription Source: https://docs.affinda.com/api-reference/webhook-api/get-specific-resthook-subscription https://api.affinda.com/static/v2/api_spec.yaml get /v2/resthook_subscriptions/{id} Return a specific resthook subscription. # Update a resthook subscription Source: https://docs.affinda.com/api-reference/webhook-api/update-a-resthook-subscription https://api.affinda.com/static/v2/api_spec.yaml patch /v2/resthook_subscriptions/{id} Update data of a resthook subscription. # Activate a resthook subscription Source: https://docs.affinda.com/api-reference/webhooks/activate-a-resthook-subscription https://api.affinda.com/static/v3/api_spec.yaml post /v3/resthook_subscriptions/activate After creating a subscription, we'll send a POST request to your target URL with a `X-Hook-Secret` header.
You should response to this with a 200 status code, and use the value of the `X-Hook-Secret` header that you received to activate the subscription using this endpoint. # Create a resthook subscription Source: https://docs.affinda.com/api-reference/webhooks/create-a-resthook-subscription https://api.affinda.com/static/v3/api_spec.yaml post /v3/resthook_subscriptions After a subscription is successfully created, we'll send a POST request to your target URL with a `X-Hook-Secret` header.
You need to response to this request with a 200 status code to confirm your subscribe intention.
Then, you need to use the `X-Hook-Secret` to activate the subscription using the [/resthook_subscriptions/activate](#post-/v3/resthook_subscriptions/activate) endpoint.
For more information and detailed instructions, [see our webhooks documentation here.](https://docs.affinda.com/docs/webhooks) # Delete a resthook subscription Source: https://docs.affinda.com/api-reference/webhooks/delete-a-resthook-subscription https://api.affinda.com/static/v3/api_spec.yaml delete /v3/resthook_subscriptions/{id} Deletes the specified resthook subscription from the database. # Get list of all resthook subscriptions Source: https://docs.affinda.com/api-reference/webhooks/get-list-of-all-resthook-subscriptions https://api.affinda.com/static/v3/api_spec.yaml get /v3/resthook_subscriptions Returns your resthook subscriptions. # Get specific resthook subscription Source: https://docs.affinda.com/api-reference/webhooks/get-specific-resthook-subscription https://api.affinda.com/static/v3/api_spec.yaml get /v3/resthook_subscriptions/{id} Return a specific resthook subscription. # Update a resthook subscription Source: https://docs.affinda.com/api-reference/webhooks/update-a-resthook-subscription https://api.affinda.com/static/v3/api_spec.yaml patch /v3/resthook_subscriptions/{id} Update data of a resthook subscription. # Create a workspace Source: https://docs.affinda.com/api-reference/workspaces/create-a-workspace https://api.affinda.com/static/v3/api_spec.yaml post /v3/workspaces Create a workspace # Delete a workspace Source: https://docs.affinda.com/api-reference/workspaces/delete-a-workspace https://api.affinda.com/static/v3/api_spec.yaml delete /v3/workspaces/{identifier} Deletes the specified workspace from the database. # Get list of all workspaces Source: https://docs.affinda.com/api-reference/workspaces/get-list-of-all-workspaces https://api.affinda.com/static/v3/api_spec.yaml get /v3/workspaces Returns your workspaces. # Get specific workspace Source: https://docs.affinda.com/api-reference/workspaces/get-specific-workspace https://api.affinda.com/static/v3/api_spec.yaml get /v3/workspaces/{identifier} Return a specific workspace. # Update a workspace Source: https://docs.affinda.com/api-reference/workspaces/update-a-workspace https://api.affinda.com/static/v3/api_spec.yaml patch /v3/workspaces/{identifier} Update a workspace. # Billing, credits, and payment options Source: https://docs.affinda.com/billing Overview of Affinda's credit-based pricing, payment methods, invoicing, and enterprise billing options for document parsing and extraction usage. ## Credits Affinda applies usage limits through two distinct credit systems, tailored to different product categories: * **Page Credits**
Most products use a page-based credit system, where credits are consumed based on the number of pages processed. * **Resume Parsing Credits**
For products aimed at Recruitment technology, such as Resume Parsing, Job Description and Candidate Search & Match, credits are calculated per document. This reflects the specialized AI models and processing methods unique to these use cases. See Resume Parsing Credits for more information. **Custom usage arrangements are available for Enterprise customers.** Contact the Affinda Sales team to discuss aligning credit usage with your specific operational needs and value outcomes. ### Reviewing credits usage You can review your organization's credits usage in the Billing section. Only users with the **Owner** role have access to view billing information and credit usage details. ### Viewing usage by workspace or document type The usage graph can display credit consumption broken down by workspace or by document type, alongside the organization-wide view. Select the dimension you want on the usage graph to switch between views. This is useful for allocating usage across teams, clients, or products. For example, organizations that on-bill document processing to their own customers can see exactly which workspace or document type generated the usage. Breakdown data accumulates from the date this feature was released. Usage from before that date appears in the organization-level totals but is not back-populated into the workspace and document type breakdowns. ### Classification-only A Document Type can be configured to only classify the document and skip any data extraction steps. Due to the lower processing costs associated, credit usage is capped at **3 credits per document,** regardless of page count. For example: 1 page = 1 credit, 5 pages = 3 credits, 20 pages = 3 credits. To enable this setting on a Document Type, please email [support@affinda.com](mailto:support@affinda.com). ### Selective page processing by document type You can now configure Affinda to process **only a continuous page range** from your documents, instead of processing every page by default. Page selection is defined **per document type**, giving you precise control over what gets processed and billed. Excluded pages are not processed and **are not charged**. Examples: * **Invoices**: process only pages 1–3 * **Contracts**: process only pages 2–5 * **Reports**: apply a custom page range specific to that document type This feature is enabled by the Affinda team. Once configured, the rules are applied automatically during processing, with no changes required to your existing workflows. For more information or to enable selective page processing, please email [support@affinda.com](mailto:support@affinda.com). ## Payment Affinda offers a number of payment options to scale with your business. ### **Payment methods** Organization Owners can manage payment methods from the Billing page. From there, you can add a card, view saved card details, set a default payment method, or remove a saved card. The default payment method is used for future credit purchases and automatic invoice charges where applicable. ### **Invoice history** Organization Owners can view invoices from the Billing page under Invoice History. The invoice table shows the invoice date, invoice number, amount, and status. To download an invoice, open the actions menu on the invoice row and select Download PDF. Invoices appear here after purchases or billing cycles are issued through Maxio. ### Pay-as-you-go Customers can purchase additional credits through the Billing page in their organization. 1. Select the number of credits you’d like to purchase. 2. Complete your payment securely through Maxio Payments. If your organization already has a saved payment method, you can use it for future credit purchases. With Auto-Reload, when your credit balance drops below a preset threshold (e.g. 50 credits), the system will automatically top up your account. This prevents service interruptions and removes the need to monitor credit levels manually. ### Billing in Arrears​ For business users, Affinda provides monthly billing in arrears. Great for scaling operations with predictable costs. Only pay for what you use, and as your volume increases, your cost per document decreases. [**Get in contact**](https://www.affinda.com/contact) with the Affinda Sales team to set up Monthly Billing in Arrears ### High Volume or Custom Packages If you're interested in purchasing a higher-tier package or exploring custom pricing options, [please reach out to the Affinda Sales team.](https://www.affinda.com/contact) We can add tailored credit packages directly to your organization, allowing you to complete payment securely via our existing platform. Alternatively, we’re happy to accommodate standard invoicing if preferred. # Affinda Agent Source: https://docs.affinda.com/configuration/affinda-agent Use the Affinda Agent to set up and configure your document processing workflow through a natural language conversation. The Affinda Agent is an AI assistant built into the Affinda platform that helps you go from sign-up to a fully configured document processing workflow in minutes. Instead of navigating settings and configuration screens manually, you describe what you need in plain language and the agent does the work for you. The agent can: * **Set up a workspace** for your specific use case * **Configure document types** based on your sample documents, suggesting and iterating on fields and data sources with you * **Create validation rules** by translating your business logic into working rules * **Set up integrations** to export data to downstream systems * **Explain platform concepts** and point you to the relevant documentation, or search the web when your question goes beyond the platform The Affinda Agent configures your real workspace and document types as you talk. Every change it proposes can be reviewed, adjusted, or rejected before it takes effect — you stay in control throughout. ## What you can do with the Affinda Agent ### Set up a workspace Describe the type of documents you process and the data you need to extract. The agent will create a workspace with the appropriate settings for your use case. **Example prompts:** * "I process supplier invoices and need to extract header details and line items for my ERP system." * "I receive loan application packs that contain multiple document types — income statements, ID documents, and bank statements." * "I want to set up a workspace for processing customer onboarding forms." The agent will ask follow-up questions where needed. For example, whether you need document splitting enabled, what OCR settings are appropriate, or whether classification should be turned on, and configure the workspace accordingly. The more context you give the agent about your use case, the better it can tailor the configuration. Mention the types of documents you receive, what data matters to you, and where the data needs to go. ### Configure a document type for your workflow Upload one or more sample documents and the agent will help you build a document type around them. It analyses your documents, suggests fields for extraction, and lets you iterate on the schema together. Share one or more representative documents with the agent. Aim for a variety of formats and layouts rather than multiple copies of the same template — this gives the agent more to work with when suggesting fields. The agent analyses your documents and proposes a set of extraction fields, including data types and any relevant structure (such as table fields for line items). Discuss changes with the agent in natural language. You can ask it to add, remove, rename, or restructure fields. Once you're happy with the fields, the agent applies the configuration to your document type. You can continue to refine it later, either through the agent or directly in the platform. You don't need to get everything right in one go — add fields, adjust settings, and refine your schema across multiple messages. If your fields use picklists or need to map against reference data, you can also ask the agent to create and manage [data sources](/configuration/picklists) as part of the same conversation. ### Create validation rules Describe the business logic you want to enforce and the agent will generate validation rules for you. The agent translates these into working validation rules and applies them to the relevant fields. For more on how validation rules work, see [Validation Rules](/configuration/validation-rules). Once your extraction and validation are configured, you can also ask the agent to set up [data export integrations](/configuration/agent-integrations) — describe where your data needs to go and in what format, and the agent will configure the integration for you. ### Ask for help with platform concepts If you're unsure about a concept or setting, ask the agent. It can explain how features work and direct you to the right documentation. The agent draws on the full Affinda documentation to give you accurate, contextual answers. It can also search the web when your question goes beyond the platform. You can ask the agent about concepts at any point during setup — not just in a dedicated Q\&A session. # Configure integrations with the Affinda Agent Source: https://docs.affinda.com/configuration/agent-integrations Configure integrations with the Affinda Agent to build no-code data exports to downstream systems using natural language instructions. This feature is currently in **beta** and may change as we gather feedback. Functionality, behavior, and availability are subject to updates, and there may be occasional bugs or limitations. Integrations with the Affinda Agent let you export data from the platform to other applications without writing any code. See our [Tutorial: Creating your integration with the Affinda Agent](/handbook/agent-integrations) for a comprehensive step-by-step guide. ## How credentials work across integration types When you configure an integration through the Affinda Agent, there are two ways to connect to a downstream system: **Pipedream-connected apps** For apps in Pipedream's library (Xero, Google Sheets, Outlook, SharePoint, and thousands of others), credentials are managed by Pipedream. You connect your account through Pipedream's OAuth flow — Affinda never sees or stores your credentials for these connections. Pipedream processes API requests but does not store or log request payloads or response data. **Manual pathway** For any downstream system with an API endpoint, the Affinda Agent writes custom integration code that runs on Affinda's platform. Use [Secrets](#secrets) to store any API keys or credentials your integration needs to authenticate with the downstream system. ## Pipedream The Affinda Agent uses Pipedream, a third-party platform, to offer thousands of integrations off the shelf. Pipedream handles the permissions and authentication required to export data from Affinda to other applications. To use Pipedream-connected apps, users will need to make an account with Pipedream — find their documentation [here](https://pipedream.com/docs). ## Basic Configuration **Connected Account** To create an integration, the user should first connect their account of their downstream application to Affinda using Pipedream. Users can create an integration that uses a single connected account or multiple. **Workspace and document Type** Integrations are tied to a specific workspace and document type. They will only execute on documents belonging to both those groups. **Trigger** Each integration requires a trigger; users can choose between document-parse completed or document validated. ## Agent Users can describe their data export requirements in natural language, and the Affinda Agent will create the code required to complete the integration. **Test run** Once the integration code has been generated, the user can run a "test run" with existing documents to see if the integration behaves as expected. **Integration Failed** If your integration ran into an error, the "Fix in Chat" button passes the error message back to the agent to self-correct. Alternatively, you can view the run logs to manually review. ## Secrets The Secrets section in integration settings lets you store API keys and credentials securely for use in integrations built on the manual pathway. Secrets are stored encrypted and are never visible after creation. **Where to find it:** Open an integration and go to the **Settings** tab. The Secrets section is listed at the bottom. Secrets are injected as environment variables into your integration code and can be referenced using the key name you assigned. Secrets apply to integrations built on the manual pathway only. For integrations using Pipedream-connected apps, credentials are managed by Pipedream and do not appear in this section. ## Enabling Integration Once you are happy with the performance of your integration, you can enable it by toggling on the blue switch in the Configure Integration Interface or in the Workflow Settings > Data Export. # Extract checkbox selections from forms Source: https://docs.affinda.com/configuration/checkboxes Capture selected and unselected options from forms with checkbox fields in Affinda, including configuration options for grouped and individual checkboxes. Checkbox extraction in Affinda allows you to extract important information on forms, contracts, and other structured documents where selections or options are indicated using checkboxes. Affinda supports 2 types of Checkbox Extraction: Use this when one or more options can be ticked, returning the label (text) of each checked box for the relevant category. Label Checkbox example Use this when there is a single checkbox, returning True if it is checked and False if it is not. This field type will not have a 'rectangle' on the document. True/False Checkbox example ### When adding checkboxes as a new field, existing documents will need to be reparsed for the model to identify the ticked checkbox on the document. # Document Classification Source: https://docs.affinda.com/configuration/classification Configure Affinda's document classification to automatically route incoming files into the correct document type for downstream extraction and workflows. Document classification is the process of automatically identifying and categorizing documents based on their content or metadata. In the Affinda platform, document classification ensures that documents are correctly categorized into their relevant type. This is a foundational step in document processing workflows, as accurate classification enables targeted and optimized downstream actions relating to data extraction, validation, and post-processing settings. ## Detailed Tutorial for Validating Classification Click here for Affinda Academy tutorial ## Configuring Classification Classification behavior can be configured in the **Workspace Settings**. The classification model will assign a classification from the set of document types configured in your workspace. Classification Settings Classification Settings ### Auto Classification When enabled, Affinda will classify and route each document to the relevant Document Type when uploaded to a Workspace. If the document is uploaded to a specific Document Type, Affinda will not attempt to re-classify automatically. If disabled, documents sent to a Workspace will remain unclassified until updated by a user. ### Reject Documents Workspaces can be configured so that Affinda automatically rejects documents that are not of the right type. These documents will be sent to the 'Rejected' list in the app, where they can be reviewed and moved to the appropriate Document Type by a user. Document rejection will occur in the following cases: * If a document is sent to a Workspace and no relevant Document Type is found within the Workspace * If a document is sent to a specific Document Type, and the classification the model returns does not match the Document Type ## Default Classification Model The default classification model is a self-learning system that improves over time. When a new document is uploaded and needs to be classified, the model uses two key inputs: 1. **Document Type Names and Descriptions** The names and descriptions provide the model with an understanding of the general characteristics and unique traits of each Document Type. Document Type name and description Document Type name and description 2. **Reference Documents from Model Memory** The Model Memory offers examples of previously confirmed documents, helping the model identify patterns and similarities. See Model Memory page for more information. ### By combining this contextual and example-based information, the model can make informed classification decisions. Therefore, it is crucial that: * The **name** and **description** of each Document Type accurately reflect the types of documents it will receive. These can be changed in the Configure Document Type interface. * All documents added to Model Memory are **correctly classified**, as they directly influence future classification accuracy. ## Fast Classifier for Resume Parser customers This non-learning model is optimised for performance on Resumes and Job Descriptions in particular and is the default classifier used for all customers with a Recruitment Technology use case. ## Custom Classification Model For customers with bespoke requirements that the above options do not meet, the Affinda team can create a custom classification model. [Get in touch with the Affinda team to learn more about this option. ](https://www.affinda.com/contact) # Field and document confidence scores Source: https://docs.affinda.com/configuration/confidence Understand how Affinda calculates field-level and document-level confidence scores, and how to use them to drive automation and validation rules. Affinda provides confidence scores for data extracted to help you assess the reliability of data extracted from your documents. Rather than using a confidence value from the model that does not strongly reference the data from the documents validated by users, our approach to confidence is to provide significantly higher weight to validated documents of a similar format to the uploaded document. Confidence Scores, when available, are shown in the Affinda app when you hover over the yellow dot next to an unconfirmed field: Confidence Score Example Confidence Score Example ## Benefits * Confidence is not calculated without the context of other validated documents. Instead, it pays particular attention to the data from very relevant documents * The ceiling for how confident the model can be in the predictions is much higher (up to 99%) ## Limitations * While our method of calculating confidence delivers strong results when using Affinda's platform at scale, it will take 2-3 examples of the same document format before confidence will be returned on fields ## How Confidence is Calculated When users upload a document, our Fingerprinting algorithm identifies suitable reference document(s) from [Model Memory](/configuration/model-memory) that are provided to the model to help guide the extraction. Whenever someone validates data from a processed document, we store the data results as our "ground truth" for confidence calculation. Accuracy is measured by comparing the model's predictions with validated annotations. For each new document, we look at the accuracy results from up to the last five validated documents that used the same reference document. An overall accuracy score is calculated for each extracted field. ## Setting Confidence Thresholds Affinda can support both field-level and global confidence thresholds. **Field-level:** Users can configure a specific confidence threshold by creating a validation rule in the app. For example, "@Date of Establishment confidence is >80%"  **Global:** Affinda can support **global confidence thresholds** to enable auto-validation of: * **Fields** that meet the global threshold. * **Documents** that meet the global threshold. Global thresholds are **not currently supported** through validation rules. To enable for your workspace, please [reach out to the Affinda team. ](https://www.affinda.com/contact) ### FAQs If there are no prior validated data for that document format, we provide annotations without a confidence score. Only one validated document per reference is required to begin showing confidence scores. # Document status reference and transitions Source: https://docs.affinda.com/configuration/document-status Reference for every document status in Affinda, including processing, ready for review, validated, and rejected, and how documents move between them. The Document Status feature helps users manage and track documents efficiently through their lifecycle in the platform. Each document can have one of the following statuses: ## For Review Forreview Pn Documents marked as For Review require human validation. These documents have not passed automatic validation and are queued for manual verification. ## Confirmed Confirmed Pn Documents in Confirmed status have successfully undergone validation, either automatically by Machine Validation or manually by Human Validation. These documents are ready for further processing. ## Archived 89f0d74b 2022 4738 B0ae 743f52f8bae2 Removalai Preview Pn The Archived status allows you to remove documents from active views without deleting them from the platform. Documents can be archived directly from either the 'For Review' or 'Confirmed' tabs. This status is typically used once documents have been processed and exported downstream. ## Rejected Rejected Pn Documents are labelled 'Rejected' when they have been manually or automatically marked as invalid. Automatic rejections may occur due to the following reasons, depending on workspace-specific settings: * Duplicate submission of an existing document * Irrelevance of the document type for the specific workspace # Remove duplicate documents Source: https://docs.affinda.com/configuration/duplicates Configure Affinda's de-duplication to detect and remove duplicate documents during ingestion, keeping your workflows clean and avoiding double-processing. Settings for removing duplicates can be found for each workspace in the **Workflow Settings** under ‘Pre-processing'. If Affinda identifies a duplicate and the setting is enabled, the document will be automatically updated to be **Rejected**. The user can still manually override and place the document back into a Workspace if required. Affinda uses Document Binary Match to detect and reject duplicates. Documents with matching fields (e.g the same Invoice Number) will not be rejected by enabling Remove Duplicates. To do this, users will need to support this logic on their side and can utilise our APIs to delete unwanted documents. ### Different versions of the same document are not classified as duplicates. Affinda inspects the document metadata to identify if the exact duplicate of the document has been previously uploaded to the Workspace. Documents re-submitted as a new version will not be classified as a duplicate. # Upload documents via email Source: https://docs.affinda.com/configuration/email-upload Configure a dedicated inbox to upload documents to Affinda via email, including handling attachments, sender allowlists, and routing to document types. Uploading documents via email is a convenient solution for those who want to set up automated document ingestion without building an integration. It allows the data extraction process to fit seamlessly into existing workflows. The process is simple; all customers need to do is attach their documents to an email and send them to a specific email address provided by us. Our system will automatically extract the attachments and apply our AI models to process them accordingly. Email Upload Settings Email Upload Settings Email addresses to use for uploading documents can be found in the **Workspace Settings.** * Each Workspace will have a **unique** email address associated with it * Email addresses can be refreshed for security reasons by pressing the refresh icon * The API response will include the email address from which the document was received from * An allowlist can be configured so that only documents from approved email addresses/domains are processed ### Upload limit of 10 attachments per email Any emails sent with more than 10 attachments will not be processed by Affinda # Export extracted data from Affinda Source: https://docs.affinda.com/configuration/export-data Compare ways to export extracted data from Affinda, including the API, webhooks, Affinda Agent integrations, CSV downloads, and direct integrations. Exporting data enables the extracted information to be utilized in downstream applications and systems. Affinda offers four primary methods for exporting data: manual export via the app, API-based export, webhooks, and integrations. ## File formats Data can be exported from Affinda in 3 different formats: * JSON (default) * XML * CSV CSV export is not supported for resumes given the complex data structure The format and schema of these files are dynamic according to the fields for the document type being exported. * **Document types without tables or repeating groups**\ The CSV export is simple: each document is represented as a single row, with each field or metadata value stored in its own column. * **Document types that include tables or repeating group structures**\ The CSV export contains multiple rows per document. Each row corresponds to an entry in the table or group, while the document-level fields (like document name, date, etc.) are repeated in each row to maintain context. CSV export is not recommended for any Document Types containing more than 1 Table or Group field. ## Export method Data can be exported from the Affinda solution either via the app or programmatically. ### Manual Export Manual export allows users to download extracted data directly from the Affinda platform for offline use or to import into other systems. This option is generally more suitable for users requiring occasional or small-scale exports. To export via the Affinda platform, navigate to the document list within the workspace, select one or multiple documents, choose the desired export format, and download the file. ### Programmatic Export Most high-volume users will export their data programmatically via our API, workflow tool, or integration. This option is ideal for developers looking to automate their document processing by automatically adding the exported data to their downstream systems. For more information about using the Affinda API and the integrations available, see the [API Reference](/reference/getting-started). ### Frequently Asked Questions for Data Export CSV export will replicate the order of your fields in the Document Type Configuration Interface; reorder them to adjust the order of your exported CSV file. # General Field Configuration Source: https://docs.affinda.com/configuration/field-configuration Configure field properties in Affinda such as data types, required flags, default values, and parsing rules so extracted data matches your downstream schema. Field configuration settings allow users to customize how data is extracted, processed, and displayed in Affinda's platform. These settings ensure the extracted data meets specific requirements and can be easily integrated into downstream workflows. Field configuration options can be accessed by Workspace Owners and Admins by clicking 'Configure Fields' in the top right corner of the document validation view. ## Detailed guide for Schema Design Click here for Affinda Academy tutorial ## Basic Configuration ### Field Name The field name represents the label for the extracted data in the validation UI. It is user-defined and helps the model in extracting the field from documents; as such, it is important to have clear and relevant field names. ### Field Description Users may optionally enhance the model's predictions by providing additional context, such as how the data is typically labelled and where it appears on the page. **Adding more documents** is the recommended way to enhance model accuracy. However, a clear field description can also improve extraction results A practical guide to writing effective field descriptions, with eight patterns for fixing common extraction mistakes. The field description and Text Options serve different purposes. The **field description** guides the model on *what* to extract from the document — for example, "Extract the billing address, not the supplier's address." **Text Options** control *how* the extracted value is formatted in the output — for example, trimming whitespace, normalising dates, or stripping trailing characters. If the model is extracting the correct text but the format is wrong, use Text Options. If the model is extracting from the wrong place on the document, refine the field description. The field description controls *what* the model extracts from the document. If you instead need to control *how* the extracted value is formatted in the output (for example, trimming whitespace or normalising dates), use [Text Transformations](/configuration/standard-fields#text-transformations). ## Data Types Your field's data type determines how extracted values are processed and standardized. Different data types are available to ensure that structured and unstructured data is correctly categorized. The selected data type influences the structure of the data and the post-processing logic applied to extracted values, ensuring consistency and accuracy. Text, Numbers, Dates, Location, Phone Number, URLs Groups and Tables Options and Data Source Labels and True/False Signatures, Seals, and Headshots If the raw data extracted from the document is unable to be logically parsed into a format consistent with the data type selected, no parsed value will be returned. Edit the annotation to improve extraction accuracy, or in the case where the bounding box is correct, edit the value directly by typing the correct value ## Basic Field Settings ### Enabling Fields This setting determines whether the field should be predicted and visible in the extracted output. Users can toggle this option depending on whether they want the model to extract and display the field. Disabling a field instead of deleting it lets the model keep all previously validated annotations and automatically restores them when the field is re‑enabled. Disable Fields Disable Fields ### Multiple Values Enable multiple predictions only when a field can have **multiple distinct values** within a single document. Examples include: * Line item tables on an Invoice * Parties or Signatories in a Legal Contract * Transactions in a Bank Statement Enabling multiple values where you would generally not expect multiple distinct values in a document can reduce model accuracy (by overpredicting values) or risk noise and confusion in review workflows due to the presence of duplicates. **Rule of thumb:** if there should only be one real value (even if it appears multiple times on the same document), stick to a single value. Only enable **multiple values** when the document structurally allows or expects multiple *distinct* values. ## Advanced Field Settings ### No rectangles Used when a field value does not explicitly appear in the document but can be inferred through reasoning. ### Manual entry only The field will not be predicted by the model and can only be entered manually. ### Slug Defines the unique label used for the field in the API response. ## Re-parsing after changes to the Schema When you make changes to the Document Types configuration, any documents that were parsed previously (both confirmed and documents in review) need to be re-parsed. The Affinda app identifies documents that should be re-parsed, indicated by the reparse button turning orange in the top right-hand corner when opening the document in the Document Validation View. Clicking on this button will update the extraction to the latest document type configuration. # Glossary of Affinda platform terms Source: https://docs.affinda.com/configuration/glossary Definitions of key Affinda platform terms, acronyms, and concepts used across the documentation, including extraction, validation, and workflow terminology. ## Platform Structure Consider an Organization as a central hub that contains all your Workspaces, Document Types, and uploaded documents which are accessible when you log into the Affinda platform. Typically, the name of your Organization matches the company name provided during initial registration. Within Affinda, an Organization functions as a collaborative space accommodating multiple users. The Organization Owner, who initially sets up the trial account, can manage the accounts of other users, assigning and adjusting their access to specific queues as necessary. If your company's Organization account already exists, it is recommended to create additional user accounts directly within user settings. Inviting colleagues in this manner allows them immediate access without having to complete the trial registration process. A Workspace enables you to organize related document processes efficiently. Each Workspace can handle one or several Document Types and is typically used as a broader organizational structure, representing either a specific client (useful for business process outsourcing companies) or a particular department within your organization. A Document Type defines a category of documents that you wish to classify and extract information from. Documents of the same type should have similar structural and semantic characteristics, and require extraction of the same fields. This grouping allows for consistent and efficient use of extraction rules or models. Common examples include invoices, purchase orders, and bank statements. **Collection** is a legacy term that was previously used to refer to what is now called a **Document Type**. If you encounter references to "Collection" in older documentation or system interfaces, it refers to the same concept as Document Type. ## Concepts \*\*OCR (Optical Character Recognition) \*\*is the technology that converts text in scanned documents or images into machine-readable text. In Affinda, OCR enables the platform to extract and process data from non-editable files like PDFs and images. An advanced algorithm that identifies similar documents by analyzing unique textual and visual features. This creates a distinctive 'fingerprint' for each document, enabling precise matching and retrieval of relevant examples from Model Memory. These examples are then provided to the model to enhance accuracy and context awareness when processing newly uploaded documents. Model Memory is a validated set of reference data and documents that Affinda's models use to enhance accuracy over time. By leveraging Retrieval-Augmented Generation (RAG), Model Memory enables Affinda to dynamically reference previously validated documents, allowing the model to predict future documents more accurately without requiring constant retraining. A process where human input is included in an AI-driven workflow to review, correct, or approve results. In Affinda, this typically occurs during the **validation** stage, where users verify and adjust extracted data to ensure accuracy before it's used downstream. This approach combines the speed of automation with the accuracy and judgment of human oversight. Affinda offers a simple and intuitive interface for HITL. The manual labeling of data fields by drawing a box over the field in documents to help train or refine the AI model. The process of reviewing and finalizing a document in the Affinda validation interface. When a document is *confirmed*, it signals that all extracted data has been reviewed and is accurate—no further changes are needed. Confirmed documents are used by the Model for continuous learning to improve accuracy. ## Affinda Functions The process of automatically separating a multi-document file (like a PDF with multiple invoices) into individual documents for more accurate processing. The step where Affinda identifies and labels the type of each document (e.g., invoice, resume, contract) to then route it to the correct workflow and extraction model. The process of identifying and pulling out specific data fields (such as names, dates, amounts) from a document into a structured and usable format. Extracted data can be validated automatically using data mappings and rules to ensure accuracy, or manually reviewed through a human-in-the-loop process. # Configure table and group fields Source: https://docs.affinda.com/configuration/group-table-fields Use group and table field types in Affinda to extract repeated structured data such as line items, transactions, and nested objects from your documents. ## Table Fields Table fields capture repeating sets of related data in a document — typically one row per item, each containing the same set of fields (e.g. description, quantity, amount). Affinda supports both **classic grid-style tables** and **more irregular or nested layouts**. Clean, column-based tables are handled using **Grid** mode, while stacked or semi-structured rows are handled using **Freeform** mode.\ \ You don’t need perfectly aligned layouts; as long as each row follows a consistent pattern, a table field can extract it effectively. ## Creating tables The most efficient way of creating tables is to draw a box around a table on the document (excluding any header rows) when in Field Configuration. Affinda will instantly recognise the table structure, as well as the child fields or columns within the table, and create these fields for you. You can add, remove, and edit table columns the same way you would regular fields. Alternatively, you can create a table manually by: From within the document validation interface, select 'Configure Fields' in the top right corner Select 'Add Field' in the left panel Once the data type has been configured to a table on the parent field, an option to add child column fields will be provided in the left panel. Create a field for each of the columns you want to include in your extraction. For each, give a descriptive name like "unit" or "line total" and select the relevant data type. ### **Reviewing extracted data from tables** To understand how to use our table editor, see [Table Editor Tutorial.](/academy/table-editor) ## Group Fields Group fields in Affinda are dynamic objects that can include any other data type as children. They help organize related fields under one umbrella, allowing for more structured data extraction and processing. This is ideal when dealing with complex documents where related data points need to be grouped. Examples of group fields include: * **Resumes:** Group fields to structure work experience entries with job title, company name, and employment dates * **Legal Documents:** Group party details such as name, role, and contact information for each party involved * **Forms:** Organize repeated information blocks like references or emergency contacts. **Tip: Only use a group field when you expect several different versions of the same set of fields and need to keep the data from each version together.** If the related fields appear **only once**, leave them as regular fields and place them under a header instead. Group fields should *always* be multiple. ### Creating Group Fields The process for creating Group fields is simple. From within the document validation interface, select 'Configure Fields' in the top right corner Either draw a box around an entire group on the document or select 'Add Field' in the left panel Once the data type has been configured to Group on the parent field, an option to add Child fields will be provided in the left panel. Users can then add any child fields and configure their settings. # Image fields and signature extraction Source: https://docs.affinda.com/configuration/images Use image field types in Affinda to extract logos, signatures, photos, and other visual elements as cropped images alongside text data from documents. Affinda models can identify Signatures, Headshots, and Seals in your document using our image detector. Within the API, we will return a url of the image extracted from the document. The presence of this url can be used to signal that the particular image type exists on the document, or the image can be downloaded and added to your system. Returns the image of the signature. The presence of the parsed value can be used to verify that a document contains a signature. Returns the image of the headshot or person. Returns the image of the seal of authenticity. The presence of the parsed value can be used to verify that a document contains a seal of authenticity. ### When adding images as a new field, existing documents will need to be reparsed for the model to identify the image on the document. For extraction of other image types, [please contact Affinda to learn more.](https://www.affinda.com/contact) # Document Ingestion Options Source: https://docs.affinda.com/configuration/ingestion Compare ingestion options for sending documents to Affinda, including the web app, API, email upload, and direct integrations with cloud storage providers. There are 3 main ways to upload documents to the Affinda platform. Documents can be ingested through multiple channels, depending on the user's workflow: Uploading documents manually via the Affinda app Automatically fetching documents from a linked email account. \ \ See [Email Upload](/configuration/email-upload) for more information Ingest documents from other systems such as CRMs or ERPs using API integrations or workflow automation tools.\ \ See [API Reference](/reference/getting-started) for more information. Affinda assigns each document a **unique identifier** during ingestion, ensuring traceability throughout the workflow. ## Supported Formats **Text-based formats:** PDF, DOC, DOCX, XLSX, ODT, RTF, TXT, HTML **Image-based formats:** PNG, JPG, TIFF, JPEG **Best Practices for Document Ingestion** * Use **high-resolution** scans or images * Files should ideally be **uncompressed** to ensure optimal extraction accuracy # Automated Machine Validation for Extracted Data Source: https://docs.affinda.com/configuration/machine-validation Use Affinda's machine validation to automatically approve high-confidence documents and route low-confidence cases to human reviewers for full automation. Validating the data extracted from documents is a critical part of the Affinda workflow, ensuring the accuracy and reliability of data sent downstream. Machine Validation assesses whether extracted data meets predefined conditions and ensures that user review is only required by exception to deliver significant efficiency gains. ## Key Components of Machine Validation Affinda utilizes two primary methods for machine validation, often most effective when combined. Data mapping is a powerful capability aimed at enhancing the quality and accuracy of data extracted from documents. With data mapping configured, the extracted data can be mapped against a list of known options from the customer's own data to validate that it meets expected values. This provides greater confidence in the data extracted by the model and ensures seamless integration with downstream systems. Unmatched data triggers user review, prompting manual correction or alternative actions. See [Picklists](/configuration/picklists) for more information. Business-specific rules and logic can be customized based on document type, fields extracted, and unique use cases. Validation rules offer flexibility, accommodating criteria such as: * Mandatory fields * Model confidence thresholds * Expected data formats * Relationships between document fields * Other custom business logic See [Validation Rules](/configuration/validation-rules) for more information. ## Machine Validation Settings Auto-confirmation can be enabled at a Workspace level in the **Workflow Settings.** When enabled, documents that pass all validation rules are automatically confirmed, eliminating the need for manual review. Validation Settings Validation Settings Auto-confirmed documents are not used in Model Memory. # Model Memory: learn from past corrections Source: https://docs.affinda.com/configuration/model-memory Learn how Affinda's Model Memory feature uses past corrections to improve extraction accuracy over time without requiring full model retraining. Model Memory is a validated set of reference data and documents that Affinda's models use to enhance accuracy over time. By leveraging Retrieval-Augmented Generation (RAG), Model Memory enables Affinda to dynamically reference previously validated documents, allowing the model to predict future documents more accurately without requiring constant retraining. ## Key Benefits of Model Memory * **Continuous improvement** – The model improves over time by referencing validated documents, ensuring better predictions without the need for extensive manual adjustments. * **No need for constant prompt engineering** – Instead of adjusting prompts for every case, Model Memory provides a more scalable approach to improving AI performance. * **High accuracy for repeated formats** – The system quickly learns and perfects the extraction for recurring document formats, such as invoices from a particular supplier. ## How It Works: * When a new document is uploaded, Affinda’s Fingerprinting algorithm scans Model Memory to find sufficiently similar documents. * If relevant documents are found, one or more of these validated examples are provided to the model. * The model uses these documents to improve extraction accuracy and consistency. By using this method, Model Memory provides the model with real-world examples, reducing the likelihood of errors and continuously improving the accuracy of document processing. ## Managing Model Memory ### Options for automatically adding documents to Model Memory Model Memory Settings Model Memory Settings Users can control how documents are automatically added to Model Memory through the Workspace Settings in the Affinda app. There are three options: 1. **Auto (Default Option)** – Affinda intelligently selects which documents are added. 2. **Manual** – No documents from the workspace are automatically added to Model Memory, even after validation. 3. **Always** – Every validated document from the workspace is added to Model Memory. **Auto** is the recommended option for most Workspaces intended for ongoing model learning. Under these settings, document formats not already well-covered in Model Memory are intelligently selected, ensuring: * The memory does not grow excessively large, making it easier to audit. * The model remains efficient by avoiding redundant examples of well-represented formats. ### Manually updating documents in Model Memory The above setting determines which documents get added to Model Memory when they are Confirmed. However, Organization Admins retain the ability to add or remove documents from Model Memory independent of this setting. This provides a mechanism for users to further control and improve model performance. Documents can be added or removed from Model Memory though the Document List view within a Workspace. This can be applied as an action on a single document, or as a bulk action. ## Importance of Highly Accurate Data in Model Memory Since Model Memory directly references individual documents and their validated data, the accuracy of annotated documents is critical. Incorrect or low-quality annotations can lead to: * **Confusion in model predictions** – The model may reference incorrect information, leading to erroneous outputs. * **Propagation of mistakes** – Since Model Memory applies learnings from past documents, any errors will be replicated in future extractions. **Best Practices for Ensuring High-Quality Data** * **Use the Auto mode for document selection** – This ensures a manageable and auditable dataset. * **Correct errors promptly** – Any errors discovered downstream should be corrected in the Affinda app to maintain data integrity. * **Establish clear validation guidelines** – If multiple team members validate documents, create clear annotation standards to prevent inconsistencies, especially in cases where ambiguity exists. **By following these best practices, organizations can maximize the effectiveness of Model Memory and achieve unparalleled accuracy in document processing.** ## Re-parsing after adding Model Memory documents Once you add more documents to your **model memory**, the model learns from them and can make better predictions on similar examples in the future. Affinda will automatically identify documents that could benefit from this improved accuracy. For these documents, the **Reparse** button in the **Document Validation View** will turn **orange**, indicating that the model recommends you reparse the document to take advantage of the new learnings. If accuracy drops on a document type that was previously extracting well, the first thing to check is the **Model Memory reference**. From the Document Validation interface: * Click the three-dot icon in the top right corner * Select Model Memory Reference to view the confirmed document the model used as its reference. If that reference has incorrect annotations, correct them, re-confirm the reference, and then reparse the affected documents. ## Frequently Asked Questions about Model Memory The user can see the model memory document referenced in each new document processed by clicking on the three dots in the left-hand corner of the **Document Validation Interface**, then selecting 'Model Memory Reference'. This will open the confirmed document used by the model in prediction extractions. Users can make corrections to the reference document in this view. Yes. In Affinda, **Model Memory works like a living reference library**: every document you validate is stored and later surfaced by the fingerprinting algorithm to guide new extractions. The more high-quality, diverse documents you keep in that memory, the greater the chance the model finds a close match and pulls the right examples, so accuracy improves without retraining. Just make sure the memory grows with *relevant* and correctly annotated files—Affinda’s recommended “Auto” mode keeps only representative samples so the memory doesn’t become bloated with duplicates, which could reinforce errors. If you spot a mistake in a document that’s already sitting in Model Memory, it's important you correct it promptly. Locate the document under the confirmed documents tab and open the Document Validation UI. Adjust the wrong annotations (drag them to the right spot or redraw them) and then click "Confirm Document". Now you have corrected the error; you should re-parse any documents in the "For Review" tab to reapply the extraction model and prevent the propagation of mistakes. # Model performance dashboard Source: https://docs.affinda.com/configuration/model-performance Use correction data from human review to find the fields, document types, and Model Memory references driving the most rework, and prioritise the configuration changes that improve accuracy. The Model Performance dashboard turns human corrections into a prioritised list of things to fix. It shows which document types, fields, and Model Memory reference documents are generating the most rework, so you can target field descriptions, settings, and Model Memory instead of guessing. The dashboard is most valuable if human review is part of your business-as-usual workflow. Correction volume is only a reliable accuracy signal where reviewers are consistently checking and confirming documents. A correction is a field-level event where the current annotation differs from the original model prediction. Field confirmations with no change to the value, selection, or count are excluded. ## Overview tab Model Performance Overview Filter the whole view by date range, workspace, document type, type of human change, and issue type. Three summary metrics sit at the top: * **Human corrections** – total correction events across the fields in scope. * **Docs corrected** – the share of documents in scope that needed at least one correction. * **Field issues** – the number of distinct fields with corrections. ### Cumulative coverage Shows how concentrated the correction burden is across fields. In most configurations a small group of fields accounts for the majority of corrections, which tells you how much of the problem you can solve with a handful of changes. ### Main issue type breakdown Correction volume split by the kind of change the reviewer made: | Issue type | What it means | | ------------------------------- | ----------------------------------------------------------------------- | | **Missing fields** | The model did not return a value and the reviewer added one. | | **Extra fields** | The model returned a value the reviewer removed. | | **Wrong selection or location** | The right field was returned, but from the wrong place on the document. | | **Wrong value or cleanup** | The value was edited, reformatted, or cleaned up. | The mix matters when deciding what to change. Missing and extra fields usually point to an unclear field description or a schema that does not match the document. Wrong selection or location usually points to a Model Memory reference that is not a close match to the documents being processed. ## Field detail Performance Field Detail Open any field to see: * **Field description** – the instruction used for future predictions. Edit and save it directly from this panel. Changes affect all future extractions for that field. * **Issue type distribution** – the same four issue types, scoped to this field. * **Evidence** – individual correction events showing the original model prediction next to the reviewer's annotation, with surrounding row context for table fields. Filter by failure mode, search across evidence, open the source document in the review interface, or export the full set to CSV. Reading the before and after values across several examples usually makes the fix obvious. A field that is repeatedly captured from the wrong region needs a description that states where the value sits. A field that is repeatedly reformatted needs the expected format written into the description, or a text transformation. Work top-down. Fix the highest-volume field first, let new documents flow through, then come back and check whether the correction count has fallen. Small numbers of corrections spread across many fields are rarely worth chasing. ## Model memory tab Performance Model Memory Reference documents are ranked by the number of corrections made on the documents that used them, alongside how many documents used each reference and the average corrections per document. Documents parsed without any reference are reported separately. A reference document at the top of this list is a signal, not a verdict. There are three common explanations: 1. **The reference has inaccurate annotations.** Errors in a Model Memory document propagate to every document that references it. Open the reference, correct the annotations, re-confirm it, and reparse the affected documents. 2. **The reference is a poor choice for Model Memory.** It may be an unusual or low-quality example that is being matched too broadly. 3. **A closer match is missing.** The fingerprinting algorithm selected the best available reference, but no reference closely resembles the incoming format. Confirm a representative document of that format and add it to Model Memory. Average corrections per document is the more useful column when comparing references, since total corrections is partly a function of how often a reference is used. See [Model Memory](/configuration/model-memory) for more on how references are selected and managed. ## A suggested working rhythm 1. Set the date range to your last review period and leave the other filters open. 2. Use the cumulative coverage chart to decide how many fields are worth addressing. 3. Work through the top fields, reading the evidence before changing anything. 4. Update field descriptions, settings, or validation rules based on what the evidence shows. 5. Check the Model memory tab for reference documents with a high average corrections per document, and correct, remove, or supplement them. 6. Reparse affected documents so the changes apply to work already in the queue. 7. Return the following period and compare correction volume on the fields you changed. ## Related pages * [Model Memory](/configuration/model-memory) * [Improving accuracy: a deep dive into extraction models](/handbook/improving-accuracy) * [General Field Configuration](/configuration/field-configuration) * [Validate extracted data in the review interface](/configuration/user-validation) # OCR and Text Extraction Source: https://docs.affinda.com/configuration/ocr Learn how Affinda performs OCR (optical character recognition) and text extraction across PDFs, scans, and images, including supported languages and quality. Affinda's solution is designed to work effectively on both machine-readable documents and scanned images and files. For scanned images or documents where textual information is contained within images (e.g., logos), Affinda uses Optical Character Recognition (OCR) to convert the images into machine-readable data ahead of classification and data extraction. ## OCR Options Affinda provides four different options for customers that dictate whether OCR is applied to each document. While applying OCR on documents can increase overall performance, it adds additional processing cost and time (0.5 - 1 seconds per page), so applying OCR might not be suitable for all use cases. By default, new Workspaces will have 'Auto-Detect' OCR enabled. OCR settings OCR settings OCR is never applied, even if no text layer is found. Suitable for use cases where speed/cost is most important. Not recommended for most use cases. Applied to documents where no text layer is found within the document. Affinda will apply OCR over the entire document if fewer than 25 words are in the text layer of the document. The text extracted from the document will overwrite any existing text layer. If a text layer with over 25 words is found, OCR will not be applied. OCR is applied to elements of the document without a text layer to all documents uploaded. This preserves the original machine-readable text but also extracts additional information from images and pages in the document without this text layer. A typical example is an invoice where the supplier name and business number are contained within the header image/logo. Combining both the text layer and OCR-extracted text ensures comprehensive results. OCR is applied to all documents and is used in place of any existing machine-readable text layer. Typically, only recommended when the text layer in a document is frequently incorrect and needs to be corrected. If extraction is producing duplicated text, garbled output, or wildly incorrect values despite the document looking fine visually, the PDF may have a corrupted or duplicated text layer. In this case, set OCR to **Always Full OCR** at the Workspace level to force OCR from the image layer. To apply OCR to a single document, click the three-dot icon in the top right of the Document Validation interface and select **Apply OCR**. ## What if the text layer on a document is incorrect? From time to time, a document may be submitted that has a text layer that does not perfectly match the data in the document itself. Whilst this is uncommon, it means that Affinda has not applied OCR technology and thus we will not be able to accurately extract the data. In the rare cases where this occurs, users can click the three-dot icon in the top right corner of the Document Validation interface and click 'Apply OCR, ' which will apply OCR to the document and re-parse the data. Apply OCR to Document Apply OCR to Document Clicking 'Apply OCR' will reparse the full document. Users will need to reconfirm fields and the document after the reparse. # Picklist fields for constrained extracted values Source: https://docs.affinda.com/configuration/picklists Configure picklist fields in Affinda to constrain extracted values to a fixed list of options, including hard-coded, dynamic, and API-driven picklists. ## Overview Affinda’s data-mapping capability lets you normalise extracted values against your own lists, giving you cleaner data and fewer downstream corrections. ## When to choose each type | Data Type | Data format | Value prediction mechanism | | ----------- | ----------------------------------------------------------- | ------------------------------------------------------- | | Options | Short, fixed list (≈ 50 values or fewer) | Model predicts the value directly | | Data Source | Larger, often two-dimensional list from a downstream system | Raw data from the document matched by string comparison | ## Options A field whose **Data Type** is set to **Options** stores a single column of permitted values. Enter the items directly in the field editor. Any value outside this list is flagged during validation. Options field configuration Options field configuration **Best practice tips** * Keep the list concise. * Use consistent casing. * Review periodically to remove unused terms. ## Data Sources Data Sources serve as lightweight master data tables that you can manage directly within Affinda. Affinda supports CSV, XLSX or JSON files as Data Sources, meaning you can upload anything from supplier registers to nested product catalogues. Data Sources and Model Memory are often confused but serve different purposes. Data Sources are used for **mapping and enrichment** — matching extracted values against your reference data. They do not train the extraction model. [Model Memory](/configuration/model-memory) is the feature responsible for improving extraction accuracy over time. In short: Model Memory teaches the model *what* to extract, while Data Sources validate *whether* the extracted value matches your known data. Edit Data Source dialog Edit Data Source dialog ### Creating a Data Source A *key column* is the single field in your source table whose values are guaranteed to be unique; it is used by Affinda to reliably identify each record unambiguously. The *label* is the human-readable name stored for each record in a Mapping Data Source; it's what users will see in the validation UI and drop-downs. ### Learn from user feedback Under Data Source options, users can enable **Remember selections**. When enabled, the platform records the confirmed value for a given raw-text extraction and automatically reuses that value the next time the same text appears in a new document. This helps speed up future searches, improve suggestions, and ensures user validations contribute to ongoing performance gains. **Remember Selections** is particularly useful when extracted values consistently differ from your reference data — for example, abbreviated supplier names. When a user confirms a match that differs from the raw extraction, Affinda learns it as a mapping for future documents. This option is **enabled by default** for every new Data Source field. ### Automating updates Call `PUT /data-sources/{id}` for full replacement or `PATCH /data-sources/{id}` for incremental updates. Schedule these calls from your integration. ### Mapping document fields Matching Criteria dialog Matching Criteria dialog A *key column* is the single field in your source table whose values are guaranteed to be unique; it is used by Affinda to reliably identify each record unambiguously. The *label* is the human-readable name stored for each record in a Mapping Data Source; it's what users will see in the validation UI and drop-downs. * **Exact** – strings must be identical. * **Partial** – succeeds when the extracted string appears anywhere in the candidate. * **Fuzzy** – edit-distance logic allows minor typos. ### Tips for reliable matching * Trim whitespace and normalise case in your source files. * Ensure the key column is unique. * Keep label strings short so they fit comfortably in the UI. ### API reference ```http theme={null} GET /data-sources # List POST /data-sources # Create PUT /data-sources/{id} # Replace all rows PATCH /data-sources/{id} # Update selected rows DELETE /data-sources/{id} # Delete ``` # Pre-Processing Overview Source: https://docs.affinda.com/configuration/preprocessing Overview of pre-processing steps Affinda applies to incoming documents, including format conversion, deskewing, OCR, splitting, and classification. Pre-processing involves the automated cleaning, organizing, and structuring of uploaded files to prepare the documents for data extraction. ## Importance of Pre-Processing By ensuring documents are well-prepared before extraction, pre-processing * Reduces the likelihood of errors in later stages * Improves the speed and accuracy of data extraction * Enables the seamless handling of various document types and formats ## Key Pre-processing Actions: * **Invalid File Handling:** Identify issues that mean a document cannot be processed, such as insufficient text in the document, unsupported file types, corrupted files, or password-protected documents. * **File Format Conversion:** This involves converting file formats (e.g., images, PDFs with embedded data) into a PDF format suitable for processing. * **Remove Duplicates:** Workspaces can be configured to identify and reject documents that have already been processed. This can be configured by the user in Workflow Settings; see [Remove Duplicates](/configuration/duplicates) for more information. * **OCR (Optical Character Recognition)**: Extracting text from scanned or image-based documents using advanced OCR technology, ensuring high accuracy for all document types and formats. See [OCR and Text Extraction](/configuration/ocr) for more information. * **Language Detection:** Automatically identifies the language of the document to ensure high-accuracy extraction. Pre-processing settings can be found in your Workspace *Workflow Settings*. Pre-processing Settings Pre-processing Settings ## Advanced Pre-processing Settings: **Reading Order Model:** The Affinda Platform uses our proprietary reading order algorithms by default to capture word sequences in visually rich documents in a way that aligns with human comprehension. This ensures that text is processed in the same order a human would read it, leading to more accurate extractions. **Split Words:** Ensures words that are incorrectly combined are separated for extraction. Default is on. # Redact sensitive data and PII from documents Source: https://docs.affinda.com/configuration/redaction Configure document redaction in Affinda to mask or remove sensitive data such as PII before exporting redacted versions of documents downstream. While the most common export from the Affinda platform is structured data to be ingested into a downstream system, Affinda also offers document redaction capabilities on any document type. With these redaction capabilities, we edit the PDF so that the original text is completely removed and not just masked by an overlay. Click here for information about our pre-configured Resume Redactor. ## Configuring a Document Type for redaction The steps to create a new Document Type that is suitable for redaction are very similar to those required for the typical extraction of structure data. 1. [Follow this tutorial to create your new Document Type](/academy/model-creation) 2. Edit every field to ensure 'Allow Multiple Values' (found in Advanced Settings) is enabled (this ensures that if a field is repeated within the document, each version is redacted) 3. Upload documents to view fields to be redacted in the document validation interface 4. (optionally) Edit and update model predictions 5. Use the **Get Redacted Document** endpoint to return a redacted PDF version of the original document Get in contact with the Affinda team to discuss your redaction use case and to enable a 'redaction' setting on your document type that will optimise for this output Redacted Document example ## Exporting redacted file via API ```bash theme={null} curl -L -X GET "https://api.affinda.com/v3/documents//redacted" \ -H "Authorization: Bearer " \ -o redacted_.pdf ``` ### Frequently Asked Questions about Redaction To ensure the model redacts every version of the field on your document, you need to enable 'allow multiple' in your fields configuration. To do this, go to your Configure Document Type Interface >Locate your field > navigate to Advanced Settings > enable "Allow Multiple Values" For Redaction, we recommend setting all fields to "Allow Multiple Values" to avoid this issue. The performance of the redaction is determined by the performance of the underlying extraction model. To improve, we recommend adding more example documents and validating correct example documents to build Model Memory. Follow the [Improving Model Accuracy Tutorial](/academy/improving-accuracy) for step-by-step instructions. # Automatic splitting of multi-document PDFs Source: https://docs.affinda.com/configuration/splitting Configure Affinda's automatic document splitting to break up multi-document PDFs into individual files for separate classification and extraction. Document Splitting is a powerful feature that allows you to separate a single file containing multiple documents into individual documents for further processing. This is especially useful when working with batch-scanned files. Once split, each document inherits the Workspace’s classification and extraction rules, simplifying downstream workflows. ## Detailed Tutorial for Validating Splitting Click here for Affinda Academy tutorial ## Splitting Settings Splitting Settings Splitting Settings Configure splitting settings at the Workspace level by navigating to *Workflow Settings*. Click on the toggle to enable the automatic splitting of files, then select the splitter you would like to use. If splitting isn't working, first check that a splitter is selected in Workflow Settings — not just that the toggle is enabled. ### General Document Splitter All customers will have access to Affinda's General Document Splitter. This model has been designed to identify specific cues that indicate a new document, including: * Change in page numbering sequence (e.g. Page 1) * Change in key party within the document (e.g. an invoice from a different supplier is identified) * Change in key document identifier ### Custom splitter While the General Document Splitter has been designed to work across most use cases, there will be some use cases that will need additional configuration. Two different types of custom splitters can be created: 1. **LLM based**\ Design a prompt that details when a file should be split 2. **Key word**\ Split when a specific keyword(s) is found on a page [Reach out to the Affinda team](https://www.affinda.com/contact) if the General Document Splitter is not meeting your use case, and you want to discuss a custom splitting model. ## What happens to documents that are split? When a document is split into multiple components, new files are created in your account. These new files are created with a suffix added to the file name (e.g. \[filename]\_1, \[filename]\_2, etc.). Within the API response of the original file, users will also be able to find the identifier of the new files created, so that they can then request the data extracted from these newly created files. The PDF file of the documents is also included in the response so that new documents created can be added to your platform. ## Editing the splitting While the document splitter automatically splits a document, users will still have the option to manually edit the splitting or combine documents again through the 'Edit Pages' option within the document validation UI. This gives users full control over their documents. If there are any edits made to the file, the AI model will re-parse the affected documents to give the most accurate predictions. Any field validations made will be lost. See the [**Tutorial: Reviewing splitting and classification**](/academy/split-classify) for step-by-step instructions. # Standard field data types and parsing rules Source: https://docs.affinda.com/configuration/standard-fields Reference for Affinda's standard data types including text, number, date, currency, and boolean, with parsing rules and supported formats for each. Your field's data type determines how extracted values are processed and standardized. Different data types are available to ensure that structured and unstructured data are correctly categorized. The selected data type influences the structure of the data and the post-processing logic applied to extracted values, ensuring consistency and accuracy. ### Show Raw Values Affinda stores two versions of every extracted field: raw (exact text from the document) and parsed (after data-type formatting and other transformations). Both are included in data exports. In the app’s **Document Validation** interface, only the parsed value is shown by default. To show raw values alongside it, open a document, click the three dots in the top-right, and select "Show Raw Values". Once enabled, the raw value will be shown in italics underneath the parsed value. Show Raw Values Show Raw Values ## Text Raw text is retained as-is with no special formatting. Suitable for general strings, labels, or descriptions. Users can adjust the following text type options: * **Standardize bullets:** Removes bullet point formatting from extracted values. * \*\*Include line break: \*\*Maintains the line breaks from the original text in the extracted data. Text Options Text Options ### Text Transformations Transformations allow users to refine extracted text by applying a natural language prompt. Users can specify how they want text to be cleaned, reformatted, or transformed for better usability. Affinda processes transformations using either: * Large Language Models (LLMs) for dynamic text refinement * Code-based transformations, where possible, ensuring minimal variability in standardized data Text Transformations and the [field description](/configuration/field-configuration#field-description) serve different purposes. Use the field description to guide the model on *what* to extract from the document (for example, "Extract the billing address, not the supplier's address"). Use Text Transformations to control *how* the extracted value is formatted in the output (for example, trimming whitespace, normalising dates, or stripping trailing characters). ## Numbers Formats values into numbers. Users can adjust the number of decimals returned via Decimal Options in the Field Configuration view. ## Dates All Date Data types standardize dates into ISO 8601 format (YYYY-MM-DD and hhmmss). Affinda supports 3 date structures: * Date * Date/time * Date Range ### Date Options Date Options **Date Format Disambiguation** - Specify how the model should interpret ambiguous date formats (e.g., 03/04/2024). Choose the format that best matches your regional preference—**DMY** for UK-style dates or **MDY** for US-style dates. **Expected Tense** - improve predictions by indicating the expected tense of the date (Past or Future). **Default Day and Month** - Select the default for when dates are missing a day or a month. Date Options ## Location Geocoding is applied to identify and structure the address into street, city, country, etc. fields Users can adjust the following Location options: * **Expected Country**: Improve predictions by specifying the country you expect to find in the document. ## Phone Number Structured to include country code, international country code, formatted number and national number in the response. Users can adjust the following Phone Number options: * **Default country code**: Specify the default country code when one isn't found on the document. ## URL Identifies the url link and the domain # User Management and Permissions Source: https://docs.affinda.com/configuration/user-management Manage users, roles, and permissions in the Affinda app to control who can upload documents, validate extractions, configure models, and export data. Within the Affinda platform, teams can collaborate to configure their workflow and document types and to process documents on an ongoing basis. ## User Permissions ### Organization Permissions At an Organizational level, Affinda has three levels of permissions. Can manage other Users, Workspaces, Document Types, and Billing Can manage other Users (except for Owners), Workspaces, and Document Types Their only role is to validate documents within Workspaces for which they have been granted permission. Members cannot change any settings (unless they have been added as Workspace Admins - see below) ### Workspace Permissions Can update all Workspace settings. By default, all Organization Owners and Admins are implicitly Workspace Admins. Organization Members can be added as Workspace Admins to allow for the management of teams processing documents. Cannot update any settings. Workspace Members' permissions can be controlled at the organizational level in the **Organization Settings**. Owners and Admins can configure if Workspace Members can: * Upload documents * Edit file names * Reparse documents * Apply OCR * Manage Tags ## Adding New Users To invite new Users to your Organization, navigate to the '**Members**' settings from your Organization homepage. The invited User will receive an email inviting them to accept the invitation, at which point they will be prompted to either log in to their existing account or register a new account.  Organization Members Organization Members Users can also be removed by clicking the 'X' button next to their role. There must always be at least one Owner for an organization. ## Workspace Permissions By default, all organization members have access to every workspace in the organization; however, a Workspace can be set to 'Private' so that only certain team members will be able to view the Workspace. All Organization Owners and Admins will have access to all Workspaces, and only Members must be explicitly added to private Workspaces. To update Workspace permissions, navigate to 'Permissions' within the relevant Workspace. You will also be able to create Workspace Admins. # Validate extracted data in the review interface Source: https://docs.affinda.com/configuration/user-validation Review and correct extracted data in the Affinda document validation interface, including keyboard shortcuts, side-by-side viewing, and bulk approval. Affinda’s document validation UI provides an intuitive and efficient tool for reviewing the data predicted by Affinda’s AI models and making any necessary adjustments. It has two main purposes: 1. **Ensuring 100% accuracy** – while Affinda’s models are highly accurate, there may be data that needs human review. The validation UI allows this ‘human in the loop’ to correct any inaccuracies to ensure that the data is accurate before being exported for downstream processing. 2. **Creating a self-learning feedback loop** - any corrections made in the validation UI can be used to improve model performance over time. Documents confirmed by users may be added to [Model Memory](/configuration/model-memory), providing a reference set of documents that can be provided to the model when new documents are uploaded. This ensures that accuracy starts off high, and then improves as your model learns the formats commonly processed. It is important that users using the validation UI ensure that the tool is used consistently and accurately to avoid any model regression. ## Detailed Tutorials for User Validation Click here for Affinda Academy tutorial Click here for Affinda Academy tutorial Click here for Affinda Academy tutorial ## Field Indicators Extracted Fields in document validation Extracted Fields in document validation The following symbols indicate the status of each data field: 1. **Green Lightning Bolt:** Field has been automatically confirmed, meeting all validation criteria. 2. **Green Checkmark:** Field has been manually confirmed by a user. 3. **Orange Dot:** Field has not yet been validated and requires manual review. 4. **Red Flag:** Field has failed one or more validation rules and needs correction. ## Document Queue Management The Affinda Platform has been designed so that teams can process documents simultaneously. To ensure that effort is not duplicated, controls have been implemented to stop two users working in the same document: * After a user confirms a document, the next document in the queue that is not being looked at by another user will be presented * In the cases where multiple users have the same document open, the user who opens the document last will have a warning displayed to notify them of another user in the document # Custom validation rules for extracted data Source: https://docs.affinda.com/configuration/validation-rules Apply custom validation rules in Affinda to enforce business logic on extracted data, flag errors before export, and gate documents for human review. Within the Affinda platform, validation rules can be configured to automatically check whether extracted data meets predefined business logic. When these rules pass, the data is considered valid and does not require user review, enabling straight-through processing for compliant documents. Validation rules not only support model accuracy but also help identify documents that fail to meet business requirements. In the validation interface, users can see which rules have passed (auto-validated fields are marked with the bolt icon) and which have failed, clearly indicating where human review is needed. Fields against validation rules Fields against validation rules ## Creating validation rules Affinda allows you to create powerful, flexible validation rules using natural language prompts. Simply describe the business logic you want to apply, and Affinda will automatically generate th e code needed to enforce it, no manual coding required. ### **Steps to Create a Validation Rule** In the document validation interface, click “Configure Fields” in the top right corner Either select the pencil icon on the field you want to apply logic to or click the Validation tab, then select "Add Validation Rule". To reference specific fields, type @ and choose from the list. Validation rules can be created with just one or multiple fields. Clearly describe the condition or constraint. Add detail for more complex logic. Rules are created with the annotated field in the opened document as an example. As a best practice, create validation rules on documents that accurately reflect how the fields usually appear. Affinda will produce the corresponding rule logic based on your description. After generation, you can review the underlying code, tweak the prompt, and re-generate the rule as needed to refine the behavior. Validation Rule Configuration Validation Rule Configuration ## Pass and fail messages When you generate a rule, Affinda also creates default messages to display when the rule passes or fails. These messages are shown to users in the validation UI and help explain the outcome of the rule. You can customize these messages by including guidance in your natural language prompt—for example, specify what the pass/fail messages should say to make them clearer or more specific for end users. Example: “Ensure the invoice date is before the due date. If not, show: ‘Due date cannot be earlier than invoice date." ## Missing data handling In the Advanced Settings, users can define how a validation rule should behave if one or more of the referenced fields are not predicted. This is especially useful for rules involving multiple fields, where some fields may be optional or not consistently extracted. **Available Options:** * **Skip**\ The rule is skipped entirely—no pass or fail outcome is recorded. * **Fail**\ The rule automatically fails if any required field is missing. * **Pass**\ The rule is marked as passed, regardless of missing fields. * **Ignore**\ The rule runs by treating missing fields as neutral, attempting to return a valid result based on available data. * For example, useful in cases like subtotal + freight + tax = total, where freight is occasionally absent. ## Built-in validators For a set of common standardised field types, Affinda provides built-in validators that perform real-time cross-checks or format/checksum verification, including a live lookup against the [Australian Business Register](https://abr.business.gov.au/) for ABNs. To enable a built-in validator, add a validation rule on the relevant field with a prompt in the form: ```text theme={null} @field_name is valid X ``` Replace `@field_name` with the field reference. Affinda automatically maps the rule to the appropriate built-in validator based on the field type. **Supported validators:** | Validator | Check | | ------------------------- | -------------------------------------------- | | ABN | ABN resolves to a current, active ABR entity | | ACN | ACN ASIC checksum | | IBAN | IBAN country format + MOD97 checksum | | BIC | BIC/SWIFT ISO 9362 syntax + country code | | VIN (format) | VIN 17-character format | | VIN (format and checksum) | VIN format + check digit | ## Required fields A common validation use case is ensuring that certain fields are always present and extracted from a document. To streamline this process, Affinda automatically generates a “required field” rule for every new field created. This rule can then be quickly enabled with a single click. ## Validation rule results Validation rule results are surfaced to users in the validation UI, showing users which rules have passed (and therefore which fields have been auto-validated) and any failed rules that need user attention. For more information, see [User Validation](/configuration/user-validation). # Configure your document workflow Source: https://docs.affinda.com/configuration/workflow Configure each step in the Affinda document workflow, including ingestion, splitting, classification, extraction, validation, and export rules. Within Affinda's platform, we offer a configurable workflow designed to flexibly meet customers' document processing requirements. While most workflows share common steps, each step can be adjusted to align with your organization's unique processes. Workflow Settings Workflow Settings The workflow begins by uploading documents. Documents can be added through three primary methods: * **Email Upload:** Attach documents directly to an email inbox configured to your workspace. [(Learn more)](/configuration/email-upload) * **Integrations:** Use APIs or other integration services to upload documents programmatically. [(Learn more)](/reference/getting-started) * **Drag and Drop:** Manually upload documents by dragging and dropping into the workspace The uploaded documents then undergo various pre-processing steps. During this stage, OCR is applied to extract text from image files, invalid document types are identified and rejected, duplicates are detected, and several other essential processes are performed to prepare documents for further processing. See [Pre-Processing Overview ](/configuration/preprocessing)for more information. Document splitting provides the option to automatically separate a single file containing multiple documents into individual documents for further processing. See [Document Splitting ](/configuration/splitting)for more information. Next, documents are automatically classified into the relevant document types. Classification helps route each document to the appropriate extraction model efficiently. See [Document Classification ](/configuration/classification)for more information. Affinda's AI models extract relevant information from your documents. Users can create multiple information extraction models tailored to different document types and configure the fields and formatting required for each type. We use a combination of Large-Language Models, our [Model Memory ](/configuration/model-memory)concept, and an advanced Fingerprinting algorithm to ensure optimal performance that improves over time. Following extraction, documents undergo Machine Validation. Here, predefined rules and checks ensure that extracted data meets your accuracy and consistency criteria. Errors or anomalies are flagged automatically, significantly reducing manual verification workloads. See [Overview of Machine Validation](/configuration/machine-validation) for more information. When automated validation identifies potential issues or edge cases, documents enter a User Validation stage. In this step, human reviewers confirm or correct the extracted data using our Document Validation UI, ensuring the highest levels of accuracy before data is sent downstream. See [User Validation](/configuration/user-validation) for more information. Finally, structured data is exported. Affinda provides different export formats and a variety of tools to make integrating Affinda into downstream systems easy. See [Exporting Data](/configuration/export-data) for more information # Data retention policies and controls Source: https://docs.affinda.com/data-retention Configure how long Affinda retains uploaded documents and extracted data, including retention periods, deletion controls, and compliance considerations. ## Document Deletion By default, documents uploaded to Affinda will be retained indefinitely to ensure that users can continue to request this data. However, customers maintain full control over these documents, and these can be deleted at any time using one of the two methods below: * **Deletion**\ When a document is deleted, the document and all associated files are immediately removed from our servers. All access to the document will be lost. Document metadata, which may include file names but does not include the file content, may remain in Affinda’s database or backups of Affinda’s database for some time. To delete through the Affinda App, first reject the documents in Affinda by selecting the documents and clicking the bin icon. Then navigate to the rejected tab and select the documents again, and select "Delete Forever". Delete documents through the API by using the [Delete Endpoint. ](/reference/getting-started) * **Expiration**\ The Affinda API allows a customer to specify an expiry time when they submit the document (or update this after submission). When a document has an expiration date set, it will be automatically deleted on that date. ## Deleting an Organization Deleting your Affinda Organization will remove all data and documents associated with that account from Affinda. To delete your Organization, navigate to Organization Settings in the web application. ## Deleting a User To delete your user account, navigate to your user settings (in the top right corner of the platform) and select 'Delete my account'. # Deployment and Data Residency Source: https://docs.affinda.com/deployment-data-residency Affinda's regional server locations, data residency controls, and enterprise deployment options for AU, EU, and US data sovereignty requirements. ## Server Locations and Data Residency Affinda offers multiple app instances with different server locations. Available regions include **Australia (Global)**, **United States (US)**, and **European Union (EU)**. * New users are **automatically routed to the correct Affinda app instance** based on their location. * The **sign-up form clearly indicates** which instance users are creating an account in. * Users who attempt to log in to the **wrong instance will see a banner** suggesting the correct one. In addition, your API key only works on the instance where it was generated. (e.g. if you signed up at [app.us1.affinda.com](http://app.us1.affinda.com), use [api.us1.affinda.com](http://api.us1.affinda.com).)\ Each instance can be accessed using the following links: | Region | App URL | API base URL | | ----------- | ------------------- | ------------------- | | AU (Global) | app.affinda.com | api.affinda.com | | US | app.us1.affinda.com | api.us1.affinda.com | | EU | app.eu1.affinda.com | api.eu1.affinda.com | * **Data Residency Controls:** We can enforce restrictions to ensure no data leaves a specific region (e.g., prevent cross-region inference). ### Please contact us to discuss changing server locations or enforcing data residency controls. ## Enterprise Deployment Options For enterprise customers, Affinda provides additional flexibility by offered dedicated tenants that are fully isolated environments tailored to your organization, or private cloud deployments. [**Get in touch with**](https://www.affinda.com/contact) our team to learn more about enterprise deployments. # Error glossary and troubleshooting Source: https://docs.affinda.com/error-glossary Reference for common Affinda API and platform errors, including likely causes and recommended fixes for upload, parsing, and validation failures. | **Error** | **Explanation** | | :------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | duplicate\_document\_error | Document has been rejected due to an existing duplicate in the workspace. (Condition: 'Reject duplicates' setting is enabled for the workspace.) | | no\_text\_found | Affinda didn't find any text on the document. This error often occurs when image files are uploaded to Affinda. | | insufficient\_text\_found | Error raised when documents contain no extractable text, even after OCR processing.
 This typically occurs with images such as photos of people or objects, which do not contain readable text. | | file\_corrupted | The file uploaded to Affinda was corrupted | | unknown\_error | Raised when parsing fails due to internal extraction issues.
 The cause can vary and requires investigation. As an immediate step, try reparsing the document.
 If the issue persists, please contact the Affinda team for further analysis. | | file\_too\_large | The maximum file size that can be uploaded to Affinda is **20MB**. | | document\_classification\_failed | Document rejected does not match any of the configured document types in the workspace. This means you have enabled 'Reject Documents' under classification in the workspace settings. If this is not desired behaviour, switch this setting off. | | invalid\_file\_type | Affinda supports a wide range of file formats for document processing: **Text-based formats:** - PDF, DOC, DOCX, XLSX, ODT, RTF, TXT, HTML **Image-based formats:** - PNG, JPG, TIFF, JPEG | | no\_parsing\_credits | You have run out of credits in Affinda. Go to your Organization's Billing page to purchase more credits. Once you have purchased more credits, simply reparse the document. | | parsing\_deleted\_documents | This error is raised when attempting to reparse a document that has already been deleted. | | capacity\_exceeded | Affinda's capacity has been exceeded by requests at that time. Wait a few moments and reparse the document to resolve. | | document\_conversion\_failed | Affinda, as part of its document preprocessing, converts the uploaded file to a readable PDF format before extracting details. If this conversion fails—due to a timeout or an issue with the document—an error is raised. In such cases, try reparsing the document or uploading a new copy. | | password\_\_protected | The document you have uploaded to Affinda is password-protected and cannot be accessed. | | file\_not\_found | This error is raised when the document has not been preprocessed and saved in Affinda for parsing, or if the document has been deleted and a reparse has been requested.
 In such cases, please reupload the document to parse. | | incorrect\_document\_type | Raised when an unsupported document type is uploaded to a specific Document Type Extractor.
 For example, uploading invoices to a Resume Parser extractor. | | parse\_terminated | Parsing the document you have uploaded has exceeded our document timeout limits. If you are running into this issue frequently, due to large or dense documents,[ get in contact with the Affinda team](https://www.affinda.com/contact) to discuss custom timeout limits. | | parsing\_failed\_timeout | The error raised when documents exceed the timeout limit during parsing. This often occurs during bulk uploads where the wait: true parameter (default) is used.
 In most cases, reparsing the document will resolve the issue. | | requires\_ocr | Raised when a document requiring OCR encounters issues during automatic OCR processing.
 In most cases, clicking on the three dots in the top menu bar and selecting 'Apply OCR' will reparse the document with OCR and resolve the issue. |   # Frequently asked questions Source: https://docs.affinda.com/faqs Answers to common questions about the Affinda platform, including pricing, supported document types, accuracy, integrations, and security practices. ## Account and Security Yes. Users can configure MFA by navigating to their Profile Settings (click the user icon in the top left corner) and clicking "Set up MFA". Affinda supports both email and authenticator apps. If you would like to require MFA for all users in your organisation, [reach out to the Affinda team](https://www.affinda.com/contact), and we can enable this security requirement. For more on Affinda's certifications and data handling, see our [security & compliance overview](https://www.affinda.com/security). Affinda doesn't limit the number of users you can add to your organization Affinda is ISO27001:2022 certified and SOC 2 Type 2, GDPR and HIPAA compliant. ## Capabilities Affinda supports over 50 languages, including the following: | **Language Code** | **Language** | | :---------------- | :---------------- | | En | English | | De | German | | Ja | Japanese | | Es | Spanish | | Fr | French | | It | Italian | | Pt | Portuguese | | Zh-tw | Chinese (Taiwan) | | Zh-cn | Chinese (PRC) | | Nl | Dutch | | Pl | Polish | | Sv | Swedish | | Cs | Czech | | Ru | Russian | | Da | Danish | | Ro | Romanian | | No | Norwegian | | Id | Bahasa Indonesian | | Hu | Hungarian | | Tr | Turkish | | Hr | Croatian | | Sk | Slovak | | Fi | Finnish | | Vi | Vietnamese | | Th | Thai | | Sl | Slovenian | | El | Greek | | Et | Estonian | | Ar | Arabic | | Ko | Korean | | Lt | Lithuanian | | Fa | Persian | | Bg | Bulgarian | | He | Hebrew | | Uk | Ukrainian | | Tl | Tagalog | | Mk | Macedonian | | So | Somali | | Lv | Latvian, Lettish | | Sq | Albanian | | Af | Afrikaans | | Sw | Swahili | | Bn | Bengali | | Hi | Hindi | | Ur | Urdu | | Mr | Marathi | | Gu | Gujarati | | Ta | Tamil | | Ne | Nepali | | Ml | Malayalam | | Te | Telugu | | Kn | Kannada | | Pa | Punjabi | Yes, Affinda supports multilingual documents. The default page limit in Affinda is 20 pages per document. If you need to increase this to fit your use case, [get in contact](https://www.affinda.com/contact) with the Affinda team. All data exports include a `rawText` field containing the full, unstructured text extracted from the document. For every field Affinda extracts, you’ll get two values: * **raw** — the value exactly as it appears on the document. * **parsed** — the value after data-type processing and text transformations (e.g., date/number normalization). After splitting is enabled, the original multi-document file remains available as the “parent” record, and each piece of it becomes a “child” document. The parent–child relationship means you can still access the full set of pages and see which children were created. In practice, when a file is split Affinda creates new files with suffixes on the filename (e.g., `[filename]_1`, `[filename]_2`). In the app, you can use the “Edit Pages” function to split or combine pages again. Affinda's fingerprinting algorithm uses both textual and visual content to construct a representative embedding of the document's meaning and layout. This includes not just the physical aspects (layout, text location, formatting) but also analyzes the semantic meaning of the text itself. Affinda requires you to configure a document type to extract data off your document. To do so, see [Creating a New Model](/academy/model-creation).  You can do this quickly by letting the model intelligently suggest fields for you.  Simply, 1. Upload one document 2. Create a new document type 3. Select "Set up fields for me", the model will anaylse the content of your document to extract the key fields  4. Click "Finish configuration" and see the data extracted off your documents 5. Upload more documents of the same type to see your data extracted Yes, Affinda can extract table data, preserving the relationship between data belonging to the same row.  To extract tables, you need to first define your table field.  1. Navigate to a document with a table you want to extract 2. Click "Configure fields" in the top right corner 3. Create a new field and set the data type to Table 4. Add the column fields you want to extract eg. "description",  "unit" or "total"  5. Click "Finish configuration" and reparse the document See [Groups and Tables](/configuration/group-table-fields) in the configuration guide for more information.  For tips on how to correct and validate table data, review the [Tables Editor](/academy/table-editor) tutorial.  ## Configuration Yes, Affinda is completely configurable, so you can add custom fields as you like. See [Field Configuration](/configuration/field-configuration) to see how to add custom fields to your document types in Affinda. Affinda does not currently support creating calculated fields within the app; however, we are working towards it on our product roadmap. For the time being, Affinda can support your calculated fields by automating the extraction of the source fields in a structured and usable format, so you can build calculated fields in your own systems. Absolutely - Affinda's allows customers to create validation rules using a natural language description of the logic that they would like to implement: 1. Type your rule in plain language, referencing any extracted field with **@field\_name**. 2. Click **Generate** to create the rule and view the underlying code. The prompt can handle a broad range of validations. If you require more specific logic, Affinda doesn't support uploading custom code directly. Instead, you can: * Pull the extracted data via the API, * Run your own checks locally, and * Push the results back to Affinda through our **Create Validation Result API** so the outcomes appear in the app and flag documents for review. Affinda document types are built to handle multiple layouts and templates. If the information you’re extracting follows the same schema (i.e., the same fields and structure), you don’t need a new document type for each template. However, our models perform best with simpler schemas. If the extraction schema differs significantly across templates, consider splitting them into separate document types. By default, documents that the model doesn't match to one of the document types linked to your workspace will remain in "For Review" as unclassified. Users can review and manually classify these documents as they like. Alternatively, users can configure their workspace so documents that are left unclassified are automatically rejected. To do this, navigate to the Workflow settings → Configure Classification and enable "Reject Documents". ## Performance & Troubleshooting We do not publish a universal benchmark as processing time varies by document and workload. **What you can expect, in practice:** * Simple 1 to 3 page docs typically complete in about 30 seconds end to end. * Medium sets, for example 5 to 20 pages or documents with many fields, often take 1 to 3 minutes. * Heavy docs, for example long multi page tables or poor quality scans, can take several minutes. **What drives the variance:** * Page count. * Field count and complexity. A dense multi table invoice is slower than a header only form. * Pre processing needs. OCR on scans and automatic document splitting add time. * Concurrency and queue depth when you upload in bulk. **About bulk uploads and queues**\ If you upload many documents at once, they may enter a queue. This can add a wait before processing starts. The size of that delay depends on your concurrency, your account limits, and the current system load. **Resume Parsing** Our Resume Parser uses a different model type that is faster and more lightweight than our other document type models. Expected time to process a resume document is typically 2-3 seconds. Documents uploaded to Affinda might cause an error for a number of reasons. Review our [Error Glossary](/error-glossary) to understand the error and how you can fix it. If Affinda models are repeatedly mixing up two of your document types in classification, there are a few steps you can take to improve performance. Firstly, ensure there are adequate examples in your model memory of both document types. Check that you have not confirmed any documents that are labelled as the wrong document type. Secondly, check that the name and description of each document type are clear and relevant. The models use these to predict classifications. Add disambiguation hints (unique keywords, fields, or layout cues) to help the model tell similar types apart. **Document type:** Broker Invoice **Description:** An invoice for brokerage/origination/referral fees. Line items typically include the keywords “brokerage”, “origination”, or “referral.” From time to time, users may hit an unexpected error when taking action in the Affinda app. If this occurs, try refreshing the page and trying again. If problems persist, get in touch with Affinda Support. ## About Us and Contact Fill out the form [here](https://www.affinda.com/contact), and our team will get back to you. \_Affinda specialises in enterprise AI transformations in business process automation, enabling intelligent document processing. Affinda’s AI platform, and customised solutions, automate end-to-end processes for faster, smarter operations and real productivity gains.  \_ \_Affinda's document AI technology combines 10+ years of IP in document reconstruction, with the latest advancements in computer vision, natural language processing and deep learning.  \_ \_Our technology is used by enterprises globally across a wide range of industries to automate their document processing workflows. \_ \_We are headquartered in Melbourne, Australia, with a global team across Asia Pacific, North America and Europe. \_ \_For more information \_[*head to our website.*](https://www.affinda.com/about-us) Affinda offers flexible and scalable pricing plans to meet businesses' needs. For full pricing details, please head to our website pricing pages. * [Affinda Platform pricing](https://www.affinda.com/pricing-plans) * [Resume Parser pricing ](https://www.affinda.com/recruitment-ai-pricing) # Create your integration with the Affinda Agent Source: https://docs.affinda.com/handbook/agent-integrations Use the Affinda Agent to build no-code data exports to downstream applications like ATS, ERP, and CRM systems using natural language. ## Purpose This tutorial walks you through using the Affinda Agent to automate data export to your downstream applications. The agent takes natural language instructions, enabling users to create integrations without writing code. Users will need to create a Pipedream account to connect to other applications for data export. Any downstream system with an API endpoint that isn't available through Pipedream can be connected via the [manual pathway](/configuration/agent-integrations#how-credentials-work-across-integration-types) using custom code and [Secrets](/configuration/agent-integrations#secrets) for credentials. ## 1. Create a new integration Integrations are tied to a workspace and document type. Users can create a new integration in the Affinda app by: * Navigate to the Integration tab in your organization, and select "+ Create Integration", or * Navigating to the Workflow settings in a particular workspace, opening the Data Export Settings, and clicking "+ Add Integration" ## 2. Connect account using Pipedream To create an integration, users must first connect their account to the desired downstream application using Pipedream. Use the search bar or scroll to find the service you would like to connect. Click here to view a full list of services pipedream offers. This will launch a Pipedream pop-up window, where you can grant Pipedream access to your account on your selected service. Pipedream pop-up Check carefully that you have granted Pipedream all required permissions; sometimes they are easy to miss. If you have already connected to the service previously, locate the service and click on the account you wish to use. ## 3. Initial configuration If your integration requires multiple downstream services, you can add them here. A **trigger** is the event that starts the data export process. Users can choose from 2 triggers for data export: * When a document is parsed, the export runs immediately after the document has been processed * When a document is validated, the export runs only after the document is confirmed (either through manual or auto confirmation) ## 4. Create, test and fine-tune your integration code Explain to the agent what you want the integration to do, where the data should be pushed, and what format it should be in. The agent will ask for additional information as needed. Affinda Agent Once the agent has created the code, test run with an example document from your workspace. Check your downstream apps to see how the data has been pushed. If your integration is getting an error, click Fix in chat to send the error message to the agent. The agent will update the code accordingly. You can also review the failed run logs in the "Runs" tab. ## 5. Enable Once you are happy with your integration, enable it by switching on the toggle in the top right-hand corner of the Configure Integration interface. Now your integration will automatically run every time the trigger event happens. You can also enable integrations in the Data export Workflow Settings pane. # Writing field descriptions Source: https://docs.affinda.com/handbook/field-descriptions Practical guidance for writing effective field descriptions so the extraction model gets ambiguous fields right, including eight concrete patterns and a checklist. A field description is a short instruction the model reads every time it extracts that field. It is the place to tell the model something it cannot work out from the field name or the document alone. The guidance below comes from reviewing descriptions across real projects. All examples are anonymised. ## Do you need one? If you can write the description without looking at a document, or without a specific mistake in mind, skip it. "The date when the invoice was issued" on a field called "Invoice date" adds nothing: the model already reads the field name. Write a description when: * The field name is jargon or ambiguous ("Connote number", "Box 24a"). * The model got this field wrong and you can say how. * You know something about your documents the model cannot infer. * The field is a dropdown or a repeating group (see below). Fix the field name first. "Invoice due date" beats "Date" plus a description explaining which date you meant. ## The eight jobs a description can do **1. Separate lookalikes.** The most valuable move. Name the value the model confuses this field with, and say which one you want. > "This is the vehicle identification number (VIN). Do not return the registration number, model, or make." **2. Point at labels and locations.** Quote the literal text the value sits next to, including variants, and say where it lives. > "Often labelled 'B/L No.', 'Ref No.', or 'Booking No.', usually at the top right of the first page." **3. Draw the boundary.** Say exactly where the value starts and stops. > "Date only. Do not extract the time." **4. Permit an empty answer.** Models over-extract when they feel obliged to return something. > "Not every document contains this field, and that is fine. Leave it blank rather than guessing." **5. Supply facts the model cannot know.** Conventions specific to your documents or business. > "Purchase order numbers are 9-digit strings starting with '2'." **6. Show a good and bad example pair.** One concrete pair beats a paragraph of rules. > "Correct: ABC123. Incorrect: 'Registration no: ABC123' (the label must be stripped)." **7. Constrain repetition.** For fields that return multiple values, state the expected count and forbid duplicates. > "Return each person as a separate entry. Do not merge names or repeat a name that appears in several places." **8. Give fallback logic.** Tell the model where to look first, where to look next, and what never to use. > "Prefer the date next to 'Effective from' or 'Effective date'. Otherwise use the date next to wording like 'This agreement was made on'. Do not use a date from the signature block." ## Style * **One or two sentences, one failure mode.** Long descriptions are the exception, and every word is processed on every extraction. * **Positive before negative.** "Extract X, not Y" beats a bare "Do not extract Y", which leaves the model without a target. * **Prune when you add.** Descriptions accumulate edge cases and eventually contradict themselves. Reread the old sentences when adding a new one. * **Any language works.** Descriptions in the document's own language perform fine. ## Dropdown (options) fields If the labels are short or domain-specific, say what each value means: > "Whether the deal includes an option: 'Call' (buy) or 'Put' (sell)." If the value is inferred rather than read off the page, give the trigger for each option, including the unclear case: > "Return 'true' if the receipt includes a meal. If there are only drinks, return 'false'. If the receipt does not say what was ordered, return 'false'." ## Grouped and repeating fields Describe the parent, not just the children: what one instance of the group represents, and what makes two instances distinct. For groups that can repeat, add the cardinality constraint from job 7 up front ("expect at most three per document", "no duplicates"). Returning too many instances is the known failure mode. ## What descriptions cannot do They guide the prediction. They do not reliably reformat output (use formatting options), they do not enforce constraints (use [validation rules](/configuration/validation-rules)), and they do not override your reference examples; the model reads all of these together. ## Checklist * Says something the field name does not. * Targets a specific mistake or a specific fact about the documents. * Tells the model what to extract, not only what to avoid. * Says whether an empty answer is acceptable. * As short as it can be while still doing its job. # Getting started with the Affinda platform Source: https://docs.affinda.com/handbook/getting-started Learn the basics of navigating the Affinda app: organizations, workspaces, document types, workflows, and document statuses for new users. ## Purpose This tutorial introduces new users to the structure and core concepts of the Affinda platform. It explains how organizations, workspaces, document types, workflows, and statuses fit together, and walks through the document processing lifecycle step by step. The goal is to equip users with a clear mental model of how Affinda works, so they can confidently start uploading and managing documents. This tutorial is designed for all new users of the Affinda platform. No technical knowledge is required. ## 1. Understanding the Affinda Structure * **Organization**: The top-level entity where your settings, document types, billing, and members live. * **Workspace**: A dedicated area within your organization for specific workflows and document processing tasks. - Store your **Document Types** - Manage **members and permissions** - Control **billing** - Configure **Organization-wide settings** * Have unique workflows tailored to specific use cases (e.g., invoices, IDs, contracts) * Display documents and their statuses * Connect to specific document types ## 2. Document Types: A Document Type in Affinda is a template that tells the platform how to recognise, extract and validate data from a certain category of documents- like invoice, passport or a specific type of contract. **Created at the Organization level** – Document Types are registered at the organizational level and then linked to one or more workspaces where they’ll be used. **Deployed per Workspace** – In each workspace, you select which Document Types apply. Affinda will only classify and extract documents using models for those selected Document Types. ## 3. Workspace Dashboard The Workspace Dashboard is the starting point for users to commence validating documents. By default, users will be directed to view documents in the 'For Review' queue for the workspace. However, documents at different statuses (see below) or in specific document types can easily be viewed. Workspace Dashboard Workspace Dashboard ### Document Status Documents uploaded into a workspace will hold one of the following statuses: * **For Review** – Processed by the model but requires validation * **Confirmed** – Passed validation, either through manual review or auto confirmation. * **Archived** – No longer needed, but stored for reference * **Rejected** – Removed from processing pipeline ### Tags Tags can be easily added to documents to ensure easy filtering of documents. A common use of tags is to flag documents that have specific issues with them for additional review or approval. Create new tags by clicking on the tags drop-down, typing in your label, and clicking "Create Tag". ### Adding columns and sorting Additional columns can be added to the dashboard by clicking the cog icon in the top right corner. Column values can be sorted in ascending or descending order. This means users can review either the oldest or newest documents first. ## 4. Understanding your workflow Documents are uploaded to a Workspace in Affinda and will follow it's configured Workflow. Let's walk through each step in the workflow and how you can configure it. Workflow Settings Workflow Settings Choose how documents enter the Affinda Platform: * **Manual Upload** – Drag and drop files * **Email Upload** – Send to a unique email address * **Integrations** – Use the API or other services, see [API reference](/reference/authentication) for more. Next, Affinda applies several steps to prepare your documents before model analysis. You can * **OCR (Optical Character Recognition) Options**: Technology that converts printed or handwritten text into machine-readable text. Select either Auto-detect (default), Partial, Full, or Skip. Learn more about what OCR setting you should use [here](/configuration/ocr). * **Remove Duplicates** – Save wasting credits on duplicates, only removes exact document matches. * **Advanced Options** – Choose custom reading models or enable word-splitting Splitting in Affinda is the process of automatically separating a multi-document file (like a PDF with multiple invoices) into individual documents for more accurate processing. Enable this to detect and split files containing multiple documents (e.g., an invoice + tax form in one file). Classification in Affinda is the step where Affinda identifies and labels the type of each document (e.g., invoice, resume, contract) to then route it to the correct workflow and extraction model. The platform classifies documents from the document types linked in that workspace. Our models will analyze the contents of your document against the Document type's **name** and **description.** If a document doesn’t match any type: * It will be marked as **Unclassified** * You can choose to **reject or manually review** these Each document type has a specific extraction schema that defines fields to be captured (e.g., invoice number, due date). Affinda offers a number of ways to validate the data extracted from your document is accurate. Users can manually validate documents through Affinda's intuitive document validation interface. Documents should be confirmed when all extracted data is correct. Alternatively, Users can configure data mapping and validation rules to automatically validate data. Turning on **auto confirmation** will confirm documents that pass all validation rules. Documents that don't pass all rules should be reviewed by a user. Select settings for **Model Memory**: a set of validated documents used by the model as examples. Model memory allows models to improve extraction accuracy over time, learning from your documents. We recommend **Auto mode** for most use cases (see [Model Memory](/configuration/model-memory) for more information). Use API keys or webhook secrets to export processed data to downstream systems. ## Best Practices * Enable document splitting if your files contain multiple documents * Use auto-confirmation only if your validation rules are robust * Keep model memory clean — only validated, correct documents should be saved # Improving accuracy: a deep dive into extraction models Source: https://docs.affinda.com/handbook/improving-accuracy Strategies and best practices to push Affinda extraction models to 99%+ accuracy, including training data, schema tuning, and validation feedback loops. ## Purpose Achieving "good enough" (e.g.**\~80-90% accuracy** ) is not enough for mission-critical document processing. Affinda bridges the gap to "excellent" (**99%+ accuracy**) through our approach, reducing manual work and ensuring top-tier performance. This guide provides an understanding of how Affinda's information extraction models work and walks users through the steps they can take to uplift the performance of their models. The tutorial covers building high‑quality Model Memory with validated documents, configuring validation settings, adding field descriptions, and troubleshooting low‑performing templates to maximize extraction accuracy. To follow this tutorial, Users should hold Organization Owner or Admin permissions. If you have not configured your first model yet, follow the [Creating a New Model](/academy/model-creation) tutorial first. ## Under the Hood: How Affinda Extracts Data This algorithm captures word sequences in visually rich documents in a way that aligns with human comprehension. This ensures that text is processed in the same order a human would read it, leading to more accurate extractions. Selects and utilizes the best-performing LLMs for each task, ensuring optimal results across different document types and structures. Uses a **retrieval-augmented generation (RAG)** system to enable continuous improvement. Corrections made in one document are instantly applied to future extractions, eliminating recurring errors without requiring extensive retraining. See [Model Memory](/configuration/model-memory) for more information. Identifies similar documents in Model Memory and provides relevant examples to the model, ensuring highly accurate data extraction and reducing errors. ### Benefits of Our Approach * **No extensive model training required** – Unlike traditional ML models that require hundreds of training samples, Affinda learns dynamically and applies corrections in real-time. New, high-performing models can be created in a matter of minutes, not weeks. * **Higher accuracy, less manual work** – Moving from 95% to 99% accuracy reduces errors by 80%, cutting down the need for human intervention significantly. * **More intelligent than static LLMs** – Unlike generic large language models that rely on fixed prompts and lack continuous learning, Affinda actively applies nuanced learning from past interactions to make better decisions. ## Steps to Improving Accuracy Visual Learner? Follow along with our Video Tutorial: