> For the complete documentation index, see [llms.txt](https://docs.teranode.group/tng-identity-documentation/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.teranode.group/tng-identity-documentation/tng-identity-issuers/issuer-api/api-documentation/credential-offers.md).

# Credential Offers

## Credential offer pagination

> Endpoint returns a paginated result of credential offers.\<hr />\*\*Claim-based access control:\*\* \<code>Issuer\_Admin\</code>, \<code>Issuer\_User\</code>, \<code>Issuer\_Auditor\</code>

```json
{"openapi":"3.0.0","info":{"title":"Identity Issuer Backend Documentation","version":"dev"},"servers":[{"url":"{hostname}","description":"Issuer Backend REST API Server","variables":{"hostname":{"default":"https://identity.nchainplatform.com/products/web/$IDENTITY_ENV_ID/issuer/api"}}}],"security":[{},{"bearer":[]}],"components":{"securitySchemes":{"bearer":{"scheme":"bearer","bearerFormat":"JWT","type":"http"}},"schemas":{"PaginatedDto":{"type":"object","properties":{"data":{"title":"Array of entities","type":"array","items":{"type":"object"}},"meta":{"title":"Pagination Metadata","allOf":[{"$ref":"#/components/schemas/PaginatedMetaDto"}]},"links":{"title":"Links to pages","allOf":[{"$ref":"#/components/schemas/PaginatedLinksDto"}]}},"required":["data","meta","links"]},"PaginatedMetaDto":{"type":"object","properties":{"itemsPerPage":{"type":"number","title":"Number of items per page"},"totalItems":{"type":"number","title":"Total number of items"},"currentPage":{"type":"number","title":"Current requested page"},"totalPages":{"type":"number","title":"Total number of pages"},"sortBy":{"type":"array","title":"Sorting by columns","items":{"type":"array","items":{"oneOf":[{"type":"string"},{"type":"string","enum":["ASC","DESC"]}]}}},"filter":{"type":"object","title":"Filters that applied to the query"}},"required":["itemsPerPage","totalItems","currentPage","totalPages"]},"PaginatedLinksDto":{"type":"object","properties":{"first":{"type":"string","title":"Link to first page"},"previous":{"type":"string","title":"Link to previous page"},"current":{"type":"string","title":"Link to current page"},"next":{"type":"string","title":"Link to next page"},"last":{"type":"string","title":"Link to last page"}}},"CredentialOfferWithMinimalOrganisationProfileDetailDto":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"createdBy":{"type":"string","format":"uuid"},"updatedBy":{"type":"string","format":"uuid"},"deletedBy":{"type":"string","format":"uuid"},"createdAt":{"format":"date-time","type":"string"},"updatedAt":{"format":"date-time","type":"string"},"deletedAt":{"format":"date-time","type":"string"},"correlationId":{"type":"string","description":"Defines a organisation which is defined as a correlationId. Must be a value the Issuer is working with! "},"claims":{"description":"A collection of the Credential offer claims","type":"array","items":{"anyOf":[{"$ref":"#/components/schemas/CredentialOfferClaimStringDetailDto"},{"$ref":"#/components/schemas/CredentialOfferClaimNumberDetailDto"},{"$ref":"#/components/schemas/CredentialOfferClaimImageDetailDto"}]}},"email":{"type":"string","description":"The recipient email address","format":"email"},"organisationProfileId":{"type":"string","description":"The organisation profile the credential is associated to.","format":"uuid"},"credentialNames":{"description":"Credential names to be defined in the credential once issued","type":"array","items":{"type":"string"}},"credentialTypes":{"description":"Credential types to be defined in the credential once issued.","type":"array","items":{"type":"string"}},"credentialId":{"type":"string","description":"Credential id to be used when issuing a credential"},"status":{"$ref":"#/components/schemas/CredentialOfferStatusEnum"},"credentialDataSupplierInput":{"type":"object","description":"Data object of credential subject fields.","deprecated":true},"issuer":{"type":"string","description":"Issuer DID. Is set once claimed!"},"subject":{"type":"string","description":"Subject DID. Is set once claimed!"},"issuedAt":{"format":"date-time","type":"string","description":"Date in ISO8601 when claimed"},"referenceId":{"type":"string","description":"Client defined referenceId as string. Is not stored and is only for client references"},"revocationId":{"type":"string","description":"The revocation transaction bound to the credential"},"revocationReason":{"type":"string","description":"Reason for revocation provided by the user requesting this."},"revokedAt":{"format":"date-time","type":"string","description":"Date of revocation in ISO8601"},"revokedBy":{"type":"string","description":"User that revoked the credential"},"expirationDate":{"type":"string","description":"Expiration date of the credential in ISO8601 format. Must be set in the future or today. If not defined the credential will never expire.","format":"date-time"},"emailSent":{"type":"boolean","description":"When true the recipient received the credential issued email"},"revocationEmailSent":{"type":"boolean","description":"When true the recipient received the credential revoked credential via email"},"credentialOfferCollection":{"$ref":"#/components/schemas/CredentialOfferCollectionDetailDto"},"organisationProfile":{"description":"Organisation profile minimal detail","allOf":[{"$ref":"#/components/schemas/PortalApiOrganisationProfileBaseMinimalDto"}]}},"required":["id","correlationId","claims","email","organisationProfileId","credentialId","credentialDataSupplierInput"]},"CredentialOfferClaimStringDetailDto":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"dataType":{"type":"string","description":"String credential claim data type","default":"string","enum":["string"]},"claimName":{"type":"string","description":"String credential claim name"},"claimValue":{"type":"string","description":"Claim value"}},"required":["id","dataType","claimName","claimValue"]},"CredentialOfferClaimNumberDetailDto":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"dataType":{"type":"string","description":"Number credential claim data type","default":"number","enum":["number"]},"claimName":{"type":"string","description":"Number credential claim data type"},"claimValue":{"type":"number","description":"Claim value"}},"required":["id","dataType","claimName","claimValue"]},"CredentialOfferClaimImageDetailDto":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"dataType":{"type":"string","description":"Image credential claim data type","default":"image","enum":["image"]},"claimName":{"type":"string","description":"Image credential claim name"},"claimValue":{"description":"Contains the relevant Image information","allOf":[{"$ref":"#/components/schemas/DetailMediaDto"}]}},"required":["id","dataType","claimName","claimValue"]},"DetailMediaDto":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"mimeType":{"$ref":"#/components/schemas/MimeType"},"keyUrl":{"type":"string"},"filename":{"type":"string"},"type":{"$ref":"#/components/schemas/MediaType"}},"required":["id","mimeType","keyUrl","filename"]},"MimeType":{"type":"string","enum":["image/jpeg","image/png","image/webp"]},"MediaType":{"type":"string","enum":["cover_image","claim_image"]},"CredentialOfferStatusEnum":{"type":"string","description":"Status of the credential offer","enum":["pending","ready_to_claim","issuing","claimed","error","revoked","expired"]},"CredentialOfferCollectionDetailDto":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"createdBy":{"type":"string","format":"uuid"},"createdAt":{"format":"date-time","type":"string"},"name":{"type":"string","minLength":1,"maxLength":50}},"required":["id","name"]},"PortalApiOrganisationProfileBaseMinimalDto":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"}}}}},"paths":{"/private/credential-offers":{"get":{"operationId":"CredentialOffersController_filter","summary":"Credential offer pagination","description":"Endpoint returns a paginated result of credential offers.<hr />**Claim-based access control:** <code>Issuer_Admin</code>, <code>Issuer_User</code>, <code>Issuer_Auditor</code>","parameters":[{"name":"page","required":false,"in":"query","description":"Page number to retrieve.If you provide invalid value the default page number will applied\n        <p>\n             <b>Example: </b> 1\n          </p>\n        <p>\n             <b>Default Value: </b> 1\n          </p>\n        ","schema":{"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Number of records per page.\n      <p>\n             <b>Example: </b> 20\n          </p>\n      <p>\n             <b>Default Value: </b> 20\n          </p>\n      <p>\n             <b>Max Value: </b> 100\n          </p>\n\n      If provided value is greater than max value, max value will be applied.\n      ","schema":{"type":"number"}},{"name":"filter.id","required":false,"in":"query","description":"Filter by id query param.\n          <p>\n             <b>Format: </b> filter.id={$not}:OPERATION:VALUE\n          </p>\n          <p>\n             <b>Example: </b> filter.id=$not:$like:John Doe&filter.id=like:John\n          </p>\n          <h4>Available Operations</h4><ul><li>$in</li></ul>","schema":{"type":"array","items":{"type":"string"}}},{"name":"filter.email","required":false,"in":"query","description":"Filter by email query param.\n          <p>\n             <b>Format: </b> filter.email={$not}:OPERATION:VALUE\n          </p>\n          <p>\n             <b>Example: </b> filter.email=$not:$like:John Doe&filter.email=like:John\n          </p>\n          <h4>Available Operations</h4><ul><li>$eq</li>\n<li>$ilike</li></ul>","schema":{"type":"array","items":{"type":"string"}}},{"name":"filter.credentialId","required":false,"in":"query","description":"Filter by credentialId query param.\n          <p>\n             <b>Format: </b> filter.credentialId={$not}:OPERATION:VALUE\n          </p>\n          <p>\n             <b>Example: </b> filter.credentialId=$not:$like:John Doe&filter.credentialId=like:John\n          </p>\n          <h4>Available Operations</h4><ul><li>$eq</li></ul>","schema":{"type":"array","items":{"type":"string"}}},{"name":"filter.credentialNames","required":false,"in":"query","description":"Filter by credentialNames query param.\n          <p>\n             <b>Format: </b> filter.credentialNames={$not}:OPERATION:VALUE\n          </p>\n          <p>\n             <b>Example: </b> filter.credentialNames=$not:$like:John Doe&filter.credentialNames=like:John\n          </p>\n          <h4>Available Operations</h4><ul><li>$contains</li></ul>","schema":{"type":"array","items":{"type":"string"}}},{"name":"filter.credentialTypes","required":false,"in":"query","description":"Filter by credentialTypes query param.\n          <p>\n             <b>Format: </b> filter.credentialTypes={$not}:OPERATION:VALUE\n          </p>\n          <p>\n             <b>Example: </b> filter.credentialTypes=$not:$like:John Doe&filter.credentialTypes=like:John\n          </p>\n          <h4>Available Operations</h4><ul><li>$contains</li></ul>","schema":{"type":"array","items":{"type":"string"}}},{"name":"filter.correlationId","required":false,"in":"query","description":"Filter by correlationId query param.\n          <p>\n             <b>Format: </b> filter.correlationId={$not}:OPERATION:VALUE\n          </p>\n          <p>\n             <b>Example: </b> filter.correlationId=$not:$like:John Doe&filter.correlationId=like:John\n          </p>\n          <h4>Available Operations</h4><ul><li>$eq</li></ul>","schema":{"type":"array","items":{"type":"string"}}},{"name":"filter.search","required":false,"in":"query","description":"Filter by search query param.\n          <p>\n             <b>Format: </b> filter.search={$not}:OPERATION:VALUE\n          </p>\n          <p>\n             <b>Example: </b> filter.search=$not:$like:John Doe&filter.search=like:John\n          </p>\n          <h4>Available Operations</h4><ul><li>$fulltext</li></ul>","schema":{"type":"array","items":{"type":"string"}}},{"name":"filter.subject","required":false,"in":"query","description":"Filter by subject query param.\n          <p>\n             <b>Format: </b> filter.subject={$not}:OPERATION:VALUE\n          </p>\n          <p>\n             <b>Example: </b> filter.subject=$not:$like:John Doe&filter.subject=like:John\n          </p>\n          <h4>Available Operations</h4><ul><li>$contains</li>\n<li>$eq</li></ul>","schema":{"type":"array","items":{"type":"string"}}},{"name":"filter.issuer","required":false,"in":"query","description":"Filter by issuer query param.\n          <p>\n             <b>Format: </b> filter.issuer={$not}:OPERATION:VALUE\n          </p>\n          <p>\n             <b>Example: </b> filter.issuer=$not:$like:John Doe&filter.issuer=like:John\n          </p>\n          <h4>Available Operations</h4><ul><li>$contains</li>\n<li>$eq</li></ul>","schema":{"type":"array","items":{"type":"string"}}},{"name":"filter.status","required":false,"in":"query","description":"Filter by status query param.\n          <p>\n             <b>Format: </b> filter.status={$not}:OPERATION:VALUE\n          </p>\n          <p>\n             <b>Example: </b> filter.status=$not:$like:John Doe&filter.status=like:John\n          </p>\n          <h4>Available Operations</h4><ul><li>$eq</li></ul>","schema":{"type":"array","items":{"type":"string"}}},{"name":"filter.createdBy","required":false,"in":"query","description":"Filter by createdBy query param.\n          <p>\n             <b>Format: </b> filter.createdBy={$not}:OPERATION:VALUE\n          </p>\n          <p>\n             <b>Example: </b> filter.createdBy=$not:$like:John Doe&filter.createdBy=like:John\n          </p>\n          <h4>Available Operations</h4><ul><li>$eq</li></ul>","schema":{"type":"array","items":{"type":"string"}}},{"name":"filter.updatedBy","required":false,"in":"query","description":"Filter by updatedBy query param.\n          <p>\n             <b>Format: </b> filter.updatedBy={$not}:OPERATION:VALUE\n          </p>\n          <p>\n             <b>Example: </b> filter.updatedBy=$not:$like:John Doe&filter.updatedBy=like:John\n          </p>\n          <h4>Available Operations</h4><ul><li>$eq</li></ul>","schema":{"type":"array","items":{"type":"string"}}},{"name":"filter.createdAt","required":false,"in":"query","description":"Filter by createdAt query param.\n          <p>\n             <b>Format: </b> filter.createdAt={$not}:OPERATION:VALUE\n          </p>\n          <p>\n             <b>Example: </b> filter.createdAt=$not:$like:John Doe&filter.createdAt=like:John\n          </p>\n          <h4>Available Operations</h4><ul><li>$gt</li>\n<li>$lt</li>\n<li>$gte</li>\n<li>$lte</li>\n<li>$eq</li></ul>","schema":{"type":"array","items":{"type":"string"}}},{"name":"filter.updatedAt","required":false,"in":"query","description":"Filter by updatedAt query param.\n          <p>\n             <b>Format: </b> filter.updatedAt={$not}:OPERATION:VALUE\n          </p>\n          <p>\n             <b>Example: </b> filter.updatedAt=$not:$like:John Doe&filter.updatedAt=like:John\n          </p>\n          <h4>Available Operations</h4><ul><li>$gt</li>\n<li>$lt</li>\n<li>$gte</li>\n<li>$lte</li>\n<li>$eq</li></ul>","schema":{"type":"array","items":{"type":"string"}}},{"name":"filter.issuedAt","required":false,"in":"query","description":"Filter by issuedAt query param.\n          <p>\n             <b>Format: </b> filter.issuedAt={$not}:OPERATION:VALUE\n          </p>\n          <p>\n             <b>Example: </b> filter.issuedAt=$not:$like:John Doe&filter.issuedAt=like:John\n          </p>\n          <h4>Available Operations</h4><ul><li>$gt</li>\n<li>$lt</li>\n<li>$gte</li>\n<li>$lte</li>\n<li>$eq</li></ul>","schema":{"type":"array","items":{"type":"string"}}},{"name":"filter.revokedAt","required":false,"in":"query","description":"Filter by revokedAt query param.\n          <p>\n             <b>Format: </b> filter.revokedAt={$not}:OPERATION:VALUE\n          </p>\n          <p>\n             <b>Example: </b> filter.revokedAt=$not:$like:John Doe&filter.revokedAt=like:John\n          </p>\n          <h4>Available Operations</h4><ul><li>$gt</li>\n<li>$lt</li>\n<li>$gte</li>\n<li>$lte</li>\n<li>$eq</li></ul>","schema":{"type":"array","items":{"type":"string"}}},{"name":"filter.expirationDate","required":false,"in":"query","description":"Filter by expirationDate query param.\n          <p>\n             <b>Format: </b> filter.expirationDate={$not}:OPERATION:VALUE\n          </p>\n          <p>\n             <b>Example: </b> filter.expirationDate=$not:$like:John Doe&filter.expirationDate=like:John\n          </p>\n          <h4>Available Operations</h4><ul><li>$gt</li>\n<li>$lt</li>\n<li>$gte</li>\n<li>$lte</li>\n<li>$eq</li></ul>","schema":{"type":"array","items":{"type":"string"}}},{"name":"filter.credentialOfferCollection.id","required":false,"in":"query","description":"Filter by credentialOfferCollection.id query param.\n          <p>\n             <b>Format: </b> filter.credentialOfferCollection.id={$not}:OPERATION:VALUE\n          </p>\n          <p>\n             <b>Example: </b> filter.credentialOfferCollection.id=$not:$like:John Doe&filter.credentialOfferCollection.id=like:John\n          </p>\n          <h4>Available Operations</h4><ul><li>$eq</li></ul>","schema":{"type":"array","items":{"type":"string"}}},{"name":"sortBy","required":false,"in":"query","description":"Parameter to sort by.\n      <p>To sort by multiple fields, just provide query param multiple types. The order in url defines an order of sorting</p>\n      <p>\n             <b>Format: </b> fieldName:DIRECTION\n          </p>\n      <p>\n             <b>Example: </b> sortBy=id:DESC&sortBy=createdAt:ASC\n          </p>\n      <p>\n             <b>Default Value: </b> updatedAt:DESC\n          </p>\n      <h4>Available Fields</h4><ul><li>createdAt</li>\n<li>updatedAt</li>\n<li>issuedAt</li>\n<li>status</li></ul>\n      ","schema":{"type":"array","items":{"type":"string","enum":["createdAt:ASC","createdAt:DESC","updatedAt:ASC","updatedAt:DESC","issuedAt:ASC","issuedAt:DESC","status:ASC","status:DESC"]}}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/PaginatedDto"},{"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/CredentialOfferWithMinimalOrganisationProfileDetailDto"}},"meta":{"properties":{"select":{"type":"array","items":{"type":"string"}},"filter":{"type":"object","properties":{"id":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"email":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"credentialId":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"credentialNames":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"credentialTypes":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"correlationId":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"search":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"subject":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"issuer":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"status":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"createdBy":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"updatedBy":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"createdAt":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"updatedAt":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"issuedAt":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"revokedAt":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"expirationDate":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"credentialOfferCollection.id":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}}}}}}}]}}}},"400":{"description":"Invalid request parameters"},"401":{"description":"Invalid authentication credentials."},"403":{"description":"User does not have a required claim to perform this operation."},"500":{"description":""}},"tags":["Credential Offers"]}}}}
```

## Create credential offers

> Endpoint supports bulk credential offers records handling. Once created you are be able to issue a credential offer from agent using /webapp endpoints.\
> If the agent returns error that the action cannot be completed because it is missing credential offer you must\
> first create the resource here and then try again.\
> \<hr />\*\*Claim-based access control:\*\* \<code>Issuer\_Admin\</code>, \<code>Issuer\_User\</code>

```json
{"openapi":"3.0.0","info":{"title":"Identity Issuer Backend Documentation","version":"dev"},"servers":[{"url":"{hostname}","description":"Issuer Backend REST API Server","variables":{"hostname":{"default":"https://identity.nchainplatform.com/products/web/$IDENTITY_ENV_ID/issuer/api"}}}],"security":[{},{"bearer":[]}],"components":{"securitySchemes":{"bearer":{"scheme":"bearer","bearerFormat":"JWT","type":"http"}},"schemas":{"CredentialOfferBulkBodyDto":{"type":"object","properties":{"correlationId":{"type":"string","description":"Defines a organisation which is defined as a correlationId. Must be a value the Issuer is working with! "},"organisationProfileId":{"type":"string","description":"The organisation profile the credential is associated to.","format":"uuid"},"credentialOffers":{"description":"Bulk credential offers to prepare for issuance for the specified correlationId","type":"array","items":{"$ref":"#/components/schemas/CredentialOfferBodyDto"}},"credentialOfferCollectionId":{"type":"string","format":"uuid","description":"ID of the collection you want to add the credential offers to"}},"required":["correlationId","organisationProfileId","credentialOffers"]},"CredentialOfferBodyDto":{"type":"object","properties":{"email":{"type":"string","description":"The recipient email address","format":"email"},"credentialId":{"type":"string","description":"Credential id to be used when issuing a credential"},"referenceId":{"type":"string","description":"Client defined referenceId as string. Is not stored and is only for client references"},"claims":{"description":"Collection of credential subject fields","type":"array","items":{"anyOf":[{"$ref":"#/components/schemas/CredentialOfferClaimStringCreateDto"},{"$ref":"#/components/schemas/CredentialOfferClaimNumberCreateDto"},{"$ref":"#/components/schemas/CredentialOfferClaimImageCreateDto"}]}},"expirationDate":{"format":"date-time","type":"string","description":"Expiration date of the credential in ISO8601 format. Must be set in the future or today. If not defined the credential will never expire."}},"required":["email","credentialId","claims"]},"CredentialOfferClaimStringCreateDto":{"type":"object","properties":{"dataType":{"type":"string","description":"The credential offer claim data property.","default":"string","enum":["string"]},"claimName":{"type":"string","description":"The credential offer claim name"},"claimValue":{"type":"string","description":"The credential offer claim property value."}},"required":["dataType","claimName","claimValue"]},"CredentialOfferClaimNumberCreateDto":{"type":"object","properties":{"dataType":{"type":"string","description":"The credential offer claim number data type.","default":"number","enum":["number"]},"claimName":{"type":"string","description":"The credential offer claim name"},"claimValue":{"type":"number","description":"The credential offer claim number value."}},"required":["dataType","claimName","claimValue"]},"CredentialOfferClaimImageCreateDto":{"type":"object","properties":{"dataType":{"type":"string","description":"The credential offer claim image data type.","default":"image","enum":["image"]},"claimName":{"type":"string","description":"The credential offer claim name"},"claimValue":{"description":"The credential offer claim image identifier.","allOf":[{"$ref":"#/components/schemas/CreateCredentialOfferClaimImageValueDto"}]}},"required":["dataType","claimName","claimValue"]},"CreateCredentialOfferClaimImageValueDto":{"type":"object","properties":{"id":{"type":"string","format":"uuid"}},"required":["id"]},"CredentialOfferDetailListDto":{"type":"object","properties":{"organisationProfile":{"description":"Organisation profile detail","allOf":[{"$ref":"#/components/schemas/PortalApiOrganisationProfileBaseDto"}]},"credentialOffers":{"type":"array","items":{"$ref":"#/components/schemas/CredentialOfferWithMinimalOrganisationProfileDetailDto"}},"failedCredentialOffers":{"type":"array","items":{"$ref":"#/components/schemas/FailedCreateCredentialTypeDto"}}},"required":["credentialOffers","failedCredentialOffers"]},"PortalApiOrganisationProfileBaseDto":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"createdAt":{"format":"date-time","type":"string"},"updatedAt":{"format":"date-time","type":"string"},"deletedAt":{"format":"date-time","type":"string"},"createdBy":{"type":"string","format":"uuid"},"updatedBy":{"type":"string","format":"uuid"},"deletedBy":{"type":"string","format":"uuid"},"name":{"type":"string"},"isDefault":{"type":"boolean"},"pspEnvironmentId":{"type":"string"},"image":{"$ref":"#/components/schemas/PortalApiDetailMediaDto"}}},"PortalApiDetailMediaDto":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"mimeType":{"$ref":"#/components/schemas/MimeType"},"keyUrl":{"type":"string"},"filename":{"type":"string"}}},"MimeType":{"type":"string","enum":["image/jpeg","image/png","image/webp"]},"CredentialOfferWithMinimalOrganisationProfileDetailDto":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"createdBy":{"type":"string","format":"uuid"},"updatedBy":{"type":"string","format":"uuid"},"deletedBy":{"type":"string","format":"uuid"},"createdAt":{"format":"date-time","type":"string"},"updatedAt":{"format":"date-time","type":"string"},"deletedAt":{"format":"date-time","type":"string"},"correlationId":{"type":"string","description":"Defines a organisation which is defined as a correlationId. Must be a value the Issuer is working with! "},"claims":{"description":"A collection of the Credential offer claims","type":"array","items":{"anyOf":[{"$ref":"#/components/schemas/CredentialOfferClaimStringDetailDto"},{"$ref":"#/components/schemas/CredentialOfferClaimNumberDetailDto"},{"$ref":"#/components/schemas/CredentialOfferClaimImageDetailDto"}]}},"email":{"type":"string","description":"The recipient email address","format":"email"},"organisationProfileId":{"type":"string","description":"The organisation profile the credential is associated to.","format":"uuid"},"credentialNames":{"description":"Credential names to be defined in the credential once issued","type":"array","items":{"type":"string"}},"credentialTypes":{"description":"Credential types to be defined in the credential once issued.","type":"array","items":{"type":"string"}},"credentialId":{"type":"string","description":"Credential id to be used when issuing a credential"},"status":{"$ref":"#/components/schemas/CredentialOfferStatusEnum"},"credentialDataSupplierInput":{"type":"object","description":"Data object of credential subject fields.","deprecated":true},"issuer":{"type":"string","description":"Issuer DID. Is set once claimed!"},"subject":{"type":"string","description":"Subject DID. Is set once claimed!"},"issuedAt":{"format":"date-time","type":"string","description":"Date in ISO8601 when claimed"},"referenceId":{"type":"string","description":"Client defined referenceId as string. Is not stored and is only for client references"},"revocationId":{"type":"string","description":"The revocation transaction bound to the credential"},"revocationReason":{"type":"string","description":"Reason for revocation provided by the user requesting this."},"revokedAt":{"format":"date-time","type":"string","description":"Date of revocation in ISO8601"},"revokedBy":{"type":"string","description":"User that revoked the credential"},"expirationDate":{"type":"string","description":"Expiration date of the credential in ISO8601 format. Must be set in the future or today. If not defined the credential will never expire.","format":"date-time"},"emailSent":{"type":"boolean","description":"When true the recipient received the credential issued email"},"revocationEmailSent":{"type":"boolean","description":"When true the recipient received the credential revoked credential via email"},"credentialOfferCollection":{"$ref":"#/components/schemas/CredentialOfferCollectionDetailDto"},"organisationProfile":{"description":"Organisation profile minimal detail","allOf":[{"$ref":"#/components/schemas/PortalApiOrganisationProfileBaseMinimalDto"}]}},"required":["id","correlationId","claims","email","organisationProfileId","credentialId","credentialDataSupplierInput"]},"CredentialOfferClaimStringDetailDto":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"dataType":{"type":"string","description":"String credential claim data type","default":"string","enum":["string"]},"claimName":{"type":"string","description":"String credential claim name"},"claimValue":{"type":"string","description":"Claim value"}},"required":["id","dataType","claimName","claimValue"]},"CredentialOfferClaimNumberDetailDto":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"dataType":{"type":"string","description":"Number credential claim data type","default":"number","enum":["number"]},"claimName":{"type":"string","description":"Number credential claim data type"},"claimValue":{"type":"number","description":"Claim value"}},"required":["id","dataType","claimName","claimValue"]},"CredentialOfferClaimImageDetailDto":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"dataType":{"type":"string","description":"Image credential claim data type","default":"image","enum":["image"]},"claimName":{"type":"string","description":"Image credential claim name"},"claimValue":{"description":"Contains the relevant Image information","allOf":[{"$ref":"#/components/schemas/DetailMediaDto"}]}},"required":["id","dataType","claimName","claimValue"]},"DetailMediaDto":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"mimeType":{"$ref":"#/components/schemas/MimeType"},"keyUrl":{"type":"string"},"filename":{"type":"string"},"type":{"$ref":"#/components/schemas/MediaType"}},"required":["id","mimeType","keyUrl","filename"]},"MediaType":{"type":"string","enum":["cover_image","claim_image"]},"CredentialOfferStatusEnum":{"type":"string","description":"Status of the credential offer","enum":["pending","ready_to_claim","issuing","claimed","error","revoked","expired"]},"CredentialOfferCollectionDetailDto":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"createdBy":{"type":"string","format":"uuid"},"createdAt":{"format":"date-time","type":"string"},"name":{"type":"string","minLength":1,"maxLength":50}},"required":["id","name"]},"PortalApiOrganisationProfileBaseMinimalDto":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"}}},"FailedCreateCredentialTypeDto":{"type":"object","properties":{"email":{"type":"string","description":"The recipient email address","format":"email"},"credentialId":{"type":"string","description":"Credential id to be used when issuing a credential"},"referenceId":{"type":"string","description":"Client defined referenceId as string. Is not stored and is only for client references"},"claims":{"description":"Collection of credential subject fields","type":"array","items":{"anyOf":[{"$ref":"#/components/schemas/CredentialOfferClaimStringCreateDto"},{"$ref":"#/components/schemas/CredentialOfferClaimNumberCreateDto"},{"$ref":"#/components/schemas/CredentialOfferClaimImageCreateDto"}]}},"expirationDate":{"format":"date-time","type":"string","description":"Expiration date of the credential in ISO8601 format. Must be set in the future or today. If not defined the credential will never expire."},"correlationId":{"type":"string","description":"Defines a organisation which is defined as a correlationId. Must be a value the Issuer is working with! "},"organisationProfileId":{"type":"string","description":"The organisation profile the credential is associated to.","format":"uuid"},"error":{"type":"string","description":"A description of the error"},"errorCode":{"type":"string","description":"The code of the error"}},"required":["email","credentialId","claims","correlationId","organisationProfileId","error","errorCode"]}}},"paths":{"/private/credential-offers":{"post":{"operationId":"CredentialOffersController_create","summary":"Create credential offers","description":"Endpoint supports bulk credential offers records handling. Once created you are be able to issue a credential offer from agent using /webapp endpoints.\nIf the agent returns error that the action cannot be completed because it is missing credential offer you must\nfirst create the resource here and then try again.\n<hr />**Claim-based access control:** <code>Issuer_Admin</code>, <code>Issuer_User</code>","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CredentialOfferBulkBodyDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CredentialOfferDetailListDto"}}}},"400":{"description":""},"401":{"description":"Invalid authentication credentials."},"403":{"description":"User does not have a required claim to perform this operation."},"404":{"description":"Resource not found"},"500":{"description":""}},"tags":["Credential Offers"]}}}}
```

## Credential offer search history audit log pagination

> Endpoint returns history of credential offers search requests\<hr />\*\*Claim-based access control:\*\* \<code>Issuer\_Admin\</code>, \<code>Issuer\_Auditor\</code>, \<code>Issuer\_User\</code>

```json
{"openapi":"3.0.0","info":{"title":"Identity Issuer Backend Documentation","version":"dev"},"servers":[{"url":"{hostname}","description":"Issuer Backend REST API Server","variables":{"hostname":{"default":"https://identity.nchainplatform.com/products/web/$IDENTITY_ENV_ID/issuer/api"}}}],"security":[{},{"bearer":[]}],"components":{"securitySchemes":{"bearer":{"scheme":"bearer","bearerFormat":"JWT","type":"http"}},"schemas":{"PaginatedDto":{"type":"object","properties":{"data":{"title":"Array of entities","type":"array","items":{"type":"object"}},"meta":{"title":"Pagination Metadata","allOf":[{"$ref":"#/components/schemas/PaginatedMetaDto"}]},"links":{"title":"Links to pages","allOf":[{"$ref":"#/components/schemas/PaginatedLinksDto"}]}},"required":["data","meta","links"]},"PaginatedMetaDto":{"type":"object","properties":{"itemsPerPage":{"type":"number","title":"Number of items per page"},"totalItems":{"type":"number","title":"Total number of items"},"currentPage":{"type":"number","title":"Current requested page"},"totalPages":{"type":"number","title":"Total number of pages"},"sortBy":{"type":"array","title":"Sorting by columns","items":{"type":"array","items":{"oneOf":[{"type":"string"},{"type":"string","enum":["ASC","DESC"]}]}}},"filter":{"type":"object","title":"Filters that applied to the query"}},"required":["itemsPerPage","totalItems","currentPage","totalPages"]},"PaginatedLinksDto":{"type":"object","properties":{"first":{"type":"string","title":"Link to first page"},"previous":{"type":"string","title":"Link to previous page"},"current":{"type":"string","title":"Link to current page"},"next":{"type":"string","title":"Link to next page"},"last":{"type":"string","title":"Link to last page"}}},"CredentialOffersSearchAuditLogDetailDto":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"createdBy":{"type":"string","format":"uuid"},"updatedBy":{"type":"string","format":"uuid"},"deletedBy":{"type":"string","format":"uuid"},"createdAt":{"format":"date-time","type":"string"},"updatedAt":{"format":"date-time","type":"string"},"deletedAt":{"format":"date-time","type":"string"},"searchQuery":{"description":"The search query","allOf":[{"$ref":"#/components/schemas/PaginateQueryDto"}]},"recordsFound":{"type":"number","description":"The number of rows found and returned from the search query"}}},"PaginateQueryDto":{"type":"object","properties":{"filter":{"type":"object","description":"The filter applied to the search query"},"sortBy":{"description":"The sorting applied to the search query","type":"array","items":{"type":"string"}},"page":{"type":"number","description":"The page to return from the search query"},"limit":{"type":"number","description":"The number of records to return from the search query"},"path":{"type":"string","description":"The endpoint calling the search query"}},"required":["filter","sortBy","page","limit","path"]}}},"paths":{"/private/credential-offers/search-history":{"get":{"operationId":"CredentialOffersController_searchHistory","summary":"Credential offer search history audit log pagination","description":"Endpoint returns history of credential offers search requests<hr />**Claim-based access control:** <code>Issuer_Admin</code>, <code>Issuer_Auditor</code>, <code>Issuer_User</code>","parameters":[{"name":"page","required":false,"in":"query","description":"Page number to retrieve.If you provide invalid value the default page number will applied\n        <p>\n             <b>Example: </b> 1\n          </p>\n        <p>\n             <b>Default Value: </b> 1\n          </p>\n        ","schema":{"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Number of records per page.\n      <p>\n             <b>Example: </b> 20\n          </p>\n      <p>\n             <b>Default Value: </b> 20\n          </p>\n      <p>\n             <b>Max Value: </b> 100\n          </p>\n\n      If provided value is greater than max value, max value will be applied.\n      ","schema":{"type":"number"}},{"name":"filter.createdBy","required":false,"in":"query","description":"Filter by createdBy query param.\n          <p>\n             <b>Format: </b> filter.createdBy={$not}:OPERATION:VALUE\n          </p>\n          <p>\n             <b>Example: </b> filter.createdBy=$not:$like:John Doe&filter.createdBy=like:John\n          </p>\n          <h4>Available Operations</h4><ul><li>$eq</li></ul>","schema":{"type":"array","items":{"type":"string"}}},{"name":"filter.updatedBy","required":false,"in":"query","description":"Filter by updatedBy query param.\n          <p>\n             <b>Format: </b> filter.updatedBy={$not}:OPERATION:VALUE\n          </p>\n          <p>\n             <b>Example: </b> filter.updatedBy=$not:$like:John Doe&filter.updatedBy=like:John\n          </p>\n          <h4>Available Operations</h4><ul><li>$eq</li></ul>","schema":{"type":"array","items":{"type":"string"}}},{"name":"filter.createdAt","required":false,"in":"query","description":"Filter by createdAt query param.\n          <p>\n             <b>Format: </b> filter.createdAt={$not}:OPERATION:VALUE\n          </p>\n          <p>\n             <b>Example: </b> filter.createdAt=$not:$like:John Doe&filter.createdAt=like:John\n          </p>\n          <h4>Available Operations</h4><ul><li>$gt</li>\n<li>$lt</li>\n<li>$gte</li>\n<li>$lte</li>\n<li>$eq</li></ul>","schema":{"type":"array","items":{"type":"string"}}},{"name":"filter.updatedAt","required":false,"in":"query","description":"Filter by updatedAt query param.\n          <p>\n             <b>Format: </b> filter.updatedAt={$not}:OPERATION:VALUE\n          </p>\n          <p>\n             <b>Example: </b> filter.updatedAt=$not:$like:John Doe&filter.updatedAt=like:John\n          </p>\n          <h4>Available Operations</h4><ul><li>$gt</li>\n<li>$lt</li>\n<li>$gte</li>\n<li>$lte</li>\n<li>$eq</li></ul>","schema":{"type":"array","items":{"type":"string"}}},{"name":"sortBy","required":false,"in":"query","description":"Parameter to sort by.\n      <p>To sort by multiple fields, just provide query param multiple types. The order in url defines an order of sorting</p>\n      <p>\n             <b>Format: </b> fieldName:DIRECTION\n          </p>\n      <p>\n             <b>Example: </b> sortBy=id:DESC&sortBy=createdAt:ASC\n          </p>\n      <p>\n             <b>Default Value: </b> updatedAt:DESC\n          </p>\n      <h4>Available Fields</h4><ul><li>createdAt</li>\n<li>updatedAt</li></ul>\n      ","schema":{"type":"array","items":{"type":"string","enum":["createdAt:ASC","createdAt:DESC","updatedAt:ASC","updatedAt:DESC"]}}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/PaginatedDto"},{"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/CredentialOffersSearchAuditLogDetailDto"}},"meta":{"properties":{"select":{"type":"array","items":{"type":"string"}},"filter":{"type":"object","properties":{"createdBy":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"updatedBy":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"createdAt":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"updatedAt":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}}}}}}}]}}}},"400":{"description":"Invalid request parameters"},"401":{"description":"Invalid authentication credentials."},"403":{"description":"User does not have a required claim to perform this operation."},"500":{"description":"Internal server error"}},"tags":["Credential Offers"]}}}}
```

## Retrieve latest usage date of each credential type

> Returns an array of objects with the latest usage date of each credential type.\<hr />\*\*Claim-based access control:\*\* \<code>Issuer\_User\</code>, \<code>Issuer\_Admin\</code>, \<code>Issuer\_Auditor\</code>

```json
{"openapi":"3.0.0","info":{"title":"Identity Issuer Backend Documentation","version":"dev"},"servers":[{"url":"{hostname}","description":"Issuer Backend REST API Server","variables":{"hostname":{"default":"https://identity.nchainplatform.com/products/web/$IDENTITY_ENV_ID/issuer/api"}}}],"security":[{},{"bearer":[]}],"components":{"securitySchemes":{"bearer":{"scheme":"bearer","bearerFormat":"JWT","type":"http"}},"schemas":{"CredentialTypeUsageDetailDto":{"type":"object","properties":{"credentialType":{"type":"string"},"latestCreatedAt":{"type":"string"}},"required":["credentialType","latestCreatedAt"]}}},"paths":{"/private/credential-offers/type-usage":{"get":{"operationId":"CredentialOffersController_typeUsage","summary":"Retrieve latest usage date of each credential type","description":"Returns an array of objects with the latest usage date of each credential type.<hr />**Claim-based access control:** <code>Issuer_User</code>, <code>Issuer_Admin</code>, <code>Issuer_Auditor</code>","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CredentialTypeUsageDetailDto"}}}}},"401":{"description":"Invalid authentication credentials."},"403":{"description":"User does not have a required claim to perform this operation."}},"tags":["Credential Offers"]}}}}
```

## Fetch one credential offer

> Fetch one credential offer from issuer\<hr />\*\*Claim-based access control:\*\* \<code>Issuer\_Admin\</code>, \<code>Issuer\_User\</code>, \<code>Issuer\_Auditor\</code>

```json
{"openapi":"3.0.0","info":{"title":"Identity Issuer Backend Documentation","version":"dev"},"servers":[{"url":"{hostname}","description":"Issuer Backend REST API Server","variables":{"hostname":{"default":"https://identity.nchainplatform.com/products/web/$IDENTITY_ENV_ID/issuer/api"}}}],"security":[{},{"bearer":[]}],"components":{"securitySchemes":{"bearer":{"scheme":"bearer","bearerFormat":"JWT","type":"http"}},"schemas":{"CredentialOfferDetailDto":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"createdBy":{"type":"string","format":"uuid"},"updatedBy":{"type":"string","format":"uuid"},"deletedBy":{"type":"string","format":"uuid"},"createdAt":{"format":"date-time","type":"string"},"updatedAt":{"format":"date-time","type":"string"},"deletedAt":{"format":"date-time","type":"string"},"organisationProfile":{"description":"Organisation profile detail","allOf":[{"$ref":"#/components/schemas/PortalApiOrganisationProfileBaseDto"}]},"correlationId":{"type":"string","description":"Defines a organisation which is defined as a correlationId. Must be a value the Issuer is working with! "},"claims":{"description":"A collection of the Credential offer claims","type":"array","items":{"anyOf":[{"$ref":"#/components/schemas/CredentialOfferClaimStringDetailDto"},{"$ref":"#/components/schemas/CredentialOfferClaimNumberDetailDto"},{"$ref":"#/components/schemas/CredentialOfferClaimImageDetailDto"}]}},"email":{"type":"string","description":"The recipient email address","format":"email"},"organisationProfileId":{"type":"string","description":"The organisation profile the credential is associated to.","format":"uuid"},"credentialNames":{"description":"Credential names to be defined in the credential once issued","type":"array","items":{"type":"string"}},"credentialTypes":{"description":"Credential types to be defined in the credential once issued.","type":"array","items":{"type":"string"}},"credentialId":{"type":"string","description":"Credential id to be used when issuing a credential"},"status":{"$ref":"#/components/schemas/CredentialOfferStatusEnum"},"credentialDataSupplierInput":{"type":"object","description":"Data object of credential subject fields.","deprecated":true},"issuer":{"type":"string","description":"Issuer DID. Is set once claimed!"},"subject":{"type":"string","description":"Subject DID. Is set once claimed!"},"issuedAt":{"format":"date-time","type":"string","description":"Date in ISO8601 when claimed"},"referenceId":{"type":"string","description":"Client defined referenceId as string. Is not stored and is only for client references"},"revocationId":{"type":"string","description":"The revocation transaction bound to the credential"},"revocationReason":{"type":"string","description":"Reason for revocation provided by the user requesting this."},"revokedAt":{"format":"date-time","type":"string","description":"Date of revocation in ISO8601"},"revokedBy":{"type":"string","description":"User that revoked the credential"},"expirationDate":{"type":"string","description":"Expiration date of the credential in ISO8601 format. Must be set in the future or today. If not defined the credential will never expire.","format":"date-time"},"emailSent":{"type":"boolean","description":"When true the recipient received the credential issued email"},"revocationEmailSent":{"type":"boolean","description":"When true the recipient received the credential revoked credential via email"},"credentialOfferCollection":{"$ref":"#/components/schemas/CredentialOfferCollectionDetailDto"}},"required":["id","correlationId","claims","email","organisationProfileId","credentialId","credentialDataSupplierInput"]},"PortalApiOrganisationProfileBaseDto":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"createdAt":{"format":"date-time","type":"string"},"updatedAt":{"format":"date-time","type":"string"},"deletedAt":{"format":"date-time","type":"string"},"createdBy":{"type":"string","format":"uuid"},"updatedBy":{"type":"string","format":"uuid"},"deletedBy":{"type":"string","format":"uuid"},"name":{"type":"string"},"isDefault":{"type":"boolean"},"pspEnvironmentId":{"type":"string"},"image":{"$ref":"#/components/schemas/PortalApiDetailMediaDto"}}},"PortalApiDetailMediaDto":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"mimeType":{"$ref":"#/components/schemas/MimeType"},"keyUrl":{"type":"string"},"filename":{"type":"string"}}},"MimeType":{"type":"string","enum":["image/jpeg","image/png","image/webp"]},"CredentialOfferClaimStringDetailDto":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"dataType":{"type":"string","description":"String credential claim data type","default":"string","enum":["string"]},"claimName":{"type":"string","description":"String credential claim name"},"claimValue":{"type":"string","description":"Claim value"}},"required":["id","dataType","claimName","claimValue"]},"CredentialOfferClaimNumberDetailDto":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"dataType":{"type":"string","description":"Number credential claim data type","default":"number","enum":["number"]},"claimName":{"type":"string","description":"Number credential claim data type"},"claimValue":{"type":"number","description":"Claim value"}},"required":["id","dataType","claimName","claimValue"]},"CredentialOfferClaimImageDetailDto":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"dataType":{"type":"string","description":"Image credential claim data type","default":"image","enum":["image"]},"claimName":{"type":"string","description":"Image credential claim name"},"claimValue":{"description":"Contains the relevant Image information","allOf":[{"$ref":"#/components/schemas/DetailMediaDto"}]}},"required":["id","dataType","claimName","claimValue"]},"DetailMediaDto":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"mimeType":{"$ref":"#/components/schemas/MimeType"},"keyUrl":{"type":"string"},"filename":{"type":"string"},"type":{"$ref":"#/components/schemas/MediaType"}},"required":["id","mimeType","keyUrl","filename"]},"MediaType":{"type":"string","enum":["cover_image","claim_image"]},"CredentialOfferStatusEnum":{"type":"string","description":"Status of the credential offer","enum":["pending","ready_to_claim","issuing","claimed","error","revoked","expired"]},"CredentialOfferCollectionDetailDto":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"createdBy":{"type":"string","format":"uuid"},"createdAt":{"format":"date-time","type":"string"},"name":{"type":"string","minLength":1,"maxLength":50}},"required":["id","name"]}}},"paths":{"/private/credential-offers/{id}":{"get":{"operationId":"CredentialOffersController_getOne","summary":"Fetch one credential offer","description":"Fetch one credential offer from issuer<hr />**Claim-based access control:** <code>Issuer_Admin</code>, <code>Issuer_User</code>, <code>Issuer_Auditor</code>","parameters":[{"name":"id","required":true,"in":"path","schema":{"format":"uuid","type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CredentialOfferDetailDto"}}}},"400":{"description":""},"401":{"description":"Invalid authentication credentials."},"403":{"description":"User does not have a required claim to perform this operation."},"500":{"description":""}},"tags":["Credential Offers"]}}}}
```

## Delete a credential offer

> Deletes a credential offer if it has not yet been claimed otherwise it is not deletable.\<hr />\*\*Claim-based access control:\*\* \<code>Issuer\_Admin\</code>, \<code>Issuer\_User\</code>

```json
{"openapi":"3.0.0","info":{"title":"Identity Issuer Backend Documentation","version":"dev"},"servers":[{"url":"{hostname}","description":"Issuer Backend REST API Server","variables":{"hostname":{"default":"https://identity.nchainplatform.com/products/web/$IDENTITY_ENV_ID/issuer/api"}}}],"security":[{},{"bearer":[]}],"components":{"securitySchemes":{"bearer":{"scheme":"bearer","bearerFormat":"JWT","type":"http"}}},"paths":{"/private/credential-offers/{id}":{"delete":{"operationId":"CredentialOffersController_delete","summary":"Delete a credential offer","description":"Deletes a credential offer if it has not yet been claimed otherwise it is not deletable.<hr />**Claim-based access control:** <code>Issuer_Admin</code>, <code>Issuer_User</code>","parameters":[{"name":"id","required":true,"in":"path","schema":{"format":"uuid","type":"string"}}],"responses":{"204":{"description":"Successfully deleted credential offer"},"401":{"description":"Invalid authentication credentials."},"403":{"description":"User does not have a required claim to perform this operation."},"404":{"description":"Credential offer not found"},"500":{"description":"Internal server error"}},"tags":["Credential Offers"]}}}}
```

## Retrieve claim code for credential offer.

> Retrieves a claim code for a given credential offer ID. Claim code can be rendered as QR code and scanned with wallet app.

```json
{"openapi":"3.0.0","info":{"title":"Identity Issuer Backend Documentation","version":"dev"},"servers":[{"url":"{hostname}","description":"Issuer Backend REST API Server","variables":{"hostname":{"default":"https://identity.nchainplatform.com/products/web/$IDENTITY_ENV_ID/issuer/api"}}}],"paths":{"/private/credential-offers/{id}/claim":{"get":{"operationId":"CredentialOffersController_issue","summary":"Retrieve claim code for credential offer.","description":"Retrieves a claim code for a given credential offer ID. Claim code can be rendered as QR code and scanned with wallet app.","parameters":[{"name":"id","required":true,"in":"path","schema":{"format":"uuid","type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CredentialOfferIssueDetailDto"}}}},"400":{"description":""},"500":{"description":""}},"tags":["Credential Offers"]}}},"components":{"schemas":{"CredentialOfferIssueDetailDto":{"type":"object","properties":{"uri":{"type":"string","description":"URI containing the credential offer (decoded in example)."},"userPinRequired":{"type":"boolean","description":"Indicates if user pin is required."},"credentialNames":{"description":"Credential names to be defined in the credential once issued","type":"array","items":{"type":"string"}},"credentialTypes":{"description":"Credential types to be defined in the credential once issued.","type":"array","items":{"type":"string"}},"organisationProfile":{"description":"Organisation profile","allOf":[{"$ref":"#/components/schemas/OrganisationProfileClaimDetailDto"}]}},"required":["uri","userPinRequired"]},"OrganisationProfileClaimDetailDto":{"type":"object","properties":{"name":{"type":"string"},"image":{"$ref":"#/components/schemas/PortalApiDetailMediaDto"}}},"PortalApiDetailMediaDto":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"mimeType":{"$ref":"#/components/schemas/MimeType"},"keyUrl":{"type":"string"},"filename":{"type":"string"}}},"MimeType":{"type":"string","enum":["image/jpeg","image/png","image/webp"]}}}}
```

## Create and send emails about credential offers.

> Limited to \<strong>2\</strong> requests per minute per user.\<hr />\*\*Claim-based access control:\*\* \<code>Issuer\_Admin\</code>, \<code>Issuer\_User\</code>

```json
{"openapi":"3.0.0","info":{"title":"Identity Issuer Backend Documentation","version":"dev"},"servers":[{"url":"{hostname}","description":"Issuer Backend REST API Server","variables":{"hostname":{"default":"https://identity.nchainplatform.com/products/web/$IDENTITY_ENV_ID/issuer/api"}}}],"security":[{},{"bearer":[]}],"components":{"securitySchemes":{"bearer":{"scheme":"bearer","bearerFormat":"JWT","type":"http"}},"schemas":{"CredentialOfferIdsDto":{"type":"object","properties":{"credentialOfferIds":{"type":"array","items":{"type":"string"}}},"required":["credentialOfferIds"]},"ShareCredentialOfferLogDto":{"type":"object","properties":{"credentialOfferId":{"type":"string"},"status":{"$ref":"#/components/schemas/CredentialOfferShareStatus"}},"required":["credentialOfferId","status"]},"CredentialOfferShareStatus":{"type":"string","enum":["ENQUEUED","ERROR","NOT_FOUND","NOT_SHAREABLE"]}}},"paths":{"/private/credential-offers/share-with-email":{"post":{"operationId":"CredentialOffersController_bulkCreateCredentialShareEmail","summary":"Create and send emails about credential offers.","description":"Limited to <strong>2</strong> requests per minute per user.<hr />**Claim-based access control:** <code>Issuer_Admin</code>, <code>Issuer_User</code>","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CredentialOfferIdsDto"}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ShareCredentialOfferLogDto"}}}}},"400":{"description":"Invalid request body."},"401":{"description":"Invalid authentication credentials."},"403":{"description":"User does not have a required claim to perform this operation."}},"tags":["Credential Offers"]}}}}
```

## Re-send email about credential offer revocation.

> \*\*Claim-based access control:\*\* \<code>Issuer\_Admin\</code>, \<code>Issuer\_User\</code>

```json
{"openapi":"3.0.0","info":{"title":"Identity Issuer Backend Documentation","version":"dev"},"servers":[{"url":"{hostname}","description":"Issuer Backend REST API Server","variables":{"hostname":{"default":"https://identity.nchainplatform.com/products/web/$IDENTITY_ENV_ID/issuer/api"}}}],"security":[{},{"bearer":[]}],"components":{"securitySchemes":{"bearer":{"scheme":"bearer","bearerFormat":"JWT","type":"http"}},"schemas":{"CredentialOfferIdDto":{"type":"object","properties":{"credentialOfferId":{"type":"string"}},"required":["credentialOfferId"]},"MessageDto":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}}},"paths":{"/private/credential-offers/resend-revocation-email":{"post":{"operationId":"CredentialOffersController_resendRevocationEmail","summary":"Re-send email about credential offer revocation.","description":"**Claim-based access control:** <code>Issuer_Admin</code>, <code>Issuer_User</code>","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CredentialOfferIdDto"}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageDto"}}}},"400":{"description":"Invalid request body."},"401":{"description":"Invalid authentication credentials."},"403":{"description":"User does not have a required claim to perform this operation."}},"tags":["Credential Offers"]}}}}
```

## Upload credential offer claim image.

> Accepts the next image formats: \*\*image/jpeg, image/png, image/webp\*\*. Max size is:  \*\*5242880 bytes\*\*.\<hr />\*\*Claim-based access control:\*\* \<code>Issuer\_Admin\</code>, \<code>Issuer\_User\</code>

```json
{"openapi":"3.0.0","info":{"title":"Identity Issuer Backend Documentation","version":"dev"},"servers":[{"url":"{hostname}","description":"Issuer Backend REST API Server","variables":{"hostname":{"default":"https://identity.nchainplatform.com/products/web/$IDENTITY_ENV_ID/issuer/api"}}}],"security":[{},{"bearer":[]}],"components":{"securitySchemes":{"bearer":{"scheme":"bearer","bearerFormat":"JWT","type":"http"}},"schemas":{"PartialTypeClass":{"type":"object","properties":{"image":{"type":"string","format":"binary"}}},"DetailMediaDto":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"mimeType":{"$ref":"#/components/schemas/MimeType"},"keyUrl":{"type":"string"},"filename":{"type":"string"},"type":{"$ref":"#/components/schemas/MediaType"}},"required":["id","mimeType","keyUrl","filename"]},"MimeType":{"type":"string","enum":["image/jpeg","image/png","image/webp"]},"MediaType":{"type":"string","enum":["cover_image","claim_image"]}}},"paths":{"/private/credential-offers/image-upload":{"post":{"operationId":"CredentialOffersController_uploadImage","summary":"Upload credential offer claim image.","description":"Accepts the next image formats: **image/jpeg, image/png, image/webp**. Max size is:  **5242880 bytes**.<hr />**Claim-based access control:** <code>Issuer_Admin</code>, <code>Issuer_User</code>","parameters":[],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/PartialTypeClass"}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailMediaDto"}}}},"400":{"description":"Invalid request body."},"401":{"description":"Invalid authentication credentials."},"403":{"description":"User does not have a required claim to perform this operation."},"413":{"description":"Image exceeds the allowed size."},"415":{"description":"Unsupported media type."},"500":{"description":"Internal server error."}},"tags":["Credential Offers"]}}}}
```

## Revoke credential offers

> Revokes the credential offer using the credential revocation txId stored.\
> You will need to supply the revocation reason to be stored alongside it.\
> When completed the credential will display revoked on the users wallet and also the verifier will return revoked status if user tries to verify with it.\<hr />\*\*Claim-based access control:\*\* \<code>Issuer\_Admin\</code>, \<code>Issuer\_User\</code>

```json
{"openapi":"3.0.0","info":{"title":"Identity Issuer Backend Documentation","version":"dev"},"servers":[{"url":"{hostname}","description":"Issuer Backend REST API Server","variables":{"hostname":{"default":"https://identity.nchainplatform.com/products/web/$IDENTITY_ENV_ID/issuer/api"}}}],"security":[{},{"bearer":[]}],"components":{"securitySchemes":{"bearer":{"scheme":"bearer","bearerFormat":"JWT","type":"http"}},"schemas":{"CredentialOfferBulkRevocationDto":{"type":"object","properties":{"revoke":{"type":"array","items":{"$ref":"#/components/schemas/RevokeCredentialOfferDto"}}},"required":["revoke"]},"RevokeCredentialOfferDto":{"type":"object","properties":{"id":{"type":"string","description":"The credential offer id (uuid). Use the property `id` from CredentialOffer","format":"uuid"},"revocationReason":{"type":"string","description":"The revocation reason for this action"}},"required":["id"]},"CredentialOfferBulkRevocationDetailDto":{"type":"object","properties":{"revocations":{"type":"array","items":{"$ref":"#/components/schemas/CredentialOfferDetailDto"}},"failed":{"type":"array","items":{"$ref":"#/components/schemas/FailedCredentialOfferRevocationDetailDto"}}},"required":["revocations","failed"]},"CredentialOfferDetailDto":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"createdBy":{"type":"string","format":"uuid"},"updatedBy":{"type":"string","format":"uuid"},"deletedBy":{"type":"string","format":"uuid"},"createdAt":{"format":"date-time","type":"string"},"updatedAt":{"format":"date-time","type":"string"},"deletedAt":{"format":"date-time","type":"string"},"organisationProfile":{"description":"Organisation profile detail","allOf":[{"$ref":"#/components/schemas/PortalApiOrganisationProfileBaseDto"}]},"correlationId":{"type":"string","description":"Defines a organisation which is defined as a correlationId. Must be a value the Issuer is working with! "},"claims":{"description":"A collection of the Credential offer claims","type":"array","items":{"anyOf":[{"$ref":"#/components/schemas/CredentialOfferClaimStringDetailDto"},{"$ref":"#/components/schemas/CredentialOfferClaimNumberDetailDto"},{"$ref":"#/components/schemas/CredentialOfferClaimImageDetailDto"}]}},"email":{"type":"string","description":"The recipient email address","format":"email"},"organisationProfileId":{"type":"string","description":"The organisation profile the credential is associated to.","format":"uuid"},"credentialNames":{"description":"Credential names to be defined in the credential once issued","type":"array","items":{"type":"string"}},"credentialTypes":{"description":"Credential types to be defined in the credential once issued.","type":"array","items":{"type":"string"}},"credentialId":{"type":"string","description":"Credential id to be used when issuing a credential"},"status":{"$ref":"#/components/schemas/CredentialOfferStatusEnum"},"credentialDataSupplierInput":{"type":"object","description":"Data object of credential subject fields.","deprecated":true},"issuer":{"type":"string","description":"Issuer DID. Is set once claimed!"},"subject":{"type":"string","description":"Subject DID. Is set once claimed!"},"issuedAt":{"format":"date-time","type":"string","description":"Date in ISO8601 when claimed"},"referenceId":{"type":"string","description":"Client defined referenceId as string. Is not stored and is only for client references"},"revocationId":{"type":"string","description":"The revocation transaction bound to the credential"},"revocationReason":{"type":"string","description":"Reason for revocation provided by the user requesting this."},"revokedAt":{"format":"date-time","type":"string","description":"Date of revocation in ISO8601"},"revokedBy":{"type":"string","description":"User that revoked the credential"},"expirationDate":{"type":"string","description":"Expiration date of the credential in ISO8601 format. Must be set in the future or today. If not defined the credential will never expire.","format":"date-time"},"emailSent":{"type":"boolean","description":"When true the recipient received the credential issued email"},"revocationEmailSent":{"type":"boolean","description":"When true the recipient received the credential revoked credential via email"},"credentialOfferCollection":{"$ref":"#/components/schemas/CredentialOfferCollectionDetailDto"}},"required":["id","correlationId","claims","email","organisationProfileId","credentialId","credentialDataSupplierInput"]},"PortalApiOrganisationProfileBaseDto":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"createdAt":{"format":"date-time","type":"string"},"updatedAt":{"format":"date-time","type":"string"},"deletedAt":{"format":"date-time","type":"string"},"createdBy":{"type":"string","format":"uuid"},"updatedBy":{"type":"string","format":"uuid"},"deletedBy":{"type":"string","format":"uuid"},"name":{"type":"string"},"isDefault":{"type":"boolean"},"pspEnvironmentId":{"type":"string"},"image":{"$ref":"#/components/schemas/PortalApiDetailMediaDto"}}},"PortalApiDetailMediaDto":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"mimeType":{"$ref":"#/components/schemas/MimeType"},"keyUrl":{"type":"string"},"filename":{"type":"string"}}},"MimeType":{"type":"string","enum":["image/jpeg","image/png","image/webp"]},"CredentialOfferClaimStringDetailDto":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"dataType":{"type":"string","description":"String credential claim data type","default":"string","enum":["string"]},"claimName":{"type":"string","description":"String credential claim name"},"claimValue":{"type":"string","description":"Claim value"}},"required":["id","dataType","claimName","claimValue"]},"CredentialOfferClaimNumberDetailDto":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"dataType":{"type":"string","description":"Number credential claim data type","default":"number","enum":["number"]},"claimName":{"type":"string","description":"Number credential claim data type"},"claimValue":{"type":"number","description":"Claim value"}},"required":["id","dataType","claimName","claimValue"]},"CredentialOfferClaimImageDetailDto":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"dataType":{"type":"string","description":"Image credential claim data type","default":"image","enum":["image"]},"claimName":{"type":"string","description":"Image credential claim name"},"claimValue":{"description":"Contains the relevant Image information","allOf":[{"$ref":"#/components/schemas/DetailMediaDto"}]}},"required":["id","dataType","claimName","claimValue"]},"DetailMediaDto":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"mimeType":{"$ref":"#/components/schemas/MimeType"},"keyUrl":{"type":"string"},"filename":{"type":"string"},"type":{"$ref":"#/components/schemas/MediaType"}},"required":["id","mimeType","keyUrl","filename"]},"MediaType":{"type":"string","enum":["cover_image","claim_image"]},"CredentialOfferStatusEnum":{"type":"string","description":"Status of the credential offer","enum":["pending","ready_to_claim","issuing","claimed","error","revoked","expired"]},"CredentialOfferCollectionDetailDto":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"createdBy":{"type":"string","format":"uuid"},"createdAt":{"format":"date-time","type":"string"},"name":{"type":"string","minLength":1,"maxLength":50}},"required":["id","name"]},"FailedCredentialOfferRevocationDetailDto":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"error":{"type":"string","description":"A detailed description of what went wrong!"},"code":{"$ref":"#/components/schemas/CredentialOfferErrorCode"}},"required":["id","error","code"]},"CredentialOfferErrorCode":{"type":"string","description":"Error code","enum":["credential_offer_already_revoked","credential_offer_not_revocable","credential_offer_not_claimed","credential_offer_failed_revocation","credential_offer_no_well_known_issuer","credential_offer_failed_validation","credential_offer_unique_constraint_violation","credential_offer_internal_error"]}}},"paths":{"/private/credential-offers/revoke":{"patch":{"operationId":"CredentialOffersController_revokeVerifiableCredential","summary":"Revoke credential offers","description":"Revokes the credential offer using the credential revocation txId stored.\nYou will need to supply the revocation reason to be stored alongside it.\nWhen completed the credential will display revoked on the users wallet and also the verifier will return revoked status if user tries to verify with it.<hr />**Claim-based access control:** <code>Issuer_Admin</code>, <code>Issuer_User</code>","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CredentialOfferBulkRevocationDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CredentialOfferBulkRevocationDetailDto"}}}},"400":{"description":""},"401":{"description":"Invalid authentication credentials."},"403":{"description":"User does not have a required claim to perform this operation."},"500":{"description":""}},"tags":["Credential Offers"]}}}}
```

## Retrieve the status of the credential offer from the issuer

> Returns the status of the credential by calling the issuer api and returning the result of the operation back

```json
{"openapi":"3.0.0","info":{"title":"Identity Issuer Backend Documentation","version":"dev"},"servers":[{"url":"{hostname}","description":"Issuer Backend REST API Server","variables":{"hostname":{"default":"https://identity.nchainplatform.com/products/web/$IDENTITY_ENV_ID/issuer/api"}}}],"paths":{"/private/credential-offers/{id}/status":{"get":{"operationId":"CredentialOffersController_getStatus","summary":"Retrieve the status of the credential offer from the issuer","description":"Returns the status of the credential by calling the issuer api and returning the result of the operation back","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CredentialOfferStatusDetailDto"}}}},"404":{"description":"Credential offer not found."},"503":{"description":"Error retrieving credential offer status."}},"tags":["Credential Offers"]}}},"components":{"schemas":{"CredentialOfferStatusDetailDto":{"type":"object","properties":{"createdAt":{"type":"number","description":"Timestamp indicating when the offer was created."},"lastUpdatedAt":{"type":"number","description":"Timestamp indicating the last update time of the offer."},"status":{"$ref":"#/components/schemas/IssueStatus"}}},"IssueStatus":{"type":"string","description":"The status of the offer.","enum":["OFFER_CREATED","OFFER_URI_RETRIEVED","ACCESS_TOKEN_REQUESTED","ACCESS_TOKEN_CREATED","CREDENTIAL_REQUEST_RECEIVED","CREDENTIAL_ISSUED","ERROR"]}}}}
```


---

# 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 dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.teranode.group/tng-identity-documentation/tng-identity-issuers/issuer-api/api-documentation/credential-offers.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
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.
