> For the complete documentation index, see [llms.txt](https://docs.meeco.me/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.meeco.me/openapi-docs/svx-api/helpers.md).

# Helpers

## Obtain a signed upload URL

> &#x20; Create a signed upload URL for one of the supported file storages. This endpoint is the first step in creating a file.\
> \
> &#x20; SVX Utilities generates a random key under which a file will be registered, and creates a record in the database where\
> &#x20; the key is stored along with the filename and the content type.\
> &#x20; A client is then expected to use a signed URL present in response field \`upload\_url\` to upload a file to a cloud file storage.\
> &#x20; This URL is only valid for a short period of time specified in response field \`upload\_url\_expires\_in\_seconds\`.\
> \
> &#x20; Uploading is done via HTTP method \`PUT\`. The response of this endpoint contains a list of headers which much be included in\
> &#x20; the \`PUT\` request.\
> \
> &#x20; The following is an example curl command to upload a file:\
> \
> &#x20; \`\`\`\
> &#x20; curl --location --request PUT \\\
> &#x20; '<https://meecodevstorage0.blob.core.windows.net/dev/66c35456-eb64-42fb-a31a-806530786fe2?se=2023-01-23T08%3A49%3A29Z\\&sig=mzuonk01F8L%2F0q7avsMvvenk2NwLFVXYsyWJeu5Jdgc%3D\\&sp=rw\\&sr=b\\&sv=2018-11-09>' \\\
> &#x20; \--header 'x-ms-blob-type: BlockBlob' \\\
> &#x20; \--data-binary '@/home/john/file.jpg'\
> &#x20; \`\`\`\
> \
> &#x20; After the file is uploaded to Azure Blob Storage, the client is supposed to confirm this upload calling \`PUT /blobs/{key}\`.\
> \
> &#x20; The response to \`POST /blobs\` also contains a URL to retrieve the file, but that functionality is only available after the upload has been confirmed, otherwise it will result in \`404 NotFound\`.\
> \
> &#x20; All expired and not confirmed records created with this endpoint will be removed after a while.<br>

````json
{"openapi":"3.0.0","info":{"title":"SVX API","version":"4.0.1"},"servers":[{"url":"https://api-sandbox.svx.exchange"}],"security":[{"SVX-JWT":[]}],"components":{"securitySchemes":{"SVX-JWT":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}},"schemas":{"UtilitiesBlobUploadUrlRequest":{"properties":{"content_type":{"description":"content type of the file to be uploaded","type":"string"},"filename":{"description":"name of the file to be uploaded","type":"string"}},"required":["filename"],"type":"object"},"UtilitiesBlobInfoResponse":{"properties":{"blob":{"$ref":"#/components/schemas/UtilitiesBlobInfo"}},"required":["blob"],"type":"object"},"UtilitiesBlobInfo":{"properties":{"content_type":{"description":"file content type","type":"string"},"filename":{"description":"file name","type":"string"},"key":{"description":"the key under which the file will be stored in the cloud","type":"string"},"read_url":{"description":"the URL to which a client can upload a file. The upload is done via `PUT` and there should be header `x-ms-blob-type: BlockBlob`","format":"uri","type":"string"},"storage_backend_name":{"description":"name of the cloud storage configuration","type":"string"},"storage_backend_type":{"description":"which cloud provider the file is histed at","type":"string"},"upload_headers":{"description":"HTTP headers which must be added to the HTTP upload call","type":"object"},"upload_url":{"description":"the URL to which a client can upload a file. The upload is done via `PUT` and there should be header `x-ms-blob-type: BlockBlob`","format":"uri","type":"string"},"upload_url_expires_in_seconds":{"description":"seconds during which the upload URL is valid","type":"integer"},"uploaded":{"description":"","type":"boolean"}},"required":["key","filename","content_type","uploaded","storage_backend_name","storage_backend_type"],"type":"object"},"UtilitiesError":{"properties":{"args":{"description":"Request parameters","type":"object"},"error":{"description":"Error code","type":"string"},"extra_info":{"description":"Extra info about the error","type":"object"},"file":{"description":"Source file where the error originated in","type":"string"},"http_code":{"description":"HTTP code","type":"integer"},"line":{"description":"Line number in the file where the error originated in","type":"integer"},"message":{"description":"Error code","nullable":true,"type":"string"}},"required":["error","extra_info","http_code","message","file","line","args"],"type":"object"}}},"paths":{"/blobs":{"post":{"callbacks":{},"description":"  Create a signed upload URL for one of the supported file storages. This endpoint is the first step in creating a file.\n\n  SVX Utilities generates a random key under which a file will be registered, and creates a record in the database where\n  the key is stored along with the filename and the content type.\n  A client is then expected to use a signed URL present in response field `upload_url` to upload a file to a cloud file storage.\n  This URL is only valid for a short period of time specified in response field `upload_url_expires_in_seconds`.\n\n  Uploading is done via HTTP method `PUT`. The response of this endpoint contains a list of headers which much be included in\n  the `PUT` request.\n\n  The following is an example curl command to upload a file:\n\n  ```\n  curl --location --request PUT \\\n  'https://meecodevstorage0.blob.core.windows.net/dev/66c35456-eb64-42fb-a31a-806530786fe2?se=2023-01-23T08%3A49%3A29Z&sig=mzuonk01F8L%2F0q7avsMvvenk2NwLFVXYsyWJeu5Jdgc%3D&sp=rw&sr=b&sv=2018-11-09' \\\n  --header 'x-ms-blob-type: BlockBlob' \\\n  --data-binary '@/home/john/file.jpg'\n  ```\n\n  After the file is uploaded to Azure Blob Storage, the client is supposed to confirm this upload calling `PUT /blobs/{key}`.\n\n  The response to `POST /blobs` also contains a URL to retrieve the file, but that functionality is only available after the upload has been confirmed, otherwise it will result in `404 NotFound`.\n\n  All expired and not confirmed records created with this endpoint will be removed after a while.\n","parameters":[{"description":"Name of the file storage. This parameter so optional, if no name is specified, the default file storage is used","in":"query","name":"storage_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UtilitiesBlobUploadUrlRequest"}}},"description":"File name and content type","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UtilitiesBlobInfoResponse"}}},"description":"Success"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UtilitiesError"}}},"description":"Unauthorized"}},"summary":"Obtain a signed upload URL","tags":["Helpers"]}}}}
````

## Redirect to a file in a cloud file storage

> &#x20; Redirect to a file in a cloud file storage.\
> \
> &#x20; This endpoint is public and it only requires the file key in the URL.\
> \
> &#x20; The \`Content Disposition\` header in the response is hardcoded to be \`inline\` for now, but it can be made a parameter to this endpoint in future if needed.\
> &#x20; The filename and the content type included in \`Content Disposition\` are taken from the database record created in \`POST /blobs\`."<br>

```json
{"openapi":"3.0.0","info":{"title":"SVX API","version":"4.0.1"},"servers":[{"url":"https://api-sandbox.svx.exchange"}],"security":[],"paths":{"/blobs/{id}":{"get":{"callbacks":{},"description":"  Redirect to a file in a cloud file storage.\n\n  This endpoint is public and it only requires the file key in the URL.\n\n  The `Content Disposition` header in the response is hardcoded to be `inline` for now, but it can be made a parameter to this endpoint in future if needed.\n  The filename and the content type included in `Content Disposition` are taken from the database record created in `POST /blobs`.\"\n","parameters":[{"description":"Blob key","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"302":{"content":{"application/json":{}},"description":"Found"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UtilitiesError"}}},"description":"NotFound"}},"summary":"Redirect to a file in a cloud file storage","tags":["Helpers"]}}},"components":{"schemas":{"UtilitiesError":{"properties":{"args":{"description":"Request parameters","type":"object"},"error":{"description":"Error code","type":"string"},"extra_info":{"description":"Extra info about the error","type":"object"},"file":{"description":"Source file where the error originated in","type":"string"},"http_code":{"description":"HTTP code","type":"integer"},"line":{"description":"Line number in the file where the error originated in","type":"integer"},"message":{"description":"Error code","nullable":true,"type":"string"}},"required":["error","extra_info","http_code","message","file","line","args"],"type":"object"}}}}
```

## Confirm a blob upload

> &#x20; Confirm a blob upload.\
> \
> &#x20; After a client retrieves an uploads URL via \`POST /blobs\` and uploads a file to that URL, a client is expected to inform SVX Utilities that the upload is successful.\
> &#x20; The file is not accessible unless the upload is confirmed.\
> \
> &#x20; This call may only be performed by the same user who retrieved the upload URL.\
> \
> &#x20; The response to the endpoint contains one more upload URL. A client can use it to upload a newer version of the file under the same key.\
> &#x20; No confirmation is required in this case.\
> \
> &#x20; See documentation for \`POST /blobs\` for more information.<br>

```json
{"openapi":"3.0.0","info":{"title":"SVX API","version":"4.0.1"},"servers":[{"url":"https://api-sandbox.svx.exchange"}],"security":[{"SVX-JWT":[]}],"components":{"securitySchemes":{"SVX-JWT":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}},"schemas":{"UtilitiesBlobInfoResponse":{"properties":{"blob":{"$ref":"#/components/schemas/UtilitiesBlobInfo"}},"required":["blob"],"type":"object"},"UtilitiesBlobInfo":{"properties":{"content_type":{"description":"file content type","type":"string"},"filename":{"description":"file name","type":"string"},"key":{"description":"the key under which the file will be stored in the cloud","type":"string"},"read_url":{"description":"the URL to which a client can upload a file. The upload is done via `PUT` and there should be header `x-ms-blob-type: BlockBlob`","format":"uri","type":"string"},"storage_backend_name":{"description":"name of the cloud storage configuration","type":"string"},"storage_backend_type":{"description":"which cloud provider the file is histed at","type":"string"},"upload_headers":{"description":"HTTP headers which must be added to the HTTP upload call","type":"object"},"upload_url":{"description":"the URL to which a client can upload a file. The upload is done via `PUT` and there should be header `x-ms-blob-type: BlockBlob`","format":"uri","type":"string"},"upload_url_expires_in_seconds":{"description":"seconds during which the upload URL is valid","type":"integer"},"uploaded":{"description":"","type":"boolean"}},"required":["key","filename","content_type","uploaded","storage_backend_name","storage_backend_type"],"type":"object"},"UtilitiesError":{"properties":{"args":{"description":"Request parameters","type":"object"},"error":{"description":"Error code","type":"string"},"extra_info":{"description":"Extra info about the error","type":"object"},"file":{"description":"Source file where the error originated in","type":"string"},"http_code":{"description":"HTTP code","type":"integer"},"line":{"description":"Line number in the file where the error originated in","type":"integer"},"message":{"description":"Error code","nullable":true,"type":"string"}},"required":["error","extra_info","http_code","message","file","line","args"],"type":"object"}}},"paths":{"/blobs/{id}":{"put":{"callbacks":{},"description":"  Confirm a blob upload.\n\n  After a client retrieves an uploads URL via `POST /blobs` and uploads a file to that URL, a client is expected to inform SVX Utilities that the upload is successful.\n  The file is not accessible unless the upload is confirmed.\n\n  This call may only be performed by the same user who retrieved the upload URL.\n\n  The response to the endpoint contains one more upload URL. A client can use it to upload a newer version of the file under the same key.\n  No confirmation is required in this case.\n\n  See documentation for `POST /blobs` for more information.\n","parameters":[{"description":"Blob key","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UtilitiesBlobInfoResponse"}}},"description":"Success"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UtilitiesError"}}},"description":"Unauthorized"}},"summary":"Confirm a blob upload","tags":["Helpers"]}}}}
```

## View blob info

> &#x20; View information about the file.\
> \
> &#x20; This call may only be performed by the same user who retrieved the upload URL and uploaded the file.\
> \
> &#x20; Along with a URL to read the file the response to the endpoint contains one more upload URL.\
> &#x20; A client can use it to upload a newer version of the file under the same key. No confirmation is required in this case.\
> \
> &#x20; See documentation for \`POST /blobs\` for more information.<br>

```json
{"openapi":"3.0.0","info":{"title":"SVX API","version":"4.0.1"},"servers":[{"url":"https://api-sandbox.svx.exchange"}],"security":[{"SVX-JWT":[]}],"components":{"securitySchemes":{"SVX-JWT":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}},"schemas":{"UtilitiesBlobInfoResponse":{"properties":{"blob":{"$ref":"#/components/schemas/UtilitiesBlobInfo"}},"required":["blob"],"type":"object"},"UtilitiesBlobInfo":{"properties":{"content_type":{"description":"file content type","type":"string"},"filename":{"description":"file name","type":"string"},"key":{"description":"the key under which the file will be stored in the cloud","type":"string"},"read_url":{"description":"the URL to which a client can upload a file. The upload is done via `PUT` and there should be header `x-ms-blob-type: BlockBlob`","format":"uri","type":"string"},"storage_backend_name":{"description":"name of the cloud storage configuration","type":"string"},"storage_backend_type":{"description":"which cloud provider the file is histed at","type":"string"},"upload_headers":{"description":"HTTP headers which must be added to the HTTP upload call","type":"object"},"upload_url":{"description":"the URL to which a client can upload a file. The upload is done via `PUT` and there should be header `x-ms-blob-type: BlockBlob`","format":"uri","type":"string"},"upload_url_expires_in_seconds":{"description":"seconds during which the upload URL is valid","type":"integer"},"uploaded":{"description":"","type":"boolean"}},"required":["key","filename","content_type","uploaded","storage_backend_name","storage_backend_type"],"type":"object"},"UtilitiesError":{"properties":{"args":{"description":"Request parameters","type":"object"},"error":{"description":"Error code","type":"string"},"extra_info":{"description":"Extra info about the error","type":"object"},"file":{"description":"Source file where the error originated in","type":"string"},"http_code":{"description":"HTTP code","type":"integer"},"line":{"description":"Line number in the file where the error originated in","type":"integer"},"message":{"description":"Error code","nullable":true,"type":"string"}},"required":["error","extra_info","http_code","message","file","line","args"],"type":"object"}}},"paths":{"/blobs/{id}/info":{"get":{"callbacks":{},"description":"  View information about the file.\n\n  This call may only be performed by the same user who retrieved the upload URL and uploaded the file.\n\n  Along with a URL to read the file the response to the endpoint contains one more upload URL.\n  A client can use it to upload a newer version of the file under the same key. No confirmation is required in this case.\n\n  See documentation for `POST /blobs` for more information.\n","parameters":[{"description":"Blob key","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UtilitiesBlobInfoResponse"}}},"description":"Success"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UtilitiesError"}}},"description":"Unauthorized"}},"summary":"View blob info","tags":["Helpers"]}}}}
```

## View blob info

> &#x20; View public information about the file.\
> \
> &#x20; See documentation for \`POST /blobs\` for more information.<br>

```json
{"openapi":"3.0.0","info":{"title":"SVX API","version":"4.0.1"},"servers":[{"url":"https://api-sandbox.svx.exchange"}],"security":[],"paths":{"/blobs/{id}/public_info":{"get":{"callbacks":{},"description":"  View public information about the file.\n\n  See documentation for `POST /blobs` for more information.\n","parameters":[{"description":"Blob key","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UtilitiesBlobPublicInfoResponse"}}},"description":"Success"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UtilitiesError"}}},"description":"Unauthorized"}},"summary":"View blob info","tags":["Helpers"]}}},"components":{"schemas":{"UtilitiesBlobPublicInfoResponse":{"properties":{"blob":{"$ref":"#/components/schemas/UtilitiesBlobPublicInfo"}},"required":["blob"],"type":"object"},"UtilitiesBlobPublicInfo":{"properties":{"content_type":{"description":"file content type","type":"string"},"filename":{"description":"file name","type":"string"},"key":{"description":"the key under which the file will be stored in the cloud","type":"string"},"read_url":{"description":"the URL to which a client can upload a file. The upload is done via `PUT` and there should be header `x-ms-blob-type: BlockBlob`","format":"uri","type":"string"},"storage_backend_name":{"description":"name of the cloud storage configuration","type":"string"},"storage_backend_type":{"description":"which cloud provider the file is stored in","type":"string"},"uploaded":{"description":"","type":"boolean"}},"required":["key","filename","content_type","uploaded","storage_backend_name","storage_backend_type"],"type":"object"},"UtilitiesError":{"properties":{"args":{"description":"Request parameters","type":"object"},"error":{"description":"Error code","type":"string"},"extra_info":{"description":"Extra info about the error","type":"object"},"file":{"description":"Source file where the error originated in","type":"string"},"http_code":{"description":"HTTP code","type":"integer"},"line":{"description":"Line number in the file where the error originated in","type":"integer"},"message":{"description":"Error code","nullable":true,"type":"string"}},"required":["error","extra_info","http_code","message","file","line","args"],"type":"object"}}}}
```

## List SVX Wallet deployments for an organisation

> Returns a paginated list of SVX Wallet deployments for a specific organisation

```json
{"openapi":"3.0.0","info":{"title":"SVX API","version":"4.0.1"},"servers":[{"url":"https://api-sandbox.svx.exchange"}],"security":[{"SVX-JWT":[]}],"components":{"securitySchemes":{"SVX-JWT":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}},"schemas":{"UtilitiesPaginatedDeployments":{"properties":{"deployments":{"items":{"$ref":"#/components/schemas/UtilitiesDeployment"},"type":"array"},"meta":{"$ref":"#/components/schemas/UtilitiesPaginationMeta"}},"required":["meta","deployments"],"type":"object"},"UtilitiesDeployment":{"properties":{"all_workflows_successful":{"description":"Whether all workflows completed successfully","nullable":true,"type":"boolean"},"current_user_id":{"description":"Current user ID","format":"uuid","nullable":true,"type":"string"},"db_name":{"description":"PostgreSQL database name for the SVX Wallet instance","nullable":true,"type":"string"},"description":{"description":"Optional human-readable description for this SVX Wallet instance","nullable":true,"type":"string"},"error":{"description":"Error message","nullable":true,"type":"string"},"external_idp_client_id":{"description":"External IdP client ID","nullable":true,"type":"string"},"git_workflow":{"description":"Git workflow status","nullable":true,"type":"string"},"git_workflow_duration":{"description":"Git workflow duration in milliseconds","nullable":true,"type":"integer"},"inserted_at":{"description":"Creation timestamp","format":"date-time","type":"string"},"instance_config_for_workflow_retries":{"description":"Config data for workflow retries","nullable":true,"type":"object"},"instance_id":{"description":"SVX Wallet instance ID","type":"string"},"internal_domain":{"description":"Internal domain for the deployment","nullable":true,"type":"string"},"online_at":{"description":"Timestamp when deployment went online","format":"date-time","nullable":true,"type":"string"},"online_check_counter":{"default":0,"description":"Counter for online status checks","type":"integer"},"online_status_checked_at":{"description":"Timestamp when online status was last checked","format":"date-time","nullable":true,"type":"string"},"org_id":{"description":"Organisation ID","nullable":true,"type":"string"},"org_name":{"description":"Organisation name","nullable":true,"type":"string"},"public_domain":{"description":"Public domain URL for the deployment","nullable":true,"type":"string"},"redis_db":{"description":"Redis database number","type":"integer"},"status":{"description":"Current deployment status","type":"string"},"tenant_id":{"description":"Tenant ID","nullable":true,"type":"string"},"tenant_name":{"description":"Tenant name","nullable":true,"type":"string"},"versions":{"description":"Version information for this deployment","nullable":true,"properties":{"deployed_version":{"description":"Full semver of the currently deployed version (e.g. \"0.1.0\")","nullable":true,"type":"string"},"version_history":{"description":"History of deployed versions and upgrades","items":{"type":"object"},"nullable":true,"type":"array"},"version_series":{"description":"Version series this deployment is locked to (e.g. \"0.1\")","nullable":true,"type":"string"}},"type":"object"},"workflow_reports":{"description":"Reports from workflow executions","nullable":true,"type":"object"}},"required":["instance_id","redis_db","status","online_check_counter","inserted_at"],"type":"object"},"UtilitiesPaginationMeta":{"properties":{"order":{"description":"Order direcction: desc or asc","type":"string"},"order_by":{"description":"Field by which ordering is done","type":"string"},"order_from_params":{"description":"Defines whether the ordering direction is taken from request parameters or is the default value","type":"boolean"},"page":{"description":"Page number","type":"integer"},"page_count":{"description":"Total number of pages","type":"integer"},"per_page":{"description":"Records per page","type":"integer"},"per_page_from_params":{"description":"Defines whether the the number of recors is taken from request parameters or is the default value","type":"boolean"},"records_count":{"description":"Total number of metrics","type":"integer"}},"required":["order","order_by","order_from_params","page","page_count","per_page","per_page_from_params","records_count"],"type":"object"}}},"paths":{"/deployments/wallets/orgs/{org_id}":{"get":{"callbacks":{},"description":"Returns a paginated list of SVX Wallet deployments for a specific organisation","parameters":[{"description":"Organisation ID","in":"path","name":"org_id","required":true,"schema":{"type":"string"}},{"description":"Number of deployments per page","in":"query","name":"per_page","required":false,"schema":{"type":"integer"}},{"description":"Page number","in":"query","name":"page","required":false,"schema":{"type":"integer"}},{"description":"Order direction: asc or desc","in":"query","name":"order","required":false,"schema":{"enum":["asc","desc"],"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UtilitiesPaginatedDeployments"}}},"description":"Deployments"}},"summary":"List SVX Wallet deployments for an organisation","tags":["Helpers"]}}}}
```

## Create an SVX Wallet deployment

> Create an SVX Wallet deployment

```json
{"openapi":"3.0.0","info":{"title":"SVX API","version":"4.0.1"},"servers":[{"url":"https://api-sandbox.svx.exchange"}],"security":[{"SVX-JWT":[]}],"components":{"securitySchemes":{"SVX-JWT":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}},"schemas":{"UtilitiesWalletDeploymentCreated":{"properties":{"instance_id":{"description":"The SVX Wallet instance ID","format":"uuid","type":"string"}},"required":["instance_id"],"type":"object"},"UtilitiesError":{"properties":{"args":{"description":"Request parameters","type":"object"},"error":{"description":"Error code","type":"string"},"extra_info":{"description":"Extra info about the error","type":"object"},"file":{"description":"Source file where the error originated in","type":"string"},"http_code":{"description":"HTTP code","type":"integer"},"line":{"description":"Line number in the file where the error originated in","type":"integer"},"message":{"description":"Error code","nullable":true,"type":"string"}},"required":["error","extra_info","http_code","message","file","line","args"],"type":"object"}}},"paths":{"/deployments/wallets/orgs/{org_id}":{"post":{"callbacks":{},"description":"Create an SVX Wallet deployment","parameters":[{"description":"Organisation ID","in":"path","name":"org_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"description":{"description":"Optional human-readable description for this SVX Wallet instance.","type":"string"},"version_series":{"description":"Version series to deploy (e.g. \"0.1\"). Defaults to the configured default_version_series if omitted.","type":"string"}},"type":"object"}}},"description":"Deployment request","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UtilitiesWalletDeploymentCreated"}}},"description":"Created"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UtilitiesError"}}},"description":"Bad Request"}},"summary":"Create an SVX Wallet deployment","tags":["Helpers"]}}}}
```

## Get an SVX Wallet deployment by instance ID

> Returns a specific SVX Wallet deployment by instance ID

```json
{"openapi":"3.0.0","info":{"title":"SVX API","version":"4.0.1"},"servers":[{"url":"https://api-sandbox.svx.exchange"}],"security":[{"SVX-JWT":[]}],"components":{"securitySchemes":{"SVX-JWT":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}},"schemas":{"UtilitiesDeploymentWithoutLog":{"properties":{"all_workflows_successful":{"description":"Whether all workflows completed successfully","nullable":true,"type":"boolean"},"current_user_id":{"description":"Current user ID","format":"uuid","nullable":true,"type":"string"},"db_name":{"description":"PostgreSQL database name for the SVX Wallet instance","nullable":true,"type":"string"},"description":{"description":"Optional human-readable description for this SVX Wallet instance","nullable":true,"type":"string"},"error":{"description":"Error message","nullable":true,"type":"string"},"external_idp_client_id":{"description":"External IdP client ID","nullable":true,"type":"string"},"git_workflow":{"description":"Git workflow status","nullable":true,"type":"string"},"git_workflow_duration":{"description":"Git workflow duration in milliseconds","nullable":true,"type":"integer"},"git_workflow_log":{"description":"Git workflow event log","items":{"$ref":"#/components/schemas/UtilitiesWorkflowEvent"},"type":"array"},"inserted_at":{"description":"Creation timestamp","format":"date-time","type":"string"},"instance_config_for_workflow_retries":{"description":"Config data for workflow retries","nullable":true,"type":"object"},"instance_id":{"description":"SVX Wallet instance ID","type":"string"},"internal_domain":{"description":"Internal domain for the deployment","nullable":true,"type":"string"},"online_at":{"description":"Timestamp when deployment went online","format":"date-time","nullable":true,"type":"string"},"online_check_counter":{"default":0,"description":"Counter for online status checks","type":"integer"},"online_status_checked_at":{"description":"Timestamp when online status was last checked","format":"date-time","nullable":true,"type":"string"},"org_id":{"description":"Organisation ID","nullable":true,"type":"string"},"org_name":{"description":"Organisation name","nullable":true,"type":"string"},"public_domain":{"description":"Public domain URL for the deployment","nullable":true,"type":"string"},"redis_db":{"description":"Redis database number","type":"integer"},"status":{"description":"Current deployment status","type":"string"},"tenant_id":{"description":"Tenant ID","nullable":true,"type":"string"},"tenant_name":{"description":"Tenant name","nullable":true,"type":"string"},"versions":{"description":"Version information for this deployment","nullable":true,"properties":{"deployed_version":{"description":"Full semver of the currently deployed version (e.g. \"0.1.0\")","nullable":true,"type":"string"},"version_history":{"description":"History of deployed versions and upgrades","items":{"type":"object"},"nullable":true,"type":"array"},"version_series":{"description":"Version series this deployment is locked to (e.g. \"0.1\")","nullable":true,"type":"string"}},"type":"object"},"workflow_reports":{"description":"Reports from workflow executions","nullable":true,"type":"object"}},"required":["instance_id","redis_db","status","git_workflow_log","online_check_counter","inserted_at"],"type":"object"},"UtilitiesWorkflowEvent":{"properties":{"status":{"description":"Event status","type":"string"},"timestamp":{"description":"Event timestamp","format":"date-time","type":"string"}},"required":["status","timestamp"],"type":"object"},"UtilitiesError":{"properties":{"args":{"description":"Request parameters","type":"object"},"error":{"description":"Error code","type":"string"},"extra_info":{"description":"Extra info about the error","type":"object"},"file":{"description":"Source file where the error originated in","type":"string"},"http_code":{"description":"HTTP code","type":"integer"},"line":{"description":"Line number in the file where the error originated in","type":"integer"},"message":{"description":"Error code","nullable":true,"type":"string"}},"required":["error","extra_info","http_code","message","file","line","args"],"type":"object"}}},"paths":{"/deployments/wallets/{id}":{"get":{"callbacks":{},"description":"Returns a specific SVX Wallet deployment by instance ID","parameters":[{"description":"Instance ID","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UtilitiesDeploymentWithoutLog"}}},"description":"Deployment"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UtilitiesError"}}},"description":"Not Found"}},"summary":"Get an SVX Wallet deployment by instance ID","tags":["Helpers"]}}}}
```

## Delete an SVX Wallet deployment by instance ID

> Deletes a specific SVX Wallet deployment by instance ID

```json
{"openapi":"3.0.0","info":{"title":"SVX API","version":"4.0.1"},"servers":[{"url":"https://api-sandbox.svx.exchange"}],"security":[{"SVX-JWT":[]}],"components":{"securitySchemes":{"SVX-JWT":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}},"schemas":{"UtilitiesError":{"properties":{"args":{"description":"Request parameters","type":"object"},"error":{"description":"Error code","type":"string"},"extra_info":{"description":"Extra info about the error","type":"object"},"file":{"description":"Source file where the error originated in","type":"string"},"http_code":{"description":"HTTP code","type":"integer"},"line":{"description":"Line number in the file where the error originated in","type":"integer"},"message":{"description":"Error code","nullable":true,"type":"string"}},"required":["error","extra_info","http_code","message","file","line","args"],"type":"object"}}},"paths":{"/deployments/wallets/{id}":{"delete":{"callbacks":{},"description":"Deletes a specific SVX Wallet deployment by instance ID","parameters":[{"description":"Instance ID","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"204":{"content":{"application/json":{}},"description":"No Content"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UtilitiesError"}}},"description":"Not Found"}},"summary":"Delete an SVX Wallet deployment by instance ID","tags":["Helpers"]}}}}
```

## Redirect to the logo of an organisation

> Redirect to the logo of an organisation.\
> \
> &#x20; This endpoint is public and it only requires the organisation ID in the URL.<br>

```json
{"openapi":"3.0.0","info":{"title":"SVX API","version":"4.0.1"},"servers":[{"url":"https://api-sandbox.svx.exchange"}],"security":[],"paths":{"/orgs/{org_id}/logo":{"get":{"callbacks":{},"description":"Redirect to the logo of an organisation.\n\n  This endpoint is public and it only requires the organisation ID in the URL.\n","parameters":[{"description":"Organisation ID","in":"path","name":"org_id","required":true,"schema":{"format":"uuid","type":"string"}}],"responses":{"302":{"content":{"application/json":{}},"description":"Found"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ATOMError"}}},"description":"NotFound"}},"summary":"Redirect to the logo of an organisation","tags":["Helpers"]}}},"components":{"schemas":{"ATOMError":{"properties":{"args":{"description":"Request parameters","type":"object"},"error":{"description":"Error code","type":"string"},"extra_info":{"description":"Extra info about the error","type":"object"},"file":{"description":"Source file where the error originated in","type":"string"},"http_code":{"description":"HTTP code","type":"integer"},"line":{"description":"Line number in the file where the error originated in","type":"integer"},"message":{"description":"Error code","nullable":true,"type":"string"}},"required":["error","extra_info","args","http_code","message","file","line"],"type":"object"}}}}
```

## Redirect to the logo of a tenant

> Redirect to the logo of a tenant.\
> \
> &#x20; This endpoint is public and it only requires the tenant ID in the URL.<br>

```json
{"openapi":"3.0.0","info":{"title":"SVX API","version":"4.0.1"},"servers":[{"url":"https://api-sandbox.svx.exchange"}],"security":[],"paths":{"/tenants/{tenant_id}/logo":{"get":{"callbacks":{},"description":"Redirect to the logo of a tenant.\n\n  This endpoint is public and it only requires the tenant ID in the URL.\n","parameters":[{"description":"Tenant ID","in":"path","name":"tenant_id","required":true,"schema":{"format":"uuid","type":"string"}}],"responses":{"302":{"content":{"application/json":{}},"description":"Found"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ATOMError"}}},"description":"NotFound"}},"summary":"Redirect to the logo of a tenant","tags":["Helpers"]}}},"components":{"schemas":{"ATOMError":{"properties":{"args":{"description":"Request parameters","type":"object"},"error":{"description":"Error code","type":"string"},"extra_info":{"description":"Extra info about the error","type":"object"},"file":{"description":"Source file where the error originated in","type":"string"},"http_code":{"description":"HTTP code","type":"integer"},"line":{"description":"Line number in the file where the error originated in","type":"integer"},"message":{"description":"Error code","nullable":true,"type":"string"}},"required":["error","extra_info","args","http_code","message","file","line"],"type":"object"}}}}
```
