Skip to content
Developer Docs

Event Reference ​

Full catalogue of webhook events Zertiban emits on every relevant state change.

Webhook events are the primary real-time sync mechanism between Zertiban and the customer's integrated systems. Every relevant change in the life cycle of a flow, an operation or a PSD2 payment automatically produces a signed webhook event, so external systems can react immediately without polling the API.

Webhook delivery must be enabled with Zertiban beforehand. During onboarding the customer must provide:

  • The receiving HTTPS endpoint.
  • The environment: Sandbox or Production.
  • The webhook event types to subscribe to.

Once configured, Zertiban will push real-time notifications whenever a relevant state change occurs.

Functional event model ​

Zertiban's event system is organised in four functional layers: three covering distinct layers of the transactional process, and one covering the organisation life cycle.

LevelRepresents
FLOW_*Aggregate state of the full set of operations
OPERATION_*Individual actions taken by the end user
PSD2_PAYMENT_*Real banking state of the PSD2 payment
BUSINESS_*State of an organisation within Zertiban

Flow events ​

FLOW_* events represent the aggregate state of the full set of operations attached to a flow.

In most current integrations a flow holds a single operation, so flow events usually mirror that operation's outcome directly. That said, Zertiban's architecture is prepared to support multiple operations within the same flow.

EventWhen it is emitted
FLOW_IN_PROGRESSAt least one operation in the flow was opened
FLOW_COMPLETEDAll operations in the flow completed successfully
FLOW_REJECTEDAll operations were rejected
FLOW_NOT_COMPLETEDThe flow ended with no operation completed
FLOW_PARTIALLY_COMPLETEDSome operations completed and the rest did not
FLOW_EXPIREDAll operations expired
FLOW_CANCELLEDThe flow was cancelled

FLOW_IN_PROGRESS ​

json
{
  "metadata": {
    "apiVersion": "v1",
    "businessUuid": "3b90ee0e-f85e-4591-a0b2-5c785a860334"
  },
  "eventType": "FLOW_IN_PROGRESS",
  "eventUuid": "ddd6c831-b815-5a12-856f-7b9a331200e7",
  "timestamp": "2026-09-17T09:40:02.115Z",
  "resource": {
    "uuid": "39b71b93-e646-40eb-8d6b-abc728e40851",
    "externalId": "INV-2026-000123",
    "status": "IN_PROGRESS"
  }
}
json
{
  "metadata": {
    "apiVersion": "v1",
    "businessUuid": "3b90ee0e-f85e-4591-a0b2-5c785a860334",
    "collaboration": {
      "businessUuid": "208da71f-aac8-4a74-8a3d-c07fa7cca9f6"
    }
  },
  "eventType": "FLOW_IN_PROGRESS",
  "eventUuid": "ddd6c831-b815-5a12-856f-7b9a331200e7",
  "timestamp": "2026-09-17T09:40:02.115Z",
  "resource": {
    "uuid": "39b71b93-e646-40eb-8d6b-abc728e40851",
    "externalId": "INV-2026-000123",
    "status": "IN_PROGRESS"
  }
}

FLOW_REJECTED ​

json
{
  "metadata": {
    "apiVersion": "v1",
    "businessUuid": "3b90ee0e-f85e-4591-a0b2-5c785a860334"
  },
  "eventType": "FLOW_REJECTED",
  "eventUuid": "7cf54949-de85-5a0a-b0eb-c0cad009f78a",
  "timestamp": "2026-09-17T09:46:31.902Z",
  "resource": {
    "uuid": "39b71b93-e646-40eb-8d6b-abc728e40851",
    "externalId": "INV-2026-000123",
    "status": "REJECTED"
  }
}
json
{
  "metadata": {
    "apiVersion": "v1",
    "businessUuid": "3b90ee0e-f85e-4591-a0b2-5c785a860334",
    "collaboration": {
      "businessUuid": "208da71f-aac8-4a74-8a3d-c07fa7cca9f6"
    }
  },
  "eventType": "FLOW_REJECTED",
  "eventUuid": "7cf54949-de85-5a0a-b0eb-c0cad009f78a",
  "timestamp": "2026-09-17T09:46:31.902Z",
  "resource": {
    "uuid": "39b71b93-e646-40eb-8d6b-abc728e40851",
    "externalId": "INV-2026-000123",
    "status": "REJECTED"
  }
}

FLOW_NOT_COMPLETED ​

json
{
  "metadata": {
    "apiVersion": "v1",
    "businessUuid": "3b90ee0e-f85e-4591-a0b2-5c785a860334"
  },
  "eventType": "FLOW_NOT_COMPLETED",
  "eventUuid": "f55ba01d-230a-5eda-85ca-6977c3c813d2",
  "timestamp": "2026-09-17T09:52:07.338Z",
  "resource": {
    "uuid": "39b71b93-e646-40eb-8d6b-abc728e40851",
    "externalId": "INV-2026-000123",
    "status": "NOT_COMPLETED"
  }
}
json
{
  "metadata": {
    "apiVersion": "v1",
    "businessUuid": "3b90ee0e-f85e-4591-a0b2-5c785a860334",
    "collaboration": {
      "businessUuid": "208da71f-aac8-4a74-8a3d-c07fa7cca9f6"
    }
  },
  "eventType": "FLOW_NOT_COMPLETED",
  "eventUuid": "f55ba01d-230a-5eda-85ca-6977c3c813d2",
  "timestamp": "2026-09-17T09:52:07.338Z",
  "resource": {
    "uuid": "39b71b93-e646-40eb-8d6b-abc728e40851",
    "externalId": "INV-2026-000123",
    "status": "NOT_COMPLETED"
  }
}

FLOW_PARTIALLY_COMPLETED ​

json
{
  "metadata": {
    "apiVersion": "v1",
    "businessUuid": "3b90ee0e-f85e-4591-a0b2-5c785a860334"
  },
  "eventType": "FLOW_PARTIALLY_COMPLETED",
  "eventUuid": "f096c465-a9c2-5c5f-8678-fa0d1216f84c",
  "timestamp": "2026-09-17T09:55:44.061Z",
  "resource": {
    "uuid": "39b71b93-e646-40eb-8d6b-abc728e40851",
    "externalId": "INV-2026-000123",
    "status": "PARTIALLY_COMPLETED"
  }
}
json
{
  "metadata": {
    "apiVersion": "v1",
    "businessUuid": "3b90ee0e-f85e-4591-a0b2-5c785a860334",
    "collaboration": {
      "businessUuid": "208da71f-aac8-4a74-8a3d-c07fa7cca9f6"
    }
  },
  "eventType": "FLOW_PARTIALLY_COMPLETED",
  "eventUuid": "f096c465-a9c2-5c5f-8678-fa0d1216f84c",
  "timestamp": "2026-09-17T09:55:44.061Z",
  "resource": {
    "uuid": "39b71b93-e646-40eb-8d6b-abc728e40851",
    "externalId": "INV-2026-000123",
    "status": "PARTIALLY_COMPLETED"
  }
}

FLOW_COMPLETED ​

json
{
  "metadata": {
    "apiVersion": "v1",
    "businessUuid": "3b90ee0e-f85e-4591-a0b2-5c785a860334"
  },
  "eventType": "FLOW_COMPLETED",
  "eventUuid": "e4159bb3-dce9-5105-a1be-07e2272a969f",
  "timestamp": "2026-09-17T09:41:12.482Z",
  "resource": {
    "uuid": "39b71b93-e646-40eb-8d6b-abc728e40851",
    "externalId": "INV-2026-000123",
    "status": "COMPLETED"
  }
}
json
{
  "metadata": {
    "apiVersion": "v1",
    "businessUuid": "3b90ee0e-f85e-4591-a0b2-5c785a860334",
    "collaboration": {
      "businessUuid": "208da71f-aac8-4a74-8a3d-c07fa7cca9f6"
    }
  },
  "eventType": "FLOW_COMPLETED",
  "eventUuid": "e4159bb3-dce9-5105-a1be-07e2272a969f",
  "timestamp": "2026-09-17T09:41:12.482Z",
  "resource": {
    "uuid": "39b71b93-e646-40eb-8d6b-abc728e40851",
    "externalId": "INV-2026-000123",
    "status": "COMPLETED"
  }
}

FLOW_EXPIRED ​

json
{
  "metadata": {
    "apiVersion": "v1",
    "businessUuid": "3b90ee0e-f85e-4591-a0b2-5c785a860334"
  },
  "eventType": "FLOW_EXPIRED",
  "eventUuid": "59cb274a-35d9-595b-b6fa-67b3fe5c6b62",
  "timestamp": "2026-09-24T00:00:05.004Z",
  "resource": {
    "uuid": "39b71b93-e646-40eb-8d6b-abc728e40851",
    "externalId": "INV-2026-000123",
    "status": "EXPIRED"
  }
}
json
{
  "metadata": {
    "apiVersion": "v1",
    "businessUuid": "3b90ee0e-f85e-4591-a0b2-5c785a860334",
    "collaboration": {
      "businessUuid": "208da71f-aac8-4a74-8a3d-c07fa7cca9f6"
    }
  },
  "eventType": "FLOW_EXPIRED",
  "eventUuid": "59cb274a-35d9-595b-b6fa-67b3fe5c6b62",
  "timestamp": "2026-09-24T00:00:05.004Z",
  "resource": {
    "uuid": "39b71b93-e646-40eb-8d6b-abc728e40851",
    "externalId": "INV-2026-000123",
    "status": "EXPIRED"
  }
}

FLOW_CANCELLED ​

json
{
  "metadata": {
    "apiVersion": "v1",
    "businessUuid": "3b90ee0e-f85e-4591-a0b2-5c785a860334"
  },
  "eventType": "FLOW_CANCELLED",
  "eventUuid": "f29bef98-7975-5919-b609-19f4aa2feecd",
  "timestamp": "2026-09-17T11:20:49.750Z",
  "resource": {
    "uuid": "8c5e3e83-5145-4c57-8d3f-ac5f9c6652f2",
    "externalId": null,
    "status": "CANCELLED"
  }
}
json
{
  "metadata": {
    "apiVersion": "v1",
    "businessUuid": "3b90ee0e-f85e-4591-a0b2-5c785a860334",
    "collaboration": {
      "businessUuid": "208da71f-aac8-4a74-8a3d-c07fa7cca9f6"
    }
  },
  "eventType": "FLOW_CANCELLED",
  "eventUuid": "f29bef98-7975-5919-b609-19f4aa2feecd",
  "timestamp": "2026-09-17T11:20:49.750Z",
  "resource": {
    "uuid": "8c5e3e83-5145-4c57-8d3f-ac5f9c6652f2",
    "externalId": null,
    "status": "CANCELLED"
  }
}

Operation events ​

OPERATION_* events reflect the functional state of an individual operation carried out by the end user. They let you monitor the payer's actual behaviour inside the flow and react in real time to functional changes in the process.

EventWhen it is emittedSuggested action
OPERATION_OPENEDThe payer opens the operation URLLog the open or interaction start
OPERATION_COMPLETEDThe operation completes successfullyMark the invoice or charge as paid
OPERATION_REJECTEDThe user or the bank rejects the operationNotify the collections team
OPERATION_EXPIREDThe operation reaches its expiration dateMark as overdue
OPERATION_CANCELLEDThe operation is cancelled via API or DashboardUpdate internal state

OPERATION_OPENED ​

json
{
  "metadata": {
    "apiVersion": "v1",
    "businessUuid": "3b90ee0e-f85e-4591-a0b2-5c785a860334"
  },
  "eventType": "OPERATION_OPENED",
  "eventUuid": "fdba93d4-3f32-5fce-8c6b-36736e67f492",
  "timestamp": "2026-09-17T09:40:02.117Z",
  "resource": {
    "uuid": "bd51a1af-7779-4010-a876-0630851a1858",
    "externalId": "OP-2026-000123",
    "status": "OPENED"
  }
}
json
{
  "metadata": {
    "apiVersion": "v1",
    "businessUuid": "3b90ee0e-f85e-4591-a0b2-5c785a860334",
    "collaboration": {
      "businessUuid": "208da71f-aac8-4a74-8a3d-c07fa7cca9f6"
    }
  },
  "eventType": "OPERATION_OPENED",
  "eventUuid": "fdba93d4-3f32-5fce-8c6b-36736e67f492",
  "timestamp": "2026-09-17T09:40:02.117Z",
  "resource": {
    "uuid": "bd51a1af-7779-4010-a876-0630851a1858",
    "externalId": "OP-2026-000123",
    "status": "OPENED"
  }
}

OPERATION_REJECTED ​

json
{
  "metadata": {
    "apiVersion": "v1",
    "businessUuid": "3b90ee0e-f85e-4591-a0b2-5c785a860334"
  },
  "eventType": "OPERATION_REJECTED",
  "eventUuid": "40df6070-422c-520f-af35-f1331317b125",
  "timestamp": "2026-09-17T09:46:31.900Z",
  "resource": {
    "uuid": "bd51a1af-7779-4010-a876-0630851a1858",
    "externalId": "OP-2026-000123",
    "status": "REJECTED"
  }
}
json
{
  "metadata": {
    "apiVersion": "v1",
    "businessUuid": "3b90ee0e-f85e-4591-a0b2-5c785a860334",
    "collaboration": {
      "businessUuid": "208da71f-aac8-4a74-8a3d-c07fa7cca9f6"
    }
  },
  "eventType": "OPERATION_REJECTED",
  "eventUuid": "40df6070-422c-520f-af35-f1331317b125",
  "timestamp": "2026-09-17T09:46:31.900Z",
  "resource": {
    "uuid": "bd51a1af-7779-4010-a876-0630851a1858",
    "externalId": "OP-2026-000123",
    "status": "REJECTED"
  }
}

OPERATION_COMPLETED ​

json
{
  "metadata": {
    "apiVersion": "v1",
    "businessUuid": "3b90ee0e-f85e-4591-a0b2-5c785a860334"
  },
  "eventType": "OPERATION_COMPLETED",
  "eventUuid": "13e83b92-13d8-5b6d-94c0-05feb58d3189",
  "timestamp": "2026-09-17T09:41:12.480Z",
  "resource": {
    "uuid": "bd51a1af-7779-4010-a876-0630851a1858",
    "externalId": "OP-2026-000123",
    "status": "COMPLETED"
  }
}
json
{
  "metadata": {
    "apiVersion": "v1",
    "businessUuid": "3b90ee0e-f85e-4591-a0b2-5c785a860334",
    "collaboration": {
      "businessUuid": "208da71f-aac8-4a74-8a3d-c07fa7cca9f6"
    }
  },
  "eventType": "OPERATION_COMPLETED",
  "eventUuid": "13e83b92-13d8-5b6d-94c0-05feb58d3189",
  "timestamp": "2026-09-17T09:41:12.480Z",
  "resource": {
    "uuid": "bd51a1af-7779-4010-a876-0630851a1858",
    "externalId": "OP-2026-000123",
    "status": "COMPLETED"
  }
}

OPERATION_EXPIRED ​

json
{
  "metadata": {
    "apiVersion": "v1",
    "businessUuid": "3b90ee0e-f85e-4591-a0b2-5c785a860334"
  },
  "eventType": "OPERATION_EXPIRED",
  "eventUuid": "d863ec53-51f6-5434-83d0-96de7e909fb3",
  "timestamp": "2026-09-24T00:00:05.001Z",
  "resource": {
    "uuid": "bd51a1af-7779-4010-a876-0630851a1858",
    "externalId": "OP-2026-000123",
    "status": "EXPIRED"
  }
}
json
{
  "metadata": {
    "apiVersion": "v1",
    "businessUuid": "3b90ee0e-f85e-4591-a0b2-5c785a860334",
    "collaboration": {
      "businessUuid": "208da71f-aac8-4a74-8a3d-c07fa7cca9f6"
    }
  },
  "eventType": "OPERATION_EXPIRED",
  "eventUuid": "d863ec53-51f6-5434-83d0-96de7e909fb3",
  "timestamp": "2026-09-24T00:00:05.001Z",
  "resource": {
    "uuid": "bd51a1af-7779-4010-a876-0630851a1858",
    "externalId": "OP-2026-000123",
    "status": "EXPIRED"
  }
}

OPERATION_CANCELLED ​

json
{
  "metadata": {
    "apiVersion": "v1",
    "businessUuid": "3b90ee0e-f85e-4591-a0b2-5c785a860334"
  },
  "eventType": "OPERATION_CANCELLED",
  "eventUuid": "ea318317-8c89-5ffd-8c4d-77cc51bdf3f5",
  "timestamp": "2026-09-17T11:20:49.748Z",
  "resource": {
    "uuid": "bd51a1af-7779-4010-a876-0630851a1858",
    "externalId": "OP-2026-000123",
    "status": "CANCELLED"
  }
}
json
{
  "metadata": {
    "apiVersion": "v1",
    "businessUuid": "3b90ee0e-f85e-4591-a0b2-5c785a860334",
    "collaboration": {
      "businessUuid": "208da71f-aac8-4a74-8a3d-c07fa7cca9f6"
    }
  },
  "eventType": "OPERATION_CANCELLED",
  "eventUuid": "ea318317-8c89-5ffd-8c4d-77cc51bdf3f5",
  "timestamp": "2026-09-17T11:20:49.748Z",
  "resource": {
    "uuid": "bd51a1af-7779-4010-a876-0630851a1858",
    "externalId": "OP-2026-000123",
    "status": "CANCELLED"
  }
}

PSD2 payment events ​

PSD2_PAYMENT_* events represent the real banking state of a PSD2 payment processed by Zertiban. Unlike the functional flow or operation events, these events reflect the payment's banking evolution directly within the PSD2 infrastructure and allow syncing real financial states with ERPs, reconciliation systems or treasury engines.

They are emitted automatically as the payment progresses through the banking ecosystem and provide full visibility on the real financial state of the transaction.

EventWhen it is emittedSuggested action
PSD2_PAYMENT_STATUS_PENDINGThe payment was initiated and is pendingLog the payment as in progress
PSD2_PAYMENT_STATUS_AUTHORIZEDThe bank authorised the payment successfullyConfirm bank authorisation
PSD2_PAYMENT_STATUS_SETTLEDThe payment was settled successfullyReconcile and close the charge
PSD2_PAYMENT_STATUS_PENDING_SETTLEDThe payment is pending final settlementKeep financial tracking active
PSD2_PAYMENT_STATUS_REJECTEDThe payment was rejectedHandle the incident or retry

Emission rules and idempotency ​

PSD2 events follow specific rules to avoid duplicates and guarantee functional consistency.

Event deduplication. Before emitting a PSD2 webhook, Zertiban verifies that no event has already been sent for the same payment and the same PSD2 status. This guarantees delivery idempotency and prevents functional duplicates.

Special restriction for rejected payments. The PSD2_PAYMENT_STATUS_REJECTED event is only emitted if the payment has previously reached a valid prior transactional state in its life cycle. This keeps the functional sequence of financial states consistent.

PSD2_PAYMENT_STATUS_PENDING ​

json
{
  "metadata": {
    "apiVersion": "v1",
    "businessUuid": "3b90ee0e-f85e-4591-a0b2-5c785a860334"
  },
  "eventType": "PSD2_PAYMENT_STATUS_PENDING",
  "eventUuid": "778fb46b-f31f-524c-87da-fc25e8c2f99e",
  "timestamp": "2026-09-17T09:41:05.233Z",
  "resource": {
    "paymentUuid": "14c56ab6-d0f0-4b13-9a9a-d9e722aff880",
    "psd2Payment": {
      "status": {
        "status": "PAYMENT_STATUS_PENDING",
        "code": "PENDING",
        "step": "PAYMENT_STATUS_PENDING"
      }
    }
  }
}
json
{
  "metadata": {
    "apiVersion": "v1",
    "businessUuid": "3b90ee0e-f85e-4591-a0b2-5c785a860334",
    "collaboration": {
      "businessUuid": "208da71f-aac8-4a74-8a3d-c07fa7cca9f6"
    }
  },
  "eventType": "PSD2_PAYMENT_STATUS_PENDING",
  "eventUuid": "778fb46b-f31f-524c-87da-fc25e8c2f99e",
  "timestamp": "2026-09-17T09:41:05.233Z",
  "resource": {
    "paymentUuid": "14c56ab6-d0f0-4b13-9a9a-d9e722aff880",
    "psd2Payment": {
      "status": {
        "status": "PAYMENT_STATUS_PENDING",
        "code": "PENDING",
        "step": "PAYMENT_STATUS_PENDING"
      }
    }
  }
}

PSD2_PAYMENT_STATUS_AUTHORIZED ​

json
{
  "metadata": {
    "apiVersion": "v1",
    "businessUuid": "3b90ee0e-f85e-4591-a0b2-5c785a860334"
  },
  "eventType": "PSD2_PAYMENT_STATUS_AUTHORIZED",
  "eventUuid": "0904353e-f46f-550c-99c7-0744ca63f4cf",
  "timestamp": "2026-09-17T09:41:09.871Z",
  "resource": {
    "paymentUuid": "14c56ab6-d0f0-4b13-9a9a-d9e722aff880",
    "psd2Payment": {
      "status": {
        "status": "PAYMENT_DETAILS_VALID_AUTHORIZED",
        "code": "AUTHORIZED",
        "step": "PAYMENT_DETAILS_AUTHORIZED_VALID"
      }
    }
  }
}
json
{
  "metadata": {
    "apiVersion": "v1",
    "businessUuid": "3b90ee0e-f85e-4591-a0b2-5c785a860334",
    "collaboration": {
      "businessUuid": "208da71f-aac8-4a74-8a3d-c07fa7cca9f6"
    }
  },
  "eventType": "PSD2_PAYMENT_STATUS_AUTHORIZED",
  "eventUuid": "0904353e-f46f-550c-99c7-0744ca63f4cf",
  "timestamp": "2026-09-17T09:41:09.871Z",
  "resource": {
    "paymentUuid": "14c56ab6-d0f0-4b13-9a9a-d9e722aff880",
    "psd2Payment": {
      "status": {
        "status": "PAYMENT_DETAILS_VALID_AUTHORIZED",
        "code": "AUTHORIZED",
        "step": "PAYMENT_DETAILS_AUTHORIZED_VALID"
      }
    }
  }
}

Other psd2Payment.status variants. The rest of the body is identical.

json
{
  "status": {
    "status": "PAYMENT_DETAILS_AUTHORIZED_FAILED",
    "code": "AUTHORIZED",
    "step": "PAYMENT_DETAILS_AUTHORIZED_FAILED"
  }
}
json
{
  "status": {
    "status": "PAYMENT_DETAILS_AUTHORIZED_REJECTED",
    "code": "AUTHORIZED",
    "step": "PAYMENT_DETAILS_AUTHORIZED_REJECTED"
  }
}

PSD2_PAYMENT_STATUS_PENDING_SETTLED ​

json
{
  "metadata": {
    "apiVersion": "v1",
    "businessUuid": "3b90ee0e-f85e-4591-a0b2-5c785a860334"
  },
  "eventType": "PSD2_PAYMENT_STATUS_PENDING_SETTLED",
  "eventUuid": "85a73fb3-00d0-58f5-8a82-fff1336e30c5",
  "timestamp": "2026-09-17T09:41:10.406Z",
  "resource": {
    "paymentUuid": "14c56ab6-d0f0-4b13-9a9a-d9e722aff880",
    "psd2Payment": {
      "status": {
        "status": "PAYMENT_DETAILS_VALID_PENDING_SETTLED",
        "code": "PENDING_SETTLED",
        "step": "PAYMENT_DETAILS_VALID_PENDING_SETTLED"
      }
    }
  }
}
json
{
  "metadata": {
    "apiVersion": "v1",
    "businessUuid": "3b90ee0e-f85e-4591-a0b2-5c785a860334",
    "collaboration": {
      "businessUuid": "208da71f-aac8-4a74-8a3d-c07fa7cca9f6"
    }
  },
  "eventType": "PSD2_PAYMENT_STATUS_PENDING_SETTLED",
  "eventUuid": "85a73fb3-00d0-58f5-8a82-fff1336e30c5",
  "timestamp": "2026-09-17T09:41:10.406Z",
  "resource": {
    "paymentUuid": "14c56ab6-d0f0-4b13-9a9a-d9e722aff880",
    "psd2Payment": {
      "status": {
        "status": "PAYMENT_DETAILS_VALID_PENDING_SETTLED",
        "code": "PENDING_SETTLED",
        "step": "PAYMENT_DETAILS_VALID_PENDING_SETTLED"
      }
    }
  }
}

Other psd2Payment.status variants. The rest of the body is identical.

json
{
  "status": {
    "status": "PAYMENT_DETAILS_PENDING_SETTLED_FAILED",
    "code": "PENDING_SETTLED",
    "step": "PAYMENT_DETAILS_PENDING_SETTLED_FAILED"
  }
}
json
{
  "status": {
    "status": "PAYMENT_DETAILS_PENDING_SETTLED_REJECTED",
    "code": "PENDING_SETTLED",
    "step": "PAYMENT_DETAILS_PENDING_SETTLED_REJECTED"
  }
}

PSD2_PAYMENT_STATUS_SETTLED ​

json
{
  "metadata": {
    "apiVersion": "v1",
    "businessUuid": "3b90ee0e-f85e-4591-a0b2-5c785a860334"
  },
  "eventType": "PSD2_PAYMENT_STATUS_SETTLED",
  "eventUuid": "33936899-3ca5-5345-9c8e-0ce358bed0a3",
  "timestamp": "2026-09-17T14:02:51.640Z",
  "resource": {
    "paymentUuid": "14c56ab6-d0f0-4b13-9a9a-d9e722aff880",
    "psd2Payment": {
      "status": {
        "status": "PAYMENT_DETAILS_VALID_SETTLED",
        "code": "SETTLED",
        "step": "PAYMENT_DETAILS_SETTLED_VALID"
      }
    }
  }
}
json
{
  "metadata": {
    "apiVersion": "v1",
    "businessUuid": "3b90ee0e-f85e-4591-a0b2-5c785a860334",
    "collaboration": {
      "businessUuid": "208da71f-aac8-4a74-8a3d-c07fa7cca9f6"
    }
  },
  "eventType": "PSD2_PAYMENT_STATUS_SETTLED",
  "eventUuid": "33936899-3ca5-5345-9c8e-0ce358bed0a3",
  "timestamp": "2026-09-17T14:02:51.640Z",
  "resource": {
    "paymentUuid": "14c56ab6-d0f0-4b13-9a9a-d9e722aff880",
    "psd2Payment": {
      "status": {
        "status": "PAYMENT_DETAILS_VALID_SETTLED",
        "code": "SETTLED",
        "step": "PAYMENT_DETAILS_SETTLED_VALID"
      }
    }
  }
}

Other psd2Payment.status variants. The rest of the body is identical.

json
{
  "status": {
    "status": "PAYMENT_DETAILS_SETTLED_FAILED",
    "code": "SETTLED",
    "step": "PAYMENT_DETAILS_SETTLED_FAILED"
  }
}
json
{
  "status": {
    "status": "PAYMENT_DETAILS_SETTLED_REJECTED",
    "code": "SETTLED",
    "step": "PAYMENT_DETAILS_SETTLED_REJECTED"
  }
}

PSD2_PAYMENT_STATUS_REJECTED ​

json
{
  "metadata": {
    "apiVersion": "v1",
    "businessUuid": "3b90ee0e-f85e-4591-a0b2-5c785a860334"
  },
  "eventType": "PSD2_PAYMENT_STATUS_REJECTED",
  "eventUuid": "fdeb032c-9380-549e-b05e-23dfa2e90a64",
  "timestamp": "2026-09-17T09:43:18.512Z",
  "resource": {
    "paymentUuid": "6f1e9c3b-2a8d-4e7f-b5c0-9d4a2e8f1b77",
    "psd2Payment": {
      "status": {
        "status": "PAYMENT_STATUS_REJECTED_PAYMENT_REJECTED",
        "code": "REJECTED",
        "step": "PAYMENT_STATUS_REJECTED"
      }
    }
  }
}
json
{
  "metadata": {
    "apiVersion": "v1",
    "businessUuid": "3b90ee0e-f85e-4591-a0b2-5c785a860334",
    "collaboration": {
      "businessUuid": "208da71f-aac8-4a74-8a3d-c07fa7cca9f6"
    }
  },
  "eventType": "PSD2_PAYMENT_STATUS_REJECTED",
  "eventUuid": "fdeb032c-9380-549e-b05e-23dfa2e90a64",
  "timestamp": "2026-09-17T09:43:18.512Z",
  "resource": {
    "paymentUuid": "6f1e9c3b-2a8d-4e7f-b5c0-9d4a2e8f1b77",
    "psd2Payment": {
      "status": {
        "status": "PAYMENT_STATUS_REJECTED_PAYMENT_REJECTED",
        "code": "REJECTED",
        "step": "PAYMENT_STATUS_REJECTED"
      }
    }
  }
}

Organisation events ​

This family exists for Partners and Agents. A collaborator registers client organisations and cannot operate on their behalf until they are active; BUSINESS_* events are what tell it so.

They sit outside the transactional cycle: they report an organisation's state, not a charge. If you integrate Zertiban for your own organisation they add nothing — you already know when you completed your own registration.

EventWhen it is emittedSuggested action
BUSINESS_ACTIVATEDA client organisation completes its registration and becomes activeIssue a delegated token for it and start operating

BUSINESS_ACTIVATED ​

The resource carries the activated organisation's UUID in uuid and its state in status. It has no externalId, and resource.uuid matches metadata.businessUuid:

json
{
  "metadata": {
    "apiVersion": "v1",
    "businessUuid": "3b90ee0e-f85e-4591-a0b2-5c785a860334"
  },
  "eventType": "BUSINESS_ACTIVATED",
  "eventUuid": "4abd98ec-3b8a-5e1a-b2c0-829fb0125869",
  "timestamp": "2026-09-16T16:12:40.207Z",
  "resource": {
    "uuid": "3b90ee0e-f85e-4591-a0b2-5c785a860334",
    "status": "ACTIVE"
  }
}
json
{
  "metadata": {
    "apiVersion": "v1",
    "businessUuid": "3b90ee0e-f85e-4591-a0b2-5c785a860334",
    "collaboration": {
      "businessUuid": "208da71f-aac8-4a74-8a3d-c07fa7cca9f6"
    }
  },
  "eventType": "BUSINESS_ACTIVATED",
  "eventUuid": "4abd98ec-3b8a-5e1a-b2c0-829fb0125869",
  "timestamp": "2026-09-16T16:12:40.207Z",
  "resource": {
    "uuid": "3b90ee0e-f85e-4591-a0b2-5c785a860334",
    "status": "ACTIVE"
  }
}

If the registration is attributed to several collaborators, the organisation receives the copy without collaboration and each collaborator receives its own carrying its own identifier (b47d2e91-6c0a-4f5e-8a3d-1e9c7b2f4d58 for the second one).

resource.uuid is the UUID of the client organisation that has just been activated: the one you will pass as target_tenant when requesting the delegated token. metadata.collaboration.businessUuid is your own collaborator UUID, the one the registration was attributed to. If the registration is attributed to several collaborators, each one receives its own copy carrying its own identifier.

You must have the type subscribed on your webhook: having an endpoint registered does not imply receiving it. And deduplicate by eventUuid, which is identical across every copy of the same event and every one of its retries.

What does resource contain in each event? ​

The resource payload depends on the event type:

Event typeContents
FLOW_*Aggregate information about the flow
OPERATION_*Operation information
PSD2_PAYMENT_*PSD2 payment information
BUSINESS_*uuid and status of the organisation concerned

Functional recommendations ​

Use PSD2 events for bank reconciliation ​

PSD2_PAYMENT_* events represent the real financial state of the payment and are the best source for bank reconciliation, ERP updates, treasury and financial automation.

Use OPERATION_COMPLETED for UX and business logic ​

The OPERATION_COMPLETED event represents the functional completion of the user experience and is typically used to release orders, mark invoices, show confirmations or advance business processes.

Idempotent webhook consumers ​

Every webhook consumer must be designed to tolerate retries, duplicate events and out-of-order delivery. Persist eventUuid and apply idempotent processing, see Delivery and Retries.

The webhook endpoint should verify the signature, persist the event, respond 200 OK and process in the background. This improves resilience and avoids unnecessary retries.