{"openapi":"3.1.0","info":{"title":"Converge Cloud — Cloud File Storage (cfs)","version":"2019-07-19","summary":"7 actions.","description":"Endpoint `https://cfs.api3.convergecloud.com`, region `luzon`, `X-TC-Version: 2019-07-19`.\n\nA wrong `X-TC-Version` returns `InvalidAction`, which is indistinguishable from a missing action — this was the single largest source of false “absent” verdicts in our own measurements."},"servers":[{"url":"https://cfs.api3.convergecloud.com","description":"Converge Cloud production (luzon — the only region)"}],"x-cc-wire-protocol":{"style":"RPC over HTTP POST","realPath":"/","actionHeader":"X-TC-Action","versionHeader":"X-TC-Version","version":"2019-07-19","note":"Every operation in this document is really `POST /` to the server above with `X-TC-Action: <Action>`. Paths of the form `/cfs/<Action>` exist so the actions are individually addressable, linkable and renderable; they are not routes on the server.","signing":"TC3-HMAC-SHA256","region":"luzon","clockSkewSeconds":300},"security":[{"TC3":[]}],"tags":[{"name":"cfs","description":"Cloud File Storage"}],"paths":{"/cfs/CreateCfsFileSystem":{"post":{"operationId":"cfs_CreateCfsFileSystem","summary":"CreateCfsFileSystem","description":"Create a file system.\n**Wire call.** This path is a documentation convenience. Converge Cloud is RPC-over-HTTP: every action is a single `POST /` to `cfs.api3.convergecloud.com` with the action name in the `X-TC-Action` header. The real request is:\n```bash\ncurl -sS https://cfs.api3.convergecloud.com/ \\\n  -H 'Authorization: TC3-HMAC-SHA256 Credential=<SecretId>/<YYYY-MM-DD>/cfs/tc3_request, SignedHeaders=content-type;host;x-tc-action, Signature=<sig>' \\\n  -H 'Content-Type: application/json; charset=utf-8' \\\n  -H 'Host: cfs.api3.convergecloud.com' \\\n  -H 'X-TC-Action: CreateCfsFileSystem' \\\n  -H 'X-TC-Version: 2019-07-19' \\\n  -H 'X-TC-Timestamp: <unix-seconds>' \\\n  -H 'X-TC-Region: luzon' \\\n  -d '{\"Zone\":\"<Zone>\",\"NetInterface\":\"<NetInterface>\",\"PGroupId\":\"<PGroupId>\",\"Protocol\":\"<Protocol>\",\"StorageType\":\"<StorageType>\"}'\n```","tags":["cfs"],"deprecated":false,"x-cc-service":"cfs","x-cc-action":"CreateCfsFileSystem","x-cc-version":"2019-07-19","x-cc-mutating":true,"x-cc-required-params":["Zone","NetInterface","PGroupId","Protocol","StorageType"],"x-cc-notable-params":["Zone","NetInterface","PGroupId","VpcId","SubnetId","Protocol","StorageType"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"Zone":{"type":"string"},"NetInterface":{"type":"string"},"PGroupId":{"type":"string"},"Protocol":{"type":"string"},"StorageType":{"type":"string"},"VpcId":{"type":"string","description":"Optional."},"SubnetId":{"type":"string","description":"Optional."}},"required":["Zone","NetInterface","PGroupId","Protocol","StorageType"],"additionalProperties":true,"description":"The fields listed here are the ones in common use. Additional parameters are also accepted."},"example":{"Zone":"<Zone>","NetInterface":"<NetInterface>","PGroupId":"<PGroupId>","Protocol":"<Protocol>","StorageType":"<StorageType>"}}}},"responses":{"200":{"description":"Converge Cloud answers 200 for both success and error. Read `Response.Error` to tell them apart — never the HTTP status.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/cfs/DeleteCfsFileSystem":{"post":{"operationId":"cfs_DeleteCfsFileSystem","summary":"DeleteCfsFileSystem","description":"Delete a file system.\n**Wire call.** This path is a documentation convenience. Converge Cloud is RPC-over-HTTP: every action is a single `POST /` to `cfs.api3.convergecloud.com` with the action name in the `X-TC-Action` header. The real request is:\n```bash\ncurl -sS https://cfs.api3.convergecloud.com/ \\\n  -H 'Authorization: TC3-HMAC-SHA256 Credential=<SecretId>/<YYYY-MM-DD>/cfs/tc3_request, SignedHeaders=content-type;host;x-tc-action, Signature=<sig>' \\\n  -H 'Content-Type: application/json; charset=utf-8' \\\n  -H 'Host: cfs.api3.convergecloud.com' \\\n  -H 'X-TC-Action: DeleteCfsFileSystem' \\\n  -H 'X-TC-Version: 2019-07-19' \\\n  -H 'X-TC-Timestamp: <unix-seconds>' \\\n  -H 'X-TC-Region: luzon' \\\n  -d '{\"FileSystemId\":\"<FileSystemId>\"}'\n```","tags":["cfs"],"deprecated":false,"x-cc-service":"cfs","x-cc-action":"DeleteCfsFileSystem","x-cc-version":"2019-07-19","x-cc-mutating":true,"x-cc-required-params":["FileSystemId"],"x-cc-notable-params":["FileSystemId"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"FileSystemId":{"type":"string"}},"required":["FileSystemId"],"additionalProperties":true,"description":"The fields listed here are the ones in common use. Additional parameters are also accepted."},"example":{"FileSystemId":"<FileSystemId>"}}}},"responses":{"200":{"description":"Converge Cloud answers 200 for both success and error. Read `Response.Error` to tell them apart — never the HTTP status.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/cfs/DescribeAutoSnapshotPolicies":{"post":{"operationId":"cfs_DescribeAutoSnapshotPolicies","summary":"DescribeAutoSnapshotPolicies","description":"Query the list of scheduled snapshot policies of a file system.\n**Wire call.** This path is a documentation convenience. Converge Cloud is RPC-over-HTTP: every action is a single `POST /` to `cfs.api3.convergecloud.com` with the action name in the `X-TC-Action` header. The real request is:\n```bash\ncurl -sS https://cfs.api3.convergecloud.com/ \\\n  -H 'Authorization: TC3-HMAC-SHA256 Credential=<SecretId>/<YYYY-MM-DD>/cfs/tc3_request, SignedHeaders=content-type;host;x-tc-action, Signature=<sig>' \\\n  -H 'Content-Type: application/json; charset=utf-8' \\\n  -H 'Host: cfs.api3.convergecloud.com' \\\n  -H 'X-TC-Action: DescribeAutoSnapshotPolicies' \\\n  -H 'X-TC-Version: 2019-07-19' \\\n  -H 'X-TC-Timestamp: <unix-seconds>' \\\n  -H 'X-TC-Region: luzon' \\\n  -d '{}'\n```","tags":["cfs"],"deprecated":false,"x-cc-service":"cfs","x-cc-action":"DescribeAutoSnapshotPolicies","x-cc-version":"2019-07-19","x-cc-mutating":false,"x-cc-required-params":[],"x-cc-notable-params":[],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{},"additionalProperties":true,"description":"The fields listed here are the ones in common use. Additional parameters are also accepted."}}}},"responses":{"200":{"description":"Converge Cloud answers 200 for both success and error. Read `Response.Error` to tell them apart — never the HTTP status.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"},"examples":{"recorded1":{"summary":"Example response","value":{"TotalCount":0,"AutoSnapshotPolicies":[],"RequestId":"20a5be47-4b57-2634-f857-53a90ea02c47"}}}}}}}}},"/cfs/DescribeAvailableZoneInfo":{"post":{"operationId":"cfs_DescribeAvailableZoneInfo","summary":"DescribeAvailableZoneInfo","description":"Query the availability of a region.\n**Wire call.** This path is a documentation convenience. Converge Cloud is RPC-over-HTTP: every action is a single `POST /` to `cfs.api3.convergecloud.com` with the action name in the `X-TC-Action` header. The real request is:\n```bash\ncurl -sS https://cfs.api3.convergecloud.com/ \\\n  -H 'Authorization: TC3-HMAC-SHA256 Credential=<SecretId>/<YYYY-MM-DD>/cfs/tc3_request, SignedHeaders=content-type;host;x-tc-action, Signature=<sig>' \\\n  -H 'Content-Type: application/json; charset=utf-8' \\\n  -H 'Host: cfs.api3.convergecloud.com' \\\n  -H 'X-TC-Action: DescribeAvailableZoneInfo' \\\n  -H 'X-TC-Version: 2019-07-19' \\\n  -H 'X-TC-Timestamp: <unix-seconds>' \\\n  -H 'X-TC-Region: luzon' \\\n  -d '{}'\n```","tags":["cfs"],"deprecated":false,"x-cc-service":"cfs","x-cc-action":"DescribeAvailableZoneInfo","x-cc-version":"2019-07-19","x-cc-mutating":false,"x-cc-required-params":[],"x-cc-notable-params":[],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{},"additionalProperties":true,"description":"The fields listed here are the ones in common use. Additional parameters are also accepted."}}}},"responses":{"200":{"description":"Converge Cloud answers 200 for both success and error. Read `Response.Error` to tell them apart — never the HTTP status.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/cfs/DescribeCfsFileSystems":{"post":{"operationId":"cfs_DescribeCfsFileSystems","summary":"DescribeCfsFileSystems","description":"Query file systems.\n**Wire call.** This path is a documentation convenience. Converge Cloud is RPC-over-HTTP: every action is a single `POST /` to `cfs.api3.convergecloud.com` with the action name in the `X-TC-Action` header. The real request is:\n```bash\ncurl -sS https://cfs.api3.convergecloud.com/ \\\n  -H 'Authorization: TC3-HMAC-SHA256 Credential=<SecretId>/<YYYY-MM-DD>/cfs/tc3_request, SignedHeaders=content-type;host;x-tc-action, Signature=<sig>' \\\n  -H 'Content-Type: application/json; charset=utf-8' \\\n  -H 'Host: cfs.api3.convergecloud.com' \\\n  -H 'X-TC-Action: DescribeCfsFileSystems' \\\n  -H 'X-TC-Version: 2019-07-19' \\\n  -H 'X-TC-Timestamp: <unix-seconds>' \\\n  -H 'X-TC-Region: luzon' \\\n  -d '{}'\n```","tags":["cfs"],"deprecated":false,"x-cc-service":"cfs","x-cc-action":"DescribeCfsFileSystems","x-cc-version":"2019-07-19","x-cc-mutating":false,"x-cc-required-params":[],"x-cc-notable-params":[],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{},"additionalProperties":true,"description":"The fields listed here are the ones in common use. Additional parameters are also accepted."}}}},"responses":{"200":{"description":"Converge Cloud answers 200 for both success and error. Read `Response.Error` to tell them apart — never the HTTP status.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"},"examples":{"recorded1":{"summary":"Example response","value":{"FileSystems":[],"TotalCount":0,"RequestId":"a9dcdcd7-050a-ddaa-8e97-bb5f099376ec"}}}}}}}}},"/cfs/DescribeCfsPGroups":{"post":{"operationId":"cfs_DescribeCfsPGroups","summary":"DescribeCfsPGroups","description":"Query the list of permission groups.\n**Wire call.** This path is a documentation convenience. Converge Cloud is RPC-over-HTTP: every action is a single `POST /` to `cfs.api3.convergecloud.com` with the action name in the `X-TC-Action` header. The real request is:\n```bash\ncurl -sS https://cfs.api3.convergecloud.com/ \\\n  -H 'Authorization: TC3-HMAC-SHA256 Credential=<SecretId>/<YYYY-MM-DD>/cfs/tc3_request, SignedHeaders=content-type;host;x-tc-action, Signature=<sig>' \\\n  -H 'Content-Type: application/json; charset=utf-8' \\\n  -H 'Host: cfs.api3.convergecloud.com' \\\n  -H 'X-TC-Action: DescribeCfsPGroups' \\\n  -H 'X-TC-Version: 2019-07-19' \\\n  -H 'X-TC-Timestamp: <unix-seconds>' \\\n  -H 'X-TC-Region: luzon' \\\n  -d '{}'\n```","tags":["cfs"],"deprecated":false,"x-cc-service":"cfs","x-cc-action":"DescribeCfsPGroups","x-cc-version":"2019-07-19","x-cc-mutating":false,"x-cc-required-params":[],"x-cc-notable-params":[],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{},"additionalProperties":true,"description":"The fields listed here are the ones in common use. Additional parameters are also accepted."}}}},"responses":{"200":{"description":"Converge Cloud answers 200 for both success and error. Read `Response.Error` to tell them apart — never the HTTP status.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/cfs/DescribeCfsServiceStatus":{"post":{"operationId":"cfs_DescribeCfsServiceStatus","summary":"DescribeCfsServiceStatus","description":"Query the status of the CFS service.\n**Wire call.** This path is a documentation convenience. Converge Cloud is RPC-over-HTTP: every action is a single `POST /` to `cfs.api3.convergecloud.com` with the action name in the `X-TC-Action` header. The real request is:\n```bash\ncurl -sS https://cfs.api3.convergecloud.com/ \\\n  -H 'Authorization: TC3-HMAC-SHA256 Credential=<SecretId>/<YYYY-MM-DD>/cfs/tc3_request, SignedHeaders=content-type;host;x-tc-action, Signature=<sig>' \\\n  -H 'Content-Type: application/json; charset=utf-8' \\\n  -H 'Host: cfs.api3.convergecloud.com' \\\n  -H 'X-TC-Action: DescribeCfsServiceStatus' \\\n  -H 'X-TC-Version: 2019-07-19' \\\n  -H 'X-TC-Timestamp: <unix-seconds>' \\\n  -H 'X-TC-Region: luzon' \\\n  -d '{}'\n```","tags":["cfs"],"deprecated":false,"x-cc-service":"cfs","x-cc-action":"DescribeCfsServiceStatus","x-cc-version":"2019-07-19","x-cc-mutating":false,"x-cc-required-params":[],"x-cc-notable-params":[],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{},"additionalProperties":true,"description":"The fields listed here are the ones in common use. Additional parameters are also accepted."}}}},"responses":{"200":{"description":"Converge Cloud answers 200 for both success and error. Read `Response.Error` to tell them apart — never the HTTP status.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"},"examples":{"recorded1":{"summary":"Example response","value":{"CfsServiceStatus":"none","RequestId":"88e9629d-93d3-0239-0cc1-033d19205a59"}}}}}}}}}},"components":{"securitySchemes":{"TC3":{"type":"apiKey","in":"header","name":"Authorization","description":"TC3-HMAC-SHA256. Credential scope is `<YYYY-MM-DD>/cfs/tc3_request`. The signing service name is a separate input from the hostname — deriving it from the host works until it does not, and the failure looks like an auth bug. Timestamps outside a 300-second window are rejected."}},"schemas":{"Envelope":{"type":"object","description":"Every Converge Cloud response is wrapped in `Response`, success or failure.","properties":{"Response":{"type":"object","properties":{"RequestId":{"type":"string","description":"Always present, including on errors. Quote it to Converge support."},"Error":{"$ref":"#/components/schemas/Error"}},"required":["RequestId"],"additionalProperties":true}},"required":["Response"]},"Error":{"type":"object","description":"Present only on failure. Error messages are Chinese on vpc and dc and English elsewhere — parse `Code`, never `Message`.","properties":{"Code":{"type":"string","examples":["InvalidAction","UnauthorizedOperation","AuthFailure.SignatureFailure","ResourceNotFound","InvalidParameterValue.LimitExceeded"]},"Message":{"type":"string"}},"required":["Code","Message"]}}}}