Skip to content
v0.3

payment.attempt.fail

End ONE payment attempt, leaving the intent untouched so a late approval still reconciles. attempt_failed is an AFFIRMATION by the app that this attempt will never settle positive — because it voided it, cancelled it, or asked the PSP for the final status. An app that cannot affirm that must not send it: the kernel never infers death from silence or from a timeout, and ending an attempt is what authorises a second real charge.

  • Scope: public
  • System: no
  • Reachable from: an ANONYMOUS face — no credential, and never /v1/commands/*. Which path serves it is not derivable from the registry; see the anonymous faces.
  • Events: payment.attempt_failed
{
"properties": {
"payment_id": {
"minLength": 1,
"type": "string"
},
"provider_ref": {
"minLength": 1,
"type": "string"
},
"reason": {
"enum": [
"insufficient_funds",
"card_rejected",
"invalid_data",
"expired",
"fraud_suspected",
"timeout",
"other"
],
"type": "string"
}
},
"required": [
"payment_id",
"provider_ref"
],
"type": "object"
}
{
"additionalProperties": false,
"properties": {
"attempt_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"payment_id": {
"type": "string"
}
},
"required": [
"payment_id",
"attempt_id"
],
"type": "object"
}

validation_failed (400) · unauthorized (401) · forbidden (403) · conflict (409) · internal (500)