Developers

Use the same mapping contract from code.

Normalize one value synchronously through the public API. Every result identifies the taxonomy version, mapping build, decision, and selected concept.

POST/v1/taxonomies/naics/normalize
Environment
Public demonstration
Authentication
None here
Request shape
One synchronous value

Request

Build a normalization request

Verified OpenAlex branches

Sent exactly as entered. This endpoint accepts one value per request.

Add optional record context

Use context only when this record carries evidence that is not in the source value.

Changes response detail only, never the semantic decision.

Response

Not sent

Send the request to see the complete response.
curl "https://your-canonmap-host/v1/taxonomies/naics/normalize" \
  -H "Content-Type: application/json" \
  --data-raw '{"value":"custom software development services for business clients","include_candidates":5}'

Normalize resource

One synchronous mapping decision

POST /v1/taxonomies/{taxonomy_id}/normalize

Request fields
FieldTypeMeaning
valuestringOne non-empty source label or short description.
contextobject | nullOptional string-to-string evidence about this individual record.
include_candidatesintegerCandidate rows returned for inspection: 0 through 10. Default: 5.
Response fields
FieldTypeMeaning
taxonomy_idstringStable identifier for the target vocabulary.
taxonomy_versionstringExact source-vocabulary version used for the decision.
source_valuestringOriginal submitted value, unchanged.
decisionmatch | ambiguousThe semantic outcome. Ambiguous is a valid decision, not a transport error.
conceptobject | nullSelected concept for a match; otherwise null.
concept.idstringStable concept ID. Retain this instead of relying on the display label.
concept.labelstringDisplay label from the selected taxonomy version.
candidatesarrayRetrieved concepts retained for inspection, up to include_candidates.
mapping_buildstringImmutable identifier for the published mapping build.
calibrated_probabilitynumber | nullBuild-calibrated estimate for the top candidate. It is not raw similarity.
reason_codestring | nullMachine-readable explanation when no concept is returned.
reasonstring | nullHuman-readable explanation when no concept is returned.

Evaluation resource

Read the evidence attached to the published build

GET /v1/taxonomies/{taxonomy_id}/evaluation

The response identifies the taxonomy and mapping build, evaluation and assessed row counts, the automated fit distribution, ambiguity rate, retained examples, decision policy, and evidence basis. It describes the currently published build; it does not start an evaluation job.

View the same evidence in Performance

Operational boundary

Supply the taxonomy and values, not a model configuration

Improvements arrive as new mapping_build values under the same stable response contract.

Available now

  • Unauthenticated access to the selected demonstration taxonomies.
  • One synchronous value per public normalization request.
  • Zero to ten returned candidates for inspection.
  • A 64 KiB request-body limit at the public web proxy.
  • 429 responses can include Retry-After.

Not implied by this demo

  • No durable batch jobs or hosted arbitrary-taxonomy upload.
  • No authentication, tenant isolation, or retention guarantee.
  • No request history or idempotency contract.
  • No customer-specific accuracy claim.

Errors

Fail closed and keep transport separate from meaning

A successful response may still have decision: "ambiguous"; branch on that field before using concept. By contrast, every response below is a transport or request failure and never contains a substituted mapping.

Public error behavior
StatusMeaningClient action
404Unknown public taxonomyCorrect the taxonomy identifier.
413Request body exceeds 64 KiBSend a smaller synchronous request.
422Malformed body or field outside its allowed rangeCorrect the request before retrying.
429Shared demonstration rate limit reachedWait for the returned Retry-After interval.
502Public proxy cannot reach the normalization serviceRetry later; no result was substituted.
503Published build is unavailableTreat this as service failure, not semantic ambiguity.