{
  "openapi": "3.1.0",
  "info": {
    "title": "Camoo Generic EPP Client API Reference",
    "summary": "PHP OOP EPP Client & Registry Protocol Interface",
    "description": "# Camoo Generic EPP Client API Specification\n\nThis specification documents the public API and data contract of the **Camoo Generic EPP Client** (`camoo/epp-generic`).\n\n> **Note on Protocol Transport:**\n> The underlying library communicates directly with domain registries over **RFC 5734 TCP/TLS socket transport (Port 700)** with 4-byte framing.\n> This OpenAPI specification models the **PHP OOP API operations and data payloads as RPC endpoints**, making it easy for developers to explore request parameters, required attributes, response models, and registry workflows.\n",
    "version": "1.0.1",
    "contact": {
      "name": "Camoo Support",
      "url": "https://www.camoo.cm/contact-us",
      "email": "support@camoo.cm"
    },
    "license": {
      "name": "Commercial License",
      "url": "https://www.camoo.cm/products/epp-client"
    }
  },
  "servers": [
    {
      "url": "epp://registry.cm:700",
      "description": "Direct Registry TCP/TLS Connection (RFC 5734)"
    },
    {
      "url": "sdk://camoo/epp-generic",
      "description": "Local PHP OOP Package (In-Process)"
    }
  ],
  "tags": [
    {
      "name": "Domains",
      "description": "RFC 5731 Domain registration, queries, renewals, transfers, and updates"
    },
    {
      "name": "Contacts",
      "description": "RFC 5733 Contact object creation, updates, and lookups"
    },
    {
      "name": "Hosts",
      "description": "RFC 5732 Nameserver and glue IP address management"
    },
    {
      "name": "Session & Poll",
      "description": "RFC 5730 Session management, health checks (hello/ping), and poll queue handling"
    }
  ],
  "paths": {
    "/domains/check": {
      "post": {
        "tags": [
          "Domains"
        ],
        "summary": "Check domain availability (domainCheck)",
        "description": "Checks if one or multiple domain names are available for registration.\n\n**PHP Signature:**\n```php\n$response = $client->domainCheck(string|array $domains);\n```\n",
        "operationId": "domainCheck",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "domains"
                ],
                "properties": {
                  "domains": {
                    "oneOf": [
                      {
                        "type": "string",
                        "example": "example.cm"
                      },
                      {
                        "type": "array",
                        "items": {
                          "type": "string"
                        },
                        "example": [
                          "example.cm",
                          "test.cm"
                        ]
                      }
                    ]
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "EppResponse with domain availability check results",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EppResponse"
                },
                "example": {
                  "success": true,
                  "code": 1000,
                  "message": "Command completed successfully",
                  "clTRID": "REG-65b128",
                  "svTRID": "REGISTRY-99120",
                  "domainCheckData": [
                    {
                      "name": "example.cm",
                      "avail": 1
                    }
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/domains/info": {
      "post": {
        "tags": [
          "Domains"
        ],
        "summary": "Retrieve domain details (domainInfo)",
        "description": "Retrieves detailed information about a registered domain, including status codes, registrant, contacts, nameservers, and expiration dates.\n\n**PHP Signature:**\n```php\n$response = $client->domainInfo(string $domain, ?string $authInfo = null);\n```\n",
        "operationId": "domainInfo",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "domain"
                ],
                "properties": {
                  "domain": {
                    "type": "string",
                    "example": "example.cm"
                  },
                  "authInfo": {
                    "type": "string",
                    "nullable": true,
                    "description": "Optional authorization code if required by registry for info queries",
                    "example": "Secr3t!Auth"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "EppResponse containing domain details",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EppResponse"
                },
                "example": {
                  "success": true,
                  "code": 1000,
                  "message": "Command completed successfully",
                  "domainInfoData": {
                    "name": "example.cm",
                    "roid": "EXAMPLE1-CM",
                    "status": [
                      "ok",
                      "clientTransferProhibited"
                    ],
                    "registrant": "REG-CONT-01",
                    "contact": {
                      "admin": "REG-CONT-01",
                      "tech": "REG-CONT-01"
                    },
                    "ns": [
                      "ns1.example.cm",
                      "ns2.example.cm"
                    ],
                    "clID": "CAMOO-REG",
                    "crDate": "2024-01-15T10:00:00Z",
                    "exDate": "2025-01-15T10:00:00Z"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/domains/create": {
      "post": {
        "tags": [
          "Domains"
        ],
        "summary": "Register domain (domainCreate)",
        "description": "Registers a new domain name with registrant handle, optional nameservers, contacts, and registration period.\n\n**PHP Signature:**\n```php\n$response = $client->domainCreate(array $params);\n```\n",
        "operationId": "domainCreate",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DomainCreateParams"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Domain registered successfully",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EppResponse"
                },
                "example": {
                  "success": true,
                  "code": 1000,
                  "message": "Command completed successfully",
                  "clTRID": "REG-712891",
                  "svTRID": "REGISTRY-33214"
                }
              }
            }
          }
        }
      }
    },
    "/domains/renew": {
      "post": {
        "tags": [
          "Domains"
        ],
        "summary": "Renew domain (domainRenew)",
        "description": "Renews a domain registration for a specified number of years.\n\n**PHP Signature:**\n```php\n$response = $client->domainRenew(string $domain, string $currentExpiryDate, int $periodYears = 1);\n```\n",
        "operationId": "domainRenew",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "domain",
                  "currentExpiryDate"
                ],
                "properties": {
                  "domain": {
                    "type": "string",
                    "example": "example.cm"
                  },
                  "currentExpiryDate": {
                    "type": "string",
                    "format": "date",
                    "description": "Current expiration date formatted as YYYY-MM-DD",
                    "example": "2025-01-15"
                  },
                  "periodYears": {
                    "type": "integer",
                    "default": 1,
                    "minimum": 1,
                    "example": 1
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Domain renewed successfully",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EppResponse"
                }
              }
            }
          }
        }
      }
    },
    "/domains/transfer": {
      "post": {
        "tags": [
          "Domains"
        ],
        "summary": "Transfer domain (domainTransfer)",
        "description": "Requests a domain transfer from another registrar using an authorization code (EPP key).\n\n**PHP Signature:**\n```php\n$response = $client->domainTransfer(string $domain, string $authInfo, int $periodYears = 1);\n```\n",
        "operationId": "domainTransfer",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "domain",
                  "authInfo"
                ],
                "properties": {
                  "domain": {
                    "type": "string",
                    "example": "example.cm"
                  },
                  "authInfo": {
                    "type": "string",
                    "description": "Authorization code (transfer secret)",
                    "example": "TransferKey!2026"
                  },
                  "periodYears": {
                    "type": "integer",
                    "default": 1,
                    "example": 1
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Domain transfer initiated",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EppResponse"
                }
              }
            }
          }
        }
      }
    },
    "/domains/delete": {
      "post": {
        "tags": [
          "Domains"
        ],
        "summary": "Delete domain (domainDelete)",
        "description": "Requests immediate deletion of a domain name.\n\n**PHP Signature:**\n```php\n$response = $client->domainDelete(string $domain);\n```\n",
        "operationId": "domainDelete",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "domain"
                ],
                "properties": {
                  "domain": {
                    "type": "string",
                    "example": "example.cm"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Domain deleted",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EppResponse"
                }
              }
            }
          }
        }
      }
    },
    "/domains/restore": {
      "post": {
        "tags": [
          "Domains"
        ],
        "summary": "Restore domain (domainRestore)",
        "description": "Requests restoration of a domain in redemption or pending delete period.\n\n**PHP Signature:**\n```php\n$response = $client->domainRestore(string $domain);\n```\n",
        "operationId": "domainRestore",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "domain"
                ],
                "properties": {
                  "domain": {
                    "type": "string",
                    "example": "example.cm"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Domain restoration request sent",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EppResponse"
                }
              }
            }
          }
        }
      }
    },
    "/domains/update-nameservers": {
      "post": {
        "tags": [
          "Domains"
        ],
        "summary": "Update domain nameservers (domainUpdateNameservers)",
        "description": "Adds and/or removes authoritative nameservers on a domain.\n\n**PHP Signature:**\n```php\n$response = $client->domainUpdateNameservers(string $domain, array $nameservers, array $removeNameservers = []);\n```\n",
        "operationId": "domainUpdateNameservers",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "domain",
                  "nameservers"
                ],
                "properties": {
                  "domain": {
                    "type": "string",
                    "example": "example.cm"
                  },
                  "nameservers": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "Nameservers to add",
                    "example": [
                      "ns1.newhost.cm",
                      "ns2.newhost.cm"
                    ]
                  },
                  "removeNameservers": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "Nameservers to remove",
                    "example": [
                      "ns1.oldhost.cm"
                    ]
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Nameservers updated successfully",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EppResponse"
                }
              }
            }
          }
        }
      }
    },
    "/domains/update-contacts": {
      "post": {
        "tags": [
          "Domains"
        ],
        "summary": "Update domain contacts (domainUpdateContacts)",
        "description": "Replaces domain contact handles (admin, tech, billing) using old vs new maps.\n\n**PHP Signature:**\n```php\n$response = $client->domainUpdateContacts(string $domain, array $old, array $new);\n```\n",
        "operationId": "domainUpdateContacts",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "domain",
                  "old",
                  "new"
                ],
                "properties": {
                  "domain": {
                    "type": "string",
                    "example": "example.cm"
                  },
                  "old": {
                    "type": "object",
                    "additionalProperties": {
                      "type": "string"
                    },
                    "example": {
                      "admin": "OLD-ADMIN-01"
                    }
                  },
                  "new": {
                    "type": "object",
                    "additionalProperties": {
                      "type": "string"
                    },
                    "example": {
                      "admin": "NEW-ADMIN-02"
                    }
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Contacts updated",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EppResponse"
                }
              }
            }
          }
        }
      }
    },
    "/domains/theft-protection": {
      "post": {
        "tags": [
          "Domains"
        ],
        "summary": "Toggle transfer lock / theft protection (domainUpdateTheftProtection)",
        "description": "Adds or removes the `clientTransferProhibited` status on the domain.\n\n**PHP Signature:**\n```php\n$response = $client->domainUpdateTheftProtection(string $domain, bool $enabled);\n```\n",
        "operationId": "domainUpdateTheftProtection",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "domain",
                  "enabled"
                ],
                "properties": {
                  "domain": {
                    "type": "string",
                    "example": "example.cm"
                  },
                  "enabled": {
                    "type": "boolean",
                    "description": "True to lock (prohibit transfer), false to unlock",
                    "example": true
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Theft protection status updated",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EppResponse"
                }
              }
            }
          }
        }
      }
    },
    "/domains/dnssec": {
      "post": {
        "tags": [
          "Domains"
        ],
        "summary": "Manage DNSSEC SecDNS records (domainUpdateDnssec)",
        "description": "Adds or removes SecDNS delegation signer (DS) records on a domain.\n\n**PHP Signature:**\n```php\n$response = $client->domainUpdateDnssec(string $domain, array $records, string $action = 'add');\n```\n",
        "operationId": "domainUpdateDnssec",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "domain",
                  "records"
                ],
                "properties": {
                  "domain": {
                    "type": "string",
                    "example": "example.cm"
                  },
                  "records": {
                    "type": "array",
                    "items": {
                      "$ref": "#/components/schemas/DnssecRecord"
                    }
                  },
                  "action": {
                    "type": "string",
                    "enum": [
                      "add",
                      "rem"
                    ],
                    "default": "add",
                    "example": "add"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "DNSSEC records updated",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EppResponse"
                }
              }
            }
          }
        }
      }
    },
    "/contacts/check": {
      "post": {
        "tags": [
          "Contacts"
        ],
        "summary": "Check contact handle availability (contactCheck)",
        "description": "Checks if one or multiple contact identifiers are available.\n\n**PHP Signature:**\n```php\n$response = $client->contactCheck(string|array $contactIds);\n```\n",
        "operationId": "contactCheck",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "contactIds"
                ],
                "properties": {
                  "contactIds": {
                    "oneOf": [
                      {
                        "type": "string",
                        "example": "REG-CONT-01"
                      },
                      {
                        "type": "array",
                        "items": {
                          "type": "string"
                        },
                        "example": [
                          "REG-CONT-01",
                          "REG-CONT-02"
                        ]
                      }
                    ]
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Contact availability check result",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EppResponse"
                }
              }
            }
          }
        }
      }
    },
    "/contacts/info": {
      "post": {
        "tags": [
          "Contacts"
        ],
        "summary": "Read contact details (contactInfo)",
        "description": "Retrieves full details for a contact handle.\n\n**PHP Signature:**\n```php\n$response = $client->contactInfo(string $contactId, ?string $authInfo = null);\n```\n",
        "operationId": "contactInfo",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "contactId"
                ],
                "properties": {
                  "contactId": {
                    "type": "string",
                    "example": "REG-CONT-01"
                  },
                  "authInfo": {
                    "type": "string",
                    "nullable": true,
                    "example": null
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Contact details",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EppResponse"
                }
              }
            }
          }
        }
      }
    },
    "/contacts/create": {
      "post": {
        "tags": [
          "Contacts"
        ],
        "summary": "Create contact (contactCreate)",
        "description": "Registers a new contact object with postal address, voice, and email.\n\n**PHP Signature:**\n```php\n$response = $client->contactCreate(array $params);\n```\n",
        "operationId": "contactCreate",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ContactCreateParams"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Contact created successfully",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EppResponse"
                }
              }
            }
          }
        }
      }
    },
    "/contacts/update": {
      "post": {
        "tags": [
          "Contacts"
        ],
        "summary": "Update contact (contactUpdate)",
        "description": "Updates attributes of an existing contact handle.\n\n**PHP Signature:**\n```php\n$response = $client->contactUpdate(array $params);\n```\n",
        "operationId": "contactUpdate",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "id"
                ],
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "Contact handle to update",
                    "example": "REG-CONT-01"
                  },
                  "email": {
                    "type": "string",
                    "example": "new-email@example.cm"
                  },
                  "voice": {
                    "type": "string",
                    "example": "+237699999999"
                  },
                  "city": {
                    "type": "string",
                    "example": "Douala"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Contact updated",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EppResponse"
                }
              }
            }
          }
        }
      }
    },
    "/contacts/delete": {
      "post": {
        "tags": [
          "Contacts"
        ],
        "summary": "Delete contact (contactDelete)",
        "description": "Deletes an unlinked contact handle.\n\n**PHP Signature:**\n```php\n$response = $client->contactDelete(string $contactId);\n```\n",
        "operationId": "contactDelete",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "contactId"
                ],
                "properties": {
                  "contactId": {
                    "type": "string",
                    "example": "REG-CONT-01"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Contact deleted",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EppResponse"
                }
              }
            }
          }
        }
      }
    },
    "/hosts/check": {
      "post": {
        "tags": [
          "Hosts"
        ],
        "summary": "Check nameserver availability (hostCheck)",
        "description": "Checks if one or multiple nameserver hosts exist.\n\n**PHP Signature:**\n```php\n$response = $client->hostCheck(string|array $hosts);\n```\n",
        "operationId": "hostCheck",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "hosts"
                ],
                "properties": {
                  "hosts": {
                    "oneOf": [
                      {
                        "type": "string",
                        "example": "ns1.example.cm"
                      },
                      {
                        "type": "array",
                        "items": {
                          "type": "string"
                        },
                        "example": [
                          "ns1.example.cm",
                          "ns2.example.cm"
                        ]
                      }
                    ]
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Host check result",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EppResponse"
                }
              }
            }
          }
        }
      }
    },
    "/hosts/info": {
      "post": {
        "tags": [
          "Hosts"
        ],
        "summary": "Read nameserver details (hostInfo)",
        "description": "Retrieves nameserver host status and associated glue IP addresses.\n\n**PHP Signature:**\n```php\n$response = $client->hostInfo(string $host);\n```\n",
        "operationId": "hostInfo",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "host"
                ],
                "properties": {
                  "host": {
                    "type": "string",
                    "example": "ns1.example.cm"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Host info",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EppResponse"
                }
              }
            }
          }
        }
      }
    },
    "/hosts/create": {
      "post": {
        "tags": [
          "Hosts"
        ],
        "summary": "Create nameserver with glue IPs (hostCreate)",
        "description": "Creates a new nameserver host with optional IPv4 / IPv6 glue records.\n\n**PHP Signature:**\n```php\n$response = $client->hostCreate(string $host, array $ipAddresses = []);\n```\n",
        "operationId": "hostCreate",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "host"
                ],
                "properties": {
                  "host": {
                    "type": "string",
                    "example": "ns1.example.cm"
                  },
                  "ipAddresses": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "IPv4 or IPv6 glue addresses",
                    "example": [
                      "195.24.205.10",
                      "2001:db8::1"
                    ]
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Host created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EppResponse"
                }
              }
            }
          }
        }
      }
    },
    "/hosts/delete": {
      "post": {
        "tags": [
          "Hosts"
        ],
        "summary": "Delete nameserver (hostDelete)",
        "description": "Deletes an unused nameserver host.\n\n**PHP Signature:**\n```php\n$response = $client->hostDelete(string $host);\n```\n",
        "operationId": "hostDelete",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "host"
                ],
                "properties": {
                  "host": {
                    "type": "string",
                    "example": "ns1.example.cm"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Host deleted",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EppResponse"
                }
              }
            }
          }
        }
      }
    },
    "/session/ping": {
      "post": {
        "tags": [
          "Session & Poll"
        ],
        "summary": "Send EPP Hello ping (ping)",
        "description": "Sends an EPP `<hello>` frame to test connection liveness.\n\n**PHP Signature:**\n```php\n$response = $client->ping();\n```\n",
        "operationId": "ping",
        "responses": {
          "200": {
            "description": "Greeting received",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EppResponse"
                }
              }
            }
          }
        }
      }
    },
    "/session/poll-req": {
      "post": {
        "tags": [
          "Session & Poll"
        ],
        "summary": "Request next poll message (pollReq)",
        "description": "Retrieves the next queued notification message from the registry poll queue.\n\n**PHP Signature:**\n```php\n$response = $client->pollReq();\n```\n",
        "operationId": "pollReq",
        "responses": {
          "200": {
            "description": "Poll queue message",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EppResponse"
                }
              }
            }
          }
        }
      }
    },
    "/session/poll-ack": {
      "post": {
        "tags": [
          "Session & Poll"
        ],
        "summary": "Acknowledge poll message (pollAck)",
        "description": "Acknowledges and removes a message from the registry queue by its message ID.\n\n**PHP Signature:**\n```php\n$response = $client->pollAck(string $msgId);\n```\n",
        "operationId": "pollAck",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "msgId"
                ],
                "properties": {
                  "msgId": {
                    "type": "string",
                    "example": "12345"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Poll message acknowledged",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EppResponse"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "DomainCreateParams": {
        "type": "object",
        "required": [
          "name",
          "registrant"
        ],
        "properties": {
          "name": {
            "type": "string",
            "description": "Domain name to register",
            "example": "example.cm"
          },
          "registrant": {
            "type": "string",
            "description": "Registrant contact handle",
            "example": "REG-CONT-01"
          },
          "period": {
            "type": "integer",
            "default": 1,
            "description": "Registration period in years",
            "example": 1
          },
          "ns": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Authoritative nameservers",
            "example": [
              "ns1.example.cm",
              "ns2.example.cm"
            ]
          },
          "contacts": {
            "type": "object",
            "description": "Additional domain contacts (admin, tech, billing)",
            "properties": {
              "admin": {
                "type": "string",
                "example": "REG-CONT-01"
              },
              "tech": {
                "type": "string",
                "example": "REG-CONT-01"
              },
              "billing": {
                "type": "string",
                "example": "REG-CONT-01"
              }
            }
          },
          "authInfo": {
            "type": "string",
            "description": "Custom authorization password (generated if omitted)",
            "example": "RandomStr0ngPass!"
          }
        }
      },
      "ContactCreateParams": {
        "type": "object",
        "required": [
          "name",
          "email",
          "voice",
          "street",
          "city",
          "cc"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "Custom contact handle (auto-generated if omitted)",
            "example": "REG-CONT-01"
          },
          "name": {
            "type": "string",
            "description": "Contact full name",
            "example": "Jean Dupont"
          },
          "org": {
            "type": "string",
            "description": "Organization name (optional)",
            "example": "Camoo SARL"
          },
          "email": {
            "type": "string",
            "format": "email",
            "example": "admin@example.cm"
          },
          "voice": {
            "type": "string",
            "description": "Telephone number in ITU format (+CC.NNNNNNNN)",
            "example": "+237.600000000"
          },
          "fax": {
            "type": "string",
            "description": "Fax number (optional)",
            "example": "+237.600000001"
          },
          "street": {
            "type": "string",
            "description": "Street address",
            "example": "1 Registry Street"
          },
          "city": {
            "type": "string",
            "example": "Yaounde"
          },
          "sp": {
            "type": "string",
            "description": "State / Province",
            "example": "Centre"
          },
          "pc": {
            "type": "string",
            "description": "Postal code",
            "example": "00000"
          },
          "cc": {
            "type": "string",
            "description": "Two-letter ISO country code",
            "example": "CM"
          },
          "authInfo": {
            "type": "string",
            "description": "Contact authorization code (optional)",
            "example": "AuthPass123!"
          }
        }
      },
      "DnssecRecord": {
        "type": "object",
        "required": [
          "keyTag",
          "algorithm",
          "digestType",
          "digest"
        ],
        "properties": {
          "keyTag": {
            "type": "integer",
            "example": 12345
          },
          "algorithm": {
            "type": "integer",
            "description": "DNSSEC Algorithm (e.g. 8 for RSA/SHA-256, 13 for ECDSA P-256)",
            "example": 13
          },
          "digestType": {
            "type": "integer",
            "description": "Digest type (e.g. 2 for SHA-256)",
            "example": 2
          },
          "digest": {
            "type": "string",
            "description": "Hexadecimal digest string",
            "example": "49FD46E6C4B45C55D4AC49DA1B7728F6B8660EC3BB3A36E154766C4EB352C6F8"
          }
        }
      },
      "EppResponse": {
        "type": "object",
        "properties": {
          "success": {
            "type": "boolean",
            "description": "True if EPP return code is between 1000 and 1999",
            "example": true
          },
          "code": {
            "type": "integer",
            "description": "Standard RFC 5730 result code (e.g. 1000 = success, 2303 = object does not exist)",
            "example": 1000
          },
          "message": {
            "type": "string",
            "description": "Registry result description",
            "example": "Command completed successfully"
          },
          "clTRID": {
            "type": "string",
            "description": "Client Transaction ID",
            "example": "REG-65b128"
          },
          "svTRID": {
            "type": "string",
            "description": "Server Transaction ID",
            "example": "REGISTRY-99120"
          },
          "rawXml": {
            "type": "string",
            "description": "Full raw EPP XML response received over the wire",
            "example": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>..."
          }
        }
      }
    }
  }
}