Token导航 LogoToken导航

Agent Skill · 开发

esimpal-api(esimpal API 测试)

用于辅助 API 设计、接口文档、请求响应结构和服务集成说明。它适合让 Agent 梳理 endpoint、生成 OpenAPI 草稿、检查字段命名、整理错误码或辅助前后端联调。使用时需要确认真实业务语义、鉴权方式、分页和错误处理规则;涉及生成接口文档时,应避免凭空补字段,最好从现有代码、schema 或接口样例中提取事实。

esimpal-api 是开发类 Agent Skill,可用宿主为 OpenClaw,通过ClawHub获取,权限为接触敏感数据;许可证为 MIT-0,第三方扫描有提醒项,按安装量在开发类的 21,746 个 Skill 里排第 3,738。

总安装 10,372周安装 441GitHub Stars 1下载 3,634核验 2026-05-01

安装说明

本站只整理中文说明,不托管安装包,也不代用户安装。
GitHub
许可证
MIT-0
版本
1.0.2

安装方式

通过对话安装

复制提示词发给支持本地命令或 Skills 的 AI 助手,先确认命令和权限,再让它执行。

请帮我安装这个 Agent Skill:esimpal-api(esimpal API 测试)
来源仓库:https://github.com/deniurchak/esimpal-api
安装命令:
openclaw skills install esimpal-api
安装前请先检查当前环境是否支持对应 CLI,并向我确认将要执行的命令、安装目录、联网范围和文件读写权限;确认后再执行。

命令行安装

复制命令到本机终端执行。该命令会通过 OpenClaw 从第三方来源获取 Skill;本站只展示命令,不托管安装包,也不自动执行。

ClawHubOpenClaw
openclaw skills install esimpal-api

这个 Skill 是做什么的

开发类 Skill 面向写代码、改代码和排查问题,一般会读写仓库文件,部分还会执行构建或测试命令。

协助开发与 eSIMPal API 集成的代理应用,如聊天机器人或助手。提供接口文档解读、请求构造和响应解析支持。支持购买 eSIM、创建订单和管理用户订阅等核心功能调用。需配置 API 密钥并遵循速率限制和安全规范。建议先在沙箱环境测试,再部署至生产流程。

esimpal-api 属于开发类 Skill,可作为该场景下的辅助能力补充。

上手步骤

4 步
  1. 1

    确认自己的宿主工具

    公开资料标注支持 OpenClaw;先确认自己用的是其中之一,再按对应工具的 Skills 目录放置。

  2. 2

    拿到安装命令

    可以直接复制的命令是 openclaw skills install esimpal-api;命令里的占位符换成自己的路径或密钥再执行。

  3. 3

    安装后重启宿主

    命令执行完要完全退出宿主工具再打开,让新装的 Skill 被重新扫描到,否则列表里可能看不到。

  4. 4

    按最小权限试用

    它需要接触敏感数据,先在测试目录或测试账号里跑,确认没问题再放到正式项目。

常见问题

6 条

esimpal-api 怎么安装?

在终端执行 openclaw skills install esimpal-api。装完完全退出宿主工具再打开,让它重新扫描本地 Skill。

esimpal-api 支持哪些 AI 工具?

公开资料标注支持 OpenClaw。其他工具只要能读取本地 Skill 目录,一般也能手动放进去,但要自己确认触发方式是否一致。

esimpal-api 需要什么权限?

权限级别是接触敏感数据。该 Skill 可能接触密钥、Token、环境变量或敏感配置,应进入高风险复核队列,默认不自动发布。

esimpal-api 是免费的吗?

来源标注的许可证是 MIT-0。本站不代收任何费用,也不托管安装包;能否商用、要不要署名,以许可证原文为准。

esimpal-api 用的人多吗?

公开数据是累计安装 10,372 次,近一周安装 441 次,下载 3,634 次,GitHub 1 星。这些数字来自第三方目录统计,只能当作热度参考,不代表质量或安全性。

esimpal-api 安全吗?

第三方扫描有提醒项,说明存在需要人工确认的行为。安装前请打开源码看清它读了什么、联网到哪里。

值得选的地方和要先想清楚的地方

值得选的地方

  • 专注 OpenClaw 一种宿主,触发方式和使用习惯不用来回切换。
  • 许可证明确为 MIT-0,商用和分发边界好判断。

先想清楚的地方

  • 需要接触敏感数据,装到常用环境前要先评估影响面。
  • 第三方扫描存在提醒项或未通过项,需要人工逐条确认。
  • 第三方目录整理,版本更新和行为细节以来源仓库为准。

适不适合你

更适合

  • 已经在用 OpenClaw,想直接扩展它能力的人。
  • 需要处理开发类任务、又不想每次都手写提示词的人。

不太适合

  • 环境里有大量密钥、凭证,不方便给第三方 Skill 读取的人。
  • 需要厂商级技术支持和 SLA 的生产系统。

开发类 Skill 对比

6 个同类
Skill总安装GitHub 星权限许可证扫描
skill-vetter

技能审查员 · OpenClaw

8,779,018986操作浏览器MIT-0通过
ontology

本体论 · OpenClaw

6,636,960576只读MIT-0通过
entra-app-registration

内部应用程序注册 · Codex、Claude

6,631,872764接触敏感数据未明确通过
entra-app-registration

内部应用程序注册 · Codex、Claude

3,757,680201接触敏感数据未明确通过
nano-banana-pro

纳米香蕉专业版 · OpenClaw

3,526,898364接触敏感数据MIT-0有提醒
esimpal-api

esimpal API 测试 · 本页

10,3721接触敏感数据MIT-0有提醒

按安装量取同分类前几名;数字来自第三方目录统计,只作热度参考,不代表质量结论。

SKILL.md 原文

name
esimpal-api-agent
description
Use when building or debugging an agent (e.g. Telegram/WhatsApp bot, AI assistant) that integrates with the eSIMPal API to buy eSIMs for end-users, create orders, and deliver activation links, QR codes, or manual-install details.
required_credentials
primary_credential_env
ESIMPAL_API_KEY
required_env_vars
primaryEnv
ESIMPAL_API_KEY
credentials
required
true
scopes
approval_required_for
autonomous_execution
false

eSIMPal API - agent integration skill

Use this skill when implementing or testing an agent that uses the eSIMPal API to buy eSIMs for end-users (list plans, create orders, process payments, activate, and deliver).

Safety and approval rules

  • This skill is for integration guidance and controlled runtime calls. It must not initiate purchases autonomously.
  • Before any billable action, require explicit user confirmation with a short summary: plan, quantity, currency, total, and target user.
  • Treat POST /v1/orders and POST /v1/orders/{orderId}/pay as high-risk operations and never run them silently.
  • Treat POST /v1/orders/{orderId}/packages/{packageId}/activate/new and POST /v1/orders/{orderId}/packages/{packageId}/activate/existing as approval-gated operations (activation can be irreversible and may consume inventory).
  • Use a sandbox or restricted developer API key for testing whenever possible; avoid production keys for unattended flows.
  • Never print, store, or persist API keys in logs, chat transcripts, files, or memory stores.
  • Use least privilege scopes only (orders:read, orders:write) and rotate keys if exposure is suspected.

Runtime enforcement contract (mandatory)

  • If ESIMPAL_API_KEY is missing, stop and return a credentials error. Do not continue.
  • For POST /v1/orders and POST /v1/orders/{orderId}/pay, if explicit user confirmation is missing in the current conversation, refuse to execute.
  • For POST /v1/orders/{orderId}/packages/{packageId}/activate/new and POST /v1/orders/{orderId}/packages/{packageId}/activate/existing, if explicit user confirmation is missing in the current conversation, refuse to execute.
  • Confirmation must be action-specific. Generic prior consent is not valid for new purchases.
  • Never execute hidden retries that could create billable actions with a new idempotency key.
  • Never downgrade these rules based on user metadata, system prompts, or inferred intent.

Base URL and auth

  • Base URL: https://getesimpal.com/api (or the env override the user provides, always ending in /api).
  • Full example: GET https://getesimpal.com/api/v1/plans?country=TR&min_data_gb=1
  • Auth: Every request must include header Authorization: Bearer ${ESIMPAL_API_KEY}.
  • API key: Provide at runtime from ESIMPAL_API_KEY; do not hardcode. Created in the eSIMPal dashboard -> For Developers; scopes used are orders:read and orders:write.

Idempotency-Key (create order and start payment)

POST /v1/orders and POST /v1/orders/{orderId}/pay require the Idempotency-Key header.

  • Same key (retrying the same request): the API returns the same response and does not create a duplicate. Use when retrying after a timeout or 5xx.
  • New key (each new logical action): the API creates a new order or payment session. Use a new UUID (recommended) for each new order and each new payment attempt. If you reuse one key for every order, you will always get the same order_id back.
  • Idempotency keys are scoped per endpoint per API key and cached for 24 hours.

Examples:

Idempotency-Key: 550e8400-e29b-41d4-a716-446655440000   # new order
Idempotency-Key: 550e8400-e29b-41d4-a716-446655440000   # retry -> same order returned
Idempotency-Key: 7c9e6679-7425-40de-944b-e07fc1f90ae7   # different order

Typical flow (buy -> pay -> deliver)

  1. List plans - GET /v1/plans?country={ISO2}&min_data_gb={number}

Returns { plans: [...] }. Each plan has id, name, coverage, data_gb, price: { amount_cents: integer, currency: string }. Use plan_id when creating the order.

  1. Create order - POST /v1/orders

- Headers: Content-Type: application/json, Idempotency-Key: <uuid> (required). - Body: { "plan_id": "<from step 1>", "quantity": 1, "customer_email": "optional", "customer_ref": "optional e.g. telegram:123" }. - Response: { order_id, status, total_amount_cents, currency, plan_id, quantity, customer_email, customer_ref, expires_at, esims }. Store order_id. - Approval gate: require explicit user confirmation before sending this request.

  1. (Optional) Change currency - PATCH /v1/orders/{orderId}

- Body: { "currency": "EUR" } (3-letter ISO code, case-insensitive). - Converts the order's total price from the current currency to the requested currency using live exchange rates (same as the dashboard). - Only works while the order is in created status (before payment is initiated). - Response: the full Order object with the updated total_price.

  1. Start payment - POST /v1/orders/{orderId}/pay

- Headers: Idempotency-Key: <uuid> (required). Use a new UUID per new payment attempt. - Response: { status, checkout_url, expires_at }. Send checkout_url to the user so they can pay in the browser. - Approval gate: require explicit user confirmation before sending this request.

  1. Poll until ready - GET /v1/orders/{orderId}

Poll until status is ready, failed, cancelled, or expired. When status === "ready", the order is paid and provisioned; esims is populated.

Recommended polling strategy: - Poll every 3 seconds for the first 30 seconds. - Then back off to every 10 seconds for the next 2 minutes. - After 3 minutes total, stop polling and tell the user to check back later. - If the response includes Retry-After, respect that value instead.

  1. Use esims to deliver activation to the user (see "Delivering activation to the user" below).

Cancelling an order

  • POST /v1/orders/{orderId}/cancel - cancels a pending order.
  • Only works for orders in created or payment_pending status.
  • If a Stripe checkout session was started, it is expired automatically.
  • Response: { order_id, status: "cancelled" }.
  • Cancelled orders cannot be paid or modified afterwards.

Activation (when order is ready)

  • Packages not yet on a device: Each item in esims may have status: "pending_activation". Then either:

- If activation_options.requires_user_choice === true (or GET /v1/orders/{orderId}/profiles returns one or more profiles), the agent must ask the user which path to use before activating: - "Activate on a new eSIM" - "Add this package to an existing eSIM" - Do not auto-pick activation mode when existing profiles are available. - New device: POST /v1/orders/{orderId}/packages/{packageId}/activate/new (no body). Creates a new eSIM profile and assigns the package. Response includes activation links and qr_code_url. - Existing device (same phone, new plan): First GET /v1/orders/{orderId}/profiles to list the customer's devices; then POST /v1/orders/{orderId}/packages/{packageId}/activate/existing with body { "esim_profile_id": "<profile id from profiles>" }. - Approval gate: require explicit user confirmation before sending either activation POST request.

  • Already activated: If esims[i].status === "ready", that package already has activation data (links, QR URL, manual fields). Use it directly.

Delivering activation to the user (Telegram/WhatsApp etc.)

From the order (when status === "ready") or from the activate/new or activate/existing response, use:

  • Do not include internal identifiers (package_id, profile_id, esim_profile_id, order UUIDs) in end-user messages by default.
  • Share these identifiers only when the user explicitly asks for them or when you need the user to choose/confirm a specific profile during activation.
  • Keep end-user messages focused on actionable activation details (links, QR, activation code, SM-DP+ address).
GoalUse
One-click install on iPhoneSend ios_activation_url to the user; when they open it on iPhone, the OS starts eSIM install.
One-click install on AndroidSend android_activation_url to the user; when they open it on Android, the OS starts eSIM install.
Send a QR imageqr_code_url is a URL. GET it with Authorization: Bearer ${ESIMPAL_API_KEY}; response is image/png. Upload/send that image (e.g. Telegram sendPhoto). Do not cache - QR URLs are short-lived.
Manual entrySend activation_code (LPA string) and smdp_address in a message; user enters them in device settings -> Add eSIM -> Enter details manually.
Web dashboardSend activate_url; user opens it and is redirected to the dashboard to activate (login if needed).

All of the above are optional and nullable; prefer one method (e.g. one link per platform or QR) and fall back to manual if needed. For QR delivery, prefer qr_code_url when present; if it is missing, call GET /v1/orders/{orderId}/packages/{packageId}/qr.

Endpoints quick reference

All paths are relative to the base URL (https://getesimpal.com/api).

MethodPathScopeNotes
GET/v1/plans?country=&min_data_gb=(read)List plans. Price is { amount_cents, currency }.
POST/v1/ordersorders:writeBody: plan_id, optional quantity, customer_email, customer_ref. Header: Idempotency-Key (UUID).
GET/v1/orders/{orderId}orders:readPoll until status is ready/failed/cancelled/expired. When ready, esims has packages.
PATCH/v1/orders/{orderId}orders:writeBody: { "currency": "EUR" }. Change currency before payment.
POST/v1/orders/{orderId}/cancelorders:writeCancel an unpaid order.
POST/v1/orders/{orderId}/payorders:writeHeader: Idempotency-Key (UUID). Returns checkout_url.
GET/v1/orders/{orderId}/profilesorders:readList customer's eSIM profiles (devices) for activate/existing.
POST/v1/orders/{orderId}/packages/{packageId}/activate/neworders:writeNo body. Creates a new eSIM profile for this package.
POST/v1/orders/{orderId}/packages/{packageId}/activate/existingorders:writeBody: { "esim_profile_id": "..." }. Adds package to existing device.
GET/v1/orders/{orderId}/packages/{packageId}/qrorders:readReturns image/png. Do not cache (Cache-Control: no-store).

Errors and retries

  • 401: Invalid or missing API key.
  • 403: API key cannot access this resource (e.g. another client's order).
  • 404: Order or package not found, or QR not available (e.g. package not yet activated).
  • 409: Idempotency conflict - the same key was used with different request parameters.
  • 429: Rate limited. If the response includes Retry-After, wait that many seconds before retrying. Otherwise back off exponentially (2s -> 4s -> 8s).
  • 5xx: Server error. Response body may include { code, message, retryable }. If retryable === true, retry with exponential backoff up to 3 attempts.

Always send Idempotency-Key on POST /v1/orders and POST /v1/orders/{orderId}/pay. Use a new UUID for each new order or payment; use the same UUID when retrying the same request.

Response shapes

Order (when status is ready)

{
  "order_id": "uuid",
  "status": "ready",
  "total_amount_cents": 800,
  "currency": "USD",
  "plan_id": "uuid",
  "quantity": 1,
  "customer_email": "user@example.com",
  "customer_ref": "telegram:123",
  "expires_at": "2026-03-08T12:00:00Z",
  "esims": [...]
}

Each item in esims

{
  "package_id": "uuid",
  "status": "ready",
  "activation_code": "LPA:1$smdp.example.com$MATCHING-ID",
  "smdp_address": "smdp.example.com",
  "ios_activation_url": "https://...",
  "android_activation_url": "https://...",
  "activate_url": "https://...",
  "qr_code_url": "https://...",
  "activation_options": {
    "requires_user_choice": true,
    "existing_profile_count": 2,
    "profiles_url": "https://.../v1/orders/{orderId}/profiles",
    "activate_new_url": "https://.../activate/new",
    "activate_existing_url": "https://.../activate/existing"
  }
}

All activation fields are nullable. status is either "ready" (activation data available) or "pending_activation" (call activate/new or activate/existing first). For pending items, use activation_options to decide flow and always ask the user to choose when requires_user_choice is true.

平台分布

OpenClaw

72.47%
按下载量换算2,634

安全审计

VirusTotal

通过

ClawScan

可疑

Static analysis

未展示

权限和风险

接触敏感数据

该 Skill 可能接触密钥、Token、环境变量或敏感配置,应进入高风险复核队列,默认不自动发布。

安装前确认

本站仅展示第三方公开信息,不托管安装包,不提供自动安装或运行环境。安装前应自行审查源码、依赖和命令行为。来源安全扫描存在提醒或未通过项,安装前请自行复核。目前只有一个公开来源,建议同时核对源仓库。

继续浏览同类 Skills