Overview
A Requisition is created on behalf of a MeasurementConsumer to instruct a DataProvider to collect and upload data necessary to compute a Measurement result. Key characteristics:- Automatic creation - Created automatically when a Measurement is created
- One per DataProvider - Each participating DataProvider gets one requisition per measurement
- Output-only - Cannot be directly created; only retrieved and fulfilled
- State-driven - Progress through well-defined states
Requisition Resource
Requisitions have two resource name patterns:Requisition Lifecycle
Requisitions progress through the following states:UNFULFILLED
UNFULFILLED
The requisition has been created but not yet fulfilled by the DataProvider. This is the initial state.Actions available:
- Fulfill the requisition
- Refuse the requisition
FULFILLED
FULFILLED
The DataProvider has successfully fulfilled the requisition. Terminal state.Result:
- Data has been uploaded
- Parent measurement can proceed to computation
REFUSED
REFUSED
The DataProvider has refused to fulfill the requisition. Terminal state.Result:
- Parent measurement transitions to FAILED state
- Refusal details are recorded in the
refusalfield
WITHDRAWN
WITHDRAWN
The requisition has been withdrawn. Terminal state.Cause:
- Parent measurement was cancelled
- Another requisition for the same measurement failed
Listing Requisitions
DataProviders can list their requisitions to find work:- List for DataProvider
- List for Measurement
- Filter by State
Get all requisitions for your DataProvider:Response:
Fulfilling Requisitions
DataProviders fulfill requisitions by providing the requested measurement data.Understanding the Requisition
Before fulfilling, examine the requisition contents:Check the measurement spec
The
measurementSpec field contains:- What type of measurement is requested (reach, frequency, etc.)
- Privacy parameters (epsilon, delta)
- VID sampling interval
measurementConsumerCertificate.Decrypt the requisition spec
The
encryptedRequisitionSpec contains:- Event date range
- Event filters
- EventGroup specifications
Fulfilling with Direct Protocol
For the Direct protocol, DataProviders compute and upload results directly:Fulfillment Context
Optionally provide context about the fulfillment:Refusing Requisitions
If you cannot fulfill a requisition, refuse it with a justification:Determine justification
Choose the appropriate refusal justification:
CONSENT_SIGNAL_INVALID
CONSENT_SIGNAL_INVALID
A cryptographic consent signal (signature or encrypted value) is invalid.Examples:
- Signature cannot be verified
- Encrypted spec cannot be decrypted
- Certificate is not trusted
SPEC_INVALID
SPEC_INVALID
The requisition specification is invalid.Examples:
- Invalid date range (end before start)
- Unsupported configuration
- Malformed event filters
INSUFFICIENT_PRIVACY_BUDGET
INSUFFICIENT_PRIVACY_BUDGET
There is not enough remaining privacy budget to fulfill the requisition.Examples:
- Too many recent measurements on the same data
- Epsilon/delta requirements exceed available budget
- Cumulative privacy loss too high
UNFULFILLABLE
UNFULFILLABLE
The requisition cannot be fulfilled for an unspecified reason.Examples:
- Data corruption
- System failure
- Unexpected error in processing
DECLINED
DECLINED
The DataProvider has declined to fulfill this requisition.Examples:
- Policy violation
- Business decision
- Contractual restrictions
Optimistic Concurrency Control
Requisitions use ETags to prevent concurrent modifications:If the ETag doesn’t match, you’ll receive an
ABORTED error. Retrieve the latest requisition and retry.Duchy Information
For multi-party computation protocols, theduchies field contains duchy-specific information:
Best Practices
Poll Regularly
Poll for new UNFULFILLED requisitions regularly (e.g., every 30 seconds) to minimize measurement latency.
Validate Before Fulfilling
Always validate signatures and decrypt specs before starting computation. Catch errors early.
Use ETags
Always include the current ETag when fulfilling or refusing requisitions to prevent race conditions.
Provide Context
Include fulfillment context with build labels and warnings to aid debugging.
Monitor Privacy Budget
Track privacy budget consumption and refuse requisitions proactively when budget is low.
Refuse Permanently Only
Only refuse requisitions for permanent failures. For transient errors, retry or contact the MeasurementConsumer.
Troubleshooting
Cannot decrypt requisition spec
Cannot decrypt requisition spec
Possible causes:
- Wrong private key
- Corrupted ciphertext
- Mismatched encryption algorithm
- Verify you’re using the correct DataProvider private key
- Check that the public key in the measurement matches your certificate
- Ensure encryption/decryption algorithms are compatible
Signature verification fails
Signature verification fails
Possible causes:
- Certificate mismatch
- Tampered data
- Wrong signature algorithm
- Verify the certificate chains to a trusted root
- Check that the certificate hasn’t been revoked
- Ensure you’re using the correct signature verification algorithm
ABORTED error when fulfilling
ABORTED error when fulfilling
Cause:
ETag doesn’t match current requisition state.Solution:
Re-fetch the requisition to get the latest ETag and retry.
Next Steps
Creating Measurements
Learn how MeasurementConsumers create measurements
Panel Matching
Understand panel matching for multi-party measurements
API Reference
View the complete Requisitions API reference
