---
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>
      