{
    "service": "cnf-api",
    "version": "2.0.0",
    "base_url": "https://api.c.nf",
    "openapi": "https://api.c.nf/v1/openapi.json",
    "prompt": "https://api.c.nf/v1/ai",
    "auth": {
        "type": "bearer",
        "header": "Authorization: Bearer cnf_<32 hex characters>",
        "issued_at": "https://console.c.nf/account/api",
        "note": "A token acts only for the account that issued it. There is no cross-user or administrative override anywhere in this API."
    },
    "envelope": {
        "success": "bool — always present",
        "data": "object — present on success",
        "error": "string — machine-readable code, present on failure",
        "message": "string — human description, present on failure",
        "request_id": "string — req_<16 hex>, present on every response; quote it in support requests"
    },
    "tools": [
        {
            "name": "public_time",
            "description": "The current UTC time in ISO 8601, RFC 2822 and Unix form. Call: GET https://api.c.nf/v1/public/time. No authentication.",
            "input_schema": {
                "type": "object",
                "properties": {}
            }
        },
        {
            "name": "public_timestamp",
            "description": "The current Unix timestamp, in seconds and milliseconds. Call: GET https://api.c.nf/v1/public/timestamp. No authentication.",
            "input_schema": {
                "type": "object",
                "properties": {}
            }
        },
        {
            "name": "public_ip",
            "description": "The address this request came from. Call: GET https://api.c.nf/v1/public/ip. No authentication.",
            "input_schema": {
                "type": "object",
                "properties": {}
            }
        },
        {
            "name": "public_geo",
            "description": "The country this request came from, as resolved at the edge. Call: GET https://api.c.nf/v1/public/geo. No authentication.",
            "input_schema": {
                "type": "object",
                "properties": {}
            }
        },
        {
            "name": "public_fx",
            "description": "Exchange rates for a base currency, refreshed hourly. Call: GET https://api.c.nf/v1/public/fx. No authentication.",
            "input_schema": {
                "type": "object",
                "properties": {
                    "base": {
                        "type": "string",
                        "description": "ISO 4217 base currency. Defaults to USD."
                    },
                    "symbols": {
                        "type": "string",
                        "description": "Comma-separated ISO 4217 codes to return. Defaults to all."
                    }
                }
            }
        },
        {
            "name": "public_hash",
            "description": "Hash a string with SHA-256 or another supported algorithm. Call: GET https://api.c.nf/v1/public/hash. No authentication.",
            "input_schema": {
                "type": "object",
                "properties": {
                    "value": {
                        "type": "string",
                        "description": "The string to hash. Maximum 8192 bytes."
                    },
                    "algo": {
                        "type": "string",
                        "description": "One of sha256, sha512, sha1, md5, crc32b. Defaults to sha256."
                    }
                },
                "required": [
                    "value"
                ]
            }
        },
        {
            "name": "account_me",
            "description": "The account behind the token, its scopes, and the endpoints they open. Call: GET https://api.c.nf/v1/account/me. Requires a Bearer token.",
            "input_schema": {
                "type": "object",
                "properties": {}
            }
        },
        {
            "name": "account_sessions_list",
            "description": "Every browser session currently signed in to this account. Call: GET https://api.c.nf/v1/account/sessions. Requires a Bearer token with one of these scopes: account:read.",
            "input_schema": {
                "type": "object",
                "properties": {}
            }
        },
        {
            "name": "account_sessions_revoke",
            "description": "Sign one session out. Call: POST https://api.c.nf/v1/account/sessions/revoke. Requires a Bearer token with one of these scopes: account:write.",
            "input_schema": {
                "type": "object",
                "properties": {
                    "id": {
                        "type": "integer",
                        "description": "The session identifier from /v1/account/sessions."
                    }
                },
                "required": [
                    "id"
                ]
            }
        },
        {
            "name": "account_sessions_revoke_all",
            "description": "Sign every session out. Call: POST https://api.c.nf/v1/account/sessions/revoke-all. Requires a Bearer token with one of these scopes: account:write.",
            "input_schema": {
                "type": "object",
                "properties": {}
            }
        },
        {
            "name": "account_profile_update",
            "description": "Change your display name. Call: POST https://api.c.nf/v1/account/profile. Requires a Bearer token with one of these scopes: account:write.",
            "input_schema": {
                "type": "object",
                "properties": {
                    "field": {
                        "type": "string",
                        "description": "Only nickname may be changed here."
                    },
                    "value": {
                        "type": "string",
                        "description": "The new display name, up to 64 characters."
                    }
                },
                "required": [
                    "field",
                    "value"
                ]
            }
        },
        {
            "name": "dns_zones_list",
            "description": "Every zone this account has claimed. Call: GET https://api.c.nf/v1/dns/zones. Requires a Bearer token with one of these scopes: dns:read.",
            "input_schema": {
                "type": "object",
                "properties": {
                    "status": {
                        "type": "string",
                        "description": "verified, pending, or all. Defaults to all."
                    }
                }
            }
        },
        {
            "name": "dns_zones_claim",
            "description": "Claim a zone. An uncontested claim is instant; a contested one gets a TXT challenge. Call: POST https://api.c.nf/v1/dns/zones. Requires a Bearer token with one of these scopes: dns:write.",
            "input_schema": {
                "type": "object",
                "properties": {
                    "zone": {
                        "type": "string",
                        "description": "The apex domain to claim, for example example.com."
                    }
                },
                "required": [
                    "zone"
                ]
            }
        },
        {
            "name": "dns_zones_get",
            "description": "One zone, with its verification instructions if it is still pending. Call: GET https://api.c.nf/v1/dns/zones/{zone}. Requires a Bearer token with one of these scopes: dns:read.",
            "input_schema": {
                "type": "object",
                "properties": {
                    "zone": {
                        "type": "string",
                        "description": "The zone apex."
                    }
                },
                "required": [
                    "zone"
                ]
            }
        },
        {
            "name": "dns_zones_verify",
            "description": "Run the verification lookup and mark the zone verified if it matches. Call: POST https://api.c.nf/v1/dns/zones/{zone}/verify. Requires a Bearer token with one of these scopes: dns:write.",
            "input_schema": {
                "type": "object",
                "properties": {
                    "zone": {
                        "type": "string",
                        "description": "The zone apex."
                    }
                },
                "required": [
                    "zone"
                ]
            }
        },
        {
            "name": "dns_zones_unclaim",
            "description": "Release a claim. The records themselves are left alone. Call: DELETE https://api.c.nf/v1/dns/zones/{zone}. Requires a Bearer token with one of these scopes: dns:write.",
            "input_schema": {
                "type": "object",
                "properties": {
                    "zone": {
                        "type": "string",
                        "description": "The zone apex."
                    }
                },
                "required": [
                    "zone"
                ]
            }
        },
        {
            "name": "dns_records_list",
            "description": "Every record in a verified zone. Call: GET https://api.c.nf/v1/dns/zones/{zone}/records. Requires a Bearer token with one of these scopes: dns:read.",
            "input_schema": {
                "type": "object",
                "properties": {
                    "zone": {
                        "type": "string",
                        "description": "The zone apex."
                    },
                    "type": {
                        "type": "string",
                        "description": "Filter by record type, for example A or MX."
                    }
                },
                "required": [
                    "zone"
                ]
            }
        },
        {
            "name": "dns_records_create",
            "description": "Add a record to a verified zone. Call: POST https://api.c.nf/v1/dns/zones/{zone}/records. Requires a Bearer token with one of these scopes: dns:write.",
            "input_schema": {
                "type": "object",
                "properties": {
                    "zone": {
                        "type": "string",
                        "description": "The zone apex."
                    },
                    "type": {
                        "type": "string",
                        "description": "A, AAAA, CNAME, MX, TXT, NS, SRV, CAA."
                    },
                    "host": {
                        "type": "string",
                        "description": "Subdomain label. Empty or @ means the apex."
                    },
                    "value": {
                        "type": "string",
                        "description": "The record value."
                    },
                    "ttl": {
                        "type": "integer",
                        "description": "Seconds. Defaults to 3600."
                    },
                    "priority": {
                        "type": "integer",
                        "description": "Required for MX and SRV."
                    }
                },
                "required": [
                    "zone",
                    "type",
                    "value"
                ]
            }
        },
        {
            "name": "dns_records_get",
            "description": "A single record. Call: GET https://api.c.nf/v1/dns/zones/{zone}/records/{id}. Requires a Bearer token with one of these scopes: dns:read.",
            "input_schema": {
                "type": "object",
                "properties": {
                    "zone": {
                        "type": "string",
                        "description": "The zone apex."
                    },
                    "id": {
                        "type": "integer",
                        "description": "The record identifier."
                    }
                },
                "required": [
                    "zone",
                    "id"
                ]
            }
        },
        {
            "name": "dns_records_update",
            "description": "Change part of a record; whatever you omit keeps its value. Call: PATCH https://api.c.nf/v1/dns/zones/{zone}/records/{id}. Requires a Bearer token with one of these scopes: dns:write.",
            "input_schema": {
                "type": "object",
                "properties": {
                    "zone": {
                        "type": "string",
                        "description": "The zone apex."
                    },
                    "id": {
                        "type": "integer",
                        "description": "The record identifier."
                    },
                    "value": {
                        "type": "string",
                        "description": "New value."
                    },
                    "ttl": {
                        "type": "integer",
                        "description": "New TTL in seconds."
                    },
                    "priority": {
                        "type": "integer",
                        "description": "New priority for MX and SRV."
                    }
                },
                "required": [
                    "zone",
                    "id"
                ]
            }
        },
        {
            "name": "dns_records_delete",
            "description": "Remove a record. Call: DELETE https://api.c.nf/v1/dns/zones/{zone}/records/{id}. Requires a Bearer token with one of these scopes: dns:write.",
            "input_schema": {
                "type": "object",
                "properties": {
                    "zone": {
                        "type": "string",
                        "description": "The zone apex."
                    },
                    "id": {
                        "type": "integer",
                        "description": "The record identifier."
                    }
                },
                "required": [
                    "zone",
                    "id"
                ]
            }
        },
        {
            "name": "cred_list",
            "description": "Stored credentials, optionally filtered by platform. Call: GET https://api.c.nf/v1/cred. Requires a Bearer token with one of these scopes: cred:read, cred:write.",
            "input_schema": {
                "type": "object",
                "properties": {
                    "platform": {
                        "type": "string",
                        "description": "Case-insensitive substring filter on the platform name."
                    }
                }
            }
        },
        {
            "name": "cred_create",
            "description": "Store a credential. Call: POST https://api.c.nf/v1/cred. Requires a Bearer token with one of these scopes: cred:write.",
            "input_schema": {
                "type": "object",
                "properties": {
                    "platform": {
                        "type": "string",
                        "description": "Site or service name. Maximum 255 characters."
                    },
                    "username": {
                        "type": "string",
                        "description": "Login name. Maximum 255 characters."
                    },
                    "password": {
                        "type": "string",
                        "description": "Secret. Maximum 4096 characters."
                    },
                    "email": {
                        "type": "string",
                        "description": "Defaults to the username."
                    },
                    "remarks": {
                        "type": "string",
                        "description": "Free-text note. Maximum 2000 characters."
                    }
                },
                "required": [
                    "platform",
                    "username",
                    "password"
                ]
            }
        },
        {
            "name": "files_list",
            "description": "Your stored files, newest first. Call: GET https://api.c.nf/v1/files. Requires a Bearer token with one of these scopes: files:read, files:write.",
            "input_schema": {
                "type": "object",
                "properties": {
                    "category": {
                        "type": "string",
                        "description": "Filter by category."
                    },
                    "visibility": {
                        "type": "string",
                        "description": "private or unlisted."
                    },
                    "limit": {
                        "type": "integer",
                        "description": "1 to 500. Defaults to 100."
                    },
                    "offset": {
                        "type": "integer",
                        "description": "Rows to skip. Defaults to 0."
                    }
                }
            }
        },
        {
            "name": "files_get",
            "description": "One file, including its share link if it has one. Call: GET https://api.c.nf/v1/files/{id}. Requires a Bearer token with one of these scopes: files:read, files:write.",
            "input_schema": {
                "type": "object",
                "properties": {
                    "id": {
                        "type": "integer",
                        "description": "The file identifier."
                    }
                },
                "required": [
                    "id"
                ]
            }
        },
        {
            "name": "files_download",
            "description": "Download a file. Call: GET https://api.c.nf/v1/files/download. Requires a Bearer token with one of these scopes: files:read, files:write.",
            "input_schema": {
                "type": "object",
                "properties": {
                    "id": {
                        "type": "integer",
                        "description": "The file identifier."
                    }
                },
                "required": [
                    "id"
                ]
            }
        },
        {
            "name": "files_upload",
            "description": "Upload a file. Call: POST https://api.c.nf/v1/files/upload. Requires a Bearer token with one of these scopes: files:write. Body encoding: multipart/form-data.",
            "input_schema": {
                "type": "object",
                "properties": {
                    "file": {
                        "type": "string",
                        "description": "The file part. Size is capped per account."
                    },
                    "category": {
                        "type": "string",
                        "description": "Optional grouping label."
                    },
                    "description": {
                        "type": "string",
                        "description": "Optional description."
                    }
                },
                "required": [
                    "file"
                ]
            }
        },
        {
            "name": "files_update",
            "description": "Edit a file’s details, including whether it is shared. Call: POST https://api.c.nf/v1/files/update. Requires a Bearer token with one of these scopes: files:write.",
            "input_schema": {
                "type": "object",
                "properties": {
                    "id": {
                        "type": "integer",
                        "description": "The file identifier."
                    },
                    "display_name": {
                        "type": "string",
                        "description": "Shown in the console and on share pages."
                    },
                    "original_name": {
                        "type": "string",
                        "description": "Filename offered on download."
                    },
                    "description": {
                        "type": "string",
                        "description": "Free-text description."
                    },
                    "category": {
                        "type": "string",
                        "description": "Grouping label."
                    },
                    "visibility": {
                        "type": "string",
                        "description": "private or unlisted. Switching to unlisted mints a share token."
                    }
                },
                "required": [
                    "id"
                ]
            }
        },
        {
            "name": "files_rename",
            "description": "Change the name a file downloads as. Call: POST https://api.c.nf/v1/files/rename. Requires a Bearer token with one of these scopes: files:write.",
            "input_schema": {
                "type": "object",
                "properties": {
                    "id": {
                        "type": "integer",
                        "description": "The file identifier."
                    },
                    "original_name": {
                        "type": "string",
                        "description": "New name. No slashes. Maximum 255 characters."
                    }
                },
                "required": [
                    "id",
                    "original_name"
                ]
            }
        },
        {
            "name": "files_delete",
            "description": "Delete a file and its contents. Call: POST https://api.c.nf/v1/files/delete. Requires a Bearer token with one of these scopes: files:write.",
            "input_schema": {
                "type": "object",
                "properties": {
                    "id": {
                        "type": "integer",
                        "description": "The file identifier."
                    }
                },
                "required": [
                    "id"
                ]
            }
        },
        {
            "name": "files_upload_chunk",
            "description": "Send one part of a large upload. Call: POST https://api.c.nf/v1/files/upload-chunk. Requires a Bearer token with one of these scopes: files:write. Body encoding: multipart/form-data.",
            "input_schema": {
                "type": "object",
                "properties": {
                    "chunk": {
                        "type": "string",
                        "description": "One part of the file, up to about 50 MB."
                    },
                    "index": {
                        "type": "integer",
                        "description": "Zero-based part number."
                    },
                    "total": {
                        "type": "integer",
                        "description": "How many parts there are, 1 to 400."
                    },
                    "filename": {
                        "type": "string",
                        "description": "Required on the first part."
                    },
                    "id": {
                        "type": "string",
                        "description": "Upload session id; omit on the first part and reuse what comes back."
                    }
                },
                "required": [
                    "chunk",
                    "index",
                    "total"
                ]
            }
        },
        {
            "name": "files_upload_finalize",
            "description": "Assemble the parts into a file. Call: POST https://api.c.nf/v1/files/upload-finalize. Requires a Bearer token with one of these scopes: files:write.",
            "input_schema": {
                "type": "object",
                "properties": {
                    "id": {
                        "type": "string",
                        "description": "The upload session id."
                    },
                    "display_name": {
                        "type": "string",
                        "description": "Label shown in the console."
                    },
                    "description": {
                        "type": "string",
                        "description": "Free-text description."
                    },
                    "category": {
                        "type": "string",
                        "description": "Grouping label."
                    },
                    "visibility": {
                        "type": "string",
                        "description": "private or unlisted."
                    }
                },
                "required": [
                    "id"
                ]
            }
        },
        {
            "name": "cdn_stats",
            "description": "Cache settings and request counts for your shared files. Call: GET https://api.c.nf/v1/cdn/stats. Requires a Bearer token with one of these scopes: cdn:read.",
            "input_schema": {
                "type": "object",
                "properties": {}
            }
        },
        {
            "name": "cdn_config",
            "description": "Set how long the edge keeps a file, or stop serving it. Call: POST https://api.c.nf/v1/cdn/config. Requires a Bearer token with one of these scopes: cdn:write.",
            "input_schema": {
                "type": "object",
                "properties": {
                    "file_id": {
                        "type": "integer",
                        "description": "One of your files, shared as unlisted."
                    },
                    "ttl": {
                        "type": "integer",
                        "description": "Edge cache lifetime in seconds, 0 to 31536000."
                    },
                    "enabled": {
                        "type": "integer",
                        "description": "1 to serve through the CDN, 0 to stop."
                    }
                },
                "required": [
                    "file_id"
                ]
            }
        },
        {
            "name": "cdn_purge",
            "description": "Drop a file from the edge cache now. Call: POST https://api.c.nf/v1/cdn/purge. Requires a Bearer token with one of these scopes: cdn:write.",
            "input_schema": {
                "type": "object",
                "properties": {
                    "file_id": {
                        "type": "integer",
                        "description": "One of your files."
                    }
                },
                "required": [
                    "file_id"
                ]
            }
        },
        {
            "name": "sms_messages",
            "description": "Messages forwarded to your account. Call: GET https://api.c.nf/v1/sms/messages. Requires a Bearer token with one of these scopes: sms:read.",
            "input_schema": {
                "type": "object",
                "properties": {
                    "since": {
                        "type": "integer",
                        "description": "Return only messages with an id above this one."
                    },
                    "limit": {
                        "type": "integer",
                        "description": "How many to return."
                    }
                }
            }
        },
        {
            "name": "sms_keys_list",
            "description": "The forwarder keys your devices use. Call: GET https://api.c.nf/v1/sms/keys. Requires a Bearer token with one of these scopes: sms:read, sms:write.",
            "input_schema": {
                "type": "object",
                "properties": {}
            }
        },
        {
            "name": "sms_keys_create",
            "description": "Issue a forwarder key. Five at a time. Call: POST https://api.c.nf/v1/sms/keys. Requires a Bearer token with one of these scopes: sms:write.",
            "input_schema": {
                "type": "object",
                "properties": {
                    "name": {
                        "type": "string",
                        "description": "A label for the device. Five keys maximum."
                    }
                }
            }
        },
        {
            "name": "sms_keys_revoke",
            "description": "Revoke a forwarder key. Call: DELETE https://api.c.nf/v1/sms/keys. Requires a Bearer token with one of these scopes: sms:write.",
            "input_schema": {
                "type": "object",
                "properties": {
                    "id": {
                        "type": "integer",
                        "description": "The forwarder key identifier."
                    }
                },
                "required": [
                    "id"
                ]
            }
        },
        {
            "name": "sites_list",
            "description": "Your static sites, most recently deployed first. Call: GET https://api.c.nf/v1/sites. Requires a Bearer token with one of these scopes: sites:read, sites:write.",
            "input_schema": {
                "type": "object",
                "properties": {}
            }
        },
        {
            "name": "sites_deploy",
            "description": "Deploy a zip as a site. Call: POST https://api.c.nf/v1/sites/deploy. Requires a Bearer token with one of these scopes: sites:write. Body encoding: multipart/form-data.",
            "input_schema": {
                "type": "object",
                "properties": {
                    "file": {
                        "type": "string",
                        "description": "A zip of the site, up to 50 MB. It is expanded into your storage."
                    },
                    "slug": {
                        "type": "string",
                        "description": "3 to 63 lowercase letters, digits or hyphens. Unique across all accounts."
                    },
                    "name": {
                        "type": "string",
                        "description": "Display name, up to 128 characters."
                    }
                },
                "required": [
                    "file",
                    "slug",
                    "name"
                ]
            }
        },
        {
            "name": "sites_delete",
            "description": "Delete a site and its files. Call: POST https://api.c.nf/v1/sites/delete. Requires a Bearer token with one of these scopes: sites:write.",
            "input_schema": {
                "type": "object",
                "properties": {
                    "id": {
                        "type": "integer",
                        "description": "The site identifier."
                    }
                },
                "required": [
                    "id"
                ]
            }
        },
        {
            "name": "deploy_list",
            "description": "Your deployments and how often each has been used. Call: GET https://api.c.nf/v1/deployments. Requires a Bearer token with one of these scopes: deploy:read, deploy:write.",
            "input_schema": {
                "type": "object",
                "properties": {}
            }
        },
        {
            "name": "deploy_toggle",
            "description": "Enable or disable a deployment. Call: POST https://api.c.nf/v1/deployments/toggle. Requires a Bearer token with one of these scopes: deploy:write.",
            "input_schema": {
                "type": "object",
                "properties": {
                    "id": {
                        "type": "integer",
                        "description": "The deployment identifier."
                    },
                    "enabled": {
                        "type": "integer",
                        "description": "1 to enable, 0 to disable."
                    }
                },
                "required": [
                    "id",
                    "enabled"
                ]
            }
        },
        {
            "name": "deploy_delete",
            "description": "Delete a deployment. Call: POST https://api.c.nf/v1/deployments/delete. Requires a Bearer token with one of these scopes: deploy:write.",
            "input_schema": {
                "type": "object",
                "properties": {
                    "id": {
                        "type": "integer",
                        "description": "The deployment identifier."
                    }
                },
                "required": [
                    "id"
                ]
            }
        },
        {
            "name": "domain_list",
            "description": "Your domains, soonest to expire first. Call: GET https://api.c.nf/v1/domains. Requires a Bearer token with one of these scopes: domain:read, domain:write.",
            "input_schema": {
                "type": "object",
                "properties": {
                    "status": {
                        "type": "string",
                        "description": "Filter by status, for example active."
                    },
                    "expiring": {
                        "type": "integer",
                        "description": "Only domains expiring within this many days."
                    },
                    "limit": {
                        "type": "integer",
                        "description": "1 to 1000. Defaults to 200."
                    },
                    "offset": {
                        "type": "integer",
                        "description": "Rows to skip."
                    }
                }
            }
        },
        {
            "name": "domain_whois_sync",
            "description": "Refresh one domain from its registry record. Call: POST https://api.c.nf/v1/domains/whois-sync. Requires a Bearer token with one of these scopes: domain:write.",
            "input_schema": {
                "type": "object",
                "properties": {
                    "udid": {
                        "type": "string",
                        "description": "The portfolio identifier of one of your domains."
                    }
                },
                "required": [
                    "udid"
                ]
            }
        },
        {
            "name": "packages_list",
            "description": "Your packages, with version counts and download totals. Call: GET https://api.c.nf/v1/packages. Requires a Bearer token with one of these scopes: packages:read, packages:write.",
            "input_schema": {
                "type": "object",
                "properties": {
                    "visibility": {
                        "type": "string",
                        "description": "public, unlisted, or private."
                    }
                }
            }
        },
        {
            "name": "packages_get",
            "description": "One package, with every version and artifact. Call: GET https://api.c.nf/v1/packages/{slug}. Requires a Bearer token with one of these scopes: packages:read, packages:write.",
            "input_schema": {
                "type": "object",
                "properties": {
                    "slug": {
                        "type": "string",
                        "description": "The package slug."
                    }
                },
                "required": [
                    "slug"
                ]
            }
        },
        {
            "name": "packages_publish",
            "description": "Publish a version, creating the package if it is new. Call: POST https://api.c.nf/v1/packages/publish. Requires a Bearer token with one of these scopes: packages:write. Body encoding: multipart/form-data.",
            "input_schema": {
                "type": "object",
                "properties": {
                    "slug": {
                        "type": "string",
                        "description": "URL-safe identifier, unique within the account."
                    },
                    "version": {
                        "type": "string",
                        "description": "Version string, for example 1.2.0."
                    },
                    "file": {
                        "type": "string",
                        "description": "The artifact to publish."
                    },
                    "name": {
                        "type": "string",
                        "description": "Display name. Defaults to the slug."
                    },
                    "description": {
                        "type": "string",
                        "description": "Short description."
                    },
                    "category": {
                        "type": "string",
                        "description": "Grouping label."
                    },
                    "visibility": {
                        "type": "string",
                        "description": "public, unlisted, or private."
                    },
                    "changelog": {
                        "type": "string",
                        "description": "Notes for this version."
                    },
                    "label": {
                        "type": "string",
                        "description": "Artifact label when a version has several files."
                    }
                },
                "required": [
                    "slug",
                    "version",
                    "file"
                ]
            }
        },
        {
            "name": "packages_update",
            "description": "Edit a package’s details. Call: POST https://api.c.nf/v1/packages/update. Requires a Bearer token with one of these scopes: packages:write.",
            "input_schema": {
                "type": "object",
                "properties": {
                    "slug": {
                        "type": "string",
                        "description": "The package slug. The slug itself cannot be changed."
                    },
                    "name": {
                        "type": "string",
                        "description": "Display name."
                    },
                    "description": {
                        "type": "string",
                        "description": "Short description."
                    },
                    "category": {
                        "type": "string",
                        "description": "Grouping label."
                    },
                    "icon": {
                        "type": "string",
                        "description": "Icon identifier."
                    },
                    "visibility": {
                        "type": "string",
                        "description": "public, unlisted, or private."
                    }
                },
                "required": [
                    "slug"
                ]
            }
        },
        {
            "name": "packages_delete",
            "description": "Delete a package, every version and every artifact. Call: POST https://api.c.nf/v1/packages/delete. Requires a Bearer token with one of these scopes: packages:write.",
            "input_schema": {
                "type": "object",
                "properties": {
                    "slug": {
                        "type": "string",
                        "description": "The package slug."
                    }
                },
                "required": [
                    "slug"
                ]
            }
        },
        {
            "name": "whois_lookup",
            "description": "Registration details for a domain. Call: GET https://api.c.nf/v1/whois. Requires a Bearer token with one of these scopes: whois:read.",
            "input_schema": {
                "type": "object",
                "properties": {
                    "domain": {
                        "type": "string",
                        "description": "The domain to look up. Unicode domains are punycoded for you."
                    }
                },
                "required": [
                    "domain"
                ]
            }
        }
    ],
    "openai_functions": [
        {
            "type": "function",
            "function": {
                "name": "public_time",
                "description": "The current UTC time in ISO 8601, RFC 2822 and Unix form. Call: GET https://api.c.nf/v1/public/time. No authentication.",
                "parameters": {
                    "type": "object",
                    "properties": {}
                }
            }
        },
        {
            "type": "function",
            "function": {
                "name": "public_timestamp",
                "description": "The current Unix timestamp, in seconds and milliseconds. Call: GET https://api.c.nf/v1/public/timestamp. No authentication.",
                "parameters": {
                    "type": "object",
                    "properties": {}
                }
            }
        },
        {
            "type": "function",
            "function": {
                "name": "public_ip",
                "description": "The address this request came from. Call: GET https://api.c.nf/v1/public/ip. No authentication.",
                "parameters": {
                    "type": "object",
                    "properties": {}
                }
            }
        },
        {
            "type": "function",
            "function": {
                "name": "public_geo",
                "description": "The country this request came from, as resolved at the edge. Call: GET https://api.c.nf/v1/public/geo. No authentication.",
                "parameters": {
                    "type": "object",
                    "properties": {}
                }
            }
        },
        {
            "type": "function",
            "function": {
                "name": "public_fx",
                "description": "Exchange rates for a base currency, refreshed hourly. Call: GET https://api.c.nf/v1/public/fx. No authentication.",
                "parameters": {
                    "type": "object",
                    "properties": {
                        "base": {
                            "type": "string",
                            "description": "ISO 4217 base currency. Defaults to USD."
                        },
                        "symbols": {
                            "type": "string",
                            "description": "Comma-separated ISO 4217 codes to return. Defaults to all."
                        }
                    }
                }
            }
        },
        {
            "type": "function",
            "function": {
                "name": "public_hash",
                "description": "Hash a string with SHA-256 or another supported algorithm. Call: GET https://api.c.nf/v1/public/hash. No authentication.",
                "parameters": {
                    "type": "object",
                    "properties": {
                        "value": {
                            "type": "string",
                            "description": "The string to hash. Maximum 8192 bytes."
                        },
                        "algo": {
                            "type": "string",
                            "description": "One of sha256, sha512, sha1, md5, crc32b. Defaults to sha256."
                        }
                    },
                    "required": [
                        "value"
                    ]
                }
            }
        },
        {
            "type": "function",
            "function": {
                "name": "account_me",
                "description": "The account behind the token, its scopes, and the endpoints they open. Call: GET https://api.c.nf/v1/account/me. Requires a Bearer token.",
                "parameters": {
                    "type": "object",
                    "properties": {}
                }
            }
        },
        {
            "type": "function",
            "function": {
                "name": "account_sessions_list",
                "description": "Every browser session currently signed in to this account. Call: GET https://api.c.nf/v1/account/sessions. Requires a Bearer token with one of these scopes: account:read.",
                "parameters": {
                    "type": "object",
                    "properties": {}
                }
            }
        },
        {
            "type": "function",
            "function": {
                "name": "account_sessions_revoke",
                "description": "Sign one session out. Call: POST https://api.c.nf/v1/account/sessions/revoke. Requires a Bearer token with one of these scopes: account:write.",
                "parameters": {
                    "type": "object",
                    "properties": {
                        "id": {
                            "type": "integer",
                            "description": "The session identifier from /v1/account/sessions."
                        }
                    },
                    "required": [
                        "id"
                    ]
                }
            }
        },
        {
            "type": "function",
            "function": {
                "name": "account_sessions_revoke_all",
                "description": "Sign every session out. Call: POST https://api.c.nf/v1/account/sessions/revoke-all. Requires a Bearer token with one of these scopes: account:write.",
                "parameters": {
                    "type": "object",
                    "properties": {}
                }
            }
        },
        {
            "type": "function",
            "function": {
                "name": "account_profile_update",
                "description": "Change your display name. Call: POST https://api.c.nf/v1/account/profile. Requires a Bearer token with one of these scopes: account:write.",
                "parameters": {
                    "type": "object",
                    "properties": {
                        "field": {
                            "type": "string",
                            "description": "Only nickname may be changed here."
                        },
                        "value": {
                            "type": "string",
                            "description": "The new display name, up to 64 characters."
                        }
                    },
                    "required": [
                        "field",
                        "value"
                    ]
                }
            }
        },
        {
            "type": "function",
            "function": {
                "name": "dns_zones_list",
                "description": "Every zone this account has claimed. Call: GET https://api.c.nf/v1/dns/zones. Requires a Bearer token with one of these scopes: dns:read.",
                "parameters": {
                    "type": "object",
                    "properties": {
                        "status": {
                            "type": "string",
                            "description": "verified, pending, or all. Defaults to all."
                        }
                    }
                }
            }
        },
        {
            "type": "function",
            "function": {
                "name": "dns_zones_claim",
                "description": "Claim a zone. An uncontested claim is instant; a contested one gets a TXT challenge. Call: POST https://api.c.nf/v1/dns/zones. Requires a Bearer token with one of these scopes: dns:write.",
                "parameters": {
                    "type": "object",
                    "properties": {
                        "zone": {
                            "type": "string",
                            "description": "The apex domain to claim, for example example.com."
                        }
                    },
                    "required": [
                        "zone"
                    ]
                }
            }
        },
        {
            "type": "function",
            "function": {
                "name": "dns_zones_get",
                "description": "One zone, with its verification instructions if it is still pending. Call: GET https://api.c.nf/v1/dns/zones/{zone}. Requires a Bearer token with one of these scopes: dns:read.",
                "parameters": {
                    "type": "object",
                    "properties": {
                        "zone": {
                            "type": "string",
                            "description": "The zone apex."
                        }
                    },
                    "required": [
                        "zone"
                    ]
                }
            }
        },
        {
            "type": "function",
            "function": {
                "name": "dns_zones_verify",
                "description": "Run the verification lookup and mark the zone verified if it matches. Call: POST https://api.c.nf/v1/dns/zones/{zone}/verify. Requires a Bearer token with one of these scopes: dns:write.",
                "parameters": {
                    "type": "object",
                    "properties": {
                        "zone": {
                            "type": "string",
                            "description": "The zone apex."
                        }
                    },
                    "required": [
                        "zone"
                    ]
                }
            }
        },
        {
            "type": "function",
            "function": {
                "name": "dns_zones_unclaim",
                "description": "Release a claim. The records themselves are left alone. Call: DELETE https://api.c.nf/v1/dns/zones/{zone}. Requires a Bearer token with one of these scopes: dns:write.",
                "parameters": {
                    "type": "object",
                    "properties": {
                        "zone": {
                            "type": "string",
                            "description": "The zone apex."
                        }
                    },
                    "required": [
                        "zone"
                    ]
                }
            }
        },
        {
            "type": "function",
            "function": {
                "name": "dns_records_list",
                "description": "Every record in a verified zone. Call: GET https://api.c.nf/v1/dns/zones/{zone}/records. Requires a Bearer token with one of these scopes: dns:read.",
                "parameters": {
                    "type": "object",
                    "properties": {
                        "zone": {
                            "type": "string",
                            "description": "The zone apex."
                        },
                        "type": {
                            "type": "string",
                            "description": "Filter by record type, for example A or MX."
                        }
                    },
                    "required": [
                        "zone"
                    ]
                }
            }
        },
        {
            "type": "function",
            "function": {
                "name": "dns_records_create",
                "description": "Add a record to a verified zone. Call: POST https://api.c.nf/v1/dns/zones/{zone}/records. Requires a Bearer token with one of these scopes: dns:write.",
                "parameters": {
                    "type": "object",
                    "properties": {
                        "zone": {
                            "type": "string",
                            "description": "The zone apex."
                        },
                        "type": {
                            "type": "string",
                            "description": "A, AAAA, CNAME, MX, TXT, NS, SRV, CAA."
                        },
                        "host": {
                            "type": "string",
                            "description": "Subdomain label. Empty or @ means the apex."
                        },
                        "value": {
                            "type": "string",
                            "description": "The record value."
                        },
                        "ttl": {
                            "type": "integer",
                            "description": "Seconds. Defaults to 3600."
                        },
                        "priority": {
                            "type": "integer",
                            "description": "Required for MX and SRV."
                        }
                    },
                    "required": [
                        "zone",
                        "type",
                        "value"
                    ]
                }
            }
        },
        {
            "type": "function",
            "function": {
                "name": "dns_records_get",
                "description": "A single record. Call: GET https://api.c.nf/v1/dns/zones/{zone}/records/{id}. Requires a Bearer token with one of these scopes: dns:read.",
                "parameters": {
                    "type": "object",
                    "properties": {
                        "zone": {
                            "type": "string",
                            "description": "The zone apex."
                        },
                        "id": {
                            "type": "integer",
                            "description": "The record identifier."
                        }
                    },
                    "required": [
                        "zone",
                        "id"
                    ]
                }
            }
        },
        {
            "type": "function",
            "function": {
                "name": "dns_records_update",
                "description": "Change part of a record; whatever you omit keeps its value. Call: PATCH https://api.c.nf/v1/dns/zones/{zone}/records/{id}. Requires a Bearer token with one of these scopes: dns:write.",
                "parameters": {
                    "type": "object",
                    "properties": {
                        "zone": {
                            "type": "string",
                            "description": "The zone apex."
                        },
                        "id": {
                            "type": "integer",
                            "description": "The record identifier."
                        },
                        "value": {
                            "type": "string",
                            "description": "New value."
                        },
                        "ttl": {
                            "type": "integer",
                            "description": "New TTL in seconds."
                        },
                        "priority": {
                            "type": "integer",
                            "description": "New priority for MX and SRV."
                        }
                    },
                    "required": [
                        "zone",
                        "id"
                    ]
                }
            }
        },
        {
            "type": "function",
            "function": {
                "name": "dns_records_delete",
                "description": "Remove a record. Call: DELETE https://api.c.nf/v1/dns/zones/{zone}/records/{id}. Requires a Bearer token with one of these scopes: dns:write.",
                "parameters": {
                    "type": "object",
                    "properties": {
                        "zone": {
                            "type": "string",
                            "description": "The zone apex."
                        },
                        "id": {
                            "type": "integer",
                            "description": "The record identifier."
                        }
                    },
                    "required": [
                        "zone",
                        "id"
                    ]
                }
            }
        },
        {
            "type": "function",
            "function": {
                "name": "cred_list",
                "description": "Stored credentials, optionally filtered by platform. Call: GET https://api.c.nf/v1/cred. Requires a Bearer token with one of these scopes: cred:read, cred:write.",
                "parameters": {
                    "type": "object",
                    "properties": {
                        "platform": {
                            "type": "string",
                            "description": "Case-insensitive substring filter on the platform name."
                        }
                    }
                }
            }
        },
        {
            "type": "function",
            "function": {
                "name": "cred_create",
                "description": "Store a credential. Call: POST https://api.c.nf/v1/cred. Requires a Bearer token with one of these scopes: cred:write.",
                "parameters": {
                    "type": "object",
                    "properties": {
                        "platform": {
                            "type": "string",
                            "description": "Site or service name. Maximum 255 characters."
                        },
                        "username": {
                            "type": "string",
                            "description": "Login name. Maximum 255 characters."
                        },
                        "password": {
                            "type": "string",
                            "description": "Secret. Maximum 4096 characters."
                        },
                        "email": {
                            "type": "string",
                            "description": "Defaults to the username."
                        },
                        "remarks": {
                            "type": "string",
                            "description": "Free-text note. Maximum 2000 characters."
                        }
                    },
                    "required": [
                        "platform",
                        "username",
                        "password"
                    ]
                }
            }
        },
        {
            "type": "function",
            "function": {
                "name": "files_list",
                "description": "Your stored files, newest first. Call: GET https://api.c.nf/v1/files. Requires a Bearer token with one of these scopes: files:read, files:write.",
                "parameters": {
                    "type": "object",
                    "properties": {
                        "category": {
                            "type": "string",
                            "description": "Filter by category."
                        },
                        "visibility": {
                            "type": "string",
                            "description": "private or unlisted."
                        },
                        "limit": {
                            "type": "integer",
                            "description": "1 to 500. Defaults to 100."
                        },
                        "offset": {
                            "type": "integer",
                            "description": "Rows to skip. Defaults to 0."
                        }
                    }
                }
            }
        },
        {
            "type": "function",
            "function": {
                "name": "files_get",
                "description": "One file, including its share link if it has one. Call: GET https://api.c.nf/v1/files/{id}. Requires a Bearer token with one of these scopes: files:read, files:write.",
                "parameters": {
                    "type": "object",
                    "properties": {
                        "id": {
                            "type": "integer",
                            "description": "The file identifier."
                        }
                    },
                    "required": [
                        "id"
                    ]
                }
            }
        },
        {
            "type": "function",
            "function": {
                "name": "files_download",
                "description": "Download a file. Call: GET https://api.c.nf/v1/files/download. Requires a Bearer token with one of these scopes: files:read, files:write.",
                "parameters": {
                    "type": "object",
                    "properties": {
                        "id": {
                            "type": "integer",
                            "description": "The file identifier."
                        }
                    },
                    "required": [
                        "id"
                    ]
                }
            }
        },
        {
            "type": "function",
            "function": {
                "name": "files_upload",
                "description": "Upload a file. Call: POST https://api.c.nf/v1/files/upload. Requires a Bearer token with one of these scopes: files:write. Body encoding: multipart/form-data.",
                "parameters": {
                    "type": "object",
                    "properties": {
                        "file": {
                            "type": "string",
                            "description": "The file part. Size is capped per account."
                        },
                        "category": {
                            "type": "string",
                            "description": "Optional grouping label."
                        },
                        "description": {
                            "type": "string",
                            "description": "Optional description."
                        }
                    },
                    "required": [
                        "file"
                    ]
                }
            }
        },
        {
            "type": "function",
            "function": {
                "name": "files_update",
                "description": "Edit a file’s details, including whether it is shared. Call: POST https://api.c.nf/v1/files/update. Requires a Bearer token with one of these scopes: files:write.",
                "parameters": {
                    "type": "object",
                    "properties": {
                        "id": {
                            "type": "integer",
                            "description": "The file identifier."
                        },
                        "display_name": {
                            "type": "string",
                            "description": "Shown in the console and on share pages."
                        },
                        "original_name": {
                            "type": "string",
                            "description": "Filename offered on download."
                        },
                        "description": {
                            "type": "string",
                            "description": "Free-text description."
                        },
                        "category": {
                            "type": "string",
                            "description": "Grouping label."
                        },
                        "visibility": {
                            "type": "string",
                            "description": "private or unlisted. Switching to unlisted mints a share token."
                        }
                    },
                    "required": [
                        "id"
                    ]
                }
            }
        },
        {
            "type": "function",
            "function": {
                "name": "files_rename",
                "description": "Change the name a file downloads as. Call: POST https://api.c.nf/v1/files/rename. Requires a Bearer token with one of these scopes: files:write.",
                "parameters": {
                    "type": "object",
                    "properties": {
                        "id": {
                            "type": "integer",
                            "description": "The file identifier."
                        },
                        "original_name": {
                            "type": "string",
                            "description": "New name. No slashes. Maximum 255 characters."
                        }
                    },
                    "required": [
                        "id",
                        "original_name"
                    ]
                }
            }
        },
        {
            "type": "function",
            "function": {
                "name": "files_delete",
                "description": "Delete a file and its contents. Call: POST https://api.c.nf/v1/files/delete. Requires a Bearer token with one of these scopes: files:write.",
                "parameters": {
                    "type": "object",
                    "properties": {
                        "id": {
                            "type": "integer",
                            "description": "The file identifier."
                        }
                    },
                    "required": [
                        "id"
                    ]
                }
            }
        },
        {
            "type": "function",
            "function": {
                "name": "files_upload_chunk",
                "description": "Send one part of a large upload. Call: POST https://api.c.nf/v1/files/upload-chunk. Requires a Bearer token with one of these scopes: files:write. Body encoding: multipart/form-data.",
                "parameters": {
                    "type": "object",
                    "properties": {
                        "chunk": {
                            "type": "string",
                            "description": "One part of the file, up to about 50 MB."
                        },
                        "index": {
                            "type": "integer",
                            "description": "Zero-based part number."
                        },
                        "total": {
                            "type": "integer",
                            "description": "How many parts there are, 1 to 400."
                        },
                        "filename": {
                            "type": "string",
                            "description": "Required on the first part."
                        },
                        "id": {
                            "type": "string",
                            "description": "Upload session id; omit on the first part and reuse what comes back."
                        }
                    },
                    "required": [
                        "chunk",
                        "index",
                        "total"
                    ]
                }
            }
        },
        {
            "type": "function",
            "function": {
                "name": "files_upload_finalize",
                "description": "Assemble the parts into a file. Call: POST https://api.c.nf/v1/files/upload-finalize. Requires a Bearer token with one of these scopes: files:write.",
                "parameters": {
                    "type": "object",
                    "properties": {
                        "id": {
                            "type": "string",
                            "description": "The upload session id."
                        },
                        "display_name": {
                            "type": "string",
                            "description": "Label shown in the console."
                        },
                        "description": {
                            "type": "string",
                            "description": "Free-text description."
                        },
                        "category": {
                            "type": "string",
                            "description": "Grouping label."
                        },
                        "visibility": {
                            "type": "string",
                            "description": "private or unlisted."
                        }
                    },
                    "required": [
                        "id"
                    ]
                }
            }
        },
        {
            "type": "function",
            "function": {
                "name": "cdn_stats",
                "description": "Cache settings and request counts for your shared files. Call: GET https://api.c.nf/v1/cdn/stats. Requires a Bearer token with one of these scopes: cdn:read.",
                "parameters": {
                    "type": "object",
                    "properties": {}
                }
            }
        },
        {
            "type": "function",
            "function": {
                "name": "cdn_config",
                "description": "Set how long the edge keeps a file, or stop serving it. Call: POST https://api.c.nf/v1/cdn/config. Requires a Bearer token with one of these scopes: cdn:write.",
                "parameters": {
                    "type": "object",
                    "properties": {
                        "file_id": {
                            "type": "integer",
                            "description": "One of your files, shared as unlisted."
                        },
                        "ttl": {
                            "type": "integer",
                            "description": "Edge cache lifetime in seconds, 0 to 31536000."
                        },
                        "enabled": {
                            "type": "integer",
                            "description": "1 to serve through the CDN, 0 to stop."
                        }
                    },
                    "required": [
                        "file_id"
                    ]
                }
            }
        },
        {
            "type": "function",
            "function": {
                "name": "cdn_purge",
                "description": "Drop a file from the edge cache now. Call: POST https://api.c.nf/v1/cdn/purge. Requires a Bearer token with one of these scopes: cdn:write.",
                "parameters": {
                    "type": "object",
                    "properties": {
                        "file_id": {
                            "type": "integer",
                            "description": "One of your files."
                        }
                    },
                    "required": [
                        "file_id"
                    ]
                }
            }
        },
        {
            "type": "function",
            "function": {
                "name": "sms_messages",
                "description": "Messages forwarded to your account. Call: GET https://api.c.nf/v1/sms/messages. Requires a Bearer token with one of these scopes: sms:read.",
                "parameters": {
                    "type": "object",
                    "properties": {
                        "since": {
                            "type": "integer",
                            "description": "Return only messages with an id above this one."
                        },
                        "limit": {
                            "type": "integer",
                            "description": "How many to return."
                        }
                    }
                }
            }
        },
        {
            "type": "function",
            "function": {
                "name": "sms_keys_list",
                "description": "The forwarder keys your devices use. Call: GET https://api.c.nf/v1/sms/keys. Requires a Bearer token with one of these scopes: sms:read, sms:write.",
                "parameters": {
                    "type": "object",
                    "properties": {}
                }
            }
        },
        {
            "type": "function",
            "function": {
                "name": "sms_keys_create",
                "description": "Issue a forwarder key. Five at a time. Call: POST https://api.c.nf/v1/sms/keys. Requires a Bearer token with one of these scopes: sms:write.",
                "parameters": {
                    "type": "object",
                    "properties": {
                        "name": {
                            "type": "string",
                            "description": "A label for the device. Five keys maximum."
                        }
                    }
                }
            }
        },
        {
            "type": "function",
            "function": {
                "name": "sms_keys_revoke",
                "description": "Revoke a forwarder key. Call: DELETE https://api.c.nf/v1/sms/keys. Requires a Bearer token with one of these scopes: sms:write.",
                "parameters": {
                    "type": "object",
                    "properties": {
                        "id": {
                            "type": "integer",
                            "description": "The forwarder key identifier."
                        }
                    },
                    "required": [
                        "id"
                    ]
                }
            }
        },
        {
            "type": "function",
            "function": {
                "name": "sites_list",
                "description": "Your static sites, most recently deployed first. Call: GET https://api.c.nf/v1/sites. Requires a Bearer token with one of these scopes: sites:read, sites:write.",
                "parameters": {
                    "type": "object",
                    "properties": {}
                }
            }
        },
        {
            "type": "function",
            "function": {
                "name": "sites_deploy",
                "description": "Deploy a zip as a site. Call: POST https://api.c.nf/v1/sites/deploy. Requires a Bearer token with one of these scopes: sites:write. Body encoding: multipart/form-data.",
                "parameters": {
                    "type": "object",
                    "properties": {
                        "file": {
                            "type": "string",
                            "description": "A zip of the site, up to 50 MB. It is expanded into your storage."
                        },
                        "slug": {
                            "type": "string",
                            "description": "3 to 63 lowercase letters, digits or hyphens. Unique across all accounts."
                        },
                        "name": {
                            "type": "string",
                            "description": "Display name, up to 128 characters."
                        }
                    },
                    "required": [
                        "file",
                        "slug",
                        "name"
                    ]
                }
            }
        },
        {
            "type": "function",
            "function": {
                "name": "sites_delete",
                "description": "Delete a site and its files. Call: POST https://api.c.nf/v1/sites/delete. Requires a Bearer token with one of these scopes: sites:write.",
                "parameters": {
                    "type": "object",
                    "properties": {
                        "id": {
                            "type": "integer",
                            "description": "The site identifier."
                        }
                    },
                    "required": [
                        "id"
                    ]
                }
            }
        },
        {
            "type": "function",
            "function": {
                "name": "deploy_list",
                "description": "Your deployments and how often each has been used. Call: GET https://api.c.nf/v1/deployments. Requires a Bearer token with one of these scopes: deploy:read, deploy:write.",
                "parameters": {
                    "type": "object",
                    "properties": {}
                }
            }
        },
        {
            "type": "function",
            "function": {
                "name": "deploy_toggle",
                "description": "Enable or disable a deployment. Call: POST https://api.c.nf/v1/deployments/toggle. Requires a Bearer token with one of these scopes: deploy:write.",
                "parameters": {
                    "type": "object",
                    "properties": {
                        "id": {
                            "type": "integer",
                            "description": "The deployment identifier."
                        },
                        "enabled": {
                            "type": "integer",
                            "description": "1 to enable, 0 to disable."
                        }
                    },
                    "required": [
                        "id",
                        "enabled"
                    ]
                }
            }
        },
        {
            "type": "function",
            "function": {
                "name": "deploy_delete",
                "description": "Delete a deployment. Call: POST https://api.c.nf/v1/deployments/delete. Requires a Bearer token with one of these scopes: deploy:write.",
                "parameters": {
                    "type": "object",
                    "properties": {
                        "id": {
                            "type": "integer",
                            "description": "The deployment identifier."
                        }
                    },
                    "required": [
                        "id"
                    ]
                }
            }
        },
        {
            "type": "function",
            "function": {
                "name": "domain_list",
                "description": "Your domains, soonest to expire first. Call: GET https://api.c.nf/v1/domains. Requires a Bearer token with one of these scopes: domain:read, domain:write.",
                "parameters": {
                    "type": "object",
                    "properties": {
                        "status": {
                            "type": "string",
                            "description": "Filter by status, for example active."
                        },
                        "expiring": {
                            "type": "integer",
                            "description": "Only domains expiring within this many days."
                        },
                        "limit": {
                            "type": "integer",
                            "description": "1 to 1000. Defaults to 200."
                        },
                        "offset": {
                            "type": "integer",
                            "description": "Rows to skip."
                        }
                    }
                }
            }
        },
        {
            "type": "function",
            "function": {
                "name": "domain_whois_sync",
                "description": "Refresh one domain from its registry record. Call: POST https://api.c.nf/v1/domains/whois-sync. Requires a Bearer token with one of these scopes: domain:write.",
                "parameters": {
                    "type": "object",
                    "properties": {
                        "udid": {
                            "type": "string",
                            "description": "The portfolio identifier of one of your domains."
                        }
                    },
                    "required": [
                        "udid"
                    ]
                }
            }
        },
        {
            "type": "function",
            "function": {
                "name": "packages_list",
                "description": "Your packages, with version counts and download totals. Call: GET https://api.c.nf/v1/packages. Requires a Bearer token with one of these scopes: packages:read, packages:write.",
                "parameters": {
                    "type": "object",
                    "properties": {
                        "visibility": {
                            "type": "string",
                            "description": "public, unlisted, or private."
                        }
                    }
                }
            }
        },
        {
            "type": "function",
            "function": {
                "name": "packages_get",
                "description": "One package, with every version and artifact. Call: GET https://api.c.nf/v1/packages/{slug}. Requires a Bearer token with one of these scopes: packages:read, packages:write.",
                "parameters": {
                    "type": "object",
                    "properties": {
                        "slug": {
                            "type": "string",
                            "description": "The package slug."
                        }
                    },
                    "required": [
                        "slug"
                    ]
                }
            }
        },
        {
            "type": "function",
            "function": {
                "name": "packages_publish",
                "description": "Publish a version, creating the package if it is new. Call: POST https://api.c.nf/v1/packages/publish. Requires a Bearer token with one of these scopes: packages:write. Body encoding: multipart/form-data.",
                "parameters": {
                    "type": "object",
                    "properties": {
                        "slug": {
                            "type": "string",
                            "description": "URL-safe identifier, unique within the account."
                        },
                        "version": {
                            "type": "string",
                            "description": "Version string, for example 1.2.0."
                        },
                        "file": {
                            "type": "string",
                            "description": "The artifact to publish."
                        },
                        "name": {
                            "type": "string",
                            "description": "Display name. Defaults to the slug."
                        },
                        "description": {
                            "type": "string",
                            "description": "Short description."
                        },
                        "category": {
                            "type": "string",
                            "description": "Grouping label."
                        },
                        "visibility": {
                            "type": "string",
                            "description": "public, unlisted, or private."
                        },
                        "changelog": {
                            "type": "string",
                            "description": "Notes for this version."
                        },
                        "label": {
                            "type": "string",
                            "description": "Artifact label when a version has several files."
                        }
                    },
                    "required": [
                        "slug",
                        "version",
                        "file"
                    ]
                }
            }
        },
        {
            "type": "function",
            "function": {
                "name": "packages_update",
                "description": "Edit a package’s details. Call: POST https://api.c.nf/v1/packages/update. Requires a Bearer token with one of these scopes: packages:write.",
                "parameters": {
                    "type": "object",
                    "properties": {
                        "slug": {
                            "type": "string",
                            "description": "The package slug. The slug itself cannot be changed."
                        },
                        "name": {
                            "type": "string",
                            "description": "Display name."
                        },
                        "description": {
                            "type": "string",
                            "description": "Short description."
                        },
                        "category": {
                            "type": "string",
                            "description": "Grouping label."
                        },
                        "icon": {
                            "type": "string",
                            "description": "Icon identifier."
                        },
                        "visibility": {
                            "type": "string",
                            "description": "public, unlisted, or private."
                        }
                    },
                    "required": [
                        "slug"
                    ]
                }
            }
        },
        {
            "type": "function",
            "function": {
                "name": "packages_delete",
                "description": "Delete a package, every version and every artifact. Call: POST https://api.c.nf/v1/packages/delete. Requires a Bearer token with one of these scopes: packages:write.",
                "parameters": {
                    "type": "object",
                    "properties": {
                        "slug": {
                            "type": "string",
                            "description": "The package slug."
                        }
                    },
                    "required": [
                        "slug"
                    ]
                }
            }
        },
        {
            "type": "function",
            "function": {
                "name": "whois_lookup",
                "description": "Registration details for a domain. Call: GET https://api.c.nf/v1/whois. Requires a Bearer token with one of these scopes: whois:read.",
                "parameters": {
                    "type": "object",
                    "properties": {
                        "domain": {
                            "type": "string",
                            "description": "The domain to look up. Unicode domains are punycoded for you."
                        }
                    },
                    "required": [
                        "domain"
                    ]
                }
            }
        }
    ]
}