Schlagwort: BSS/OSS

  • „Completed“ Is Not the End: Who Owns State in TMF Landscapes

    Every experienced BSS/OSS architect knows the basic rule: an order is completed only after the network has confirmed fulfilment and the product inventory has been updated. In a design review, nobody argues with that.

    The difficult questions start where that rule stops helping:

    • What does „completed“ still tell you a month later, after a field engineer, a migration or a failed rollback has changed the network?
    • What state does a product have while a second order is already in flight against it?
    • An order with five items ends as partial. What should the inventory say?
    • Care sees the order completed, the service degraded and the product active. Which of the three is „the“ status?

    These are not happy-path questions. They are questions about who owns which state, across layers and over time. TM Forum Open APIs define a well-structured state model for each resource, but they don’t say who writes those states or how they relate across APIs. That is an architecture decision, and it is where mature landscapes still accumulate their most expensive incidents.

    This article gives a pragmatic answer: four rules, a reference flow, an approach to concurrent orders, and a reconciliation model for TMF622, TMF641, TMF637 and TMF638.

    Key takeaways

    • Orders own the state of a request. Inventory owns the state of a result. The network owns operational reality. These are different things and must not share one status field or one writer.
    • Every state has exactly one writer. Channels never write state. They submit intent and read.
    • State flows up, intent flows down. Fulfilment results move upward (network → service → product), while orders push intent downward (product → service → network).
    • Completion is a statement about the past. After the order closes, inventory and network can still drift. Plan for it.
    • Disagreement between order, inventory and network is a signal. Handle it through an explicit reconciliation process, not through silent patches.

    The landscape in this article

    To keep the discussion simple, I use only the components that matter for state:

    • Customer Order Management (COM): receives product orders (TMF622), decomposes them, and owns the product inventory (TMF637).
    • Service Order Management (SOM): receives service orders (TMF641), performs design, reservation and service activation as part of its fulfilment logic, and owns the service inventory (TMF638).
    • Network: the systems that actually carry the service.

    Channels (mobile, web, BFF, agents) sit in front of COM and only submit intent and read state.

    1. Three kinds of state that get mixed up

    Order stateInventory stateOperational state
    Question it answersWhat is happening with this request?What do we believe is sold and deployed?What is actually running right now?
    NatureProcess, temporaryResult, long-livedObservation, volatile
    Typical ownerCOM (product level), SOM (service level)Product inventory (COM), service inventory (SOM)Network and monitoring
    TMF APIsTMF622, TMF641TMF637, TMF638Reflected in TMF638 operating status
    Changes whenThe request progressesA fulfilment outcome is confirmedAnything happens in the network
    EndsWhen the order closesWhen the product or service is terminatedNever (continuous)

    A few concrete examples of each:

    • Order state: product orders and their items move through states such as acknowledged, inProgress, held, completed, failed, partial or cancelled. Service orders (TMF641) use a similar vocabulary.
    • Inventory state: a product in TMF637 carries a lifecycle status such as active, suspended, pending terminate or terminated. A service in TMF638 carries a lifecycle state such as designed, reserved, inactive, active or terminated.
    • Operational state: is the service running, degraded or failed right now? In TMF638 this is typically an operating status that is fed by network and monitoring data, not decided by the order process.

    (Exact enumerations differ between API versions and implementations. Check the version you actually use before building rules on top of them.)

    The most common root cause I see in practice is simple: one word, „status“, is used for all three, and different teams read it differently.

    2. Four rules for state ownership

    Rule 1: One writer per state

    For every state attribute, name the single component allowed to change it. Everyone else reads, or sends a request to the owner.

    StateSingle writerEverybody else
    Product order and item stateCOMReads (TMF622), may request cancel or change via the order
    Service order and item stateSOMReads (TMF641)
    Service inventory state (deployed)SOMReads (TMF638)
    Product inventory stateCOM (as result of order completion)Reads (TMF637)
    Operational statusNetwork monitoring integrationReads
    Channels (BFF, mobile, agents)noneSubmit intent, read state

    If your digital channel can PATCH a product in inventory „to fix a status“, you don’t have a state model, you have a shared database with HTTP in front of it.

    Rule 2: State flows up, intent flows down

    Intent travels downward: COM decomposes a product order into service orders, and SOM turns them into activation in the network. Results travel upward: the network confirms, SOM updates the service inventory and completes the service order, and COM advances the product order and updates the product.

    Product state is therefore derived from service state through orchestration, not set independently. A simple example rule: a product becomes active only when its order item is complete and all mandatory services in its decomposition are active. Define such rules explicitly, one per product family, and keep them in COM, not in channels.

    Rule 3: Orders advance on fulfilment results, nothing else

    An order moves forward because a fulfilment result arrived (a service order completed, an activation succeeded or failed), not because a UI timer expired and not because someone polled inventory and inferred the answer. Order progress is the record of what the process did. Inventory tells you what resulted. Confusing the two is how teams end up building order tracking on top of inventory queries.

    Rule 4: Completion is a promise at a point in time

    An order is completed only when the network has confirmed fulfilment and the inventory write has been confirmed. Treat that as a precondition, not a feature, and make it robust (for example with an outbox, so a crash between inventory write and completion event cannot lose the update).

    But even then, „completed“ only describes the moment of completion. From that point on, the network and the inventory live their own lives: manual interventions, migrations, failed rollbacks, lost events. Order state is therefore history, not evidence of current state. Anything that needs the current state must read inventory and operational status, and anything that needs to know what happened must read the order.

    Figure 1: Three-layer diagram of TMF landscape state ownership: COM writes product order state and product inventory, SOM writes service order state and service inventory, network owns operational state, with reconciliation across all three

    3. Reference flow: new broadband service

    The flow is deliberately short: channel → COM → SOM → network, with the two inventories beside it.

    1. Intent in. The channel submits a product order (TMF622). COM validates it and acknowledges it. Order and items move from acknowledged to inProgress.
    2. Decomposition. COM decomposes the product order item into service orders and submits them to SOM through TMF641. Service order items move to inProgress.
    3. Design and reserve. SOM retrieves the service specification (TMF633), reserves resources and records the service in the service inventory (TMF638) as designed or reserved.
    4. Activation. SOM executes the activation against the network. On success, it updates the service in TMF638 to active and completes the service order.
    5. Fulfilment result up. COM receives the result (event or callback) and advances the product order item.
    6. Inventory update. COM creates or updates the product in TMF637 as active, then marks the order item and the order completed.
    7. Later, reconciliation. Inventory is checked against what the network reports. Differences go into a controlled drift process (section 6).

    How the states line up in the happy path:

    StepProduct order itemService order itemService (TMF638)Product (TMF637)
    Acceptedacknowledged → inProgress–––
    DecomposedinProgressacknowledged → inProgress–not yet created, or marked pending
    ReservedinProgressinProgressdesigned / reservedpending
    ActivatedinProgresscompletedactivepending
    Closedcompletedcompletedactiveactive
    Figure 2: Sequence diagram of order fulfilment across channel, COM, product inventory, SOM, service inventory and network, showing order, service and product state changes at each step

    Two kinds of return information flow back to COM and the inventories: fulfilment results (which advance order state) and service state for reconciliation (which keeps inventory honest). Keep these as two separate paths in your design.

    4. Where it breaks: seven failure patterns

    1. Order state used as proof of current state.
    Symptom: care or an automated process concludes „the order is completed, so the service is running“, weeks after completion.
    Cause: order state describes what the process did, not what exists now.
    Fix: use orders for history and progress, and inventory plus operational status for the current state. Show them side by side.

    2. Channels write inventory.
    Symptom: statuses changed by BFFs, scripts or support tools, with no order behind them.
    Fix: remove write access. Corrections go through a controlled path with audit (see section 6).

    3. Dual writes.
    Symptom: SOM updates the service inventory and also pushes a product status, while COM writes the product status itself. Under failure, the two diverge.
    Fix: one writer per state, and one fulfilment result that drives everything downstream of it.

    4. Order status inferred from inventory.
    Symptom: „where is my order?“ is answered by looking at inventory.
    Cause: inventory only shows results, not progress. It can’t distinguish „not started“ from „failed“.
    Fix: order tracking reads order state (TMF622, TMF641) and uses inventory only as additional evidence.

    5. One status enum for everything.
    Symptom: a single status field shows order progress, lifecycle and health, depending on who looks.
    Fix: separate order state, lifecycle state and operational status, as in the table in section 1.

    6. No handling for partial and failed orders.
    Symptom: an order with five items ends as partial; two services are active, three are not, and nobody knows what the product state should be.
    Fix: define up front what each outcome means for inventory (roll back, keep partial, compensate) per product family.

    7. Out-of-order and duplicate events.
    Symptom: a late „in progress“ event overwrites „completed“.
    Fix: idempotent consumers keyed by event ID, state-machine guards that reject illegal or stale transitions, and a version or timestamp comparison before applying a change.

    5. Concurrent orders: do you put „pending“ in inventory?

    This is where architects disagree, and it’s worth deciding consciously.

    Option A, realized state only. Inventory holds only what has been fulfilled. Everything in flight lives in orders. To check for conflicts, COM queries open orders for the product. It is clean, but every consumer who needs to know „may I change this product now?“ has to look in two places.

    Option B, pending markers in inventory. Inventory also reflects in-flight changes, for example a product being activated or terminated. Consumers get a single place to look, but inventory now mixes result and process, which is exactly the blur Rule 1 tries to avoid.

    My pragmatic recommendation is a hybrid:

    • Inventory contains realized state plus a minimal, COM-written pending marker (the lifecycle models of products already include pending-type statuses for this purpose).
    • COM is the only component that starts an order on a given product, and it serializes orders per product, so there is exactly one open change at a time.
    • Channels and agents do not guess. They ask an eligibility question first (TMF679 is a natural fit: may this customer change this product now?), and the answer accounts for open orders.

    Be aware that the standard product status model does not cover every real-world need. Concepts such as a lock on a product, or an operational sub-status next to the main status, are usually added as extensions in practice. If you add them, document who sets and clears them, because an orphaned lock is as harmful as a missing one.

    6. Reconciliation: treating disagreement as a signal

    Even with perfect ownership rules, reality will drift: manual network changes, failed rollbacks, lost events, migrations. You need a reconciliation process, not just good intentions.

    Three modes

    ModeWhenPurpose
    Event-drivenContinuously, on every state-change eventKeep state aligned in normal operation
    Scheduled sweepNightly or weekly, per product or service familyFind drift that events missed
    On demandBefore a modify order, or during care diagnosisVerify state before acting on it

    Types of drift

    • Ghost: exists in inventory, not in the network (billing without service).
    • Orphan: exists in the network, not in inventory (service without billing).
    • Attribute mismatch: both exist, but configuration differs.
    • State mismatch: both exist, but lifecycle or operational state differs.

    Ghosts and orphans are not just technical issues. They are revenue assurance issues, because product inventory typically drives billing and rating.

    Who wins on mismatch?

    Decide per attribute class, in advance:

    Attribute classMasterOn mismatch
    Commercial (offer, price, contract dates)Product inventory, via COMNetwork is irrelevant. Correct the data through an audited correction.
    Service intent (requested characteristics)Service inventory, from the service orderRe-provision to match, or raise an incident.
    Operational status (running, degraded, failed)Network / monitoringUpdate inventory automatically. This is an observation, not a decision.
    Allocated resource identifiers (ports, addresses)Network discoveryValidate, then correct inventory.

    Never fix drift silently

    Corrections must be visible: a correction order or a controlled administrative path, with who, why, before and after, and a state-change event so downstream systems learn about it. A drift process that patches records quietly will eventually hide the very problems it should expose.

    7. A diagnostic matrix for care and operations

    When a customer asks „where is my order?“, read order state, service state and product state together, instead of picking one:

    OrderService (TMF638)Product (TMF637)Likely meaningAction
    inProgressactiveabsent or pendingFulfilment result not yet processed by COM (lost or delayed event)Replay or re-read the result; check the event queue
    inProgress for a long timedesigned / reservedpendingSOM is waiting for a manual task, a resource or the networkCheck SOM’s task queue and open manual tasks
    completednot active or absentactiveDrift after completion (manual change, rollback, migration), or a defect in the completion logicVerify against the network; raise a reconciliation case; check whether the completion logic is at fault
    failedactiveabsentOrphan after failed orderCompensate (decommission or complete); check billing impact
    completeddegradedactiveNot an order problem; operational issueOpen a trouble ticket instead of an order inquiry
    completedactiveactive, but network shows nothingGhostRaise a reconciliation case; check revenue impact

    This matrix is also what an AI agent or assistant should implement: report all three states, flag the inconsistency, and don’t decide which one is right. That decision belongs to operations or to your reconciliation process.

    8. Events and idempotency: the plumbing that makes it work

    TMF APIs offer state-change notifications for orders, services and products. For ownership rules to hold in practice:

    • Make consumers idempotent. Events get redelivered. Processing the same event twice must have the same effect as once.
    • Guard transitions. Reject illegal or stale transitions explicitly, and log them. They tell you about integration bugs.
    • Carry correlation. Include the product order, order item and service order references in events so any state can be traced back to its cause.
    • Use an outbox for completion. Writing inventory and emitting the completion event should not be two independent operations.
    • Plan replay. Have a dead-letter queue and a safe way to replay events, so a lost message is a fixable incident, not a permanent inconsistency.

    A simplified service state-change event shows what a consumer needs:

    {
      "eventId": "evt-8f21",
      "eventType": "ServiceStateChangeEvent",
      "eventTime": "2026-10-05T09:14:22Z",
      "correlationId": "po-48213/item-2",
      "event": {
        "service": {
          "id": "svc-77310",
          "state": "active",
          "version": 4
        }
      }
    }

    The eventId supports idempotency, the correlationId supports tracing, and the version lets the consumer ignore anything older than what it already applied. The exact event schema depends on your implementation. The principles don’t.

    9. A pragmatic checklist

    Before your next integration or review, check the following:

    1. Is there a written table of single writers for every state attribute?
    2. Do channels have read-only access to all state APIs?
    3. Is the product state derivation rule defined for each product family?
    4. Does the order complete only after the network result and the inventory write are confirmed?
    5. Are partial and failed outcomes defined, including what happens to inventory?
    6. Do you have event idempotency, transition guards and replay?
    7. Is there a reconciliation process with an explicit master per attribute class?
    8. Are corrections audited and visible downstream?
    9. Do care tools and agents show all three states instead of one?

    Conclusion

    The question „who owns the state?“ doesn’t have one answer, because there is more than one kind of state. Orders own the state of requests. Inventory owns the state of results. The network owns operational reality. And „completed“ is a statement about a moment, not a guarantee about the future. TMF Open APIs give you well-defined resources and state models for each layer, but they are integration contracts, not an ownership policy.

    The pragmatic approach is to decide ownership explicitly, keep one writer per state, let results flow up through orchestration, and treat disagreement as a signal for a controlled reconciliation process. That is less glamorous than a new platform, and it prevents more incidents than most platforms do.

    Working through order, inventory and reconciliation design in your own BSS/OSS landscape? A short initial conversation is free and non-binding.

  • TMF Open APIs and AI Agents: Why Your BSS/OSS Landscape Is Already Agent-Ready (and Where It Isn’t)

    Every few months a new telecom AI agent demo appears. It answers customer questions, checks coverage, even „places an order“. The demo is impressive, and then the project meets reality: the agent has no safe, reliable way to talk to the BSS/OSS landscape. The model is rarely the problem. The integration is. If your landscape already exposes TM Forum Open APIs, you are in a better position than you may think. Standardized contracts are what agents need most. But „agent-ready“ does not mean „point the agent at the OpenAPI file and hope for the best“. This article explains what works, what doesn’t, and how to do it pragmatically.

    Architecture diagram: an AI agent connects through an agent tool facade and a shared API gateway with IAM to TMF Open APIs. Read-only access covers TMF620, TMF637 and TMF638; qualification covers TMF679 and TMF645; TMF622 allows draft orders only, confirmed by a human. TMF641 stays with order orchestration and is not exposed to the agent.

    Why agents stall at the BSS/OSS boundary

    An AI agent is only as useful as the actions and data it can reach. In a typical telecom landscape, those live in a product catalog, a CRM, an order management system, product and service inventories, an activation layer, and a number of network platforms. Each has its own data model, its own quirks, and its own owner.

    Teams then usually do one of two things:

    • Build bespoke connectors per system. This is slow and brittle. It repeats the point-to-point integration problem we already know from classic projects, now with a language model on top.
    • Let the agent talk to everything directly. This is fast to demo and dangerous in production: no clear permissions, no audit trail, no protection against a wrong action.

    Both approaches ignore something you may already have: a standardized integration layer.

    Why TMF contracts fit agents well

    I have argued before that TMF Open APIs are best used as pragmatic integration contracts, not as an architecture framework. That same property makes them good agent interfaces:

    1. Standardized resources. A ProductOffering, ProductOrder, or Service means roughly the same thing across vendors. An agent (or the people writing its tools) doesn’t have to learn a new vocabulary for every system.
    2. Predictable schemas. TMF APIs follow common REST design guidelines: consistent resource paths, filtering, pagination, field selection (fields=), and state models. A tool built for one TMF API is easy to adapt to the next.
    3. Machine-readable descriptions. Every TMF API ships as an OpenAPI specification. That is effectively a ready-made inventory of operations, parameters, and payloads, which is exactly what an agent tool catalog needs.
    4. A stable boundary. Behind a TMF facade you can replace or upgrade the system of record without the agent noticing. This matters because models and agent frameworks change much faster than BSS platforms.

    In other words, the agent becomes one more client of your integration contracts, like the mobile app or the PC channel behind your digital channel / BFF.

    Where „agent-ready“ breaks down

    Honesty matters here, because this is where projects get surprised.

    • TMF specifications are large and generic. They contain many optional attributes, polymorphic types (@type, @baseType, @schemaLocation), and extension points. Handing a model the full schema wastes context and invites mistakes.
    • Implementations differ. Two vendors can both be „TMF622 compliant“ and still differ in mandatory fields, supported filters, state handling, and error behavior.
    • Semantics live outside the schema. The OpenAPI specification tells the agent how to call an endpoint, not when it is appropriate, what a state like held means in your process, or which operation is safe to repeat.
    • Responses contain untrusted text. Descriptions, notes, and free-text fields can carry anything. If an agent reads them as instructions, you have a prompt-injection path from your own data.
    • Data quality problems become visible. A human operator silently works around inconsistent inventory data. An agent will repeat it with confidence.

    The conclusion: do not expose TMF APIs 1:1. Put a thin, curated layer in between.

    The target picture: the agent as another channel

    AI Agent (LLM + tool-calling / MCP)
            │
            ▼
    Agent tool facade   (small, intent-level tools, schema trimming)
            │
            ▼
    API gateway / IAM   (authN/authZ, rate limits, audit)
            │
            ▼
    TMF API facades  →  Catalog · Inventory · Qualification · Order Management
            │
            ▼
    Systems of record

    The important parts:

    • The tool facade (for example an MCP server or plain function-calling definitions) offers a handful of intent-level tools such as find_offers, check_availability, or get_order_status. It does not offer “all of TMF622”.
    • The gateway is the same one your other channels use: same authentication, same limits, same logging.
    • The orchestration stays where it is. The agent never replaces your Customer Order Management / orchestrator. It talks to it through the same contracts as everybody else.

    Which TMF APIs to give an agent, and how

    Think of three tiers by risk. Start at the bottom, move up only when you’ve earned the trust.

    Tier 1: Read-only (TMF620, TMF637, TMF638)

    APIWhat the agent can learnTypical risk
    TMF620 Product CatalogOffers, specifications, prices, lifecycle statusLow (public or semi-public data)
    TMF637 Product InventoryWhat a customer actually hasMedium (personal data)
    TMF638 Service InventoryDeployed service stateMedium (technical and personal data)

    These are the safest starting point. Even if the agent misunderstands something, nothing changes in your systems. Still apply discipline:

    • Use fields and limit to return only what the task needs. This reduces cost, latency, and data exposure at once.
    • Restrict inventory queries to the “customer in context”. The agent should not be able to run an unbounded GET /product.
    • Instead of giving the agent generic GET access to an API, expose a few narrow, purpose-built tools, for example get_customer_active_products or get_order_status. Each tool wraps one specific TMF call with fixed filters, a trimmed field list, and mandatory customer scoping.

    Tier 2: Qualification (TMF679, TMF645): the sweet spot

    Qualification APIs are in my experience the best first „active“ use case for agents:

    • TMF679 Product Offering Qualification answers: may this customer buy this offer, in this configuration?
    • TMF645 Service Qualification answers: can we technically deliver this service here (address, coverage, resources)?

    They are ideal because they are question-shaped. The agent asks, the system answers, and nothing is committed. They also encode rules that are painful to explain in a prompt: eligibility, coverage, resource availability. The agent doesn’t need to know those rules; it only needs to report the answer clearly and honestly, including “not available” and “available with conditions”.

    One practical note: qualification can be asynchronous. The facade should hide polling or callbacks from the model and return a clear result or a clear “still in progress”.

    Tier 3: Write (TMF622, TMF641): only with a human in the loop

    Creating a product order (TMF622) or a service order (TMF641) commits the company to something: cost, provisioning, customer contract. My recommendation is blunt:

    • The agent prepares, a human confirms. The agent assembles a draft order, shows it in readable form, and a person (contact-centre agent, customer, or both) approves it.
    • The agent never holds a credential that can submit orders on its own. Approval produces a short-lived, single-purpose authorization used by the facade to submit the order.
    • Service orders (TMF641) are not for agents at all in most landscapes. They belong to the orchestration between Customer Order Management and Service Order Management, not to a conversational layer. Let COM decompose the product order into service orders as it does today.

    This is not conservatism for its own sake. It is the same principle as in pragmatic order lifecycle design: there must be exactly one place that owns order state.

    Three practical scenarios

    1. Contact-centre assistant (catalog and inventory)

    Situation: A customer calls: “What do I currently have, and is there something better for the same price?”

    Flow:

    1. get_customer_products: TMF637 (active products for this customer, trimmed fields)
    2. find_offers: TMF620 (relevant offers, current lifecycle status)
    3. check_eligibility: TMF679 for the most promising offers
    4. The agent summarizes options in plain language for the human operator.
    5. If the customer wants a change, the agent drafts the order; the operator confirms.

    Value: The operator no longer clicks through three screens.

    Risk: low, as steps 1–3 are read or question-shaped.

    2. Availability check by address

    Situation: A prospect asks: “Can I get fibre at this address?”

    Flow:

    1. The agent normalizes the address and asks for missing parts (floor, building, etc.).
    2. check_service_availability: TMF645, with the service specification from TMF633 where needed.
    3. The facade returns a clean result: available / available with conditions / not available / unknown.
    4. The agent explains the result and offers next steps (matching offers via TMF620/TMF679).

    Pragmatic rule: the agent must never promise more than the qualification result says. “Qualified” is not an installation date.

    3. Order status diagnosis

    Situation: “Where is my order?” is among the most common and most expensive questions in any telecom.

    Flow:

    1. get_order_status: TMF622 (order and item states).
    2. If items are still in progress, follow the correlation to the related service orders (TMF641, read-only).
    3. Check the resulting service state in TMF638 and the product state in TMF637.
    4. The agent explains where the order is stuck, in human language: “Item 2 is waiting for activation since Tuesday”.

    What makes this one interesting: order state and inventory state don’t always agree. In a well-designed landscape, service state drives product state through orchestration, order state is advanced mainly by fulfilment results, and inventory provides reconciliation and the authoritative deployed state. When they diverge, the agent must report both and flag the discrepancy, not decide which one is right. Deciding is a job for operations, or for your reconciliation process.

    Governance: what makes this production-grade

    This is the part demos skip. It is also where your IAM and API-management foundation pays off.

    Identity and permissions

    • Give the agent its own identity (OAuth2 client), separate from users.
    • Carry the end user’s identity and context along (for example via token exchange / on-behalf-of), so authorization decisions reflect who is actually asking.
    • Define scopes per tool, not per API: offers:read, inventory:read, qualification:check, order:draft. There is deliberately no order:submit for the agent.
    • Enforce data-level rules (customer scoping, field masking) in the facade or gateway, not in the prompt.

    Audit

    • Log every tool call: who asked, which agent, which tool, which parameters, which result, and a correlation ID tying it to the conversation.
    • Keep it queryable. When someone asks “why did the assistant say that?”, you need an answer.

    Limits

    • Apply rate limits and quotas per agent and per tool. A looping agent should hit a wall quickly and cheaply.
    • Add a kill switch: disabling a tool or the whole agent without a deployment.

    Idempotency

    • Models retry, and so do networks. Any write path (even a draft or a confirmed submission) must be safe to repeat. Use an idempotency key or the order’s externalId at the facade so a duplicate request cannot create a second order.

    Untrusted content

    • Treat everything coming back from APIs as data, never as instructions. Strip or fence free-text fields where possible, and never let response content change the agent’s permissions.

    Common mistakes

    1. Handing the agent the whole API. Large generic schemas confuse models and widen your attack surface. Offer a few intent-level tools.
    2. Bypassing order orchestration. Letting an agent create service orders or poke inventory directly produces state that Customer Order Management knows nothing about.
    3. Ignoring order and inventory discrepancies. The agent will happily narrate inconsistent data as fact unless you design for it.
    4. Starting with write access. Read and qualification use cases deliver value faster and teach you how the agent behaves.
    5. Treating the prompt as a security control. “Never submit orders” in a prompt is a wish, not a control. Permissions belong in IAM and the gateway.
    6. Skipping observability. Without audit and metrics you can’t improve the agent or defend its decisions.
    7. Building a new architecture around the agent. You don’t need an “agent platform” to start. A thin facade and your existing gateway are usually enough.

    A pragmatic starting plan

    1. Pick one scenario from tier 1 or 2, for example order status or availability checks.
    2. Define 3–5 intent-level tools and map each to specific TMF operations with trimmed fields.
    3. Route everything through your existing gateway and IAM, with agent-specific scopes.
    4. Add audit and limits from day one, not “later”.
    5. Run it in shadow or assist mode with human operators, measure accuracy and time saved.
    6. Only then consider drafted writes, with explicit human approval.

    Conclusion

    TMF Open APIs don’t make your landscape magically agent-ready, but they give you something rare: a stable, standardized contract layer that you already own. The pragmatic path is to treat the AI agent as one more client of that layer, like the mobile app or the BFF: curated tools, scoped permissions, full audit, and orchestration left where it belongs.

    The contract stays stable. The agent is just another consumer.

    Planning to connect an AI agent to your BSS/OSS landscape and want to know which integration approach is realistic? A short initial conversation is free and non-binding.