Skip to main content
GET
/
api
/
export
/
providers
Export Providers
curl --request GET \
  --url https://api.example.com/api/export/providers
{
  "root": [
    {
      "name": "<string>",
      "code": "<string>",
      "baseUrl": "<string>",
      "authenticationType": {},
      "apiKeyLocation": {},
      "apiKeyName": "<string>",
      "apiKeyValue": "<string>",
      "isDynamicAuth": true,
      "dynamicAuthUrl": "<string>",
      "dynamicAuthMethod": {},
      "dynamicAuthPayloadType": {},
      "dynamicAuthPayloadLocation": {},
      "dynamicAuthPayload": "<string>",
      "dynamicAuthTokenExtractionPath": "<string>",
      "dynamicAuthInvalidationKeywords": "<string>",
      "customHeaders": {},
      "tools": [
        {
          "name": "<string>",
          "code": "<string>",
          "description": "<string>",
          "endpointPath": "<string>",
          "httpMethod": {},
          "parameters": [
            {
              "name": "<string>",
              "type": "<string>",
              "description": "<string>",
              "required": true,
              "defaultValue": "<string>"
            }
          ]
        }
      ]
    }
  ]
}

Endpoint

GET /api/export/providers
Exports provider configurations including their associated tools and parameters in a portable JSON format suitable for backup, sharing, or migration.

Query Parameters

ids
array
Comma-separated list of provider IDs to export. If omitted or empty, exports all providers marked as exportable.Example: ?ids=1,2,3

Response

Returns an array of provider configurations with nested tools and parameters.
root
array
Array of exported provider objects

API Key Masking

For security, the apiKeyValue field is always masked in export responses:
  • If an API key is configured: returns <YOUR_API_KEY>
  • If no API key is configured: returns null
  • Real API keys are never exposed through this endpoint
Do not attempt to import the masked <YOUR_API_KEY> value. The import endpoint will skip this placeholder and preserve existing API keys.

Response Headers

The endpoint includes a content disposition header suggesting a filename:
Content-Disposition: attachment; filename=handsai_tools_export.json

Example Request

Export All Providers

curl http://localhost:8080/api/export/providers

Export Specific Providers

curl "http://localhost:8080/api/export/providers?ids=1,3,5"

Example Response

[
  {
    "name": "Resend API",
    "code": "resend",
    "baseUrl": "https://api.resend.com",
    "authenticationType": "BEARER_TOKEN",
    "apiKeyLocation": "HEADER",
    "apiKeyName": "Authorization",
    "apiKeyValue": "<YOUR_API_KEY>",
    "isDynamicAuth": false,
    "dynamicAuthUrl": null,
    "dynamicAuthMethod": null,
    "dynamicAuthPayloadType": null,
    "dynamicAuthPayloadLocation": null,
    "dynamicAuthPayload": null,
    "dynamicAuthTokenExtractionPath": null,
    "dynamicAuthInvalidationKeywords": null,
    "customHeaders": {
      "Content-Type": "application/json",
      "User-Agent": "HandsAI/1.0"
    },
    "tools": [
      {
        "name": "Enviar Email (Resend)",
        "code": "resend-send-email",
        "description": "Envía un correo electrónico usando la API de Resend.",
        "endpointPath": "/emails",
        "httpMethod": "POST",
        "parameters": [
          {
            "name": "from",
            "type": "STRING",
            "description": "Dirección de envío (ej. Acme <[email protected]>). Debe ser un dominio verificado.",
            "required": true,
            "defaultValue": ""
          },
          {
            "name": "to",
            "type": "STRING",
            "description": "Dirección del destinatario.",
            "required": true,
            "defaultValue": ""
          },
          {
            "name": "subject",
            "type": "STRING",
            "description": "Asunto del correo electrónico.",
            "required": true,
            "defaultValue": ""
          },
          {
            "name": "html",
            "type": "STRING",
            "description": "Cuerpo del correo en formato HTML.",
            "required": true,
            "defaultValue": ""
          }
        ]
      }
    ]
  },
  {
    "name": "GitHub REST API",
    "code": "github",
    "baseUrl": "https://api.github.com",
    "authenticationType": "BEARER_TOKEN",
    "apiKeyLocation": "HEADER",
    "apiKeyName": "Authorization",
    "apiKeyValue": "<YOUR_API_KEY>",
    "isDynamicAuth": false,
    "dynamicAuthUrl": null,
    "dynamicAuthMethod": null,
    "dynamicAuthPayloadType": null,
    "dynamicAuthPayloadLocation": null,
    "dynamicAuthPayload": null,
    "dynamicAuthTokenExtractionPath": null,
    "dynamicAuthInvalidationKeywords": null,
    "customHeaders": {
      "Accept": "application/vnd.github+json",
      "X-GitHub-Api-Version": "2022-11-28",
      "User-Agent": "HandsAI/1.0"
    },
    "tools": [
      {
        "name": "Crear Issue Github",
        "code": "github-create-issue",
        "description": "Crea un 'issue' o tarea nueva en un repositorio de GitHub.",
        "endpointPath": "/repos/{owner}/{repo}/issues",
        "httpMethod": "POST",
        "parameters": [
          {
            "name": "owner",
            "type": "STRING",
            "description": "Dueño del repositorio (usuario u organización, ej. 'facebook').",
            "required": true,
            "defaultValue": ""
          },
          {
            "name": "repo",
            "type": "STRING",
            "description": "Nombre del repositorio (ej. 'react').",
            "required": true,
            "defaultValue": ""
          },
          {
            "name": "title",
            "type": "STRING",
            "description": "Título del Issue.",
            "required": true,
            "defaultValue": ""
          },
          {
            "name": "body",
            "type": "STRING",
            "description": "Cuerpo/Descripción del issue (acepta Markdown).",
            "required": false,
            "defaultValue": ""
          }
        ]
      }
    ]
  }
]

Notes

  • Only providers marked as exportable in the database will be included
  • The export includes the complete configuration hierarchy
  • Tools are exported in the order they are stored in the database
  • Parameters maintain their original ordering
  • The response is suitable for direct import via the /api/import/providers endpoint

Build docs developers (and LLMs) love