---
id: config-create-sandbox-org
title: "Create sandbox organisation"
description: "Creates a sandbox organisation for the organisation. A sandbox organisation is a separate wallet inside your organisation. It has its own credential definitions, presentation definitions, webhooks and keys, so you can test an issuance or a verification flow without a change to the main wallet."
sidebar_label: "Create sandbox organisation"
hide_title: true
hide_table_of_contents: true
api: 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
sidebar_class_name: "post api-method"
info_path: docs/openid4vc-api/igrant-io-api-documentation
custom_edit_url: null
---

> **Build this with an AI coding agent.** Install the iGrant.io Agent Skills, then ask your agent to build the integration:
>
> ```bash
> npx skills add L3-iGrant/skills
> ```


import ApiTabs from "@theme/ApiTabs";
import DiscriminatorTabs from "@theme/DiscriminatorTabs";
import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint";
import SecuritySchemes from "@theme/ApiExplorer/SecuritySchemes";
import MimeTabs from "@theme/MimeTabs";
import ParamsItem from "@theme/ParamsItem";
import ResponseSamples from "@theme/ResponseSamples";
import SchemaItem from "@theme/SchemaItem";
import SchemaTabs from "@theme/SchemaTabs";
import Markdown from "@theme/Markdown";
import OperationTabs from "@theme/OperationTabs";
import TabItem from "@theme/TabItem";

<h1 className={"openapi__heading"}>Create sandbox organisation</h1>

<MethodEndpoint method={"post"} path={"/v2/config/sandbox-org"}></MethodEndpoint>



Creates a sandbox organisation for the organisation. A sandbox organisation is a separate wallet inside your organisation. It has its own credential definitions, presentation definitions, webhooks and keys, so you can test an issuance or a verification flow without a change to the main wallet.

The main wallet of the organisation must be deployed before you create a sandbox organisation. The name must be unique in the organisation.

The service deploys a new wallet for the sandbox organisation and copies the logo image and the cover image of the organisation to it. To use the new sandbox organisation in a later request, send its `id` in the `X-SandboxOrgId` header, or bind an API key to it with `PUT /config/admin/apikey/{apiKeyId}/sandbox-org`.

## Request

<MimeTabs className={"openapi-tabs__mime"}><TabItem label={"application/json"} value={"application/json-schema"}><details style={{}} className={"openapi-markdown__details mime"} data-collapsed={false} open={true}><summary style={{}} className={"openapi-markdown__details-summary-mime"}><h3 className={"openapi-markdown__details-summary-header-body"}>Body</h3><strong className={"openapi-schema__required"}>required</strong></summary><div style={{"textAlign":"left","marginLeft":"1rem"}}><div style={{"marginTop":"1rem","marginBottom":"1rem"}}>

The sandbox organisation to create.

</div></div><ul style={{"marginLeft":"1rem"}}><SchemaItem collapsible={true} className={"schemaItem"}><details style={{}} className={"openapi-markdown__details"}><summary style={{}}><span className={"openapi-schema__container"}><strong className={"openapi-schema__property"}>sandboxOrg</strong><span className={"openapi-schema__name"}> object</span><span className={"openapi-schema__divider"}></span><span className={"openapi-schema__required"}>required</span></span></summary><div style={{"marginLeft":"1rem"}}><div style={{"marginTop":".5rem","marginBottom":".5rem"}}>

The sandbox organisation to create.

</div><SchemaItem collapsible={false} name={"name"} required={true} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","description":"Name of the sandbox organisation. This field is mandatory. The name must be unique in the organisation. If a sandbox organisation with the same name exists, the service gives HTTP 400.","example":"Acme Test Issuer"}}></SchemaItem><SchemaItem collapsible={false} name={"description"} required={false} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","description":"Description of the sandbox organisation. This field is optional, and the service stores an empty string when you leave it out.","example":"Sandbox organisation for issuance tests"}}></SchemaItem></div></details></SchemaItem></ul></details></TabItem></MimeTabs><div><div><ApiTabs label={undefined} id={undefined}><TabItem label={"201"} value={"201"}><div>

The service created the sandbox organisation.

</div><details style={{"textAlign":"left","marginBottom":"1rem"}} className={"openapi-markdown__details"} data-collaposed={true} open={false}><summary style={{}}><strong>Response Headers</strong></summary><ul style={{"marginLeft":"1rem"}}></ul></details><div><MimeTabs className={"openapi-tabs__mime"} schemaType={"response"}><TabItem label={"application/json"} value={"application/json"}><SchemaTabs className={"openapi-tabs__schema"}><TabItem label={"Schema"} value={"Schema"}><details style={{}} className={"openapi-markdown__details response"} data-collapsed={false} open={true}><summary style={{}} className={"openapi-markdown__details-summary-response"}><strong>Schema</strong></summary><div style={{"textAlign":"left","marginLeft":"1rem"}}></div><ul style={{"marginLeft":"1rem"}}><SchemaItem collapsible={true} className={"schemaItem"}><details style={{}} className={"openapi-markdown__details"}><summary style={{}}><span className={"openapi-schema__container"}><strong className={"openapi-schema__property"}>sandboxOrg</strong><span className={"openapi-schema__name"}> object</span><span className={"openapi-schema__divider"}></span><span className={"openapi-schema__required"}>required</span></span></summary><div style={{"marginLeft":"1rem"}}><div style={{"marginTop":".5rem","marginBottom":".5rem"}}>

The sandbox organisation that the service created. The service sets the `id`, the `openIdDeploymentId`, the `status` and the timestamps.

</div><SchemaItem collapsible={false} name={"id"} required={true} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","description":"Unique identifier of the sandbox organisation"}}></SchemaItem><SchemaItem collapsible={false} name={"name"} required={true} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","description":"Display name of the sandbox organisation"}}></SchemaItem><SchemaItem collapsible={false} name={"description"} required={true} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","description":"Human readable description of the sandbox organisation"}}></SchemaItem><SchemaItem collapsible={false} name={"openIdDeploymentId"} required={true} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","description":"Identifier of the associated OpenID deployment"}}></SchemaItem><SchemaItem collapsible={false} name={"status"} required={true} schemaName={"integer"} qualifierMessage={undefined} schema={{"type":"integer","description":"Status code of the sandbox organisation"}}></SchemaItem><SchemaItem collapsible={false} name={"ledgerId"} required={true} schemaName={"integer"} qualifierMessage={undefined} schema={{"type":"integer","description":"Identifier of the associated ledger"}}></SchemaItem><SchemaItem collapsible={false} name={"infrastructureProvider"} required={true} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","description":"Name of the infrastructure provider"}}></SchemaItem><SchemaItem collapsible={false} name={"version"} required={true} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","description":"Version of the sandbox organisation configuration"}}></SchemaItem><SchemaItem collapsible={false} name={"role"} required={true} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","description":"Role of the sandbox organisation in the ecosystem"}}></SchemaItem><SchemaItem collapsible={false} name={"trustAnchor"} required={true} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","description":"Trust anchor identifier or DID"}}></SchemaItem><SchemaItem collapsible={false} name={"isWalletProvider"} required={true} schemaName={"boolean"} qualifierMessage={undefined} schema={{"type":"boolean","description":"Indicates whether this sandbox organisation acts as a wallet provider"}}></SchemaItem><SchemaItem collapsible={false} name={"secureVault"} required={true} schemaName={"integer"} qualifierMessage={undefined} schema={{"type":"integer","description":"Identifier of the primary secure vault"}}></SchemaItem><SchemaItem collapsible={false} name={"secureVaults"} required={false} schemaName={"integer[]"} qualifierMessage={undefined} schema={{"type":"array","nullable":true,"description":"Identifiers of the secure vaults that the sandbox organisation uses. The field holds `null` when the sandbox organisation has no secure vault.","items":{"type":"integer"}}}></SchemaItem><SchemaItem collapsible={false} name={"logoImageId"} required={false} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","description":"Identifier of the logo image. The field is absent when the sandbox organisation has no logo image."}}></SchemaItem><SchemaItem collapsible={false} name={"coverImageId"} required={false} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","description":"Identifier of the cover image. The field is absent when the sandbox organisation has no cover image."}}></SchemaItem><SchemaItem collapsible={false} name={"logoImageUrl"} required={true} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","description":"Public URL for the logo image"}}></SchemaItem><SchemaItem collapsible={false} name={"coverImageUrl"} required={true} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","description":"Public URL for the cover image"}}></SchemaItem><SchemaItem collapsible={false} name={"createdAt"} required={true} schemaName={"integer"} qualifierMessage={undefined} schema={{"type":"integer","description":"Timestamp when the sandbox organisation was created"}}></SchemaItem><SchemaItem collapsible={false} name={"updatedAt"} required={true} schemaName={"integer"} qualifierMessage={undefined} schema={{"type":"integer","description":"Timestamp when the sandbox organisation was last updated"}}></SchemaItem><SchemaItem collapsible={false} name={"isMain"} required={true} schemaName={"boolean"} qualifierMessage={undefined} schema={{"type":"boolean","description":"Indicates whether this is the main organisation"}}></SchemaItem></div></details></SchemaItem></ul></details></TabItem><TabItem label={"Example (from schema)"} value={"Example (from schema)"}><ResponseSamples responseExample={"{\n  \"sandboxOrg\": {\n    \"id\": \"string\",\n    \"name\": \"string\",\n    \"description\": \"string\",\n    \"openIdDeploymentId\": \"string\",\n    \"status\": 0,\n    \"ledgerId\": 0,\n    \"infrastructureProvider\": \"string\",\n    \"version\": \"string\",\n    \"role\": \"string\",\n    \"trustAnchor\": \"string\",\n    \"isWalletProvider\": true,\n    \"secureVault\": 0,\n    \"secureVaults\": [\n      0\n    ],\n    \"logoImageId\": \"string\",\n    \"coverImageId\": \"string\",\n    \"logoImageUrl\": \"string\",\n    \"coverImageUrl\": \"string\",\n    \"createdAt\": 0,\n    \"updatedAt\": 0,\n    \"isMain\": true\n  }\n}"} language={"json"}></ResponseSamples></TabItem><TabItem label={"Example"} value={"Example"}><ResponseSamples responseExample={"{\n  \"sandboxOrg\": {\n    \"id\": \"6889e1a4c5b2f30001a3d710\",\n    \"name\": \"Acme Test Issuer\",\n    \"description\": \"Sandbox organisation for issuance tests\",\n    \"openIdDeploymentId\": \"6889e1a4c5b2f30001a3d711\",\n    \"status\": 2,\n    \"ledgerId\": 0,\n    \"infrastructureProvider\": \"iGrant\",\n    \"version\": \"1.0.0\",\n    \"role\": \"\",\n    \"trustAnchor\": \"\",\n    \"isWalletProvider\": false,\n    \"secureVault\": 0,\n    \"secureVaults\": null,\n    \"logoImageId\": \"6889e1a4c5b2f30001a3d6f0\",\n    \"coverImageId\": \"6889e1a4c5b2f30001a3d6f1\",\n    \"logoImageUrl\": \"https://demo-api.igrant.io/v2/onboard/image/6889e1a4c5b2f30001a3d6f0/web\",\n    \"coverImageUrl\": \"https://demo-api.igrant.io/v2/onboard/image/6889e1a4c5b2f30001a3d6f1/web\",\n    \"createdAt\": 1754745764,\n    \"updatedAt\": 1754745764,\n    \"isMain\": false\n  }\n}"} language={"json"}></ResponseSamples></TabItem></SchemaTabs></TabItem></MimeTabs></div></TabItem><TabItem label={"400"} value={"400"}><div>

The main wallet of the organisation is not deployed, the `name` is missing, a sandbox organisation with the same name exists, or the service could not deploy the wallet.

</div><details style={{"textAlign":"left","marginBottom":"1rem"}} className={"openapi-markdown__details"} data-collaposed={true} open={false}><summary style={{}}><strong>Response Headers</strong></summary><ul style={{"marginLeft":"1rem"}}></ul></details><div><MimeTabs className={"openapi-tabs__mime"} schemaType={"response"}><TabItem label={"application/json"} value={"application/json"}><SchemaTabs className={"openapi-tabs__schema"}><TabItem label={"Schema"} value={"Schema"}><details style={{}} className={"openapi-markdown__details response"} data-collapsed={false} open={true}><summary style={{}} className={"openapi-markdown__details-summary-response"}><strong>Schema</strong></summary><div style={{"textAlign":"left","marginLeft":"1rem"}}></div><ul style={{"marginLeft":"1rem"}}><SchemaItem collapsible={false} name={"errorCode"} required={true} schemaName={"integer"} qualifierMessage={undefined} schema={{"type":"integer","example":400}}></SchemaItem><SchemaItem collapsible={false} name={"errorDescription"} required={true} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","example":"Bad input parameter"}}></SchemaItem></ul></details></TabItem><TabItem label={"Example (from schema)"} value={"Example (from schema)"}><ResponseSamples responseExample={"{\n  \"errorCode\": 400,\n  \"errorDescription\": \"Bad input parameter\"\n}"} language={"json"}></ResponseSamples></TabItem></SchemaTabs></TabItem></MimeTabs></div></TabItem><TabItem label={"401"} value={"401"}><div>

Unauthorized

</div><details style={{"textAlign":"left","marginBottom":"1rem"}} className={"openapi-markdown__details"} data-collaposed={true} open={false}><summary style={{}}><strong>Response Headers</strong></summary><ul style={{"marginLeft":"1rem"}}></ul></details><div><MimeTabs className={"openapi-tabs__mime"} schemaType={"response"}><TabItem label={"application/json"} value={"application/json"}><SchemaTabs className={"openapi-tabs__schema"}><TabItem label={"Schema"} value={"Schema"}><details style={{}} className={"openapi-markdown__details response"} data-collapsed={false} open={true}><summary style={{}} className={"openapi-markdown__details-summary-response"}><strong>Schema</strong></summary><div style={{"textAlign":"left","marginLeft":"1rem"}}></div><ul style={{"marginLeft":"1rem"}}><SchemaItem collapsible={false} name={"errorCode"} required={true} schemaName={"integer"} qualifierMessage={undefined} schema={{"type":"integer","example":400}}></SchemaItem><SchemaItem collapsible={false} name={"errorDescription"} required={true} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","example":"Bad input parameter"}}></SchemaItem></ul></details></TabItem><TabItem label={"Example (from schema)"} value={"Example (from schema)"}><ResponseSamples responseExample={"{\n  \"errorCode\": 400,\n  \"errorDescription\": \"Bad input parameter\"\n}"} language={"json"}></ResponseSamples></TabItem></SchemaTabs></TabItem></MimeTabs></div></TabItem><TabItem label={"500"} value={"500"}><div>

Internal server error

</div><details style={{"textAlign":"left","marginBottom":"1rem"}} className={"openapi-markdown__details"} data-collaposed={true} open={false}><summary style={{}}><strong>Response Headers</strong></summary><ul style={{"marginLeft":"1rem"}}></ul></details><div><MimeTabs className={"openapi-tabs__mime"} schemaType={"response"}><TabItem label={"application/json"} value={"application/json"}><SchemaTabs className={"openapi-tabs__schema"}><TabItem label={"Schema"} value={"Schema"}><details style={{}} className={"openapi-markdown__details response"} data-collapsed={false} open={true}><summary style={{}} className={"openapi-markdown__details-summary-response"}><strong>Schema</strong></summary><div style={{"textAlign":"left","marginLeft":"1rem"}}></div><ul style={{"marginLeft":"1rem"}}><SchemaItem collapsible={false} name={"errorCode"} required={true} schemaName={"integer"} qualifierMessage={undefined} schema={{"type":"integer","example":400}}></SchemaItem><SchemaItem collapsible={false} name={"errorDescription"} required={true} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","example":"Bad input parameter"}}></SchemaItem></ul></details></TabItem><TabItem label={"Example (from schema)"} value={"Example (from schema)"}><ResponseSamples responseExample={"{\n  \"errorCode\": 400,\n  \"errorDescription\": \"Bad input parameter\"\n}"} language={"json"}></ResponseSamples></TabItem></SchemaTabs></TabItem></MimeTabs></div></TabItem></ApiTabs></div></div>
      