# asset.issuance.provisional

Source: https://docs.settlemint.com/docs/events/asset-issuance-provisional
An asset issuance transaction entered the reorg window and is provisionally visible.



An asset issuance transaction entered the reorg window and is provisionally visible.

## Delivery contract [#delivery-contract]

| Field                           | Value                                |
| ------------------------------- | ------------------------------------ |
| Event type                      | `asset.issuance.provisional`         |
| Version                         | `1`                                  |
| Lifecycle state                 | `provisional`                        |
| Counter-signed receipt required | `false`                              |
| SDK type                        | `Webhook.AssetIssuanceProvisionalV1` |

Related references:

* `idxr_asset`
* `idxr_token`

## When to consume this event [#when-to-consume-this-event]

Consume `asset.issuance.provisional` when your integration needs early notice that an asset issuance transaction has been indexed, but can tolerate the result still being inside the configured reorg depth.

Use this event to stage downstream asset, token, ledger, or reconciliation records. Keep those records reversible until DALP sends a later lifecycle signal. Do not show this provisional event as a customer-visible issuance confirmation.

Store these identifiers before triggering downstream side effects:

| Field                     | Why it matters                                                                            |
| ------------------------- | ----------------------------------------------------------------------------------------- |
| `webhook-id`              | Dedupe delivery attempts from the webhook transport.                                      |
| `evt_id`                  | Identify the DALP event in your event store.                                              |
| `request.idempotency_key` | Correlate the webhook to the originating API request when DALP includes a request record. |
| `assetAddress`            | Attach provisional state to the issued asset.                                             |
| `chainId`                 | Keep the asset address scoped to the originating chain.                                   |
| `transactionHash`         | Link the provisional event to the indexed transaction.                                    |

See [webhook idempotency and on-chain outcome](/docs/events/idempotency-and-on-chain-outcome) for retry, replay, payload-shape, and provisional-event handling.

## Payload shape [#payload-shape]

Fat payloads include the issued asset address, chain ID, issuer address, raw issued quantity, and transaction hash. Thin payloads omit `issuer`. Fetch or store the issuer wallet identifier only when your integration is allowed to process that field.

`quantity` is a string so consumers can preserve the exact on-chain integer value without JavaScript number rounding.

## Payload schema [#payload-schema]

```json
{
  "type": "object",
  "properties": {
    "assetAddress": {
      "type": "string",
      "pattern": "^0x[a-fA-F0-9]{40}$"
    },
    "chainId": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "issuer": {
      "type": "string",
      "pattern": "^0x[a-fA-F0-9]{40}$"
    },
    "quantity": {
      "type": "string"
    },
    "transactionHash": {
      "type": "string",
      "pattern": "^0x[a-fA-F0-9]{64}$"
    }
  },
  "required": [
    "assetAddress",
    "chainId",
    "issuer",
    "quantity",
    "transactionHash"
  ],
  "additionalProperties": false
}
```

## TypeScript SDK example [#typescript-sdk-example]

```typescript
import { verifyWebhook, type Webhook } from "@settlemint/dalp-sdk";

const result = verifyWebhook({
  rawBody,
  headers,
  secret: process.env.DALP_WEBHOOK_SECRET!,
});

if (!result.ok) {
  throw new Error(`Webhook verification failed: ${result.code}`);
}

if (result.event.type === "asset.issuance.provisional") {
  const event: Webhook.Event<"asset.issuance.provisional"> = result.event;
  console.log(event.payload);
}
```

## curl example [#curl-example]

```bash
curl -X POST https://consumer.example.com/dalp/webhooks \
  -H "content-type: application/json" \
  -H "webhook-id: evt_docs_asset_issuance_provisional_001" \
  -H "webhook-timestamp: 1778112000" \
  -H "webhook-signature: v1,docs-example-signature" \
  --data '{"evt_id":"evt_docs_asset_issuance_provisional_001","type":"asset.issuance.provisional","version":1,"lifecycle_state":"provisional","request":{"idempotency_key":"idem_01JZP7R5W8M9N0P1Q2R3S4T5"},"related":{"idxr_asset":"idxr_asset_example","idxr_token":"idxr_token_example"},"payload":{"assetAddress":"0x1111111111111111111111111111111111111111","chainId":537001,"issuer":"0x2222222222222222222222222222222222222222","quantity":"1000000000000000000000","transactionHash":"0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"}}'
```

## Version history [#version-history]

* `v1`: Initial registry entry for `asset.issuance.provisional`.

## Deprecation [#deprecation]

This event type is not deprecated.

## Manifest [#manifest]

The machine-readable AsyncAPI entry is published in the [DALP events manifest](/.well-known/dalp-events.json).
