> For the complete documentation index, see [llms.txt](https://docs.toolkit.equs.ai/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.toolkit.equs.ai/docs/issuance/issuance-results.md).

# Issuance Results

Read the state of an Offer after you've created it

Every Offer you create leaves a record, whatever becomes of it. Collected, refused, or ignored until it expired - the outcome is readable, and it is the only trace of the issuance that the platform keeps once the claim values are gone.

The record is deliberately thin. It holds your own user ID, which Schema and Issuer were involved, when it happened, the current state, and the revocation handle - `statusList.uri` and `statusList.idx`, the pair you pass to revoke the credential later. It never holds claim values or contact details, so nothing in it identifies the Holder to anyone but you.

### Reading a result

Read one Offer by its `uriId`, or page through all of them.

{% hint style="info" icon="rectangle-api" %}
All calls mentioned on this page are on the [Control API](https://docs.toolkit.equs.ai/docs/issuance/pages/MvAvsnLQU3ER2hOIIDU2#id-2.4.1-apis).
{% endhint %}

## Get Credential Offer

> Fetches Credential Offer

```json
{"openapi":"3.0.0","info":{"title":"EqusDTK Control API Documentation","version":"0.1.2"},"tags":[{"name":"Issuance","description":""}],"security":[{"sp":[]},{"tenant":[]},{"sp":[]}],"components":{"securitySchemes":{"sp":{"type":"http","scheme":"bearer","bearerFormat":"JWT","description":"Service Provider. Token of the Service Provider client in the `agents` realm, with no `tenantId` claim. Authorize one bearer scheme at a time."},"tenant":{"type":"http","scheme":"bearer","bearerFormat":"JWT","description":"Tenant. Token of a Tenant machine client or of a Tenant portal user, carrying the `tenantId` claim. Authorize one bearer scheme at a time."}},"schemas":{"GetCredentialOfferResponse":{"type":"object","properties":{"uriId":{"type":"string","description":"Credential offer URI unique ID"},"userId":{"type":"object","description":"User unique ID"},"state":{"type":"string","description":"Current lifecycle state of the credential offer.","enum":["pending","issued","accepted","declined","neglected","revoked","failed","compromised"]},"credLifetime":{"type":"object","description":"Lifetime, in seconds, of the credential issued from this offer."},"assurance":{"type":"object","description":"Assurance level applied to the credential issued from this offer."},"offerDate":{"format":"date-time","type":"string","description":"Date and time the credential offer was created."},"updatedDate":{"format":"date-time","type":"string","description":"Date and time the credential offer was last updated."},"credDefId":{"type":"string","description":"Credential definition unique ID"},"credentialIssuer":{"type":"string","description":"Base URL of the issuer that produced this credential offer."},"issuerId":{"type":"string","description":"Issuer unique ID"},"statusList":{"description":"Status list entry used to track and revoke the issued credential, if any.","allOf":[{"$ref":"#/components/schemas/StatusInfo"}]},"byReference":{"type":"string","description":"Deep link the wallet uses to fetch this credential offer by reference."}},"required":["uriId","state","credLifetime","assurance","offerDate","updatedDate","credDefId","credentialIssuer","issuerId","byReference"]},"StatusInfo":{"type":"object","properties":{"uri":{"type":"string","description":"URI of the status list credential that tracks this offer."},"idx":{"type":"number","description":"Index of the offer within its status list."}},"required":["uri","idx"]}}},"paths":{"/api/v1/issuance/offers/{id}":{"get":{"description":"Fetches Credential Offer","operationId":"OfferController_getCredentialOffer_api/v1","parameters":[{"name":"id","required":true,"in":"path","description":"Credential offer unique ID","schema":{"type":"string"}}],"responses":{"200":{"description":"When Offer i retrieved successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetCredentialOfferResponse"}}}},"404":{"description":"When no offer with such id exists for this user."}},"summary":"Get Credential Offer","tags":["Issuance"]}}}}
```

## Get Credential Offers

> Fetches All credential Offers

```json
{"openapi":"3.0.0","info":{"title":"EqusDTK Control API Documentation","version":"0.1.2"},"tags":[{"name":"Issuance","description":""}],"security":[{"sp":[]},{"tenant":[]},{"sp":[]}],"components":{"securitySchemes":{"sp":{"type":"http","scheme":"bearer","bearerFormat":"JWT","description":"Service Provider. Token of the Service Provider client in the `agents` realm, with no `tenantId` claim. Authorize one bearer scheme at a time."},"tenant":{"type":"http","scheme":"bearer","bearerFormat":"JWT","description":"Tenant. Token of a Tenant machine client or of a Tenant portal user, carrying the `tenantId` claim. Authorize one bearer scheme at a time."}},"schemas":{"GetCredentialOffersResponse":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/GetCredentialOffersResponseItem"}},"pagination":{"$ref":"#/components/schemas/PaginationData"}},"required":["items","pagination"]},"GetCredentialOffersResponseItem":{"type":"object","properties":{"uriId":{"type":"string","description":"Credential offer URI unique ID"},"userId":{"type":"object","description":"User unique ID"},"state":{"type":"string","description":"Current lifecycle state of the credential offer.","enum":["pending","issued","accepted","declined","neglected","revoked","failed","compromised"]},"credLifetime":{"type":"object","description":"Lifetime, in seconds, of the credential issued from this offer."},"assurance":{"type":"object","description":"Assurance level applied to the credential issued from this offer."},"offerDate":{"format":"date-time","type":"string","description":"Date and time the credential offer was created."},"updatedDate":{"format":"date-time","type":"string","description":"Date and time the credential offer was last updated."},"credDefId":{"type":"string","description":"Credential definition unique ID"},"credentialIssuer":{"type":"string","description":"Base URL of the issuer that produced this credential offer."},"issuerId":{"type":"string","description":"Issuer unique ID"}},"required":["uriId","state","credLifetime","assurance","offerDate","updatedDate","credDefId","credentialIssuer","issuerId"]},"PaginationData":{"type":"object","properties":{"page":{"type":"number"},"limit":{"type":"number"}},"required":["page","limit"]}}},"paths":{"/api/v1/issuance/offers":{"get":{"description":"Fetches All credential Offers","operationId":"OfferController_getCredentialOffers_api/v1","parameters":[{"name":"page","required":false,"in":"query","schema":{"default":1,"type":"number"}},{"name":"limit","required":false,"in":"query","schema":{"default":10,"type":"number"}}],"responses":{"200":{"description":"When Offers are retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetCredentialOffersResponse"}}}}},"summary":"Get Credential Offers","tags":["Issuance"]}}}}
```

### How a result moves

```mermaid
stateDiagram-v2
    direction LR
    [*] --> pending: you create the Offer
    pending --> issued: wallet redeems the code, VC signed
    pending --> neglected: Offer expires unredeemed
    pending --> compromised: too many wrong tx_code attempts
    issued --> accepted: wallet confirms it stored the credential
    issued --> declined: wallet reports it deleted the credential
    issued --> failed: wallet could not store it
    accepted --> declined: the Holder deletes it later
    accepted --> revoked: you revoke
    issued --> revoked: you revoke
```

### If you poll

Stop on `accepted` for success, or on `declined`, `failed`, `neglected` or `compromised`. Don't stop on `issued` - the wallet reports back after it, so the outcome is usually one step away. Give the loop its own deadline, since a `pending` Offer can simply lapse to `neglected`.

`accepted` can still change later: to `declined` if the Holder deletes the credential, or `revoked` if you revoke it. Read the record again rather than trusting a stored result.

{% hint style="info" %}
There is no `expired` state. Expiry comes from the credential's own lifetime, recorded when it is issued.
{% endhint %}


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.toolkit.equs.ai/docs/issuance/issuance-results.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
