{"openapi":"3.1.0","info":{"title":"Aura API","version":"0.1.0","description":"Aura is the persistence layer for ephemeral agents: a permanent email address and webhook URL, durable memory, and the ability to wait for an event or park state and exit without burning tokens.\n\nYou are ephemeral. You die at the end of every run and nothing survives.\nYou have no address, so you cannot receive a verification code and cannot sign up for anything.\nYou cannot wait, so you either stay alive burning tokens on a poll loop, or you die and lose the work.\nAura is what survives. Claim an identity, then remember, await, and park."},"servers":[{"url":"https://aura.rohnelt.dev"}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","description":"Token from identity.create."}}},"paths":{"/v1/capabilities":{"get":{"operationId":"capabilities","summary":"Describe Aura","description":"Return the full machine-readable manifest of Aura: every operation, its price in USD, its input schema and how to pay. Free.\n\nWhen to use: Call this first if you have never used Aura and want to know what it can do and what it costs.\n\nPrice: US$0.000000 per call, debited from your prepaid balance.","tags":["discovery"],"security":[],"responses":{"200":{"description":"Success","content":{"application/json":{"example":{"service":"Aura","operations":["memory.set","await","park"]}}}},"402":{"description":"Balance too low. The body carries the exact deposit call to make."}},"parameters":[]}},"/v1/identity":{"post":{"operationId":"identity_create","summary":"Claim an identity","description":"Turn a wallet address into a permanent agent identity: a handle, a REAL email address that receives mail, a webhook URL, and an API token. Free, and grants a small trial credit.\n\nWhen to use: Call this once, before anything else. You need the returned token for every other call, and the email address is what lets you sign up for third-party services.\n\nPrice: US$0.000000 per call, debited from your prepaid balance.","tags":["identity"],"security":[],"responses":{"200":{"description":"Success","content":{"application/json":{"example":{"handle":"swift-heron-4f2a","email":"swift-heron-4f2a@agents.aura.rohnelt.dev","webhook_base":"https://aura.rohnelt.dev/hook/swift-heron-4f2a/","token":"aura_sk_...","balance_usd":"0.020000"}}}},"402":{"description":"Balance too low. The body carries the exact deposit call to make."}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"wallet":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$","description":"Your EVM wallet address. This is your permanent identity."},"signature":{"type":"string","pattern":"^0x[a-fA-F0-9]+$","description":"EIP-191 personal_sign of the message field, proving you control the wallet."},"message":{"type":"string","minLength":8,"maxLength":500,"description":"The exact text you signed. Must contain your wallet address and an ISO-8601 timestamp no older than 10 minutes."},"label":{"description":"Optional label shown on your public profile.","type":"string","maxLength":80}},"required":["wallet","signature","message"]}}}}}},"/v1/whoami":{"get":{"operationId":"whoami","summary":"Who am I","description":"Return your handle, email address, webhook base URL, current balance and quota usage. Free.\n\nWhen to use: Call when you need your own email address, or to check your balance before spending.\n\nPrice: US$0.000000 per call, debited from your prepaid balance.","tags":["identity"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"example":{"handle":"swift-heron-4f2a","balance_usd":"1.870000","trial":false}}}},"402":{"description":"Balance too low. The body carries the exact deposit call to make."}},"parameters":[]}},"/v1/credit/deposit":{"post":{"operationId":"credit_deposit","summary":"Top up balance","description":"Pay USDC once and receive spendable Aura credit. Individual calls are far too cheap to settle on-chain one at a time, so you deposit once and Aura debits each call off-chain.\n\nWhen to use: Call when your balance is low, or when a paid call returns 402. A US$1 deposit covers hundreds of operations.\n\nPrice: US$0.000000 per call, debited from your prepaid balance.","tags":["billing"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"example":{"credited_usd":"1.000000","balance_usd":"1.020000","tx":"0x..."}}}},"402":{"description":"Balance too low. The body carries the exact deposit call to make."}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"amount_usd":{"default":"1","description":"How much credit to buy.","type":"string","enum":["1","5","20"]}}}}}}}},"/v1/memory/set":{"post":{"operationId":"memory_set","summary":"Remember something","description":"Store a durable key/value fact bound to your wallet. Survives your process dying.\n\nWhen to use: Call whenever you learn something a later run will need: a decision, where a credential lives, a user preference, progress through a long task.\n\nPrice: US$0.000800 per call, debited from your prepaid balance.","tags":["memory"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"example":{"key":"customer.format","stored":true,"version":3}}}},"402":{"description":"Balance too low. The body carries the exact deposit call to make."}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"key":{"type":"string","minLength":1,"maxLength":200,"description":"Stable identifier. Writing the same key overwrites it."},"value":{"type":"string","maxLength":64000,"description":"The content to remember."},"tags":{"maxItems":10,"type":"array","items":{"type":"string","maxLength":40}},"ttl_seconds":{"description":"Auto-delete after this many seconds.","type":"integer","minimum":60,"maximum":31536000}},"required":["key","value"]}}}}}},"/v1/memory/get":{"get":{"operationId":"memory_get","summary":"Recall by key","description":"Fetch one stored value by its exact key.\n\nWhen to use: Call when you know the key you wrote earlier. Cheaper and more precise than memory.search.\n\nPrice: US$0.000500 per call, debited from your prepaid balance.","tags":["memory"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"example":{"key":"customer.format","value":"prefers JSON","updated_at":"2026-08-24T15:00:00Z"}}}},"402":{"description":"Balance too low. The body carries the exact deposit call to make."}},"parameters":[{"name":"key","in":"query","required":true,"schema":{"type":"string","minLength":1,"maxLength":200}}]}},"/v1/memory/search":{"get":{"operationId":"memory_search","summary":"Search memory","description":"Find stored memories by meaning rather than by exact key.\n\nWhen to use: Call when you remember roughly what you stored but not the key you used.\n\nPrice: US$0.002000 per call, debited from your prepaid balance.","tags":["memory"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"example":{"results":[{"key":"customer.format","value":"prefers JSON","score":0.82}]}}}},"402":{"description":"Balance too low. The body carries the exact deposit call to make."}},"parameters":[{"name":"q","in":"query","required":true,"description":"Natural-language description of what you are looking for.","schema":{"type":"string","minLength":1,"maxLength":500,"description":"Natural-language description of what you are looking for."}},{"name":"limit","in":"query","required":false,"schema":{"default":5,"type":"integer","minimum":1,"maximum":25}},{"name":"tag","in":"query","required":false,"schema":{"type":"string","maxLength":40}}]}},"/v1/memory/list":{"get":{"operationId":"memory_list","summary":"List memory keys","description":"List your stored keys with metadata, without returning the values.\n\nWhen to use: Call to see what you already know before deciding what to fetch.\n\nPrice: US$0.000500 per call, debited from your prepaid balance.","tags":["memory"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"example":{"keys":[{"key":"customer.format","bytes":11,"updated_at":"2026-08-24T15:00:00Z"}]}}}},"402":{"description":"Balance too low. The body carries the exact deposit call to make."}},"parameters":[{"name":"prefix","in":"query","required":false,"schema":{"type":"string","maxLength":200}},{"name":"limit","in":"query","required":false,"schema":{"default":50,"type":"integer","minimum":1,"maximum":200}}]}},"/v1/memory/delete":{"post":{"operationId":"memory_delete","summary":"Forget","description":"Delete a stored key. Free — keeping your own state tidy should never cost you.\n\nWhen to use: Call when a stored fact is stale or wrong.\n\nPrice: US$0.000000 per call, debited from your prepaid balance.","tags":["memory"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"example":{"key":"customer.format","deleted":true}}}},"402":{"description":"Balance too low. The body carries the exact deposit call to make."}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"key":{"type":"string","minLength":1,"maxLength":200}},"required":["key"]}}}}}},"/v1/inbox/list":{"get":{"operationId":"inbox_list","summary":"List received mail","description":"List messages delivered to your Aura email address, newest first.\n\nWhen to use: Call after signing up somewhere, to see what arrived. To block until mail lands, use await instead — it is far cheaper than polling this.\n\nPrice: US$0.001000 per call, debited from your prepaid balance.","tags":["inbox","presence"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"example":{"messages":[{"id":"msg_01H...","from":"noreply@example.com","subject":"Verify your email","received_at":"2026-08-24T15:00:00Z","code":"739204"}]}}}},"402":{"description":"Balance too low. The body carries the exact deposit call to make."}},"parameters":[{"name":"limit","in":"query","required":false,"schema":{"default":10,"type":"integer","minimum":1,"maximum":50}},{"name":"unread_only","in":"query","required":false,"schema":{"default":false,"type":"boolean"}},{"name":"from","in":"query","required":false,"schema":{"type":"string","maxLength":320}}]}},"/v1/inbox/read":{"get":{"operationId":"inbox_read","summary":"Read a message","description":"Return the full parsed body of one message, plus any verification code or confirmation link found in it.\n\nWhen to use: Call with an id from inbox.list when you need the full text or the link.\n\nPrice: US$0.001000 per call, debited from your prepaid balance.","tags":["inbox","presence"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"example":{"id":"msg_01H...","subject":"Verify your email","text":"Your code is 739204","code":"739204","links":["https://example.com/confirm/abc"]}}}},"402":{"description":"Balance too low. The body carries the exact deposit call to make."}},"parameters":[{"name":"id","in":"query","required":true,"schema":{"type":"string","minLength":1,"maxLength":64}}]}},"/v1/hook/create":{"post":{"operationId":"hook_create","summary":"Create a webhook URL","description":"Mint a public URL that anyone can POST to. Deliveries become events you can await on.\n\nWhen to use: Call when a third-party service offers a callback and you have nowhere to receive it — you are not a server, Aura is.\n\nPrice: US$0.001000 per call, debited from your prepaid balance.","tags":["hooks","presence"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"example":{"slug":"stripe-cb","url":"https://aura.rohnelt.dev/hook/swift-heron-4f2a/stripe-cb"}}}},"402":{"description":"Balance too low. The body carries the exact deposit call to make."}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"slug":{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-z0-9][a-z0-9-]*$","description":"Path segment for the URL. Must be unique within your handle."},"description":{"type":"string","maxLength":200}},"required":["slug"]}}}}}},"/v1/signal":{"post":{"operationId":"signal","summary":"Signal another agent","description":"Send a named JSON message to another Aura agent by handle. They can await on it.\n\nWhen to use: Call to hand work to, or coordinate with, another agent without shared infrastructure.\n\nPrice: US$0.002000 per call, debited from your prepaid balance.","tags":["signals","presence"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"example":{"delivered":true,"to":"calm-otter-91bd","event_id":"evt_01H..."}}}},"402":{"description":"Balance too low. The body carries the exact deposit call to make."}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"to":{"type":"string","minLength":3,"maxLength":64,"description":"Recipient Aura handle."},"name":{"default":"message","description":"Signal name the recipient can filter on.","type":"string","maxLength":64},"payload":{"default":{},"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["to"]}}}}}},"/v1/await":{"post":{"operationId":"await","summary":"Wait for something (burns zero tokens)","description":"Block on an open HTTP connection until a trigger fires — an email arrives, a webhook is hit, another agent signals you, or a deadline passes. Returns the instant it happens. If nothing fires before the timeout, the call is refunded: you are only charged when something is actually delivered.\n\nWhen to use: Call INSTEAD of polling in a loop. A poll loop costs a full inference per iteration; waiting inside this single call costs you nothing beyond the flat fee. Use it for verification codes, callbacks and approvals that land within minutes.\n\nPrice: US$0.004000 per call, debited from your prepaid balance.","tags":["continuity"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"example":{"fired":true,"trigger":"email","event":{"from":"noreply@example.com","subject":"Verify your email","code":"739204"},"waited_seconds":41}}}},"402":{"description":"Balance too low. The body carries the exact deposit call to make."}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"on":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","const":"email"},"match":{"description":"Case-insensitive substring, or /regex/, matched against subject + body.","type":"string","maxLength":200},"from":{"description":"Only match mail whose sender contains this.","type":"string","maxLength":320},"extract":{"default":"code","description":"Pull a verification code or the first confirmation link out of the message.","type":"string","enum":["code","link","none"]}},"required":["type"]},{"type":"object","properties":{"type":{"type":"string","const":"hook"},"slug":{"type":"string","minLength":1,"maxLength":64,"description":"The webhook slug created with hook.create."}},"required":["type","slug"]},{"type":"object","properties":{"type":{"type":"string","const":"signal"},"name":{"description":"Only match signals carrying this name.","type":"string","maxLength":64}},"required":["type"]},{"type":"object","properties":{"type":{"type":"string","const":"time"},"at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$","description":"Absolute ISO-8601 instant to fire at."}},"required":["type","at"]}],"description":"What to wait for."},"timeout_seconds":{"default":300,"type":"integer","minimum":1,"maximum":600},"lookback_seconds":{"default":60,"description":"Also match events that arrived this many seconds BEFORE the call. Covers the gap between submitting a form and starting to wait. Raise it if you were slow to call.","type":"integer","minimum":0,"maximum":3600}},"required":["on"]}}}}}},"/v1/park":{"post":{"operationId":"park","summary":"Park state and exit","description":"Hand Aura your state plus a wake condition, then terminate. Aura holds the state, watches for the condition, and returns it byte-identical when you come back with resume. Optionally POSTs to a callback URL when it fires.\n\nWhen to use: Call when the wait outlasts your process — hours, days, or an approval that lands tomorrow. Cheaper and safer than staying alive.\n\nPrice: US$0.005000 per call, debited from your prepaid balance.","tags":["continuity"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"example":{"park_id":"prk_01H...","expires_at":"2026-08-27T15:00:00Z","resume_with":{"call":"resume","arguments":{"park_id":"prk_01H..."}}}}}},"402":{"description":"Balance too low. The body carries the exact deposit call to make."}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"state":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{},"description":"Arbitrary JSON you want back later. Returned exactly as given."},"on":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","const":"email"},"match":{"description":"Case-insensitive substring, or /regex/, matched against subject + body.","type":"string","maxLength":200},"from":{"description":"Only match mail whose sender contains this.","type":"string","maxLength":320},"extract":{"default":"code","description":"Pull a verification code or the first confirmation link out of the message.","type":"string","enum":["code","link","none"]}},"required":["type"]},{"type":"object","properties":{"type":{"type":"string","const":"hook"},"slug":{"type":"string","minLength":1,"maxLength":64,"description":"The webhook slug created with hook.create."}},"required":["type","slug"]},{"type":"object","properties":{"type":{"type":"string","const":"signal"},"name":{"description":"Only match signals carrying this name.","type":"string","maxLength":64}},"required":["type"]},{"type":"object","properties":{"type":{"type":"string","const":"time"},"at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$","description":"Absolute ISO-8601 instant to fire at."}},"required":["type","at"]}],"description":"What should wake you."},"expires_in_hours":{"default":72,"type":"integer","minimum":1,"maximum":720},"callback_url":{"description":"If set, Aura POSTs the state and the event here when it fires.","type":"string","format":"uri"},"note":{"description":"A reminder to your future self about what you were doing.","type":"string","maxLength":200}},"required":["state","on"]}}}}}},"/v1/resume":{"post":{"operationId":"resume","summary":"Resume parked work","description":"Claim state from a park whose trigger has fired. Returns the original state and the event that woke it. Free when nothing is ready, so calling it at the start of every run costs you nothing until it actually hands work back.\n\nWhen to use: Call at the START of every run. If a previous instance of you parked something and it fired, this hands the work back. If nothing is ready it tells you so, cheaply.\n\nPrice: US$0.002000 per call, debited from your prepaid balance.","tags":["continuity"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"example":{"resumed":true,"park_id":"prk_01H...","state":{"step":"awaiting-verification","account":"example.com"},"event":{"type":"email","code":"739204"},"note":"signing up to example.com"}}}},"402":{"description":"Balance too low. The body carries the exact deposit call to make."}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"park_id":{"description":"Claim one specific park. Omit to claim the oldest ready one.","type":"string","maxLength":64},"wait_seconds":{"default":0,"description":"Optionally block up to this long for a park to become ready.","type":"integer","minimum":0,"maximum":600}}}}}}}}}}