Skip to content
Sections

Guest payments

Claim a widget transition for its saved receiver

POST/public/guest-payment-transitions/{transitionId}/claim

At the configured canonical checkout origin, proves the private transport permit and revalidates retained native authority under canonical native H1 before Access and transition locks. Atomically binds the existing handoff fields to the receiver capability digest, handoff digest and opaque context key already generated and saved by this top-level receiver. The handoff keeps the original transition deadline. Repeating the exact tuple returns its first acknowledgement after current financial or exact original-receipt authorization, including after redemption and later checkout consumption; another receiver tuple conflicts. A missing saved receiver cannot rebind the permit and must preserve an unknown outcome. Continue through ordinary handoff redemption and the existing checkout/journal; this action creates no financial ledger, consent or provider operation.

Authentication

A personal credential is supplied in body: guest-payment-widget-transition-permit.

Connection guide

Parameters

transitionIdPath · Required

Exact noncredential transition UUID from the private POST body.

string · uuid
Full definition
{
  "format": "uuid",
  "type": "string",
  "example": "9b6163a8-afea-4877-818b-8e2ae28a2845"
}
originHeader · Required

Actual canonical top-level checkout origin, or that exact destination derived by its trusted POST-body bridge.

string
Full definition
{
  "type": "string",
  "maxLength": 2048,
  "example": "example"
}

Request body

Required

Private saved permit and the receiver capability digest, handoff digest and opaque context key saved before this call.

application/json

ClaimGuestPaymentTransitionDto
Full definition
{
  "$ref": "#/components/schemas/ClaimGuestPaymentTransitionDto"
}

Responses

200Private no-store acknowledgement of the first receiver binding, with the same context key, access UUID, destination and fixed deadline on every authorized replay.
GuestPaymentTransitionClaimReceiptDto
Full definition
{
  "$ref": "#/components/schemas/GuestPaymentTransitionClaimReceiptDto"
}
Example response · 200 · application/json
{
  "transitionId": "863d2796-5dc7-4cf6-8e5b-c010833c0e1d",
  "accessId": "b93bc84d-84db-4161-840b-c3c7a7875b1d",
  "expiresAt": "2026-12-31T18:00:00.000Z",
  "destinationOrigin": "https://hallify.example.test",
  "receiverContextKey": "synthetic-example-credentialxxxxxxxxxxxxxxx"
}
400The transition UUID, permit, receiver digest, context key or origin has an invalid representation.
TranslatedErrorDto
Full definition
{
  "$ref": "#/components/schemas/TranslatedErrorDto"
}
Example response · 400 · application/json
{
  "statusCode": 400,
  "error": "errors:http.badRequest",
  "code": "HTTP_BAD_REQUEST",
  "message": "errors:http.badRequest",
  "translationKey": "errors:http.badRequest"
}
404The permit, trusted destination, unclaimed deadline, current native authority, WIDGET source or exact original receipt is unavailable.
TranslatedErrorDto
Full definition
{
  "$ref": "#/components/schemas/TranslatedErrorDto"
}
Example response · 404 · application/json
{
  "statusCode": 404,
  "error": "errors:http.notFound",
  "code": "HTTP_NOT_FOUND",
  "message": "errors:http.notFound",
  "translationKey": "errors:http.notFound"
}
409The permit is already bound to another receiver tuple, the native source changed, or concurrent state could not be stabilized. Do not replace the receiver to recover an unknown outcome.
TranslatedErrorDto
Full definition
{
  "$ref": "#/components/schemas/TranslatedErrorDto"
}
Example response · 409 · application/json
{
  "statusCode": 409,
  "error": "errors:http.conflict",
  "code": "HTTP_CONFLICT",
  "message": "errors:http.conflict",
  "translationKey": "errors:http.conflict"
}
503The isolated widget frame origin configuration is unavailable or invalid.
TranslatedErrorDto
Full definition
{
  "$ref": "#/components/schemas/TranslatedErrorDto"
}
Example response · 503 · application/json
{
  "statusCode": 503,
  "error": "errors:http.serviceUnavailable",
  "code": "HTTP_SERVICE_UNAVAILABLE",
  "message": "errors:http.serviceUnavailable",
  "translationKey": "errors:http.serviceUnavailable"
}

Schemas

ClaimGuestPaymentTransitionDto

One-use widget transport permit and the tuple generated and privately saved by the trusted top-level receiver. Raw receiver capability and handoff remain local until ordinary redemption.

permitRequired

Exact private transport permit received in the fixed-destination POST body. This secret never appears in a URL or parent message.

string
Full definition
{
  "type": "string",
  "minLength": 48,
  "maxLength": 48,
  "pattern": "^gpw1_[A-Za-z0-9_-]{43}$",
  "example": "gpw1_AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
  "writeOnly": true,
  "description": "Exact private transport permit received in the fixed-destination POST body. This secret never appears in a URL or parent message."
}
recipientCapabilityHashRequired

SHA-256 hex digest of the complete fresh gpa1_ capability already saved by this receiver.

string
Full definition
{
  "type": "string",
  "minLength": 64,
  "maxLength": 64,
  "pattern": "^[a-f0-9]{64}$",
  "writeOnly": true,
  "description": "SHA-256 hex digest of the complete fresh gpa1_ capability already saved by this receiver.",
  "example": "deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef"
}
handoffHashRequired

SHA-256 hex digest of the complete fresh gph1_ handoff already saved by this receiver.

string
Full definition
{
  "type": "string",
  "minLength": 64,
  "maxLength": 64,
  "pattern": "^[a-f0-9]{64}$",
  "writeOnly": true,
  "description": "SHA-256 hex digest of the complete fresh gph1_ handoff already saved by this receiver.",
  "example": "deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef"
}
receiverContextKeyRequired

Opaque context key generated with at least 32 random bytes and privately saved with the receiver tuple. It contains no capability, source identifier or personal data and cannot be replaced after claim.

string
Full definition
{
  "type": "string",
  "minLength": 43,
  "maxLength": 128,
  "pattern": "^[A-Za-z0-9_-]{43,128}$",
  "writeOnly": true,
  "description": "Opaque context key generated with at least 32 random bytes and privately saved with the receiver tuple. It contains no capability, source identifier or personal data and cannot be replaced after claim.",
  "example": "synthetic-example-credentialxxxxxxxxxxxxxxx"
}
Full definition
{
  "type": "object",
  "properties": {
    "permit": {
      "type": "string",
      "minLength": 48,
      "maxLength": 48,
      "pattern": "^gpw1_[A-Za-z0-9_-]{43}$",
      "example": "gpw1_AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
      "writeOnly": true,
      "description": "Exact private transport permit received in the fixed-destination POST body. This secret never appears in a URL or parent message."
    },
    "recipientCapabilityHash": {
      "type": "string",
      "minLength": 64,
      "maxLength": 64,
      "pattern": "^[a-f0-9]{64}$",
      "writeOnly": true,
      "description": "SHA-256 hex digest of the complete fresh gpa1_ capability already saved by this receiver.",
      "example": "deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef"
    },
    "handoffHash": {
      "type": "string",
      "minLength": 64,
      "maxLength": 64,
      "pattern": "^[a-f0-9]{64}$",
      "writeOnly": true,
      "description": "SHA-256 hex digest of the complete fresh gph1_ handoff already saved by this receiver.",
      "example": "deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef"
    },
    "receiverContextKey": {
      "type": "string",
      "minLength": 43,
      "maxLength": 128,
      "pattern": "^[A-Za-z0-9_-]{43,128}$",
      "writeOnly": true,
      "description": "Opaque context key generated with at least 32 random bytes and privately saved with the receiver tuple. It contains no capability, source identifier or personal data and cannot be replaced after claim.",
      "example": "synthetic-example-credentialxxxxxxxxxxxxxxx"
    }
  },
  "description": "One-use widget transport permit and the tuple generated and privately saved by the trusted top-level receiver. Raw receiver capability and handoff remain local until ordinary redemption.",
  "required": [
    "permit",
    "recipientCapabilityHash",
    "handoffHash",
    "receiverContextKey"
  ],
  "example": {
    "permit": "gpw1_AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
    "recipientCapabilityHash": "deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef",
    "handoffHash": "deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef",
    "receiverContextKey": "synthetic-example-credentialxxxxxxxxxxxxxxx"
  }
}
GuestPaymentTransitionClaimReceiptDto

Private acknowledgement that the existing handoff fields are bound to the exact saved receiver tuple. Continue with ordinary handoff redemption and checkout or original-receipt recovery.

transitionIdRequired

Exact caller-saved noncredential transition UUID.

string · uuid
Full definition
{
  "type": "string",
  "format": "uuid",
  "description": "Exact caller-saved noncredential transition UUID.",
  "example": "863d2796-5dc7-4cf6-8e5b-c010833c0e1d"
}
accessIdRequired

Exact existing payment access context. The identifier grants no payment or receipt access.

string · uuid
Full definition
{
  "type": "string",
  "format": "uuid",
  "description": "Exact existing payment access context. The identifier grants no payment or receipt access.",
  "example": "b93bc84d-84db-4161-840b-c3c7a7875b1d"
}
expiresAtRequired

Frozen initial claim and handoff deadline, at most sixty seconds from preparation and within original native and financial or receipt authority. Replays return this same value, including after it has passed; they never renew authority.

string · date-time
Full definition
{
  "type": "string",
  "format": "date-time",
  "description": "Frozen initial claim and handoff deadline, at most sixty seconds from preparation and within original native and financial or receipt authority. Replays return this same value, including after it has passed; they never renew authority.",
  "example": "2026-12-31T18:00:00.000Z"
}
destinationOriginRequired

Server-selected canonical checkout origin for the private top-level POST receiver. No caller-controlled return or redirect destination is accepted.

string · uri
Full definition
{
  "type": "string",
  "format": "uri",
  "maxLength": 2048,
  "description": "Server-selected canonical checkout origin for the private top-level POST receiver. No caller-controlled return or redirect destination is accepted.",
  "example": "https://hallify.example.test"
}
receiverContextKeyRequired

The same opaque receiver context key supplied on the first claim. Losing its saved private tuple cannot be recovered by choosing a new receiver.

string
Full definition
{
  "type": "string",
  "minLength": 43,
  "maxLength": 128,
  "pattern": "^[A-Za-z0-9_-]{43,128}$",
  "description": "The same opaque receiver context key supplied on the first claim. Losing its saved private tuple cannot be recovered by choosing a new receiver.",
  "example": "synthetic-example-credentialxxxxxxxxxxxxxxx"
}
Full definition
{
  "type": "object",
  "properties": {
    "transitionId": {
      "type": "string",
      "format": "uuid",
      "description": "Exact caller-saved noncredential transition UUID.",
      "example": "863d2796-5dc7-4cf6-8e5b-c010833c0e1d"
    },
    "accessId": {
      "type": "string",
      "format": "uuid",
      "description": "Exact existing payment access context. The identifier grants no payment or receipt access.",
      "example": "b93bc84d-84db-4161-840b-c3c7a7875b1d"
    },
    "expiresAt": {
      "type": "string",
      "format": "date-time",
      "description": "Frozen initial claim and handoff deadline, at most sixty seconds from preparation and within original native and financial or receipt authority. Replays return this same value, including after it has passed; they never renew authority.",
      "example": "2026-12-31T18:00:00.000Z"
    },
    "destinationOrigin": {
      "type": "string",
      "format": "uri",
      "maxLength": 2048,
      "description": "Server-selected canonical checkout origin for the private top-level POST receiver. No caller-controlled return or redirect destination is accepted.",
      "example": "https://hallify.example.test"
    },
    "receiverContextKey": {
      "type": "string",
      "minLength": 43,
      "maxLength": 128,
      "pattern": "^[A-Za-z0-9_-]{43,128}$",
      "description": "The same opaque receiver context key supplied on the first claim. Losing its saved private tuple cannot be recovered by choosing a new receiver.",
      "example": "synthetic-example-credentialxxxxxxxxxxxxxxx"
    }
  },
  "description": "Private acknowledgement that the existing handoff fields are bound to the exact saved receiver tuple. Continue with ordinary handoff redemption and checkout or original-receipt recovery.",
  "required": [
    "transitionId",
    "accessId",
    "expiresAt",
    "destinationOrigin",
    "receiverContextKey"
  ],
  "example": {
    "transitionId": "863d2796-5dc7-4cf6-8e5b-c010833c0e1d",
    "accessId": "b93bc84d-84db-4161-840b-c3c7a7875b1d",
    "expiresAt": "2026-12-31T18:00:00.000Z",
    "destinationOrigin": "https://hallify.example.test",
    "receiverContextKey": "synthetic-example-credentialxxxxxxxxxxxxxxx"
  }
}
TranslatedErrorDto

Stable error envelope emitted by the global HTTP exception boundary. Domain-specific machine data, when present, is nested under details.

statusCodeRequired

HTTP status code repeated from the response.

integer
Full definition
{
  "type": "integer",
  "description": "HTTP status code repeated from the response.",
  "example": 400
}
errorRequired

Translation key for the HTTP category, such as errors:http.conflict. The specific cause is identified by code and translationKey.

string
Full definition
{
  "type": "string",
  "description": "Translation key for the HTTP category, such as errors:http.conflict. The specific cause is identified by code and translationKey.",
  "example": "errors.request.invalid"
}
codeRequired

Stable machine-readable domain code, or an HTTP_* fallback when no domain code is provided. Branch on this field and the HTTP status; localized wording never controls retries or business decisions.

string
Full definition
{
  "type": "string",
  "example": "HTTP_BAD_REQUEST",
  "description": "Stable machine-readable domain code, or an HTTP_* fallback when no domain code is provided. Branch on this field and the HTTP status; localized wording never controls retries or business decisions."
}
messageRequired

Translation key, identical to translationKey. The API does not return localized display text. Resolve the key and translationValues in the consuming application.

string
Full definition
{
  "type": "string",
  "example": "errors:http.badRequest",
  "description": "Translation key, identical to translationKey. The API does not return localized display text. Resolve the key and translationValues in the consuming application."
}
translationKeyRequired

Canonical translation key, identical to message. Status-specific errors:http.* keys cover unspecified failures. Public keys and EN/RU explanations are listed in Developers; unknown keys require a localized client fallback.

string
Full definition
{
  "type": "string",
  "example": "errors:http.badRequest",
  "description": "Canonical translation key, identical to message. Status-specific errors:http.* keys cover unspecified failures. Public keys and EN/RU explanations are listed in Developers; unknown keys require a localized client fallback."
}
translationValuesOptional

Optional scalar values for placeholders in the translation. Treat values as data, escape them when rendering, and never use them as translation options.

object
Full definition
{
  "type": "object",
  "additionalProperties": {
    "oneOf": [
      {
        "type": "string",
        "example": "example"
      },
      {
        "type": "number",
        "example": 0
      },
      {
        "type": "boolean",
        "example": true
      }
    ],
    "example": "example"
  },
  "description": "Optional scalar values for placeholders in the translation. Treat values as data, escape them when rendering, and never use them as translation options.",
  "example": {
    "exampleKey": "example"
  }
}
validationErrorsOptional

Field validation failures with translation keys and stable validator codes. Submitted values and raw validator text are not included.

array
Full definition
{
  "description": "Field validation failures with translation keys and stable validator codes. Submitted values and raw validator text are not included.",
  "type": "array",
  "items": {
    "$ref": "#/components/schemas/ValidationErrorDto"
  },
  "example": [
    {
      "field": "email",
      "translationKey": "validation:isEmail",
      "code": "isEmail",
      "message": "validation:isEmail"
    }
  ]
}
detailsOptional

Optional domain-specific blocker or validation details

oneOf
Full definition
{
  "description": "Optional domain-specific blocker or validation details",
  "oneOf": [
    {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/JsonValue"
      },
      "example": [
        "example"
      ]
    },
    {
      "type": "object",
      "additionalProperties": {
        "$ref": "#/components/schemas/JsonValue"
      },
      "example": {
        "exampleKey": "example"
      }
    }
  ],
  "example": [
    "example"
  ]
}
Full definition
{
  "type": "object",
  "properties": {
    "statusCode": {
      "type": "integer",
      "description": "HTTP status code repeated from the response.",
      "example": 400
    },
    "error": {
      "type": "string",
      "description": "Translation key for the HTTP category, such as errors:http.conflict. The specific cause is identified by code and translationKey.",
      "example": "errors.request.invalid"
    },
    "code": {
      "type": "string",
      "example": "HTTP_BAD_REQUEST",
      "description": "Stable machine-readable domain code, or an HTTP_* fallback when no domain code is provided. Branch on this field and the HTTP status; localized wording never controls retries or business decisions."
    },
    "message": {
      "type": "string",
      "example": "errors:http.badRequest",
      "description": "Translation key, identical to translationKey. The API does not return localized display text. Resolve the key and translationValues in the consuming application."
    },
    "translationKey": {
      "type": "string",
      "example": "errors:http.badRequest",
      "description": "Canonical translation key, identical to message. Status-specific errors:http.* keys cover unspecified failures. Public keys and EN/RU explanations are listed in Developers; unknown keys require a localized client fallback."
    },
    "translationValues": {
      "type": "object",
      "additionalProperties": {
        "oneOf": [
          {
            "type": "string",
            "example": "example"
          },
          {
            "type": "number",
            "example": 0
          },
          {
            "type": "boolean",
            "example": true
          }
        ],
        "example": "example"
      },
      "description": "Optional scalar values for placeholders in the translation. Treat values as data, escape them when rendering, and never use them as translation options.",
      "example": {
        "exampleKey": "example"
      }
    },
    "validationErrors": {
      "description": "Field validation failures with translation keys and stable validator codes. Submitted values and raw validator text are not included.",
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/ValidationErrorDto"
      },
      "example": [
        {
          "field": "email",
          "translationKey": "validation:isEmail",
          "code": "isEmail",
          "message": "validation:isEmail"
        }
      ]
    },
    "details": {
      "description": "Optional domain-specific blocker or validation details",
      "oneOf": [
        {
          "type": "array",
          "items": {
            "$ref": "#/components/schemas/JsonValue"
          },
          "example": [
            "example"
          ]
        },
        {
          "type": "object",
          "additionalProperties": {
            "$ref": "#/components/schemas/JsonValue"
          },
          "example": {
            "exampleKey": "example"
          }
        }
      ],
      "example": [
        "example"
      ]
    }
  },
  "required": [
    "statusCode",
    "error",
    "code",
    "message",
    "translationKey"
  ],
  "description": "Stable error envelope emitted by the global HTTP exception boundary. Domain-specific machine data, when present, is nested under details.",
  "example": {
    "statusCode": 400,
    "error": "errors:http.badRequest",
    "code": "HTTP_BAD_REQUEST",
    "message": "errors:http.badRequest",
    "translationKey": "errors:http.badRequest"
  }
}
ValidationErrorDto

Field validation failure with a field path, stable validator code and a translation key. Human-readable text belongs to the consuming application.

fieldRequired

Public field path. Nested properties and array indices are separated by dots.

string
Full definition
{
  "type": "string",
  "example": "email",
  "description": "Public field path. Nested properties and array indices are separated by dots."
}
translationKeyRequired

Translation key for this validator, identical to message. Resolve it using a client dictionary; see the public Developers error catalog.

string
Full definition
{
  "type": "string",
  "example": "validation:isEmail",
  "description": "Translation key for this validator, identical to message. Resolve it using a client dictionary; see the public Developers error catalog."
}
codeRequired

Stable validator identifier for this field failure. Custom validators may define additional identifiers.

string
Full definition
{
  "type": "string",
  "example": "isEmail",
  "description": "Stable validator identifier for this field failure. Custom validators may define additional identifiers."
}
messageRequired

Translation key describing this field validation failure, identical to translationKey. Submitted values and validator prose are not included.

string
Full definition
{
  "type": "string",
  "example": "validation:isEmail",
  "description": "Translation key describing this field validation failure, identical to translationKey. Submitted values and validator prose are not included."
}
translationValuesOptional

Optional scalar values for placeholders in the translation. Treat values as data, escape them when rendering, and never use them as translation options.

object
Full definition
{
  "type": "object",
  "additionalProperties": {
    "oneOf": [
      {
        "type": "string",
        "example": "example"
      },
      {
        "type": "number",
        "example": 0
      },
      {
        "type": "boolean",
        "example": true
      }
    ],
    "example": "example"
  },
  "description": "Optional scalar values for placeholders in the translation. Treat values as data, escape them when rendering, and never use them as translation options.",
  "example": {
    "exampleKey": "example"
  }
}
Full definition
{
  "type": "object",
  "properties": {
    "field": {
      "type": "string",
      "example": "email",
      "description": "Public field path. Nested properties and array indices are separated by dots."
    },
    "translationKey": {
      "type": "string",
      "example": "validation:isEmail",
      "description": "Translation key for this validator, identical to message. Resolve it using a client dictionary; see the public Developers error catalog."
    },
    "code": {
      "type": "string",
      "example": "isEmail",
      "description": "Stable validator identifier for this field failure. Custom validators may define additional identifiers."
    },
    "message": {
      "type": "string",
      "example": "validation:isEmail",
      "description": "Translation key describing this field validation failure, identical to translationKey. Submitted values and validator prose are not included."
    },
    "translationValues": {
      "type": "object",
      "additionalProperties": {
        "oneOf": [
          {
            "type": "string",
            "example": "example"
          },
          {
            "type": "number",
            "example": 0
          },
          {
            "type": "boolean",
            "example": true
          }
        ],
        "example": "example"
      },
      "description": "Optional scalar values for placeholders in the translation. Treat values as data, escape them when rendering, and never use them as translation options.",
      "example": {
        "exampleKey": "example"
      }
    }
  },
  "required": [
    "field",
    "translationKey",
    "code",
    "message"
  ],
  "description": "Field validation failure with a field path, stable validator code and a translation key. Human-readable text belongs to the consuming application.",
  "example": {
    "field": "email",
    "translationKey": "validation:isEmail",
    "code": "isEmail",
    "message": "validation:isEmail"
  }
}
JsonValue

Recursively JSON-safe value used only where the owning contract intentionally allows free-form structured data.

Full definition
{
  "oneOf": [
    {
      "type": "string",
      "nullable": true,
      "example": "example"
    },
    {
      "type": "number",
      "example": 0
    },
    {
      "type": "boolean",
      "example": true
    },
    {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/JsonValue"
      },
      "example": [
        "example"
      ]
    },
    {
      "type": "object",
      "additionalProperties": {
        "$ref": "#/components/schemas/JsonValue"
      },
      "example": {
        "exampleKey": "example"
      }
    }
  ],
  "description": "Recursively JSON-safe value used only where the owning contract intentionally allows free-form structured data.",
  "example": "example"
}

Hallify uses essential cookies and optional analytics.

Essential cookies keep sign-in, locale, and theme preferences working. Analytics is off until you choose to allow it.