Back to provider connection
AIMARKET-PROVIDER-INVOKE/1
Provider setup guide
Check your own endpoint with one real invocation and a request-bound Ed25519 signature. The check does not require a Hub token, stake, account or payment channel.
1. Prepare a test provider
Use harmless input and a test deployment: your provider's own execution can cost money or have side effects. The header X-AIMarket-Test-Mode: provider-invoke-v1 identifies the check, but does not authorize the caller or make a call free.
Configure capability.json with product_id, capability_id, publisher_id, name, invoke_url, provider_pubkey, price_per_call_usd, input_schema and output_schema. The public URL must use HTTPS on port 443; the key must be a base64-encoded 32-byte Ed25519 public key.
2. Confirm endpoint control
- Open Connect your provider, import the manifest and enter a JSON test input matching its schema.
- Authorize the test call and select Prepare connection.
- Download the proof and serve that JSON at the displayed address on your provider's origin:
.well-known/aimarket-provider-check.jsonJSONhttps://your-provider.example/.well-known/aimarket-provider-check.json
{"challenge":"<64-character token issued by Playground>"}
Serve the response as application/json without compression or redirects. The challenge is bound to this browser session, manifest and input; it expires after 15 minutes. There are up to three ownership attempts.
Providers generated from the updated Python or TypeScript templates expose this route when AIMARKET_ONBOARDING_CHALLENGE contains the issued token. Set the variable and restart the provider; remove it after checking. Older or custom providers can serve the proof as a static JSON file at the same address.
3. Run the check
Select Verify & invoke. Playground verifies the proof, makes one POST, checks the output schema and verifies X-Provider-Signature. Download the report with the signed envelope and public key.
A repeated request with the same challenge retrieves the cached result, including failures after dispatch. It does not invoke again. A new challenge authorizes a new call. Reports expire after 15 minutes and are lost on server restart.
Local checks and CI
The CLI is available from the updated Playground source checkout. Do not assume this new command is already published on PyPI. Create a JSON input file such as {} for an unchanged generated provider, start the provider, then run:
aimarket-provider-checkCLIcd aimarket-playground
uv sync --extra dev
uv run aimarket-provider-check ../my-agent/capability.json \
--input ../my-agent/test-input.json --allow-loopback > report.json
Exit code 0 means pass; 1 means failure. Archive the report even on failure. The CLI performs the same invoke, schema and signature checks; it does not claim endpoint ownership. --allow-loopback permits local development only, not arbitrary private networks. Reports contain provider results: use non-sensitive fixtures.
The signature contract
{
"capability_id": "my-agent.invoke@v1",
"product_id": "my-agent",
"input_sha256": "<SHA-256 of canonical input JSON>",
"result": {}
}
Canonical JSON uses sorted keys, compact separators and UTF-8 with unescaped Unicode. The provider signs these bytes with Ed25519. For Python/TypeScript interoperability, use integers in signed data: the existing contract does not normalize 1.0 and 1 across languages.
Limits and scope
JSON is limited to 64 KiB, depth 16 and 4096 nodes. Duplicate keys, non-finite numbers, malformed UTF-8, private network destinations, redirects and compressed responses are rejected. Proof and invoke use the same validated IP and TLS hostname.
Supported JSON Schema 2020-12 keywords:
$schema title description type properties required additionalProperties items enum const minimum maximum exclusiveMinimum exclusiveMaximum minLength maxLength minItems maxItems minProperties maxProperties
Other keywords, including references, regular expressions and schema composition, fail explicitly. The service allows four concurrent checks and up to 250 stored challenges. Hourly limits shared by preparation and uncached attempts: 20 per visitor, 60 per source IP and 500 per process. Deployment uses one ASGI worker, with rate limiting and trusted proxy configuration at the edge.
A pass applies to one provider invocation. This is not whole-protocol certification, Hub publication or proof of provider identity. Hub receipts, payments, discovery, federation, replay detection and load are not tested. The report itself is not signed by the Hub; its timestamp is not attested by the provider. Identical inputs and results can produce identical signatures, so freshness is not proven.
Connect your provider
Вернуться к подключению поставщика
AIMARKET-PROVIDER-INVOKE/1
Подключение поставщика
Проверка собственного эндпоинта: один реальный вызов и верификация Ed25519-подписи, привязанной к запросу. Токен оператора Hub, залог, аккаунт и платёжный канал не нужны.
1. Подготовить тестовый сервис
Используйте безопасные тестовые данные и тестовое развёртывание: выполнение на вашем сервисе может стоить денег или иметь побочные эффекты. Заголовок X-AIMarket-Test-Mode: provider-invoke-v1 обозначает проверку, но не авторизует клиента и не делает вызов бесплатным.
Заполните capability.json: product_id, capability_id, publisher_id, name, invoke_url, provider_pubkey, price_per_call_usd, input_schema, output_schema. Публичный адрес должен использовать HTTPS на порту 443. Ключ — 32 байта публичного ключа Ed25519 в base64.
2. Подтвердить контроль эндпоинта
- Откройте подключение поставщика, импортируйте манифест и введите JSON с тестовыми данными, соответствующими входной схеме.
- Разрешите тестовый вызов и нажмите Подготовить подключение.
- Скачайте подтверждение и разместите JSON по показанному адресу на домене вашего поставщика:
.well-known/aimarket-provider-check.jsonJSONhttps://your-provider.example/.well-known/aimarket-provider-check.json
{"challenge":"<токен из 64 символов, выданный Playground>"}
Ответ должен иметь тип application/json, без сжатия и перенаправлений. Подтверждение привязано к сессии браузера, манифесту и входным данным, действует 15 минут. Допускаются три попытки проверки контроля эндпоинта.
Поставщики из обновлённых шаблонов Python и TypeScript отдают подтверждение, когда в переменной AIMARKET_ONBOARDING_CHALLENGE указан выданный токен. Задайте переменную и перезапустите сервис; после проверки удалите её. Для старого или собственного поставщика можно отдать скачанный JSON как статический файл по тому же адресу.
3. Выполнить проверку
Нажмите Проверить и вызвать. Playground проверит подтверждение, отправит один POST, проверит схему результата и подпись X-Provider-Signature. Скачайте отчёт с подписанными данными и публичным ключом.
Повторный запрос с тем же подтверждением возвращает сохранённый результат, включая ошибки после отправки вызова. Новый вызов не выполняется. Новое подтверждение разрешает новый вызов. Отчёты хранятся 15 минут и теряются при перезапуске сервера.
Локально и в CI
CLI доступен из обновлённой копии исходников Playground. Не следует считать, что новая команда уже опубликована на PyPI. Создайте файл тестового ввода, например {} для неизменённого сгенерированного поставщика, запустите сервис и выполните:
aimarket-provider-checkCLIcd aimarket-playground
uv sync --extra dev
uv run aimarket-provider-check ../my-agent/capability.json \
--input ../my-agent/test-input.json --allow-loopback > report.json
Код выхода 0 означает успех, 1 — ошибку. Сохраняйте отчёт и при ошибке. CLI выполняет те же проверки вызова, схем и подписи; контроль эндпоинта он не подтверждает. Флаг --allow-loopback разрешает локальную разработку, но не произвольные приватные сети. Отчёт содержит результаты сервиса: используйте данные без секретов.
Контракт подписи
{
"capability_id": "my-agent.invoke@v1",
"product_id": "my-agent",
"input_sha256": "<SHA-256 канонического JSON входных данных>",
"result": {}
}
Канонический JSON использует отсортированные ключи, компактные разделители и UTF-8 с неэкранированным Unicode. Поставщик подписывает эти байты ключом Ed25519. Для совместимости Python и TypeScript используйте целые числа в подписанных данных: текущий контракт не нормализует представления 1.0 и 1 между языками.
Ограничения и область проверки
Размер JSON — до 64 КиБ, глубина — до 16, число узлов — до 4096. Дубли ключей, неконечные числа, некорректный UTF-8, приватные сетевые адреса, перенаправления и сжатые ответы отклоняются. Подтверждение и вызов используют один проверенный IP и исходное имя хоста для TLS.
Поддерживаемые ключевые слова JSON Schema 2020-12:
$schema title description type properties required additionalProperties items enum const minimum maximum exclusiveMinimum exclusiveMaximum minLength maxLength minItems maxItems minProperties maxProperties
Остальные ключевые слова, включая ссылки, регулярные выражения и композицию схем, отклоняются явно. Лимиты сервиса: четыре одновременные проверки и до 250 сохранённых подтверждений. Общие часовые лимиты подготовки и несохранённых попыток: 20 на посетителя, 60 на исходный IP и 500 на процесс. Развёртывание использует один ASGI worker, ограничения запросов и настройку доверенного прокси.
Успех относится к одному вызову поставщика. Это не сертификация всего протокола, публикация в Hub или подтверждение личности поставщика. Квитанции Hub, платежи, обнаружение, федерация, защита от повторов и нагрузка не проверяются. Сам отчёт не подписан Hub; его время не заверено поставщиком. Одинаковые вход и результат могут иметь одинаковую подпись, поэтому свежесть ответа не доказана.
Подключить поставщика
Volver a la conexión del proveedor
AIMARKET-PROVIDER-INVOKE/1
Guía de conexión del proveedor
Comprueba tu endpoint con una invocación real y la verificación de una firma Ed25519 vinculada a la solicitud. No necesitas un token de Hub, garantía, cuenta ni canal de pago.
1. Prepara un proveedor de prueba
Usa datos inocuos y un despliegue de prueba: la ejecución de tu servicio puede generar costes o efectos secundarios. La cabecera X-AIMarket-Test-Mode: provider-invoke-v1 identifica la prueba, pero no autoriza al cliente ni hace gratuita la llamada.
Configura capability.json con product_id, capability_id, publisher_id, name, invoke_url, provider_pubkey, price_per_call_usd, input_schema y output_schema. La URL pública debe usar HTTPS en el puerto 443; la clave pública Ed25519 debe tener 32 bytes, codificados en base64.
2. Confirma el control del endpoint
- Abre Conecta tu proveedor, importa el manifiesto e introduce una entrada JSON de prueba que cumpla su esquema.
- Autoriza la llamada y selecciona Preparar conexión.
- Descarga la prueba y publica el JSON en la dirección indicada, en el mismo origen que tu proveedor:
.well-known/aimarket-provider-check.jsonJSONhttps://your-provider.example/.well-known/aimarket-provider-check.json
{"challenge":"<token de 64 caracteres emitido por Playground>"}
Sirve la respuesta como application/json, sin compresión ni redirecciones. El desafío está vinculado a esta sesión del navegador, al manifiesto y a la entrada; caduca en 15 minutos. Se permiten hasta tres intentos de verificar el control.
Los proveedores generados con las plantillas actualizadas de Python o TypeScript exponen esta ruta cuando AIMARKET_ONBOARDING_CHALLENGE contiene el token emitido. Define la variable y reinicia el proveedor; elimínala tras la prueba. Los proveedores antiguos o personalizados pueden servir el JSON como archivo estático en la misma dirección.
3. Ejecuta la prueba
Selecciona Verificar e invocar. Playground verifica la prueba, realiza un único POST, comprueba el esquema de salida y verifica X-Provider-Signature. Descarga el informe con los datos firmados y la clave pública.
Repetir la solicitud con el mismo desafío devuelve el resultado almacenado, incluidos los fallos posteriores al envío, sin otra invocación. Un desafío nuevo autoriza otra llamada. Los informes caducan en 15 minutos y se pierden al reiniciar el servidor.
Pruebas locales y CI
El CLI está disponible en la copia actualizada del código fuente de Playground. No des por hecho que este nuevo comando ya esté publicado en PyPI. Crea un archivo JSON de entrada, por ejemplo {} para un proveedor generado sin modificaciones, inicia el proveedor y ejecuta:
aimarket-provider-checkCLIcd aimarket-playground
uv sync --extra dev
uv run aimarket-provider-check ../my-agent/capability.json \
--input ../my-agent/test-input.json --allow-loopback > report.json
El código de salida 0 indica éxito; 1 indica fallo. Conserva el informe también cuando falle. El CLI realiza las mismas comprobaciones de invocación, esquema y firma; no acredita el control del endpoint. --allow-loopback permite el desarrollo local, no redes privadas arbitrarias. Los informes contienen resultados del proveedor: usa datos de prueba sin información sensible.
El contrato de firma
{
"capability_id": "my-agent.invoke@v1",
"product_id": "my-agent",
"input_sha256": "<SHA-256 del JSON canónico de entrada>",
"result": {}
}
El JSON canónico usa claves ordenadas, separadores compactos y UTF-8 con Unicode sin escapar. El proveedor firma esos bytes con Ed25519. Para la interoperabilidad entre Python y TypeScript, usa enteros en los datos firmados: el contrato actual no normaliza 1.0 y 1 entre lenguajes.
Límites y alcance
El JSON está limitado a 64 KiB, una profundidad de 16 y 4096 nodos. Se rechazan claves duplicadas, números no finitos, UTF-8 incorrecto, destinos de redes privadas, redirecciones y respuestas comprimidas. La prueba y la invocación usan la misma IP validada y el mismo nombre de host TLS.
Palabras clave admitidas de JSON Schema 2020-12:
$schema title description type properties required additionalProperties items enum const minimum maximum exclusiveMinimum exclusiveMaximum minLength maxLength minItems maxItems minProperties maxProperties
Las demás palabras clave, incluidas referencias, expresiones regulares y composición de esquemas, se rechazan explícitamente. El servicio admite cuatro pruebas simultáneas y hasta 250 desafíos almacenados. Límites por hora compartidos entre preparación e intentos sin resultado en caché: 20 por visitante, 60 por IP de origen y 500 por proceso. El despliegue usa un único proceso de trabajo ASGI, con limitación de solicitudes y configuración de proxy de confianza en el perímetro.
Un resultado aprobado corresponde a una sola invocación del proveedor. No es una certificación del protocolo completo, una publicación en Hub ni una prueba de identidad del proveedor. No se prueban los recibos Hub, pagos, descubrimiento, federación, detección de repeticiones ni carga. Hub no firma el informe y el proveedor no certifica su marca de tiempo. Entradas y resultados idénticos pueden producir firmas idénticas: no se demuestra que la respuesta sea reciente.
Conecta tu proveedor
Retour à la connexion du fournisseur
AIMARKET-PROVIDER-INVOKE/1
Guide de connexion du fournisseur
Testez votre point de terminaison (endpoint) avec une invocation réelle et la vérification d’une signature Ed25519 liée à la requête. Aucun jeton Hub, dépôt de garantie, compte ou canal de paiement n’est nécessaire.
1. Préparer un fournisseur de test
Utilisez des données sans danger et un déploiement de test : l’exécution de votre service peut entraîner des frais ou des effets secondaires. L’en-tête X-AIMarket-Test-Mode: provider-invoke-v1 identifie le test, mais n’autorise pas le client et ne rend pas l’appel gratuit.
Renseignez capability.json avec product_id, capability_id, publisher_id, name, invoke_url, provider_pubkey, price_per_call_usd, input_schema et output_schema. L’URL publique doit utiliser HTTPS sur le port 443 ; la clé publique Ed25519 doit contenir 32 octets, encodés en base64.
2. Confirmer le contrôle du point de terminaison
- Ouvrez Connecter votre fournisseur, importez le manifeste et saisissez une entrée JSON de test conforme à son schéma.
- Autorisez l’appel et sélectionnez Préparer la connexion.
- Téléchargez la preuve et servez ce JSON à l’adresse indiquée, sur la même origine que votre fournisseur :
.well-known/aimarket-provider-check.jsonJSONhttps://your-provider.example/.well-known/aimarket-provider-check.json
{"challenge":"<jeton de 64 caractères émis par Playground>"}
Servez la réponse en application/json, sans compression ni redirection. Le défi est lié à cette session du navigateur, au manifeste et à l’entrée ; il expire après 15 minutes. Jusqu’à trois tentatives de vérification du contrôle sont autorisées.
Les fournisseurs générés avec les modèles Python ou TypeScript mis à jour exposent cette route lorsque AIMARKET_ONBOARDING_CHALLENGE contient le jeton émis. Définissez la variable et redémarrez le fournisseur ; supprimez-la après le test. Les fournisseurs anciens ou personnalisés peuvent servir la preuve comme fichier JSON statique à la même adresse.
3. Lancer le test
Sélectionnez Vérifier et invoquer. Playground vérifie la preuve, effectue un seul POST, contrôle le schéma de sortie et vérifie X-Provider-Signature. Téléchargez le rapport contenant les données signées et la clé publique.
Une requête répétée avec le même défi renvoie le résultat en cache, y compris les échecs après envoi, sans nouvelle invocation. Un nouveau défi autorise un nouvel appel. Les rapports expirent après 15 minutes et sont perdus au redémarrage du serveur.
Tests locaux et CI
Le CLI est disponible dans la copie à jour du code source de Playground. Ne supposez pas que cette nouvelle commande soit déjà publiée sur PyPI. Créez un fichier JSON d’entrée, par exemple {} pour un fournisseur généré sans modification, démarrez le fournisseur, puis exécutez :
aimarket-provider-checkCLIcd aimarket-playground
uv sync --extra dev
uv run aimarket-provider-check ../my-agent/capability.json \
--input ../my-agent/test-input.json --allow-loopback > report.json
Le code de sortie 0 indique un succès ; 1 indique un échec. Archivez le rapport même en cas d’échec. Le CLI effectue les mêmes vérifications d’invocation, de schéma et de signature ; il ne prouve pas le contrôle du point de terminaison. --allow-loopback autorise le développement local, pas des réseaux privés arbitraires. Les rapports contiennent les résultats du fournisseur : utilisez des données de test non sensibles.
Le contrat de signature
{
"capability_id": "my-agent.invoke@v1",
"product_id": "my-agent",
"input_sha256": "<SHA-256 du JSON canonique d’entrée>",
"result": {}
}
Le JSON canonique utilise des clés triées, des séparateurs compacts et UTF-8 avec Unicode non échappé. Le fournisseur signe ces octets avec Ed25519. Pour l’interopérabilité Python/TypeScript, utilisez des entiers dans les données signées : le contrat actuel ne normalise pas 1.0 et 1 entre les langages.
Limites et périmètre
Le JSON est limité à 64 KiB, une profondeur de 16 et 4096 nœuds. Les clés dupliquées, nombres non finis, UTF-8 incorrect, destinations de réseaux privés, redirections et réponses compressées sont rejetés. La preuve et l’invocation utilisent la même IP validée et le même nom d’hôte TLS.
Mots-clés JSON Schema 2020-12 pris en charge :
$schema title description type properties required additionalProperties items enum const minimum maximum exclusiveMinimum exclusiveMaximum minLength maxLength minItems maxItems minProperties maxProperties
Les autres mots-clés, notamment les références, expressions régulières et compositions de schémas, sont explicitement rejetés. Le service autorise quatre tests simultanés et jusqu’à 250 défis stockés. Limites horaires communes à la préparation et aux tentatives sans résultat en cache : 20 par visiteur, 60 par IP source et 500 par processus. Le déploiement utilise un seul processus de travail ASGI, avec limitation des requêtes et configuration d’un proxy de confiance en périphérie.
Un succès concerne une seule invocation du fournisseur. Ce n’est ni une certification du protocole complet, ni une publication sur Hub, ni une preuve d’identité du fournisseur. Les reçus Hub, paiements, découverte, fédération, détection des rejeux et charge ne sont pas testés. Hub ne signe pas le rapport ; son horodatage n’est pas attesté par le fournisseur. Des entrées et résultats identiques peuvent produire des signatures identiques : la fraîcheur de la réponse n’est donc pas prouvée.
Connecter votre fournisseur
返回提供方连接页面
AIMARKET-PROVIDER-INVOKE/1
提供方连接指南
通过一次真实调用和与请求绑定的 Ed25519 签名验证,检查你自己的端点。无需 Hub 令牌、保证金、账户或支付通道。
1. 准备测试提供方
请使用无害的输入和测试部署:你的服务执行操作时可能产生费用或副作用。请求头 X-AIMarket-Test-Mode: provider-invoke-v1 仅标识此测试,不授予调用者权限,也不代表调用免费。
在 capability.json 中配置 product_id、capability_id、publisher_id、name、invoke_url、provider_pubkey、price_per_call_usd、input_schema 和 output_schema。公开 URL 必须使用 HTTPS 和 443 端口;Ed25519 公钥必须是以 base64 编码的 32 字节公钥。
2. 确认端点控制权
- 打开连接你的提供方,导入清单并填写符合其模式的 JSON 测试输入。
- 授权测试调用,然后选择准备连接。
- 下载证明,并在与你的提供方同源的指定地址提供此 JSON:
.well-known/aimarket-provider-check.jsonJSONhttps://your-provider.example/.well-known/aimarket-provider-check.json
{"challenge":"<Playground 签发的 64 字符令牌>"}
响应类型必须为 application/json,不允许压缩或重定向。挑战与当前浏览器会话、清单和输入绑定,15 分钟后过期。最多可尝试三次控制权验证。
使用更新后的 Python 或 TypeScript 模板生成的提供方,在 AIMARKET_ONBOARDING_CHALLENGE 包含签发的令牌时会开放此路由。设置变量并重启提供方,检查后删除该变量。旧版或自定义提供方可以在同一地址提供静态 JSON 证明文件。
3. 运行检查
选择验证并调用。Playground 会验证证明,发送一次 POST,检查输出模式并验证 X-Provider-Signature。下载包含签名数据和公钥的报告。
使用同一挑战重复请求会返回缓存结果,包括发送调用后发生的失败,不会再次调用。新挑战会授权一次新调用。报告在 15 分钟后过期,服务器重启也会使报告丢失。
本地检查与 CI
CLI 可从更新后的 Playground 源代码副本运行。不要假定此新命令已发布到 PyPI。创建 JSON 输入文件,例如未修改的生成提供方可使用 {},启动提供方后运行:
aimarket-provider-checkCLIcd aimarket-playground
uv sync --extra dev
uv run aimarket-provider-check ../my-agent/capability.json \
--input ../my-agent/test-input.json --allow-loopback > report.json
退出码 0 表示通过,1 表示失败。失败时也应保存报告。CLI 执行相同的调用、模式和签名检查,但不证明端点控制权。--allow-loopback 仅允许本地开发,不允许任意私有网络。报告包含提供方的结果,请使用不含敏感信息的测试数据。
签名契约
{
"capability_id": "my-agent.invoke@v1",
"product_id": "my-agent",
"input_sha256": "<规范化输入 JSON 的 SHA-256>",
"result": {}
}
规范化 JSON 使用排序后的键、紧凑分隔符和不转义 Unicode 的 UTF-8 编码。提供方使用 Ed25519 对这些字节签名。为确保 Python 与 TypeScript 的互操作性,请在签名数据中使用整数:当前契约不会跨语言统一 1.0 和 1 的表示。
限制与检查范围
JSON 限制为 64 KiB、16 层深度和 4096 个节点。重复键、非有限数值、无效 UTF-8、私有网络目标、重定向和压缩响应会被拒绝。证明获取与调用使用相同的已验证 IP 和 TLS 主机名。
支持的 JSON Schema 2020-12 关键字:
$schema title description type properties required additionalProperties items enum const minimum maximum exclusiveMinimum exclusiveMaximum minLength maxLength minItems maxItems minProperties maxProperties
其他关键字,包括引用、正则表达式和模式组合,均会被明确拒绝。服务最多允许四个并发检查和 250 个已存储挑战。准备操作与无缓存结果的尝试共用每小时限额:每位访客 20 次、每个来源 IP 60 次、每个进程 500 次。部署使用单个 ASGI 工作进程,并在边缘配置请求限流和可信代理。
通过仅适用于提供方的一次调用。这不是完整协议认证、Hub 发布或提供方身份证明。不测试 Hub 收据、支付、发现、联邦、重放检测或负载。报告本身不由 Hub 签名,其时间戳也未经提供方证明。相同输入和结果可能产生相同签名,因此无法证明响应的新鲜性。
连接你的提供方