Integration
Oracle SDS Integration Pattern
Store each extraction as JSON in a staging table, query it with SQL, and promote only reviewed records.
Last updated: 2026-10-24
What this page is. An integration pattern, not a product. We do not ship or claim a certified connector for this platform; the API is a REST service that takes a multipart PDF upload, so any integration layer that can send multipart requests and read JSON can use it.
Land the JSON, then shape it with SQL
Oracle can store JSON in a column and query it with SQL, so the simplest pattern is to keep the whole outputs.json object per document and read it with JSON_VALUE and JSON_TABLE. Illustrative DDL and queries; adapt the types and JSON column to your Oracle version:
CREATE TABLE sds_extraction (
request_id VARCHAR2(64) PRIMARY KEY,
received_at TIMESTAMP DEFAULT SYSTIMESTAMP,
confidence NUMBER(4,3),
status VARCHAR2(20) DEFAULT 'staged',
payload CLOB CHECK (payload IS JSON) -- the outputs.json object
);
-- one value
SELECT request_id,
JSON_VALUE(payload, '$.transport_information.un_number') AS un_number
FROM sds_extraction;
-- one row per substance
SELECT e.request_id, jt.substance, jt.cas, jt.concentration
FROM sds_extraction e,
JSON_TABLE(e.payload, '$.composition[*]'
COLUMNS (substance VARCHAR2(200) PATH '$.substance_name',
cas VARCHAR2(20) PATH '$.cas_number',
concentration VARCHAR2(40) PATH '$.concentration_percent')) jt;
The sub-field names here come from our sample response. The contract guarantees the 16 section keys, not the fields inside them, so check what your own documents return and expect some paths to be null.
Staging first, promotion second
- Your integration layer calls the API and inserts the JSON into
sds_extractionwithstatus = 'staged'. - A reviewer, or a rule on
confidenceand thewarningsin the payload, moves clean records toapproved. - A job copies approved records into your product and substance tables, matching substances on CAS number.
- Rejected or flagged records stay in staging with the reviewer's note.
Calling the API
- The API takes a
multipart/form-dataupload and returns JSON. Use middleware or a small service that can build the multipart request, and write the result to the database. - Keep the API key in a secret store, not in PL/SQL or a client.
- Use an
Idempotency-Keyon bulk submissions so a retry does not create a second job. - Webhooks need a public HTTPS
callback_url. If your database tier is not internet-reachable, poll the job status endpoint.
Details worth getting right
- Concentrations are strings.
95-100is a range, so convert it in a controlled step. - Key on request_id. It is the trace back to the extraction, and a natural primary key for staging.
- Keep the raw payload. Even after you promote values into relational columns, the original JSON is what a reviewer needs.
How you get access: the free sample upload on the homepage needs no key, the self-serve plan issues an API key after signup, and enterprise customers get a dedicated deployment with its own base URL. See pricing.
FAQ
Do you have an Oracle connector?
No. We publish a REST API and an OpenAPI contract. This page describes a pattern you build in your own layer.
Why store the whole JSON?
It keeps the original extraction for review and lets you change your relational mapping later without re-extracting.
Can the database call the API directly?
That depends on your tooling. The API needs a multipart request, so most teams use middleware or a small service for the call.
Related pages
- SAP SDS integration pattern
- Salesforce SDS workflow pattern
- SDS field coverage matrix
- OpenAPI contract