This project includes a small local HTTP API behind the web UI in webapp/server.py.
Base URL:
http://127.0.0.1:8765
Use this API for local tooling, browser automation, and debugging the web app. It is not an authenticated remote service.
From the repo root:
./run_webapp.shHealth check:
curl -I http://127.0.0.1:8765/Most JSON endpoints return:
ok: boolean for mutating endpointserrors: list of strings when validation or execution fails
Run-oriented endpoints may also return:
workflowsummary_pathsummaryjob_idstatus
Returns workflow metadata used by the picker UI.
Includes:
- workflow id
- label
- detailed description object
- required and recommended fields
Returns one workflow description payload.
Useful for:
- preset detail panes
- external tooling that wants workflow-specific input expectations
Returns engine stage metadata.
Includes:
- stage name
- label
- summary
- operator goal
- required input roles
- effects
- watch-for notes
Returns available saved normalization profiles from normalization_profiles.
Returns tracked local files from managed directories:
input/rawinput/normalizedoutput
Each file payload includes:
- name
- absolute path
- relative path
- size
- modified timestamp
- download URL
Returns saved web UI presets.
Returns one saved preset payload.
Returns CSV headers for a file.
Response:
{
"headers": ["first_name", "last_name", "email"]
}Returns:
headerssuggestionsgroups
This is the main inspection endpoint behind the Match tab.
groups clusters headers into broad families such as:
- identity
- phone
- address
- dates
- money
Loads an existing run summary file.
Returns async background job status.
Possible statuses:
queuedrunningcompletedfailed
Completed jobs return result.
Failed jobs return errors.
Returns a small preview payload:
pathcolumnsrows
Used by the web UI for result previews.
Streams a managed file back to the client.
Builds runtime config from a payload and validates it.
Request body:
{
"template": "jobs/demo_match_job.yaml"
}or a direct runtime-style payload built from the UI.
Response:
{
"runtime": { "...": "..." },
"errors": []
}Runs a job synchronously and returns when complete.
Useful for:
- lighter jobs
- debugging
For heavier jobs, prefer POST /api/run-job-async.
Starts a job in a local background thread and returns immediately.
Response:
{
"ok": true,
"job_id": "abcd1234",
"status": "queued",
"workflow": "match_records_to_reference",
"result": null,
"errors": []
}Then poll:
GET /api/job-status?id=abcd1234
This is the recommended run path for:
match_records_to_referencecustom_jobprocess_full_records
Saves a web UI preset.
Request body:
{
"name": "my-preset",
"preset": { "...": "..." }
}Writes uploaded file content into input/raw.
Request body:
{
"filename": "input.csv",
"content": "a,b,c\n1,2,3\n"
}Deletes a managed file only if it is under:
input/rawinput/normalizedoutput
Request body:
{
"path": "/absolute/path/to/file.csv"
}Deletes all files under output.
Runs the Normalize-tab cleaning path.
Request body:
{
"input_path": "/absolute/path/to/input.csv",
"profile_name": "",
"output_name": "normalized_output_name",
"strict_text_cleanup": false,
"columns": {
"person_id": "ConstituantID",
"primary_address1": "MailingAddress"
}
}Behavior:
- output is always written under
input/normalized - output file names auto-increment instead of overwriting existing files
- built-in address normalization runs after canonical mapping
Saves a normalization profile into normalization_profiles.
Start a match job:
curl -s -X POST http://127.0.0.1:8765/api/run-job-async \
-H 'Content-Type: application/json' \
--data '{"template":"jobs/demo_match_job.yaml"}'Poll status:
curl -s "http://127.0.0.1:8765/api/job-status?id=<job_id>"- background jobs are stored in memory only
- there is no persistent run history API
- there is no authentication layer
- file paths are local absolute paths
- the API is intended for local use, not exposure to a network