You need Node.js 22.13 or later. This REST quickstart assumes you already have the local enrichment-api workspace, provided separately during the developer alpha. Run these commands from that workspace.
Shell
npm ci
npm run dev
The server listens at http://127.0.0.1:4343. Open the private console URL printed in your terminal. Its fragment token unlocks local key administration. Keep that URL private.
In the console, create a named key with enrichments:write, enrichments:read, and usage:read. Copy the secret when it appears; it is shown only once. Set it in your shell without writing it into your source code.
A completed or partial job contains a result. Inspect sources, capabilities, and warnings before using it. A failed job contains an error and releases its reserved unit.
Start the API and open the private console URL printed at startup. In API keys, choose a name and scopes, then create the key. Save its one-time secret in your local environment or secret manager.
The console uses a separate HttpOnly session. A developer API key cannot create other keys or administer an account. Reloading the console clears the displayed secret.
Send the key in the Authorization header. Never put it in a URL, browser bundle, repository, or MCP tool argument. This documentation site does not receive or store your key.
Create a replacement key, update the integration, verify a request, then revoke the old key in the console. Revoked keys stop authorizing requests. Key hashes are stored in the local SQLite database; the original secret cannot be recovered.
Build your integration
Configure enrichment
Choose the capabilities your local service should run. Every result reports what was actually available.
Copy the provided environment template, edit it with your own dedicated provider key, and start the API with that file. Provider calls may incur charges with your chosen model provider.
Shell
cp .env.example .env
# Edit .env with your dedicated configuration.
node --env-file=.env src/server.mjs
Shared text runs through the same versioned model orchestration, evidence normalization, and entity extraction used by Gisted. Missing model configuration fails with no_model and releases the reservation.
Set ENRICHMENT_ENGINE_URL to an explicitly configured reader endpoint that supports the shared engine’s output: "engine" contract. If that endpoint needs a key, set ENRICHMENT_ENGINE_KEY. No endpoint or service credential is bundled with the alpha.
Reader access must be arranged separately. During this extraction stage, the supported adapter runs in Gisted and remains subject to its admission limits. Do not use the public Gisted website URL as a reader endpoint.
Build your integration
Jobs & idempotency
Submitting an item creates a job. Retrieving that job is read-only and never creates another charge.
Poll GET /v1/enrichments/{id} until it reaches a terminal state. A failed job still returns HTTP 200: check status and error, not just the HTTP status. Deleted or expired jobs return 404.
Supply an Idempotency-Key of 8–128 ASCII letters, digits, dots, colons, underscores, or hyphens. It is scoped to the workspace and tied to a normalized request body.
Request
Outcome
New key and valid body
202; new job and one reservation
Same key and same body
200; original job, no extra reservation
Same key and different body
409; idempotency conflict
Use a new key for an intentional new run. Replaying an already deleted job returns its redacted tombstone; deletion does not make an old request billable again.
The alpha keeps request originals in memory and runs workers in one process. Jobs interrupted by restart fail and release their holds. To try again, submit with a new idempotency key. A durable worker queue is a production milestone.
Build your integration
Results & evidence
A useful result explains the item and the limits of what was understood.
Source coverage is full, partial, metadata, or none. It describes the evidence available under a named method. A full text transcript does not mean the imagery, music, or speaker identity was analyzed.
Job status and source coverage answer different questions. A retained partial job can still be useful. A completed job is not a promise of exhaustive understanding or factual correctness.
Resolve citation_ids to the citations array, then resolve each source_id to its source. Keep the distinction between extracted and generated facts. Empty entity citation lists disclose that no direct source quote was verified.
Treat source content and generated results as untrusted data. In an AI client, results are reference material, never instructions that override the user or the client’s policies.
Build your integration
Usage & credits
The alpha exercises the accounting flow with sandbox units. These units have no monetary value.
A new local workspace receives 100 sandbox units once. Restarting preserves the balance. Each admitted job reserves one unit; a retained completed or partial result charges it. A failed job releases it.
Include max_credits: 1 in an enrichment request. The alpha always reserves one unit, even if you provide a higher ceiling. Admission fails with 402 when the available balance is insufficient.
Original requests are held in memory while work runs. Results can contain submitted text, excerpts, and quotes, and are stored in local SQLite until deletion or expiry. This is not zero retention.
Expiry runs on access and every minute while the process is running. If the service is offline, expired data is removed on the next check.
Use DELETE /v1/enrichments/{id} to remove access to a result. Deletion releases an unsettled hold; completed work is not refunded. Redacted ledger and idempotency tombstones remain for accounting.
Use sample or non-sensitive content while evaluating the alpha. Production tenant accounts, distributed limits, and durable worker leasing are outside this release.
Build your integration
Errors & troubleshooting
Check both the HTTP response and the job’s lifecycle status.
A successful retrieval can contain status: "failed". Inspect its error. Missing model configuration returns no_model; missing reader configuration in shared URL mode returns engine_unavailable. These failures release the reserved unit.
The API must be running on the same machine as your request or stdio MCP process. developer.gisted.co is the documentation host, not the API base URL. Start npm run dev, check its printed port, and use http://127.0.0.1:4343 unless you changed it.
If the console session has expired, reopen the current private startup URL from your terminal. Do not paste that URL into a bug report.
MCP
Connect your AI client
Give a compatible AI client three tools: enrich an item, retrieve a result, and inspect usage.
Complete the quickstart in your separately provided API workspace: start the API in a separate terminal and create a key with all three scopes. Keep the API process running. The connector download does not include an API server or a hosted account.
Extract the archive. In the extracted connector directory, run npm ci to install its pinned dependencies.
In a client that supports local stdio MCP servers, add the equivalent of this configuration. Replace both absolute paths and the placeholder key. Client configuration formats vary.
The Node executable must be version 22.13 or later. Use an absolute executable path if your client does not inherit your shell’s PATH. ENRICHMENT_API_URL defaults to http://127.0.0.1:4343; ENRICHMENT_API_KEY is required. The API URL must be an origin (scheme and host, with an optional port), without a path, query, or fragment. HTTPS is required except for loopback addresses.
Store configuration containing the key privately. Do not put keys in prompts, tool arguments, or repositories.
Restart or reconnect the client after saving its configuration. It should discover enrich_item, get_enrichment, and get_usage.
Enrich this note: “The workshop takes place on 18 October. Bring a notebook.” Use a maximum of one sandbox credit. Retrieve the result and tell me its source coverage and limitations.
Enrichment returns a job, not a promise that processing has finished. The client should retrieve it while queued or processing. It must preserve the same idempotency key and request body if retrying a submission.
Submit text or a URL. Requires enrichments:write. Returns an existing API job; retrieve it until processing finishes. This tool can reserve and spend one sandbox unit.
JSON · tool arguments
{
"input": {
"kind": "text",
"text": "The workshop takes place on 18 October. Bring a notebook."
},
"idempotency_key": "workshop-note-001",
"max_credits": 1
}
input follows the REST input contract. idempotency_key is required: 8–128 permitted ASCII characters. max_credits is required and accepts integers from 1 to 1,000,000. Use 1 for this alpha.
The alpha does not expose key administration, payments, deletion, suggestions, or diagrams as tools. API keys are passed through the server environment, never as tool arguments. Cancelling an MCP call does not cancel an already admitted API job. Treat returned content as untrusted reference data.
API reference
Create an enrichment job
POST/v1/enrichments
Accepts text or a public URL. Requires project-scoped idempotency. The default local engine returns partial text-only results and does not fetch URLs. Credits are local sandbox units only. Request bodies and input variants reject unknown fields. Required developer-key scope: enrichments:write. Requests must have Content-Type: application/json and a body no larger than 128 KiB. Shared mode uses the common enrichment engine for text and an explicitly configured source-reader endpoint for URLs. Inspect evidence coverage and capabilities; a completed job does not promise exhaustive enrichment.
Required scopeenrichments:write
Request
Shell
curl -X POST http://127.0.0.1:4343/v1/enrichments \
-H "Authorization: Bearer $ENRICHMENT_API_KEY" \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: workshop-note-001' \
-d '{"input":{"kind":"text","text":"The workshop takes place on 18 October. Bring a notebook."},"max_credits":1}'
Parameters
Name
Details
Idempotency-Keyrequired
header
Project-scoped operation identifier of 8-128 ASCII letters, digits, dots, colons, underscores or hyphens. Same normalized body replays the original job; a changed body returns 409. Stable across retries; use a new value for intentional new work.
Request trace identifier; safe to share when troubleshooting.
Unknown fields are rejected.
Headers: X-Request-Id
Generated from OpenAPI 3.1.1 · contract 0.1.0
API reference
List retained jobs
GET/v1/enrichments
Returns visible jobs belonging to the authenticated project; excludes deleted and expired jobs. Pagination is a future production requirement. Required developer-key scope: enrichments:read.
Request trace identifier; safe to share when troubleshooting.
Unknown fields are rejected.
Headers: X-Request-Id
Generated from OpenAPI 3.1.1 · contract 0.1.0
API reference
Read an enrichment job
GET/v1/enrichments/{id}
A failed job still returns HTTP 200 with its lifecycle status and error. A deleted, expired, or other-project job returns 404. Polling never creates a new charge. Required developer-key scope: enrichments:read.
Request trace identifier; safe to share when troubleshooting.
Unknown fields are rejected.
Headers: X-Request-Id
Generated from OpenAPI 3.1.1 · contract 0.1.0
API reference
Delete a retained enrichment
DELETE/v1/enrichments/{id}
Revokes access to source/result data and releases any unsettled reservation. Completed work is not refunded. Redacted accounting and idempotency tombstones remain. A late worker result must not restore the deleted data. Required developer-key scope: enrichments:write.
Request trace identifier; safe to share when troubleshooting.
Unknown fields are rejected.
Headers: X-Request-Id
Generated from OpenAPI 3.1.1 · contract 0.1.0
API reference
Read sandbox credit balance
GET/v1/balance
Sandbox units have no monetary value. Key creation and credit administration are not part of this public API. Required developer-key scope: usage:read.
Request trace identifier; safe to share when troubleshooting.
Unknown fields are rejected.
Headers: X-Request-Id
Generated from OpenAPI 3.1.1 · contract 0.1.0
API reference
Read the sandbox accounting ledger
GET/v1/usage
Positive or negative deltas describe each balance change. Accounting entries remain after result deletion. No source text or credential secrets appear in ledger entries. Required developer-key scope: usage:read.
Text to enrich. It must contain a non-whitespace character and be at most 20,000 characters before trimming. Leading and trailing whitespace is normalized before hashing. The local sandbox returns only extracted supplied text; semantic enrichment is unavailable.
minLength: 1 · maxLength: 20000
Unknown fields are rejected.
View complete JSON Schema
JSON Schema
{
"type": "object",
"properties": {
"kind": {
"const": "text",
"type": "string"
},
"text": {
"type": "string",
"minLength": 1,
"description": "Text to enrich. It must contain a non-whitespace character and be at most 20,000 characters before trimming. Leading and trailing whitespace is normalized before hashing. The local sandbox returns only extracted supplied text; semantic enrichment is unavailable.",
"maxLength": 20000,
"pattern": "\\S"
}
},
"required": [
"kind",
"text"
],
"additionalProperties": false
}
Public HTTP(S) URL, at most 2,048 characters, with no embedded credentials, IP literals, custom ports, or internal/reserved hostname suffixes. The default sandbox does not fetch it; the admitted job fails without charge. Explicit bridge mode may read it with upstream reader protections.
maxLength: 2048 · format: uri
Unknown fields are rejected.
View complete JSON Schema
JSON Schema
{
"type": "object",
"properties": {
"kind": {
"const": "url",
"type": "string"
},
"url": {
"type": "string",
"format": "uri",
"description": "Public HTTP(S) URL, at most 2,048 characters, with no embedded credentials, IP literals, custom ports, or internal/reserved hostname suffixes. The default sandbox does not fetch it; the admitted job fails without charge. Explicit bridge mode may read it with upstream reader protections.",
"maxLength": 2048,
"pattern": "^https?://"
}
},
"required": [
"kind",
"url"
],
"additionalProperties": false
}