<!--
{
  "availability" : [

  ],
  "documentType" : "symbol",
  "framework" : "CKToolJS",
  "identifier" : "/documentation/CKToolJS/PromisesApi/validateSchema",
  "metadataVersion" : "0.1.0",
  "role" : "Instance Method",
  "symbol" : {
    "kind" : "Instance Method",
    "modules" : [
      "CKTool JS"
    ],
    "preciseIdentifier" : "instm/PromisesApi/validateSchema"
  },
  "title" : "validateSchema"
}
-->

# validateSchema

Validates the uploaded schema file for the container.

```
CancellablePromise validateSchema(
	ValidateSchemaParams params
);
```

## Parameters

`params`

A dictionary as described in the Discussion section.

## Return Value

A `CancellablePromise` with the following resolutions.

## Discussion

If the promise is successful, it will resolve with one of the following dictionaries:

- `{ statusCode: 200; result: CKDBValidateSchemaResponse }`

The promise may reject and throw the following:

- `DocumentedResponseError`, if the HTTP status code is 421. The result member will be a dictionary conforming to AuthenticationRequiredError.
- `DocumentedResponseError`, if the HTTP status code is none of the above and in the range 400 to 599. The result member will be a dictionary conforming to RequestError.
- `ValidationError`, if the parameters to the method are incorrect.
- A `FetchError` descendant, if there is a problem with the network request. A reference to the request object can be used to examine the underlying cause.

## Discussion

The `params` dictionary has the following properties:

```javascript
dictionary ValidateSchemaParams {
  File file;
  string teamId;
  string containerId;
  CKEnvironment environment;
}
```

- `file`:
- `teamId`: The team identifier. You can find your team identifier in the Membership tab of the Apple Developer portal at `https://developer.apple.com`.
- `containerId`: The container identifier. See `Container`.
- `environment`: The container environment. For valid values, see `CKEnvironment`.

If the operation completes successfully, the response contains a result with a `CKDBValidateSchemaResponse` object. A schema validates successfully only if it has the correct syntax and if `importSchema` is able to import it successfully to the container. The text you provide in the file object must be in CloudKit Schema Language. To learn more about CloudKit Schema Language, see `https://developer.apple.com/documentation/cloudkit/integrating_a_text-based_schema_into_your_workflow`. Related: `exportSchema`, `importSchema`.

Node.js example:

```javascript
import { CKEnvironment, PromisesApi } from "@apple/cktool.database";
import { File, createConfiguration } from "@apple/cktool.target.nodejs";
import fs from "fs/promises";
import path from "path";

try {
  const api = new PromisesApi({
    configuration: createConfiguration(),
    security: {
      // You can obtain a management token from the
      // Database section of CloudKit Console.
      "ManagementTokenAuth": "YOUR_MANAGEMENT_TOKEN"
    },
  });

  console.log(`Validating schema...`);
  // Read a schema file from the file system
  const srcPath = path.join(__dirname, "sample.CKDB");
  const buffer = await fs.readFile(srcPath);
  // Wrap in a File object.
  const file = new File([buffer], "sample.CKDB");
  const { result } = await api.validateSchema({
    teamId: "YOUR_TEAM_ID",
    containerId: "YOUR_CONTAINER_ID",
    environment: CKEnvironment.DEVELOPMENT,
    file,
  });
  if (result.isValid) {
    console.log(`Schema validated successfully`);
  } else {
    console.log(`Schema did not pass validation`);
  }
} catch(ex) {
  // Handle error
}
```

---

Copyright &copy; 2026 Apple Inc. All rights reserved. | [Terms of Use](https://www.apple.com/legal/internet-services/terms/site.html) | [Privacy Policy](https://www.apple.com/privacy/privacy-policy)