Skip to content
Back to skills

Ucp Payment Authentication

ASecurity

Implement the UCP Payment Authentication extension (`dev.ucp.common.payment.authentication`) — browser-surface actions for device data collection and 3DS challenge during a payment attempt, including the ready/done handshake and origin validation. Use when adding 3-D Secure or strong customer authentication to a UCP checkout.

  • 39 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added September 22, 2026
ai-agentsrustbashgitsecurity

Security analysis

A100/100

Scanned September 22, 2026

npx -y skills add OrcaQubits/agentic-commerce-skills-plugins --skill ucp-payment-authentication --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Ucp Payment Authentication?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Ucp Payment Authentication
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/orcaqubits-ucp-payment-authentication-0a45a2af/badge)](https://www.skillsdirectory.com/skills/orcaqubits-ucp-payment-authentication-0a45a2af)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: ucp-payment-authentication
description: Implement the UCP Payment Authentication extension (`dev.ucp.common.payment.authentication`) — browser-surface actions for device data collection and 3DS challenge during a payment attempt, including the ready/done handshake and origin validation. Use when adding 3-D Secure or strong customer authentication to a UCP checkout.
allowed-tools: Read, Write, Edit, Bash, Grep, Glob, WebSearch, WebFetch
---

# UCP Payment Authentication Extension

## Before writing code

**Fetch live spec**: Web-search `site:ucp.dev specification payment extensions authentication` and fetch the extension page plus the two action pages (`device-data-collection`, `three-ds-challenge`) for the exact action config fields and handshake message names. This extension touches payment security — do not implement it from memory.

## Conceptual Architecture

### What it does, and what it does not

The extension standardizes the **browser-surface interactions** a platform may need to process while a payment attempt is underway. It extends the checkout capability with namespace `dev.ucp.common.payment.authentication`.

It deliberately **does not replace EMV 3DS protocol details**. UCP carries *where the surface lives and when to show it*; the 3DS protocol itself remains between the issuer, the network, and the payment handler.

### Two actions

| Action | Namespace | Surface |
|--------|-----------|---------|
| Device Data Collection | `dev.ucp.common.payment.device_data_collection` | **Invisible**, browser-capable — collects device fingerprinting data |
| 3DS Challenge | `dev.ucp.common.payment.three_ds_challenge` | **Buyer-facing** — presents the authentication challenge |

Device data collection is invisible by design. Rendering it visibly, or skipping it because "nothing shows", breaks the authentication that follows.

### Action occurrence fields

Each emitted action carries:

- `id` — unique action identifier
- `payment_instrument_id` — which payment instrument in the checkout this applies to
- `url` — the surface endpoint, **validated against handler-approved origins**

### Sequencing

The business emits **device data collection first** (if needed), waits for completion, then emits the **3DS challenge in a subsequent checkout response**. These are two round-trips, not one payload. A platform that tries to render both at once has misread the flow.

### The ready handshake

Both surfaces follow the same three-step handshake:

1. Surface sends `action.ready`
2. Platform confirms
3. Surface signals `action.done` or `action.error`

The confirmation step exists so the platform can guarantee the surface is mounted and isolated before the authentication flow starts.

### Platform responsibilities

- **Validate origins** against the handler-approved list before loading any surface `url`.
- **Maintain isolation** — the surface must not be able to reach into the host page.
- **Reconcile outcomes against the authoritative checkout state.** An `action.done` is a signal that the surface finished, *not* proof that authentication succeeded. The checkout response is authoritative; re-read it.

## Implementation Guidance

- Treat `url` as untrusted until origin-validated, every time — not once at configuration.
- Handle `action.error` and timeout as distinct paths; a challenge the buyer abandons is not the same as one that failed.
- Never infer payment success from the action handshake. Complete the checkout and read the result.
- Test the human-abandonment path explicitly; it is the most common real-world outcome after "success".
- Reference implementation: https://github.com/Universal-Commerce-Protocol/samples

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…