In this section, we will see how to use the methods of the client.processors.automations
module. Please check the API Reference for more details.
Introduction
A deployment allows you to analyze files and send the extracted data to your backend. You can create 4 types of deployments:
Links : Share links to upload files.
Mailboxes : Set up mailboxes to forward emails to.
Endpoints : Create an endpoint to send data to.
Outlook Plugin : Create and install an Outlook plugin to extract data from emails.
You can create, monitor, update, delete and test all the deployments in the dashboard .
Test
Test Webhook
from uiform import UiForm
uiclient = UiForm()
log = uiclient.processors.automations.tests.webhook(
automation_id = "lnk_1573aadc-e1ff-4569-80dc-05e71a6c4ff2" ,
)
Test Document Upload
from uiform import UiForm
uiclient = UiForm()
log = uiclient.processors.automations.tests.upload(
automation_id = "lnk_1573aadc-e1ff-4569-80dc-05e71a6c4ff2" ,
document = "invoice.pdf"
)
Link
Object
An Link object containing the extraction link configuration.
The type of object. Always “automation.link”.
Unique identifier for the deployment link, prefixed with “lnk_”.
Optional password to access the link.
URL of the webhook to send the data to.
Headers to send with the webhook request.
ID of the processor this automation is attached to.
UTC timestamp of when the config was last updated.
Create
from uiform import UiForm
uiclient = UiForm()
# Step 1: Create a processor
processor = uiclient.processors.create(
name = "Invoice Processor" ,
model = "gpt-4.1-nano" ,
json_schema =json_schema,
)
# Step 2: Create a link automation and attach it to the processor
link = uiclient.processors.automations.links.create(
name = "Invoices" ,
processor_id =processor.id,
webhook_url = "https://your_server.com/invoices/webhook" ,
)
Get
from uiform import UiForm
uiclient = UiForm()
link_obj = uiclient.processors.automations.links.get(
link_id = "lnk_1573aadc-e1ff-4569-80dc-05e71a6c4ff2"
)
List
from uiform import UiForm
uiclient = UiForm()
list_link_obj = uiclient.processors.automations.extraction_links.list()
Update
from uiform import UiForm
uiclient = UiForm()
link_obj = uiclient.processors.automations.links.update(
link_id = "lnk_1573aadc-e1ff-4569-80dc-05e71a6c4ff2" ,
name = "Updated Invoices"
)
Delete
from uiform import UiForm
uiclient = UiForm()
uiclient.processors.automations.links.delete(
link_id = "lnk_1573aadc-e1ff-4569-80dc-05e71a6c4ff2"
)
Mailbox
Object
An Mailbox object containing the extraction mailbox configuration.
The type of object. Always “mailbox”.
Unique identifier for the mailbox, prefixed with “mb_”.
Email address for the mailbox, must end with @mailbox.uiform.com.
List of authorized domains to receive the emails from.
List of emails to access the link.
URL of the webhook to send the data to.
Headers to send with the webhook request.
ID of the processor this automation is attached to.
UTC timestamp of when the config was last updated.
Create
from uiform import UiForm
uiclient = UiForm()
# Step 1: Create a processor
processor = uiclient.processors.create(
name = "Invoice Processor" ,
model = "gpt-4.1-nano" ,
json_schema =json_schema,
)
# Step 2: Create a mailbox automation and attach it to the processor
mailbox = uiclient.processors.automations.mailboxes.create(
email = "invoices@mailbox.uiform.com" ,
name = "Invoice Mailbox" ,
processor_id =processor.id,
webhook_url = "https://your_server.com/invoices/webhook" ,
authorized_domains =[ "uiform.com" , "gmail.com" ],
authorized_emails =[ "john@doe.com" , "jane@doe.com" ]
)
Get
from uiform import UiForm
uiclient = UiForm()
mailbox = uiclient.processors.automations.mailboxes.get(
email = "invoices@mailbox.uiform.com" ,
)
List
from uiform import UiForm
uiclient = UiForm()
list_mailboxes = uiclient.processors.automations.mailboxes.list()
Update
from uiform import UiForm
uiclient = UiForm()
mailbox = uiclient.processors.automations.mailboxes.update(
email = "invoices@mailbox.uiform.com" ,
webhook_url = "https://your_server.com/invoices/webhook"
)
Delete
from uiform import UiForm
uiclient = UiForm()
uiclient.processors.automations.mailboxes.delete(
email = "invoices@mailbox.uiform.com"
)
Test Email forwarding
from uiform import UiForm
uiclient = UiForm()
mailbox_log = uiclient.processors.automations.mailboxes.test_email_forwarding(
email = "invoices@mailbox.uiform.com" ,
document = "invoice.eml"
)
Endpoint
Object
An Endpoint object containing the extraction endpoint configuration.
The type of object. Always “endpoint”.
Unique identifier for the endpoint, prefixed with “endp_”.
URL of the webhook to send the data to.
Headers to send with the webhook request.
UTC timestamp of when the config was last updated.
ID of the processor this automation is attached to.
Create
from uiform import UiForm
uiclient = UiForm()
# Step 1: Create a processor
processor = uiclient.processors.create(
name = "Invoice Processor" ,
model = "gpt-4.1-nano" ,
json_schema =json_schema,
)
# Step 2: Create an endpoint automation and attach it to the processor
endpoint = uiclient.processors.automations.endpoints.create(
name = "Invoice Extraction Endpoint" ,
processor_id =processor.id,
webhook_url = "https://your_server.com/invoices/webhook" ,
)
Get
from uiform import UiForm
uiclient = UiForm()
endpoint_obj = uiclient.processors.automations.endpoints.get(
endpoint_id = "endp_9b6a8c8d-254d-4f4b-8f8e-5b2e1b6b3c9a"
)
List
from uiform import UiForm
uiclient = UiForm()
list_endpoints = uiclient.processors.automations.endpoints.list()
Update
from uiform import UiForm
uiclient = UiForm()
updated_endpoint = uiclient.processors.automations.endpoints.update(
endpoint_id = "endp_9b6a8c8d-254d-4f4b-8f8e-5b2e1b6b3c9a" ,
name = "Updated Invoice Extraction Endpoint"
)
Delete
from uiform import UiForm
uiclient = UiForm()
uiclient.processors.automations.endpoints.delete(
endpoint_id = "endp_9b6a8c8d-254d-4f4b-8f8e-5b2e1b6b3c9a"
)
Outlook Plugin
Object
An Outlook object containing the extraction outlook plugin configuration.
The type of object. Always “outlook”.
Unique identifier for the outlook plugin, prefixed with “outlook_”.
URL of the webhook to send the data to.
Headers to send with the webhook request.
List of authorized domains allowed to use the plugin.
List of authorized emails allowed to use the plugin.
ID of the processor this automation is attached to.
UTC timestamp of when the config was last updated.
Create
from uiform import UiForm
uiclient = UiForm()
# Step 1: Create a processor
processor = uiclient.processors.create(
name = "Invoice Processor" ,
model = "gpt-4.1-nano" ,
json_schema =json_schema,
)
# Step 2: Create an Outlook plugin automation and attach it to the processor
outlook_plugin = uiclient.processors.automations.outlook.create(
name = "Invoice Plugin" ,
processor_id =processor.id,
webhook_url = "https://your_server.com/invoices/webhook" ,
authorized_domains =[ "uiform.com" ],
authorized_emails =[ "john@doe.com" , "jane@doe.com" ],
)
Get
from uiform import UiForm
uiclient = UiForm()
outlook_plugin = uiclient.processors.automations.outlook.get(
outlook_id = "outlook_56b30f29-ccf2-41b8-8b26-15481f2a78f1"
)
List
from uiform import UiForm
uiclient = UiForm()
list_outlooks = uiclient.processors.automations.outlook.list()
Update
from uiform import UiForm
uiclient = UiForm()
updated_outlook_plugin = uiclient.processors.automations.outlook.update(
outlook_id = "outlook_56b30f29-ccf2-41b8-8b26-15481f2a78f1" ,
name = "Updated Invoice Plugin"
)
Delete
from uiform import UiForm
uiclient = UiForm()
uiclient.processors.automations.outlook.delete(
outlook_id = "outlook_56b30f29-ccf2-41b8-8b26-15481f2a78f1"
)
Logs
Every time a deployment (link, mailbox, endpoint, or Outlook add-in) triggers a webhook, a log entry is created.
These logs let you
Inspect the raw request ↔ response cycle.
Debug failed calls (4xx/5xx).
Rerun a call with one click/line of code, without resending the original file/email.
Object
A single webhook attempt.
Unique identifier, prefixed with log_
.
ID of the deployment that generated the log.
Action that produced the log.
Examples: "document.processed"
, "webhook.delivered"
, "webhook.failed"
.
HTTP status code returned by your webhook.
Convenience class: "2xx"
, "3xx"
, "4xx"
, "5xx"
.
End-to-end latency in milliseconds.
Headers sent to your webhook.
JSON payload sent to your webhook.
Headers returned by your webhook.
Body returned by your webhook.
Only present for "4xx"
/ "5xx"
logs.
UTC timestamp when the log was written.
Get
from uiform import UiForm
uiclient = UiForm()
log = uiclient.processors.automations.logs.get(
log_id = "log_a12b3c4d-e5f6-7890-ab12-3c4d5e6f7890"
)
List
Available filters:
Argument Example Notes
before / after “log_xxx” Cursor pagination.
limit 50 1-100, default 10.
order “asc” / “desc” By created_at.
status_code 404 Exact match.
status_class “5xx” Shorthand class.
automation_id “lnk_…” Restrict to one automation.
webhook_url “https://…”, partial match supported.
schema_id / schema_data_id “sch_…”, “scd_…” Trace logs back to a schema run.
from uiform import UiForm
uiclient = UiForm()
page = uiclient.processors.automations.logs.list(
limit = 20 ,
status_class = "4xx" ,
automation_id = "lnk_1573aadc-e1ff-4569-80dc-05e71a6c4ff2"
)
# page.data -> list[AutomationLog]
# page.before / page.after -> cursors for the next call
Rerun
Use this when the original call failed (or you just want to replay it).
The rerun is performed server-side, using the exact same payload; no need to re-upload the document/email.
from uiform import UiForm
uiclient = UiForm()
rerun_log = uiclient.processors.automations.logs.rerun(
log_id = "log_a12b3c4d-e5f6-7890-ab12-3c4d5e6f7890"
)