3DS Intents

Create and poll 3D Secure verification intents. During client-side checkout the SDK creates a 3DS intent for a payment method, redirects the cardholder to the issuer challenge, and polls the intent for completion. Callable with a publishable key.

export FRAME_API_KEY='sk_sandbox_...'

The 3DS Intent object

Attributes
idstring

Unique identifier for the 3DS intent.

objectstring

String representing the object's type. Always three_ds_verification_intent.

customernullable string

ID of the customer associated with the underlying charge intent, if any.

payment_methodnullable string

ID of the payment method being verified.

statusstring

Current status of the verification (e.g. issued, verified, failed).

challenge_urlnullable string

URL the client redirects the cardholder to for the issuer challenge. Present while the intent is issued, otherwise null.

completednullable integer

Unix timestamp of when verification completed, or null while still in progress.

createdinteger

Unix timestamp of when the intent was created.

updatedinteger

Unix timestamp of when the intent was last updated.

livemodeboolean

true if the intent exists in live mode, false in test mode.

THE 3DS INTENT OBJECT
{
  "id": "3ds_intent_1a2b3c",
  "object": "three_ds_verification_intent",
  "customer": "cus_1a2b3c",
  "payment_method": "pm_1a2b3c",
  "status": "issued",
  "challenge_url": "https://api.framepayments.com/v1/evervault/3ds/callback/3ds_intent_1a2b3c",
  "completed": null,
  "created": 1721010605,
  "updated": 1721010605,
  "livemode": false
}

Create 3DS intent

Creates a 3D Secure verification intent for a payment method. The client SDK calls this during checkout to begin issuer authentication, then redirects the cardholder to the returned challenge_url.

Callable with a publishable key. The payment method must belong to the authenticated merchant.

If the payment method does not exist, or exists but is not eligible for a new verification (for example, one is already in progress), the request returns an identical 404 so that a publishable-key caller cannot use the response to enumerate payment methods.

Body parameters
payment_method_idstring

ID of the payment method to verify.

Returns

The created 3DS verification intent

POST/v1/3ds/intents
curl --request POST \
  --url https://api.framepayments.com/v1/3ds/intents \
  --header 'Authorization: Bearer API_KEY' \
  --header 'Content-Type: application/json' \
  --data '{
  "payment_method_id": "pm_1a2b3c"
}'
RESPONSE
{
  "id": "00000000-0000-4000-8000-000000000001",
  "customer": "00000000-0000-4000-8000-000000000002",
  "payment_method": "00000000-0000-4000-8000-000000000003",
  "object": "three_ds_verification_intent",
  "livemode": false,
  "status": "issued",
  "challenge_url": "https://3ds.evervault.com/?team=team_123&app=app_456&session=3ds_session_123&redirect=https%3A%2F%2Fapi.example.com%2Fv1%2Fevervault%2F3ds%2Fcallback%2F00000000-0000-4000-8000-000000000001",
  "completed": null,
  "created": 1745107200,
  "updated": 1745107200
}

Retrieve 3DS intent

Retrieves a 3D Secure verification intent by ID. The client SDK polls this endpoint to observe the challenge status and detect completion.

Callable with a publishable key.

Path parameters
idstring

3DS intent ID

Returns

The 3DS verification intent

GET/v1/3ds/intents/{id}
curl --request GET \
  --url https://api.framepayments.com/v1/3ds/intents/a70cd72f-e74a-40f2-96a2-3f60714aac4a \
  --header 'Authorization: Bearer API_KEY'
RESPONSE
{
  "id": "00000000-0000-4000-8000-000000000001",
  "customer": "00000000-0000-4000-8000-000000000002",
  "payment_method": "00000000-0000-4000-8000-000000000003",
  "object": "three_ds_verification_intent",
  "livemode": false,
  "status": "issued",
  "challenge_url": "https://3ds.evervault.com/?team=team_123&app=app_456&session=00000000-0000-4000-8000-000000000004&redirect=https%3A%2F%2Fapi.example.com%2Fv1%2Fevervault%2F3ds%2Fcallback%2F00000000-0000-4000-8000-000000000001",
  "completed": null,
  "created": 1745107200,
  "updated": 1745107200
}

Resend 3DS challenge

Re-issues the 3D Secure challenge for an existing verification intent — for example when the cardholder requests a new one-time code.

Callable with a publishable key.

Path parameters
idstring

3DS intent ID

Returns

The re-issued 3DS verification intent

POST/v1/3ds/intents/{id}/resend
curl --request POST \
  --url https://api.framepayments.com/v1/3ds/intents/a70cd72f-e74a-40f2-96a2-3f60714aac4a/resend \
  --header 'Authorization: Bearer API_KEY'
RESPONSE
{
  "id": "00000000-0000-4000-8000-000000000001",
  "customer": "00000000-0000-4000-8000-000000000002",
  "payment_method": "00000000-0000-4000-8000-000000000003",
  "object": "three_ds_verification_intent",
  "livemode": false,
  "status": "issued",
  "challenge_url": "https://3ds.evervault.com/?team=team_123&app=app_456&session=3ds_session_123&redirect=https%3A%2F%2Fapi.example.com%2Fv1%2Fevervault%2F3ds%2Fcallback%2F00000000-0000-4000-8000-000000000001",
  "completed": null,
  "created": 1745107200,
  "updated": 1745107200
}
Frame Assistant

Ask anything about Frame's APIs and products