# Trade model: Cancel

This page describes the FX Integration API's **Cancel** trade model, as defined in the file `config/TradingAdapter/Blade/DataSource/etc/trademodels.xml` in the FX Integration API Kit.

This documentation is for the FX Integration API 12.10.0.

Trade models are XML-defined state machines used by the [Java Trading API](https://docs.caplin.com/developer/api/trading_java/latest/) and Caplin Trader's [Trading API](../caplin-trader/4/trading-api/index.md) to manage trading workflows. For more information on trade model XML definitions, see the [Trade model XML schema](../caplin-platform/cis/cis-trade-model-schema.md) reference.

## State model

The Cancel trade model's state model in Mermaid JS format:

```mermaid
%% State diagram for the Cancel trade model
stateDiagram-v2
    [*] --> Initial
    Initial --> Submitted : Submit (client)
    Initial --> PendingDetails : RequestDetails (client)
    Submitted --> ClientClosed : ClientClose (client)
    Submitted --> Submitted : Details (server)
    Submitted --> Queued : SubmitAck (server)
    Submitted --> Rejected : Reject (server)
    Submitted --> Error : Error (server)
    ClientClosed --> [*]
    Queued --> ClientClosed : ClientClose (client)
    Queued --> Queued : Processing (server)
    Queued --> Confirmed : Confirm (server)
    Queued --> Rejected : Reject (server)
    Queued --> Error : Error (server)
    Confirmed --> [*]
    Rejected --> [*]
    Error --> [*]
    PendingDetails --> ClientClosed : ClientClose (client)
    PendingDetails --> PendingAccept : Details (server)
    PendingDetails --> Error : Error (server)
    PendingAccept --> PendingAccept : Details (server)
    PendingAccept --> Submitted : ClientAccept (client)
    PendingAccept --> ClientRejected : ClientReject (client)
    ClientRejected --> [*]
```

The Cancel trade model's state model in a flat state-transition matrix:

| Source state | Event trigger | Origin | Target state |
| ------------ | ------------- | ------ | ------------ |
| [*] | - | - | Initial |
| Initial | Submit | client | Submitted |
| Initial | RequestDetails | client | PendingDetails |
| Submitted | ClientClose | client | ClientClosed |
| Submitted | Details | server | Submitted |
| Submitted | SubmitAck | server | Queued |
| Submitted | Reject | server | Rejected |
| Submitted | Error | server | Error |
| ClientClosed | - | - | [*] |
| Queued | ClientClose | client | ClientClosed |
| Queued | Processing | server | Queued |
| Queued | Confirm | server | Confirmed |
| Queued | Reject | server | Rejected |
| Queued | Error | server | Error |
| Confirmed | - | - | [*] |
| Rejected | - | - | [*] |
| Error | - | - | [*] |
| PendingDetails | ClientClose | client | ClientClosed |
| PendingDetails | Details | server | PendingAccept |
| PendingDetails | Error | server | Error |
| PendingAccept | Details | server | PendingAccept |
| PendingAccept | ClientAccept | client | Submitted |
| PendingAccept | ClientReject | client | ClientRejected |
| ClientRejected | - | - | [*] |

## Event message specifications

This section describes the messages sent between client and server when a state-model event occurs. The origin of an event (the client or the server) is specified in brackets after the name of the event.

The specification of some events depends on the type of financial product being traded, and when this applies, the variant specifications are detailed under level-4 headings.

Back-end developers build server events by using classes in the Caplin's FX Integration API, a Java library that makes it easy to provide data to Caplin's web applications. Where appropriate, the specifications below include references to JavaDoc documentation and code examples.

### Event: ClientAccept (client)

Message specification:

```json
{
  "trade_model_name": "Cancel",
  "trade_model_trigger": "ClientAccept",
  "message_origin": "client",
  "fields": [
    {
      "name": "MsgType",
      "type": "String",
      "flags": "",
      "definition": "Name of the transition",
      "example_value": "ClientAccept",
      "deprecated": false
    },
    {
      "name": "RequestID",
      "type": "String",
      "flags": "",
      "definition": "The RequestID. A Unique identifier, must remain the same for each event in the trade model",
      "example_value": "",
      "deprecated": false
    }
  ]
}
```

### Event: ClientReject (client)

Message specification:

```json
{
  "trade_model_name": "Cancel",
  "trade_model_trigger": "ClientReject",
  "message_origin": "client",
  "fields": [
    {
      "name": "MsgType",
      "type": "String",
      "flags": "",
      "definition": "Name of the transition",
      "example_value": "ClientReject",
      "deprecated": false
    },
    {
      "name": "RequestID",
      "type": "String",
      "flags": "",
      "definition": "The RequestID. A Unique identifier, must remain the same for each event in the trade model",
      "example_value": "",
      "deprecated": false
    }
  ]
}
```

### Event: RequestDetails (client)

Message specification:

```json
{
  "trade_model_name": "Cancel",
  "trade_model_trigger": "RequestDetails",
  "message_origin": "client",
  "fields": [
    {
      "name": "MsgType",
      "type": "String",
      "flags": "",
      "definition": "Name of the transition",
      "example_value": "RequestDetails",
      "deprecated": false
    },
    {
      "name": "RequestID",
      "type": "String",
      "flags": "",
      "definition": "The RequestID. A Unique identifier, must remain the same for each event in the trade model",
      "example_value": "",
      "deprecated": false
    },
    {
      "name": "TradeID",
      "type": "string",
      "flags": "",
      "definition": "A unique identifier for this trade",
      "example_value": "00001561",
      "deprecated": false
    }
  ]
}
```

### Event: Submit (client)

Message specification:

```json
{
  "trade_model_name": "Cancel",
  "trade_model_trigger": "Submit",
  "message_origin": "client",
  "fields": [
    {
      "name": "MsgType",
      "type": "String",
      "flags": "",
      "definition": "Name of the transition",
      "example_value": "Submit",
      "deprecated": false
    },
    {
      "name": "RequestID",
      "type": "String",
      "flags": "",
      "definition": "The RequestID. A Unique identifier, must remain the same for each event in the trade model",
      "example_value": "",
      "deprecated": false
    },
    {
      "name": "TradeID",
      "type": "string",
      "flags": "",
      "definition": "A unique identifier for this trade",
      "example_value": "00001561",
      "deprecated": false
    }
  ]
}
```



### Event: Confirm (server)

Message specification:

```json
{
  "trade_model_name": "Cancel",
  "trade_model_trigger": "Confirm",
  "message_origin": "server"
}
```

### Event: Details (server)

Message specification:

```json
{
  "trade_model_name": "Cancel",
  "trade_model_trigger": "Details",
  "message_origin": "server",
  "java_class": "com.caplin.generated.motif.fx.tradedetails.TradeDetailsTypesDef.CancelTradeDetails",
  "javadoc": "https://docs.caplin.com/developer/api/fxintegration/com/caplin/generated/motif/fx/tradedetails/TradeDetailsTypesDef.CancelTradeDetails.html",
  "instantiation_pattern": "Builder (via .newBuilder())",
  "code_example": "https://docs.caplin.com/developer/api/fxintegration/latest/com/caplin/examples/fxapi/generated/motif/fx/tradedetails/TradeDetailsTypesDef/CancelTradeDetailsExample.html",
  "fields": [
    {
      "name": "ProfitLossAmount",
      "type": "decimal",
      "flags": "",
      "definition": "The profit/loss of the trade at execution time.",
      "example_value": "",
      "deprecated": false
    },
    {
      "name": "ProfitLossCurrency",
      "type": "decimal",
      "flags": "",
      "definition": "The currency the profit/loss of the trade is provided in.",
      "example_value": "",
      "deprecated": false
    },
    {
      "name": "CancellationProfitLossAmount",
      "type": "decimal",
      "flags": "",
      "definition": "The estimated profit/loss of this cancellation.",
      "example_value": "",
      "deprecated": false
    },
    {
      "name": "CancellationProfitLossCurrency",
      "type": "decimal",
      "flags": "",
      "definition": "The currency the estimated profit/loss of this cancellation is provided in.",
      "example_value": "",
      "deprecated": false
    }
  ]
}
```

Java class: [com.caplin.generated.motif.fx.tradedetails.TradeDetailsTypesDef.CancelTradeDetails](https://docs.caplin.com/developer/api/fxintegration/latest/com/caplin/generated/motif/fx/tradedetails/TradeDetailsTypesDef.CancelTradeDetails.html)

Instantiation pattern: Static Factory Method (via `TradeDetailsTypesDef.CancelTradeDetails.newBuilder()`)

Java code example:

```java
package com.caplin.examples.fxapi.generated.motif.fx.tradedetails.TradeDetailsTypesDef; 

import java.math.BigInteger;

import com.caplin.generated.motif.fx.tradedetails.TradeDetailsTypesDef;

public class CancelTradeDetailsExample {
    public static void main(String[] args) {
                    		
		TradeDetailsTypesDef.CancelTradeDetails cancelTradeDetails =
		TradeDetailsTypesDef.CancelTradeDetails
			.newBuilder()
			.setCancellationProfitLossAmount("")
			.setCancellationProfitLossCurrency(BigDecimal.valueOf(0.0))
			.setProfitLossAmount("")
			.setProfitLossCurrency("")
			.build();
            
    }
}
```

### Event: Processing (server)

Message specification:

```json
{
  "trade_model_name": "Cancel",
  "trade_model_trigger": "Processing",
  "message_origin": "server"
}
```

### Event: SubmitAck (server)

Message specification:

```json
{
  "trade_model_name": "Cancel",
  "trade_model_trigger": "SubmitAck",
  "message_origin": "server"
}
```