# 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"}}]}}}}
```
