---
title: "Orion Call Center API"
url: "https://developers.zinnia.com/apis/orion-api/versions/716288b7-e96e-41a7-abc5-63925410717a"
---

# Orion Call Center API

OpenAPI specification document.

```json
{"openapi":"3.0.4","info":{"title":"Orion Call Center API","description":"The Orion Call Entry API lets authorized call-center applications search, retrieve, create, and replace customer-service call records. It also provides the caller, call, transaction, and product classifications needed when working with those records.\n\nEvery request requires an OAuth bearer token validated by Kong and, when configured, independently by Orion. Orion requires a `partyId` and verifies that the caller has the appropriate fine-grained access: read access for searches, individual records, and lookup values; write access for creating or replacing records.\n\nConsumers identify the company whose data they are accessing with the `X-Client-Code` header. The `clientCode` query parameter remains available only on the two existing GET operations for backward compatibility.\n\nFor writes, Orion determines the acting user from the first available valid identity claim in this order: `https://api.zinnia.io/email`, `https://qa.api.zinnia.io/email`, `https://dev.api.zinnia.io/email`, `upn`, then `email`. When one of these claims is present, the request body's `userName` is ignored. If none of these claims is present, Orion uses the trimmed `userName` from the request body to identify the caller in machine-to-machine scenarios.\n\nLookup values are trimmed and matched without regard to letter casing. Orion resolves them to the company's active canonical values. These names are stable API identifiers, so renaming one is a breaking compatibility change. Duplicate active names indicate invalid company configuration.\n\nCreate and replace requests are idempotent for at least 24 hours. Orion compares the company, operation and record identity, actor, submitted fields, resolved lookup values, contracts, and call types; contract and call-type ordering does not affect the comparison. A completed replay returns the original result with `X-Idempotent-Replay`. Reusing an idempotency key for a different request, or while the original request is still in progress, returns `409 Conflict`.","version":"v1"},"paths":{"/callcenter/v1/lookups/call-types":{"get":{"tags":["Lookups"],"summary":"List active call types","description":"Returns active canonical tenant call types, sorted by name, using FGA read authorization. X-Client-Code is required. Names are trimmed and matched case-insensitively by write operations; an unknown/inactive name returns field-specific 400, while duplicate active names return 503 and are logged as a configuration defect. A lookup rename is an API compatibility change.","operationId":"list-call-types","parameters":[{"name":"X-Client-Code","in":"header","description":"Required tenant selector. Trimmed and resolved case-insensitively to a canonical configured tenant before FGA authorization; missing, blank, or unknown values return 400.","required":true,"schema":{"maxLength":4,"minLength":3,"pattern":"^[A-Za-z]{3,4}$","type":"string"},"example":"ABCD"}],"responses":{"200":{"description":"OK","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/LookupResponse"}},"application/json":{"schema":{"$ref":"#/components/schemas/LookupResponse"}},"text/json":{"schema":{"$ref":"#/components/schemas/LookupResponse"}}}},"400":{"description":"Bad Request. Missing/blank/unknown tenant, invalid correlation ID, missing conditional M2M userName, invalid fields, unknown/inactive lookup names, or contract classification/duplication errors.","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/Response"}},"application/json":{"schema":{"$ref":"#/components/schemas/Response"}},"text/json":{"schema":{"$ref":"#/components/schemas/Response"}}}},"401":{"description":"Unauthorized. Bearer token is missing, malformed, or fails configured authentication validation.","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/Response"}},"application/json":{"schema":{"$ref":"#/components/schemas/Response"}},"text/json":{"schema":{"$ref":"#/components/schemas/Response"}}}},"403":{"description":"Forbidden. Token lacks partyId, tenant FGA read/write authorization, or contains a present but blank/malformed configured username claim on a write.","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/Response"}},"application/json":{"schema":{"$ref":"#/components/schemas/Response"}},"text/json":{"schema":{"$ref":"#/components/schemas/Response"}}}},"503":{"description":"Service Unavailable (503). FGA returned an unavailable/unusable result, or the selected tenant has duplicate active lookup names and Orion will not choose an arbitrary ID.","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/Response"}},"application/json":{"schema":{"$ref":"#/components/schemas/Response"}},"text/json":{"schema":{"$ref":"#/components/schemas/Response"}}}}},"security":[{"Bearer":[]}]}},"/callcenter/v1/lookups/caller-types":{"get":{"tags":["Lookups"],"summary":"List active caller types","description":"Returns active canonical tenant caller types, sorted by name, using FGA read authorization. X-Client-Code is required. Names are trimmed and matched case-insensitively by write operations; an unknown/inactive name returns field-specific 400, while duplicate active names return 503 and are logged as a configuration defect. A lookup rename is an API compatibility change.","operationId":"list-caller-types","parameters":[{"name":"X-Client-Code","in":"header","description":"Required tenant selector. Trimmed and resolved case-insensitively to a canonical configured tenant before FGA authorization; missing, blank, or unknown values return 400.","required":true,"schema":{"maxLength":4,"minLength":3,"pattern":"^[A-Za-z]{3,4}$","type":"string"},"example":"ABCD"}],"responses":{"200":{"description":"OK","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/LookupResponse"}},"application/json":{"schema":{"$ref":"#/components/schemas/LookupResponse"}},"text/json":{"schema":{"$ref":"#/components/schemas/LookupResponse"}}}},"400":{"description":"Bad Request. Missing/blank/unknown tenant, invalid correlation ID, missing conditional M2M userName, invalid fields, unknown/inactive lookup names, or contract classification/duplication errors.","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/Response"}},"application/json":{"schema":{"$ref":"#/components/schemas/Response"}},"text/json":{"schema":{"$ref":"#/components/schemas/Response"}}}},"401":{"description":"Unauthorized. Bearer token is missing, malformed, or fails configured authentication validation.","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/Response"}},"application/json":{"schema":{"$ref":"#/components/schemas/Response"}},"text/json":{"schema":{"$ref":"#/components/schemas/Response"}}}},"403":{"description":"Forbidden. Token lacks partyId, tenant FGA read/write authorization, or contains a present but blank/malformed configured username claim on a write.","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/Response"}},"application/json":{"schema":{"$ref":"#/components/schemas/Response"}},"text/json":{"schema":{"$ref":"#/components/schemas/Response"}}}},"503":{"description":"Service Unavailable (503). FGA returned an unavailable/unusable result, or the selected tenant has duplicate active lookup names and Orion will not choose an arbitrary ID.","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/Response"}},"application/json":{"schema":{"$ref":"#/components/schemas/Response"}},"text/json":{"schema":{"$ref":"#/components/schemas/Response"}}}}},"security":[{"Bearer":[]}]}},"/callcenter/v1/lookups/transaction-types":{"get":{"tags":["Lookups"],"summary":"List active transaction types","description":"Returns active canonical tenant transaction types, sorted by name, using FGA read authorization. X-Client-Code is required. Names are trimmed and matched case-insensitively by write operations; an unknown/inactive name returns field-specific 400, while duplicate active names return 503 and are logged as a configuration defect. A lookup rename is an API compatibility change.","operationId":"list-transaction-types","parameters":[{"name":"X-Client-Code","in":"header","description":"Required tenant selector. Trimmed and resolved case-insensitively to a canonical configured tenant before FGA authorization; missing, blank, or unknown values return 400.","required":true,"schema":{"maxLength":4,"minLength":3,"pattern":"^[A-Za-z]{3,4}$","type":"string"},"example":"ABCD"}],"responses":{"200":{"description":"OK","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/LookupResponse"}},"application/json":{"schema":{"$ref":"#/components/schemas/LookupResponse"}},"text/json":{"schema":{"$ref":"#/components/schemas/LookupResponse"}}}},"400":{"description":"Bad Request. Missing/blank/unknown tenant, invalid correlation ID, missing conditional M2M userName, invalid fields, unknown/inactive lookup names, or contract classification/duplication errors.","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/Response"}},"application/json":{"schema":{"$ref":"#/components/schemas/Response"}},"text/json":{"schema":{"$ref":"#/components/schemas/Response"}}}},"401":{"description":"Unauthorized. Bearer token is missing, malformed, or fails configured authentication validation.","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/Response"}},"application/json":{"schema":{"$ref":"#/components/schemas/Response"}},"text/json":{"schema":{"$ref":"#/components/schemas/Response"}}}},"403":{"description":"Forbidden. Token lacks partyId, tenant FGA read/write authorization, or contains a present but blank/malformed configured username claim on a write.","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/Response"}},"application/json":{"schema":{"$ref":"#/components/schemas/Response"}},"text/json":{"schema":{"$ref":"#/components/schemas/Response"}}}},"503":{"description":"Service Unavailable (503). FGA returned an unavailable/unusable result, or the selected tenant has duplicate active lookup names and Orion will not choose an arbitrary ID.","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/Response"}},"application/json":{"schema":{"$ref":"#/components/schemas/Response"}},"text/json":{"schema":{"$ref":"#/components/schemas/Response"}}}}},"security":[{"Bearer":[]}]}},"/callcenter/v1/lookups/product-types":{"get":{"tags":["Lookups"],"summary":"List active product types","description":"Returns active canonical tenant product types, sorted by name, using FGA read authorization. X-Client-Code is required. Names are trimmed and matched case-insensitively by write operations; an unknown/inactive name returns field-specific 400, while duplicate active names return 503 and are logged as a configuration defect. A lookup rename is an API compatibility change.","operationId":"list-product-types","parameters":[{"name":"X-Client-Code","in":"header","description":"Required tenant selector. Trimmed and resolved case-insensitively to a canonical configured tenant before FGA authorization; missing, blank, or unknown values return 400.","required":true,"schema":{"maxLength":4,"minLength":3,"pattern":"^[A-Za-z]{3,4}$","type":"string"},"example":"ABCD"}],"responses":{"200":{"description":"OK","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/LookupResponse"}},"application/json":{"schema":{"$ref":"#/components/schemas/LookupResponse"}},"text/json":{"schema":{"$ref":"#/components/schemas/LookupResponse"}}}},"400":{"description":"Bad Request. Missing/blank/unknown tenant, invalid correlation ID, missing conditional M2M userName, invalid fields, unknown/inactive lookup names, or contract classification/duplication errors.","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/Response"}},"application/json":{"schema":{"$ref":"#/components/schemas/Response"}},"text/json":{"schema":{"$ref":"#/components/schemas/Response"}}}},"401":{"description":"Unauthorized. Bearer token is missing, malformed, or fails configured authentication validation.","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/Response"}},"application/json":{"schema":{"$ref":"#/components/schemas/Response"}},"text/json":{"schema":{"$ref":"#/components/schemas/Response"}}}},"403":{"description":"Forbidden. Token lacks partyId, tenant FGA read/write authorization, or contains a present but blank/malformed configured username claim on a write.","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/Response"}},"application/json":{"schema":{"$ref":"#/components/schemas/Response"}},"text/json":{"schema":{"$ref":"#/components/schemas/Response"}}}},"503":{"description":"Service Unavailable (503). FGA returned an unavailable/unusable result, or the selected tenant has duplicate active lookup names and Orion will not choose an arbitrary ID.","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/Response"}},"application/json":{"schema":{"$ref":"#/components/schemas/Response"}},"text/json":{"schema":{"$ref":"#/components/schemas/Response"}}}}},"security":[{"Bearer":[]}]}},"/callcenter/v1/CallEntry":{"get":{"tags":["Call Entries"],"summary":"Search call entries","description":"Searches call records and returns a paginated collection of complete `CallEntry` objects. Filters can narrow the results by company, contract, caller, call type, transaction type, or date.\n\nUse `X-Client-Code` to search within one company. The `clientCode` query parameter remains available for backward compatibility and takes precedence if both values are supplied. If neither is supplied, Orion searches across every company the caller is authorized to read.","operationId":"search-call-entries","parameters":[{"name":"clientCode","in":"query","description":"Selects one company. Takes precedence over `X-Client-Code` if both are supplied. If neither is supplied, search includes every company the caller is authorized to read; get-by-ID requires at least one tenant selector.","schema":{"type":"string"},"example":"ABCD"},{"name":"Contract","in":"query","description":"Matches a contract number associated with the call entry. Also searches the entry's stored contract list and, when that list is absent, its reference value.","schema":{"maxLength":200,"minLength":1,"pattern":"^[A-Za-z0-9,-]+$","type":"string"},"example":"C-10001"},{"name":"CallerTypeID","in":"query","description":"Matches the call entry's caller-type ID.","schema":{"type":"integer","format":"int32"}},{"name":"CallerType","in":"query","description":"Matches the call entry's caller-type name.","schema":{"maxLength":50,"minLength":1,"pattern":"^[A-Za-z0-9 &'/-]+$","type":"string"},"example":"Owner"},{"name":"CallerName","in":"query","description":"Matches the caller name exactly unless `usePartialCallerNameMatch` is `true`.","schema":{"maxLength":500,"minLength":1,"pattern":"^[A-Za-z ,.'-]+$","type":"string"},"example":"Jane"},{"name":"UsePartialCallerNameMatch","in":"query","description":"When `true`, `callerName` may occur anywhere within the stored caller name. When `false`, the names must match exactly. Defaults to `false`.","schema":{"type":"boolean"}},{"name":"CallTypeID","in":"query","description":"Matches a call-type ID assigned directly to the call entry or to one of its contracts.","schema":{"type":"integer","format":"int32"}},{"name":"CallType","in":"query","description":"Matches a call-type name assigned directly to the call entry or to one of its contracts.","schema":{"maxLength":50,"minLength":1,"pattern":"^[A-Za-z0-9 &'/-]+$","type":"string"},"example":"Billing"},{"name":"TransactionTypeID","in":"query","description":"Matches the call entry's transaction-type ID.","schema":{"type":"integer","format":"int32"}},{"name":"TransactionType","in":"query","description":"Matches the call entry's transaction-type name.","schema":{"maxLength":50,"minLength":1,"pattern":"^[A-Za-z0-9 &'/-]+$","type":"string"},"example":"Payment"},{"name":"CreatedStartDate","in":"query","description":"Includes entries created at or after this date and time.","schema":{"type":"string","format":"date-time"}},{"name":"CreatedEndDate","in":"query","description":"Includes entries created at or before this date and time.","schema":{"type":"string","format":"date-time"}},{"name":"LastUpdatedStartDate","in":"query","description":"Includes entries last updated at or after this date and time.","schema":{"type":"string","format":"date-time"}},{"name":"LastUpdatedEndDate","in":"query","description":"Includes entries last updated at or before this date and time.","schema":{"type":"string","format":"date-time"}},{"name":"Offset","in":"query","description":"Number of results to skip. Defaults to `0`; negative values are treated as `0`.","schema":{"type":"integer","format":"int32"},"example":0},{"name":"Limit","in":"query","description":"Maximum number of results to return. Defaults to `50`; values above `500` are limited to `500`, and non-positive values use the default.","schema":{"type":"integer","format":"int32"},"example":50},{"name":"X-Client-Code","in":"header","description":"Preferred tenant selector for new consumers. Optional only for legacy GET compatibility. If query clientCode is also supplied and conflicts after normalization, the query value wins and the conflict is logged.","schema":{"maxLength":4,"minLength":3,"pattern":"^[A-Za-z]{3,4}$","type":"string"},"example":"ABCD"}],"responses":{"200":{"description":"OK","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/CallEntryIEnumerablePagedResponse"}},"application/json":{"schema":{"$ref":"#/components/schemas/CallEntryIEnumerablePagedResponse"}},"text/json":{"schema":{"$ref":"#/components/schemas/CallEntryIEnumerablePagedResponse"}}}},"400":{"description":"Bad Request. Missing/blank/unknown tenant, invalid correlation ID, missing conditional M2M userName, invalid fields, unknown/inactive lookup names, or contract classification/duplication errors.","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/Response"}},"application/json":{"schema":{"$ref":"#/components/schemas/Response"}},"text/json":{"schema":{"$ref":"#/components/schemas/Response"}}}},"401":{"description":"Unauthorized. Bearer token is missing, malformed, or fails configured authentication validation.","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/Response"}},"application/json":{"schema":{"$ref":"#/components/schemas/Response"}},"text/json":{"schema":{"$ref":"#/components/schemas/Response"}}}},"403":{"description":"Forbidden. Token lacks partyId, tenant FGA read/write authorization, or contains a present but blank/malformed configured username claim on a write.","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/Response"}},"application/json":{"schema":{"$ref":"#/components/schemas/Response"}},"text/json":{"schema":{"$ref":"#/components/schemas/Response"}}}},"503":{"description":"Service Unavailable (503). FGA returned an unavailable/unusable result, or the selected tenant has duplicate active lookup names and Orion will not choose an arbitrary ID.","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/Response"}},"application/json":{"schema":{"$ref":"#/components/schemas/Response"}},"text/json":{"schema":{"$ref":"#/components/schemas/Response"}}}}},"security":[{"Bearer":[]}]},"post":{"tags":["Call Entries"],"summary":"Create a call entry","description":"Creates a call record for the company identified by `X-Client-Code` and returns the complete created `CallEntry`. The request must include `callerName` and a valid active `callerType`.\n\n`callType`, `transactionType`, and `productType` are matched without regard to letter casing and resolved to the company's active canonical lookup values.\n\nA call without contracts must provide a top-level `callType`. When contracts are provided, the top-level `callType` becomes the default for any contract that does not provide its own `callTypes`. Contract-specific values override that default. If no top-level `callType` is supplied, every contract must provide at least one call type.\n\nOrion determines the acting user from the configured token identity claims. If none of these claims is present, Orion uses the trimmed `userName` from the request body to identify the caller in machine-to-machine scenarios.\n\n`X-Correlation-Id` makes the request idempotent for at least 24 hours. The first successful request returns `201 Created`. A completed identical replay returns the original record with `200 OK` and `X-Idempotent-Replay: true`, without processing the creation again. Reusing the ID for different content or while the original request is still running returns `409 Conflict`.","operationId":"create-call-entry","parameters":[{"name":"X-Client-Code","in":"header","description":"Required tenant selector. Trimmed and resolved case-insensitively to a canonical configured tenant before FGA authorization; missing, blank, or unknown values return 400.","required":true,"schema":{"maxLength":4,"minLength":3,"pattern":"^[A-Za-z]{3,4}$","type":"string"},"example":"ABCD"},{"name":"X-Correlation-Id","in":"header","description":"Required trimmed, nonblank idempotency key, maximum 100 characters. Scoped by canonical tenant, operation, and resource identity; clients must generate operation-unique values.","required":true,"schema":{"maxLength":100,"minLength":1,"pattern":"^[A-Za-z0-9._:-]+$","type":"string"},"example":"call-entry-create-123"}],"requestBody":{"description":"Full-field name-based create payload. Unknown JSON properties retain permissive framework handling. userName is conditionally required only for interim M2M tokens with no configured username claim.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CallEntryWriteRequest"},"example":{"callerName":"Jane Caller","callerType":"Owner","callType":"Billing","transactionType":"Payment","productType":"Annuity","contracts":[{"contractNumber":"C-10001","callTypes":["Billing"]}]}},"text/json":{"schema":{"$ref":"#/components/schemas/CallEntryWriteRequest"}},"application/*+json":{"schema":{"$ref":"#/components/schemas/CallEntryWriteRequest"}}},"required":true},"responses":{"200":{"description":"OK. Identical completed create replay; returns the original full CallEntry without processing the creation again.","headers":{"X-Idempotent-Replay":{"description":"Present with value true only for a completed idempotent replay.","schema":{"type":"boolean"},"example":true}},"content":{"text/plain":{"schema":{"$ref":"#/components/schemas/CallEntry"}},"application/json":{"schema":{"$ref":"#/components/schemas/CallEntry"}},"text/json":{"schema":{"$ref":"#/components/schemas/CallEntry"}}}},"201":{"description":"Created. Returns the full CallEntry representation.","headers":{"Location":{"description":"Directly dereferenceable relative legacy GET URI containing the canonical tenant query value.","schema":{"type":"string","format":"uri-reference"},"example":"/callcenter/v1/CallEntry/12345?clientCode=ABCD"}},"content":{"text/plain":{"schema":{"$ref":"#/components/schemas/CallEntry"}},"application/json":{"schema":{"$ref":"#/components/schemas/CallEntry"}},"text/json":{"schema":{"$ref":"#/components/schemas/CallEntry"}}}},"400":{"description":"Bad Request. Missing/blank/unknown tenant, invalid correlation ID, missing conditional M2M userName, invalid fields, unknown/inactive lookup names, or contract classification/duplication errors.","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/Response"}},"application/json":{"schema":{"$ref":"#/components/schemas/Response"}},"text/json":{"schema":{"$ref":"#/components/schemas/Response"}}}},"401":{"description":"Unauthorized. Bearer token is missing, malformed, or fails configured authentication validation.","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/Response"}},"application/json":{"schema":{"$ref":"#/components/schemas/Response"}},"text/json":{"schema":{"$ref":"#/components/schemas/Response"}}}},"403":{"description":"Forbidden. Token lacks partyId, tenant FGA read/write authorization, or contains a present but blank/malformed configured username claim on a write.","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/Response"}},"application/json":{"schema":{"$ref":"#/components/schemas/Response"}},"text/json":{"schema":{"$ref":"#/components/schemas/Response"}}}},"409":{"description":"Conflict. The scoped X-Correlation-Id was reused with different normalized content or actor, or an equivalent request is still in progress.","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/Response"}},"application/json":{"schema":{"$ref":"#/components/schemas/Response"}},"text/json":{"schema":{"$ref":"#/components/schemas/Response"}}}},"503":{"description":"Service Unavailable (503). FGA returned an unavailable/unusable result, or the selected tenant has duplicate active lookup names and Orion will not choose an arbitrary ID.","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/Response"}},"application/json":{"schema":{"$ref":"#/components/schemas/Response"}},"text/json":{"schema":{"$ref":"#/components/schemas/Response"}}}}},"security":[{"Bearer":[]}]}},"/callcenter/v1/CallEntry/{callEntryId}":{"put":{"tags":["Call Entries"],"summary":"Replace a call entry","description":"Completely replaces the writable contents of an existing call record for the company identified by `X-Client-Code`. This is a full replacement, not a partial update: omitted nullable fields are cleared, and the submitted contracts replace all stored contract relationships. Orion returns `404 Not Found` when the specified record does not exist.\n\nThe request must include `callerName` and a valid active `callerType`. Lookup values and contract call types follow the same resolution and defaulting rules described for creation.\n\nOrion determines the acting user from the configured token identity claims. If none of these claims is present, Orion uses the trimmed `userName` from the request body to identify the caller in machine-to-machine scenarios.\n\n`X-Correlation-Id` makes the replacement idempotent for at least 24 hours. A successful replacement or completed identical replay returns `200 OK`; replays also include `X-Idempotent-Replay: true` and do not apply the replacement again. Reusing the ID for different content or while the original request is still running returns `409 Conflict`.\n\nThis operation does not support `PATCH`, ETags, `If-Match`, or optimistic concurrency.","operationId":"replace-call-entry","parameters":[{"name":"callEntryId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}},{"name":"X-Client-Code","in":"header","description":"Required tenant selector. Trimmed and resolved case-insensitively to a canonical configured tenant before FGA authorization; missing, blank, or unknown values return 400.","required":true,"schema":{"maxLength":4,"minLength":3,"pattern":"^[A-Za-z]{3,4}$","type":"string"},"example":"ABCD"},{"name":"X-Correlation-Id","in":"header","description":"Required trimmed, nonblank idempotency key, maximum 100 characters. Scoped by canonical tenant, operation, and resource identity; clients must generate operation-unique values.","required":true,"schema":{"maxLength":100,"minLength":1,"pattern":"^[A-Za-z0-9._:-]+$","type":"string"},"example":"call-entry-create-123"}],"requestBody":{"description":"Full replacement payload. Omitted nullable fields are cleared; contracts replace the stored collection. Unknown JSON properties remain permissive.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CallEntryWriteRequest"},"example":{"callerName":"Jane Caller","callerType":"Owner","callType":"Billing","transactionType":"Payment","productType":"Annuity","contracts":[{"contractNumber":"C-10001","callTypes":["Billing"]}]}},"text/json":{"schema":{"$ref":"#/components/schemas/CallEntryWriteRequest"}},"application/*+json":{"schema":{"$ref":"#/components/schemas/CallEntryWriteRequest"}}},"required":true},"responses":{"200":{"description":"OK. First full replacement or identical completed replay; a replay does not apply the replacement again.","headers":{"X-Idempotent-Replay":{"description":"Present with value true only for a completed idempotent replay.","schema":{"type":"boolean"},"example":true}},"content":{"text/plain":{"schema":{"$ref":"#/components/schemas/CallEntry"}},"application/json":{"schema":{"$ref":"#/components/schemas/CallEntry"}},"text/json":{"schema":{"$ref":"#/components/schemas/CallEntry"}}}},"400":{"description":"Bad Request. Missing/blank/unknown tenant, invalid correlation ID, missing conditional M2M userName, invalid fields, unknown/inactive lookup names, or contract classification/duplication errors.","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/Response"}},"application/json":{"schema":{"$ref":"#/components/schemas/Response"}},"text/json":{"schema":{"$ref":"#/components/schemas/Response"}}}},"401":{"description":"Unauthorized. Bearer token is missing, malformed, or fails configured authentication validation.","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/Response"}},"application/json":{"schema":{"$ref":"#/components/schemas/Response"}},"text/json":{"schema":{"$ref":"#/components/schemas/Response"}}}},"403":{"description":"Forbidden. Token lacks partyId, tenant FGA read/write authorization, or contains a present but blank/malformed configured username claim on a write.","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/Response"}},"application/json":{"schema":{"$ref":"#/components/schemas/Response"}},"text/json":{"schema":{"$ref":"#/components/schemas/Response"}}}},"404":{"description":"Not Found. The requested call entry does not exist in the selected tenant.","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/Response"}},"application/json":{"schema":{"$ref":"#/components/schemas/Response"}},"text/json":{"schema":{"$ref":"#/components/schemas/Response"}}}},"409":{"description":"Conflict. The scoped X-Correlation-Id was reused with different normalized content or actor, or an equivalent request is still in progress.","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/Response"}},"application/json":{"schema":{"$ref":"#/components/schemas/Response"}},"text/json":{"schema":{"$ref":"#/components/schemas/Response"}}}},"503":{"description":"Service Unavailable (503). FGA returned an unavailable/unusable result, or the selected tenant has duplicate active lookup names and Orion will not choose an arbitrary ID.","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/Response"}},"application/json":{"schema":{"$ref":"#/components/schemas/Response"}},"text/json":{"schema":{"$ref":"#/components/schemas/Response"}}}}},"security":[{"Bearer":[]}]},"get":{"tags":["Call Entries"],"summary":"Get a call entry","description":"Retrieves one complete `CallEntry` by its ID. The caller must have read access to the company that owns the record.\n\nIdentify the company with `X-Client-Code` or the backward-compatible `clientCode` query parameter. At least one is required. If both are supplied with different values, the query parameter takes precedence. Orion returns `404 Not Found` when the record does not exist in the selected company.","operationId":"get-call-entry","parameters":[{"name":"callEntryId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}},{"name":"clientCode","in":"query","description":"Selects one company. Takes precedence over `X-Client-Code` if both are supplied. If neither is supplied, search includes every company the caller is authorized to read; get-by-ID requires at least one tenant selector.","schema":{"type":"string"},"example":"ABCD"},{"name":"X-Client-Code","in":"header","description":"Preferred tenant selector for new consumers. Optional only for legacy GET compatibility. If query clientCode is also supplied and conflicts after normalization, the query value wins and the conflict is logged.","schema":{"maxLength":4,"minLength":3,"pattern":"^[A-Za-z]{3,4}$","type":"string"},"example":"ABCD"}],"responses":{"200":{"description":"OK","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/CallEntry"}},"application/json":{"schema":{"$ref":"#/components/schemas/CallEntry"}},"text/json":{"schema":{"$ref":"#/components/schemas/CallEntry"}}}},"400":{"description":"Bad Request. Missing/blank/unknown tenant, invalid correlation ID, missing conditional M2M userName, invalid fields, unknown/inactive lookup names, or contract classification/duplication errors.","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/Response"}},"application/json":{"schema":{"$ref":"#/components/schemas/Response"}},"text/json":{"schema":{"$ref":"#/components/schemas/Response"}}}},"401":{"description":"Unauthorized. Bearer token is missing, malformed, or fails configured authentication validation.","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/Response"}},"application/json":{"schema":{"$ref":"#/components/schemas/Response"}},"text/json":{"schema":{"$ref":"#/components/schemas/Response"}}}},"403":{"description":"Forbidden. Token lacks partyId, tenant FGA read/write authorization, or contains a present but blank/malformed configured username claim on a write.","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/Response"}},"application/json":{"schema":{"$ref":"#/components/schemas/Response"}},"text/json":{"schema":{"$ref":"#/components/schemas/Response"}}}},"404":{"description":"Not Found. The requested call entry does not exist in the selected tenant.","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/Response"}},"application/json":{"schema":{"$ref":"#/components/schemas/Response"}},"text/json":{"schema":{"$ref":"#/components/schemas/Response"}}}},"503":{"description":"Service Unavailable (503). FGA returned an unavailable/unusable result, or the selected tenant has duplicate active lookup names and Orion will not choose an arbitrary ID.","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/Response"}},"application/json":{"schema":{"$ref":"#/components/schemas/Response"}},"text/json":{"schema":{"$ref":"#/components/schemas/Response"}}}}},"security":[{"Bearer":[]}]}}},"components":{"schemas":{"CallEntry":{"required":["callEntryID","clientCode","createdByUser","createdDate","lastUpdatedDate"],"type":"object","properties":{"clientCode":{"minLength":1,"type":"string"},"callEntryID":{"type":"integer","format":"int32"},"callerTypeID":{"type":"integer","format":"int32","nullable":true},"callerType":{"type":"string","nullable":true},"callTypeID":{"type":"integer","format":"int32","nullable":true},"callType":{"type":"string","nullable":true},"productTypeID":{"type":"integer","format":"int32","nullable":true},"productType":{"type":"string","nullable":true},"contract":{"type":"string","nullable":true},"priority":{"type":"integer","format":"int32","nullable":true},"notes":{"type":"string","nullable":true},"survey":{"type":"string","nullable":true},"isExchange":{"type":"boolean","nullable":true},"isSuspended":{"type":"boolean","nullable":true},"isFollowUpCompleted":{"type":"boolean","nullable":true},"followUpRequestedDate":{"type":"string","format":"date-time","nullable":true},"followUpCompletedDate":{"type":"string","format":"date-time","nullable":true},"suspendedUntilDate":{"type":"string","format":"date-time","nullable":true},"createdByUser":{"minLength":1,"type":"string"},"createdDate":{"type":"string","format":"date-time"},"lastUpdatedDate":{"type":"string","format":"date-time"},"callTime":{"type":"string","format":"date-time","nullable":true},"callerName":{"type":"string","nullable":true},"phoneFaxNum":{"type":"string","nullable":true},"reference":{"type":"string","nullable":true},"isWatchOne":{"type":"boolean","nullable":true},"isWatchTwo":{"type":"boolean","nullable":true},"transactionTypeID":{"type":"integer","format":"int32","nullable":true},"transactionType":{"type":"string","nullable":true},"isEscalated":{"type":"boolean","nullable":true},"initiatedDate":{"type":"string","format":"date-time","nullable":true},"completeInOrion":{"type":"boolean","nullable":true},"isWatchThree":{"type":"boolean","nullable":true},"transactionAmount":{"type":"number","format":"double","nullable":true},"sessionID":{"type":"string","nullable":true},"authStatus":{"type":"string","nullable":true},"dob":{"type":"string","format":"date-time","nullable":true},"ssn":{"type":"string","nullable":true},"callSummary":{"type":"string","nullable":true},"callSummaryDate":{"type":"string","format":"date-time","nullable":true},"documentNumber":{"type":"string","nullable":true},"callId":{"type":"string","nullable":true},"contracts":{"type":"array","items":{"$ref":"#/components/schemas/CallEntryContract"},"nullable":true}},"additionalProperties":false},"CallEntryContract":{"required":["callTypes","contractNumber"],"type":"object","properties":{"contractNumber":{"minLength":1,"type":"string"},"callTypes":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},"CallEntryIEnumerablePagedResponse":{"type":"object","properties":{"message":{"type":"string","nullable":true},"items":{"type":"array","items":{"$ref":"#/components/schemas/CallEntry"},"nullable":true},"offset":{"type":"integer","format":"int32"},"limit":{"type":"integer","format":"int32"},"firstPage":{"type":"string","format":"uri","nullable":true},"lastPage":{"type":"string","format":"uri","nullable":true},"totalPages":{"type":"integer","format":"int32"},"totalCount":{"type":"integer","format":"int32"},"nextPage":{"type":"string","format":"uri","nullable":true},"previousPage":{"type":"string","format":"uri","nullable":true}},"additionalProperties":false},"CallEntryWriteContractRequest":{"required":["contractNumber"],"type":"object","properties":{"contractNumber":{"maxLength":50,"minLength":1,"pattern":"^[A-Za-z0-9,-]+$","type":"string","description":"Trimmed contract number, unique case-insensitively within the request."},"callTypes":{"type":"array","items":{"maxLength":50,"minLength":1,"pattern":"^[A-Za-z0-9 &'/-]+$","type":"string"},"description":"Explicit active call-type names. Duplicate canonical values within a contract are rejected.","nullable":true}},"additionalProperties":false},"CallEntryWriteRequest":{"required":["callerName","callerType"],"type":"object","properties":{"userName":{"maxLength":254,"minLength":1,"pattern":"^[^\\u0000-\\u001F\\u007F]+$","type":"string","description":"Conditional interim M2M actor. Ignored when a configured token username claim exists; otherwise trimmed, opaque, required, and limited to 255 characters.","nullable":true},"contracts":{"type":"array","items":{"$ref":"#/components/schemas/CallEntryWriteContractRequest"},"description":"Optional contracts; missing, null, and empty are equivalent. Contract and call-type order is non-semantic for idempotency.","nullable":true},"callerType":{"maxLength":50,"minLength":1,"pattern":"^[A-Za-z0-9 &'/-]+$","type":"string","description":"Required active caller-type name, trimmed and matched case-insensitively to its canonical tenant value.","nullable":true},"callType":{"maxLength":50,"minLength":1,"pattern":"^[A-Za-z0-9 &'/-]+$","type":"string","description":"Canonical root call-type name. Required without contracts; otherwise supplies an inheritable default. If absent, every contract must supply at least one call type.","nullable":true},"productType":{"maxLength":50,"minLength":1,"pattern":"^[A-Za-z0-9 &'/-]+$","type":"string","description":"Optional active product-type name resolved to its canonical tenant value.","nullable":true},"priority":{"maximum":255,"minimum":0,"type":"integer","format":"int32","nullable":true},"notes":{"maxLength":7000,"minLength":1,"pattern":"^[A-Za-z0-9 &'/-]+$","type":"string","nullable":true},"survey":{"maxLength":10,"minLength":1,"pattern":"^[A-Za-z0-9 &'/-]+$","enum":["Not Offered","Taken","Not Taken"],"type":"string","nullable":true},"isExchange":{"type":"boolean","nullable":true},"isSuspended":{"type":"boolean","nullable":true},"isFollowUpCompleted":{"type":"boolean","nullable":true},"followUpRequestedDate":{"type":"string","format":"date-time","nullable":true},"followUpCompletedDate":{"type":"string","format":"date-time","nullable":true},"suspendedUntilDate":{"type":"string","format":"date-time","nullable":true},"callTime":{"type":"string","format":"date-time","nullable":true},"callerName":{"maxLength":500,"minLength":1,"pattern":"^[A-Za-z ,.'-]+$","type":"string","description":"Required caller identity. Trimmed and limited to 500 characters.","nullable":true},"phoneFaxNum":{"maxLength":20,"minLength":1,"pattern":"^\\+?[0-9() .-]+$","type":"string","format":"tel","nullable":true},"reference":{"maxLength":200,"minLength":1,"pattern":"^[A-Za-z0-9,-]+$","type":"string","nullable":true},"isWatchOne":{"type":"boolean","nullable":true},"isWatchTwo":{"type":"boolean","nullable":true},"transactionType":{"maxLength":50,"minLength":1,"pattern":"^[A-Za-z0-9 &'/-]+$","type":"string","description":"Optional active transaction-type name resolved to its canonical tenant value.","nullable":true},"isEscalated":{"type":"boolean","nullable":true},"initiatedDate":{"type":"string","format":"date-time","nullable":true},"completeInOrion":{"type":"boolean","nullable":true},"isWatchThree":{"type":"boolean","nullable":true},"transactionAmount":{"type":"number","format":"double","nullable":true},"sessionID":{"maxLength":50,"minLength":1,"pattern":"^[A-Za-z0-9._:-]+$","type":"string","nullable":true},"authStatus":{"type":"string","nullable":true},"dob":{"type":"string","format":"date-time","nullable":true},"ssn":{"type":"string","nullable":true},"callSummary":{"maxLength":7000,"minLength":1,"pattern":"^[A-Za-z0-9 &'/-]+$","type":"string","nullable":true},"callSummaryDate":{"type":"string","format":"date-time","nullable":true},"documentNumber":{"maxLength":50,"minLength":1,"pattern":"^[A-Za-z0-9,-]+$","type":"string","nullable":true},"callId":{"maxLength":50,"minLength":1,"pattern":"^[A-Za-z0-9._:/-]+$","type":"string","nullable":true}},"additionalProperties":false,"description":"Full-field name-based request shared by POST and PUT. Tenant selection and authorization never use payload userName."},"LookupItemResponse":{"type":"object","properties":{"id":{"type":"integer","description":"Resolved tenant lookup identifier.","format":"int32"},"value":{"type":"string","description":"Canonical lookup name; renaming it is an API compatibility change.","nullable":true}},"additionalProperties":false},"LookupResponse":{"type":"object","properties":{"clientCode":{"type":"string","description":"Canonical tenant code selected by X-Client-Code.","nullable":true},"items":{"type":"array","items":{"$ref":"#/components/schemas/LookupItemResponse"},"description":"Active values sorted by name.","nullable":true}},"additionalProperties":false,"description":"Tenant-scoped active lookup values using canonical compatibility-stable names."},"Response":{"type":"object","properties":{"message":{"type":"string","nullable":true}},"additionalProperties":false}},"securitySchemes":{"Bearer":{"type":"http","description":"Supply an OAuth bearer token obtained from Auth0.","scheme":"bearer","bearerFormat":"JWT"}}},"servers":[{"url":"https://qa.api.zinnia.io"}]}
```
