APIHub
Back to Explore

Temsor

Temsor is a SaaS API platform that provides deterministic validation and lookup for many Turkish and international identifiers—such as national ID, tax number, IBAN, phone, vehicle plate, and address parsing—and also offers finance, shipping, and regulatory checks like BIC, GTIN, email verification, EU VAT rates and validation, sanctions screening, and MRZ parsing.

Data Validation
bearer
HTTPS
CORS: Yes
Description enriched
Visit official documentation

Latency

931ms p95

Uptime

100.0% 30d

Playground

Verified

live

Endpoints

REST · JSON
POST

/v1/id/mrz

Parses ICAO 9303 TD1/TD3 MRZ and verifies check digits — format check, not identity proof.

POST

/v1/pay/epc-qr

Builds an EPC069-12 v3.1 V2 (002) SCT payload. Does not send money; returns text only, no PNG.

POST

/v1/pbx/persons

Light CRM from call graph / facts — caller phones+names and extension identities seen on transfers.

GET

/v1/ai/messages

Single-balance access to upstream LLMs; billed per token, no subscription.

  • model (query, required) — Upstream model identifier, e.g. xai/grok-4.6.
  • messages (query, required) — Conversation turns, in order.
  • system (query) — Optional system prompt.
  • max_tokens (query, required) — Maximum tokens to generate.
  • stream (query) — Not supported in this preview; must be omitted or false.
POST

/v1/ai/messages

Single-balance access to upstream LLMs; billed per token, no subscription.

GET

/v1/finance/bic

Checks a SWIFT/BIC against ISO 9362 structure (8 or 11 characters), splits bank/country/location/branch, and names well-known institutions.

  • bic (query, required) — SWIFT/BIC, 8 or 11 characters, with or without spaces.
POST

/v1/finance/bic

Checks a SWIFT/BIC against ISO 9362 structure (8 or 11 characters), splits bank/country/location/branch, and names well-known institutions.

GET

/v1/shipping/container

Validates an ISO 6346 freight-container number: owner code, category letter, serial and check digit.

  • code (query, required) — ISO 6346 container number, e.g. CSQU3054383.
POST

/v1/shipping/container

Validates an ISO 6346 freight-container number: owner code, category letter, serial and check digit.

GET

/v1/finance/creditor-ref

Validates or generates an ISO 11649 RF creditor reference (mod-97 check digits).

  • reference (query, required) — ISO 11649 RF creditor reference, or a 1–21 character payload to encode.
POST

/v1/finance/creditor-ref

Validates or generates an ISO 11649 RF creditor reference (mod-97 check digits).

GET

/v1/id/gtin

Validates GTIN-8, UPC-A (12), EAN-13 and GTIN-14 check digits for retail barcodes.

  • code (query, required) — GTIN-8, UPC-A (12), EAN-13 or GTIN-14.
POST

/v1/id/gtin

Validates GTIN-8, UPC-A (12), EAN-13 and GTIN-14 check digits for retail barcodes.

GET

/v1/email/verify

Checks an e-mail address: syntax, whether the domain can actually receive mail, disposable and role-account detection, and typo correction.

  • email (query, required) — E-mail address to check.
  • rejectFreeProviders (query)
  • rejectRoleAccounts (query)
POST

/v1/email/verify

Checks an e-mail address: syntax, whether the domain can actually receive mail, disposable and role-account detection, and typo correction.

GET

/v1/eu/vat/rates

Dated EU-27 VAT rates (standard, reduced, super-reduced, parking) plus the Union OSS threshold. Not a goods classification.

  • country (query, required) — ISO 3166-1 alpha-2 country (EL accepted as Greece).
  • asOf (query) — ISO date YYYY-MM-DD. Defaults to today UTC.
POST

/v1/eu/vat/rates

Dated EU-27 VAT rates (standard, reduced, super-reduced, parking) plus the Union OSS threshold. Not a goods classification.

GET

/v1/eu/vat/validate

Validates an EU VAT number against the official VIES register, with per-country format checks and honest handling of upstream outages.

  • vatNumber (query, required) — VAT number with or without the country prefix, e.g. "DE811907980".
  • countryCode (query) — Country code, when the number is given without a prefix.
POST

/v1/eu/vat/validate

Validates an EU VAT number against the official VIES register, with per-country format checks and honest handling of upstream outages.

GET

/v1/iban/validate

Validates an IBAN from any of 70+ countries: checksum, country length and in-country account structure, and resolves the bank and branch codes.

  • iban (query, required) — IBAN, with or without spaces.
  • expectCountry (query) — Expected country code (ISO 3166-1 alpha-2).
POST

/v1/iban/validate

Validates an IBAN from any of 70+ countries: checksum, country length and in-country account structure, and resolves the bank and branch codes.

GET

/v1/id/mrz

Parses ICAO 9303 TD1/TD3 MRZ and verifies check digits — format check, not identity proof.

  • mrz (query, required) — ICAO 9303 MRZ text: TD3 two lines of 44, or TD1 three lines of 30.
GET

/v1/id/isbn

Validates ISBN-10 and ISBN-13 check digits and converts between them when the 978 prefix allows it.

  • isbn (query, required) — ISBN-10 or ISBN-13, with or without hyphens.
POST

/v1/id/isbn

Validates ISBN-10 and ISBN-13 check digits and converts between them when the 978 prefix allows it.

GET

/v1/finance/isin

Validates an ISIN (ISO 6166): country code, national identifier and the letter-aware check digit.

  • isin (query, required) — ISIN, 12 characters, e.g. US0378331005.
POST

/v1/finance/isin

Validates an ISIN (ISO 6166): country code, national identifier and the letter-aware check digit.

GET

/v1/id/lei/lookup

Looks up a Legal Entity Identifier in the GLEIF register: legal name, registration status, country, and BIC.

  • lei (query, required) — Legal Entity Identifier, 20 characters.
POST

/v1/id/lei/lookup

Looks up a Legal Entity Identifier in the GLEIF register: legal name, registration status, country, and BIC.

GET

/v1/id/lei

Validates a 20-character Legal Entity Identifier (ISO 17442) with the ISO 7064 mod-97 check digits.

  • lei (query, required) — Legal Entity Identifier, 20 characters.
POST

/v1/id/lei

Validates a 20-character Legal Entity Identifier (ISO 17442) with the ISO 7064 mod-97 check digits.

GET

/v1/mcp/index

Searchable, dated archive of what every public MCP server actually exposes — tool definitions, daily change feed, and rug-pull detection.

  • view (query) — `search`: search tool name/description · `changes`: change feed (the actual product) · `server`: per-day measurement history for one server · `tool`: definition history for one tool · `stats`: index-level totals.
  • q (query) — Search term (only `search`), e.g. `invoice`, `calendar`, `sql`.
  • server (query) — Registry server name, e.g. `com.temsor/api`. Required for `server`/`tool` views.
  • tool (query) — Tool name (only `tool` view).
  • minRisk (query) — Only tools whose review score is at or above this (only `search`).
  • severity (query) — Only `changes`.
  • type (query) — Event type filter (only `changes`), e.g. `tool_description_changed`.
  • days (query) — Window in days (`changes` and `server`).
  • limit (query, limit)
POST

/v1/mcp/index

Searchable, dated archive of what every public MCP server actually exposes — tool definitions, daily change feed, and rug-pull detection.

GET

/v1/model/archive

Dated archive of LLM prices, context windows, announced retirement dates and quiet delistings across 400+ models and 50+ providers.

  • view (query) — `catalog`: tracked models · `expiring`: retirement announced · `delisted`: dropped from the catalogue · `events`: lifecycle events · `stats`: archive totals.
  • provider (query) — Provider prefix, e.g. `anthropic`, `openai`, `google`.
  • slug (query) — Full model id, e.g. `anthropic/claude-opus-5` (only `events`).
  • q (query) — Search in model id/name (only `catalog`).
  • type (query) — Event type (only `events`).
  • severity (query)
  • withinDays (query) — `expiring`: retire within this many days.
  • days (query) — `events`: window in days.
  • includeDelisted (query) — `catalog`: include delisted models.
  • limit (query, limit)
POST

/v1/model/archive

Dated archive of LLM prices, context windows, announced retirement dates and quiet delistings across 400+ models and 50+ providers.

GET

/v1/model/drift

Independent daily record of what changed behind a provider endpoint: which alias resolved to which model, and when behaviour shifted.

  • view (query) — `aliases`: alias → the real model behind it · `events`: drift events · `probes`: probe status from the last run.
  • provider (query) — Filter by provider (gemini, groq, cerebras, mistral).
  • severity (query) — Only for the `events` view.
  • days (query) — History window in days (only `events`).
  • limit (query, limit)
POST

/v1/model/drift

Independent daily record of what changed behind a provider endpoint: which alias resolved to which model, and when behaviour shifted.

GET

/v1/pay/epc-qr

Builds an EPC069-12 v3.1 V2 (002) SCT payload. Does not send money; returns text only, no PNG.

  • name (query, required) — Beneficiary name (SCT Name).
  • iban (query, required) — Beneficiary IBAN, with or without spaces.
  • amountEur (query, required) — Transfer amount in EUR (positive).
  • remittance (query) — Unstructured remittance (e.g. invoice number).
  • bic (query) — Beneficiary BIC; optional in V2 (002).
  • currency (query) — Must be EUR if provided. Other currencies are rejected.
GET

/v1/pbx/audio/chunk

Notify an optional audio chunk / customer URI for a live or archived call (idle $0).

  • call_id (query, required)
  • pbx_id (query)
  • uri (query) — Customer-side media URI (preferred).
  • bytes_b64 (query) — Optional small demo chunk; production prefers URI.
  • t_ms (query)
POST

/v1/pbx/audio/chunk

Notify an optional audio chunk / customer URI for a live or archived call (idle $0).

GET

/v1/pbx/bridge/multi-agent

Record virtual multi-agent bridge intent + shared memory hint (open promises). Idle $0, no live Asterisk.

  • call_id (query, required) — Call id to attach the multi-agent bridge intent to.
  • agents (query, required) — Virtual RTP agents to bridge (intent only — no live Asterisk).
  • pbx_id (query) — Optional PBX scope; falls back to x-temsor-pbx-key or demo PBX.
POST

/v1/pbx/bridge/multi-agent

Record virtual multi-agent bridge intent + shared memory hint (open promises). Idle $0, no live Asterisk.

GET

/v1/pbx/calls

List recent calls with transfer path crumbs — site + customer archive browser.

  • limit (query, limit) — Max recent calls to return (1–100).
POST

/v1/pbx/calls

List recent calls with transfer path crumbs — site + customer archive browser.

GET

/v1/pbx/calls/get

Get one call by id with transfer graph — customer detail drawer.

  • call_id (query, required) — Call id (e.g. call_msp_002).
POST

/v1/pbx/calls/get

Get one call by id with transfer graph — customer detail drawer.

GET

/v1/pbx/calls/graph

GET call graph + transfer edges for a call — who→whom→where the promise stuck (moat).

  • call_id (query, required) — Call id whose transfer graph to return.
  • stuck_at (query) — Optional override for where the promise stuck (extension).
POST

/v1/pbx/calls/graph

GET call graph + transfer edges for a call — who→whom→where the promise stuck (moat).

GET

/v1/pbx/dictionary

Managed SaaS domain dictionary (E4) — example packs thicken per pilot (tenant-scoped aliases). Boosts search + Fact extract. No invented premiums.

  • domain (query) — Domain slice: otel | santral_firmasi | sigorta | finans | enerji | otomotiv (legacy msp) | all
POST

/v1/pbx/dictionary

Managed SaaS domain dictionary (E4) — example packs thicken per pilot (tenant-scoped aliases). Boosts search + Fact extract. No invented premiums.

GET

/v1/pbx/dictionary/add

Add a synonym/alias (tenant-scoped or global demo) — E4 compounding thickens search boost + Fact extract. ≤60/hour/key → 429. Idle $0. No invented premiums.

  • term (query, required) — Canonical term (e.g. AC, tariff). Plain Turkish preferred.
  • alias (query, required) — Synonym / alias to add (e.g. cooling, line package).
  • domain (query) — Domain: otel | santral_firmasi | sigorta | finans | enerji | otomotiv (legacy msp accepted).
  • kind (query) — Fact kind; inferred from seed term when omitted.
  • boost (query) — Search boost weight (default 2).
  • scope (query) — pbx = scoped to x-temsor-pbx-key; global = demo-wide. Default: pbx if registered key, else global.
  • hint_tr (query)
  • hint_en (query)
POST

/v1/pbx/dictionary/add

Add a synonym/alias (tenant-scoped or global demo) — E4 compounding thickens search boost + Fact extract. ≤60/hour/key → 429. Idle $0. No invented premiums.

GET

/v1/pbx/events

Ingest Asterisk programming-interface (ARI) / Stasis (call-app channel) events. Optional x-temsor-pbx-key or HMAC-SHA256 request signature. Body ≤256 KiB → 429. Idle $0 when no calls.

  • pbx_id (query) — PBX id that emitted the ARI batch.
  • events (query, required) — ARI / Stasis event batch. Utterance/text fields trigger heuristic promise extract.
POST

/v1/pbx/events

Ingest Asterisk programming-interface (ARI) / Stasis (call-app channel) events. Optional x-temsor-pbx-key or HMAC-SHA256 request signature. Body ≤256 KiB → 429. Idle $0 when no calls.

GET

/v1/pbx/facts

List extracted facts (IMEI, room, tariff…) from the durable index — filter by call_id, kind, domain, q.

  • call_id (query) — Filter by call id (e.g. call_msp_001).
  • kind (query) — Fact kind key (imei, oda, tarife, ...) or all.
  • domain (query) — Domain slice: otel | santral_firmasi | sigorta | finans | enerji (legacy msp) | all.
  • q (query) — Free-text filter over kind + value + call_id.
  • limit (query, limit) — Max facts to return (1–200).
POST

/v1/pbx/facts

List extracted facts (IMEI, room, tariff…) from the durable index — filter by call_id, kind, domain, q.

GET

/v1/pbx/facts/get

Get one extracted fact by id — detail drawer for site + customer.

  • id (query, required) — Fact id (e.g. fact_001).
POST

/v1/pbx/facts/get

Get one extracted fact by id — detail drawer for site + customer.

GET

/v1/pbx/index/partial

Upsert mid-call partial index (utterances → fact/promise hints). Path to ≤400ms whisper; ≤600/hour/key → 429; idle $0.

  • call_id (query, required) — Live call id to upsert partial index for.
  • text (query) — Partial utterance / snippet (customer STT or demo). Empty = metadata-only.
  • speaker (query)
  • t_ms (query)
  • is_final (query) — Finalized utterance span (vs interim).
  • live (query) — Default true while call is live.
  • end_call (query) — Mark live=false; idle $0 for this call.
  • promote (query) — Promote heuristic hints into durable Promise/Fact docs.
  • pbx_id (query)
POST

/v1/pbx/index/partial

Upsert mid-call partial index (utterances → fact/promise hints). Path to ≤400ms whisper; ≤600/hour/key → 429; idle $0.

GET

/v1/pbx/index/partial/get

GET mid-call partial index — accumulating facts/promises/snippets while live.

  • call_id (query, required) — Call id whose live partial index to read.
POST

/v1/pbx/index/partial/get

GET mid-call partial index — accumulating facts/promises/snippets while live.

GET

/v1/pbx/ingest/transcript

Heuristic TR promise extractor from transcript text — creates open Promise docs (idle $0, no LLM).

  • transcript (query, required) — TR utterance / transcript text to scan for promises.
  • call_id (query)
  • pbx_id (query)
  • who (query)
  • ext (query)
  • persist_promises (query) — When false, extract only (dry-run, no write). When true, create Promise docs status=open.
POST

/v1/pbx/ingest/transcript

Heuristic TR promise extractor from transcript text — creates open Promise docs (idle $0, no LLM).

GET

/v1/pbx/night-twin/last

GET last gece-ikizi report persisted on forge volume (null if never run). Idle $0.

POST

/v1/pbx/night-twin/last

GET last gece-ikizi report persisted on forge volume (null if never run). Idle $0.

GET

/v1/pbx/night-twin/run

Night scan: open promises older than N hours → unresolved candidates (iptal/iade/söz). ≤20/hour/key → 429. Idle $0, no LLM.

  • pbx_id (query) — Optional PBX scope; falls back to x-temsor-pbx-key scope.
  • older_than_hours (query) — Scan open promises whose call is older than this many hours.
POST

/v1/pbx/night-twin/run

Night scan: open promises older than N hours → unresolved candidates (iptal/iade/söz). ≤20/hour/key → 429. Idle $0, no LLM.

GET

/v1/pbx/orchestra/act

Query→act on managed SaaS runtime: whisper / hold / transfer / pci_stop / snoop. Intent + optional webhook. ≤120/hour/key → 429. No DID sales. Own PBX optional footnote.

  • call_id (query, required) — Live or indexed call id to act on.
  • action (query, required) — whisper | hold | transfer | pci_stop | snoop
  • params (query) — Action params (to_ext required for transfer).
  • pbx_id (query)
  • stasis_webhook_url (query) — Optional customer Stasis webhook — forge POSTs the act intent there.
  • skip_forward (query) — Record only; do not POST webhook.
POST

/v1/pbx/orchestra/act

Query→act on managed SaaS runtime: whisper / hold / transfer / pci_stop / snoop. Intent + optional webhook. ≤120/hour/key → 429. No DID sales. Own PBX optional footnote.

GET

/v1/pbx/orchestra/acts

List recent managed orchestra intents (whisper/hold/transfer/PCI). Number→flow SaaS · idle $0 · no DID. Own PBX optional footnote.

  • call_id (query) — Optional filter — only acts for this call_id.
  • limit (query, limit) — Max recent orchestra acts (default 20).
POST

/v1/pbx/orchestra/acts

List recent managed orchestra intents (whisper/hold/transfer/PCI). Number→flow SaaS · idle $0 · no DID. Own PBX optional footnote.

GET

/v1/pbx/persons

Light CRM from call graph / facts — caller phones+names and extension identities seen on transfers.

  • call_id (query) — Filter persons seen on this call id.
  • kind (query) — caller = durable Person; extension = derived from call-graph hops; all = both.
  • q (query) — Free-text over names, phones, org, extensions, facts.
  • include_extensions (query) — Include derived extension identities (default true).
  • limit (query, limit) — Max persons to return (1–200).
GET

/v1/pbx/persons/get

Get one light-CRM identity by id — caller Person or derived extension.

  • id (query, required) — Person id (e.g. per_001) or extension id (e.g. ext_101).
POST

/v1/pbx/persons/get

Get one light-CRM identity by id — caller Person or derived extension.

GET

/v1/pbx/promises

List broken/open promises from the call graph — the hotel / PBX-provider sales demo list.

  • status (query) — Promise status filter; closed = kept|broken. Sales demo uses open.
POST

/v1/pbx/promises

List broken/open promises from the call graph — the hotel / PBX-provider sales demo list.

GET

/v1/pbx/promises/act

E1 moat: who→whom→promise → managed orchestra intent (whisper/transfer/hold). Idle $0. No PSTN. Own PBX optional footnote.

  • promise_id (query, required) — Open (or any) promise id — closed loop reads call graph then records orchestra intent.
  • action (query) — Default whisper. transfer uses graph stuck_at / promise.ext.
  • agent_ext (query)
  • skip_forward (query) — Default true — record intent only.
  • stasis_webhook_url (query)
  • pbx_id (query)
POST

/v1/pbx/promises/act

E1 moat: who→whom→promise → managed orchestra intent (whisper/transfer/hold). Idle $0. No PSTN. Own PBX optional footnote.

GET

/v1/pbx/promises/close

Mark an open promise kept or broken with an optional KVKK-safe note — makes the sales demo writable, not read-only. ≤60/hour/key → 429.

  • promise_id (query, required) — Promise id (prm_*). Sales demo marks open promises kept|broken.
  • status (query, required) — Close outcome: kept (honoured) or broken (not kept).
  • note (query) — Optional short operator note. Phones/emails stripped (KVKK-safe).
POST

/v1/pbx/promises/close

Mark an open promise kept or broken with an optional KVKK-safe note — makes the sales demo writable, not read-only. ≤60/hour/key → 429.

GET

/v1/pbx/promises/export

Export open/broken promises as CSV or JSON — hotel / PBX-provider unclosed-promise sales list.

  • status (query) — Promise status filter; closed = kept|broken. Sales demo uses open.
  • format (query) — Export format.
POST

/v1/pbx/promises/export

Export open/broken promises as CSV or JSON — hotel / PBX-provider unclosed-promise sales list.

GET

/v1/pbx/promises/reopen

Undo a kept/broken close — restore an open promise so the sales demo can reverse a mis-click. ≤60/hour/key → 429.

  • promise_id (query, required) — Promise id (prm_*). Undo a kept|broken close — restore open.
POST

/v1/pbx/promises/reopen

Undo a kept/broken close — restore an open promise so the sales demo can reverse a mis-click. ≤60/hour/key → 429.

GET

/v1/pbx/redact

KVKK-first forget (default-on SaaS): clear derived index by id/phone; durable audit who/what/when + tenant scope. ≤30/hour/key → 429. Managed pointer only — not a legal deletion SLA.

  • target_type (query) — Index document type. Optional when `phone` is set.
  • target_id (query) — Document id (prm_*, per_*, call_*, fact_*).
  • phone (query) — Caller phone — finds Person phones (+ linked derived index).
  • reason (query) — KVKK (personal-data) / forget reason.
  • mode (query) — anonymize (default) scrubs fields; delete removes docs.
  • who (query) — Actor label for durable audit (defaults to pbx scope / demo-operator).
POST

/v1/pbx/redact

KVKK-first forget (default-on SaaS): clear derived index by id/phone; durable audit who/what/when + tenant scope. ≤30/hour/key → 429. Managed pointer only — not a legal deletion SLA.

GET

/v1/pbx/redact/audit

List recent KVKK forget actions — who/what/when + tenant scope. Managed SaaS derived-index audit; not a legal deletion SLA.

  • limit (query, limit) — Max recent forget actions to return (default 20).
POST

/v1/pbx/redact/audit

List recent KVKK forget actions — who/what/when + tenant scope. Managed SaaS derived-index audit; not a legal deletion SLA.

POST

/v1/phone/validate

Validates and normalises a phone number to E.164, classifies the line type, and resolves the province for Turkish landlines.

GET

/v1/tr/iban/build

Builds a Turkish IBAN from a 5-digit bank code and account number, computing ISO 7064 check digits.

  • bankCode (query, required) — 5-digit Turkish national bank / EFT code (e.g. 00062).
  • accountNumber (query, required) — Account number, up to 16 alphanumeric characters (padded left with zeros).
  • reserved (query) — Reserved BBAN digit after the bank code. Defaults to 0.
POST

/v1/tr/iban/build

Builds a Turkish IBAN from a 5-digit bank code and account number, computing ISO 7064 check digits.

GET

/v1/pbx/register

Register a pilot PBX; returns pbx_id + API key once (hashed at rest). ≤5/hour/IP → 429. Idle $0.

  • pbx_id (query) — Pilot PBX id; auto-minted if omitted.
  • label (query) — Human label, e.g. hotel or PBX/IT provider site.
  • ari_webhook_secret (query) — ARI webhook signing secret (stored as hint only).
  • name (query) — Pilot contact name (waitlist / register).
  • email (query) — Pilot contact email.
  • webhook_url (query) — Optional outbound webhook URL — Temsor POSTs promise/fact/orchestra/redact events.
  • webhook_secret (query) — Optional HMAC secret for outbound webhook signatures (x-temsor-signature).
  • webhook_events (query) — Event list or comma string: promise.opened|closed, fact.extracted, orchestra.act, redact, or *.
POST

/v1/pbx/register

Register a pilot PBX; returns pbx_id + API key once (hashed at rest). ≤5/hour/IP → 429. Idle $0.

GET

/v1/pbx/search

Archive search over call promises and facts — voice-Google for the PBX, not a receptionist bot.

  • q (query) — Full-text query over promises, facts, and call summaries.
  • status (query)
  • ext (query)
  • competitor (query)
  • date_from (query) — ISO date/time lower bound (promise.when_iso / call.started_at).
  • date_to (query) — ISO date/time upper bound.
  • stuck_after (query) — Filter: promise stuck after transfer to this extension (to_ext hop).
POST

/v1/pbx/search

Archive search over call promises and facts — voice-Google for the PBX, not a receptionist bot.

GET

/v1/pbx/status

Control-plane status for a registered PBX — counts + idle. No DID sales.

POST

/v1/pbx/status

Control-plane status for a registered PBX — counts + idle. No DID sales.

GET

/v1/pbx/synthetic/run

Load demo: sample call utterances → promise extractor → stats (calls, promises_open). ≤10/hour/key → 429. Idle $0, no LLM/PSTN.

  • scenario (query) — ivr_menu = DTMF/menu stress; promise_heavy = dense commitment lexicon.
  • count (query, limit) — Fake call count, capped 10..500.
  • pbx_id (query) — Optional PBX scope; falls back to x-temsor-pbx-key or demo PBX.
POST

/v1/pbx/synthetic/run

Load demo: sample call utterances → promise extractor → stats (calls, promises_open). ≤10/hour/key → 429. Idle $0, no LLM/PSTN.

GET

/v1/pbx/webhooks

Register or list outbound webhooks — customer URL receives promise/fact/orchestra/redact events (HMAC if secret). POST write ≤30/hour/key → 429.

  • url (query) — Outbound webhook URL (http/https). Present → register; omit on GET → list.
  • secret (query) — Optional HMAC-SHA256 secret → x-temsor-signature: sha256= .
  • events (query) — Events: promise.opened|closed, fact.extracted, orchestra.act, redact, or *.
  • ping (query) — If true with url → register then ping; if true without url → ping existing.
  • webhook_id (query) — For ping: target webhook id.
  • limit (query, limit) — List limit (default 50).
POST

/v1/pbx/webhooks

Register or list outbound webhooks — customer URL receives promise/fact/orchestra/redact events (HMAC if secret). POST write ≤30/hour/key → 429.

GET

/v1/pbx/webhooks/deliveries

List last N outbound webhook deliveries (stub or live) — promise/fact/orchestra/redact/ping.

  • webhook_id (query) — Filter by webhook id.
  • limit (query, limit) — Max deliveries (default 20).
POST

/v1/pbx/webhooks/deliveries

List last N outbound webhook deliveries (stub or live) — promise/fact/orchestra/redact/ping.

GET

/v1/pbx/whisper/status

Capability: mode=stub|ready from TEMSOR_RTP_*. No live RTP on forge; idle $0.

POST

/v1/pbx/whisper/status

Capability: mode=stub|ready from TEMSOR_RTP_*. No live RTP on forge; idle $0.

GET

/v1/pbx/whisper/suggest

Demo: ≤3 context cards; prefers in-call partial index when present — mock latency_ms; idle $0. Lab: TEMSOR_RTP_LAB=1 → lab_latency_ms.

  • call_id (query, required) — Active call id for agent UI context.
  • partial_text (query) — Partial transcript / utterance text (no live speech recognition).
POST

/v1/pbx/whisper/suggest

Demo: ≤3 context cards; prefers in-call partial index when present — mock latency_ms; idle $0. Lab: TEMSOR_RTP_LAB=1 → lab_latency_ms.

GET

/v1/phone/validate

Validates and normalises a phone number to E.164, classifies the line type, and resolves the province for Turkish landlines.

  • phone (query, required) — Phone number in any common format.
  • defaultCountry (query) — ISO 3166-1 alpha-2 country to assume when the number has no international prefix. Defaults to TR.
GET

/v1/sanctions/screen

Screens a name against six official sanctions lists — US OFAC, UN, EU, UK OFSI, Switzerland SECO and Canada — with transliteration-aware fuzzy matching.

  • name (query, required) — Name to screen — person or organisation.
  • type (query) — Restrict to one subject type. Narrowing this removes most false positives.
  • birthYear (query) — Known birth year. The single strongest false-positive filter available.
  • country (query) — Known country or nationality.
  • sources (query) — Defaults to all lists.
  • minScore (query) — Score floor. 0.92+ reads as a match, 0.80+ as possible.
  • limit (query, limit)
  • asOf (query) — Screen against the lists as they stood on this date. Limited by when our archive begins.
POST

/v1/sanctions/screen

Screens a name against six official sanctions lists — US OFAC, UN, EU, UK OFSI, Switzerland SECO and Canada — with transliteration-aware fuzzy matching.

GET

/v1/series/history

Returns the accumulated history of public data series with change statistics and a source receipt for every point.

  • seriesId (query) — Series id, e.g. `tcmb.usd`. Omit to list the catalogue.
  • from (query) — Start date (inclusive).
  • to (query) — End date (inclusive).
  • limit (query, limit)
  • fillGaps (query)
  • includeEvidence (query) — Include source URL and content excerpt for each point.
POST

/v1/series/history

Returns the accumulated history of public data series with change statistics and a source receipt for every point.

GET

/v1/shipping/identify

Identifies which carrier a tracking number belongs to, validates it where a checksum exists, and returns the canonical tracking link.

  • trackingNumber (query, required) — Tracking number, with or without spaces and dashes.
  • country (query) — Destination or origin country hint, e.g. "TR". Narrows the candidates.
POST

/v1/shipping/identify

Identifies which carrier a tracking number belongs to, validates it where a checksum exists, and returns the canonical tracking link.

GET

/v1/id/tin

Validates a tax identifier for 25+ countries: checksum where the algorithm is public, format-only where it is not. Country is required.

  • tin (query, required) — Tax identifier as written, with or without spaces and punctuation.
  • country (query, required) — ISO 3166-1 alpha-2 country that issued the identifier. Required.
POST

/v1/id/tin

Validates a tax identifier for 25+ countries: checksum where the algorithm is public, format-only where it is not. Country is required.

GET

/v1/tr/address/parse

Splits a free-form Turkish address into neighbourhood, street, building, floor, flat, district, province and postcode.

  • address (query, required) — Free-text address.
  • defaultProvince (query) — Province to assume when the address has none.
POST

/v1/tr/address/parse

Splits a free-form Turkish address into neighbourhood, street, building, floor, flat, district, province and postcode.

GET

/v1/tr/business-days

Adds business days or counts them between two dates, accounting for Turkish public and religious holidays including half-day eves.

  • start (query, required) — Start date (YYYY-MM-DD).
  • addDays (query) — Add/subtract this many business days (not calendar days).
  • end (query) — If set, count business days between start and this date.
  • countHalfDaysAsWork (query) — Count Arife half-days as working days?
POST

/v1/tr/business-days

Adds business days or counts them between two dates, accounting for Turkish public and religious holidays including half-day eves.

GET

/v1/tr/fuel/prices

Petrol, diesel and heating-oil pump prices for all 81 Turkish provinces, including the price in force on any past date.

  • province (query) — Province name or plate code — "Ankara", "istanbul" or 34. Leave empty to list covered provinces.
  • product (query) — Fuel product. Omitted → every product available for that province.
  • asOf (query) — Price in force on this date (YYYY-MM-DD). Omitted → latest known price.
  • from (query) — With `to`: return the price changes in this window.
  • to (query)
  • includeDistricts (query) — Adds districts whose pump price differs from the province reference price.
POST

/v1/tr/fuel/prices

Petrol, diesel and heating-oil pump prices for all 81 Turkish provinces, including the price in force on any past date.

GET

/v1/tr/validate

Validates Turkish national ID, tax number, IBAN, licence plate, IMEI, barcodes, KEP, MERSİS, postal code and ISBN from one endpoint, with type auto-detection.

  • value (query, required) — Value to validate.
  • type (query) — Omitted → inferred from the format.
GET

/v1/tr/invoice/build

Builds a UBL-TR e-Invoice or e-Archive XML document from plain JSON, computing every total and validating the parties.

  • profile (query) — TEMELFATURA: no formal objection flow. TICARIFATURA: buyer may accept/reject. EARSIVFATURA: buyer is not an e-Invoice user.
  • invoiceTypeCode (query)
  • id (query) — Invoice number. Omit and supply `series` to have it built from the series and sequence.
  • series (query) — Three-letter series code, used with `sequence`.
  • sequence (query) — Sequence number within the series and year.
  • uuid (query) — Document UUID (ETTN). Generated when omitted.
  • issueDate (query, required)
  • issueTime (query)
  • currency (query) — ISO 4217. Anything other than TRY requires `exchangeRate`.
  • exchangeRate (query) — Units of TRY per one unit of `currency`.
  • supplier (query, required)
  • customer (query, required)
  • lines (query, required)
  • notes (query)
  • amountInWords (query) — Adds the payable amount written out in Turkish words as a note, the way invoices require.
  • despatchDocumentId (query) — Delivery note number, if the goods shipped separately.
  • orderReferenceId (query)
POST

/v1/tr/invoice/build

Builds a UBL-TR e-Invoice or e-Archive XML document from plain JSON, computing every total and validating the parties.

GET

/v1/tr/invoice/parse

Turns a UBL-TR e-Invoice or e-Archive XML document into clean JSON: parties, line items, taxes and totals.

  • xml (query, required) — UBL-TR e-Invoice / e-Archive (e-Arsiv) XML body.
POST

/v1/tr/invoice/parse

Turns a UBL-TR e-Invoice or e-Archive XML document into clean JSON: parties, line items, taxes and totals.

GET

/v1/tr/labor

Computes Turkish severance (kıdem), notice (ihbar) and annual-leave entitlement from service dates and the gross wage, using the official ceiling and minimum-wage tables for the given day.

  • startDate (query, required) — Employment start date (YYYY-MM-DD).
  • endDate (query, required) — Termination date (YYYY-MM-DD). Inclusive of this day.
  • monthlyGross (query, required) — Gross monthly wage the severance is based on (giydirilmiş brüt).
  • asOf (query) — Rate table date. Defaults to endDate.
  • age (query) — Employee age at termination — affects annual-leave entitlement (under 18 or 50+).
  • unusedLeaveDays (query) — Unused annual-leave days, if you also want the unused-leave gross.
POST

/v1/tr/labor

Computes Turkish severance (kıdem), notice (ihbar) and annual-leave entitlement from service dates and the gross wage, using the official ceiling and minimum-wage tables for the given day.

GET

/v1/tr/money/to-words

Writes a monetary amount out in Turkish words, the way invoices, cheques and promissory notes require.

  • amount (query, required) — Amount. Accepts both "1.234,56" and 1234.56.
  • currency (query)
  • style (query) — Output letter case.
  • wrapHash (query)
POST

/v1/tr/money/to-words

Writes a monetary amount out in Turkish words, the way invoices, cheques and promissory notes require.

GET

/v1/tr/postal-code

Validates a 5-digit Turkish postal code and resolves the province from the first two digits (plate map).

  • postalCode (query, required) — Turkish 5-digit postal code, with or without spaces.
POST

/v1/tr/postal-code

Validates a 5-digit Turkish postal code and resolves the province from the first two digits (plate map).

GET

/v1/tr/pay/qr

Builds a person-to-person TR Karekod (FAST) payment payload from IBAN, name and optional TRY amount. Text only — no PNG.

  • iban (query, required) — Beneficiary Turkish IBAN (with or without spaces).
  • name (query, required) — Payee name shown to the payer (2–26 chars after trim).
  • amount (query) — TRY amount; omitted → static QR (payer enters amount).
  • explanation (query) — Optional remittance note (application free field 10).
  • currency (query) — Must be TRY if provided.
  • generatorCode (query) — QR generator / EFT code (4 digits). Defaults to last 4 of the IBAN bank code.
POST

/v1/tr/pay/qr

Builds a person-to-person TR Karekod (FAST) payment payload from IBAN, name and optional TRY amount. Text only — no PNG.

GET

/v1/tr/tebligat-clock

Computes the deemed-received date and the HMK deadline (with holiday shifting) for a Turkish notification, from the date the underlying event actually happened.

  • type (query, required) — Notification method. Determines which event `basisDate` refers to and whether the deemed-received date is same-day or shifted.
  • lawFamily (query, required) — Body of procedural law the period is computed under. Only "hmk" (Code of Civil Procedure) is supported so far.
  • basisDate (query, required) — The date `basisLabel` describes for this type — for "electronic" this is the date UETS reports the message as reached, not sent or read.
  • periodDays (query, required) — Length of the statutory or judicial period, in days, counted from `periodStart`.
  • periodType (query) — Free-text label for the period (e.g. "itiraz", "temyiz"), echoed back only — not mapped to a day count.
  • ilanenDeemedDays (query) — Only valid with type "ilanen": number of days the competent authority set for the notice to become deemed received (TK 31), 7-15, default 7. Not the number of days for the underlying period.
  • hasAttorney (query) — Whether the addressee has a registered attorney of record. When true and `type` is not "vekil", a TK 11 warning is added noting that service should have gone to the attorney.
  • subjectToJudicialRecess (query) — Whether this matter is subject to the judicial recess (adli tatil, HMK 104) instead of being exempt. Only affects the result when `lawFamily` is "hmk" and the computed last day falls in the 20 July - 31 August window.
POST

/v1/tr/tebligat-clock

Computes the deemed-received date and the HMK deadline (with holiday shifting) for a Turkish notification, from the date the underlying event actually happened.

POST

/v1/tr/validate

Validates Turkish national ID, tax number, IBAN, licence plate, IMEI, barcodes, KEP, MERSİS, postal code and ISBN from one endpoint, with type auto-detection.

GET

/v1/tr/vat

Splits a Turkish amount into net, VAT and (optionally) withholding: who pays the seller, who remits the withheld VAT.

  • amount (query, required) — The amount to tax. See amountIncludesVat.
  • amountIncludesVat (query) — If true, `amount` is the gross (KDV dahil); if false, it is the net/matrah.
  • rate (query) — VAT rate in percent. 0, 1, 10 or 20.
  • withholding (query) — Withholding fraction such as "5/10", or a code from the list (reklam, tasima, hurda, isgucu…).
POST

/v1/tr/vat

Splits a Turkish amount into net, VAT and (optionally) withholding: who pays the seller, who remits the withheld VAT.

GET

/v1/id/uuid

Validates UUID structure and reports version (1–5, 7) and RFC 4122 variant bits. Deterministic.

  • uuid (query, required) — UUID string, with or without hyphens.
POST

/v1/id/uuid

Validates UUID structure and reports version (1–5, 7) and RFC 4122 variant bits. Deterministic.

GET

/v1/id/vin

Validates a 17-character VIN: forbidden letters, ISO 3779 check digit, WMI region/manufacturer, model year and plant.

  • vin (query, required) — Vehicle identification number, 17 characters.
POST

/v1/id/vin

Validates a 17-character VIN: forbidden letters, ISO 3779 check digit, WMI region/manufacturer, model year and plant.

GET

/v1/usage

Own org balance, quota and credit ledger

145 endpoints auto-detected

Authentication

This API uses Bearer token authentication — pass your token in the Authorization header.

curl -X POST \
  "https://api.temsor.com/docs/v1/id/mrz" \
  -H "Authorization: Bearer YOUR_TOKEN"

api.temsor.com · HTTPS only