Overview
When a customer completes an Imprint application, you learn the outcome in two complementary ways:- The SDK result — returned client-side, in the browser or mobile app, the moment the customer exits the Imprint application experience (see Step 3 of Apply for a loan or credit card).
- The application event notification — a signed, server-to-server webhook
Imprint
POSTs to your configured endpoint when a credit decision is reached.
New to event notifications? Start with
Subscribe to event notifications
for setup, signature verification, and retry/idempotency handling.
SDK result vs. event notification
Why the status sets differ
The two channels answer different questions:- The SDK result answers “What happened in this browser/app session?” — including the customer walking away or launching with a bad token.
- The webhook answers “Where is this application in Imprint’s pipeline?” — it fires at
each server-side milestone, both intermediate (e.g.
IDV_REQUIRED,OFFERS_AVAILABLE) and terminal (OFFER_ACCEPTED,REJECTED).
ERROR) is a session outcome, not an application event — so it exists only
on the SDK side and never produces a webhook. IN_PROGRESS is also never a webhook
status, but it appears in two other places with different meanings, so do not treat them
as the same signal:
- The SDK result
IN_PROGRESSmeans the customer exited before finishing (abandonment). Abandonment is not an application event and never produces a webhook. - The Application API status
IN_PROGRESSmeans the application is a draft: it has been created and not yet submitted. No webhook is sent for a draft. The first webhook for an application isEVALUATING, sent when decisioning starts after submit.
OFFER_ACCEPTED and REJECTED are terminal decisions that appear in both channels.
Use this mapping to decide what to expect from an SDK result:
When the webhook fires
Imprint sends anAPPLICATION event notification when decisioning starts after
an application is submitted and when it reaches a terminal state, plus intermediate
notifications when the applicant must complete identity verification, when an
application is pended for manual review, when at least one offer becomes
available, and, for secured / funding products, when their deposit is funded:
EVALUATING is an application-level notification — it fires once when
decisioning starts after submit, and its payload is not scoped to a specific
product. There is no notification before it: a draft application (Application
API status IN_PROGRESS) and an abandoned SDK session (SDK result
IN_PROGRESS) never produce a webhook.
IDV_REQUIRED is an application-level notification — its payload is not scoped
to a specific product. It is recoverable: once the applicant finishes identity
verification the application returns to underwriting, so expect a later
notification (OFFERS_AVAILABLE, OFFER_ACCEPTED, or REJECTED).
PENDING_REVIEW is an application-level notification — its payload is not scoped
to a specific product. It is recoverable: once manual underwriting review clears,
the application returns to underwriting, so expect a later notification
(OFFERS_AVAILABLE, OFFER_ACCEPTED, or REJECTED).
FROZEN is an application-level notification — its payload is not scoped to a
specific product. It is recoverable: once the applicant lifts the credit-bureau
freeze the application can re-enter underwriting, so expect a later notification
(OFFERS_AVAILABLE, OFFER_ACCEPTED, or REJECTED).
OFFERS_AVAILABLE is an application-level notification — it fires once every
product on the application has been decisioned and at least one offer is
available, not when the first offer is produced, and its payload is not scoped
to a specific product.
ACCOUNT_FUNDED is only emitted for secured / funding products.
After the EVALUATING notification, the interval before the next one is usually
seconds, but it can occasionally be longer while Imprint completes decisioning. No
notification is sent in the meantime and no action is required on your side: keep the
application open and wait for the next notification. If you poll Get Application in the
applicant’s session, stop after 30 seconds and show an under-review state; the webhook
delivers the result. Do not submit the application again or create a new one for the
same applicant. This applies
only to a submitted application that is being decisioned; a draft that has not been
submitted produces no notification at all, however long the applicant takes.
A
REJECTED notification is only delivered when Imprint can give you enough
context to act on it — i.e. the application carries a partner_customer_id
and/or maps to a known customer. If neither is available, the rejection is not
sent, because it would not be actionable on your side.Payload
See also the Application Event reference.Recommended handling
1
Update the UI from the SDK result
On SDK exit, react to the client-side result immediately — for
OFFER_ACCEPTED, show a success banner or route the customer to a page to
learn more about the credit card rewards. Treat this as provisional.2
Confirm and persist from the webhook
When the
APPLICATION webhook arrives, verify the signature, then record the
decision against the customer_id / partner_customer_id as the source of
truth for fulfillment, accounting, and downstream systems. When present,
store expires_at so you can re-engage customers who have not finished
before the application expires.3
Deduplicate
Use
application_id, status, and updated_at to ignore duplicate
deliveries (Imprint retries until you acknowledge with a 2XX).4
Don't block on a webhook for non-decisions
IN_PROGRESS and ERROR SDK results never produce a webhook. Handle them
entirely client-side.