Get Batch Schema
Returns the frozen schema snapshot of a batch: the verification requirements captured when the batch was created. Every manifest row is validated against this snapshot, even if the requirements change later, so this is the reference for building manifest.json.
The schema is available in every batch status.
A manifest row mirrors the schema: fields, documents, questionnaire and, for company rows, associated_partiesare filled in against the part of the schema with the same name.
You rarely need to build a manifest from the schema by hand. Get Example Manifest returns a template generated from this snapshot. Use the schema to check requirements, allowed values and conditional questions.
Endpoint
GET /v2/compliance/batch/{batch_id}/schema
Link
Request
Path Parameters
batch_id
string
Batch ID returned by Create Batch.
Yes
"01a0af8b-831f-7dbe-8eaf-459f81998958"
Headers
Authorization
<JWT>
Yes
Accept
application/json
Yes
Response (200 OK)
Returns a GetBatchSchemaResponse.
Response Fields
schema_version
string
Version of the snapshot. Same value as schema_version of the batch; you can pass it in manifest.json.
individual_schema
object
Requirements for individual rows: fields, documents, questionnaire. Absent if the batch does not accept individuals.
company_schema
object
Requirements for company rows: fields, documents, questionnaire, associated_parties. Absent if the batch does not accept companies.
associated_party_levels
object
Requirements for company participants (UBOs, directors, authorized signatories), keyed by opaque level identifiers. Each entry has its own fields and documents.
Schema structure
Each subject schema (individual_schema, company_schema, and every entry of associated_party_levels) is built from the parts below.
fields — profile fields
Describes every profile field the row can carry. For each field the schema states:
whether it is required — required fields must have a non-empty value;
the value type — the value in the manifest must have this type;
the format, if any — the value must match it:
date
YYYY-MM-DD
"1990-05-14"
country
ISO 3166-1 alpha-2 code
"CY"
phone
E.164: + and up to 15 digits, no spaces or brackets
"+35799000000"
In the manifest: fields is an object keyed by field id, e.g. {"firstName": "Anna"}.
documents — document groups
Describes which documents the row must or may provide, organized in groups (for example, identity document and proof of address). For each group the schema states:
whether the group is required — every required group must be covered by at least one document;
the allowed document types in the group;
which of those types are two-sided (
two_sided_types) — such documents are sent as two entries withsub_typeFRONT_SIDEandBACK_SIDE.
For companies, company documents use the type COMPANY_DOC; the specific kind of document is selected with sub_typefrom the list the group allows.
In the manifest: documents is an array of {"type", "sub_type", "file"} entries.
questionnaire — questionnaire
A blank questionnaire form: sections, and questions inside each section. For each question the schema states its id, type, options (for choice questions) and whether it is required. Some questions are shown only depending on the answer to another question.
If the level has no questionnaire, questionnaire is an empty array.
In the manifest: questionnaire.sections.<section_id>.items.<question_id> holds the answer, whose shape depends on the question type:
Regular
{"value": "..."}
Multiple choice
{"values": ["...", "..."]} (each one of options)
File attachment
{"files": ["path/in/prefix.pdf"]}
associated_parties — company participants (company_schema only)
Lists the participant roles a company must or may declare. For each role the schema states:
the role —
UBO,DIRECTORorAUTHORIZED_SIGNATORY;can_skip— iffalse, at least one party with this role is mandatory;the applicant type of the party;
the level — an opaque reference to the entry in
associated_party_levelsthat holds the party's ownfieldsanddocuments.
In the manifest: associated_parties is an array of parties, each with its own party_key, roles in types, fields, documents and, for UBOs, share_size.
How the parts connect
The same level identifiers are listed in party_kyc_levels of the Batch object.
Examples
Request
Response (outline)
Error Responses
Errors are returned as {"code", "message", "details"}, where code is a gRPC status code. Use the HTTP status for error handling.
Batch Not Found (404) — the batch does not exist or belongs to another partner:
Authorization fail (401):
Notes
Frozen for the batch's lifetime: the snapshot never changes. To onboard against newer requirements, create a new batch.
Opaque identifiers: keys of
associated_party_levelsand thelevelreferences are identifiers only. Do not parse them or rely on their format.Validation is strict: rows are checked against the snapshot before customers are created — required fields, value types, formats, allowed document types, required document groups, document sides, questionnaire answers and mandatory roles. A row that fails any check becomes
invalidwith the reason inerror.Conditional questions: the example manifest includes only unconditional questions. If an answer makes another question visible, answer that question too when it is required.
Markup is not allowed: values containing
<or>are rejected in profile fields, free-text answers andexternal_customer_id.
Typical Workflow:
Create a batch with Create Batch.
Call
GET /v2/compliance/batch/{batch_id}/schemaand check the requirements for each type.Download the template with Get Example Manifest and fill it in against the schema.
Upload documents and
manifest.json, then Commit Batch.
Last updated

