# Offers (DCP)

{% hint style="info" %}
Specifications and best practice implementations for Verifiable Credentials are currently being developed. This page is expected to be updated, closely following these developments.
{% endhint %}

The `POST` request to the `/offers` endpoint prompts a holder to request a new Verifiable Credential.

{% hint style="info" %}
The `POST` request to the `/offers` is an **OPTIONAL** endpoint and is part of the iSHARE Framework's Verifiable Credentials support in line with the **Decentralised Claims Protocol (DCP)**.
{% endhint %}

## Issuer initiates reissuance of credential at holder

> A Credential Issuer can proactively prompt a Holder to request a new Verifiable Credential. More information in the \[DCP specification]\(<https://eclipse-dataspace-dcp.github.io/decentralized-claims-protocol/v1.0/#credential-offer-api>).

```json
{"openapi":"3.1.0","info":{"title":"iSHARE Decentralized Claims Protocol (DCP) API specifications","version":"3.0"},"tags":[{"name":"Holder","description":"Endpoints relevant for the VC Holder role (e.g., storing credentials, receiving offers)."}],"paths":{"/offers":{"post":{"tags":["Holder"],"summary":"Issuer initiates reissuance of credential at holder","description":"A Credential Issuer can proactively prompt a Holder to request a new Verifiable Credential. More information in the [DCP specification](https://eclipse-dataspace-dcp.github.io/decentralized-claims-protocol/v1.0/#credential-offer-api).","operationId":"post-offer","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/x-ext/f1da757"}}}},"responses":{"200":{"description":"Credential offer received successfully"},"400":{"description":"Bad Request - Invalid credential offer request"},"500":{"description":"Internal Server Error"}}}}}}
```

### Request model

The model for the CredentialOfferMessage is defined in: <https://eclipse-dataspace-dcp.github.io/decentralized-claims-protocol/v1.0/resources/issuance/credential-offer-message-schema.json>.

* `@context`\
  **Array of Strings**. Root level. <mark style="color:red;">(Required)</mark>\
  Specifies a valid Json-Ld context. Must contain `"https://w3id.org/dspace-dcp/v1.0/dcp.jsonld"`
* `type`\
  **String**. Root level. <mark style="color:red;">(Required)</mark>\
  A string specifying the CredentialOfferMessage type. Must contain `"CredentialOfferMessage"`
* `issuer`

  **String**. Root level. <mark style="color:red;">(Required)</mark>\
  The credential issuer DID.
* `credentials`\
  **Array of Objects**. Root level. <mark style="color:red;">(Required)</mark>\
  An array of [credential objects](https://eclipse-dataspace-dcp.github.io/decentralized-claims-protocol/v1.0/#credentialobject) that the issuer supports.
  * `id`\
    **String**. Contained in the credential object. <mark style="color:red;">(Required)</mark>\
    A string defining a unique, stable identifier for this CredentialObject.
  * `type`\
    **String**. Contained in credential object. <mark style="color:red;">(Required)</mark>\
    A string specifying the object type. Must contain `CredentialObject`.
  * `credentialType`\
    **String**. Contained in credential object.\
    A single string specifying type of credential being offered.
  * `bindingMethods`\
    **Array of strings**. Contained in credential object.\
    An array of strings defining the key material that an issued credential is bound to.
  * `profile`\
    **String**. Contained in credential object.\
    Contains the alias of the [profiles](https://eclipse-dataspace-dcp.github.io/decentralized-claims-protocol/v1.0/#profiles-of-the-decentralized-claims-protocol), e.g. `"vc20-bssl/jwt"`.
  * `issuancePolicy`\
    **Object**. Contained in credential object.\
    A [presentation definition](https://identity.foundation/presentation-exchange/spec/v2.1.1/#presentation-definition) signifying the required [Verifiable Presentation](https://eclipse-dataspace-dcp.github.io/decentralized-claims-protocol/v1.0/#dfn-verifiable-presentation) for issuance. Further details are omitted from this specifications, refer to <https://identity.foundation/presentation-exchange/spec/v2.1.1/#presentation-definition> for more information.

### Example request

```json
POST /offers
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json

{
  "@context": [
    "https://w3id.org/dspace-dcp/v1.0/dcp.jsonld"
  ],
  "type": "CredentialOfferMessage",
  "issuer": "did:ishare:EU.NL.NTRLNL-10000000",
  "credentials": [
    {
      "id": "d5c77b0e-7f4e-4fd5-8c5f-28b5fc3f96d1",
      "type": "CredentialObject",
      "credentialType": "FrameworkRole",
      "bindingMethods": [
        "did:web"
      ],
      "profile": "vc10-sl2021/jwt",
      "issuancePolicy": {
        "id": "a468fc48-5c1a-43c7-903e-ab1851882afb",
        "input_descriptors": [
          {
            "id": "framework-compliance",
            "name": "Requires proof of compliance to framework",
            "purpose" :: 
            "constraints": {
              "fields": [
                {
                  "path": [
                    "$.vc.type"
                  ],
                  "filter": {
                    "type": "string",
                    "pattern": "^FrameworkCompliance$"
                  }
                }
              ]
            }
          }
        ]
      }
    }
  ]
}
```

### Response model

On succesfull receipt of the CredentialOfferMessage, the holder must return a 200 code.
