Connect LexCore to your other tools: API tokens and webhooks
Let tools like n8n, Zapier, Make or Power Automate work with LexCore, so routine steps happen by themselves. What each part does, how to switch it on, and what stays protected.
Your firm already uses other tools: a website form, a shared drive, a team chat, a task list. API tokens and webhooks let those tools and LexCore pass work to each other, so nobody has to copy things across by hand.
| API tokens | Webhooks | |
|---|---|---|
| Which way | Your tool talks to LexCore | LexCore talks to your tool |
| In one line | A password for software, with limits you choose | A message LexCore sends the moment something happens |
| Example | A request form on your website creates a new LexCore intake request | When a review finishes, your team chat gets a message and a task opens |
What you gain
- Less copying and pasting. A request typed into your website, or a contract saved to a folder, reaches LexCore without anyone re-entering it.
- Faster responses. Your team hears the moment a review is done, a request comes in, a document is fully signed, or a finding needs a lawyer.
- Your tools, your way. LexCore does not need a ready-made connector for every product. Anything that can call a web address can join in.
- Control stays with you. You choose exactly what each token may do, you can switch it off at once, and every change is written to the audit log.
Before you start
- Plan. API tokens and webhooks come with the Chambers plan and above.
- Who can set them up. Workspace owners, heads of legal, heads of chambers, managing partners and senior partners. Everyone else can see the list but not change it.
- Two-factor sign-in. Creating an API token needs a verified second factor. Set it up under Settings, Account & Security, then sign in again.
- Where. Settings, then Integrations. Both panels are at the top.
Make an API token
- Open Settings, then Integrations, and click New token.
- Give it a name that says what it is for, for example "Website form to new requests". You will thank yourself later.
- Tick only what the tool needs. A tool that only files finished reviews needs Read review results, nothing else.
- Click Create token and copy it straight away. We show it only once. If you lose it, revoke it and make a new one.
- Paste it into your tool. It goes in the request header as
Authorization: Bearerfollowed by the token.
What a token can never do
A token acts as the person who made it, and never with more power than that person has today. If their role is lowered, the token loses the same rights. If their account is switched off, the token stops working. A token cannot create other tokens, change settings, or reach anything you did not tick.
Make a webhook
- In your tool (n8n, Zapier, Make, Power Automate), create a step that receives a web request. It gives you a web address. Copy it.
- In LexCore, open Settings, then Integrations, and click New webhook.
- Paste the address, tick the moments you care about, and click Create webhook.
- Copy the secret shown. We show it only once. Your tool uses it to check that each message really came from LexCore.
- Click Send test. LexCore tells you whether the test arrived, and if not, why.
| Tell me when | What the message contains |
|---|---|
| A contract review is finished | The review job, document and matter ids. Fetch the findings with a token that can Read review results. |
| A new request comes in | The request id and reference, the form, the request type, and the requester's name and email. |
| A document is fully signed | The signature request id and title, the matter and document ids, and when it completed. |
| A finding needs a lawyer's sign-off | The Human Gate id, the matter and document ids, and the severity or action type. |
Why the message carries ids, not your documents
A webhook message never contains contract text or AI findings. It says what happened and where. If your tool needs the detail, it fetches it with an API token, so the same limits and the same audit trail apply.
If something goes wrong
- A message does not arrive. LexCore tries each message up to three times: at once, after 1 minute, and after 5 minutes.
- Three failures in a row. LexCore pauses the webhook and tells the workspace owners, so a broken address does not fail quietly for weeks. Fix the address, then click Turn back on.
- The address is refused when you save it. On LexCore Cloud a webhook must go to a public
https://address. Addresses inside a private network are refused, because a shared service must never be pointed at its own internals. On a dedicated sovereign deployment the rule is reversed: your own in-house tools are allowed, and outside addresses can be blocked by your administrator. - A token stops working. Check it was not revoked, that the person who made it still has an active account, and that it has the permission the tool is using.
For whoever builds the connection
The API base address is your LexCore address followed by /api/v1/cases (on LexCore Cloud, https://app.lexcore.ng/api/v1/cases). A token can reach exactly these routes:
| Permission | Routes |
|---|---|
See your matters (read:matters) | GET /matters · GET /matters/{id} |
Send in new requests (write:intake) | POST /intake/forms/{formId}/submit |
Read review results (read:reviews) | GET /ai/review-jobs/{jobId} · GET /ai/reviews/{id} |
Add documents (write:documents) | POST /documents/upload (multipart) |
curl https://app.lexcore.ng/api/v1/cases/matters \
-H "Authorization: Bearer lxk_your_token_here"Every webhook is a POST with a JSON body, sent with four headers: X-LexCore-Event, X-LexCore-Delivery, X-LexCore-Timestamp (Unix seconds) and X-LexCore-Signature. The signature is the hex HMAC-SHA256 of timestamp.body, keyed with your webhook secret. LexCore does not follow redirects, so give the final address.
{
"id": "the delivery id",
"event": "review.completed",
"createdAt": "2026-09-18T09:15:00.000Z",
"attempt": 1,
"data": { "jobId": "…", "documentId": "…", "matterId": "…", "reviewLogId": "…" }
}Check the signature before you trust a message. In Node.js:
const crypto = require("crypto");
// timestamp = X-LexCore-Timestamp header, signature = X-LexCore-Signature header,
// rawBody = the request body exactly as received (before JSON parsing).
function isFromLexCore(secret, timestamp, rawBody, signature) {
const age = Math.abs(Date.now() / 1000 - Number(timestamp));
if (!(age <= 300)) return false; // older than 5 minutes: refuse
const expected = crypto
.createHmac("sha256", secret)
.update(timestamp + "." + rawBody)
.digest("hex");
return expected.length === signature.length &&
crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(signature));
}Not offered yet: obligation deadlines
A "contract obligation falls due" message exists, but today it only fires from an automation rule, and automation rules cannot yet be created from the app. We do not offer it in the list until it works on its own. Deadline reminders inside LexCore are unaffected.
Related documentation
Integrations: channels and connectors
Work where your legal team already works: chat channels, intake links, storage and DMS connectors, and a Word add-in.
API overview
The service topology and the main REST endpoints for integrators.
The MCP gateway
LexCore's verified tools as Model Context Protocol tools for AI apps such as Claude. Built and tested, but not yet open to customers.