@1claw/openapi-spec 0.60.0 → 0.61.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/openapi.yaml CHANGED
@@ -2,7 +2,7 @@ openapi: 3.1.0
2
2
 
3
3
  info:
4
4
  title: 1Claw API
5
- version: "0.60.0"
5
+ version: "0.61.1"
6
6
  description: |
7
7
  Secure secret management for AI agents. Provides vaults, secrets,
8
8
  policy-based access control, agent identity, Intents API,
@@ -6823,8 +6823,17 @@ paths:
6823
6823
  fields_applied:
6824
6824
  type: array
6825
6825
  items: { type: string }
6826
- agents_matched: { type: integer, format: int64 }
6827
- agents_updated: { type: integer, format: int64 }
6826
+ agents_matched:
6827
+ type: integer
6828
+ format: int64
6829
+ description: Agents in the cohort the patch applied to.
6830
+ agents_updated:
6831
+ type: integer
6832
+ format: int64
6833
+ description: >
6834
+ Distinct agents written, not writes performed. Every
6835
+ field in one patch targets the same cohort, so this is
6836
+ the cohort size rather than fields x agents.
6828
6837
  "400":
6829
6838
  description: A field outside the bulk-patch allowlist, or an empty patch
6830
6839
  "404":
@@ -9887,6 +9896,220 @@ paths:
9887
9896
  "403":
9888
9897
  $ref: "#/components/responses/Forbidden"
9889
9898
 
9899
+ /v1/agents/{agent_id}/pay/settings:
9900
+ patch:
9901
+ tags: [Pay]
9902
+ summary: Set an agent's payment guardrails
9903
+ description: >
9904
+ Human callers only. These are the numbers every payment decision
9905
+ is measured against — the per-payment cap, the daily limit, the
9906
+ recipient allowlist, whether a passkey is required at all, and
9907
+ whether the agent may hold a spending grant. An agent that could
9908
+ set them would be setting its own ceiling.
9909
+ Omitted fields are left alone; values can currently be set but
9910
+ not cleared.
9911
+ operationId: updatePaySettings
9912
+ parameters:
9913
+ - $ref: "#/components/parameters/AgentId"
9914
+ requestBody:
9915
+ required: true
9916
+ content:
9917
+ application/json:
9918
+ schema:
9919
+ $ref: "#/components/schemas/UpdatePayGuardrailsRequest"
9920
+ responses:
9921
+ "200": { description: Updated guardrails }
9922
+ "403": { description: Not a human caller }
9923
+ /v1/agents/{agent_id}/pay/prepare:
9924
+ post:
9925
+ tags: [Pay]
9926
+ summary: Prepare an x402 payment from a 402 challenge
9927
+ description: >
9928
+ Send the exact bytes the paywall served. The vault parses them,
9929
+ pins the amount that will actually be signed (not the
9930
+ `maxAmountRequired` ceiling), computes the digest a person will
9931
+ authorize, and stores the preimage so the authorize page renders
9932
+ from what the vault saw rather than what the caller claims.
9933
+ `authorization` in the response says what the payment needs next:
9934
+ `allow`, `require_passkey`, `require_grant`, or `deny: <reason>`.
9935
+ operationId: preparePayment
9936
+ parameters:
9937
+ - $ref: "#/components/parameters/AgentId"
9938
+ requestBody:
9939
+ required: true
9940
+ content:
9941
+ application/json:
9942
+ schema:
9943
+ $ref: "#/components/schemas/PayPrepareRequest"
9944
+ responses:
9945
+ "200":
9946
+ description: Session created; digest and quote returned
9947
+ content:
9948
+ application/json:
9949
+ schema:
9950
+ $ref: "#/components/schemas/PayPrepareResponse"
9951
+ "400": { description: Not a usable 402 challenge, or a non-USDC asset }
9952
+ "403": { description: pay is not enabled for this agent }
9953
+ /v1/agents/{agent_id}/pay/sign:
9954
+ post:
9955
+ tags: [Pay]
9956
+ summary: Sign a prepared x402 payment
9957
+ description: >
9958
+ Evaluates the agent's payment policy, redeems a passkey assertion
9959
+ or consumes a spending grant, then signs. The daily limit is
9960
+ charged at signing time: a payment that is signed and then lost
9961
+ still consumed authority, and only a vault-verified
9962
+ reconciliation returns it. Returns the `X-PAYMENT` header value,
9963
+ never a key.
9964
+ operationId: signPayment
9965
+ parameters:
9966
+ - $ref: "#/components/parameters/AgentId"
9967
+ - name: X-Passkey-Token
9968
+ in: header
9969
+ required: false
9970
+ description: A passkey assertion bound to this payment's digest, when required.
9971
+ schema:
9972
+ type: string
9973
+ requestBody:
9974
+ required: true
9975
+ content:
9976
+ application/json:
9977
+ schema:
9978
+ $ref: "#/components/schemas/PaySignRequest"
9979
+ responses:
9980
+ "200":
9981
+ description: Signed; payment header returned
9982
+ content:
9983
+ application/json:
9984
+ schema:
9985
+ $ref: "#/components/schemas/PaySignResponse"
9986
+ "403": { description: Policy refused, or the required authorization was absent }
9987
+ "409":
9988
+ description: >
9989
+ ChallengeExpired. Re-fetch the resource for a fresh 402 and
9990
+ prepare again — re-preparing from the stored bytes would
9991
+ reproduce the same expired window.
9992
+ /v1/agents/{agent_id}/pay/grants:
9993
+ post:
9994
+ tags: [Pay]
9995
+ summary: Create a spending grant
9996
+ description: >
9997
+ Human callers only. Requires a passkey assertion over the digest
9998
+ of exactly these terms, and stays within the agent's own maximum
9999
+ cap and window — a grant is a delegation inside the limits
10000
+ already set, not a way around them.
10001
+ operationId: createPayGrant
10002
+ parameters:
10003
+ - $ref: "#/components/parameters/AgentId"
10004
+ - name: X-Passkey-Token
10005
+ in: header
10006
+ required: true
10007
+ schema:
10008
+ type: string
10009
+ requestBody:
10010
+ required: true
10011
+ content:
10012
+ application/json:
10013
+ schema:
10014
+ $ref: "#/components/schemas/CreatePayGrantRequest"
10015
+ responses:
10016
+ "200": { description: Grant created }
10017
+ "403": { description: Not a human caller, grant mode disabled, or terms exceed the agent's maximum }
10018
+ /v1/agents/{agent_id}/pay/{payment_id}/result:
10019
+ post:
10020
+ tags: [Pay]
10021
+ summary: Report the outcome of a payment
10022
+ description: >
10023
+ Best-effort reporting. Moves the audit trail forward and nothing
10024
+ else — `settled: false` does **not** release daily-limit
10025
+ headroom, and the response says `limit_released: false` so the
10026
+ caller need not infer it.
10027
+ operationId: reportPaymentResult
10028
+ parameters:
10029
+ - $ref: "#/components/parameters/AgentId"
10030
+ - name: payment_id
10031
+ in: path
10032
+ required: true
10033
+ schema: { type: string, format: uuid }
10034
+ requestBody:
10035
+ required: true
10036
+ content:
10037
+ application/json:
10038
+ schema:
10039
+ $ref: "#/components/schemas/PayResultRequest"
10040
+ responses:
10041
+ "200": { description: Outcome recorded }
10042
+ /v1/agents/{agent_id}/pay/{payment_id}:
10043
+ get:
10044
+ tags: [Pay]
10045
+ summary: Payment status
10046
+ operationId: getPayment
10047
+ parameters:
10048
+ - $ref: "#/components/parameters/AgentId"
10049
+ - name: payment_id
10050
+ in: path
10051
+ required: true
10052
+ schema: { type: string, format: uuid }
10053
+ responses:
10054
+ "200": { description: Payment status }
10055
+ /v1/pay-sessions/{session_id}:
10056
+ get:
10057
+ tags: [Pay]
10058
+ summary: Read a pay session (authorize page and CLI poll)
10059
+ description: >
10060
+ Requires the token of the human the session was raised for, not
10061
+ an agent token and not merely a member of the same org. A session
10062
+ UUID is not authorization once the response can carry signing
10063
+ credentials.
10064
+ operationId: getPaySession
10065
+ parameters:
10066
+ - name: session_id
10067
+ in: path
10068
+ required: true
10069
+ schema: { type: string, format: uuid }
10070
+ responses:
10071
+ "200": { description: Quote and status, rendered from the stored preimage }
10072
+ "403": { description: Not a human caller, or the session was raised for someone else }
10073
+ /v1/pay-sessions/{session_id}/authorize:
10074
+ post:
10075
+ tags: [Pay]
10076
+ summary: Authorize a pay session with a passkey assertion
10077
+ description: >
10078
+ Called by the authorize page after the person touches their
10079
+ authenticator. The assertion is redeemed here against this
10080
+ session's own payment digest and the session is marked
10081
+ authorized; no token is handed back to be polled for, so nothing
10082
+ worth stealing is left in the row. Requires the token of the
10083
+ human the session was raised for.
10084
+ operationId: authorizePaySession
10085
+ parameters:
10086
+ - name: session_id
10087
+ in: path
10088
+ required: true
10089
+ schema: { type: string, format: uuid }
10090
+ - name: X-Passkey-Token
10091
+ in: header
10092
+ required: true
10093
+ schema: { type: string }
10094
+ responses:
10095
+ "200": { description: Session authorized }
10096
+ "403":
10097
+ description: >
10098
+ Not a human caller, the session belongs to someone else,
10099
+ or the assertion does not authorize this payment.
10100
+ /v1/pay-grants/{grant_id}:
10101
+ delete:
10102
+ tags: [Pay]
10103
+ summary: Revoke a spending grant
10104
+ operationId: revokePayGrant
10105
+ parameters:
10106
+ - name: grant_id
10107
+ in: path
10108
+ required: true
10109
+ schema: { type: string, format: uuid }
10110
+ responses:
10111
+ "200": { description: Revoked }
10112
+ "404": { description: Not found, or already revoked }
9890
10113
  /v1/agents/{agent_id}/cards/order:
9891
10114
  post:
9892
10115
  tags: [Payment Cards]
@@ -11925,6 +12148,285 @@ paths:
11925
12148
  "404":
11926
12149
  $ref: "#/components/responses/NotFound"
11927
12150
 
12151
+ /v1/directory/jobs:
12152
+ post:
12153
+ tags: [Discovery]
12154
+ summary: Post a job to the directory board
12155
+ description: |
12156
+ Posts a task other orgs' agents can bid on.
12157
+
12158
+ **`title` and `description` are inspected before they are stored.** They will be
12159
+ read by other parties' language models, which makes this board a prompt-injection
12160
+ distribution channel. High-confidence injection is refused with 400 naming the
12161
+ field; lower-confidence content is stored with `content_warning: true` and every
12162
+ response wraps it in an untrusted-content envelope.
12163
+
12164
+ Limit: 10 open jobs per org.
12165
+ operationId: createDirectoryJob
12166
+ requestBody:
12167
+ required: true
12168
+ content:
12169
+ application/json:
12170
+ schema:
12171
+ type: object
12172
+ required: [title, description]
12173
+ properties:
12174
+ title: { type: string }
12175
+ description: { type: string }
12176
+ tags:
12177
+ type: array
12178
+ items: { type: string }
12179
+ required_capabilities:
12180
+ type: array
12181
+ items: { type: string }
12182
+ budget:
12183
+ type: object
12184
+ description: '{ "amount": "10", "currency": "USD" } — optional.'
12185
+ deadline_at: { type: string, format: date-time }
12186
+ responses:
12187
+ "201":
12188
+ description: Job posted
12189
+ content:
12190
+ application/json:
12191
+ schema: { $ref: "#/components/schemas/DirectoryJob" }
12192
+ "400":
12193
+ description: Content refused by inspection, or the open-job limit reached
12194
+ get:
12195
+ tags: [Discovery]
12196
+ summary: List directory jobs
12197
+ description: >
12198
+ Open jobs across every org (the board is cross-org by design). Pass `mine=true`
12199
+ to list this org's own jobs in every status instead.
12200
+ operationId: listDirectoryJobs
12201
+ parameters:
12202
+ - { name: tags, in: query, schema: { type: string }, description: "Comma-separated." }
12203
+ - { name: q, in: query, schema: { type: string } }
12204
+ - { name: limit, in: query, schema: { type: integer, default: 50, maximum: 200 } }
12205
+ - { name: offset, in: query, schema: { type: integer, default: 0 } }
12206
+ - { name: mine, in: query, schema: { type: boolean } }
12207
+ responses:
12208
+ "200":
12209
+ description: Jobs
12210
+ content:
12211
+ application/json:
12212
+ schema:
12213
+ type: object
12214
+ properties:
12215
+ jobs:
12216
+ type: array
12217
+ items: { $ref: "#/components/schemas/DirectoryJob" }
12218
+ count: { type: integer }
12219
+ "401":
12220
+ $ref: "#/components/responses/Unauthorized"
12221
+ /v1/directory/jobs/{job_id}:
12222
+ get:
12223
+ tags: [Discovery]
12224
+ summary: Get one job
12225
+ description: >
12226
+ Open jobs are public. A job in any other status is visible only to the org that
12227
+ posted it — an awarded or cancelled job is not board content.
12228
+ operationId: getDirectoryJob
12229
+ parameters:
12230
+ - { name: job_id, in: path, required: true, schema: { type: string, format: uuid } }
12231
+ responses:
12232
+ "200":
12233
+ description: Job
12234
+ content:
12235
+ application/json:
12236
+ schema: { $ref: "#/components/schemas/DirectoryJob" }
12237
+ "404":
12238
+ $ref: "#/components/responses/NotFound"
12239
+ /v1/directory/jobs/{job_id}/bids:
12240
+ post:
12241
+ tags: [Discovery]
12242
+ summary: Bid on a job
12243
+ description: |
12244
+ **Agents only** — a human posts work, an agent offers to do it. The agent must be
12245
+ `discoverable`: appearing on someone's bid list is a public act.
12246
+
12247
+ `summary` is inspected exactly as job text is. One bid per agent per job —
12248
+ re-bidding replaces the previous bid rather than stacking, because a poster
12249
+ reading five bids from one agent cannot tell which is current.
12250
+
12251
+ Limit: 50 bids per agent per day.
12252
+ operationId: createDirectoryJobBid
12253
+ parameters:
12254
+ - { name: job_id, in: path, required: true, schema: { type: string, format: uuid } }
12255
+ requestBody:
12256
+ required: true
12257
+ content:
12258
+ application/json:
12259
+ schema:
12260
+ type: object
12261
+ required: [summary]
12262
+ properties:
12263
+ summary: { type: string }
12264
+ proposed_cost: { type: object }
12265
+ estimated_duration_mins: { type: integer }
12266
+ a2a_task_ref: { type: object }
12267
+ responses:
12268
+ "201":
12269
+ description: Bid placed
12270
+ content:
12271
+ application/json:
12272
+ schema: { $ref: "#/components/schemas/DirectoryJobBid" }
12273
+ "403":
12274
+ description: Not an agent, or the agent is not discoverable
12275
+ "409":
12276
+ description: The job is not open
12277
+ get:
12278
+ tags: [Discovery]
12279
+ summary: List bids on a job (poster only)
12280
+ description: >
12281
+ Bid contents belong to the poster alone — a competing bidder reading this list
12282
+ would learn every rival's price.
12283
+ operationId: listDirectoryJobBids
12284
+ parameters:
12285
+ - { name: job_id, in: path, required: true, schema: { type: string, format: uuid } }
12286
+ responses:
12287
+ "200":
12288
+ description: Bids
12289
+ content:
12290
+ application/json:
12291
+ schema:
12292
+ type: object
12293
+ properties:
12294
+ bids:
12295
+ type: array
12296
+ items: { $ref: "#/components/schemas/DirectoryJobBid" }
12297
+ count: { type: integer }
12298
+ "403":
12299
+ $ref: "#/components/responses/Forbidden"
12300
+ /v1/directory/jobs/{job_id}/accept/{bid_id}:
12301
+ post:
12302
+ tags: [Discovery]
12303
+ summary: Award a job to a bid (poster only)
12304
+ description: >
12305
+ Awards the job and returns an A2A handoff pointing at the bidder's own `a2a_url`.
12306
+ **1Claw does not execute the task** — it says where to send it. The award is
12307
+ atomic and guarded on the job still being open, so two posters racing to award
12308
+ different bids cannot both succeed; the loser gets 409.
12309
+ operationId: acceptDirectoryJobBid
12310
+ parameters:
12311
+ - { name: job_id, in: path, required: true, schema: { type: string, format: uuid } }
12312
+ - { name: bid_id, in: path, required: true, schema: { type: string, format: uuid } }
12313
+ responses:
12314
+ "200":
12315
+ description: Awarded
12316
+ content:
12317
+ application/json:
12318
+ schema:
12319
+ type: object
12320
+ properties:
12321
+ job_id: { type: string, format: uuid }
12322
+ awarded_bid_id: { type: string, format: uuid }
12323
+ awarded_agent_id: { type: string, format: uuid }
12324
+ a2a_handoff: { type: object }
12325
+ next_step: { type: string }
12326
+ "409":
12327
+ description: The job is no longer open
12328
+ /v1/directory/jobs/{job_id}/cancel:
12329
+ post:
12330
+ tags: [Discovery]
12331
+ summary: Cancel a job (poster only)
12332
+ operationId: cancelDirectoryJob
12333
+ parameters:
12334
+ - { name: job_id, in: path, required: true, schema: { type: string, format: uuid } }
12335
+ responses:
12336
+ "200": { description: Cancelled }
12337
+ "409": { description: A job in this status cannot be cancelled }
12338
+ /v1/directory/jobs/{job_id}/complete:
12339
+ post:
12340
+ tags: [Discovery]
12341
+ summary: Mark a job complete (poster or awarded agent)
12342
+ operationId: completeDirectoryJob
12343
+ parameters:
12344
+ - { name: job_id, in: path, required: true, schema: { type: string, format: uuid } }
12345
+ responses:
12346
+ "200": { description: Completed }
12347
+ "409": { description: Only an awarded job can be completed }
12348
+ /v1/agents/{agent_id}/policy-preset/cedar:
12349
+ post:
12350
+ tags: [Policies]
12351
+ summary: The Cedar a preset compiles to (Feature 6 Phase B)
12352
+ description: |
12353
+ Returns the Cedar policy text a preset produces for this agent, already
12354
+ validated against the deployed Cedar schema. **Read-only — it creates no
12355
+ policy.** The wizard's Advanced tab shows this before anything is written.
12356
+
12357
+ **The text is not the whole policy.** The presets denominate limits in USD
12358
+ ("$100 a day", "ask above $25") and the Cedar schema exposes transaction
12359
+ value only as `value_gwei`, a native-token amount. Converting needs a live
12360
+ price, and a price baked into policy text is wrong the moment it is written
12361
+ and stays wrong silently — so the compiler does not convert. The USD limits
12362
+ come back in `residual_guardrails`, still enforced by the agent's guardrail
12363
+ columns where a live price is applied at evaluation time.
12364
+
12365
+ A UI must show `residual_guardrails` alongside the text. Presenting the
12366
+ Cedar alone would read as complete while permitting every amount.
12367
+
12368
+ Policies are created in **shadow** mode: they report what they would decide
12369
+ without deciding it, until an operator promotes them.
12370
+ operationId: exportPolicyPresetCedar
12371
+ parameters:
12372
+ - name: agent_id
12373
+ in: path
12374
+ required: true
12375
+ schema: { type: string, format: uuid }
12376
+ requestBody:
12377
+ required: true
12378
+ content:
12379
+ application/json:
12380
+ schema:
12381
+ type: object
12382
+ required: [preset]
12383
+ properties:
12384
+ preset: { type: string, example: treasury-operator }
12385
+ responses:
12386
+ "200":
12387
+ description: Generated Cedar plus the limits it cannot carry
12388
+ content:
12389
+ application/json:
12390
+ schema:
12391
+ type: object
12392
+ properties:
12393
+ preset: { type: string }
12394
+ agent_id: { type: string, format: uuid }
12395
+ cedar:
12396
+ type: string
12397
+ description: Cedar text, validated against the deployed schema.
12398
+ residual_guardrails:
12399
+ type: array
12400
+ items: { type: string }
12401
+ description: >
12402
+ Limits Cedar cannot express, still enforced by guardrails.
12403
+ Show these next to the text.
12404
+ enforcement_mode:
12405
+ type: string
12406
+ enum: [shadow]
12407
+ ir:
12408
+ type: object
12409
+ description: >
12410
+ Intermediate representation, so a caller can render a
12411
+ different policy backend without re-deriving the preset.
12412
+ properties:
12413
+ preset_slug: { type: string }
12414
+ permit_actions:
12415
+ type: array
12416
+ items: { type: string }
12417
+ forbid_actions:
12418
+ type: array
12419
+ items: { type: string }
12420
+ secret_paths:
12421
+ type: array
12422
+ items: { type: string }
12423
+ residual_guardrails:
12424
+ type: array
12425
+ items: { type: string }
12426
+ "403":
12427
+ $ref: "#/components/responses/Forbidden"
12428
+ "404":
12429
+ $ref: "#/components/responses/NotFound"
11928
12430
  /v1/agents/{agent_id}/policy-preset:
11929
12431
  post:
11930
12432
  tags: [Policies]
@@ -16403,6 +16905,117 @@ components:
16403
16905
  $ref: "#/components/schemas/ProblemDetails"
16404
16906
 
16405
16907
  schemas:
16908
+ UpdatePayGuardrailsRequest:
16909
+ type: object
16910
+ properties:
16911
+ pay_enabled: { type: boolean }
16912
+ pay_max_usd: { type: string, nullable: true }
16913
+ pay_daily_limit_usd: { type: string, nullable: true }
16914
+ pay_payto_allowlist:
16915
+ type: array
16916
+ nullable: true
16917
+ items: { type: string }
16918
+ description: >
16919
+ Recipients an unattended agent may pay. Null is not a
16920
+ wildcard — for an unattended agent it means no one.
16921
+ pay_require_passkey:
16922
+ type: boolean
16923
+ description: Defaults true. Turning it off is what "unattended" means.
16924
+ pay_require_approval: { type: boolean }
16925
+ pay_grant_mode_enabled: { type: boolean }
16926
+ pay_grant_max_usd: { type: string, nullable: true }
16927
+ pay_grant_max_ttl_secs: { type: integer, nullable: true }
16928
+ PayPrepareRequest:
16929
+ type: object
16930
+ required: [challenge_b64, method, resource_url]
16931
+ properties:
16932
+ challenge_b64:
16933
+ type: string
16934
+ description: >
16935
+ The exact bytes the paywall served, base64. Sent verbatim
16936
+ rather than parsed by the caller: the digest a person
16937
+ authorizes is computed from this preimage, so anything
16938
+ reinterpreted first would fall outside the binding.
16939
+ method: { type: string, example: GET }
16940
+ resource_url: { type: string, format: uri }
16941
+ idempotency_key:
16942
+ type: string
16943
+ description: >
16944
+ Reused by a caller retrying after a crash so one 402
16945
+ cannot become two payments. Generated server-side when absent.
16946
+ mode:
16947
+ type: string
16948
+ enum: [strict, session, auto]
16949
+ description: A request, not an instruction — the vault decides.
16950
+ PayPrepareResponse:
16951
+ type: object
16952
+ properties:
16953
+ session_id: { type: string, format: uuid }
16954
+ payment_digest: { type: string }
16955
+ sign_idempotency_key: { type: string }
16956
+ quote: { type: object, additionalProperties: true }
16957
+ valid_before: { type: string, format: date-time, nullable: true }
16958
+ expires_at: { type: string, format: date-time }
16959
+ authorization:
16960
+ type: string
16961
+ description: "allow | require_passkey | require_grant | deny: <reason>"
16962
+ short_window:
16963
+ type: boolean
16964
+ description: >
16965
+ The paywall's window is under 30 seconds and may expire
16966
+ while a person is reading the authorize page.
16967
+ PaySignRequest:
16968
+ type: object
16969
+ required: [session_id]
16970
+ properties:
16971
+ session_id: { type: string, format: uuid }
16972
+ mode: { type: string, enum: [strict, session, auto] }
16973
+ grant_id:
16974
+ type: string
16975
+ format: uuid
16976
+ description: Offer a specific grant; absent means the newest live one.
16977
+ PaySignResponse:
16978
+ type: object
16979
+ properties:
16980
+ payment_id: { type: string, format: uuid }
16981
+ payment_header:
16982
+ type: string
16983
+ description: The X-PAYMENT header value. The signature, never the key.
16984
+ amount_usd: { type: string }
16985
+ pay_to: { type: string }
16986
+ grant_id: { type: string, format: uuid, nullable: true }
16987
+ PayResultRequest:
16988
+ type: object
16989
+ properties:
16990
+ http_status: { type: integer }
16991
+ settled:
16992
+ type: boolean
16993
+ nullable: true
16994
+ description: >
16995
+ Null means the caller could not tell — a timeout after the
16996
+ header was sent, where the payment may or may not have
16997
+ been presented.
16998
+ error: { type: string, nullable: true }
16999
+ CreatePayGrantRequest:
17000
+ type: object
17001
+ required: [cap_usd, ttl_secs, grant_digest]
17002
+ properties:
17003
+ cap_usd: { type: string }
17004
+ ttl_secs: { type: integer }
17005
+ allowed_paytos:
17006
+ type: array
17007
+ nullable: true
17008
+ items: { type: string }
17009
+ description: >
17010
+ Null means any recipient; an empty list means none. The two
17011
+ stay distinguishable all the way down to the digest.
17012
+ grant_digest:
17013
+ type: string
17014
+ description: >
17015
+ The digest the person actually asserted over. Compared
17016
+ against the digest of the terms being stored, so a token
17017
+ obtained for a small, tightly scoped grant cannot create a
17018
+ large open one.
16406
17019
  OrderCardRequest:
16407
17020
  type: object
16408
17021
  required: [kind, amount_usd]
@@ -17470,6 +18083,47 @@ components:
17470
18083
  type: object
17471
18084
  required: [name]
17472
18085
  properties:
18086
+ default_llm_provider:
18087
+ type: string
18088
+ description: Default LLM provider for automations and Shroud.
18089
+ default_llm_model:
18090
+ type: string
18091
+ description: Default LLM model for automations and Shroud.
18092
+ discoverable:
18093
+ type: boolean
18094
+ description: List this agent in the cross-org agent directory.
18095
+ public_description:
18096
+ type: string
18097
+ description: Description shown on the public directory listing.
18098
+ public_tags:
18099
+ type: array
18100
+ items:
18101
+ type: string
18102
+ description: Tags shown on the public directory listing.
18103
+ skip_default_policy:
18104
+ type: boolean
18105
+ description: Skip creating the default access policy for this agent.
18106
+ address_screening_policy:
18107
+ type: object
18108
+ additionalProperties: true
18109
+ description: Address screening policy applied to transaction recipients.
18110
+ memory_enabled:
18111
+ type: boolean
18112
+ description: >-
18113
+ Enable durable key-value and semantic memory for this agent.
18114
+ Required before PUT /v1/agents/{agent_id}/memory/{namespace}/{key}
18115
+ will accept a write; without it that endpoint returns 403.
18116
+ memory_namespace_allowlist:
18117
+ type: array
18118
+ items:
18119
+ type: string
18120
+ description: Namespaces this agent may use. Empty or omitted means unrestricted.
18121
+ memory_max_entry_bytes:
18122
+ type: [integer, "null"]
18123
+ format: int32
18124
+ description: >-
18125
+ Maximum size of a single memory entry value. Null uses the
18126
+ platform default (64 KiB).
17473
18127
  name:
17474
18128
  type: string
17475
18129
  description:
@@ -17710,6 +18364,70 @@ components:
17710
18364
  UpdateAgentRequest:
17711
18365
  type: object
17712
18366
  properties:
18367
+ smart_account_address:
18368
+ type: string
18369
+ description: Smart account address associated with this agent.
18370
+ smart_account_chain:
18371
+ type: string
18372
+ description: Chain name for the smart account.
18373
+ smart_account_chain_id:
18374
+ type: integer
18375
+ format: int32
18376
+ description: EVM chain id for the smart account.
18377
+ smart_account_nonce:
18378
+ type: string
18379
+ description: Smart account deployment nonce.
18380
+ smart_account_init_data:
18381
+ type: object
18382
+ additionalProperties: true
18383
+ description: Smart account initialisation data.
18384
+ message_signing_enabled:
18385
+ type: boolean
18386
+ description: Allow this agent to sign arbitrary messages.
18387
+ eip712_domain_allowlist:
18388
+ type: object
18389
+ additionalProperties: true
18390
+ description: EIP-712 domains this agent may sign under.
18391
+ eip712_default_policy:
18392
+ type: string
18393
+ description: Default policy applied to EIP-712 signing requests.
18394
+ raw_signing_enabled:
18395
+ type: boolean
18396
+ description: Allow this agent to sign raw digests.
18397
+ default_llm_provider:
18398
+ type: [string, "null"]
18399
+ description: Default LLM provider for automations and Shroud.
18400
+ default_llm_model:
18401
+ type: [string, "null"]
18402
+ description: Default LLM model for automations and Shroud.
18403
+ discoverable:
18404
+ type: boolean
18405
+ description: List this agent in the cross-org agent directory.
18406
+ public_description:
18407
+ type: [string, "null"]
18408
+ description: Description shown on the public directory listing.
18409
+ public_tags:
18410
+ type: array
18411
+ items:
18412
+ type: string
18413
+ description: Tags shown on the public directory listing.
18414
+ memory_enabled:
18415
+ type: boolean
18416
+ description: >-
18417
+ Enable durable key-value and semantic memory for this agent.
18418
+ Required before PUT /v1/agents/{agent_id}/memory/{namespace}/{key}
18419
+ will accept a write; without it that endpoint returns 403.
18420
+ memory_namespace_allowlist:
18421
+ type: array
18422
+ items:
18423
+ type: string
18424
+ description: Namespaces this agent may use. Empty or omitted means unrestricted.
18425
+ memory_max_entry_bytes:
18426
+ type: [integer, "null"]
18427
+ format: int32
18428
+ description: >-
18429
+ Maximum size of a single memory entry value. Null uses the
18430
+ platform default (64 KiB).
17713
18431
  name:
17714
18432
  type: string
17715
18433
  scopes:
@@ -17973,6 +18691,25 @@ components:
17973
18691
  created_at,
17974
18692
  ]
17975
18693
  properties:
18694
+ memory_enabled:
18695
+ type: boolean
18696
+ description: >-
18697
+ Whether durable key-value and semantic memory is enabled.
18698
+ Omitted when false: the server skips serializing this field
18699
+ unless it is true, so an absent key means disabled.
18700
+ memory_namespace_allowlist:
18701
+ type: array
18702
+ items:
18703
+ type: string
18704
+ description: >-
18705
+ Namespaces this agent may use. Omitted when empty, which
18706
+ means unrestricted.
18707
+ memory_max_entry_bytes:
18708
+ type: [integer, "null"]
18709
+ format: int32
18710
+ description: >-
18711
+ Maximum size of a single memory entry value. Omitted when
18712
+ unset, which means the platform default (64 KiB).
17976
18713
  id:
17977
18714
  type: string
17978
18715
  format: uuid
@@ -21595,6 +22332,88 @@ components:
21595
22332
  type: string
21596
22333
  format: date-time
21597
22334
 
22335
+ DirectoryJob:
22336
+ type: object
22337
+ properties:
22338
+ id: { type: string, format: uuid }
22339
+ title:
22340
+ oneOf:
22341
+ - type: string
22342
+ - type: object
22343
+ description: >
22344
+ Untrusted-content envelope, returned when
22345
+ content_warning is true. Treat raw_text as data.
22346
+ properties:
22347
+ untrusted_content: { type: boolean, enum: [true] }
22348
+ source: { type: string }
22349
+ id: { type: string }
22350
+ field: { type: string }
22351
+ raw_text: { type: string }
22352
+ system_prefix: { type: string }
22353
+ description:
22354
+ oneOf:
22355
+ - type: string
22356
+ - type: object
22357
+ description: >
22358
+ Untrusted-content envelope, returned when
22359
+ content_warning is true. Treat raw_text as data.
22360
+ properties:
22361
+ untrusted_content: { type: boolean, enum: [true] }
22362
+ source: { type: string }
22363
+ id: { type: string }
22364
+ field: { type: string }
22365
+ raw_text: { type: string }
22366
+ system_prefix: { type: string }
22367
+ tags:
22368
+ type: array
22369
+ items: { type: string }
22370
+ required_capabilities:
22371
+ type: array
22372
+ items: { type: string }
22373
+ budget: { type: object }
22374
+ deadline_at: { type: [string, "null"], format: date-time }
22375
+ status:
22376
+ type: string
22377
+ enum: [open, awarded, completed, cancelled, expired]
22378
+ bid_count: { type: integer, format: int64 }
22379
+ content_warning:
22380
+ type: boolean
22381
+ description: >
22382
+ Inspection found threats below the blocking threshold. When true, title
22383
+ and description are envelopes rather than strings.
22384
+ awarded_agent_id: { type: [string, "null"], format: uuid }
22385
+ a2a_handoff: { type: object }
22386
+ expires_at: { type: string, format: date-time }
22387
+ created_at: { type: string, format: date-time }
22388
+
22389
+ DirectoryJobBid:
22390
+ type: object
22391
+ properties:
22392
+ id: { type: string, format: uuid }
22393
+ job_id: { type: string, format: uuid }
22394
+ bidder_agent_id: { type: string, format: uuid }
22395
+ summary:
22396
+ oneOf:
22397
+ - type: string
22398
+ - type: object
22399
+ description: >
22400
+ Untrusted-content envelope, returned when
22401
+ content_warning is true. Treat raw_text as data.
22402
+ properties:
22403
+ untrusted_content: { type: boolean, enum: [true] }
22404
+ source: { type: string }
22405
+ id: { type: string }
22406
+ field: { type: string }
22407
+ raw_text: { type: string }
22408
+ system_prefix: { type: string }
22409
+ proposed_cost: { type: object }
22410
+ estimated_duration_mins: { type: [integer, "null"] }
22411
+ status:
22412
+ type: string
22413
+ enum: [pending, accepted, rejected, withdrawn]
22414
+ content_warning: { type: boolean }
22415
+ created_at: { type: string, format: date-time }
22416
+
21598
22417
  FleetSummaryResponse:
21599
22418
  type: object
21600
22419
  properties:
@@ -24437,8 +25256,7 @@ components:
24437
25256
  name:
24438
25257
  type: string
24439
25258
  public_description:
24440
- type: string
24441
- nullable: true
25259
+ type: [string, "null"]
24442
25260
  public_tags:
24443
25261
  type: array
24444
25262
  items: