> ## Documentation Index
> Fetch the complete documentation index at: https://docs.x402layer.cc/llms.txt
> Use this file to discover all available pages before exploring further.

# Clone a pod

> Base URL `https://compute.x402layer.cc/pods/v1`. See the [Sandbox API guide](/cloud/pods/sandbox).

Creates a NEW pod, billed exactly like `POST /pods` (same payment, caps and Idempotency-Key ledger), and restores the source pod's latest completed Agent Vault backup (or `backup_id`) once it is online, usually 5 to 10 minutes. Copies engine, tier, managed model, template, custom instructions and identity, heartbeat settings and capabilities. Does NOT copy channel tokens, a BYOK key, the slug, wallet, keys, webhooks or ports. The passphrase is never logged and is not part of the idempotency hash. Needs only an ordinary write key (a pod's own key is refused). Rate limit: the create bucket, 60 per hour.



## OpenAPI

````yaml POST /pods/v1/pods/{id}/clone
openapi: 3.1.0
info:
  title: x402 Singularity Layer API
  description: >-
    OpenAPI-backed reference for marketplace discovery, payment routes,
    webhooks, wallet-first auth, agent endpoints, and ERC-8004 flows.
  version: 1.0.0
servers:
  - url: https://api.x402layer.cc
security: []
tags:
  - name: Marketplace
    description: Public discovery and listing lookup
  - name: Public Endpoints
    description: Public endpoint metadata and hosted checkout context
  - name: Public Payment Links
    description: Hosted public payment-link lookup
  - name: Payments
    description: Hosted x402 payment challenge routes
  - name: Receipts
    description: Signed receipt lookup and verification helpers
  - name: Ratings
    description: Public listing ratings and authenticated rating actions
  - name: Webhooks
    description: Seller webhook management API
  - name: Agent Auth
    description: Wallet-first challenge and verification routes
  - name: Agent Endpoints
    description: Create, read, top up, and delete agent endpoints
  - name: ERC-8004
    description: Agent registry and registration lifecycle routes
  - name: Marketplace Agents
    description: Public ERC-8004 marketplace discovery routes
  - name: Compute Catalog
    description: Compute plans, regions, and OS catalog
  - name: Compute Instances
    description: Provision, inspect, extend, and destroy compute instances
  - name: Compute API Keys
    description: API keys for compute agent access
  - name: Fundraiser Campaigns
    description: List, view, create, and edit fundraiser campaigns
  - name: Fundraiser Contributions
    description: Record and list campaign contributions
  - name: Fundraiser Comments
    description: Campaign comment threads
  - name: Fundraiser Media
    description: Campaign image uploads and OG images
  - name: Enterprise
    description: >-
      Enterprise partner configuration, endpoint listing, revenue stats, and
      transaction ledger
  - name: Staking
    description: Agentic $SGL staking
  - name: SGL Grid
    description: >-
      Decentralized, confidential, OpenAI-compatible inference served by
      attested TEE nodes.
  - name: Compute Credits
    description: Prepaid USDC credit balance shared across Machines and Grid.
  - name: Agent Pods
    description: >-
      Deploy and manage hosted agents (Agent Pods), plus the pod's
      OpenAI-compatible adapter for external clients.
  - name: Agent Pods API
    description: >-
      The programmatic `/pods/v1` surface: create, drive and destroy Agent Pods
      with a single `X-API-Key`. Distinct from the Agent Pods dashboard routes,
      which expect a wallet signature or a browser session.
paths:
  /pods/v1/pods/{id}/clone:
    servers:
      - url: https://compute.x402layer.cc
    post:
      tags:
        - Agent Pods API
      summary: Clone a pod
      description: >-
        Base URL `https://compute.x402layer.cc/pods/v1`. See the [Sandbox API
        guide](/cloud/pods/sandbox).


        Creates a NEW pod, billed exactly like `POST /pods` (same payment, caps
        and Idempotency-Key ledger), and restores the source pod's latest
        completed Agent Vault backup (or `backup_id`) once it is online, usually
        5 to 10 minutes. Copies engine, tier, managed model, template, custom
        instructions and identity, heartbeat settings and capabilities. Does NOT
        copy channel tokens, a BYOK key, the slug, wallet, keys, webhooks or
        ports. The passphrase is never logged and is not part of the idempotency
        hash. Needs only an ordinary write key (a pod's own key is refused).
        Rate limit: the create bucket, 60 per hour.
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
            format: uuid
          description: Pod id, as returned by create/list.
        - name: Idempotency-Key
          in: header
          required: true
          schema:
            type: string
          example: clone-4471
          description: REQUIRED, so a retried clone never charges twice.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - passphrase
              properties:
                passphrase:
                  type: string
                  minLength: 8
                  maxLength: 1024
                  description: Your Agent Vault backup passphrase for the source pod.
                backup_id:
                  type: string
                  format: uuid
                  description: >-
                    A specific completed backup of this pod. Default: the
                    newest.
                name:
                  type: string
                  maxLength: 120
                  description: 'Default: the source name plus " (clone)".'
                term_hours:
                  type: integer
                  minimum: 24
                region:
                  type: string
                max_total_usd:
                  type: number
                channels:
                  type: object
                  description: Channel tokens for the new pod. Not copied from the source.
                ai:
                  type: object
                  description: >-
                    Required when the source uses its own key: `{mode: "byok",
                    api_key, base_url, api}`.
                external_ref:
                  type: string
      responses:
        '201':
          description: >-
            Pod created (replay: `200`). Same body as create, plus `clone:
            {source_pod_id, backup_id, restore: {status, message}}`.
          content:
            application/json:
              schema:
                type: object
                properties:
                  pod:
                    $ref: '#/components/schemas/PodV1'
                  clone:
                    type: object
                    properties:
                      source_pod_id:
                        type: string
                      backup_id:
                        type: string
                        nullable: true
                      restore:
                        type: object
                        properties:
                          status:
                            type: string
                            enum:
                              - pending
                              - not_scheduled
                          message:
                            type: string
        '400':
          description: >-
            `invalid_request`: missing passphrase or Idempotency-Key, bad
            `backup_id`, or a BYOK source without `ai`.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PodV1Error'
        '401':
          description: '`unauthorized`.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PodV1Error'
        '403':
          description: '`forbidden`: a pod''s own key cannot clone pods.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PodV1Error'
        '404':
          description: '`not_found`: no such pod on your account.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PodV1Error'
        '409':
          description: >-
            `conflict` with `details.code = no_backup`: the source has no
            completed backup.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PodV1Error'
        '429':
          description: '`rate_limited`.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PodV1Error'
      security:
        - podsApiKey: []
components:
  schemas:
    PodV1:
      type: object
      description: >-
        The public projection of a pod on `/pods/v1`. An allowlist: it never
        carries the engine, its version, the provider, the region, the machine
        plan, the IP, or any credential, so the pod's implementation can change
        without breaking your integration.
      properties:
        id:
          type: string
          format: uuid
          description: Pod id. Use it on every `/pods/v1/pods/{id}/*` route.
        name:
          type: string
          nullable: true
          description: Your display name for the pod.
        slug:
          type: string
          nullable: true
          description: >-
            Vanity endpoint slug, when one is set. It appears in the pod's
            OpenAI base URL, so it is a different thing from `name`.
        external_ref:
          type: string
          nullable: true
          description: >-
            YOUR id, echoed back on every read and usable as a filter on `GET
            /pods`. Store this instead of ours.
        status:
          type: string
          enum:
            - provisioning
            - online
            - offline
            - grace
            - destroying
            - destroyed
          description: >-
            Engine-neutral lifecycle state. `destroying` means teardown is
            accepted but the machine may still be running, and may still bill
            for a few minutes.
        tier:
          type: string
          nullable: true
          example: starter
        model:
          type: string
          nullable: true
          description: The model the pod runs.
        ai:
          type: object
          properties:
            mode:
              type: string
              enum:
                - managed
                - byok
        capabilities:
          $ref: '#/components/schemas/PodV1Capabilities'
        endpoint:
          type: object
          nullable: true
          description: >-
            Null when the pod has no `endpoint` capability - there genuinely is
            no URL then.
          properties:
            base_url:
              type: string
              example: https://compute.x402layer.cc/pods/{id}/v1
        billing:
          type: object
          properties:
            expires_at:
              type: string
              format: date-time
              nullable: true
            auto_renew:
              type: boolean
              nullable: true
            is_trial:
              type: boolean
        customization:
          $ref: '#/components/schemas/PodCustomization'
        agent_heartbeat_minutes:
          type: integer
          minimum: 0
          maximum: 1440
          description: Self-check cadence in minutes. 0 disables it.
        created_at:
          type: string
          format: date-time
          nullable: true
    PodV1Error:
      type: object
      description: >-
        Every `/pods/v1/*` failure has this shape. Branch on `error.code`, never
        on `error.message` - the message is prose and may be reworded.
      properties:
        error:
          type: object
          required:
            - code
            - message
          properties:
            code:
              type: string
              enum:
                - invalid_request
                - unauthorized
                - forbidden
                - not_found
                - conflict
                - limit_exceeded
                - capability_disabled
                - rate_limited
                - not_implemented
                - internal
              description: Stable machine-readable code.
            message:
              type: string
              description: Human-readable explanation.
            details:
              type: object
              description: >-
                Optional structured context, e.g. `{ "code":
                "idempotency_mismatch" }`, `{ "required_scope":
                "pods:wallet:write" }`, `{ "capability": "wallet" }`, `{
                "retry_after_seconds": 60 }`.
    PodV1Capabilities:
      type: object
      description: >-
        What this pod was provisioned with. Omitting `capabilities` on create
        gives every capability.
      properties:
        endpoint:
          type: boolean
          description: OpenAI-compatible endpoint and pod endpoint keys.
        wallet:
          type: boolean
          description: The pod's own Base + Solana wallet.
        platform_tools:
          type: boolean
          description: Singularity platform MCP tools on the pod.
        connectors:
          type: boolean
          description: Owner-added MCP connectors.
        channels:
          type: boolean
          description: Messaging channels (Telegram, ...).
        scheduler:
          type: boolean
          description: Scheduled tasks.
        backups:
          type: boolean
          description: Agent Vault automatic backups.
    PodCustomization:
      type: object
      description: >-
        Structured owner/platform customization. Raw AGENTS.md replacement is
        intentionally not exposed; these fields render into a bounded
        customization section while the platform-managed safety base remains
        intact.
      properties:
        agent_identity:
          type: string
          nullable: true
        agent_instructions:
          type: string
          nullable: true
        heartbeat_prompt:
          type: string
          nullable: true
  securitySchemes:
    podsApiKey:
      type: apiKey
      in: header
      name: X-API-Key
      description: >-
        A compute API key (`x402c_...`). Mint one in the dashboard under
        Settings -> API Keys. A signed-in compute session also works. Wallet
        signatures do not: they are bound to method+path+body and do not survive
        the internal hop, so signature callers must use the dashboard routes
        instead. Two extra scopes gate the dangerous powers: `pods:wallet:write`
        (pod wallet money, backup passphrase) and `pods:control:write`
        (connectors, full-power control socket).

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.