# invokeMulti

Invoke Multi functions the same as Invoke, but accepts inputs to execute multiple invokes in the same transaction.

## **Input Arguments**

| Parameter                                                                                                                                                                           | Description                                                                                                                                        |
| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- |
| `fee?: string`                                                                                                                                                                      | If a fee is specified then the wallet SHOULD NOT override it, if a fee is not specified the wallet SHOULD allow the user to attach an optional fee |
| `network: string`                                                                                                                                                                   | Network alias to submit this request to.                                                                                                           |
| `assetIntentOverrides?:` [![i](http://localhost:8080/assets/images/info.svg)](/reference/neo2-provider-api/write-methods/invokemulti.md#assetintentoverrides)`AssetIntentOverrides` | Used to specify the exact UTXO's to use for attached assets. If this is provided fee and attachedAssets will be ignored                            |
| `invokeArgs?:` [![i](http://localhost:8080/assets/images/info.svg)](/reference/neo2-provider-api/write-methods/invokemulti.md#invokearguments)`InvokeArguments[]`                   | Array of contract invoke inputs                                                                                                                    |
| `broadcastOverride?: boolean`                                                                                                                                                       | If this flag is set to True, the wallet provider will return the signed transaction rather than broadcasting to a node.                            |
| `txHashAttributes?:` [![i](http://localhost:8080/assets/images/info.svg)](/reference/neo2-provider-api/write-methods/invokemulti.md#txhashattribute)`TxHashAttribute[]`             | Optional list of tx attribute hash values to be added                                                                                              |

### InvokeArguments

| Parameter                                                                                                                                    | Description                                                                                                      |
| -------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- |
| `scriptHash: string`                                                                                                                         | The script hash of the contract that you wish to invoke                                                          |
| `operation: string`                                                                                                                          | The operation on the smart contract that you wish to call. This can be fetched from the contract ABI             |
| `args:` [![i](http://localhost:8080/assets/images/info.svg)](/reference/neo2-provider-api/write-methods/invokemulti.md#argument)`Argument[]` | A list of arguments necessary to perform on the operation you wish to call                                       |
| `attachedAssets?: AttachedAssets[]`                                                                                                          | Describes the assets to attach with the smart contract, e.g. attaching assets to mint tokens during a token sale |
| `triggerContractVerification: bolean?`                                                                                                       | Adds the instruction to invoke the contract verifican trigger                                                    |

### Argument

| Parameter                                                                                                   | Description                                               |
| ----------------------------------------------------------------------------------------------------------- | --------------------------------------------------------- |
| `type: 'String' \| 'Boolean' \| 'Hash160' \| 'Hash256' \| 'Integer' \| 'ByteArray' \| 'Array' \| 'Address'` | The type of the argument with you are using               |
| `value: any`                                                                                                | String representation of the argument which you are using |

### TxHashAttribute

| Parameter                                                                                                                                                                              | Description                                               |
| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------- |
| `type: 'String' \| 'Boolean' \| 'Hash160' \| 'Hash256' \| 'Integer' \| 'ByteArray' \| 'Array' \| 'Address'`                                                                            | The type of the argument with you are using               |
| `value: any`                                                                                                                                                                           | String representation of the argument which you are using |
| `txAttrUsage: 'Hash1' \| 'Hash2' \| 'Hash3' \| 'Hash4' \| 'Hash5' \| 'Hash6' \| 'Hash7' \| 'Hash8' \| 'Hash9' \| 'Hash10' \| 'Hash11' \| 'Hash12' \| 'Hash13' \| 'Hash14' \| 'Hash15'` | Attribute usage value                                     |

### AssetIntentOverrides

<table><thead><tr><th width="332">Parameter</th><th>Description</th></tr></thead><tbody><tr><td><code>inputs:</code> <a href="/pages/ttTIUGBZP7gBVvwMm8vy#assetinput"><img src="http://localhost:8080/assets/images/info.svg" alt="i"></a><code>AssetInput[]</code></td><td>A list of UTXO inputs to use for this transaction</td></tr><tr><td><code>outputs:</code> <a href="/pages/ttTIUGBZP7gBVvwMm8vy#assetoutput"><img src="http://localhost:8080/assets/images/info.svg" alt="i"></a><code>AssetOutput[]</code></td><td>A list of UTXO outputs to use for this transaction</td></tr></tbody></table>

### AssetInput

<table><thead><tr><th width="255">Parameter</th><th>Description</th></tr></thead><tbody><tr><td><code>txid: string</code></td><td>Transaction id to be used as input</td></tr><tr><td><code>index: number</code></td><td>Index of the UTXO, can be found from transaction details</td></tr></tbody></table>

### AssetOutput

<table><thead><tr><th width="259">Parameter</th><th>Description</th></tr></thead><tbody><tr><td><code>asset: string</code></td><td>Asset of the UTXO</td></tr><tr><td><code>address: string</code></td><td>Address to receive the UTXO</td></tr><tr><td><code>value: string</code></td><td>String representation of double or integer value to be used as output</td></tr></tbody></table>

## **Success Response**

In the case where the "broadcastOverride" input argument is not set, or set to false.

<table><thead><tr><th width="265">Parameter</th><th>Description</th></tr></thead><tbody><tr><td><code>txid: string</code></td><td>The transaction ID of the invocation</td></tr><tr><td><code>nodeURL: string</code></td><td>The node which the transaction was broadcast to. Returned if transaction is broadcast by wallet provider</td></tr></tbody></table>

In the case where the "broadcastOverride" input argument is set to True.

<table><thead><tr><th width="266">Parameter</th><th>Description</th></tr></thead><tbody><tr><td><code>txid: string</code></td><td>The transaction ID of the invocation</td></tr><tr><td><code>signedTx: string</code></td><td>The serialized signed transaction. Only returned if the broadcastOverride input argument was set to True</td></tr></tbody></table>

## **Error Response**

<table><thead><tr><th width="270">Parameter</th><th>Description</th></tr></thead><tbody><tr><td><code>type: string</code></td><td>The type of error which has occured</td></tr><tr><td><code>description: string</code></td><td>A description of the error which has occured</td></tr><tr><td><code>data: string</code></td><td>Any raw data associated with the error</td></tr></tbody></table>

## Example

### Request

```js
neoline.invokeMulti({
    invokeArgs: [
        {
            scriptHash: "808f0823a811cdb7d80af3509e900cc2f594ceb1",
            operation: "transfer",
            args: [
            {
                    "type": "Address",
                    "value": "AWSEU4BXpjGVdw9ajnFBXh8Rg8cgw9f3Zo"
                },
                {
                    "type": "Address",
                    "value": "AY69kajrRx1Qk29AeLxvkXHYf2h3pQw9yK"
                },
                {
                    "type": "Integer",
                    "value": "100000000"
                }

            ],
            attachedAssets: {
                NEO: '1',
                GAS: '0.0001'
            },
        },
        {
            scriptHash: "808f0823a811cdb7d80af3509e900cc2f594ceb1",
            operation: "transfer",
            args: [
            {
                    "type": "Address",
                    "value": "AWSEU4BXpjGVdw9ajnFBXh8Rg8cgw9f3Zo"
                },
                {
                    "type": "Address",
                    "value": "AY69kajrRx1Qk29AeLxvkXHYf2h3pQw9yK"
                },
                {
                    "type": "Integer",
                    "value": "300000000"
                }
            ],
            attachedAssets: {
                NEO: '2',
                GAS: '0.01'
            },
        }
    ],
    fee: '0.01',
    network: 'TestNet',
    broadcastOverride: false,
    txHashAttributes: [
        {
            type: 'Boolean',
            value: true,
            txAttrUsage: 'Hash1'
        }
    ]
})
.then(({txid, nodeURL}: InvokeOutput) => {
  console.log('Invoke transaction success!');
  console.log('Transaction ID: ' + txid);
  console.log('RPC node URL: ' + nodeURL);
})
.catch((error) => {
  const {type, description, data} = error;
  switch(type) {
    case NO_PROVIDER:
        console.log('No provider available.');
        break;
    case RPC_ERROR:
        console.log('There was an error when broadcasting this transaction to the network.');
        break;
    case CANCELED:
        console.log('The user has canceled this transaction.');
        break;
    default:
        // Not an expected error object.  Just write the error to the console.
        console.error(error);
        break;
  }
});
```

### Response

```js
{
    txid: "8979389ac095c37c43fa6922ae3f1180e33082394b43108b82cb0ca37d900541",
    nodeURL: "https://testnet.api.neoline.io"
};
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://tutorial.neoline.io/reference/neo2-provider-api/write-methods/invokemulti.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
