Documents AI photo-capture interface. Field extraction is planned.
Documents AI photo-capture interface. Field extraction is planned.
← All native guides

Xodera Plugins · Bubble Native

Xodera Documents AI Native

Turn a receipt or delivery photo into a draft form. Let AI suggest the date, total and other requested fields, then let a person review them before saving.

Public beta guides · Haptics instructions are in its Bubble listing

Public beta offer: free Bubble install · 7-day card trial, then US$1.50/month per plugin/project.

Documentation reviewed 6 November 2026

Practical examples

Prefill an expense draft from a receipt photo

Repeated typing of merchant, date and total slows expense entry; extracted fields can be a reviewable draft.

`fields_json = ["merchant","date","total","currency"]`; the user captures a receipt image and separately consents to processing. Use only sample receipts while testing.

Planned: `analysis_requested` → Analyze Captured Document using the bounded exported bytes/MIME/field names/consent/request ID → show returned fields in your editable Expense form.

The action returns `status`, `operation_id`, `fields_json` and `review_required`. Your user corrects/approves the fields before your workflow creates an Expense.

On an uncertain result, Read Analysis with the same `operation_id`; do not issue another analysis automatically. Consent withdrawal clears retained capture/export; never persist raw base64 in a public Thing or logs.

Planned. A person must review every suggested value before saving.

Read a delivery-note reference for a staff review form

A warehouse user should be able to review a suggested reference/date instead of typing it from a photographed paper slip.

`fields_json = ["delivery_reference","supplier","delivery_date"]`; capture the relevant side of a sample delivery note while testing.

After separate capture/processing consent, Analyze Captured Document proposes the selected fields. Show the photograph beside editable fields and ask staff to confirm the matching Delivery record.

Keep the returned `operation_id` to check the result again and `fields_json` as a proposal. Your workflow performs the actual Delivery lookup/update only after staff review.

Missing, ambiguous or incorrect fields require manual correction. A provider error leaves the original Delivery unchanged; Read Analysis check the result ofs an uncertain operation.

Planned. A person must review every suggested value before saving.

Suggest an equipment serial number from a label photo

A maintenance form can offer a reviewable model/serial suggestion when an asset label is awkward to type.

`fields_json = ["manufacturer","model","serial_number"]`; capture a sample equipment-label image; choose your AI provider in the project settings.

The planned Analyze Captured Document action returns proposed strings. Display them next to the photo; let the user correct them before your Asset lookup or maintenance workflow.

Use returned `fields_json`, `review_required` and `operation_id`. Treat identifiers as text so your app preserves leading zeros.

If the image is unreadable or the model proposes a wrong string, allow manual entry. Read the same operation after an uncertain response rather than charging another inference.

Planned. A person must review every suggested value before saving.

What works now

Private beta. Photo capture is available for testing. Extracting fields from the photo is planned and is not ready to use in your app yet.

Build the workflow

Planned

Planned workflow. Not available in the current beta yet.

These examples use app records such as Lesson, Message and Order. Replace them with your own data types and element names. Example media addresses must be replaced with your own files.

  1. Planned: choose the fields your form needs, for example fields_json=["title","date","total"]. Enable enable_analysis_export and set analysis_context to the selected account or record. These analysis settings are not available in the current capture version.

  2. Let the user take a photo and agree separately to processing. On analysis_requested, run Analyze Captured Document using this element's analysis_image_base64, analysis_mime_type, analysis_fields_json and analysis_consent. Use analysis_request_id as idempotency_key.

  3. Save the returned operation_id, request_id and status. If status is processing, use Read Analysis with that operation_id to fetch the result later.

  4. Show the returned fields_json in an editable review form. Save approved values only after the user checks them and presses Confirm. Keep the original record until that confirmation.

Workflow diagram — not an app screenshot · SVG

Configure once

Create or choose your Bubble app project in BestPlugins → Dashboard → Plugins. Choose Xodera Documents AI Native, copy its key, then open Bubble → Plugins → Xodera Documents AI Native and paste it into project_api_key. Save once; then use the actions below. Each plugin in each project has its own key.

Ask for camera permission and explain why the photo is needed. Processing needs a separate user agreement. Choose your AI provider in the project settings; its usage is billed by that provider.

Configure once
  1. Create or choose your Bubble app project at BestPlugins → Dashboard → Plugins.
  2. Choose this plugin and copy its project key.
  3. Open Bubble → Plugins → Xodera Documents AI Native; paste the key into project_api_key and save.
  4. Add the element, choose your app data and build the workflow below.
  5. Private beta access only for now. Public installation and paid activation are not open yet.
Installation and subscription

For Audio Player, Video Player, Photo Editor, Audio Recorder, Files Kit and Haptics: free Bubble installation, a 7-day trial with a card, then US$1.50 per month per plugin and app project. Development and production are included, with no operation cap. File-size and feature limits still apply. Review billing and cancellation before confirming. Other plugins remain unavailable for purchase.

Save the result in your app

Example ExpenseDraft: owner, operation_id, request_id, status and proposed_fields_json. After review, save the approved date, total and other fields, plus reviewed_by and reviewed_at. Map only fields your form requested. Do not put the full image content into logs or ordinary text records.

Failure, cancel and recovery

If the result is delayed, keep the same request and use Read Analysis for the known operation_id. Do not take a new photo or create a new request automatically. If the user withdraws consent, clear the photo and stop offering the result; this cannot recall a copy already sent or saved.

Capabilities and limits

Planned image input: PNG, JPEG or WebP, up to 5 MiB; request 1–32 distinct field names. Always review extracted values. This is not identity verification, a check of document authenticity or a medical decision tool. AI-provider charges are separate.

Settings, actions and results

Use these names in Bubble. Planned features are marked separately.

Available beta settings

Element settings

document_side · textbutton_label · textconsent_text · textdisabled · yes/nofields_json · textprocessing_consent_text · textanalyze_button_label · textcheck_button_label · textlanguage · textui_text_json · text

States

capture_status · textlocal_uri · textmime_type · textdocument_side · textimage_width · numberimage_height · numbererror_code · textis_capturing · yes/noanalysis_status · textanalysis_operation_id · textanalysis_fields_json · textanalysis_error_code · textreview_required · yes/nois_analyzing · yes/no

Events

capture_startedcapture_succeededcapture_cancelledpermission_deniedcapture_erroranalysis_startedanalysis_readyanalysis_pendinganalysis_error

Actions and their inputs

Element settings · 12

Planned workflow. Not available in the current beta yet.

document_sidetext · Default: "front"
Example valuefront
Example Bubble expressionCapture Side Dropdown's value
Use the current business record’s value; validate it against the limits below.
button_labeltext · Default: ""
Example value""
Example Bubble expressionApp Texts' capture_label
Visible app text; empty uses built-in localized copy where supported. No credentials.
consent_texttext · Default: ""
Example valueI agree to capture this non-sensitive receipt.
Example Bubble expressionApp Texts' capture_consent
Explain the specific capture/processing purpose and recipient. Consent withdrawal clears retained bytes, not prior app copies.
disabledyes/no · Default: false
Example valueno
Example Bubble expressionGuideHost's is_busy (your yes/no custom state)
Disable the element while your app is busy or this action is unavailable.
processing_consent_texttext · Default: ""
Example valueI agree to send this image to the configured AI provider for draft fields.
Example Bubble expressionApp Texts' processing_consent
Explain the specific capture/processing purpose and recipient. Consent withdrawal clears retained bytes, not prior app copies.
analyze_button_labeltext · Default: ""
Example value""
Example Bubble expressionApp Texts' analyze_label
Visible app text; empty uses built-in localized copy where supported. No credentials.
languagetext · Default: "auto"
Example valueuk
Example Bubble expressionCurrent User's preferred_language
Set language=auto to follow a supported device or browser language. Enter a supported language code to choose it explicitly.
ui_text_jsontext · Default: ""
Example value{}
Example Bubble expressionApp Settings' player_labels_json (supported keys only)
Optional JSON with supported button labels. Leave empty to use the built-in text.
enable_analysis_exportyes/no · Default: false
Example valueyes
Example Bubble expressionApp Settings' enable_reviewed_extraction
Planned: allow the analysis action to use the photo after both user agreements. Off by default.
analysis_contexttext · Default: ""
Example value<current-user-id>
Example Bubble expressionCurrent User's unique id
Stable value for this account or record. Changing it clears the previous photo.
is_activeyes/no · Default: true
Example valueyes
Example Bubble expressionGuideHost's view_is_active (your yes/no custom state)
Set yes while this view is open. Set no when leaving, so playback or current work can stop.
fields_jsontext · Default: "[\"title\",\"date\",\"total\"]"
Example value["title","date","total"]
Example Bubble expressionExpense Settings' extraction_fields_json
JSON array of requested extraction field names; the output is proposed data for human review.
Actions and their inputs · 2

Planned workflow. Not available in the current beta yet.

Analyze Captured Document
image_base64text · Default: —
Example value<canonical bytes from consented export>
Example Bubble expressionDocument Capture's analysis_image_base64
Use the current business record’s value; validate it against the limits below.
mime_typetext · Default: —
Example valueimage/jpeg
Example Bubble expressionDocument Capture's analysis_mime_type
Use the current business record’s value; validate it against the limits below.
fields_jsontext · Default: —
Example value["title","date","total"]
Example Bubble expressionDocument Capture's analysis_fields_json
JSON array of requested extraction field names; the output is proposed data for human review.
consentyes/no · Default: —
Example valueyes — current processing consent
Example Bubble expressionDocument Capture's analysis_consent
Use the current business record’s value; validate it against the limits below.
idempotency_keytext · Default: —
Example value<unchanged analysis_request_id>
Example Bubble expressionDocument Capture's analysis_request_id
Use the current business record’s value; validate it against the limits below.
environmenttext · Default: —
Example valuedevelopment
Example Bubble expressionApp Settings' selected_environment
Use the current business record’s value; validate it against the limits below.

Returns

ok · yes/nostatus · textoperation_id · textrequest_id · textfields_json · texterror_code · textreview_required · yes/no
Read Analysis
operation_idtext · Default: —
Example value<returned operation_id>
Example Bubble expressionCurrent ExpenseDraft's operation_id
Use the current business record’s value; validate it against the limits below.
environmenttext · Default: —
Example valuedevelopment
Example Bubble expressionApp Settings' selected_environment
Use the current business record’s value; validate it against the limits below.

Returns

ok · yes/nostatus · textoperation_id · textrequest_id · textfields_json · texterror_code · textreview_required · yes/no
States and events

Planned workflow. Not available in the current beta yet.

States

capture_status · text

Current result of this action. Use the matching completion event before saving success.

local_uri · text

File location on this device. Save or upload the file separately if it must be kept online.

mime_type · text

Current value for the selected item. Read it after the related event.

document_side · text

Current value for the selected item. Read it after the related event.

image_width · number

Current value for the selected item. Read it after the related event.

image_height · number

Current value for the selected item. Read it after the related event.

error_code · text

Error information for the last action. Show a helpful message and offer the relevant retry.

is_capturing · yes/no

Current value for the selected item. Read it after the related event.

analysis_image_base64 · text

Current value for the selected item. Read it after the related event.

analysis_mime_type · text

Current value for the selected item. Read it after the related event.

analysis_fields_json · text

Suggested values for the requested fields. Show them for review before saving.

analysis_request_id · text

Identifier for this item or action. Keep it with the matching app record. Use the same request identifier when retrying an uncertain result.

analysis_consent · yes/no

Current value for the selected item. Read it after the related event.

analysis_export_status · text

Current result of this action. Use the matching completion event before saving success.

analysis_export_error · text

Error information for the last action. Show a helpful message and offer the relevant retry.

analysis_image_bytes · number

Current value for the selected item. Read it after the related event.

Events

capture_started

When this event occurs, read the related states from the same element.

capture_succeeded

When this event occurs, read the related states from the same element.

capture_cancelled

When this event occurs, read the related states from the same element.

permission_denied

When this event occurs, read the related states from the same element.

capture_error

When this event occurs, read the related states from the same element.

analysis_requested

When this event occurs, read the related states from the same element.

analysis_export_error

When this event occurs, read the related states from the same element.

analysis_cleared

When this event occurs, read the related states from the same element.

Questions developers ask

Does it verify identity or documents?

No. It proposes text fields for review. A captured document image does not establish identity, authenticity or a medical/financial conclusion.

How does the subscription work?

Planned pricing: installing the plugin in Bubble is free. BestPlugins access is a separate subscription for each plugin in each Bubble app project: 7 days free, then US$1.50 per month. Development and Live are included. There is no fixed limit on the number of operations; file-size and feature limits still apply. Checkout is not open yet. The activation screen will show the first billing date and cancellation terms.

More product examples
Xodera Documents AI Native — Earlier product example; appearance may differ in the current beta.
Earlier product example; appearance may differ in the current beta.

Related guides

Marketplace release pending

Forum guide not posted

For help, tell us which plugin and device you use, the action you tried and what happened. Use an example without personal data. Never share your key or private files.