# Offering

## List all credential offerings

> Retrieves all available offerings

```json
{"openapi":"3.0.0","info":{"title":"issuer-service","version":"1.0.0-rc2"},"servers":[{"url":"/"}],"security":[],"paths":{"/api/v1/offerings":{"get":{"operationId":"GetOfferings","responses":{"200":{"description":"A list of all offerings in the system","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/Offering"},"type":"array"}}}}},"description":"Retrieves all available offerings","summary":"List all credential offerings","tags":["Offering"],"parameters":[]}}},"components":{"schemas":{"Offering":{"properties":{"id":{"type":"string"},"credential_issuer":{"type":"string"},"credential_configuration_ids":{"items":{"type":"string"},"type":"array"},"display":{"properties":{"locale":{"type":"string"},"name":{"type":"string"}},"required":["locale","name"],"type":"object"},"grants":{"properties":{"authorization_code":{"properties":{"issuer_state":{"type":"string"}},"required":["issuer_state"],"type":"object"}},"required":["authorization_code"],"type":"object"},"credential_subject":{"$ref":"#/components/schemas/CredentialSubject"},"recipient":{"type":"string"},"redemption_limit":{"type":"number","format":"double","nullable":true},"expires_at":{"type":"string","format":"date-time","nullable":true},"redemptions":{"items":{"$ref":"#/components/schemas/OfferingRedemption"},"type":"array"}},"required":["id","credential_issuer","credential_configuration_ids","display","grants","credential_subject","redemptions"],"type":"object","additionalProperties":false},"CredentialSubject":{"$ref":"#/components/schemas/Record_string.unknown_"},"Record_string.unknown_":{"properties":{},"additionalProperties":{},"type":"object","description":"Construct a type with a set of properties K of type T"},"OfferingRedemption":{"description":"**OfferingRedemption**\n\nOne row = one **successful claim** of an `Offering` by a holder.\n\n* Maintains a full audit trail – even if the underlying `Credential`\n  is later deleted, the redemption record (with `credential_id = NULL`)\n  still proves the claim happened (`redeemed_at`, `recipient_did`).\n* The composite `UNIQUE(offering_id, credential_id)` block-inserts\n  double spending of the same credential, while\n  `IDX_redemption_offering_id` lets us quickly **count** redemptions in\n  a transaction and enforce `Offering.redemption_limit`.\n* Acts as the join table that links `Offering` ⇢ `Credential`, so the\n  business layer can fetch a credential’s issuing context or check how\n  many claims an offering has left.","properties":{"id":{"type":"string"},"offering_id":{"type":"string"},"credential_id":{"type":"string","nullable":true},"recipient_did":{"type":"string"},"redeemed_at":{"type":"string","format":"date-time"},"offering":{"$ref":"#/components/schemas/Offering"},"credential":{"allOf":[{"$ref":"#/components/schemas/Credential"}],"nullable":true}},"required":["id","offering_id","credential_id","recipient_did","redeemed_at","offering","credential"],"type":"object","additionalProperties":false},"Credential":{"description":"**Credential**\n\nRepresents a **single Verifiable Credential issued by the issuer-service**.\n\n- Each row is one credential that has already been signed and issued.\n- The `vc` column stores the **entire** `VerifiableCredential` object\n  (serialised JSON-JWT or JSON-LD).\n  A TypeORM transformer seamlessly converts between the raw JSON string\n  in the database and the `VerifiableCredential` class from `@empe/identity`.","properties":{"id":{"type":"string"},"configuration_id":{"type":"string"},"configuration":{"$ref":"#/components/schemas/CredentialConfiguration"},"vc":{"$ref":"#/components/schemas/VerifiableCredential","description":"Fully-serialised Verifiable Credential (includes `issuedAt`, `issuer`, `credentialSubject`, etc.)."},"revoked":{"type":"boolean","default":false}},"required":["id","configuration_id","configuration","vc"],"type":"object","additionalProperties":false},"CredentialConfiguration":{"properties":{"id":{"type":"string"},"name":{"type":"string","default":""},"type":{"type":"string","default":""},"version":{"type":"number","format":"double","default":1},"schemaUri":{"type":"string"},"schemaBody":{"additionalProperties":false,"type":"object"}},"required":["id","schemaUri"],"type":"object","additionalProperties":false},"VerifiableCredential":{"$ref":"#/components/schemas/VC","description":"Represents a Verifiable Credential (VC) that follows the W3C Verifiable Credentials Data Model.\n\nA Verifiable Credential is a set of tamper-evident claims and metadata that cryptographically proves\nwho issued it, when it was issued, when it expires (if applicable), and provides a secure way\nto express claims about a subject (a person, organization, or thing).\n\nKey features:\n- Tamper-evident: Any changes to the credential after issuance can be detected\n- Cryptographically verified: Contains proofs that can verify the issuer and integrity\n- Privacy-respecting: Supports selective disclosure and zero-knowledge proofs\n- Machine-verifiable: Can be automatically verified without contacting the issuer\n\nThis implementation supports:\n- JSON serialization for storage and transmission\n- JWT serialization for compatibility with existing JWT infrastructures\n- Schema validation to ensure credential data conforms to defined structures\n- Cryptographic proof generation and verification"},"VC":{"$ref":"#/components/schemas/VCv1_1","description":"Current version of the Verifiable Credential format used in the implementation"},"VCv1_1":{"properties":{"evidence":{"additionalProperties":false,"type":"object","description":"Additional supporting information for the claims in the credential"},"credentialStatus":{"items":{"$ref":"#/components/schemas/CredentialStatus"},"type":"array","description":"Credential status information, such as revocation or suspension"},"credentialSchema":{"$ref":"#/components/schemas/CredentialSchema","description":"Schema that defines the structure of the credential subject"},"expirationDate":{"type":"string","description":"Date and time when the credential expires"},"proof":{"$ref":"#/components/schemas/Proof","description":"Cryptographic proof that can be used to detect tampering and verify the issuer"},"credentialSubject":{"anyOf":[{"$ref":"#/components/schemas/CredentialSubject"},{"items":{"$ref":"#/components/schemas/CredentialSubject"},"type":"array"}],"description":"Claims about the subject of the credential"},"issuanceDate":{"type":"string","description":"Date and time when the credential was issued"},"issuer":{"$ref":"#/components/schemas/Issuer","description":"Entity that issued the credential"},"id":{"$ref":"#/components/schemas/URI","description":"Unique identifier for the credential"},"type":{"items":{"type":"string"},"type":"array","description":"Credential type information that defines what the credential represents"},"@context":{"anyOf":[{"items":{"$ref":"#/components/schemas/URI"},"type":"array"},{"$ref":"#/components/schemas/URI"}],"description":"JSON-LD context that defines the vocabulary of the credential"}},"required":["credentialSubject","issuanceDate","issuer","type","@context"],"type":"object","description":"Verifiable Credential format following W3C VC Data Model 1.1 specification."},"CredentialStatus":{"description":"A single entry in a bitstring-based status list, per VC-DATA-MODEL-2.0","properties":{"id":{"$ref":"#/components/schemas/URI"},"type":{"type":"string","enum":["BitstringStatusListEntry"],"nullable":false},"statusPurpose":{"anyOf":[{"$ref":"#/components/schemas/StatusPurpose"},{"type":"string"}]},"statusListIndex":{"type":"number","format":"double"},"statusListCredential":{"$ref":"#/components/schemas/URI"},"statusSize":{"type":"number","format":"double"},"statusMessage":{"items":{"properties":{"message":{"type":"string"},"status":{"type":"string"}},"additionalProperties":{},"required":["message","status"],"type":"object"},"type":"array"}},"required":["type","statusPurpose","statusListIndex","statusListCredential"],"type":"object","additionalProperties":false},"URI":{"type":"string"},"StatusPurpose":{"enum":["refresh","revocation","suspension","message"],"type":"string"},"CredentialSchema":{"properties":{"type":{"type":"string","enum":["JsonSchemaValidator2018"],"nullable":false,"description":"The type of schema validator, currently only supporting JsonSchemaValidator2018"},"id":{"$ref":"#/components/schemas/URI","description":"The identifier for the schema, typically a URI pointing to the schema definition"}},"required":["type","id"],"type":"object","description":"Represents a credential schema reference that defines the structure of claims in a credential.\nFollowing W3C VC Data Model, this provides the means to validate credential contents."},"Proof":{"properties":{"challange":{"type":"string"},"nonce":{"type":"string"},"jws":{"$ref":"#/components/schemas/Base64"},"proofValue":{"$ref":"#/components/schemas/Base64"},"proofPurpose":{"$ref":"#/components/schemas/ProofPurpose"},"verificationMethod":{"$ref":"#/components/schemas/DIDUri"},"created":{"type":"string"},"type":{"$ref":"#/components/schemas/ProofType"}},"required":["proofPurpose","verificationMethod","created","type"],"type":"object"},"Base64":{"type":"string"},"ProofPurpose":{"type":"string","enum":["assertionMethod","authentication","keyAgreement","contractAgreement","capabilityInvocation","capabilityDelegation"]},"DIDUri":{"type":"string"},"ProofType":{"type":"string","enum":["EcdsaSecp256k1Signature2019","EcdsaSecp256r1Signature2019","SchnorrSecp256k1Signature2019","Ed25519Signature2018","Ed25519Signature2020","JwtProof2020","JsonWebSignature2020"],"nullable":false},"Issuer":{"properties":{"name":{"type":"string"},"id":{"$ref":"#/components/schemas/DIDUri"}},"required":["id"],"type":"object","description":"Normalized representation of an issuer after processing InputIssuer."}}}}
```

Create a new credential offering with QR code\
\
Validates the credential subject against the schema and creates an offering\
that can be claimed by a holder. Generates a QR code for the offering.
----------------------------------------------------------------------

> Creates a new credential offering

```json
{"openapi":"3.0.0","info":{"title":"issuer-service","version":"1.0.0-rc2"},"servers":[{"url":"/"}],"security":[{"clientSecret":[]}],"components":{"securitySchemes":{"clientSecret":{"type":"apiKey","name":"x-client-secret","in":"header"}},"schemas":{"OfferingResponseDto":{"description":"Response DTO for offering details","properties":{"id":{"type":"string","description":"Unique identifier of the offering","format":"uuid"},"credential_issuer":{"type":"string","description":"Credential issuer URL","format":"uri"},"credential_configuration_ids":{"items":{"type":"string"},"type":"array","description":"List of credential configuration IDs"},"display":{"$ref":"#/components/schemas/OfferingDisplayDto","description":"Display information"},"grants":{"$ref":"#/components/schemas/OfferingGrantsDto","description":"Grant information"},"qr_code_url":{"type":"string","description":"QR code URL","format":"uri"},"offering_id":{"type":"string","description":"Offering ID","format":"uuid"},"offering_full_url":{"type":"string","description":"Full URL to the offering","format":"uri"},"redemption_limit":{"type":"number","format":"double","nullable":true,"description":"Redemption limit"},"expires_at":{"type":"string","format":"date-time","nullable":true,"description":"Expiration date"}},"required":["id","credential_issuer","credential_configuration_ids","display","grants"],"type":"object","additionalProperties":false},"OfferingDisplayDto":{"description":"Display information for the offering","properties":{"name":{"type":"string","description":"Name of the issuer"},"locale":{"type":"string","description":"Locale for the display"}},"required":["name","locale"],"type":"object","additionalProperties":false},"OfferingGrantsDto":{"description":"Grant information for the offering","properties":{"authorization_code":{"$ref":"#/components/schemas/AuthorizationCodeDto","description":"Authorization code grant type"}},"required":["authorization_code"],"type":"object","additionalProperties":false},"AuthorizationCodeDto":{"description":"Authorization code information","properties":{"issuer_state":{"type":"string","description":"Issuer state for the authorization code"}},"required":["issuer_state"],"type":"object","additionalProperties":false},"ErrorResponseDto":{"description":"Extended error response with HTTP details","properties":{"name":{"type":"string","description":"Error name"},"message":{"type":"string","description":"Error message"},"code":{"type":"number","format":"double","description":"Error code"},"statusCode":{"type":"number","format":"double","description":"HTTP status code"},"httpCode":{"type":"number","format":"double","description":"HTTP code"},"method":{"type":"string","description":"HTTP method"},"path":{"type":"string","description":"Request path"},"stack":{"type":"string","description":"Stack trace (tylko w środowisku deweloperskim)"}},"required":["name","message","code","statusCode","httpCode","method","path"],"type":"object","additionalProperties":false},"CreateOfferingRequestDto":{"description":"Request DTO for creating a new offering","properties":{"credential_type":{"type":"string","description":"Type of credential to be issued"},"credential_subject":{"$ref":"#/components/schemas/CredentialSubject","description":"Credential subject data"},"recipient":{"type":"string","description":"Optional recipient DID"},"redemption_limit":{"type":"number","format":"double","description":"Optional redemption limit"},"expires_at":{"type":"string","format":"date-time","description":"Optional expiration date"}},"required":["credential_type","credential_subject"],"type":"object","additionalProperties":false},"CredentialSubject":{"$ref":"#/components/schemas/Record_string.unknown_"},"Record_string.unknown_":{"properties":{},"additionalProperties":{},"type":"object","description":"Construct a type with a set of properties K of type T"}}},"paths":{"/api/v1/offerings":{"post":{"operationId":"CreateOffering","responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OfferingResponseDto"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponseDto"}}}}},"description":"Creates a new credential offering","summary":"Create a new credential offering with QR code\n\nValidates the credential subject against the schema and creates an offering\nthat can be claimed by a holder. Generates a QR code for the offering.","tags":["Offering"],"parameters":[],"requestBody":{"description":"Request containing credential type, subject data and optional recipient","required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateOfferingRequestDto","description":"Request containing credential type, subject data and optional recipient"}}}}}}}}
```

## Get a specific offering by ID

> Retrieves an offering by its ID

```json
{"openapi":"3.0.0","info":{"title":"issuer-service","version":"1.0.0-rc2"},"servers":[{"url":"/"}],"security":[],"paths":{"/api/v1/offerings/{id}":{"get":{"operationId":"GetOffering","responses":{"200":{"description":"Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OfferingResponseDto"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponseDto"}}}}},"description":"Retrieves an offering by its ID","summary":"Get a specific offering by ID","tags":["Offering"],"parameters":[{"description":"The unique identifier of the offering to retrieve","in":"path","name":"id","required":true,"schema":{"type":"string"}}]}}},"components":{"schemas":{"OfferingResponseDto":{"description":"Response DTO for offering details","properties":{"id":{"type":"string","description":"Unique identifier of the offering","format":"uuid"},"credential_issuer":{"type":"string","description":"Credential issuer URL","format":"uri"},"credential_configuration_ids":{"items":{"type":"string"},"type":"array","description":"List of credential configuration IDs"},"display":{"$ref":"#/components/schemas/OfferingDisplayDto","description":"Display information"},"grants":{"$ref":"#/components/schemas/OfferingGrantsDto","description":"Grant information"},"qr_code_url":{"type":"string","description":"QR code URL","format":"uri"},"offering_id":{"type":"string","description":"Offering ID","format":"uuid"},"offering_full_url":{"type":"string","description":"Full URL to the offering","format":"uri"},"redemption_limit":{"type":"number","format":"double","nullable":true,"description":"Redemption limit"},"expires_at":{"type":"string","format":"date-time","nullable":true,"description":"Expiration date"}},"required":["id","credential_issuer","credential_configuration_ids","display","grants"],"type":"object","additionalProperties":false},"OfferingDisplayDto":{"description":"Display information for the offering","properties":{"name":{"type":"string","description":"Name of the issuer"},"locale":{"type":"string","description":"Locale for the display"}},"required":["name","locale"],"type":"object","additionalProperties":false},"OfferingGrantsDto":{"description":"Grant information for the offering","properties":{"authorization_code":{"$ref":"#/components/schemas/AuthorizationCodeDto","description":"Authorization code grant type"}},"required":["authorization_code"],"type":"object","additionalProperties":false},"AuthorizationCodeDto":{"description":"Authorization code information","properties":{"issuer_state":{"type":"string","description":"Issuer state for the authorization code"}},"required":["issuer_state"],"type":"object","additionalProperties":false},"ErrorResponseDto":{"description":"Extended error response with HTTP details","properties":{"name":{"type":"string","description":"Error name"},"message":{"type":"string","description":"Error message"},"code":{"type":"number","format":"double","description":"Error code"},"statusCode":{"type":"number","format":"double","description":"HTTP status code"},"httpCode":{"type":"number","format":"double","description":"HTTP code"},"method":{"type":"string","description":"HTTP method"},"path":{"type":"string","description":"Request path"},"stack":{"type":"string","description":"Stack trace (tylko w środowisku deweloperskim)"}},"required":["name","message","code","statusCode","httpCode","method","path"],"type":"object","additionalProperties":false}}}}
```

## Get QR code for an offering

> Retrieves the QR code for a specific offering

```json
{"openapi":"3.0.0","info":{"title":"issuer-service","version":"1.0.0-rc2"},"servers":[{"url":"/"}],"security":[],"paths":{"/api/v1/offerings/{id}/qr-code":{"get":{"operationId":"GetOfferingQrCode","responses":{"200":{"description":"The QR code data for the offering","content":{"application/json":{"schema":{"type":"string"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponseDto"}}}}},"description":"Retrieves the QR code for a specific offering","summary":"Get QR code for an offering","tags":["Offering"],"parameters":[{"description":"The unique identifier of the offering","in":"path","name":"id","required":true,"schema":{"type":"string"}}]}}},"components":{"schemas":{"ErrorResponseDto":{"description":"Extended error response with HTTP details","properties":{"name":{"type":"string","description":"Error name"},"message":{"type":"string","description":"Error message"},"code":{"type":"number","format":"double","description":"Error code"},"statusCode":{"type":"number","format":"double","description":"HTTP status code"},"httpCode":{"type":"number","format":"double","description":"HTTP code"},"method":{"type":"string","description":"HTTP method"},"path":{"type":"string","description":"Request path"},"stack":{"type":"string","description":"Stack trace (tylko w środowisku deweloperskim)"}},"required":["name","message","code","statusCode","httpCode","method","path"],"type":"object","additionalProperties":false}}}}
```

Issue a credential from an offering\
\
Creates a verifiable credential from an offering and assigns it to the authenticated holder
-------------------------------------------------------------------------------------------

> Issues a credential from an existing offering

```json
{"openapi":"3.0.0","info":{"title":"issuer-service","version":"1.0.0-rc2"},"servers":[{"url":"/"}],"security":[{"bearer":[]}],"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","bearerFormat":"JWT"}},"schemas":{"CredentialResponseDto":{"description":"Response DTO for credential operations","properties":{"id":{"type":"string","description":"Unique identifier of the credential","format":"uuid"},"vc":{"$ref":"#/components/schemas/VerifiableCredential","description":"Verifiable credential (if issued) in JWT format"}},"required":["id"],"type":"object","additionalProperties":false},"VerifiableCredential":{"$ref":"#/components/schemas/VC","description":"Represents a Verifiable Credential (VC) that follows the W3C Verifiable Credentials Data Model.\n\nA Verifiable Credential is a set of tamper-evident claims and metadata that cryptographically proves\nwho issued it, when it was issued, when it expires (if applicable), and provides a secure way\nto express claims about a subject (a person, organization, or thing).\n\nKey features:\n- Tamper-evident: Any changes to the credential after issuance can be detected\n- Cryptographically verified: Contains proofs that can verify the issuer and integrity\n- Privacy-respecting: Supports selective disclosure and zero-knowledge proofs\n- Machine-verifiable: Can be automatically verified without contacting the issuer\n\nThis implementation supports:\n- JSON serialization for storage and transmission\n- JWT serialization for compatibility with existing JWT infrastructures\n- Schema validation to ensure credential data conforms to defined structures\n- Cryptographic proof generation and verification"},"VC":{"$ref":"#/components/schemas/VCv1_1","description":"Current version of the Verifiable Credential format used in the implementation"},"VCv1_1":{"properties":{"evidence":{"additionalProperties":false,"type":"object","description":"Additional supporting information for the claims in the credential"},"credentialStatus":{"items":{"$ref":"#/components/schemas/CredentialStatus"},"type":"array","description":"Credential status information, such as revocation or suspension"},"credentialSchema":{"$ref":"#/components/schemas/CredentialSchema","description":"Schema that defines the structure of the credential subject"},"expirationDate":{"type":"string","description":"Date and time when the credential expires"},"proof":{"$ref":"#/components/schemas/Proof","description":"Cryptographic proof that can be used to detect tampering and verify the issuer"},"credentialSubject":{"anyOf":[{"$ref":"#/components/schemas/CredentialSubject"},{"items":{"$ref":"#/components/schemas/CredentialSubject"},"type":"array"}],"description":"Claims about the subject of the credential"},"issuanceDate":{"type":"string","description":"Date and time when the credential was issued"},"issuer":{"$ref":"#/components/schemas/Issuer","description":"Entity that issued the credential"},"id":{"$ref":"#/components/schemas/URI","description":"Unique identifier for the credential"},"type":{"items":{"type":"string"},"type":"array","description":"Credential type information that defines what the credential represents"},"@context":{"anyOf":[{"items":{"$ref":"#/components/schemas/URI"},"type":"array"},{"$ref":"#/components/schemas/URI"}],"description":"JSON-LD context that defines the vocabulary of the credential"}},"required":["credentialSubject","issuanceDate","issuer","type","@context"],"type":"object","description":"Verifiable Credential format following W3C VC Data Model 1.1 specification."},"CredentialStatus":{"description":"A single entry in a bitstring-based status list, per VC-DATA-MODEL-2.0","properties":{"id":{"$ref":"#/components/schemas/URI"},"type":{"type":"string","enum":["BitstringStatusListEntry"],"nullable":false},"statusPurpose":{"anyOf":[{"$ref":"#/components/schemas/StatusPurpose"},{"type":"string"}]},"statusListIndex":{"type":"number","format":"double"},"statusListCredential":{"$ref":"#/components/schemas/URI"},"statusSize":{"type":"number","format":"double"},"statusMessage":{"items":{"properties":{"message":{"type":"string"},"status":{"type":"string"}},"additionalProperties":{},"required":["message","status"],"type":"object"},"type":"array"}},"required":["type","statusPurpose","statusListIndex","statusListCredential"],"type":"object","additionalProperties":false},"URI":{"type":"string"},"StatusPurpose":{"enum":["refresh","revocation","suspension","message"],"type":"string"},"CredentialSchema":{"properties":{"type":{"type":"string","enum":["JsonSchemaValidator2018"],"nullable":false,"description":"The type of schema validator, currently only supporting JsonSchemaValidator2018"},"id":{"$ref":"#/components/schemas/URI","description":"The identifier for the schema, typically a URI pointing to the schema definition"}},"required":["type","id"],"type":"object","description":"Represents a credential schema reference that defines the structure of claims in a credential.\nFollowing W3C VC Data Model, this provides the means to validate credential contents."},"Proof":{"properties":{"challange":{"type":"string"},"nonce":{"type":"string"},"jws":{"$ref":"#/components/schemas/Base64"},"proofValue":{"$ref":"#/components/schemas/Base64"},"proofPurpose":{"$ref":"#/components/schemas/ProofPurpose"},"verificationMethod":{"$ref":"#/components/schemas/DIDUri"},"created":{"type":"string"},"type":{"$ref":"#/components/schemas/ProofType"}},"required":["proofPurpose","verificationMethod","created","type"],"type":"object"},"Base64":{"type":"string"},"ProofPurpose":{"type":"string","enum":["assertionMethod","authentication","keyAgreement","contractAgreement","capabilityInvocation","capabilityDelegation"]},"DIDUri":{"type":"string"},"ProofType":{"type":"string","enum":["EcdsaSecp256k1Signature2019","EcdsaSecp256r1Signature2019","SchnorrSecp256k1Signature2019","Ed25519Signature2018","Ed25519Signature2020","JwtProof2020","JsonWebSignature2020"],"nullable":false},"CredentialSubject":{"$ref":"#/components/schemas/Record_string.unknown_"},"Record_string.unknown_":{"properties":{},"additionalProperties":{},"type":"object","description":"Construct a type with a set of properties K of type T"},"Issuer":{"properties":{"name":{"type":"string"},"id":{"$ref":"#/components/schemas/DIDUri"}},"required":["id"],"type":"object","description":"Normalized representation of an issuer after processing InputIssuer."},"ErrorResponseDto":{"description":"Extended error response with HTTP details","properties":{"name":{"type":"string","description":"Error name"},"message":{"type":"string","description":"Error message"},"code":{"type":"number","format":"double","description":"Error code"},"statusCode":{"type":"number","format":"double","description":"HTTP status code"},"httpCode":{"type":"number","format":"double","description":"HTTP code"},"method":{"type":"string","description":"HTTP method"},"path":{"type":"string","description":"Request path"},"stack":{"type":"string","description":"Stack trace (tylko w środowisku deweloperskim)"}},"required":["name","message","code","statusCode","httpCode","method","path"],"type":"object","additionalProperties":false}}},"paths":{"/api/v1/offerings/{id}/claim":{"post":{"operationId":"ClaimCredentialFromOffering","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CredentialResponseDto"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponseDto"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponseDto"}}}}},"description":"Issues a credential from an existing offering","summary":"Issue a credential from an offering\n\nCreates a verifiable credential from an offering and assigns it to the authenticated holder","tags":["Offering"],"parameters":[{"description":"The unique identifier of the offering to issue","in":"path","name":"id","required":true,"schema":{"type":"string"}}]}}}}
```


---

# Agent Instructions: 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.empe.io/develop/issuer/api-reference/offering.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.
