Skip to content

Submission Requirements

Submission Requirements enable verifiers to express complex logical combinations of required credentials within a Presentation Definition. They specify how holders must combine credentials to satisfy verification requirements, moving beyond simple “all required” scenarios to support real-world verification flexibility.

Without Submission Requirements, verifiers can only require all input descriptors defined in a Presentation Definition. This rigid approach lacks the flexibility needed for scenarios where:

  • Users have different acceptable credentials (passport OR driver’s license)
  • Verification requires credential combinations (identity proof AND address proof)
  • Complex logic is needed (identity AND (employment proof OR income proof))

Submission Requirements provide standardized expressions of logical combinations, making verification processes flexible and user-friendly while maintaining security and compliance.

Submission Requirements use groups and rules to express logic:

  1. Input descriptors are assigned to named groups
  2. Rules define requirements about these groups (“all” or “pick”)
  3. Rules combine and nest to create complex logic
  4. Holders provide credentials satisfying the requirements

Requires all input descriptors from a group:

{
"rule": "all",
"from": "A"
}

Specifies how many inputs from a group are required:

{
"rule": "pick",
"count": 1,
"from": "B"
}

Options:

  • count: Exact number required
  • min: Minimum required
  • max: Maximum allowed

To use Submission Requirements, input descriptors must be assigned to named groups:

{
"id": "banking_credential",
"name": "Bank Statement",
"group": ["A"],
"constraints": {
/* ... */
}
}

Groups are identified by string identifiers. Descriptors can belong to multiple groups, enabling flexible logical expressions. When Submission Requirements reference a group, they apply to all input descriptors assigned to that group.

Multiple requirements at the same level create “AND” logic:

"submission_requirements": [
{ "rule": "all", "from": "A" },
{ "rule": "pick", "count": 1, "from": "B" }
]

Requires all from group A AND one from group B.

Nest requirements using from_nested for “OR” logic:

{
"rule": "pick",
"count": 1,
"from_nested": [
{ "rule": "all", "from": "A" },
{ "rule": "pick", "count": 2, "from": "B" }
]
}

Requires either all from A OR two from B.

Verify identity with either government ID or credential combination:

{
"submission_requirements": [
{
"rule": "pick",
"count": 1,
"from_nested": [
{ "rule": "all", "from": "government_id" },
{
"rule": "all",
"from_nested": [
{ "rule": "all", "from": "basic_identity" },
{ "rule": "all", "from": "address_proof" }
]
}
]
}
],
"input_descriptors": [
{
"id": "passport",
"group": ["government_id"],
"constraints": {
/* ... */
}
},
{
"id": "birth_certificate",
"group": ["basic_identity"],
"constraints": {
/* ... */
}
},
{
"id": "utility_bill",
"group": ["address_proof"],
"constraints": {
/* ... */
}
}
]
}

Accepts either government ID OR (birth certificate AND utility bill).

In the Vidos ecosystem, Submission Requirements integrate with the verification workflow through the Validator service. When a Presentation Submission is received, the Validator evaluates whether the presented credentials satisfy the logical combinations specified in the Submission Requirements. This enables flexible verification policies that can accommodate different credential combinations while maintaining consistent security standards.

Submission Requirements enable complex credential verification logic through:

  • Flexible “all” and “pick” rules
  • Grouping of related input descriptors
  • Nested combinations for complex scenarios
  • Standardized logical expressions

They provide the flexibility needed for real-world verification while maintaining clear, processable requirements.