# Person Credential Issuance Flow ```mermaid sequenceDiagram participant issuer as IAS participant holder as BC Wallet alt Issuer Initiated (after connecting) issuer->>holder: Start Issuance (ca.bc.gov.flows/person/start) holder-->>issuer: OK end holder->>issuer: Start Issuance (ca.bc.gov.flows/person/start) issuer-->>holder: OK issuer->>holder: Wait for 'Proof Request' holder-->>issuer: OK issuer->>holder: App Attestation Proof Request holder-->>issuer: App Attestation Verifiable Presentation issuer->>holder: Wait for 'Credential Offer' issuer-->>holder: OK issuer->>holder: Credential Offer holder-->>issuer: Credential Offer Accepeted issuer->>holder: Issue Credential holder-->>issuer: Issue Credential (ack) issuer->>holder: Issuance Complete holder-->>issuer: OK ``` ## State Diagram ```mermaid --- title: Holder --- stateDiagram-v2 started: ⏱️ Started waiting_for_pr : ⏱️Waiting 'X' seconds for Proof Request 'Y' pr_received : Proof Request Received presentation_sent : Presentation Sent waiting_for_co : ⏱️Waiting 'X' seconds for Credential Offer 'Y' co_received : Credential Offer Received co_accepted : Credential Offer Accepted credential_received: Credential Received/Issued [*] --> started: ➡️ ca.bc.gov.flows/person/start started --> waiting_for_pr: ⬅️ ca.bc.gov.flows/person/wait waiting_for_pr --> pr_received pr_received --> presentation_sent: ⚡ presentation_sent --> waiting_for_co: ⬅️ ca.bc.gov.flows/person/wait waiting_for_co --> co_received co_received --> co_accepted: 👤 co_accepted --> credential_received credential_received --> [*]: ⬅️ ca.bc.gov.flows/person/done ``` ⚡: Automated (no user interaction) 👤: User interaction required ⬅️: incoming message ➡️: outgoing message ⏱️: Waiting for some signal ## DRPC API ### Wallet's Received Messages ```json! [ { "jsonrpc": "2.0", "method": "flow/create", "params":{ "id": "flow_123", } }, { "jsonrpc": "2.0", "method": "flow/step/create", "params":{ "flow":"flow_123", "id": "step1", "action": "wait_for_presentation", "reference": "some_proof_request_id?" } }, { "jsonrpc": "2.0", "method": "flow/step/create", "params": { "flow":"flow_123", "id": "step2", "action": "wait_for_issuance", "timeout": [5, 10], "reference": "some_credential_offer_id?" "requires": ["step1"] } }, { "jsonrpc": "2.0", "method": "flow/run", "params":{ "id": "flow_123", } }, ] ``` Note: wait for 1 step with no `requires` ```json [ {"jsonrpc": "2.0", "result": true}, {"jsonrpc": "2.0", "result": true}, {"jsonrpc": "2.0", "result": true}, {"jsonrpc": "2.0", "result": true}, ] ``` ### Wallet's Sent Messages ```json! [ {"jsonrpc": "2.0", "method": "flow/step/update", "params":{"type": "step", "id": "flow_123", "status": "done"}}, {"jsonrpc": "2.0", "method": "flow/step/update", "params":{"type": "step", "id": "flow_123", "status": "done", "error":{"code":"", "message": ""}}}, ] ``` ### Wallet's Received Messages ```json! [ {"jsonrpc": "2.0", "method": "flow/flow/update", "params":{"type": "step", "id": "flow_123", "status": "done", "error":{"code":"", "message": ""}}}, ] ```