@talonic/docs 0.20.22 → 0.20.25

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/content.js CHANGED
@@ -13250,14 +13250,27 @@ var sections25 = [
13250
13250
  parentSlug: "webhooks",
13251
13251
  title: "Events",
13252
13252
  seoTitle: "Webhook Events \u2014 Talonic Docs",
13253
- description: "Receive real-time notifications for extraction events including extraction.complete, extraction.failed, and document.ingested via webhook URLs.",
13253
+ description: "Receive real-time notifications for extraction events including extraction.complete, extraction.failed, and document.uploaded via webhook URLs.",
13254
13254
  content: [
13255
13255
  { type: "paragraph", text: "Receive real-time notifications when extraction events occur. Configure webhook URLs per-source or per-extraction via the `webhook_url` option." },
13256
13256
  { type: "paragraph", text: "Available webhook events:" },
13257
13257
  { type: "list", items: [
13258
- "`extraction.complete` \u2014 Extraction finished successfully. Payload includes the full extraction result.",
13259
- "`extraction.failed` \u2014 Extraction failed. Payload includes the error details.",
13260
- "`document.ingested` \u2014 A new document has been processed and is ready for extraction."
13258
+ "`document.uploaded` \u2014 A new document has been uploaded and queued for processing.",
13259
+ "`document.processing` \u2014 Document OCR and classification has started.",
13260
+ "`document.classified` \u2014 Document type and language have been detected.",
13261
+ "`extraction.started` \u2014 AI data extraction has begun on the document.",
13262
+ "`extraction.complete` \u2014 Data extraction finished successfully. Extracted fields are available.",
13263
+ "`extraction.failed` \u2014 Data extraction failed after all retry attempts.",
13264
+ "`job.created` \u2014 A new structuring job has been created.",
13265
+ "`job.started` \u2014 Job processing has begun.",
13266
+ "`job.phase_complete` \u2014 A job phase (resolve, extract, normalize, or transform) has completed.",
13267
+ "`job.complete` \u2014 All job phases finished. Structured results are available.",
13268
+ "`job.failed` \u2014 Job processing failed.",
13269
+ "`review.approved` \u2014 A validation record has been approved.",
13270
+ "`delivery.sent` \u2014 An outbound delivery was sent successfully.",
13271
+ "`delivery.failed` \u2014 An outbound delivery failed after all retry attempts.",
13272
+ "`process.completed` \u2014 A document processing run finished all steps and the result is available.",
13273
+ "`process.failed` \u2014 A document processing run failed. The error payload includes the step name and error detail."
13261
13274
  ] },
13262
13275
  { type: "paragraph", text: "Most integrations subscribe to `extraction.complete` to trigger downstream processing (e.g. writing structured data to a database or notifying a user). A typical workflow is to pass `webhook_url` on `POST /v1/extract`, then handle the callback payload in your server without polling." },
13263
13276
  { type: "paragraph", text: "The `extraction.complete` payload includes the `extraction_id`, `document_id`, `schema_id`, `status`, and `confidence` score. Use the `extraction_id` to fetch the full result via `GET /v1/extractions/:id` if the payload does not contain all the fields you need." },
@@ -13269,7 +13282,7 @@ var sections25 = [
13269
13282
  { label: "Retry Policy", slug: "webhook-retry" }
13270
13283
  ],
13271
13284
  faq: [
13272
- { question: "What webhook events does Talonic send?", answer: "Three events: extraction.complete, extraction.failed, and document.ingested." }
13285
+ { question: "What webhook events does Talonic send?", answer: "Sixteen events spanning the document lifecycle: document.uploaded, document.processing, document.classified, extraction.started, extraction.complete, extraction.failed, job.created, job.started, job.phase_complete, job.complete, job.failed, review.approved, delivery.sent, delivery.failed, process.completed, and process.failed." }
13273
13286
  ],
13274
13287
  mentions: ["webhook", "real-time notifications"]
13275
13288
  },
@@ -13528,7 +13541,7 @@ echo -n '{"event":"extraction.complete","delivery_id":"dlv_test123","timestamp":
13528
13541
  code: `{
13529
13542
  "url": "https://api.example.com/webhooks/talonic",
13530
13543
  "secret": "whsec_my_production_secret",
13531
- "events": ["extraction.complete", "extraction.failed", "document.ingested"],
13544
+ "events": ["extraction.complete", "extraction.failed", "document.uploaded"],
13532
13545
  "is_active": true
13533
13546
  }`
13534
13547
  }
@@ -13541,7 +13554,7 @@ echo -n '{"event":"extraction.complete","delivery_id":"dlv_test123","timestamp":
13541
13554
  code: `{
13542
13555
  "id": "wh_b2c3d4e5-f6a7-8901-bcde-f12345678901",
13543
13556
  "url": "https://api.example.com/webhooks/talonic",
13544
- "events": ["extraction.complete", "extraction.failed", "document.ingested"],
13557
+ "events": ["extraction.complete", "extraction.failed", "document.uploaded"],
13545
13558
  "is_active": true,
13546
13559
  "source_connection_id": null,
13547
13560
  "created_at": "2024-10-05T12:00:00.000Z",
@@ -27712,7 +27725,7 @@ var sections_default2 = [
27712
27725
  },
27713
27726
  {
27714
27727
  type: "paragraph",
27715
- text: "With this MCP server installed, the agent has a `talonic_extract` tool that returns schema-validated JSON with per-field confidence scores, a detected document type, and stable IDs for follow-up calls. The other eight tools cover the rest of the workflow: searching the workspace, filtering by extracted field values, fetching document metadata, getting OCR markdown, listing saved schemas, saving new ones, and reading the workspace credit balance for budget-aware behaviour."
27728
+ text: "With this MCP server installed, the agent has a `talonic_extract` tool that returns schema-validated JSON with per-field confidence scores, a detected document type, and stable IDs for follow-up calls. The other eight tools cover the rest of the workflow: requesting a browser upload link for files too large to pass through a hosted connector, searching the workspace, filtering by extracted field values, fetching document metadata, getting OCR markdown, listing saved schemas, saving new ones, and reading the workspace credit balance for budget-aware behaviour."
27716
27729
  },
27717
27730
  {
27718
27731
  type: "callout",
@@ -27768,7 +27781,7 @@ var sections_default2 = [
27768
27781
  },
27769
27782
  {
27770
27783
  type: "paragraph",
27771
- text: "Connect from Claude.ai's custom-connector flow. The connector authenticates against `app.talonic.com` using OAuth 2.1 with PKCE and Dynamic Client Registration, so no API key is pasted into the connector config. Once authorised, all eight Talonic tools and both resources are available to Claude.ai's agent."
27784
+ text: "Connect from Claude.ai's custom-connector flow. The connector authenticates against `app.talonic.com` using OAuth 2.1 with PKCE and Dynamic Client Registration, so no API key is pasted into the connector config. Once authorised, all nine Talonic tools and both resources are available to Claude.ai's agent."
27772
27785
  },
27773
27786
  {
27774
27787
  type: "list",
@@ -27823,7 +27836,7 @@ var sections_default2 = [
27823
27836
  },
27824
27837
  {
27825
27838
  type: "paragraph",
27826
- text: "All three install paths expose the same eight tools and two resources."
27839
+ text: "All three install paths expose the same nine tools and two resources."
27827
27840
  }
27828
27841
  ],
27829
27842
  related: [
@@ -27987,7 +28000,7 @@ var sections_default2 = [
27987
28000
  },
27988
28001
  {
27989
28002
  type: "paragraph",
27990
- text: "Fully restart Claude Desktop (Cmd+Q on macOS, not just close the window). Talonic appears in the connected servers list with all eight tools and two resources."
28003
+ text: "Fully restart Claude Desktop (Cmd+Q on macOS, not just close the window). Talonic appears in the connected servers list with all nine tools and two resources."
27991
28004
  }
27992
28005
  ],
27993
28006
  related: [
@@ -28283,7 +28296,7 @@ var sections_default2 = [
28283
28296
  {
28284
28297
  name: "file_data",
28285
28298
  type: "string",
28286
- description: "Base64-encoded file bytes. **Recommended for local-stdio installs** (Claude Desktop, Cursor, Cline, Continue, Cowork). Pair with `filename` for MIME type inference. **Warning for Claude.ai hosted connector:** Claude.ai imposes a hard size limit on tool-call arguments (effectively under ~1 KB), so `file_data` cannot carry a real PDF through Claude.ai's pipeline. For files larger than a trivial test, use `file_url` or `document_id` instead when running through Claude.ai."
28299
+ description: "Base64-encoded file bytes. **Recommended for local-stdio installs** (Claude Desktop, Cursor, Cline, Continue, Cowork), which have no size cap. Pair with `filename` for MIME type inference. **Warning for the Claude.ai hosted connector:** Claude.ai caps tool-call arguments at ~32 KB decoded, so `file_data` cannot carry a real PDF \u2014 it is silently truncated. Use `talonic_request_upload` (browser-handoff upload), `file_url`, or a pre-uploaded `document_id` instead when running through Claude.ai."
28287
28300
  },
28288
28301
  {
28289
28302
  name: "filename",
@@ -29060,7 +29073,7 @@ var sections_default2 = [
29060
29073
  {
29061
29074
  name: "file_data",
29062
29075
  type: "string",
29063
- description: "Base64-encoded file bytes. **Recommended for local-stdio installs** (Claude Desktop, Cursor, Cline, Continue, Cowork). Pair with `filename`. Consumes one extraction credit (auto-ingests the file first). **Warning for Claude.ai hosted connector:** Claude.ai imposes a hard size limit on tool-call arguments (effectively under ~1 KB), so `file_data` cannot carry a real PDF through the Claude.ai pipeline. Use `file_url` or `document_id` instead when running through Claude.ai."
29076
+ description: "Base64-encoded file bytes. **Recommended for local-stdio installs** (Claude Desktop, Cursor, Cline, Continue, Cowork), which have no size cap. Pair with `filename`. Consumes one extraction credit (auto-ingests the file first). **Warning for the Claude.ai hosted connector:** Claude.ai caps tool-call arguments at ~32 KB decoded, so `file_data` cannot carry a real PDF \u2014 it is silently truncated. Use `talonic_request_upload` (browser-handoff upload), `file_url`, or a pre-uploaded `document_id` instead when running through Claude.ai."
29064
29077
  },
29065
29078
  {
29066
29079
  name: "filename",
package/dist/index.js CHANGED
@@ -636,7 +636,8 @@ var NAV_SECTIONS = [
636
636
  { id: "list-benchmarks", label: "Benchmarks" },
637
637
  { id: "add-ground-truth-entry", label: "Add Ground-Truth Entry" },
638
638
  { id: "delete-ground-truth-entry", label: "Delete Ground-Truth Entry" },
639
- { id: "benchmark-results", label: "Benchmark Results" }
639
+ { id: "benchmark-results", label: "Benchmark Results" },
640
+ { id: "compare-benchmarks", label: "Compare Benchmarks" }
640
641
  ]
641
642
  },
642
643
  {
@@ -3165,6 +3166,44 @@ function ApiReference({ LinkComponent }) {
3165
3166
  }` })
3166
3167
  }
3167
3168
  ) }),
3169
+ /* @__PURE__ */ jsx5("div", { id: "compare-benchmarks", className: "scroll-mt-6", children: /* @__PURE__ */ jsxs5(
3170
+ EndpointBlock,
3171
+ {
3172
+ method: "GET",
3173
+ path: "/v1/quality/benchmarks/compare",
3174
+ summary: "Compare two benchmark runs.",
3175
+ description: "Returns both benchmark runs side by side along with the overall accuracy delta (run_a minus run_b). The delta is null when either run has no overall accuracy score yet.",
3176
+ children: [
3177
+ /* @__PURE__ */ jsx5(
3178
+ ParamTable,
3179
+ {
3180
+ title: "Query parameters",
3181
+ params: [
3182
+ { name: "run_a", type: "uuid", required: true, description: "ID of the first benchmark run." },
3183
+ { name: "run_b", type: "uuid", required: true, description: "ID of the second benchmark run to compare against." }
3184
+ ]
3185
+ }
3186
+ ),
3187
+ /* @__PURE__ */ jsx5(CodeBlock, { title: "Response", children: `{
3188
+ "run_a": {
3189
+ "id": "bench_9x2k4m",
3190
+ "name": "Invoices v2",
3191
+ "status": "completed",
3192
+ "accuracy_overall": 0.94,
3193
+ "accuracy_by_field": { "vendor_name": 0.98, "total": 0.9 }
3194
+ },
3195
+ "run_b": {
3196
+ "id": "bench_7p1j5q",
3197
+ "name": "Invoices v1",
3198
+ "status": "completed",
3199
+ "accuracy_overall": 0.89,
3200
+ "accuracy_by_field": { "vendor_name": 0.95, "total": 0.83 }
3201
+ },
3202
+ "accuracy_delta": 0.05
3203
+ }` })
3204
+ ]
3205
+ }
3206
+ ) }),
3168
3207
  /* @__PURE__ */ jsx5(SectionHeading, { id: "matching", children: "Matching" }),
3169
3208
  /* @__PURE__ */ jsx5("p", { className: "text-[15px] text-void-text-secondary leading-relaxed mb-6", children: "Match extracted data against reference datasets using configurable field-level matching strategies (exact, fuzzy, date range, numeric range)." }),
3170
3209
  /* @__PURE__ */ jsx5("div", { id: "list-matching-configs", className: "scroll-mt-6", children: /* @__PURE__ */ jsx5(
@@ -3901,16 +3940,68 @@ function ApiReference({ LinkComponent }) {
3901
3940
  ] }) }),
3902
3941
  /* @__PURE__ */ jsxs5("tbody", { children: [
3903
3942
  /* @__PURE__ */ jsxs5("tr", { children: [
3943
+ /* @__PURE__ */ jsx5("td", { className: "px-4 py-3 font-mono text-[13px]", children: "document.uploaded" }),
3944
+ /* @__PURE__ */ jsx5("td", { className: "px-4 py-3 text-void-text-secondary text-[13px]", children: "A new document has been uploaded and queued for processing." })
3945
+ ] }),
3946
+ /* @__PURE__ */ jsxs5("tr", { className: "border-t border-void-border", children: [
3947
+ /* @__PURE__ */ jsx5("td", { className: "px-4 py-3 font-mono text-[13px]", children: "document.processing" }),
3948
+ /* @__PURE__ */ jsx5("td", { className: "px-4 py-3 text-void-text-secondary text-[13px]", children: "Document OCR and classification has started." })
3949
+ ] }),
3950
+ /* @__PURE__ */ jsxs5("tr", { className: "border-t border-void-border", children: [
3951
+ /* @__PURE__ */ jsx5("td", { className: "px-4 py-3 font-mono text-[13px]", children: "document.classified" }),
3952
+ /* @__PURE__ */ jsx5("td", { className: "px-4 py-3 text-void-text-secondary text-[13px]", children: "Document type and language have been detected." })
3953
+ ] }),
3954
+ /* @__PURE__ */ jsxs5("tr", { className: "border-t border-void-border", children: [
3955
+ /* @__PURE__ */ jsx5("td", { className: "px-4 py-3 font-mono text-[13px]", children: "extraction.started" }),
3956
+ /* @__PURE__ */ jsx5("td", { className: "px-4 py-3 text-void-text-secondary text-[13px]", children: "AI data extraction has begun on the document." })
3957
+ ] }),
3958
+ /* @__PURE__ */ jsxs5("tr", { className: "border-t border-void-border", children: [
3904
3959
  /* @__PURE__ */ jsx5("td", { className: "px-4 py-3 font-mono text-[13px]", children: "extraction.complete" }),
3905
- /* @__PURE__ */ jsx5("td", { className: "px-4 py-3 text-void-text-secondary text-[13px]", children: "Extraction finished successfully. Payload includes the full extraction result." })
3960
+ /* @__PURE__ */ jsx5("td", { className: "px-4 py-3 text-void-text-secondary text-[13px]", children: "Data extraction finished successfully. Extracted fields are available." })
3906
3961
  ] }),
3907
3962
  /* @__PURE__ */ jsxs5("tr", { className: "border-t border-void-border", children: [
3908
3963
  /* @__PURE__ */ jsx5("td", { className: "px-4 py-3 font-mono text-[13px]", children: "extraction.failed" }),
3909
- /* @__PURE__ */ jsx5("td", { className: "px-4 py-3 text-void-text-secondary text-[13px]", children: "Extraction failed. Payload includes the error details." })
3964
+ /* @__PURE__ */ jsx5("td", { className: "px-4 py-3 text-void-text-secondary text-[13px]", children: "Data extraction failed after all retry attempts." })
3965
+ ] }),
3966
+ /* @__PURE__ */ jsxs5("tr", { className: "border-t border-void-border", children: [
3967
+ /* @__PURE__ */ jsx5("td", { className: "px-4 py-3 font-mono text-[13px]", children: "job.created" }),
3968
+ /* @__PURE__ */ jsx5("td", { className: "px-4 py-3 text-void-text-secondary text-[13px]", children: "A new structuring job has been created." })
3969
+ ] }),
3970
+ /* @__PURE__ */ jsxs5("tr", { className: "border-t border-void-border", children: [
3971
+ /* @__PURE__ */ jsx5("td", { className: "px-4 py-3 font-mono text-[13px]", children: "job.started" }),
3972
+ /* @__PURE__ */ jsx5("td", { className: "px-4 py-3 text-void-text-secondary text-[13px]", children: "Job processing has begun." })
3973
+ ] }),
3974
+ /* @__PURE__ */ jsxs5("tr", { className: "border-t border-void-border", children: [
3975
+ /* @__PURE__ */ jsx5("td", { className: "px-4 py-3 font-mono text-[13px]", children: "job.phase_complete" }),
3976
+ /* @__PURE__ */ jsx5("td", { className: "px-4 py-3 text-void-text-secondary text-[13px]", children: "A job phase (resolve, extract, normalize, or transform) has completed." })
3977
+ ] }),
3978
+ /* @__PURE__ */ jsxs5("tr", { className: "border-t border-void-border", children: [
3979
+ /* @__PURE__ */ jsx5("td", { className: "px-4 py-3 font-mono text-[13px]", children: "job.complete" }),
3980
+ /* @__PURE__ */ jsx5("td", { className: "px-4 py-3 text-void-text-secondary text-[13px]", children: "All job phases finished. Structured results are available." })
3981
+ ] }),
3982
+ /* @__PURE__ */ jsxs5("tr", { className: "border-t border-void-border", children: [
3983
+ /* @__PURE__ */ jsx5("td", { className: "px-4 py-3 font-mono text-[13px]", children: "job.failed" }),
3984
+ /* @__PURE__ */ jsx5("td", { className: "px-4 py-3 text-void-text-secondary text-[13px]", children: "Job processing failed." })
3985
+ ] }),
3986
+ /* @__PURE__ */ jsxs5("tr", { className: "border-t border-void-border", children: [
3987
+ /* @__PURE__ */ jsx5("td", { className: "px-4 py-3 font-mono text-[13px]", children: "review.approved" }),
3988
+ /* @__PURE__ */ jsx5("td", { className: "px-4 py-3 text-void-text-secondary text-[13px]", children: "A validation record has been approved." })
3989
+ ] }),
3990
+ /* @__PURE__ */ jsxs5("tr", { className: "border-t border-void-border", children: [
3991
+ /* @__PURE__ */ jsx5("td", { className: "px-4 py-3 font-mono text-[13px]", children: "delivery.sent" }),
3992
+ /* @__PURE__ */ jsx5("td", { className: "px-4 py-3 text-void-text-secondary text-[13px]", children: "An outbound delivery was sent successfully." })
3993
+ ] }),
3994
+ /* @__PURE__ */ jsxs5("tr", { className: "border-t border-void-border", children: [
3995
+ /* @__PURE__ */ jsx5("td", { className: "px-4 py-3 font-mono text-[13px]", children: "delivery.failed" }),
3996
+ /* @__PURE__ */ jsx5("td", { className: "px-4 py-3 text-void-text-secondary text-[13px]", children: "An outbound delivery failed after all retry attempts." })
3997
+ ] }),
3998
+ /* @__PURE__ */ jsxs5("tr", { className: "border-t border-void-border", children: [
3999
+ /* @__PURE__ */ jsx5("td", { className: "px-4 py-3 font-mono text-[13px]", children: "process.completed" }),
4000
+ /* @__PURE__ */ jsx5("td", { className: "px-4 py-3 text-void-text-secondary text-[13px]", children: "A document processing run finished all steps and the result is available." })
3910
4001
  ] }),
3911
4002
  /* @__PURE__ */ jsxs5("tr", { className: "border-t border-void-border", children: [
3912
- /* @__PURE__ */ jsx5("td", { className: "px-4 py-3 font-mono text-[13px]", children: "document.ingested" }),
3913
- /* @__PURE__ */ jsx5("td", { className: "px-4 py-3 text-void-text-secondary text-[13px]", children: "A new document has been processed and is ready for extraction." })
4003
+ /* @__PURE__ */ jsx5("td", { className: "px-4 py-3 font-mono text-[13px]", children: "process.failed" }),
4004
+ /* @__PURE__ */ jsx5("td", { className: "px-4 py-3 text-void-text-secondary text-[13px]", children: "A document processing run failed. The error payload includes the step name and error detail." })
3914
4005
  ] })
3915
4006
  ] })
3916
4007
  ] }) }),