> For the complete documentation index, see [llms.txt](https://docs.indicio.tech/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.indicio.tech/developer/indicio-proven-r/how-to-guides/indicio-proven-api-documentation.md).

# Indicio Proven API Documentation

## General Information

### HTTP Headers

All “v1” APIs require an “x-api-key” header to be set on the request. The “x-api-key” is not just used for authorization; it’s also used to determine which wallet will complete the request.

### Wallet ID

Proven supports a multi-tenant environment by default, even if you only intend to use a single wallet for this installed agent. Each wallet is identified by a wallet ID. Because these wallet IDs are linked to the API key(s) you will create, you don’t have to pay close attention to the wallet ID when using the API.

## Multi-Tenancy

Proven can support multiple instances and various configurations of decentralized identity software on a single machine. Each software installation is referred to as an agent, and each logical subdivision of the software is referred to as a wallet; in other words, one installation can be configured to act as several independent copies of decentralized identity software. This concept of having multiple software units running independently on the same machine is called multi-tenancy.<br>

Proven manages multi-tenancy by associating each wallet with a user group and allowing the administrator to assign users to groups (and thereby wallets). Thus, each installation can have multiple wallets, multiple users per wallet, and multiple wallets per user.<br>

Wallet authentication in Proven is handled via OpenID Connect, and the user's group is determined by the IAM service (Keycloak is the default for Proven). The IAM service provides the user's group and permissions, which Proven uses to determine the appropriate wallet for the user's operations.

## Managing Wallets

### Login

To log in, navigate to [http://your-domain-name.com/auth/login](http://localhost/auth/login). You will be redirected from Proven to a Keycloak login page, where you will log in with the user “indicio” and password “adminadminadmin”. After successful authentication, you will be redirected back to Proven. Keycloak will pass an OpenID Connect token, which will log the user in automatically. You will then see the Proven dashboard with the user “indicio” logged in.

### Create Wallets and API Keys

To manage wallets and their API keys, navigate to the Proven “Multi-tenancy” page. Click “Create Subwallet” to generate a new wallet.

To create an API key, select the wallet to which the new API key will belong from the drop-down menu and check the roles that the API key will have. After creation, store the API key and its ID securely (this is the only time that the API key will be available). To revoke an API key, use the API key ID and Wallet ID to indicate which API key will be revoked.

### Managing Users

Proven-UI does not have any pages for managing users. To manage users, you must use the Keycloak admin console. The linking of users to wallets requires the group ID entered into Keycloak.

### Adding Users to a Wallet

To add users to a new wallet, follow these steps:

1. Create a New Group in Keycloak:
   1. Select the “Indicio Proven Realm”
   2. Click on “Groups” in the left menu
   3. Click on the “Create group” button and name the group. The group name must match the wallet name that was created
   4. Click on the new group in the list of groups
   5. Click on the “Attributes” tab
   6. Click on “Add attributes”
   7. Enter "proven\_group\_id" as the key and the wallet name as the Value
   8. Click the “Save” button
2. Add New Users to the Group:
   1. Select the “Indicio Proven Realm”
   2. Click on “Users” in the left menu
   3. Select the user to add to the wallet
   4. Click on the “Groups” tab
   5. Click on the “Join Group” button
   6. Select the group(s) (which correspond to wallets) that you would like to add the user to
   7. Click the “Join” button
3. Log in to Proven:
   1. The first user to log in to the new wallet must have the “super-admin” role to complete the linking of the user group to the wallet.
   2. The super-admin user must simply log in to Proven to complete this operation.

By following these steps, the new user group and its associated users will be created and associated with the specified wallet.

### Using API Key Endpoints

In addition to an administrative UI, Proven offers an API for the programmatic execution of agent operations. Its OpenAPI specification can be found at [http://your-domain-name.com/api/doc](http://localhost/api/doc) of the server you are working with.

Proven uses API keys to authenticate requests to the API and authorize the API user's access to the requested resource. Proven uses the API key to determine the user's group and permissions, which are used to determine the appropriate wallet for the user's operations.

### Environment Variables

To use API keys, you must set the following environment variable:

| **Variable**     | **Explanation**                                                |
| ---------------- | -------------------------------------------------------------- |
| PROVEN\_API\_KEY | The base API key needed for management of wallets and API keys |

### API Key Creation Using the Swagger UI:

To create a new API key, you will need the base wallet API key. The base wallet API key is used to create wallets and their associated API keys. It can be found in the .env file as PROVEN\_API\_KEY.

Once you have the base wallet API key, you will need to be authorized before you can create new API keys.&#x20;

1. Click the “Authorize” button at the top right of the page.&#x20;
2. Enter the API key in the “Value” field.
3. Click the “Authorize” button.

Wallet API keys are used to authenticate requests to the Proven API. To create a new API key using Swagger, navigate to [http://your-domain-name.com/api/doc](http://localhost/api/doc).&#x20;

1. Create a new wallet if it is not already created.
2. Navigate to the API Keys tab and click the “Create API Key” button.&#x20;
3. Enter the wallet\_id for the wallet to which the API key will belong.
4. Click the “Create” button.&#x20;
5. The API key will be displayed in the table. Copy the API key and store it securely.

API keys are not stored by Proven; after the first creation of the key, there is no way to retrieve it. If the API key is lost, a new one must be created. Proven API requests must include the key in the request headers.

API keys have associated roles, which determine multitenancy privileges in the following manner:

* super-admin: Can create and revoke API keys for any wallet with any set of roles
* admin: Can create and revoke API keys in their wallet for any set of roles that are the same or a subset of its own
* technician and other limited roles: Have no multitenancy privileges

{% hint style="info" %}
The base API key is used to allow the base admin user to create and manage wallets and their API keys. The base admin user cannot perform most wallet API operations; to use most of the API, a wallet and its API key are needed.
{% endhint %}

<figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXci7uNcnHPYSpT84lZnP7wHJ462WDHcI-VS0wEKs5TVoZuPoUjZLh8QTdPjHm1FPiKcwUL2O6j2t2eHIEeGCDU_DZHNNkW7OApDuvBjucZbwE7_HZ9ypmET2QWEAnN6Z9v9_JV5Qw?key=RLV7pWjM_6NM2OYMxXIgxQ" alt=""><figcaption></figcaption></figure>

## API Key Flow Explanation:

1. User Requests API Key: The user requests to generate an API key.
2. Generate Random String: The API generates an opaque random string using a secure random source.
3. Present API Key: The API presents the random string (API key) to the user.
4. Store API Key Securely: The user stores the API key securely.
5. HMAC the String: The API HMACs the string with a secret.
6. Store HMACed Value: The API stores the HMACed value in the database.
7. Send API Request: The user sends an API request with the API key in the headers.
8. HMAC the Received Key: The API HMACs the received API key with the same secret.
9. Check User Role: The API checks the user's role.
10. Look Up HMACed Value: The API looks up the HMACed value in the database.
11. Return Metadata: The database returns metadata if the key is valid and not revoked.
12. Process Request: The API processes the request and returns the response to the user if the role is valid.
13. Return Error: The API returns an error if the role is invalid.

### Distinction Between HTTP Endpoints:

* Internal: Accessible using the Base API Key
  * Wallet creation
  * API Key creation and revocation
* External: Accessible through the use of wallet API Keys (which are created by the Base API Key for a particular wallet) or by a User in the Proven UI (which accesses information via the Proven WS API)
  * All other API endpoints

## API Contents

## Proven DIDComm APIs

### Basic Messages

#### Basic Message - Create Basic Message

```
/api/v1/messages - POST
```

This endpoint creates a Basic Message record that handles sending messages to currently active connection(s) or future active connection(s) until the request record reaches a completed state.&#x20;

### **Request Body Information:**

<table data-header-hidden><thead><tr><th></th><th width="190"></th><th></th><th></th></tr></thead><tbody><tr><td><strong>Field name</strong></td><td><strong>Expected type/values</strong></td><td><strong>Examples</strong></td><td><strong>Notes</strong></td></tr><tr><td>invitation_id</td><td>integer</td><td>123</td><td>Optional integer used to process the request record by a connection tied to the invitation_id. Used with contact_id, has second priority</td></tr><tr><td>contact_id</td><td>string</td><td>contact123</td><td>Optional contact ID string used for processing the request record by known contact. Used with invitation_id, has first priority</td></tr><tr><td>message</td><td>string</td><td>Hello world!</td><td>Message content</td></tr></tbody></table>

**Response Body Information:**

<table data-header-hidden><thead><tr><th></th><th width="191"></th><th></th><th></th></tr></thead><tbody><tr><td><strong>Field name</strong></td><td><strong>Expected type/values</strong></td><td><strong>Examples</strong></td><td><strong>Notes</strong></td></tr><tr><td>success</td><td>string</td><td>Message was sent!</td><td>Success message</td></tr></tbody></table>

### Sample Response Body:

```
{ "success": "Message was sent!" }
```

### Basic Message - Read All Basic Messages

```
/api/v1/messages - GET
```

This endpoint fetches all Basic Message records.

**Request Body Information:**

No request body

### **Response Body Information:**

The response body is an array of records. The following information is the data of each record:

<table data-header-hidden><thead><tr><th width="177"></th><th></th><th></th><th></th></tr></thead><tbody><tr><td><strong>Field name</strong></td><td><strong>Expected type/values</strong></td><td><strong>Examples</strong></td><td><strong>Notes</strong></td></tr><tr><td>id</td><td>integer</td><td>123</td><td>Primary identifier for record</td></tr><tr><td>message_id</td><td>string</td><td>2ff097c3-5b65-4c25-a836-e2e3edb8195e</td><td>Unique identifier for exchange message</td></tr><tr><td>contact_id</td><td>string</td><td>199e022b-bb4c-4ae4-99fe-395b50ad4b66</td><td>Optional contact ID string used for processing the request record by known contact. Used with invitation_id, has first priority</td></tr><tr><td>invitation_id</td><td>integer</td><td>123</td><td>Optional integer used to process the request record by a connection tied to the invitation_id. Used with contact_id, has second priority</td></tr><tr><td>message</td><td>string</td><td>Hello World!</td><td>Message content</td></tr><tr><td>state</td><td>string</td><td>sent</td><td>Current state of Basic Message request record</td></tr><tr><td>sent_time</td><td>string</td><td>2024-12-30T13:17:40.107Z</td><td>Date/time the message was sent to connection (ACA-Py field) </td></tr><tr><td>locale</td><td>string</td><td>null</td><td>Not used at present</td></tr><tr><td>wallet_id</td><td>string</td><td>199e022b-bb4c-4ae4-99fe-395b50ad4b66</td><td>Identifier of the wallet used to process the request. The wallet used is determined by the x-api-key.</td></tr><tr><td>created_at</td><td>string</td><td>2024-12-30T13:17:40.108Z</td><td>Date of creation for the Basic Message record</td></tr><tr><td>updated_at</td><td>string</td><td>2024-12-30T13:17:40.108Z</td><td>Date the Basic Message record was last updated</td></tr></tbody></table>

### Sample Response Body:

```
[
   {
       "id": 1,
       "message_id": "",
       "contact_id": "199e022b-bb4c-4ae4-99fe-395b50ad4b66",
       "invitation_id": 1,
       "message": "Multiple Contact Hello World!",
       "state": "sent",
       "sent_time": "2024-12-30T13:17:40.107Z",
       "locale": "",
       "wallet_id": "eea19d5b-cbfc-44a0-9406-a9bddcbe3994",
       "created_at": "2024-12-30T13:17:40.108Z",
       "updated_at": "2024-12-30T13:17:40.648Z"
   }
]
```

### Basic Message - Read Basic Message by ID

```
/api/v1/messages/<id> - GET
```

This endpoint fetches a Basic Message record by its ID.

**Request Body Information:**

No request body

### **Response Body Information:**

<table data-header-hidden><thead><tr><th width="175"></th><th></th><th></th><th></th></tr></thead><tbody><tr><td><strong>Field name</strong></td><td><strong>Expected type/values</strong></td><td><strong>Examples</strong></td><td><strong>Notes</strong></td></tr><tr><td>id</td><td>integer</td><td>123</td><td>Primary identifier for record</td></tr><tr><td>message_id</td><td>string</td><td>2ff097c3-5b65-4c25-a836-e2e3edb8195e</td><td>Unique identifier for exchange message</td></tr><tr><td>contact_id</td><td>string</td><td>199e022b-bb4c-4ae4-99fe-395b50ad4b66</td><td>Optional contact ID string used for processing the request record by known contact. Used with invitation_id, has first priority</td></tr><tr><td>invitation_id</td><td>integer</td><td>123</td><td>Optional integer used to process the request record by a connection tied to the invitation_id. Used with contact_id, has second priority</td></tr><tr><td>message</td><td>string</td><td>Hello World!</td><td>Message content</td></tr><tr><td>state</td><td>string</td><td>sent</td><td>Current state of Basic Message request record</td></tr><tr><td>sent_time</td><td>string</td><td>2024-12-30T13:17:40.107Z</td><td>Date/time the message was sent to connection (ACA-Py field) </td></tr><tr><td>locale</td><td>string</td><td>null</td><td>Not used at present</td></tr><tr><td>wallet_id</td><td>string</td><td>199e022b-bb4c-4ae4-99fe-395b50ad4b66</td><td>Identifier of the wallet used to process the request. The wallet used is determined by the x-api-key.</td></tr><tr><td>created_at</td><td>string</td><td>2024-12-30T13:17:40.108Z</td><td>Date of creation for the Basic Message record</td></tr><tr><td>updated_at</td><td>string</td><td>2024-12-30T13:17:40.108Z</td><td>Date the Basic Message record was last updated</td></tr></tbody></table>

### **Sample Response Body:**

```
  {
      "id": 1,
      "message_id": "",
      "contact_id": "199e022b-bb4c-4ae4-99fe-395b50ad4b66",
      "invitation_id": 1,
      "message": "Multiple Contact Hello World!",
      "state": "sent",
      "sent_time": "2024-12-30T13:17:40.107Z",
      "locale": "",
      "wallet_id": "eea19d5b-cbfc-44a0-9406-a9bddcbe3994",
      "created_at": "2024-12-30T13:17:40.108Z",
      "updated_at": "2024-12-30T13:17:40.648Z"
    }
```

## Connections

### Connections - Read All Connections

```
/api/v1/connections - GET
```

This endpoint fetches all connections, and includes parameters for pagination purposes.

### **Request URL Parameters Information:**

<table data-header-hidden><thead><tr><th width="176"></th><th></th><th></th><th></th></tr></thead><tbody><tr><td><strong>Field name</strong></td><td><strong>Expected type/values</strong></td><td><strong>Examples</strong></td><td><strong>Notes</strong></td></tr><tr><td>sort-field</td><td>text</td><td>contact_id</td><td>Optional, any of the field names listed in the "Create invitation" POST body plus invitation_id</td></tr><tr><td>sort-direction</td><td>text</td><td>ASC</td><td>Optional, ASC or DESC</td></tr><tr><td>page-size</td><td>int</td><td>10</td><td>Optional, how many items should be returned in a page</td></tr><tr><td>current-page</td><td>int</td><td>2</td><td>Optional, the current page to retrieve</td></tr><tr><td>item-count</td><td>int</td><td>10</td><td>Optional, the total number of items</td></tr></tbody></table>

### **Sample URLs:**

```
https://your-domain-name.com/api/v1/connections?sort-field=contact_id&sort-direction=ASC&page-size=10&current-page=2
```

#### **Request Body Information:**

No request body

### **Response Body Information:**

The response body has three sections:

* Params: The pagination and sorting parameters
  * `"sort": “DESC”`
  * &#x20;`"pageSize": "10"`
  * `"currentPage": 1`
  * &#x20;`"pageCount": 1`
  * &#x20;`"itemCount": 1`
* Rows: The array of records
  * Each row in the rows array has the properties found in the table below.
* Count: The number of items returned
  * `“count”: 3`

<table data-header-hidden><thead><tr><th width="175"></th><th></th><th></th><th></th></tr></thead><tbody><tr><td><strong>Field name</strong></td><td><strong>Expected type/values</strong></td><td><strong>Examples</strong></td><td><strong>Notes</strong></td></tr><tr><td>connection_id</td><td>string</td><td>d61b698f-2eb4-438d-bec0-a7f88bcb47f0</td><td>Unique and primary identifier for the connection</td></tr><tr><td>state</td><td>string</td><td>active</td><td>Invitation, init, request, response, active, error, deleted</td></tr><tr><td>my_did</td><td>string</td><td>TP1jLwshBSSUArz154iLg2</td><td>Decentralized identifier</td></tr><tr><td>alias</td><td>string</td><td>Proven</td><td>String for how this connection could be labeled in the receiving agent</td></tr><tr><td>request_id</td><td>string</td><td>5f2b5d38-b3ad-43af-9b50-98df250e600e</td><td>ACA-Py field</td></tr><tr><td>invitation_key</td><td>string</td><td>7FQqpV7jepn5pf5jmkYwuXgQXrN9QeDSUw2tE8vaWAf7</td><td>ACA-Py field tied to the invitation used to establish the connection</td></tr><tr><td>invitation_msg_id</td><td>string</td><td>afbc12b7-28fa-4936-bf11-748148a98ffc</td><td>ACA-Py field tied to the invitation</td></tr><tr><td>invitation_mode</td><td>string</td><td>once</td><td>once, multi</td></tr><tr><td>invitation_url</td><td>string</td><td>https://&#x3C;domain>?oob=&#x3C;base64 invitation></td><td>Invitation_url used to establish the connection</td></tr><tr><td>invitation</td><td>object</td><td>{...}</td><td>Raw invitation data used by the receiving agent to connect</td></tr><tr><td>accept</td><td>string</td><td>auto</td><td>ACA-Py field/parameter </td></tr><tr><td>initiator</td><td>string</td><td>null</td><td>ACA-Py field</td></tr><tr><td>their_role</td><td>string</td><td>inviter</td><td>inviter, invitee</td></tr><tr><td>their_did</td><td>string</td><td>PhTeNogZWHmjCqiyPr8cds</td><td>Connecting wallet’s DID (sender or receiver, depending on who generated the invitation)</td></tr><tr><td>their_public_did</td><td>string</td><td>null</td><td>Connecting wallet’s Public DID (sender or receiver, depending on who generated the invitation)</td></tr><tr><td>their_label</td><td>string</td><td>Holdr+</td><td>Label used by this wallet to identify this connection</td></tr><tr><td>routing_state</td><td>string</td><td>null</td><td>ACA-Py field</td></tr><tr><td>inbound_connection_id</td><td>string</td><td>null</td><td>ACA-Py field</td></tr><tr><td>error_msg</td><td>string</td><td>null</td><td>Error message provided by ACA-Py during exchange</td></tr><tr><td>contact_id</td><td>string</td><td>0846c509-4a6e-4022-bebd-e2e9ff63b747</td><td>Identifier of the Contact tied to this connection</td></tr><tr><td>discover_features</td><td>array</td><td>[...]</td><td>List of available features for this connection</td></tr><tr><td>wallet_id</td><td>string</td><td>eea19d5b-cbfc-44a0-9406-a9bddcbe3994</td><td>Unique identifier of the wallet tied to this connection</td></tr><tr><td>created_at</td><td>timestamp</td><td>2024-12-30T10:37:30.734Z</td><td>Date/time of creation for the connection record</td></tr><tr><td>updated_at</td><td>timestamp</td><td>2024-12-30T10:37:31.686Z</td><td>Date/time the connection record was last updated</td></tr></tbody></table>

### **Sample Response Body:**

```
{
  "params": {
      "sort": [
          [
              [
                  "updated_at",
                  "DESC"
              ]
          ]
      ],
      "pageSize": "2",
      "currentPage": 2,
      "pageCount": 2,
      "itemCount": 3
  },
  "rows": [
      {
          "connection_id": "65eb5586-e519-441d-a05c-c3c697ecd97a",
          "state": "active",
          "my_did": "TP1jLwshBSSUArz154iLg2",
          "alias": "Proven",
          "request_id": "5f2b5d38-b3ad-43af-9b50-98df250e600e",
          "invitation_key": "7FQqpV7jepn5pf5jmkYwuXgQXrN9QeDSUw2tE8vaWAf7",
          "invitation_msg_id": "afbc12b7-28fa-4936-bf11-748148a98ffc",
          "invitation_mode": "once",
          "invitation_url": "https://hard-tiger-38.tun2.indiciotech.io?oob=eyJAdHlwZSI6ICJodHRwczovL2RpZGNvbW0ub3JnL291dC1vZi1iYW5kLzEuMS9pbnZpdGF0aW9uIiwgIkBpZCI6ICJhZmJjMTJiNy0yOGZhLTQ5MzYtYmYxMS03NDgxNDhhOThmZmMiLCAibGFiZWwiOiAiUHJpbWFyeVdhbGxldCIsICJoYW5kc2hha2VfcHJvdG9jb2xzIjogWyJodHRwczovL2RpZGNvbW0ub3JnL2RpZGV4Y2hhbmdlLzEuMCJdLCAic2VydmljZXMiOiBbeyJpZCI6ICIjaW5saW5lIiwgInR5cGUiOiAiZGlkLWNvbW11bmljYXRpb24iLCAicmVjaXBpZW50S2V5cyI6IFsiZGlkOmtleTp6Nk1ra2hmdFFqTkF6TkdZdzl2U1RLV25rZEVRTVJkenBYVG9Bd3dwNFF0YlJQU1YjejZNa2toZnRRak5Bek5HWXc5dlNUS1dua2RFUU1SZHpwWFRvQXd3cDRRdGJSUFNWIl0sICJzZXJ2aWNlRW5kcG9pbnQiOiAiaHR0cHM6Ly9oYXJkLXRpZ2VyLTM4LnR1bjIuaW5kaWNpb3RlY2guaW8ifV19",
          "invitation": {
              "@type": "https://didcomm.org/out-of-band/1.1/invitation",
              "@id": "afbc12b7-28fa-4936-bf11-748148a98ffc",
              "label": "PrimaryWallet",
              "handshake_protocols": [
                  "https://didcomm.org/didexchange/1.0"
              ],
              "services": [
                  {
                      "id": "#inline",
                      "type": "did-communication",
                      "recipientKeys": [
                          "did:key:z6MkkhftQjNAzNGYw9vSTKWnkdEQMRdzpXToAwwp4QtbRPSV#z6MkkhftQjNAzNGYw9vSTKWnkdEQMRdzpXToAwwp4QtbRPSV"
                      ],
                      "serviceEndpoint": "https://hard-tiger-38.tun2.indiciotech.io"
                  }
              ]
          },
          "accept": "auto",
          "initiator": null,
          "their_role": "inviter",
          "their_did": "PhTeNogZWHmjCqiyPr8cds",
          "their_public_did": null,
          "their_label": "PrimaryWallet",
          "routing_state": null,
          "inbound_connection_id": null,
          "error_msg": null,
          "contact_id": "0846c509-4a6e-4022-bebd-e2e9ff63b747",
          "transaction_role": null,
          "discovered_features": [...],
          "wallet_id": "eea19d5b-cbfc-44a0-9406-a9bddcbe3994",
          "created_at": "2024-12-30T10:37:30.734Z",
          "updated_at": "2024-12-30T10:37:31.686Z"
      }
  ],
  "count": 3
}
```

## Connections - Read Connection by ID

```
/api/v1/connections/<connection_id> - GET
```

This endpoint fetches a connection record by its `connection_id`.

**Request Body Information:**

No request body

### **Response Body Information:**

<table data-header-hidden><thead><tr><th width="175"></th><th></th><th></th><th></th></tr></thead><tbody><tr><td><strong>Field name</strong></td><td><strong>Expected type/values</strong></td><td><strong>Examples</strong></td><td><strong>Notes</strong></td></tr><tr><td>connection_id</td><td>string</td><td>d61b698f-2eb4-438d-bec0-a7f88bcb47f0</td><td>Unique and primary identifier for the connection</td></tr><tr><td>state</td><td>string</td><td>active</td><td>Invitation, init, request, response, active, error, deleted</td></tr><tr><td>my_did</td><td>string</td><td>TP1jLwshBSSUArz154iLg2</td><td>Decentralized identifier</td></tr><tr><td>alias</td><td>string</td><td>Proven</td><td>String for how this connection could be labeled in the receiving agent</td></tr><tr><td>request_id</td><td>string</td><td>5f2b5d38-b3ad-43af-9b50-98df250e600e</td><td>ACA-Py field</td></tr><tr><td>invitation_key</td><td>string</td><td>7FQqpV7jepn5pf5jmkYwuXgQXrN9QeDSUw2tE8vaWAf7</td><td>ACA-Py field tied to the invitation used to establish the connection</td></tr><tr><td>invitation_msg_id</td><td>string</td><td>afbc12b7-28fa-4936-bf11-748148a98ffc</td><td>ACA-Py field tied to the invitation</td></tr><tr><td>invitation_mode</td><td>string</td><td>once</td><td>once, multi</td></tr><tr><td>invitation_url</td><td>string</td><td>https://&#x3C;domain>?oob=&#x3C;base64 invitation></td><td>Invitation_url used to establish the connection</td></tr><tr><td>invitation</td><td>object</td><td>{...}</td><td>Raw invitation data used by the receiving agent to connect</td></tr><tr><td>accept</td><td>string</td><td>auto</td><td>ACA-Py field/parameter </td></tr><tr><td>initiator</td><td>string</td><td>null</td><td>ACA-Py field</td></tr><tr><td>their_role</td><td>string</td><td>inviter</td><td>inviter, invitee</td></tr><tr><td>their_did</td><td>string</td><td>PhTeNogZWHmjCqiyPr8cds</td><td>Connecting wallet’s DID (sender or receiver, depending on who generated the invitation)</td></tr><tr><td>their_public_did</td><td>string</td><td>null</td><td>Connecting wallet’s Public DID (sender or receiver, depending on who generated the invitation)</td></tr><tr><td>their_label</td><td>string</td><td>Holdr+</td><td>Label used by this wallet to identify this connection</td></tr><tr><td>routing_state</td><td>string</td><td>null</td><td>ACA-Py field</td></tr><tr><td>inbound_connection_id</td><td>string</td><td>null</td><td>ACA-Py field</td></tr><tr><td>error_msg</td><td>string</td><td>null</td><td>Error message provided by ACA-Py during exchange</td></tr><tr><td>contact_id</td><td>string</td><td>0846c509-4a6e-4022-bebd-e2e9ff63b747</td><td>Identifier of the Contact this connection is tied to</td></tr><tr><td>discover_features</td><td>array</td><td>[...]</td><td>List of available features for this connection</td></tr><tr><td>wallet_id</td><td>string</td><td>eea19d5b-cbfc-44a0-9406-a9bddcbe3994</td><td>Unique identifier of the wallet this connection is tied to</td></tr><tr><td>created_at</td><td>timestamp</td><td>2024-12-30T10:37:30.734Z</td><td>Date/time of creation for the connection record</td></tr><tr><td>updated_at</td><td>timestamp</td><td>2024-12-30T10:37:31.686Z</td><td>Date/time the connection record was last updated</td></tr></tbody></table>

### **Sample Response Body:**

```
{
      "connection_id": "65eb5586-e519-441d-a05c-c3c697ecd97a",
      "state": "active",
      "my_did": "TP1jLwshBSSUArz154iLg2",
      "alias": "Proven",
      "request_id": "5f2b5d38-b3ad-43af-9b50-98df250e600e",
      "invitation_key": "7FQqpV7jepn5pf5jmkYwuXgQXrN9QeDSUw2tE8vaWAf7",
      "invitation_msg_id": "afbc12b7-28fa-4936-bf11-748148a98ffc",
      "invitation_mode": "once",
      "invitation_url": "https://hard-tiger-38.tun2.indiciotech.io?oob=eyJAdHlwZSI6ICJodHRwczovL2RpZGNvbW0ub3JnL291dC1vZi1iYW5kLzEuMS9pbnZpdGF0aW9uIiwgIkBpZCI6ICJhZmJjMTJiNy0yOGZhLTQ5MzYtYmYxMS03NDgxNDhhOThmZmMiLCAibGFiZWwiOiAiUHJpbWFyeVdhbGxldCIsICJoYW5kc2hha2VfcHJvdG9jb2xzIjogWyJodHRwczovL2RpZGNvbW0ub3JnL2RpZGV4Y2hhbmdlLzEuMCJdLCAic2VydmljZXMiOiBbeyJpZCI6ICIjaW5saW5lIiwgInR5cGUiOiAiZGlkLWNvbW11bmljYXRpb24iLCAicmVjaXBpZW50S2V5cyI6IFsiZGlkOmtleTp6Nk1ra2hmdFFqTkF6TkdZdzl2U1RLV25rZEVRTVJkenBYVG9Bd3dwNFF0YlJQU1YjejZNa2toZnRRak5Bek5HWXc5dlNUS1dua2RFUU1SZHpwWFRvQXd3cDRRdGJSUFNWIl0sICJzZXJ2aWNlRW5kcG9pbnQiOiAiaHR0cHM6Ly9oYXJkLXRpZ2VyLTM4LnR1bjIuaW5kaWNpb3RlY2guaW8ifV19",
      "invitation": {
          "@type": "https://didcomm.org/out-of-band/1.1/invitation",
          "@id": "afbc12b7-28fa-4936-bf11-748148a98ffc",
          "label": "PrimaryWallet",
          "handshake_protocols": [
              "https://didcomm.org/didexchange/1.0"
          ],
          "services": [
              {
                  "id": "#inline",
                  "type": "did-communication",
                  "recipientKeys": [ "did:key:z6MkkhftQjNAzNGYw9vSTKWnkdEQMRdzpXToAwwp4QtbRPSV#z6MkkhftQjNAzNGYw9vSTKWnkdEQMRdzpXToAwwp4QtbRPSV"
                  ],
                  "serviceEndpoint": "https://hard-tiger-38.tun2.indiciotech.io"
              }
          ]
      },
      "accept": "auto",
      "initiator": null,
      "their_role": "inviter",
      "their_did": "PhTeNogZWHmjCqiyPr8cds",
      "their_public_did": null,
      "their_label": "PrimaryWallet",
      "routing_state": null,
      "inbound_connection_id": null,
      "error_msg": null,
      "contact_id": "0846c509-4a6e-4022-bebd-e2e9ff63b747",
      "transaction_role": null,
      "discovered_features": [...],
      "wallet_id": "eea19d5b-cbfc-44a0-9406-a9bddcbe3994",
      "created_at": "2024-12-30T10:37:30.734Z",
      "updated_at": "2024-12-30T10:37:31.686Z"
  }
```

## Context

#### Context - Save JSON-LD Context File

```
/api/v1/context - POST
```

This endpoint saves a JSON-LD context file.

### **Request Body Information:**

<table data-header-hidden><thead><tr><th width="177"></th><th></th><th></th><th></th></tr></thead><tbody><tr><td><strong>Field name</strong></td><td><strong>Expected type/values</strong></td><td><strong>Examples</strong></td><td><strong>Notes</strong></td></tr><tr><td>context_file_id</td><td>string</td><td>test.json</td><td>File name of the JSON-LD context file to save</td></tr><tr><td>file</td><td>object</td><td>{...}</td><td>Object containing JSON-LD contexts</td></tr></tbody></table>

### **Request Body Sample:**

```
 {
  "context_file_id": "test.json",
  "file": {
    "@context": {
      "GenericCredential": {
        "@id": "https://example.com/indicio#GenericCredential",
        "@context": {
          "name": "http://schema.org/name",
          "givenName": "http://schema.org/givenName",
          "familyName": "http://schema.org/familyName",
          "identifier": "https://example.com/indicio#identifier",
          "date": {
            "@id": "http://schema.org/date",
            "@type": "http://www.w3.org/2001/XMLSchema#date"
          },
          "description": "http://schema.org/description"
        }
      }
    }
  }
}
```

### **Response Body Information:**

<table data-header-hidden><thead><tr><th width="176"></th><th></th><th></th><th></th></tr></thead><tbody><tr><td><strong>Field name</strong></td><td><strong>Expected type/values</strong></td><td><strong>Examples</strong></td><td><strong>Notes</strong></td></tr><tr><td>success</td><td>string</td><td>Context file was posted</td><td>Success message</td></tr></tbody></table>

### **Sample Response Body:**

```
{ "success": "Context file was posted" }
```

Credentials

#### Credentials - Create Credential Issuance (JSON-LD)

```
/api/v1/credentials/json-ld - POST
```

This endpoint creates an Issuance request record that handles issuing credentials (JSON-LD) for currently active connection(s) or future active connection(s) until the request record reaches a completed state.

### **Request Body Information:**

<table data-header-hidden><thead><tr><th width="172"></th><th></th><th></th><th></th></tr></thead><tbody><tr><td><strong>Field name</strong></td><td><strong>Expected type/values</strong></td><td><strong>Examples</strong></td><td><strong>Notes</strong></td></tr><tr><td>invitation_id</td><td>integer</td><td>123</td><td>Optional integer used to process the request record by a connection tied to the invitation_id. Used with contact_id, has second priority</td></tr><tr><td>contact_id</td><td>text</td><td>contact123</td><td>Optional contact ID string used for processing the request record by known contact. Used with invitation_id, has first priority</td></tr><tr><td>context</td><td>array</td><td>https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json</td><td>Contexts of the credential</td></tr><tr><td>label</td><td>string</td><td>Drivers License</td><td>Credentials label</td></tr><tr><td>issuer_name</td><td>string</td><td>Proven</td><td>Name of the issuer</td></tr><tr><td>type</td><td>array</td><td>[...]</td><td>Types of the credential</td></tr><tr><td>attributes</td><td>array</td><td>[{“name”: “first_name”, “value”: “Alice”}]</td><td>The “name” accepts string data type only. The “value” accepts string, object, and array data types</td></tr><tr><td>timeout</td><td>integer</td><td>10</td><td>Number of seconds the initial request will wait for a completed record</td></tr><tr><td>rule</td><td>string</td><td>no rule</td><td>Rules enforced for this request (future feature)</td></tr><tr><td>did</td><td>string</td><td>did:indy:indicio:demo:JcBoFbZQo9yd3SWUc6Lvbt</td><td>Decentralized identifier used to sign the credential</td></tr><tr><td>proofType</td><td>string</td><td>Ed25519Signature2020</td><td>Type of proof to generate to sign the credential. Defaults to Ed25519Signature2018</td></tr></tbody></table>

### **Response Body Information:**

<table data-header-hidden><thead><tr><th width="177"></th><th></th><th></th><th></th></tr></thead><tbody><tr><td><strong>Field name</strong></td><td><strong>Expected type/values</strong></td><td><strong>Examples</strong></td><td><strong>Notes</strong></td></tr><tr><td>request_id</td><td>integer</td><td>1</td><td>Records primary key</td></tr><tr><td>connection_id</td><td>string</td><td>f7699aa9-beec-4e0c-868d-eb3766ad2f64</td><td>Connection used for this request, determined by invitation_id and contact_id</td></tr><tr><td>contact_id</td><td>text</td><td>contact123</td><td>Optional contact ID string used for processing the request record by known contact. Used with invitation_id, has first priority</td></tr><tr><td>invitation_id</td><td>integer</td><td>123</td><td>Optional integer used to process the request record by a connection tied to the invitation_id. Used with contact_id, has second priority</td></tr><tr><td>context</td><td>array</td><td>https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json</td><td>Contexts of the credential</td></tr><tr><td>label</td><td>string</td><td>Drivers License</td><td>Credentials label</td></tr><tr><td>type</td><td>array</td><td>[...]</td><td>Types of the credential</td></tr><tr><td>attributes</td><td>array</td><td>[{“name”: “first_name”, “value”: “Alice”}]</td><td>The “name” accepts string data type only. The “value” accepts string, object, and array data types</td></tr><tr><td>wallet_id</td><td>string</td><td>eea19d5b-cbfc-44a0-9406-a9bddcbe3994</td><td>Identifier that ties this record to an existing wallet</td></tr><tr><td>issuer_name</td><td>string</td><td>Proven</td><td>Name of the issuer</td></tr><tr><td>timeout</td><td>integer</td><td>10</td><td>Number of seconds the initial request will wait for a completed record</td></tr><tr><td>rule</td><td>string</td><td>“no rule”</td><td>Rules enforced for this request (future feature)</td></tr><tr><td>meta_data</td><td>object</td><td>{...}</td><td>Metadata for this credential</td></tr><tr><td>state</td><td>string</td><td>offer_sent</td><td>ACA-Py field - null means no issuance has been triggered yet, likely due to no available connection</td></tr><tr><td>complete</td><td>boolean</td><td>false</td><td>This field does not indicate successful issuance, only that the request record has finished its process.</td></tr><tr><td>result</td><td>boolean</td><td>false</td><td>Indicates successful issuance result. This field should be used alongside “complete” to determine successful request record.</td></tr><tr><td>result_string</td><td>string</td><td>“Pending”</td><td>Custom string for helping to define the state of the request</td></tr><tr><td>credential_exchange_id</td><td>array</td><td>[...]</td><td>Contains unique IDs for each issued credential</td></tr><tr><td>error</td><td>string</td><td>“Public DID not set.”</td><td>Error message caught while processing request record</td></tr><tr><td>issuer_did</td><td>string</td><td>did:indy:indicio:demo:JcBoFbZQo9yd3SWUc6Lvbt</td><td>Issuer’s decentralized identifier</td></tr><tr><td>proof_type</td><td>string</td><td>Ed25519Signature2020</td><td>Type of proof to generate to sign the credential - defaults to Ed25519Signature2018.</td></tr><tr><td>created_at</td><td>timestamp</td><td>2024-12-31T09:34:31.635Z</td><td>Date/time this record was created</td></tr><tr><td>updated_at</td><td>timestamp</td><td>2024-12-31T09:34:31.635Z</td><td>Date/time this record was last updated</td></tr></tbody></table>

### **Sample Response Body:**

```
[
  {
      "request_id": 1,
      "connection_id": "f7699aa9-beec-4e0c-868d-eb3766ad2f64",
      "contact_id": "",
      "invitation_id": 1,
      "context": [
          "https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json"
      ],
      "label": "マルチテナント検証_003",
      "type": [
          "OpenBadgeCredential"
      ],
      "attributes": [...],
      "wallet_id": "eea19d5b-cbfc-44a0-9406-a9bddcbe3994",
      "issuer_name": "PrimaryWallet",
      "timeout": 0,
      "rule": "no rule",
      "meta_data": null,
      "state": null,
      "complete": false,
      "result": false,
      "result_string": "Pending",
      "credential_exchange_id": [
          "fca9d9cb-d93c-4383-bcb3-71454aa5d62c"
      ],
      "error": "",
      "issuer_did": "did:sov:JHQQDXd1MophrGnygoj3L4",
      "proof_type": "Ed25519Signature2018",
      "created_at": "2024-12-31T09:34:31.635Z",
      "updated_at": "2024-12-31T09:34:33.095Z"
  }
]
```

## Credentials - Read Credential Issuance by ID (JSON-LD)

```
/api/v1/credentials/json-ld/<request_id> - GET
```

This endpoint fetches a credential (JSON-LD) Issuance request record by its `request_id`.&#x20;

**Request Body Information:**

No request body

### **Response Body Information:**

<table data-header-hidden><thead><tr><th width="174"></th><th></th><th></th><th></th></tr></thead><tbody><tr><td><strong>Field name</strong></td><td><strong>Expected type/values</strong></td><td><strong>Examples</strong></td><td><strong>Notes</strong></td></tr><tr><td>request_id</td><td>integer</td><td>1</td><td>Records primary key</td></tr><tr><td>connection_id</td><td>string</td><td>f7699aa9-beec-4e0c-868d-eb3766ad2f64</td><td>Connection used for this request, determined by invitation_id and contact_id</td></tr><tr><td>contact_id</td><td>text</td><td>contact123</td><td>Optional contact ID string used for processing the request record by known contact. Used with invitation_id, has first priority</td></tr><tr><td>invitation_id</td><td>integer</td><td>123</td><td>Optional integer used to process the request record by a connection tied to the invitation_id. Used with contact_id, has second priority</td></tr><tr><td>context</td><td>array</td><td>https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json</td><td>Contexts of the credential</td></tr><tr><td>label</td><td>string</td><td>Drivers License</td><td>Credentials label</td></tr><tr><td>type</td><td>array</td><td>[...]</td><td>Types of the credential</td></tr><tr><td>attributes</td><td>array</td><td>[{“name”: “first_name”, “value”: “Alice”}]</td><td>The “name” accepts string data type only.<br>The “value” accepts string, object, and array data types.</td></tr><tr><td>wallet_id</td><td>string</td><td>eea19d5b-cbfc-44a0-9406-a9bddcbe3994</td><td>Identifier that ties this record to an existing wallet</td></tr><tr><td>issuer_name</td><td>string</td><td>Proven</td><td>Name of the issuer</td></tr><tr><td>timeout</td><td>integer</td><td>10</td><td>Number of seconds the initial request will wait for a completed record</td></tr><tr><td>rule</td><td>string</td><td>“no rule”</td><td>Rules enforced for this request (future feature)</td></tr><tr><td>meta_data</td><td>object</td><td>{...}</td><td>Metadata for this credential</td></tr><tr><td>state</td><td>string</td><td>offer_sent</td><td>Null means no issuance has been triggered yet, likely due to no available connection</td></tr><tr><td>complete</td><td>boolean</td><td>false</td><td>This field does not indicate successful issuance, only that the request record has finished its process.</td></tr><tr><td>result</td><td>boolean</td><td>false</td><td>Indicates successful issuance result. This field should be used alongside “complete” to determine successful request record.</td></tr><tr><td>result_string</td><td>string</td><td>“Pending”</td><td>Custom string for helping to define the state of the request</td></tr><tr><td>credential_exchange_id</td><td>array</td><td>[...]</td><td>Contains unique IDs for each issued credential.</td></tr><tr><td>error</td><td>string</td><td>“Public DID not set.”</td><td>Error message caught while processing request record</td></tr><tr><td>issuer_did</td><td>string</td><td>did:indy:indicio:demo:JcBoFbZQo9yd3SWUc6Lvbt</td><td>Issuer’s decentralized identifier</td></tr><tr><td>proof_type</td><td>string</td><td>Ed25519Signature2020</td><td>Type of proof to generate to sign the credential. Defaults to Ed25519Signature2018</td></tr><tr><td>created_at</td><td>timestamp</td><td>2024-12-31T09:34:31.635Z</td><td>Date/time this record was created</td></tr><tr><td>updated_at</td><td>timestamp</td><td>2024-12-31T09:34:31.635Z</td><td>Date/time this record was last updated</td></tr></tbody></table>

### **Sample Response Body:**

```
[
  {
      "request_id": 1,
      "connection_id": "f7699aa9-beec-4e0c-868d-eb3766ad2f64",
      "contact_id": "",
      "invitation_id": 1,
      "context": [
          "https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json"
      ],
      "label": "マルチテナント検証_003",
      "type": [
          "OpenBadgeCredential"
      ],
      "attributes": [...],
      "wallet_id": "eea19d5b-cbfc-44a0-9406-a9bddcbe3994",
      "issuer_name": "PrimaryWallet",
      "timeout": 0,
      "rule": "no rule",
      "meta_data": null,
      "state": null,
      "complete": false,
      "result": false,
      "result_string": "Pending",
      "credential_exchange_id": [
          "fca9d9cb-d93c-4383-bcb3-71454aa5d62c"
      ],
      "error": "",
      "issuer_did": "did:sov:JHQQDXd1MophrGnygoj3L4",
      "proof_type": "Ed25519Signature2018",
      "created_at": "2024-12-31T09:34:31.635Z",
      "updated_at": "2024-12-31T09:34:33.095Z"
  }
]
```

## Credentials - Create Credential Issuance (AnonCred)

```
/api/v1/credentials - POST
```

This endpoint creates an Issuance request record that handles issuing credentials (AnonCred) for currently active connection(s) or future active connection(s) until the request record reaches a completed state.

### **Request Body Information:**

<table data-header-hidden><thead><tr><th width="176"></th><th></th><th></th><th></th></tr></thead><tbody><tr><td><strong>Field name</strong></td><td><strong>Expected type/values</strong></td><td><strong>Examples</strong></td><td><strong>Notes</strong></td></tr><tr><td>invitation_id</td><td>integer</td><td>123</td><td>Optional integer used to process the request record by a connection tied to the invitation_id. Used with contact_id, has second priority</td></tr><tr><td>contact_id</td><td>text</td><td>contact123</td><td>Optional contact ID string used for processing the request record by known contact. Used with invitation_id, has first priority</td></tr><tr><td>schema_id</td><td>text</td><td>KT4LtL7HEMePqQSyKVof7g:2:Email:1.0</td><td>Credentials schema</td></tr><tr><td>attributes</td><td>array</td><td>[{“name”: “first_name”, “value”: “Alice”}]</td><td>List of schema attribute names and their values </td></tr><tr><td>timeout</td><td>integer</td><td>10</td><td>Number of seconds the initial request will wait for a completed record</td></tr><tr><td>rule</td><td>string</td><td>no rule</td><td>Rules enforced for this request (future feature)</td></tr></tbody></table>

### **Response Body Information:**

The response body is an array of records. The following information is the data of each record:

<table data-header-hidden><thead><tr><th width="176"></th><th></th><th></th><th></th></tr></thead><tbody><tr><td><strong>Field name</strong></td><td><strong>Expected type/values</strong></td><td><strong>Examples</strong></td><td><strong>Notes</strong></td></tr><tr><td>request_id</td><td>integer</td><td>123</td><td>Issuance request record primary key</td></tr><tr><td>connection_id</td><td>string</td><td>cdcff763-5616-4a43-90ee-b0a38e0f6646</td><td>Ties record to the connection used to complete the request</td></tr><tr><td>contact_id</td><td>text</td><td>contact123</td><td>Optional contact ID string used for processing the request record by known contact. Used with invitation_id, has first priority</td></tr><tr><td>invitation_id</td><td>integer</td><td>123</td><td>Optional integer used to process the request record by a connection tied to the invitation_id. Used with contact_id, has second priority</td></tr><tr><td>schema_id</td><td>text</td><td>KT4LtL7HEMePqQSyKVof7g:2:Email:1.0</td><td>Credentials schema</td></tr><tr><td>attributes</td><td>array</td><td>[{“name”: “first_name”, “value”: “Alice”}]</td><td>List of schema attribute names and their values </td></tr><tr><td>wallet_id</td><td>string</td><td>199e022b-bb4c-4ae4-99fe-395b50ad4b66</td><td>Identifier that ties this record to an existing wallet</td></tr><tr><td>timeout</td><td>integer</td><td>10</td><td>Number of seconds the initial request will wait for a completed record</td></tr><tr><td>rule</td><td>string</td><td>no rule</td><td>Rules enforced for this request (future feature)</td></tr><tr><td>meta_data</td><td>object</td><td>null</td><td>Metadata for this credential</td></tr><tr><td>state</td><td>string</td><td>offer_sent</td><td>Null means no issuance has been triggered yet, likely due to no available connection.</td></tr><tr><td>complete</td><td>boolean</td><td>false</td><td>This field does not indicate successful issuance, only that the request record has finished its process.</td></tr><tr><td>result</td><td>boolean</td><td>false</td><td>Indicates successful issuance result. This field should be used alongside “complete” to determine if you have a successful request record.</td></tr><tr><td>result_string</td><td>string</td><td>“Pending”</td><td>Custom string for helping to define the state of the request</td></tr><tr><td>credential_exchange_id</td><td>array</td><td>[...]</td><td>Contains unique IDs for each issued credential.</td></tr><tr><td>error</td><td>string</td><td>“Public DID not set.”</td><td>Error message caught while processing request record</td></tr><tr><td>created_at</td><td>timestamp</td><td>2024-12-31T09:34:31.635Z</td><td>Date/time this record was created</td></tr><tr><td>updated_at</td><td>timestamp</td><td>2024-12-31T09:34:31.635Z</td><td>Date/time this record was last updated</td></tr></tbody></table>

### **Sample Response Body:**

```
[
  {
    "request_id": 1,
    "connection_id": "cdcff763-5616-4a43-90ee-b0a38e0f6646",
    "contact_id": "",
    "invitation_id": 1,
    "schema_id": "KT4LtL7HEMePqQSyKVof7g:2:Email:1.0",
    "attributes": [
      {
        "name": "local_part",
        "value": "alice"
      },
      {
        "name": "domain",
        "value": "example.com"
      },
      {
        "name": "address",
        "value": "alice@example.com"
      },
      {
        "name": "verified_at",
        "value": "1670296277"
      }
    ],
    "wallet_id": "f20823bb-9079-4026-b9dc-a7f410af5141",
    "timeout": 1,
    "rule": "no rule",
    "meta_data": null,
    "state": null,
    "complete": false,
    "result": false,
    "result_string": "Pending",
    "credential_exchange_id": [
      "5d00c38f-cc6a-4f0c-9dd2-3813c0dd8134"
    ],
    "error": "",
    "created_at": "2025-01-03T12:57:35.090Z",
    "updated_at": "2025-01-03T12:57:37.842Z"
  }
]
```

## Credentials - Read Credential Issuance by ID (AnonCred)

```
/api/v1/credential-records/<request_id> - GET
```

This endpoint fetches a credential Issuance record by its `request_id`.

**Request Body Information:**

No request body

### **Response Body Information:**

<table data-header-hidden><thead><tr><th width="175"></th><th></th><th></th><th></th></tr></thead><tbody><tr><td><strong>Field name</strong></td><td><strong>Expected type/values</strong></td><td><strong>Examples</strong></td><td><strong>Notes</strong></td></tr><tr><td>request_id</td><td>integer</td><td>123</td><td>Issuance request record primary key</td></tr><tr><td>connection_id</td><td>string</td><td>cdcff763-5616-4a43-90ee-b0a38e0f6646</td><td>Identifier that ties this record to a connection</td></tr><tr><td>contact_id</td><td>text</td><td>contact123</td><td>Optional contact ID string used for processing the request record by known contact. Used with invitation_id, has first priority</td></tr><tr><td>invitation_id</td><td>integer</td><td>123</td><td>Optional integer used to process the request record by a connection tied to the invitation_id. Used with contact_id, has second priority</td></tr><tr><td>schema_id</td><td>text</td><td>KT4LtL7HEMePqQSyKVof7g:2:Email:1.0</td><td>Credentials schema</td></tr><tr><td>attributes</td><td>array</td><td>[{“name”: “first_name”, “value”: “Alice”}]</td><td>List of schema attribute names and their values </td></tr><tr><td>wallet_id</td><td>string</td><td>199e022b-bb4c-4ae4-99fe-395b50ad4b66</td><td>Identifier that ties this record to an existing wallet</td></tr><tr><td>timeout</td><td>integer</td><td>10</td><td>Number of seconds the initial request will wait for a completed record</td></tr><tr><td>rule</td><td>string</td><td>no rule</td><td>Rules enforced for this request (future feature)</td></tr><tr><td>meta_data</td><td>object</td><td>null</td><td>Metadata for this credential</td></tr><tr><td>state</td><td>string</td><td>offer_sent</td><td>Null means no issuance has been triggered yet, likely due to no available connection.</td></tr><tr><td>complete</td><td>boolean</td><td>false</td><td>This field does not indicate successful issuance, only that the request record has finished its process.</td></tr><tr><td>result</td><td>boolean</td><td>false</td><td>Indicates successful issuance result. This field should be used alongside “complete” to determine successful request record</td></tr><tr><td>result_string</td><td>string</td><td>“Pending”</td><td>Custom string for helping to define the state of the request</td></tr><tr><td>credential_exchange_id</td><td>array</td><td>[...]</td><td>Contains unique IDs for each issued credential</td></tr><tr><td>error</td><td>string</td><td>“Public DID not set.”</td><td>Error message caught while processing request record</td></tr><tr><td>created_at</td><td>timestamp</td><td>2024-12-31T09:34:31.635Z</td><td>Date/time this record was created</td></tr><tr><td>updated_at</td><td>timestamp</td><td>2024-12-31T09:34:31.635Z</td><td>Date/time this record was last updated</td></tr></tbody></table>

### **Sample Response Body:**

```
{
    "request_id": 1,
    "connection_id": "cdcff763-5616-4a43-90ee-b0a38e0f6646",
    "contact_id": "",
    "invitation_id": 1,
    "schema_id": "KT4LtL7HEMePqQSyKVof7g:2:Email:1.0",
    "attributes": [
      {
        "name": "local_part",
        "value": "alice"
      },
      {
        "name": "domain",
        "value": "example.com"
      },
      {
        "name": "address",
        "value": "alice@example.com"
      },
      {
        "name": "verified_at",
        "value": "1670296277"
      }
    ],
    "wallet_id": "f20823bb-9079-4026-b9dc-a7f410af5141",
    "timeout": 1,
    "rule": "no rule",
    "meta_data": null,
    "state": null,
    "complete": false,
    "result": false,
    "result_string": "Pending",
    "credential_exchange_id": [
      "5d00c38f-cc6a-4f0c-9dd2-3813c0dd8134"
    ],
    "error": "",
    "created_at": "2025-01-03T12:57:35.090Z",
    "updated_at": "2025-01-03T12:57:37.842Z"
  }
```

## Credentials - Read All Credential Records

```
/api/v1/credentials - GET
```

This endpoint fetches all Credential records.

**Request Body Information:**

No request body

### **Response Body Information:**

The response body is an array of records. The following information is the data of each record:

<table data-header-hidden><thead><tr><th width="177"></th><th></th><th></th><th></th></tr></thead><tbody><tr><td><strong>Field name</strong></td><td><strong>Expected type/values</strong></td><td><strong>Examples</strong></td><td><strong>Notes</strong></td></tr><tr><td>credential_exchange_id</td><td>string</td><td>5d00c38f-cc6a-4f0c-9dd2-3813c0dd8134</td><td>Primary identifier for the credential record</td></tr><tr><td>wallet_id</td><td>string</td><td>f20823bb-9079-4026-b9dc-a7f410af5141</td><td>Identifier that ties this record to an existing wallet</td></tr><tr><td>credential_id</td><td>string</td><td>null</td><td>Unique ID for held credentials</td></tr><tr><td>revocation_id</td><td>string</td><td>null</td><td>Identifier used for credential revocation</td></tr><tr><td>connection_id</td><td>string</td><td>cdcff763-5616-4a43-90ee-b0a38e0f6646</td><td>Unique identifier that ties a connection to this record</td></tr><tr><td>state</td><td>string</td><td>done</td><td>Current state of the credential</td></tr><tr><td>thread_id</td><td>string</td><td>a6ab28e8-1576-4174-8083-e52752327057</td><td>Thread identifier for the credential</td></tr><tr><td>parent_thread_id</td><td>string</td><td>null</td><td>Parent thread identifier for the credential</td></tr><tr><td>schema_id</td><td>string</td><td>KT4LtL7HEMePqQSyKVof7g:2:Email:1.0</td><td>Credentials schema</td></tr><tr><td>credential_definition_id</td><td>string</td><td>JCuYYsqY1X2QcYpVrSkQwL:3:CL:151:default</td><td>Credential definition generated via the schema_id</td></tr><tr><td>revoc_reg_id</td><td>string</td><td>null</td><td>Field used for credential revocation</td></tr><tr><td>revoked</td><td>boolean</td><td>null</td><td>Field used for credential revocation</td></tr><tr><td>attributes</td><td>object</td><td>{...}</td><td>Credentials attributes and their values</td></tr><tr><td>created_at</td><td>timestamp</td><td>2025-01-03T12:57:37.827Z</td><td>Date/time this record was created</td></tr><tr><td>updated_at</td><td>timestamp</td><td>2025-01-03T12:57:37.827Z</td><td>Date/time this record was last updated</td></tr></tbody></table>

### **Sample Response Body:**

```
[
  {
    "credential_exchange_id": "5d00c38f-cc6a-4f0c-9dd2-3813c0dd8134",
    "wallet_id": "f20823bb-9079-4026-b9dc-a7f410af5141",
    "credential_id": null,
    "revocation_id": null,
    "connection_id": "cdcff763-5616-4a43-90ee-b0a38e0f6646",
    "state": "done",
    "thread_id": "a6ab28e8-1576-4174-8083-e52752327057",
    "parent_thread_id": null,
    "schema_id": "KT4LtL7HEMePqQSyKVof7g:2:Email:1.0",
    "credential_definition_id": "JCuYYsqY1X2QcYpVrSkQwL:3:CL:151:default",
    "revoc_reg_id": null,
    "revoked": null,
    "created_at": "2025-01-03T12:57:37.827Z",
    "updated_at": "2025-01-03T13:05:35.231Z",
    "attributes": null
  }
]
```

## Credentials - Read Credential Record By ID

```
/api/v1/credentials/<credential_definition_id> - GET
```

This endpoint fetches a Credential record by its `credential_definition_id`.

**Request Body Information:**

No Request body

### **Response Body Information:**

<table data-header-hidden><thead><tr><th width="200"></th><th></th><th></th><th></th></tr></thead><tbody><tr><td><strong>Field name</strong></td><td><strong>Expected type/values</strong></td><td><strong>Examples</strong></td><td><strong>Notes</strong></td></tr><tr><td>credential_exchange_id</td><td>string</td><td>5d00c38f-cc6a-4f0c-9dd2-3813c0dd8134</td><td>Primary identifier for the credential record</td></tr><tr><td>wallet_id</td><td>string</td><td>f20823bb-9079-4026-b9dc-a7f410af5141</td><td>Identifier that ties this record to an existing wallet</td></tr><tr><td>credential_id</td><td>string</td><td>null</td><td>Unique ID for held credentials</td></tr><tr><td>revocation_id</td><td>string</td><td>null</td><td>Identifier used for credential revocation</td></tr><tr><td>connection_id</td><td>string</td><td>cdcff763-5616-4a43-90ee-b0a38e0f6646</td><td>Unique identifier that ties a connection to this record</td></tr><tr><td>state</td><td>string</td><td>done</td><td>Current state of the credential</td></tr><tr><td>thread_id</td><td>string</td><td>a6ab28e8-1576-4174-8083-e52752327057</td><td>Thread identifier for the credential</td></tr><tr><td>parent_thread_id</td><td>string</td><td>null</td><td>Parent thread identifier for the credential</td></tr><tr><td>schema_id</td><td>string</td><td>KT4LtL7HEMePqQSyKVof7g:2:Email:1.0</td><td>Credentials schema</td></tr><tr><td>credential_definition_id</td><td>string</td><td>JCuYYsqY1X2QcYpVrSkQwL:3:CL:151:default</td><td>Credential definition generated via the schema_id</td></tr><tr><td>revoc_reg_id</td><td>string</td><td>null</td><td>Field used for credential revocation</td></tr><tr><td>revoked</td><td>boolean</td><td>null</td><td>Field used for credential revocation</td></tr><tr><td>attributes</td><td>object</td><td>{...}</td><td>Credential’s attributes and their values</td></tr><tr><td>created_at</td><td>timestamp</td><td>2025-01-03T12:57:37.827Z</td><td>Date/time this record was created</td></tr><tr><td>updated_at</td><td>timestamp</td><td>2025-01-03T12:57:37.827Z</td><td>Date/time this record was last updated</td></tr></tbody></table>

### **Sample Response Body:**

```
{
    "credential_exchange_id": "5d00c38f-cc6a-4f0c-9dd2-3813c0dd8134",
    "wallet_id": "f20823bb-9079-4026-b9dc-a7f410af5141",
    "credential_id": null,
    "revocation_id": null,
    "connection_id": "cdcff763-5616-4a43-90ee-b0a38e0f6646",
    "state": "done",
    "thread_id": "a6ab28e8-1576-4174-8083-e52752327057",
    "parent_thread_id": null,
    "schema_id": "KT4LtL7HEMePqQSyKVof7g:2:Email:1.0",
    "credential_definition_id": "JCuYYsqY1X2QcYpVrSkQwL:3:CL:151:default",
    "revoc_reg_id": null,
    "revoked": null,
    "created_at": "2025-01-03T12:57:37.827Z",
    "updated_at": "2025-01-03T13:05:35.231Z",
    "attributes": null
}
```

## DIDs

## DIDs - Create New DID

```
/api/v1/create-did - POST
```

This endpoint creates a new decentralized identifier (DID).

**Request Body Information:**

No request body

### **Response Body Information:**

| **Field name** | <p><strong>Expected type/</strong></p><p><strong>values</strong></p> | **Examples**                                | **Notes**                          |
| -------------- | -------------------------------------------------------------------- | ------------------------------------------- | ---------------------------------- |
| did            | string                                                               | AwUCmb3ahPhiYVaik3wD7                       | Decentralized identifier           |
| verkey         | string                                                               | 6RCKgJhNz76u98RpzVYMrrXDEgPn3hZ5mvwyJnjvevP | DID’s verkey                       |
| posture        | string                                                               | wallet\_only                                | Posture of the DID                 |
| key\_type      | string                                                               | ed25519                                     | Type of key used for the DID       |
| method         | string                                                               | sov                                         | Method used for generating the DID |
| metadata       | object                                                               | {...}                                       | Metadata for the DID               |

### **Sample Response Body:**

```
{
  "did": "AwUCmb3ahPhiYVaik3wD7",
  "verkey": "6RCKgJhNz76u98RpzVYMrrXDEgPn3hZ5mvwyJnjvevP",
  "posture": "wallet_only",
  "key_type": "ed25519",
  "method": "sov",
  "metadata": {}
}
```

## DIDs - Set Public DID

```
/api/v1/set-public-did - POST
```

This endpoint sets a public decentralized identifier (DID).

**Request URL Parameters Information:**

| **Field name** | **Expected type/ values** | **Examples**           | **Notes**         |
| -------------- | ------------------------- | ---------------------- | ----------------- |
| DID            | text                      | XhvSpiDsLVmStHa19VC4hJ | DID set as public |

**Request Body Information:**

No request body

**Sample URLs:**

```
https://your-domain-name.com/api/v1/set-public-did?DID=WSPiMexQfuVrR9wMQbg5F7
```

### **Response Body Information:**

| **Field name** | **Expected type/ values** | **Examples**                                 | **Notes**                          |
| -------------- | ------------------------- | -------------------------------------------- | ---------------------------------- |
| did            | string                    | XhvSpiDsLVmStHa19VC4hJ                       | DID set as public                  |
| verkey         | string                    | HjfSSD6DDPfAME5Th5NTESEoToJgVWqUo7u81euPGX7K | DID’s verkey                       |
| posture        | string                    | posted                                       | Posture of the DID                 |
| key\_type      | string                    | ed25519                                      | Type of key used for the DID       |
| method         | string                    | sov                                          | Method used for generating the DID |
| metadata       | object                    | {...}                                        | Metadata for the DID               |

### **Sample Response Body:**

```
{
  "did": "XhvSpiDsLVmStHa19VC4hJ",
  "verkey": "HjfSSD6DDPfAME5Th5NTESEoToJgVWqUo7u81euPGX7K",
  "posture": "posted",
  "key_type": "ed25519",
  "method": "sov",
  "metadata": {
    "posted": true
  }
}
```

## Email

#### Email - Verify Email Addresses

```
/api/v1/emails/verify - POST
```

This endpoint verifies multiple email addresses using the SMTP configurations.&#x20;

### **Request Body Information:**

<table data-header-hidden><thead><tr><th width="158"></th><th></th><th></th><th></th></tr></thead><tbody><tr><td><strong>Field name</strong></td><td><strong>Expected type/values</strong></td><td><strong>Examples</strong></td><td><strong>Notes</strong></td></tr><tr><td>emails</td><td>array</td><td>[ {“email”: “alice@example.com”} ]</td><td>List of emails to verify</td></tr></tbody></table>

### **Response Body Information:**

<table data-header-hidden><thead><tr><th width="159"></th><th></th><th></th><th></th></tr></thead><tbody><tr><td><strong>Field name</strong></td><td><strong>Expected type/values</strong></td><td><strong>Examples</strong></td><td><strong>Notes</strong></td></tr><tr><td>success</td><td>string</td><td>“All emails sent successfully”</td><td>Success message</td></tr></tbody></table>

### **Sample Response Body:**

```
{
    "success": "All emails sent successfully!"
}
```

## Invitations

#### Invitations - Create New Invitation

```
/api/v1/invitations - POST
```

This endpoint creates a new invitation of type OOB or CV1.

### **Request Body Information:**

<table data-header-hidden><thead><tr><th width="175"></th><th></th><th></th><th></th></tr></thead><tbody><tr><td><strong>Field name</strong></td><td><strong>Expected type/values</strong></td><td><strong>Examples</strong></td><td><strong>Notes</strong></td></tr><tr><td>invitation_type</td><td>text</td><td>OOB</td><td>CV1 or OOB (Connections v. 1 or Out of Band)</td></tr><tr><td>contact_id</td><td>text</td><td>blank</td><td>Optional contact string used for calls that require a known contact</td></tr><tr><td>handshake_protocol</td><td>text</td><td>https://didcomm.org/didexchange/1.1</td><td>Protocol used to generate the invitation</td></tr><tr><td>alias</td><td>text</td><td>Acme Issuer</td><td>String for how this connection could be labeled in the receiving agent. Technically optional, but probably a bad idea to leave empty</td></tr><tr><td>invitation_mode</td><td>text</td><td>Once</td><td>Multi, Once (or "Static," but for developers use only). TODO: Multi requires the use of a multi-use webhook in order for the other APIs to work.</td></tr><tr><td>accept</td><td>text</td><td>Auto</td><td>Auto, Manual</td></tr><tr><td>public</td><td>boolean</td><td>false</td><td>true or false</td></tr><tr><td>invitation_role</td><td>text</td><td>blank</td><td>Optional string describing this connection's role (such as "holder")</td></tr><tr><td>invitation_label</td><td>text</td><td>Create Account</td><td>Optional string for naming this invitation in the sending agent</td></tr><tr><td>invitation_status</td><td>text</td><td>blank</td><td>Optional; Active, Inactive, Deleted; this is not an ACA-Py field, but allows our controller to utilize invitations intelligently. Defaults to Active</td></tr><tr><td>invitation_description</td><td>text</td><td>blank</td><td>Optional string describing the purpose of this invitation</td></tr><tr><td>invitation_active_starting_at</td><td>timestamp</td><td>blank</td><td>Optional unix timestamp stating when the controller should begin recognizing this invitation as active. If not provided, set to the current time. Caution, the controller can be bypassed and does not strictly control ACA-Py.</td></tr><tr><td>invitation_active_ending_at</td><td>timestamp</td><td>blank</td><td>Optional unix timestamp stating when the controller should stop recognizing this invitation as active. Can be null (doesn't end). Caution, the controller can be bypassed and does not strictly control ACA-Py.</td></tr><tr><td>uses_allowed</td><td>int</td><td>blank</td><td>Optional number of uses the controller will allow this invitation. Caution, the controller can be bypassed and does not strictly control ACA-Py.</td></tr></tbody></table>

### **Sample Request Bodies:**

Invitation with connection reuse:

```
{ 
  "contact_id": "contact123", 
  "handshake_protocol": "https://didcomm.org/didexchange/1.1",
  "invitation_type": "OOB", 
  "invitation_mode": "once", 
  "public": true, 
  "accept": "auto",
  "alias": "API invitation with connection reuse"
  "invitation_role": "Holder",
  "invitation_label": "API Invite",
  "invitation_description": "Invitation created through API", 
  "invitation_status": "active", 
  "invitation_active_starting_at": null, 
  "invitation_active_ending_at": null, 
  "invitation_uses_allowed": null
}
```

Invitation without connection reuse:

```
{ 
  "contact_id": "contact123",
  "handshake_protocol": "https://didcomm.org/didexchange/1.1",
  "invitation_type": "OOB", 
  "invitation_mode": "once", 
  "public": false, 
  "accept": "auto",
  "alias": "API invitation without connection reuse"
  "invitation_role": "Holder",
  "invitation_label": "API Invite",
  "invitation_description": "Invitation created through API", 
  "invitation_status": "active", 
  "invitation_active_starting_at": null, 
  "invitation_active_ending_at": null, 
  "invitation_uses_allowed": null
}
```

Invitation with multi-use:

```
{ 
  "contact_id": "contact123",
  "handshake_protocol": "https://didcomm.org/didexchange/1.1",
  "invitation_type": "OOB", 
  "invitation_mode": "multi", 
  "public": false, 
  "accept": "auto",
  "alias": "API invitation with multi-use"
  "invitation_role": "Holder",
  "invitation_label": "API Invite", 
  "invitation_description": "Invitation created through API", 
  "invitation_status": "active", 
  "invitation_active_starting_at": null, 
  "invitation_active_ending_at": null, 
  "invitation_uses_allowed": null
}
```

### **Response Body Information:**

<table data-header-hidden><thead><tr><th width="176"></th><th></th><th></th><th></th></tr></thead><tbody><tr><td><strong>Field name</strong></td><td><strong>Expected type/values</strong></td><td><strong>Examples</strong></td><td><strong>Notes</strong></td></tr><tr><td>invitation_url</td><td>text</td><td>https://proven.mediator.indiciotech.io?oob...</td><td>Invitation URL (currently formatted for either connections v. 1 or OOB)</td></tr><tr><td>invitation_id</td><td>int</td><td>37</td><td>ID to keep track of this particular invitation</td></tr><tr><td>contact_id</td><td>text</td><td>“contact123”</td><td>Contact ID specified during the creation of this invitation</td></tr></tbody></table>

### **Sample Response Body:**

```
{
  "invitation_url": "https://proven.mediator.indiciotech.io?c_i=...",
  "invitation_id": 37,
  "contact_id": "49"
}
```

## Invitations - Accept Invitation

```
/api/v1/invitations/accept - POST
```

This endpoint accepts an invitation of type CV1 or OOB.

### **Request Body Information**

<table data-header-hidden><thead><tr><th width="176"></th><th></th><th></th><th></th></tr></thead><tbody><tr><td><strong>Field name</strong></td><td><strong>Expected type/values</strong></td><td><strong>Examples</strong></td><td><strong>Notes</strong></td></tr><tr><td>invitation_url</td><td>text</td><td>https://proven.mediator.indiciotech.io?oob...</td><td>Properly encoded connections v. 1 or OOB invitation</td></tr></tbody></table>

### **Sample Request Body:**

```
{ 
  "invitation_url": "https://proven.mediator.indiciotech.io?c_i...",   
}
```

### **Response Body Information:**

<table data-header-hidden><thead><tr><th width="177"></th><th></th><th></th><th></th></tr></thead><tbody><tr><td><strong>Field name</strong></td><td><strong>Expected type/values</strong></td><td><strong>Examples</strong></td><td><strong>Notes</strong></td></tr><tr><td>success</td><td>boolean</td><td>true</td><td>Signals successful invitation acceptance</td></tr><tr><td>invitation_record</td><td>object</td><td>{...}</td><td>Invitation record data object</td></tr></tbody></table>

### **Sample Response Body:**

```
{
  "success": true,
  "invitation_record": {
      "state": "deleted",
      "created_at": "2024-12-30T10:37:30.751037Z",
      "updated_at": "2024-12-30T10:37:30.751037Z",
      "trace": false,
      "oob_id": "2f5ce0d7-dfd4-4aef-871f-eb0a522a2f52",
      "invi_msg_id": "afbc12b7-28fa-4936-bf11-748148a98ffc",
      "invitation": {...},
      "connection_id": "65eb5586-e519-441d-a05c-c3c697ecd97a",
      "role": "receiver",
      "multi_use": false
  }
}
```

## Invitations - Read All Invitations

```
/api/v1/invitations - GET
```

This endpoint fetches all invitations, and includes parameters for pagination purposes.&#x20;

**Requests URL Parameters Information:**

URL parameters should be hyphen-separated in case they ever interact with a system that needs to be search-engine-indexed.

<table data-header-hidden><thead><tr><th width="174"></th><th></th><th></th><th></th></tr></thead><tbody><tr><td><strong>Field name</strong></td><td><strong>Expected type/values</strong></td><td><strong>Examples</strong></td><td><strong>Notes</strong></td></tr><tr><td>sort-field</td><td>text</td><td>contact_id</td><td>Optional, any of the field names listed in the "Create invitation" POST body plus invitation_id</td></tr><tr><td>sort-direction</td><td>text</td><td>ASC</td><td>Optional, ASC or DESC</td></tr><tr><td>page-size</td><td>int</td><td>10</td><td>Optional, how many items should be returned in a page</td></tr><tr><td>current-page</td><td>int</td><td>2</td><td>Optional, the current page to retrieve</td></tr><tr><td>item-count</td><td>int</td><td>10</td><td>Optional, the total number of items</td></tr></tbody></table>

### **Sample URLs:**

```
https://your-domain-name.com/api/v1/invitations?sort-field=contact_id&sort-direction=ASC&page-size=10&current-page=2
```

```
https://your-domain-name.com/api/v1/invitations?page-size=50&current-page=5
```

**Response Body Information:**

The Response Body has three sections:

* Params: The pagination and sorting parameters:
  * `"sort": “DESC”`
  * `pageSize": "10"`
  * `"currentPage": 1`
  * `"pageCount": 1`
  * `"itemCount": 1`
* Rows: The array of invitations
  * Each row in the rows array has the properties found in the table below.
* Count: The number of items returned:
  * `“count”: 1`

<table data-header-hidden><thead><tr><th width="175"></th><th></th><th></th><th></th></tr></thead><tbody><tr><td><strong>Field name</strong></td><td><strong>Expected type/values</strong></td><td><strong>Examples</strong></td><td><strong>Notes</strong></td></tr><tr><td>invitation_id</td><td>int</td><td>4325</td><td>Integer used as the primary identifier for this record</td></tr><tr><td>oob_id</td><td>text</td><td>db6da148-33ee-4108-96d9-f39bee835981</td><td>ID used to identify an Out of Band (OOB) connection</td></tr><tr><td>contact_id</td><td>text</td><td>contact123</td><td>Contact ID string</td></tr><tr><td>connection_id</td><td>text</td><td>db6da148-33ee-4108-96d9-f39bee835981</td><td>ID used to identify a CV1 connection</td></tr><tr><td>my_did</td><td>text</td><td>did:sov:&#x3C;did></td><td>Public DID (empty if invitation is not public)</td></tr><tr><td>alias</td><td>text</td><td>Acme Issuer</td><td>String for how this connection should be "named"</td></tr><tr><td>invitation_key</td><td>text</td><td>did:key:&#x3C;...></td><td>Invitation Key managed by agent</td></tr><tr><td>invitation_mode</td><td>text</td><td>Once</td><td>Multi, Once (or "Static," but for developers use only)</td></tr><tr><td>invitation_url</td><td>text</td><td>https://&#x3C;domain>?oob=&#x3C;base64 invitation></td><td>Invitation URL (CV1 or OOB)</td></tr><tr><td>invitation_msg_id</td><td>text</td><td>afbc12b7-28fa-4936-bf11-748148a98ffc</td><td>Unique Identifier for invitation exchange</td></tr><tr><td>invitation</td><td>obj</td><td>{...}</td><td>Invitation data object</td></tr><tr><td>wallet_id</td><td>text</td><td>eea19d5b-cbfc-44a0-9406-a9bddcbe3994</td><td>Identifier for the wallet the invitation belongs to</td></tr><tr><td>accept</td><td>text</td><td>auto</td><td>auto, manual</td></tr><tr><td>their_role</td><td>text</td><td>sender</td><td>Role of agent that generated the invitation</td></tr><tr><td>their_label</td><td>text</td><td>Primary Wallet</td><td>Label of agent/wallet that generated the invitation</td></tr><tr><td>service_endpoint</td><td>text</td><td>https://hard-tiger-38.tun2.indiciotech.io</td><td>Endpoint used for serving the Invitation URL</td></tr><tr><td>domain</td><td>text</td><td><p>hard-tiger-38.tun2.indiciotech.io</p><p><br></p></td><td>Domain parsed from service_endpoint</td></tr><tr><td>path</td><td>text</td><td>/path</td><td>Path parsed from service_endpoint</td></tr><tr><td>workflow_status</td><td>text</td><td>active</td><td>active, inactive (managed by controller)</td></tr><tr><td>state</td><td>text</td><td>deleted</td><td>State of the invitation (managed by ACA-Py agent)</td></tr><tr><td>description</td><td>text</td><td>General purpose issuer</td><td>Optional string describing the purpose of this invitation</td></tr><tr><td>active_starting_at</td><td>timestamp</td><td>2024-12-30T10:36:52.443Z</td><td>Optional unix timestamp stating when the controller should begin recognizing this invitation as active. If not provided, set to the current time. Caution, the controller can be bypassed and does not strictly control ACA-Py.</td></tr><tr><td>active_ending_at</td><td>timestamp</td><td>null</td><td>Optional unix timestamp stating when the controller should stop recognizing this invitation as active. Can be null (doesn't end). Caution, the controller can be bypassed and does not strictly control ACA-Py.</td></tr><tr><td>uses_allowed</td><td>int</td><td>100</td><td>Optional number of uses the controller will allow for this invitation. Caution, the controller can be bypassed and does not strictly control ACA-Py. The null value signals an infinite use invitation.</td></tr><tr><td>uses_total</td><td>int</td><td>43</td><td>Number of times this invitation has been used</td></tr><tr><td>created_at</td><td>timestamp</td><td><p>"2024-12-30T10:36:52.466Z"</p><p><br></p></td><td>Date of creation for the invitation record (controller level)</td></tr><tr><td>updated_at</td><td>timestamp</td><td>"2024-12-30T10:36:52.466Z"</td><td>Date the invitation record was last updated (controller level)</td></tr></tbody></table>

### **Sample Response Body:**

```
{
  "params": {
      "sort": [
          [
              [
                  "updated_at",
                  "DESC"
              ]
          ]
      ],
      "pageSize": "10",
      "currentPage": 1,
      "pageCount": 1,
      "itemCount": 1
  },
  "rows": [
      {
          "invitation_id": 1,
          "oob_id": "c2e4e2d2-eb01-4065-94e3-6d4c0e17d537",
          "contact_id": "199e022b-bb4c-4ae4-99fe-395b50ad4b66",
          "connection_id": "f7699aa9-beec-4e0c-868d-eb3766ad2f64",
          "my_did": "",
          "alias": "Proven",
          "invitation_key": "did:key:z6MkkhftQjNAzNGYw9vSTKWnkdEQMRdzpXToAwwp4QtbRPSV#z6MkkhftQjNAzNGYw9vSTKWnkdEQMRdzpXToAwwp4QtbRPSV",
          "invitation_mode": "once",
          "invitation_url": "https://hard-tiger-38.tun2.indiciotech.io?oob=eyJAdHlwZSI6ICJodHRwczovL2RpZGNvbW0ub3JnL291dC1vZi1iYW5kLzEuMS9pbnZpdGF0aW9uIiwgIkBpZCI6ICJhZmJjMTJiNy0yOGZhLTQ5MzYtYmYxMS03NDgxNDhhOThmZmMiLCAibGFiZWwiOiAiUHJpbWFyeVdhbGxldCIsICJoYW5kc2hha2VfcHJvdG9jb2xzIjogWyJodHRwczovL2RpZGNvbW0ub3JnL2RpZGV4Y2hhbmdlLzEuMCJdLCAic2VydmljZXMiOiBbeyJpZCI6ICIjaW5saW5lIiwgInR5cGUiOiAiZGlkLWNvbW11bmljYXRpb24iLCAicmVjaXBpZW50S2V5cyI6IFsiZGlkOmtleTp6Nk1ra2hmdFFqTkF6TkdZdzl2U1RLV25rZEVRTVJkenBYVG9Bd3dwNFF0YlJQU1YjejZNa2toZnRRak5Bek5HWXc5dlNUS1dua2RFUU1SZHpwWFRvQXd3cDRRdGJSUFNWIl0sICJzZXJ2aWNlRW5kcG9pbnQiOiAiaHR0cHM6Ly9oYXJkLXRpZ2VyLTM4LnR1bjIuaW5kaWNpb3RlY2guaW8ifV19",
          "invitation_msg_id": "afbc12b7-28fa-4936-bf11-748148a98ffc",
          "invitation": {...},
          "wallet_id": "eea19d5b-cbfc-44a0-9406-a9bddcbe3994",
          "accept": "auto",
          "their_role": "sender",
          "their_label": "PrimaryWallet",
          "service_endpoint": "https://hard-tiger-38.tun2.indiciotech.io",
          "domain": "hard-tiger-38.tun2.indiciotech.io",
          "path": "",
          "workflow_status": "inactive",
          "state": "deleted",
          "description": "",
          "active_starting_at": "2024-12-30T10:36:52.443Z",
          "active_ending_at": n
```

## Invitations - Read Invitation by ID

```
/api/v1/invitations/<invitation_id> - GET
```

This endpoint fetches a single invitation record by its `invitation_id`.

**Request Body Information:**

No Request Body

### Response Body Information:

<table data-header-hidden><thead><tr><th width="177"></th><th></th><th></th><th></th></tr></thead><tbody><tr><td><strong>Field name</strong></td><td><strong>Expected type/values</strong></td><td><strong>Examples</strong></td><td><strong>Notes</strong></td></tr><tr><td>invitation_id</td><td>int</td><td>4325</td><td>Integer used as the primary identifier for this record</td></tr><tr><td>oob_id</td><td>text</td><td>db6da148-33ee-4108-96d9-f39bee835981</td><td>ID used to identify an Out of Band (OOB) connection</td></tr><tr><td>contact_id</td><td>text</td><td>contact123</td><td>Contact ID string</td></tr><tr><td>connection_id</td><td>text</td><td>db6da148-33ee-4108-96d9-f39bee835981</td><td>ID used to identify a CV1 connection</td></tr><tr><td>my_did</td><td>text</td><td>did:sov:&#x3C;did></td><td>Public DID (empty if invitation is not public)</td></tr><tr><td>alias</td><td>text</td><td>Acme Issuer</td><td>String for how this connection should be "named"</td></tr><tr><td>invitation_key</td><td>text</td><td>did:key:&#x3C;...></td><td>Invitation Key managed by agent</td></tr><tr><td>invitation_mode</td><td>text</td><td>Once</td><td>Multi, Once (or "Static," but for developers use only)</td></tr><tr><td>invitation_url</td><td>text</td><td>https://&#x3C;domain>?oob=&#x3C;base64 invitation></td><td>Invitation URL (CV1 or OOB)</td></tr><tr><td>invitation_msg_id</td><td>text</td><td>afbc12b7-28fa-4936-bf11-748148a98ffc</td><td>Unique Identifier for invitation exchange</td></tr><tr><td>invitation</td><td>obj</td><td>{...}</td><td>Invitation data object</td></tr><tr><td>wallet_id</td><td>text</td><td>eea19d5b-cbfc-44a0-9406-a9bddcbe3994</td><td>Identifier for the wallet the invitation belongs to</td></tr><tr><td>accept</td><td>text</td><td>auto</td><td>auto, manual</td></tr><tr><td>their_role</td><td>text</td><td>sender</td><td>Role of the agent that generated the invitation</td></tr><tr><td>their_label</td><td>text</td><td>Primary Wallet</td><td>Label of the agent/wallet that generated the invitation</td></tr><tr><td>service_endpoint</td><td>text</td><td>https://hard-tiger-38.tun2.indiciotech.io</td><td>Endpoint used for serving the Invitation URL</td></tr><tr><td>domain</td><td>text</td><td><p>hard-tiger-38.tun2.indiciotech.io</p><p><br></p></td><td>Domain parsed from service_endpoint</td></tr><tr><td>path</td><td>text</td><td>/path</td><td>Path parsed from service_endpoint</td></tr><tr><td>workflow_status</td><td>text</td><td>active</td><td>active, inactive (managed by controller)</td></tr><tr><td>state</td><td>text</td><td>deleted</td><td>State of the invitation (managed by ACA-Py agent)</td></tr><tr><td>description</td><td>text</td><td>General purpose issuer</td><td>Optional string describing the purpose of this invitation</td></tr><tr><td>active_starting_at</td><td>timestamp</td><td>2024-12-30T10:36:52.443Z</td><td>Optional unix timestamp stating when the controller should begin recognizing this invitation as active. If not provided, set to the current time. Caution, the controller can be bypassed and does not strictly control ACA-Py.</td></tr><tr><td>active_ending_at</td><td>timestamp</td><td>null</td><td>Optional unix timestamp stating when the controller should stop recognizing this invitation as active. Can be null (doesn't end). Caution, the controller can be bypassed and does not strictly control ACA-Py.</td></tr><tr><td>uses_allowed</td><td>int</td><td>100</td><td>Optional number of uses the controller will allow for this invitation. Caution, the controller can be bypassed and does not strictly control ACA-Py. The null value signals an infinite use invitation.</td></tr><tr><td>uses_total</td><td>int</td><td>43</td><td>Number of times this invitation has been used</td></tr><tr><td>created_at</td><td>timestamp</td><td><p>"2024-12-30T10:36:52.466Z"</p><p><br></p></td><td>Date of creation for the invitation record (controller level)</td></tr><tr><td>updated_at</td><td>timestamp</td><td>"2024-12-30T10:36:52.466Z"</td><td>Date the invitation record was last updated (controller level)</td></tr></tbody></table>

### **Sample Response Body:**

```
{
  "invitation_id": 1,
  "oob_id": "c2e4e2d2-eb01-4065-94e3-6d4c0e17d537",
  "contact_id": "199e022b-bb4c-4ae4-99fe-395b50ad4b66",
  "connection_id": "f7699aa9-beec-4e0c-868d-eb3766ad2f64",
  "my_did": "",
  "alias": "Proven",
  "invitation_key": "did:key:z6MkkhftQjNAzNGYw9vSTKWnkdEQMRdzpXToAwwp4QtbRPSV#z6MkkhftQjNAzNGYw9vSTKWnkdEQMRdzpXToAwwp4QtbRPSV",
  "invitation_mode": "once",
  "invitation_url": "https://hard-tiger-38.tun2.indiciotech.io?oob=eyJAdHlwZSI6ICJodHRwczovL2RpZGNvbW0ub3JnL291dC1vZi1iYW5kLzEuMS9pbnZpdGF0aW9uIiwgIkBpZCI6ICJhZmJjMTJiNy0yOGZhLTQ5MzYtYmYxMS03NDgxNDhhOThmZmMiLCAibGFiZWwiOiAiUHJpbWFyeVdhbGxldCIsICJoYW5kc2hha2VfcHJvdG9jb2xzIjogWyJodHRwczovL2RpZGNvbW0ub3JnL2RpZGV4Y2hhbmdlLzEuMCJdLCAic2VydmljZXMiOiBbeyJpZCI6ICIjaW5saW5lIiwgInR5cGUiOiAiZGlkLWNvbW11bmljYXRpb24iLCAicmVjaXBpZW50S2V5cyI6IFsiZGlkOmtleTp6Nk1ra2hmdFFqTkF6TkdZdzl2U1RLV25rZEVRTVJkenBYVG9Bd3dwNFF0YlJQU1YjejZNa2toZnRRak5Bek5HWXc5dlNUS1dua2RFUU1SZHpwWFRvQXd3cDRRdGJSUFNWIl0sICJzZXJ2aWNlRW5kcG9pbnQiOiAiaHR0cHM6Ly9oYXJkLXRpZ2VyLTM4LnR1bjIuaW5kaWNpb3RlY2guaW8ifV19",
  "invitation_msg_id": "afbc12b7-28fa-4936-bf11-748148a98ffc",
  "invitation": {
      "@type": "https://didcomm.org/out-of-band/1.1/invitation",
      "@id": "afbc12b7-28fa-4936-bf11-748148a98ffc",
      "label": "PrimaryWallet",
      "handshake_protocols": [
          "https://didcomm.org/didexchange/1.0"
      ],
      "services": [
          {
              "id": "#inline",
              "type": "did-communication",
              "recipientKeys": [
                  "did:key:z6MkkhftQjNAzNGYw9vSTKWnkdEQMRdzpXToAwwp4QtbRPSV#z6MkkhftQjNAzNGYw9vSTKWnkdEQMRdzpXToAwwp4QtbRPSV"
              ],
              "serviceEndpoint": "https://hard-tiger-38.tun2.indiciotech.io"
          }
      ]
  },
  "wallet_id": "eea19d5b-cbfc-44a0-9406-a9bddcbe3994",
  "accept": "auto",
  "their_role": "sender",
  "their_label": "PrimaryWallet",
  "service_endpoint": "https://hard-tiger-38.tun2.indiciotech.io",
  "domain": "hard-tiger-38.tun2.indiciotech.io",
  "path": "",
  "workflow_status": "inactive",
  "state": "deleted",
  "description": "",
  "active_starting_at": "2024-12-30T10:36:52.443Z",
  "active_ending_at": null,
  "uses_allowed": 1,
  "uses_total": 1,
  "created_at": "2024-12-30T10:36:52.466Z",
  "updated_at": "2024-12-30T10:37:31.732Z"
}
```

## Invitations - Update Invitation Record

```
/api/v1/invitations/<invitation_id> - PUT
```

This endpoint updates an existing invitation record by using its `invitation_id`.

**Request Body Information:**

The following fields can be selectively provided:

<table data-header-hidden><thead><tr><th width="173"></th><th></th><th></th><th></th></tr></thead><tbody><tr><td><strong>Field name</strong></td><td><strong>Expected type/values</strong></td><td><strong>Examples</strong></td><td><strong>Notes</strong></td></tr><tr><td>workflow_status</td><td>string</td><td>inactive</td><td>Controls usage and availability of invitation (controller level only) </td></tr><tr><td>description</td><td>string</td><td>Updating invitation description via API</td><td>Invitation’s general use description</td></tr><tr><td>active_starting_at</td><td>timestamp</td><td>2024-12-30T10:36:52.466Z</td><td>Controls invitation’s workflow_status (active or inactive) (controller level only)</td></tr><tr><td>active_ending_at</td><td>string</td><td>2025-12-30T10:36:52.466Z</td><td>Controls invitation’s workflow_status (active or inactive) (controller level only)</td></tr><tr><td>uses_allowed</td><td>integer</td><td>20</td><td>Limits the usage of multi-use invitations. Single-use invitations default to 1 and cannot be updated (controller level only).</td></tr></tbody></table>

### **Response Body Information:**

<table data-header-hidden><thead><tr><th width="175"></th><th></th><th></th><th></th></tr></thead><tbody><tr><td><strong>Field name</strong></td><td><strong>Expected type/values</strong></td><td><strong>Examples</strong></td><td><strong>Notes</strong></td></tr><tr><td>invitation_id</td><td>int</td><td>4325</td><td>Integer used as the primary identifier for this record</td></tr><tr><td>oob_id</td><td>text</td><td>db6da148-33ee-4108-96d9-f39bee835981</td><td>ID used to identify an Out of Band (OOB) connection</td></tr><tr><td>contact_id</td><td>text</td><td>contact123</td><td>Contact ID string</td></tr><tr><td>connection_id</td><td>text</td><td>db6da148-33ee-4108-96d9-f39bee835981</td><td>ID used to identify a CV1 connection</td></tr><tr><td>my_did</td><td>text</td><td>did:sov:&#x3C;did></td><td>Public DID (empty if invitation is not public)</td></tr><tr><td>alias</td><td>text</td><td>Acme Issuer</td><td>String for how this connection should be "named" or referred to, especially in the UI</td></tr><tr><td>invitation_key</td><td>text</td><td>did:key:&#x3C;...></td><td>Invitation Key managed by agent</td></tr><tr><td>invitation_mode</td><td>text</td><td>Once</td><td>Multi, Once (or "Static," but for developers use only)</td></tr><tr><td>invitation_url</td><td>text</td><td>https://&#x3C;domain>?oob=&#x3C;base64 invitation></td><td>Invitation URL (CV1 or OOB)</td></tr><tr><td>invitation_msg_id</td><td>text</td><td>afbc12b7-28fa-4936-bf11-748148a98ffc</td><td>Unique Identifier for invitation exchange</td></tr><tr><td>invitation</td><td>obj</td><td>{...}</td><td>Invitation data object </td></tr><tr><td>wallet_id</td><td>text</td><td>eea19d5b-cbfc-44a0-9406-a9bddcbe3994</td><td>Identifier for the wallet the invitation belongs to</td></tr><tr><td>accept</td><td>text</td><td>auto</td><td>auto, manual</td></tr><tr><td>their_role</td><td>text</td><td>sender</td><td>Role of agent that generated the invitation</td></tr><tr><td>their_label</td><td>text</td><td>Primary Wallet</td><td>Label of agent/wallet that generated the invitation</td></tr><tr><td>service_endpoint</td><td>text</td><td>https://hard-tiger-38.tun2.indiciotech.io</td><td>Endpoint used for serving the Invitation URL</td></tr><tr><td>domain</td><td>text</td><td>hard-tiger-38.tun2.indiciotech.io</td><td>Domain parsed from service_endpoint</td></tr><tr><td>path</td><td>text</td><td>/path</td><td>Path parsed from service_endpoint</td></tr><tr><td>workflow_status</td><td>text</td><td>active</td><td>active, inactive (managed by controller) </td></tr><tr><td>state</td><td>text</td><td>deleted</td><td>State of the invitation (managed by ACA-Py agent)</td></tr><tr><td>description</td><td>text</td><td>General purpose issuer</td><td>Optional string describing the purpose of this invitation</td></tr><tr><td>active_starting_at</td><td>timestamp</td><td>2024-12-30T10:36:52.443Z</td><td>Optional unix timestamp stating when the controller should begin recognizing this invitation as active. If not provided, set to the current time. Caution, the controller can be bypassed and does not strictly control ACA-Py.</td></tr><tr><td>active_ending_at</td><td>timestamp</td><td>null</td><td>Optional unix timestamp stating when the controller should stop recognizing this invitation as active. Can be null (does not end). Caution, the controller can be bypassed and does not strictly control ACA-Py.</td></tr><tr><td>uses_allowed</td><td>int</td><td>100</td><td>Optional number of uses the controller will allow for this invitation. Caution, the controller can be bypassed and does not strictly control ACA-Py. The null value signals an infinite use invitation.</td></tr><tr><td>uses_total</td><td>int</td><td>43</td><td>Number of times this invitation has been used</td></tr><tr><td>created_at</td><td>timestamp</td><td><p>"2024-12-30T10:36:52.466Z"</p><p><br></p></td><td>Date of creation for the invitation record (controller level)</td></tr><tr><td>updated_at</td><td>timestamp</td><td>"2024-12-30T10:36:52.466Z"</td><td>Date the invitation record was last updated (controller level)</td></tr></tbody></table>

### **Sample Response Body:**

```
{
  "invitation_id": 1,
  "oob_id": "c2e4e2d2-eb01-4065-94e3-6d4c0e17d537",
  "contact_id": "199e022b-bb4c-4ae4-99fe-395b50ad4b66",
  "connection_id": "f7699aa9-beec-4e0c-868d-eb3766ad2f64",
  "my_did": "",
  "alias": "Proven",
  "invitation_key": "did:key:z6MkkhftQjNAzNGYw9vSTKWnkdEQMRdzpXToAwwp4QtbRPSV#z6MkkhftQjNAzNGYw9vSTKWnkdEQMRdzpXToAwwp4QtbRPSV",
  "invitation_mode": "once",
  "invitation_url": "https://hard-tiger-38.tun2.indiciotech.io?oob=eyJAdHlwZSI6ICJodHRwczovL2RpZGNvbW0ub3JnL291dC1vZi1iYW5kLzEuMS9pbnZpdGF0aW9uIiwgIkBpZCI6ICJhZmJjMTJiNy0yOGZhLTQ5MzYtYmYxMS03NDgxNDhhOThmZmMiLCAibGFiZWwiOiAiUHJpbWFyeVdhbGxldCIsICJoYW5kc2hha2VfcHJvdG9jb2xzIjogWyJodHRwczovL2RpZGNvbW0ub3JnL2RpZGV4Y2hhbmdlLzEuMCJdLCAic2VydmljZXMiOiBbeyJpZCI6ICIjaW5saW5lIiwgInR5cGUiOiAiZGlkLWNvbW11bmljYXRpb24iLCAicmVjaXBpZW50S2V5cyI6IFsiZGlkOmtleTp6Nk1ra2hmdFFqTkF6TkdZdzl2U1RLV25rZEVRTVJkenBYVG9Bd3dwNFF0YlJQU1YjejZNa2toZnRRak5Bek5HWXc5dlNUS1dua2RFUU1SZHpwWFRvQXd3cDRRdGJSUFNWIl0sICJzZXJ2aWNlRW5kcG9pbnQiOiAiaHR0cHM6Ly9oYXJkLXRpZ2VyLTM4LnR1bjIuaW5kaWNpb3RlY2guaW8ifV19",
  "invitation_msg_id": "afbc12b7-28fa-4936-bf11-748148a98ffc",
  "invitation": {
      "@type": "https://didcomm.org/out-of-band/1.1/invitation",
      "@id": "afbc12b7-28fa-4936-bf11-748148a98ffc",
      "label": "PrimaryWallet",
      "handshake_protocols": [
          "https://didcomm.org/didexchange/1.0"
      ],
      "services": [
          {
              "id": "#inline",
              "type": "did-communication",
              "recipientKeys": [
                  "did:key:z6MkkhftQjNAzNGYw9vSTKWnkdEQMRdzpXToAwwp4QtbRPSV#z6MkkhftQjNAzNGYw9vSTKWnkdEQMRdzpXToAwwp4QtbRPSV"
              ],
              "serviceEndpoint": "https://hard-tiger-38.tun2.indiciotech.io"
          }
      ]
  },
  "wallet_id": "eea19d5b-cbfc-44a0-9406-a9bddcbe3994",
  "accept": "auto",
  "their_role": "sender",
  "their_label": "PrimaryWallet",
  "service_endpoint": "https://hard-tiger-38.tun2.indiciotech.io",
  "domain": "hard-tiger-38.tun2.indiciotech.io",
  "path": "",
  "workflow_status": "inactive",
  "state": "deleted",
  "description": "Updating invitation description via API",
  "active_starting_at": "2024-12-30T10:36:52.443Z",
  "active_ending_at": null,
  "uses_allowed": 1,
  "uses_total": 1,
  "created_at": "2024-12-30T10:36:52.466Z",
  "updated_at": "2024-12-30T10:37:31.732Z"
}
```

## Invitations - Delete Invitation

```
/api/v1/invitations/<invitation_id> - DELETE
```

This endpoint deletes an invitation record by providing its `invitation_id`.&#x20;

### **Response Body Information:**

<table data-header-hidden><thead><tr><th width="160"></th><th></th><th></th><th></th></tr></thead><tbody><tr><td><strong>Field name</strong></td><td><strong>Expected type/values</strong></td><td><strong>Examples</strong></td><td><strong>Notes</strong></td></tr><tr><td>success</td><td>string</td><td>“Invitation 2 was deleted successfully!”</td><td>Success message</td></tr></tbody></table>

### **Sample Response Body:**

```
{
  "success": "Invitation 2 was deleted successfully!"
}
```

## Presentations

#### Presentations - Read All Presentations

```
/api/v1/presentations - GET
```

This endpoint fetches all presentation records.

**Request Body Information:**

No Request Body

### **Response Body Information:**

The response body is an array of records. The following information is the data of each record:

<table data-header-hidden><thead><tr><th width="179"></th><th></th><th></th><th></th></tr></thead><tbody><tr><td><strong>Field name</strong></td><td><strong>Expected type/values</strong></td><td>Examples</td><td><strong>Notes</strong></td></tr><tr><td>presentation_exchange_id</td><td>string</td><td>349c7662-6837-4274-b213-355dab5d92f2</td><td>Primary identifier used for the presentation record</td></tr><tr><td>wallet_id</td><td>string</td><td>f20823bb-9079-4026-b9dc-a7f410af5141</td><td>Identifier that ties this record to an existing wallet</td></tr><tr><td>trace</td><td>boolean</td><td>false</td><td>Not used at present</td></tr><tr><td>connection_id</td><td>string</td><td>cdcff763-5616-4a43-90ee-b0a38e0f6646</td><td>Unique identifier used for tying a connection to the presentation record</td></tr><tr><td>role</td><td>string</td><td>verifier</td><td>Role of the presentation</td></tr><tr><td>verified</td><td>boolean</td><td>true</td><td>Indicates a verified presentation</td></tr><tr><td>presentation_created_at</td><td>timestamp</td><td>2025-01-06T10:16:26.561Z</td><td>ACA-Py field</td></tr><tr><td>presentation_updated_at</td><td>timestamp</td><td>2025-01-06T10:16:26.561Z</td><td>ACA-Py field</td></tr><tr><td>presentation_request_dict</td><td>object</td><td>{...}</td><td>ACA-Py field</td></tr><tr><td>initiator</td><td>string</td><td>self</td><td>Initiator of the presentation</td></tr><tr><td>presentation_request</td><td>object</td><td>{...}</td><td>Request object of the presentation</td></tr><tr><td>state</td><td>string</td><td>request-sent</td><td>Current state of the presentation</td></tr><tr><td>thread_id</td><td>string</td><td>85e6c895-be08-4c1d-be5d-91ccd902b62c</td><td>Thread identifier for the presentation</td></tr><tr><td>auto_present</td><td>boolean</td><td>false</td><td>Parameter for automatically presenting the presentation</td></tr><tr><td>presentation</td><td>object</td><td>null</td><td>Main presentation data</td></tr><tr><td>contact_label</td><td>string</td><td>Alice Smith</td><td>Contact label for the presentation</td></tr><tr><td>contact_id</td><td>string</td><td>contact123</td><td>Identifier that ties the presentation to a contact</td></tr><tr><td>created_at</td><td>timestamp</td><td>2025-01-06T10:16:26.647Z</td><td>Date/time this record was created</td></tr><tr><td>updated_at</td><td>timestamp</td><td>2025-01-06T10:16:26.647Z</td><td>Date/time this record was last updated</td></tr></tbody></table>

### **Sample Response Body:**

```
[
  {
    "presentation_exchange_id": "349c7662-6837-4274-b213-355dab5d92f2",
    "wallet_id": "f20823bb-9079-4026-b9dc-a7f410af5141",
    "trace": false,
    "connection_id": "cdcff763-5616-4a43-90ee-b0a38e0f6646",
    "role": "verifier",
    "verified": false,
    "presentation_created_at": "2025-01-06T10:16:26.561Z",
    "presentation_updated_at": "2025-01-06T10:16:26.561Z",
    "presentation_request_dict": {
      "@type": "https://didcomm.org/present-proof/2.0/request-presentation",
      "@id": "85e6c895-be08-4c1d-be5d-91ccd902b62c",
      "comment": "Requesting Presentation v2.0",
      "will_confirm": true,
      "formats": [
        {
          "attach_id": "indy",
          "format": "hlindy/proof-req@v2.0"
        }
      ],
      "request_presentations~attach": [
        {
          "@id": "indy",
          "mime-type": "application/json",
          "data": {
            "base64": "eyJuYW1lIjogIlByb29mIFJlcXVlc3QgdjIiLCAibm9uY2UiOiAiMTQ0MTI3ODcxMzAxMjI1NTU3MTQzNTcyMjUxODkxNjk4MDIyMTE1OTM4MTA1MTY1MjI3MTQ0MjAyMzYyNDM0OTI0MTMxMTA4MjAyNTYyMDMxMzQzNDY1ODEwODIyOTc4ODIxMCIsICJyZXF1ZXN0ZWRfcHJlZGljYXRlcyI6IHt9LCAicmVxdWVzdGVkX2F0dHJpYnV0ZXMiOiB7IjljOGM5YTVlLTg4YzctNGIxNy05ODk4LTExYzVhMTZiNzRjNiI6IHsibmFtZXMiOiBbInZlcmlmaWVkX2F0IiwgImxvY2FsX3BhcnQiLCAiYWRkcmVzcyIsICJkb21haW4iXSwgInJlc3RyaWN0aW9ucyI6IFt7InNjaGVtYV9pZCI6ICJLVDRMdEw3SEVNZVBxUVN5S1ZvZjdnOjI6RW1haWw6MS4wIn1dfX0sICJ2ZXJzaW9uIjogIjEuMCJ9"
          }
        }
      ]
    },
    "initiator": "self",
    "presentation_request": {
      "name": "Proof Request v2",
      "nonce": "1441278713012255571435722518916980221159381051652271442023624349241311082025620313434658108229788210",
      "requested_predicates": {},
      "requested_attributes": {
        "9c8c9a5e-88c7-4b17-9898-11c5a16b74c6": {
          "names": [
            "verified_at",
            "local_part",
            "address",
            "domain"
          ],
          "restrictions": [
            {
              "schema_id": "KT4LtL7HEMePqQSyKVof7g:2:Email:1.0"
            }
          ]
        }
      },
      "version": "1.0"
    },
    "state": "request-sent",
    "thread_id": "85e6c895-be08-4c1d-be5d-91ccd902b62c",
    "auto_present": false,
    "presentation": null,
    "contact_label": "Alice Smith",
    "contact_id": "90c98aa3-5ef4-4f1a-8107-05cc0b08ed8b",
    "created_at": "2025-01-06T10:16:26.647Z",
    "updated_at": "2025-01-06T10:16:26.647Z"
  }
]
```

## Presentations - Read Presentation by ID

```
/api/v1/presentations/<presentation_exchange_id> - GET
```

This endpoint fetches a presentation record by its `presentation_exchange_id`.

### **Response Body Information:**

<table data-header-hidden><thead><tr><th width="178"></th><th></th><th></th><th></th></tr></thead><tbody><tr><td><strong>Field name</strong></td><td><strong>Expected type/values</strong></td><td><strong>Examples</strong></td><td><strong>Notes</strong></td></tr><tr><td>presentation_exchange_id</td><td>string</td><td>349c7662-6837-4274-b213-355dab5d92f2</td><td>Primary identifier used for the presentation record</td></tr><tr><td>wallet_id</td><td>string</td><td>f20823bb-9079-4026-b9dc-a7f410af5141</td><td>Identifier that ties this record to an existing wallet</td></tr><tr><td>trace</td><td>boolean</td><td>false</td><td>Not used at present</td></tr><tr><td>connection_id</td><td>string</td><td>cdcff763-5616-4a43-90ee-b0a38e0f6646</td><td>Unique identifier used for tying a connection to the presentation record</td></tr><tr><td>role</td><td>string</td><td>verifier</td><td>Role of the presentation</td></tr><tr><td>verified</td><td>boolean</td><td>true</td><td>Indicates a verified presentation</td></tr><tr><td>presentation_created_at</td><td>timestamp</td><td>2025-01-06T10:16:26.561Z</td><td>ACA-Py field</td></tr><tr><td>presentation_updated_at</td><td>timestamp</td><td>2025-01-06T10:16:26.561Z</td><td>ACA-Py field</td></tr><tr><td>presentation_request_dict</td><td>object</td><td>{...}</td><td>ACA-Py field</td></tr><tr><td>initiator</td><td>string</td><td>self</td><td>Initiator of the presentation</td></tr><tr><td>presentation_request</td><td>object</td><td>{...}</td><td>Request object of the presentation</td></tr><tr><td>state</td><td>string</td><td>request-sent</td><td>Current state of the presentation</td></tr><tr><td>thread_id</td><td>string</td><td>85e6c895-be08-4c1d-be5d-91ccd902b62c</td><td>Thread identifier for the presentation</td></tr><tr><td>auto_present</td><td>boolean</td><td>false</td><td>Parameter for automatically presenting the presentation</td></tr><tr><td>presentation</td><td>object</td><td>null</td><td>Main presentation data</td></tr><tr><td>contact_label</td><td>string</td><td>Alice Smith</td><td>Contact label for the presentation</td></tr><tr><td>contact_id</td><td>string</td><td>contact123</td><td>Identifier that ties the presentation to a contact</td></tr><tr><td>created_at</td><td>timestamp</td><td>2025-01-06T10:16:26.647Z</td><td>Date/time this record was created</td></tr><tr><td>updated_at</td><td>timestamp</td><td>2025-01-06T10:16:26.647Z</td><td>Date/time this record was last updated</td></tr></tbody></table>

### **Sample Response Body:**

```
{
    "presentation_exchange_id": "349c7662-6837-4274-b213-355dab5d92f2",
    "wallet_id": "f20823bb-9079-4026-b9dc-a7f410af5141",
    "trace": false,
    "connection_id": "cdcff763-5616-4a43-90ee-b0a38e0f6646",
    "role": "verifier",
    "verified": false,
    "presentation_created_at": "2025-01-06T10:16:26.561Z",
    "presentation_updated_at": "2025-01-06T10:16:26.561Z",
    "presentation_request_dict": {
      "@type": "https://didcomm.org/present-proof/2.0/request-presentation",
      "@id": "85e6c895-be08-4c1d-be5d-91ccd902b62c",
      "comment": "Requesting Presentation v2.0",
      "will_confirm": true,
      "formats": [
        {
          "attach_id": "indy",
          "format": "hlindy/proof-req@v2.0"
        }
      ],
      "request_presentations~attach": [
        {
          "@id": "indy",
          "mime-type": "application/json",
          "data": {
            "base64": "eyJuYW1lIjogIlByb29mIFJlcXVlc3QgdjIiLCAibm9uY2UiOiAiMTQ0MTI3ODcxMzAxMjI1NTU3MTQzNTcyMjUxODkxNjk4MDIyMTE1OTM4MTA1MTY1MjI3MTQ0MjAyMzYyNDM0OTI0MTMxMTA4MjAyNTYyMDMxMzQzNDY1ODEwODIyOTc4ODIxMCIsICJyZXF1ZXN0ZWRfcHJlZGljYXRlcyI6IHt9LCAicmVxdWVzdGVkX2F0dHJpYnV0ZXMiOiB7IjljOGM5YTVlLTg4YzctNGIxNy05ODk4LTExYzVhMTZiNzRjNiI6IHsibmFtZXMiOiBbInZlcmlmaWVkX2F0IiwgImxvY2FsX3BhcnQiLCAiYWRkcmVzcyIsICJkb21haW4iXSwgInJlc3RyaWN0aW9ucyI6IFt7InNjaGVtYV9pZCI6ICJLVDRMdEw3SEVNZVBxUVN5S1ZvZjdnOjI6RW1haWw6MS4wIn1dfX0sICJ2ZXJzaW9uIjogIjEuMCJ9"
          }
        }
      ]
    },
    "initiator": "self",
    "presentation_request": {
      "name": "Proof Request v2",
      "nonce": "1441278713012255571435722518916980221159381051652271442023624349241311082025620313434658108229788210",
      "requested_predicates": {},
      "requested_attributes": {
        "9c8c9a5e-88c7-4b17-9898-11c5a16b74c6": {
          "names": [
            "verified_at",
            "local_part",
            "address",
            "domain"
          ],
          "restrictions": [
            {
              "schema_id": "KT4LtL7HEMePqQSyKVof7g:2:Email:1.0"
            }
          ]
        }
      },
      "version": "1.0"
    },
    "state": "request-sent",
    "thread_id": "85e6c895-be08-4c1d-be5d-91ccd902b62c",
    "auto_present": false,
    "presentation": null,
    "contact_label": "Alice Smith",
    "contact_id": "90c98aa3-5ef4-4f1a-8107-05cc0b08ed8b",
    "created_at": "2025-01-06T10:16:26.647Z",
    "updated_at": "2025-01-06T10:16:26.647Z"
  }
```

## TAA

## TAA - Fetch the TAA

```
/api/v1/fetch-taa - POST
```

This endpoint fetches the Transaction Author Agreement (TAA) from the ledger configured in the Proven environment (.env) file.

**Request Body Information:**

No Request Body

### **Response Body Information:**

<table data-header-hidden><thead><tr><th width="173"></th><th></th><th></th><th></th></tr></thead><tbody><tr><td><strong>Field name</strong></td><td><strong>Expected type/values</strong></td><td><strong>Examples</strong></td><td><strong>Notes</strong></td></tr><tr><td>aml_record</td><td>object</td><td>{...}</td><td>(Acceptance Mechanism List) Recognized by the network for use in the TAA </td></tr><tr><td>taa_record</td><td>object</td><td>{...}</td><td>Main TAA data</td></tr><tr><td>taa_required</td><td>boolean</td><td>true</td><td>Indicates a required TAA</td></tr><tr><td>taa_accepted</td><td>object</td><td>{...}</td><td>Includes data about the accepted TAA (mechanism, time)</td></tr></tbody></table>

### **Sample Response Body:**

```
{
  "aml_record": {
    "aml": {...},
    "amlContext": "...",
    "version": "1.0"
  },
  "taa_record": {
    "digest": "...",
    "ratification_ts": ...,
    "text": "...",
    "version": "1.3"
  },
  "taa_required": true,
  "taa_accepted": null
}
```

## TAA - Accept TAA

```
/api/v1/accept-taa - POST
```

This endpoint accepts the Transaction Author Agreement (TAA) using the provided TAA data.

### **Request Body Information:**

<table data-header-hidden><thead><tr><th width="175"></th><th></th><th></th><th></th></tr></thead><tbody><tr><td><strong>Field name</strong></td><td><strong>Expected type/values</strong></td><td><strong>Examples</strong></td><td><strong>Notes</strong></td></tr><tr><td>mechanism</td><td>string</td><td>“on_file”</td><td>Mechanism used for the TAA</td></tr><tr><td>text</td><td>string</td><td>“Indicio Transaction Author Agreement….”</td><td>Transaction Author Agreement</td></tr><tr><td>version</td><td>string</td><td>1.3</td><td>Version of the Transaction Author Agreement</td></tr></tbody></table>

### **Response Body Information:**

<table data-header-hidden><thead><tr><th width="177"></th><th></th><th></th><th></th></tr></thead><tbody><tr><td><strong>Field name</strong></td><td><strong>Expected type/values</strong></td><td><strong>Examples</strong></td><td><strong>Notes</strong></td></tr><tr><td>aml_record</td><td>object</td><td>{...}</td><td>(Acceptance Mechanism List) Recognized by the network for use in the TAA </td></tr><tr><td>taa_record</td><td>object</td><td>{...}</td><td>Main TAA data</td></tr><tr><td>taa_required</td><td>boolean</td><td>true</td><td>Indicates a required TAA</td></tr><tr><td>taa_accepted</td><td>object</td><td>{...}</td><td>Includes data about the accepted TAA (mechanism, time)</td></tr></tbody></table>

### **Sample Response Body:**

```
{
  "aml_record": {
    "aml": {...},
    "amlContext": "...",
    "version": "1.0"
  },
  "taa_record": {
    "digest": "...",
    "ratification_ts": ...,
    "text": "...",
    "version": "1.3"
  },
  "taa_required": true,
  "taa_accepted": {...}
```

## Verifications

## Verifications - Create Verification Request (AnonCred)

```
/api/v1/verifications - POST
```

This endpoint creates a Verification (AnonCred) request record that handles verifying credentials for currently active connection(s) or future active connection(s) until the request record reaches a completed state.&#x20;

### **Request Body Information:**

<table data-header-hidden><thead><tr><th width="177"></th><th></th><th></th><th></th></tr></thead><tbody><tr><td><strong>Field name</strong></td><td><strong>Expected type/values</strong></td><td><strong>Examples</strong></td><td><strong>Notes</strong></td></tr><tr><td>invitation_id</td><td>integer</td><td>123</td><td>Optional integer used to process the request record by a connection tied to the invitation_id. Used with contact_id, has second priority</td></tr><tr><td>contact_id</td><td>string</td><td>contact123</td><td>Optional contact ID string used for processing the request record by known contact. Used with invitation_id, has first priority</td></tr><tr><td>schemas</td><td>array</td><td>[{...}, {...}]</td><td>Contains schema IDs and their attributes</td></tr><tr><td>timeout</td><td>integer</td><td>10</td><td>Number of seconds the initial request will wait for a completed record before responding</td></tr><tr><td>rule</td><td>string</td><td>“no rule”</td><td>Rules for this verification request</td></tr></tbody></table>

### **Sample Request Bodies:**

```
{
  "invitation_id": 1,
  "contact_id": "",
  "schemas": [
    {
      "schema_id": "Bo6yctq8hivGZWyaZcneJf:2:User:1.0",
      "schema_attributes": [
        "Username"
      ]
    }
  ],
  "timeout": "15",
  "rule": "no rule"
}
```

```
{
  "invitation_id": 1,
  "contact_id": "123",
  "schemas": [
    {
      "schema_attributes": {
        "domain": {
          "restrictions": [
            {
              "schema_id": "KT4LtL7HEMePqQSyKVof7g:2:Email:1.0"
            }
          ]
        },
        "address": {
          "restrictions": [
            {}
          ]
        },
        "age": {
          "restrictions": []
        },
        "race": {}
      }
    }
  ],
  "timeout": "15",
  "rule": "no rule"
}
```

### **Response Body Information:**

The response body is an array of records. The following information is the data of each record:

<table data-header-hidden><thead><tr><th width="176"></th><th></th><th></th><th></th></tr></thead><tbody><tr><td><strong>Field name</strong></td><td><strong>Expected type/values</strong></td><td><strong>Examples</strong></td><td><strong>Notes</strong></td></tr><tr><td>verification_id</td><td>integer</td><td>10</td><td>Primary identifier for the verification request record</td></tr><tr><td>connection_id</td><td>string</td><td>e2aed3c4-c0a1-4711-902e-f0a9eba618da</td><td>Identifier that ties the used connection to the verification request record</td></tr><tr><td>contact_id</td><td>string</td><td>contact123</td><td>Optional contact ID string used for processing the request record by known contact. Used with invitation_id, has first priority</td></tr><tr><td>invitation_id</td><td>integer</td><td>123</td><td>Optional integer used to process the request record by a connection tied to the invitation_id. Used with contact_id, has second priority</td></tr><tr><td>schema_id</td><td>string</td><td>null</td><td>Schema used for the verification request</td></tr><tr><td>schema_attributes</td><td>object</td><td>{...}</td><td>Contains the schema attributes and their restrictions, if any are provided</td></tr><tr><td>wallet_id</td><td>string</td><td>407e6215-17c5-4c81-901e-d75d9cc1a75a</td><td>Identifier that ties this record to an existing wallet</td></tr><tr><td>timeout</td><td>integer</td><td>10</td><td>Number of seconds the initial request waited for a completed request record</td></tr><tr><td>rule</td><td>string</td><td>“no rule”</td><td>Rules for the verification request</td></tr><tr><td>meta_data</td><td>object</td><td>null</td><td>Metadata for the verification request record</td></tr><tr><td>state</td><td>string</td><td>done</td><td>Current state of the verification</td></tr><tr><td>complete</td><td>boolean</td><td>true</td><td>This field does not indicate a verified presentation, only that the request record has finished its process. </td></tr><tr><td>result</td><td>boolean</td><td>true</td><td>Indicates a verified presentation. This field should be used alongside “complete” to determine a successful request record.</td></tr><tr><td>result_string</td><td>string</td><td>Verified</td><td>Custom string for helping to define the state of the request</td></tr><tr><td>result_data</td><td>array</td><td>[...]</td><td>Contains the verified attributes</td></tr><tr><td>presentation_exchange_id</td><td>array</td><td>[...]</td><td>Contains unique IDs for each proof request</td></tr><tr><td>error</td><td>string</td><td>“Public DID not set.”</td><td>Error message caught while processing the request record</td></tr><tr><td>created_at</td><td>timestamp</td><td>2025-01-06T11:51:10.169Z</td><td>Date/time this record was created</td></tr><tr><td>updated_at</td><td>timestamp</td><td>2025-01-06T11:51:10.169Z</td><td>Date/time this record was last updated</td></tr></tbody></table>

### **Sample Response Body:**

```
[
  {
    "verification_id": 1,
    "connection_id": "e2aed3c4-c0a1-4711-902e-f0a9eba618da",
    "contact_id": "",
    "invitation_id": 1,
    "schema_id": null,
    "schema_attributes": {
      "Username": {
        "restrictions": [
          {
            "schema_id": "Bo6yctq8hivGZWyaZcneJf:2:User:1.0"
          }
        ]
      }
    },
    "wallet_id": "407e6215-17c5-4c81-901e-d75d9cc1a75a",
    "timeout": 15,
    "rule": "no rule",
    "meta_data": null,
    "state": "done",
    "complete": true,
    "result": true,
    "result_string": "Verified",
    "result_data": [
      {
        "name": "Username",
        "value": "AliceSmith"
      }
    ],
    "presentation_exchange_id": [
      "02ac589b-5463-4b0f-97a0-211221aaa54e"
    ],
    "error": "",
    "created_at": "2025-01-06T11:51:10.169Z",
    "updated_at": "2025-01-06T11:51:13.765Z"
  }
]
```

## Verifications - Read Verification by ID

```
/api/v1/verifications/<verification_id> - GET
```

This endpoint allows you to retrieve an AnonCred verification request record by its ID.

### **Response Body Information:**

<table data-header-hidden><thead><tr><th width="176"></th><th></th><th></th><th></th></tr></thead><tbody><tr><td><strong>Field name</strong></td><td><strong>Expected type/values</strong></td><td><strong>Examples</strong></td><td><strong>Notes</strong></td></tr><tr><td>verification_id</td><td>integer</td><td>10</td><td>Primary identifier for the verification request record</td></tr><tr><td>connection_id</td><td>string</td><td>e2aed3c4-c0a1-4711-902e-f0a9eba618da</td><td>Identifier that ties the used connection to the verification request record</td></tr><tr><td>contact_id</td><td>string</td><td>contact123</td><td>Optional contact ID string used for processing the request record by known contact. Used with invitation_id, has first priority</td></tr><tr><td>invitation_id</td><td>integer</td><td>123</td><td>Optional integer used to process the request record by a connection tied to the invitation_id. Used with contact_id, has second priority</td></tr><tr><td>schema_id</td><td>string</td><td>null</td><td>Schema used for the verification request</td></tr><tr><td>schema_attributes</td><td>object</td><td>{...}</td><td>Contains the schema attributes and their restrictions, if any are provided</td></tr><tr><td>wallet_id</td><td>string</td><td>407e6215-17c5-4c81-901e-d75d9cc1a75a</td><td>Identifier that ties this record to an existing wallet</td></tr><tr><td>timeout</td><td>integer</td><td>10</td><td>Number of seconds the initial request waited for a completed request record</td></tr><tr><td>rule</td><td>string</td><td>“no rule”</td><td>Rules for the verification request</td></tr><tr><td>meta_data</td><td>object</td><td>null</td><td>Metadata for the verification request record</td></tr><tr><td>state</td><td>string</td><td>done</td><td>Current state of the verification</td></tr><tr><td>complete</td><td>boolean</td><td>true</td><td>This field does not indicate a verified presentation, only that the request record has finished its process. </td></tr><tr><td>result</td><td>boolean</td><td>true</td><td>Indicates a verified presentation. This field should be used alongside “complete” to determine a successful request record.</td></tr><tr><td>result_string</td><td>string</td><td>Verified</td><td>Custom string for helping to define the state of the request</td></tr><tr><td>result_data</td><td>array</td><td>[...]</td><td>Contains the verified attributes</td></tr><tr><td>presentation_exchange_id</td><td>array</td><td>[...]</td><td>Contains unique IDs for each proof request</td></tr><tr><td>error</td><td>string</td><td>“Public DID not set.”</td><td>Error message caught while processing the request record</td></tr><tr><td>created_at</td><td>timestamp</td><td>2025-01-06T11:51:10.169Z</td><td>Date/time this record was created</td></tr><tr><td>updated_at</td><td>timestamp</td><td>2025-01-06T11:51:10.169Z</td><td>Date/time this record was last updated</td></tr></tbody></table>

### **Sample Response Body:**

```
{
    "verification_id": 1,
    "connection_id": "e2aed3c4-c0a1-4711-902e-f0a9eba618da",
    "contact_id": "",
    "invitation_id": 1,
    "schema_id": null,
    "schema_attributes": {
      "Username": {
        "restrictions": [
          {
            "schema_id": "Bo6yctq8hivGZWyaZcneJf:2:User:1.0"
          }
        ]
      }
    },
    "wallet_id": "407e6215-17c5-4c81-901e-d75d9cc1a75a",
    "timeout": 15,
    "rule": "no rule",
    "meta_data": null,
    "state": "done",
    "complete": true,
    "result": true,
    "result_string": "Verified",
    "result_data": [
      {
        "name": "Username",
        "value": "AliceSmith"
      }
    ],
    "presentation_exchange_id": [
      "02ac589b-5463-4b0f-97a0-211221aaa54e"
    ],
    "error": "",
    "created_at": "2025-01-06T11:51:10.169Z",
    "updated_at": "2025-01-06T11:51:13.765Z"
}
```

## Verifications - Create Verification Request (JSON-LD)

```
/api/v1/verifications/json-ld - POST
```

This endpoint creates a Verification (JSON-LD) request record that handles verifying credentials for currently active connection(s) or future active connection(s) until the request record reaches a completed state.&#x20;

### **Request Body Information:**

<table data-header-hidden><thead><tr><th width="173"></th><th></th><th></th><th></th></tr></thead><tbody><tr><td><strong>Field name</strong></td><td><strong>Expected type/values</strong></td><td><strong>Examples</strong></td><td><strong>Notes</strong></td></tr><tr><td>invitation_id</td><td>integer</td><td>123</td><td>Optional integer used to process the request record by a connection tied to the invitation_id. Used with contact_id, has second priority</td></tr><tr><td>contact_id</td><td>string</td><td>contact123</td><td>Optional contact ID string used for processing the request record by known contact. Used with invitation_id, has first priority</td></tr><tr><td>definitions</td><td>array</td><td>[{...}, {...}]</td><td>Definitions for the verification request. Contains context, attributes, and label</td></tr><tr><td>timeout</td><td>integer</td><td>10</td><td>Number of seconds the initial request will wait for a completed record before responding</td></tr><tr><td>rule</td><td>string</td><td>“no rule”</td><td>Rules for the verification request</td></tr></tbody></table>

### **Response Body Information:**

The response body is an array of records. The following information is the data of each record:

<table data-header-hidden><thead><tr><th width="176"></th><th></th><th></th><th></th></tr></thead><tbody><tr><td><strong>Field name</strong></td><td><strong>Expected type/values</strong></td><td><strong>Examples</strong></td><td><strong>Notes</strong></td></tr><tr><td>verification_id</td><td>integer</td><td>10</td><td>Primary identifier for the verification request record</td></tr><tr><td>connection_id</td><td>string</td><td>e2aed3c4-c0a1-4711-902e-f0a9eba618da</td><td>Identifier that ties the used connection to the verification request record</td></tr><tr><td>contact_id</td><td>string</td><td>contact123</td><td>Optional contact ID string used for processing the request record by known contact. Used with invitation_id, has first priority</td></tr><tr><td>invitation_id</td><td>integer</td><td>123</td><td>Optional integer used to process the request record by a connection tied to the invitation_id. Used with contact_id, has second priority</td></tr><tr><td>context</td><td>array</td><td>[“...”, “...”]</td><td>List of contexts used for this verification record</td></tr><tr><td>attributes</td><td>array</td><td>[...]</td><td>List of attributes to be verified</td></tr><tr><td>wallet_id</td><td>string</td><td>407e6215-17c5-4c81-901e-d75d9cc1a75a</td><td>Identifier that ties this record to an existing wallet</td></tr><tr><td>label</td><td>string</td><td>Email</td><td>Label for the verification request record</td></tr><tr><td>timeout</td><td>integer</td><td>10</td><td>Number of seconds the initial request waited for a completed request record</td></tr><tr><td>rule</td><td>string</td><td>“no rule”</td><td>Rules for the verification request</td></tr><tr><td>meta_data</td><td>object</td><td>null</td><td>Metadata for the verification request record</td></tr><tr><td>state</td><td>string</td><td>done</td><td>Current state of the verification request record</td></tr><tr><td>complete</td><td>boolean</td><td>true</td><td>This field does not indicate a verified request record, only that the request record has finished its process. </td></tr><tr><td>result</td><td>boolean</td><td>true</td><td>Indicates a verified request record. This field should be used alongside “complete” to determine a successful request record.</td></tr><tr><td>result_string</td><td>string</td><td>Verified</td><td>Custom string for helping to define the state of the request</td></tr><tr><td>result_data</td><td>array</td><td>[...]</td><td>Contains the verified attributes</td></tr><tr><td>presentation_exchange_id</td><td>array</td><td>[...]</td><td>Contains unique IDs for each proof request</td></tr><tr><td>error</td><td>string</td><td>“Controller Error! ….”</td><td>Error message caught while processing the request record</td></tr><tr><td>created_at</td><td>timestamp</td><td>2025-01-06T11:51:10.169Z</td><td>Date/time this record was created</td></tr><tr><td>updated_at</td><td>timestamp</td><td>2025-01-06T11:51:10.169Z</td><td>Date/time this record was last updated</td></tr></tbody></table>

### **Sample Response Body:**

```
[
  {
    "verification_id": 1,
    "connection_id": "e2aed3c4-c0a1-4711-902e-f0a9eba618da",
    "contact_id": "",
    "invitation_id": 1,
    "context": [
      "https://www.w3.org/2018/credentials#VerifiableCredential",
      "https://www.w3.org/2018/credentials/v1",
      "https://purl.imsglobal.org/spec/vc/ob/vocab.html#OpenBadgeCredential"
    ],
    "attributes": [
      "id",
      "criteria"
    ],
    "wallet_id": "407e6215-17c5-4c81-901e-d75d9cc1a75a",
    "label": "your label here",
    "timeout": 15,
    "rule": "no rule",
    "meta_data": null,
    "state": "done",
    "complete": true,
    "result": false,
    "result_string": "Not Verified",
    "result_data": null,
    "presentation_exchange_id": [
      "52778677-a7be-4017-9b21-d146372f07e8"
    ],
    "error": "",
    "created_at": "2025-01-06T13:40:59.623Z",
    "updated_at": "2025-01-06T13:41:02.640Z"
  }
]
```

## Verifications - Read Verifications By ID (JSON-LD)

```
/api/v1/verifications/json-ld/<verification_id> - GET
```

This endpoint fetches a JSON-LD verification request record by using its `verification_id`.

### **Response Body Information:**

The response body is an array of records. The following information is the data of each record:

<table data-header-hidden><thead><tr><th width="176"></th><th></th><th></th><th></th></tr></thead><tbody><tr><td><strong>Field name</strong></td><td><strong>Expected type/values</strong></td><td><strong>Examples</strong></td><td><strong>Notes</strong></td></tr><tr><td>verification_id</td><td>integer</td><td>10</td><td>Primary identifier for the verification request record</td></tr><tr><td>connection_id</td><td>string</td><td>e2aed3c4-c0a1-4711-902e-f0a9eba618da</td><td>Identifier that ties the used connection to the verification request record</td></tr><tr><td>contact_id</td><td>string</td><td>contact123</td><td>Optional contact ID string used for processing the request record by known contact. Used with invitation_id, has first priority</td></tr><tr><td>invitation_id</td><td>integer</td><td>123</td><td>Optional integer used to process the request record by a connection tied to the invitation_id. Used with contact_id, has second priority</td></tr><tr><td>context</td><td>array</td><td>[“...”, “...”]</td><td>List of contexts used for the verification record</td></tr><tr><td>attributes</td><td>array</td><td>[...]</td><td>List of attributes to be verified</td></tr><tr><td>wallet_id</td><td>string</td><td>407e6215-17c5-4c81-901e-d75d9cc1a75a</td><td>Identifier that ties this record to an existing wallet</td></tr><tr><td>label</td><td>string</td><td>Email</td><td>Label for the verification request record</td></tr><tr><td>timeout</td><td>integer</td><td>10</td><td>Number of seconds the initial request waited for a completed request record</td></tr><tr><td>rule</td><td>string</td><td>“no rule”</td><td>Rules for the verification request</td></tr><tr><td>meta_data</td><td>object</td><td>null</td><td>Metadata for the verification request record</td></tr><tr><td>state</td><td>string</td><td>done</td><td>Current state of the verification request record</td></tr><tr><td>complete</td><td>boolean</td><td>true</td><td>This field does not indicate a verified request record, only that the request record has finished its process. </td></tr><tr><td>result</td><td>boolean</td><td>true</td><td>Indicates a verified request record. This field should be used alongside “complete” to determine a successful request record.</td></tr><tr><td>result_string</td><td>string</td><td>Verified</td><td>Custom string for helping to define the state of the request</td></tr><tr><td>result_data</td><td>array</td><td>[...]</td><td>Contains the verified attributes</td></tr><tr><td>presentation_exchange_id</td><td>array</td><td>[...]</td><td>Contains unique IDs for each proof request</td></tr><tr><td>error</td><td>string</td><td>“Controller Error! ….”</td><td>Error message caught while processing the request record</td></tr><tr><td>created_at</td><td>timestamp</td><td>2025-01-06T11:51:10.169Z</td><td>Date/time this record was created</td></tr><tr><td>updated_at</td><td>timestamp</td><td>2025-01-06T11:51:10.169Z</td><td>Date/time this record was last updated</td></tr></tbody></table>

### **Sample Response Body:**

```
{
  "verification_id": 1,
  "connection_id": "e2aed3c4-c0a1-4711-902e-f0a9eba618da",
  "contact_id": null,
  "invitation_id": 1,
  "context": [
    "https://www.w3.org/2018/credentials#VerifiableCredential",
    "https://www.w3.org/2018/credentials/v1",
    "https://purl.imsglobal.org/spec/vc/ob/vocab.html#OpenBadgeCredential"
  ],
  "attributes": [
    "id",
    "criteria"
  ],
  "wallet_id": "407e6215-17c5-4c81-901e-d75d9cc1a75a",
  "label": "your label here",
  "timeout": 15,
  "rule": "no rule",
  "meta_data": null,
  "state": "done",
  "complete": true,
  "result": false,
  "result_string": "Not Verified",
  "result_data": null,
  "presentation_exchange_id": [
    "52778677-a7be-4017-9b21-d146372f07e8"
  ],
  "error": "",
  "created_at": "2025-01-06T13:40:59.623Z",
  "updated_at": "2025-01-06T13:41:02.640Z"
}
```

<figure><img src="/files/nH8WXmsWonMcbGXU57u2" alt=""><figcaption></figcaption></figure>


---

# 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, and the optional `goal` query parameter:

```
GET https://docs.indicio.tech/developer/indicio-proven-r/how-to-guides/indicio-proven-api-documentation.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

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.
