{"uid":"cap_Cz7X4pT9NDGF56cLv5ajM","slug":"decision-anchor-external-anchoring-layer-dd-create-d189afd7","name":"Decision Anchor — External Anchoring Layer (dd/create)","description":"Decision Anchor is the External Anchoring Layer — a layer that separates where a decision is made from where that decision is recorded. The recorder is not the actor. It does not judge, does not predict, does not intervene, does not look inside.","url":"https://api.decision-anchor.com/v1/dd/create?utm_source=zero.xyz","method":"POST","headers":{},"bodySchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["input"],"properties":{"input":{"type":"object","required":["type","bodyType","body","method"],"properties":{"body":{"type":"object","required":["request_id","dd","ee"],"properties":{"dd":{"type":"object","required":["dd_unit_type","dd_declaration_mode","decision_type","decision_action_type","origin_context_type","selection_state"],"properties":{"decision_at":{"type":"string","format":"date-time","description":"Optional. The time the agent itself decided, as an ISO 8601 timestamp. The server normalizes it to UTC and stores the normalized value, which is also what enters integrity_hash; send it in any valid offset and read back the stored value with GET /v1/dd/{dd_id}. It must not be later than the anchoring time: a later value is rejected with 400 DECISION_AT_IN_FUTURE. Omit it and no decision time is recorded. The distance between decision_at and anchored_at is derived, never stored. When the time-alignment credit is enabled and that gap is within the configured window, Earned DAC is credited at confirm (confirm response sync_reward); current window, amount and whether it is enabled: GET /v1/pricing/current sync_reward."},"dd_unit_type":{"enum":["single","batch"],"type":"string","description":"How many decisions this record covers. single: one decision. batch: a set of decisions you declare as one unit."},"parent_dd_id":{"type":"string","format":"uuid"},"decision_type":{"enum":["internal_service","external_interaction","self_attestation"],"type":"string","description":"What the decision concerns. internal_service: an operation inside your own platform or service. external_interaction: an exchange with a party or system outside it (a payment, a delegation, an agreement). self_attestation: a statement about your own state or intent rather than an action on anything else. DA records the value you send and does not check it."},"selection_scope":{"enum":["single_target","multi_target","chain_scope","global"],"type":"string","description":"Optional."},"selection_state":{"enum":["SELECTED","REJECTED","ABORTED","SILENT","NON_DECISION"],"type":"string","description":"How the selection ended: SELECTED (a choice was made), REJECTED (the options were declined), ABORTED (the process stopped before a choice), SILENT (no response was given), NON_DECISION (the situation was left undecided on purpose). Every value is a valid declaration, including the ones where nothing was carried out."},"dd_declaration_mode":{"enum":["self_declared","bilateral","multi_party"],"type":"string","description":"Who declares. self_declared: you alone (the only value POST /v1/dd/create accepts). bilateral: you and one counterparty, created through POST /v1/dd/bilateral/propose. multi_party: reserved; not accepted on either route."},"origin_context_type":{"enum":["internal","external","self","mixed"],"type":"string","description":"What set the decision in motion. internal: your platform or orchestrator. external: an outside party or event. self: your own initiative. mixed: more than one of these. DA records the value you send and does not check it."},"decision_action_type":{"enum":["execute","hold","reject","depend","approve"],"type":"string","description":"What the decision did: execute (carried out), hold (kept pending), reject (declined), depend (deferred to another decision or party), approve (authorized something else to proceed)."}}},"ee":{"type":"object","required":["ee_retention_period","ee_integrity_verification_level","ee_disclosure_format_policy","ee_responsibility_scope"],"properties":{"ee_preset":{"type":"string","description":"Optional EE preset name. Expands into the four required EE axes and overrides them when both are sent. The preset list is operator-managed; fetch active presets via GET /v1/pricing/ee-presets (currently EE_basic, EE_standard, EE_high). Unknown name: 400 INVALID_EE_PRESET; disabled: 400 EE_PRESET_DISABLED. Accepted on POST /v1/dd/create only; the bilateral propose path rejects this key (400 UNKNOWN_FIELD)."},"access_class":{"enum":["self_direct","ara_only","internal_only"],"type":"string","description":"Optional."},"delegation_state":{"enum":["none","partial","full"],"type":"string","default":"none","description":"Pricing axis, optional, defaults to none."},"ee_retention_period":{"enum":["short","medium","long","extreme_long","indefinite"],"type":"string","description":"Retention selection. All five values are sent in this one field, but they are not one ladder. short, medium and long are the retention axis; their add is priced along the axis and long is one of the multiplier conditions. extreme_long (3,650 days / 10 years, 100 DAC one-time) and indefinite (permanent, no axis add) are overlay options that sit on top of the axis rather than extending it, so neither carries an axis value for the 'Retention = Long' multiplier condition to match. indefinite is declared but not currently available: selecting it is rejected. Current adds and availability: GET /v1/pricing/current."},"ee_direct_access_quota":{"type":"integer","minimum":0,"description":"Optional: system default applied when omitted. Non-negative integer."},"ee_direct_access_period":{"type":"string","pattern":"^[1-9]\\d*[dmy]$","description":"Optional: system default applied when omitted. Format like \"30d\", \"12m\", \"1y\" (d=days, m=months, y=years)."},"ee_responsibility_scope":{"enum":["minimal","standard","extended"],"type":"string"},"content_disclosure_scope":{"enum":["owner","external","public"],"type":"string","default":"owner","description":"Pricing axis, optional, defaults to owner."},"ee_disclosure_format_policy":{"enum":["internal","shareable","exportable"],"type":"string"},"ee_integrity_verification_level":{"enum":["basic","enhanced","certifiable"],"type":"string"}},"description":"The four axis fields are required unless ee_preset is provided (a preset expands into all four)."},"template":{"type":"object","properties":{"call_chain":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9][A-Za-z0-9_.:-]{0,63}$"},"maxItems":32,"description":"Tool identifier tokens only (no spaces, no free text). Entries containing personal identifying information are rejected."},"target_class":{"enum":["internal","external","third_party","subagent","human_owner","public","system"],"type":"string"},"decision_class":{"enum":["payment","api_call","data_access","delegation","resource_transfer","communication","other"],"type":"string"},"decision_trigger":{"enum":["user_request","scheduled","event_driven","autonomous","delegated","external_event"],"type":"string"},"human_involvement":{"enum":["none","notification","approval","co_decision","review"],"type":"string"},"decision_scale_unit":{"type":"string","pattern":"^[A-Za-z0-9][A-Za-z0-9_./%-]{0,19}$","maxLength":20,"description":"Short unit code for decision_scale_value (e.g. \"USDC\", \"USD\"). No spaces, no free text."},"self_classification":{"type":"string","description":"Key registered in the self-classification registry (GET /v1/classification). Unregistered keys are rejected."},"decision_scale_value":{"type":"number"}},"description":"Content Inclusion branch 1: 7-dimension decision metadata. Required when content_inclusion_flag=1; at least 1 of the 7 dimensions must be filled.","minProperties":1},"continuity":{"type":"object","properties":{"parent_dd_id":{"type":"string","format":"uuid"}},"description":"Lineage link. Only parent_dd_id is read; other keys are ignored. The parent DD must belong to the same agent."},"request_id":{"type":"string","format":"uuid","description":"Client-generated idempotency key. MUST be a fresh UUID for every call. Reusing one of your own values returns your earlier result instead of creating a new record; the key is scoped to your agent_id, so a value another agent used never returns their record. Generate with crypto.randomUUID() or an equivalent."},"content_inclusion_flag":{"enum":[0,1],"type":"integer","default":0,"description":"Content Inclusion branch. Top-level field (not inside dd). 1 requires template."},"premium_payment_source":{"enum":["external","earned"],"type":"string"}}},"type":{"type":"string","const":"http"},"method":{"enum":["POST"],"type":"string"},"bodyType":{"enum":["json","form-data","text"],"type":"string"}},"additionalProperties":false},"output":{"type":"object","required":["type"],"properties":{"type":{"type":"string"},"example":{"type":"object"}}}}},"responseSchema":null,"example":null,"exampleRequest":null,"tags":["x402"],"displayCostAmount":"0.01","displayCostAsset":"USDC","priceDynamic":false,"priceHint":null,"priceStatus":"priced","priceSource":"registry","requiresHandshake":false,"reviewCount":0,"rating":{"score":"0.00","successRate":"0.00","reviews":0,"stars":null,"state":"unrated"},"availabilityStatus":"unknown","priceObserved":null,"sessionDeposit":null,"pricing":{"kind":"static","summary":"$0.01/call","primary":{"kind":"static","protocol":"x402","network":"base","amountUsd":"0.01","per":"call","confidence":"exact"},"accepted":[{"kind":"static","protocol":"x402","network":"base","amountUsd":"0.01","per":"call","confidence":"exact"}]},"paymentMethods":[{"uid":"pm_GaBM4B7pEs_KYqpX6LPxH","protocol":"x402","methodType":"crypto","chain":"base","mode":"charge","costAmount":"0.01","costPer":"request","priority":0,"asset":null,"unit":"request","depositMicros":null,"planRef":null}],"brandName":null,"brandSlug":null,"brandBaseUrl":null,"brandDocsUrl":null,"whatItDoes":"Records a decision externally and immutably, separating the actor who makes a decision from the recorder that logs it, without judgment or intervention.","exampleAgentPrompt":"Record this decision externally using Decision Anchor — the actor is my loan-approval agent, the decision is 'approved', and the reference ID is loan-20240601-00847. I want an immutable external log that separates the recorder from the actor.","exampleUseCases":[{"title":"Audit trail for automated loan decisions","prompt":"My loan-approval agent just made a decision to approve loan-20240601-00847. Log that decision externally using Decision Anchor so there's an immutable record that separates what the agent decided from where it's recorded."},{"title":"Governance log for AI agent actions","prompt":"Every time my AI agent takes a consequential action, I need it recorded in an external anchoring layer. Record this action — agent ID 'policy-bot-7', decision 'escalate to human review', reference 'ticket-99231' — so neither the agent nor our system can alter the log afterward."},{"title":"Compliance record for content moderation","prompt":"Our moderation system just flagged and removed a post — decision ID 'mod-2024-88821', actor 'automod-v3', outcome 'removed'. Anchor that decision externally so auditors can verify we didn't retroactively change what was decided."}],"resultDescription":"Returns a confirmation that the decision has been anchored externally, including a unique record identifier and creation timestamp, affirming that the record has been stored in the external anchoring layer separate from the originating actor.","failureModes":["Missing required decision payload fields — endpoint returns an error indicating which fields are absent","Malformed request body — returns a 400-level error indicating invalid JSON or schema mismatch","Network or service unavailability — results in a timeout or 5xx error with no record created","Duplicate submission — may create a new record with a distinct ID rather than deduplicating, depending on service behavior","Insufficient USDC balance or x402 payment failure — request is rejected before record is created"],"whenToPreferThis":"Choose this endpoint when you need a neutral, external record of a decision that is strictly separated from the system or agent that made the decision — particularly for compliance, audit, or governance use cases where the recorder must not be the actor. Prefer this over internal logging when immutability, neutrality, and separation of concerns are required, such as in regulated industries, multi-party workflows, or AI agent accountability systems.","instructions":null,"reviewSummary":null,"reviewSummaryHighlights":null,"reviewSummaryConcerns":null,"reviewSummaryGeneratedAt":null,"activationCount":0,"lastUsedAt":null,"lastSuccessfullyRanAt":null,"lastHealthCheckAt":"2026-10-18T18:33:16.722Z","isFirstParty":false,"canonicalSlug":"decision-anchor-external-anchoring-layer-dd-create-d189afd7"}