Skip to content

Issuer does not receive webhook on holder decline of OOB credential offer #3866

@nb-pratik-bhimani

Description

@nb-pratik-bhimani

When a holder declines a credential offer, the webhook behavior differs between connection-based and OOB credential offers.

Environment:

  • ACA-Py version: 1.3.0
  • Holder: BC Wallet (Mobile) / Cloud Wallet
  • Issuer: ACA-Py agent (cloud)

Case 1: Connection-based credential offer

  • Issuer sends credential offer.
  • Holder declines from BC Wallet (Mobile) or Cloud Wallet (problem-report: issuance-abandoned).
  • Issuer receives webhook with state: abandoned.

Case 2: OOB credential offer

  • Issuer sends OOB invitation with credential offer attached.
  • Holder scans QR code.
  • Holder declines from BC Wallet (Mobile) or Cloud Wallet.
  • Holder does receive a webhook for the decline.
  • No webhook is received on issuer side.
  • Logs show only problem report handling on issuer side :
2025-09-01 11:25:11,056 acapy_agent.transport.pack_format DEBUG Expanded message: {'@type': 'https://didcomm.org/issue-credential/2.0/problem-report', '@id': 'd77a6f4a-3458-496c-bfe3-3ca0eeb1b564', 'description': {'en': 'Declined', 'code': 'issuance-abandoned'}, '~thread': {'thid': '5c3d7eec-151b-4d97-823d-35efbc9818c2', 'pthid': '619033fe-c5b7-4033-9710-70233cb5c65a'}}
2025-09-01 11:25:11,057 aiohttp.access INFO 172.21.0.25 [01/Sep/2025:11:25:11 +0000] "POST / HTTP/1.1" 200 112 "-" "okhttp/4.9.2"
2025-09-01 11:25:11,057 acapy_agent.utils.classloader DEBUG Successfully loaded class V20CredProblemReportSchema from module acapy_agent.protocols.issue_credential.v2_0.messages.cred_problem_report
2025-09-01 11:25:11,057 acapy_agent.utils.classloader DEBUG Successfully loaded class ThreadDecoratorSchema from module acapy_agent.messaging.decorators.thread_decorator
2025-09-01 11:25:11,060 acapy_agent.utils.classloader DEBUG Successfully loaded class CredProblemReportHandler from module acapy_agent.protocols.issue_credential.v2_0.handlers.cred_problem_report_handler
2025-09-01 11:25:11,060 acapy_agent.messaging.base_handler DEBUG Issue-credential v2.0 problem report handler called with context <RequestContext(_connection_ready=True, _connection_record=<ConnRecord(_id='0132cf35-01c1-43e5-a5cf-d27a5934600b', _last_state='active', _new_with_id=False, state='active', created_at='2025-09-01T11:22:34.397032Z', updated_at='2025-09-01T11:24:38.204318Z', my_did='did:peer:4zQmep6ySUPterinDdeqgtYSwETWjmUnsQettKXUZSiNSiNx', their_did='did:peer:1zQmSsu7A2tz2j8UqvL5JjVr9HSx5iHyaTHE8TRiL93NEzAN', their_label='My Wallet - 2112', their_role='invitee', invitation_key='EWBHTnNC9YuksMsT56d3xcVgrzvVVu6TzgZGHQrsaVR4', invitation_msg_id='619033fe-c5b7-4033-9710-70233cb5c65a', request_id='4f6aa6c8-bd17-454d-9269-358f88abde5f', error_msg=None, inbound_connection_id=None, accept='auto', invitation_mode='once', alias=None, their_public_did=None, connection_protocol='didexchange/1.1')>, _context=<acapy_agent.config.injection_context.InjectionContext object at 0x7fb197e45610>, _message=<V20CredProblemReport(_message_id='d77a6f4a-3458-496c-bfe3-3ca0eeb1b564', _message_new_id=False, _message_decorators=<DecoratorSet{~thread: <ThreadDecorator(_thid='5c3d7eec-151b-4d97-823d-35efbc9818c2', _pthid='619033fe-c5b7-4033-9710-70233cb5c65a', _sender_order=None, _received_orders=None)>}>, _message_type='https://didcomm.org/issue-credential/2.0/problem-report', description={'en': 'Declined', 'code': 'issuance-abandoned'}, problem_items=None, who_retries=None, fix_hint=None, impact=None, where=None, noticed_time=None, tracking_uri=None, escalation_uri=None)>, _message_receipt=<MessageReceipt(_connection_id=None, _direct_response_mode=None, _in_time='2025-09-01T11:25:11.054694Z', _raw_message='{"@type":"https://didcomm.org/issue-credential/2.0/problem-report","@id":"d77a6f4a-3458-496c-bfe3-3ca0eeb1b564","description":{"en":"Declined","code":"issuance-abandoned"},"~thread":{"thid":"5c3d7eec-151b-4d97-823d-35efbc9818c2","pthid":"619033fe-c5b7-4033-9710-70233cb5c65a"}}', _recipient_verkey='Fg4wnrgpjdVtiiWGyCDaeUYD71mVACKVkEc2Xxk6Sze2', _recipient_did='did:peer:4zQmep6ySUPterinDdeqgtYSwETWjmUnsQettKXUZSiNSiNx:zma8FNHhFHZjpFgACi9VrHrLbn1gz2BfA3hHjKUFCTgMv3eSUkQHutsftDKuYiUAnqfD6syevN4KEneCG669u6TXCL8DZKP8Fo74GF8UBeMgBdziUvH1BYFkEbwNaJrBL8fMafUq1bV4qMeJ2V2dShwhs1Q7RL4DhHDpSmUrSbZ81ycn6gPAN68ZBseRNz68gPTRj3Tvq2iEc7DkE48j3cjeqvUpp9P2jrNXTzMwsqmatk3w698rZTPrqQ4CXwFbeyDAuE87hYcC2dcGyxeDrsEFo66G32XmgQVrLcDAYLM6fb3DNqfT9wXGTL3RX9BpCoJo3gBLMNk9mCz8Pfb7jnkGfg1HxZvjhLGiz8AZwWJm6AJQVhBvNdNJroZ3KwcWLW8P5M2z9fme5WCtokukGrQLYC9GhHQEZbCzk9SmoEkQEAiqm3Sn4Uiqa2r9QsKUrmqYPtm5cGHRAxSPpe2rq6FFoVfiZ3joydsXkCWjaADiCeK3bN3EwXpH7eouiAA7au4vhyGUXHEpVWp7Lme3BZnXfBavaXuVJeaPxVcjKPvTsoBc2zXQaQthZj9mT1hyeeN25iVzDdED91ABFkRfLDFef6r13TbEgKMkH7yV6eiRw3eg4', _recipient_did_public=None, _sender_did='did:peer:1zQmSsu7A2tz2j8UqvL5JjVr9HSx5iHyaTHE8TRiL93NEzAN', _sender_verkey='6Bo2XX7i74vxEcPRfkdJP9vDersw9D7fLKYxavAiLr7M', _thread_id='5c3d7eec-151b-4d97-823d-35efbc9818c2', _parent_thread_id='619033fe-c5b7-4033-9710-70233cb5c65a', didcomm_version=<DIDCommVersion.v1: 1>)>, _profile=<AskarProfile(backend=askar, name=dev-vivekorg_wallet)>)>

2025-09-01 11:25:11,063 acapy_agent.messaging.base_handler WARNING Record not found while processing issue-credential v2.0 problem report

Question:

  • Should the issuer receive a webhook (state: abandoned) when a holder declines an OOB credential offer?
  • Or is this expected behavior because no credential exchange record is created until the holder accepts, so ACA-Py has nothing to update?

Note:

  • OOB offer contain the handshake_protocol as well.

Metadata

Metadata

Assignees

No one assigned

    Labels

    help wantedExtra attention is needed

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions