Creates a new event in the system. The behavior depends on the event_type provided:
register_resource: Registers a new resource (robot/bot) in the system
task_start: Creates a new task run
task_end: Completes an existing task run
task_validate: Validates a completed task run and awards VRW points
points_grant: Grants uncapped Subnet Points to a user. The grant is recorded in the current open distribution window; the server assigns the timestamp and epoch, so callers cannot specify them.
points_revoke: Revokes previously granted Subnet Points from a user. A revoke that identifies the user by recipient debits their unconverted Subnet Points (points not yet converted to BitRobot Bolts) immediately. A revoke that names a grant by original_client_ref takes exactly points from that grant, up to what’s left of it: right away if the grant hasn’t converted to Bolts, or, if it has, through a reversal request the API files for exactly points, responding 202 Accepted. A BitRobot admin reviews the request, and nothing is debited unless they approve it.
Optional replay key, unique per event attempt. Repeating a request with the same key within 24 hours replays the stored response (with an Idempotency-Replayed: true header) instead of creating a second event; a different body under the same key answers 409.
The Solana wallet address of the resource owner. Used to create a wallet record in the system and associate it with the resource for reward tracking. Required.
The type of resource to register. Use 'ent' (default) for full ENT NFT resources, or 'resource' for lightweight non-NFT participants that still earn rewards.
Email address of the resource owner. Required on subnets that pay VRW points to email identities whenever the resource is created by name, or is referenced by resource_id but has no owner yet; a resource that already has an owner needs no identity. Optional on other subnets (recorded for attribution). Mutually exclusive with ent_owner_discord_id. The address is resolved to a BitRobot account (a placeholder is created for an unknown address) and VRW points for this resource go to that account.
Discord user ID (snowflake) of the resource owner. Required on subnets that pay VRW points to Discord identities, under the same rules as ent_owner_email. Mutually exclusive with ent_owner_email.
Metadata for the ENT (Entity NFT) that represents this resource on-chain, following the Metaplex token standard. Provide this alongside ent_owner (on task_start) or owner (on register_resource) to mint a named, attributed NFT. If omitted, a placeholder metadata URI is used.
Event created successfully. The response data contains different fields depending on the event type - see examples for details. A points_revoke event that files a reversal request instead of revoking, or finds one pending, returns 202. Sending a points_revoke again with the client_ref of a reversal request a BitRobot admin has decided returns 200 with outcomereversal_approved or reversal_rejected.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"BitRobot","colors":{"primary":"#5d4bff","light":"#eeecfe","dark":"#4a3acc"},"logo":{"light":"https://mintcdn.com/bitrobot/lyIPJ4DsA8cKp50w/logo/light.svg?fit=max\u0026auto=format\u0026n=lyIPJ4DsA8cKp50w\u0026q=85\u0026s=18accea02ce6ad7a85f82b988d3bac87","dark":"https://mintcdn.com/bitrobot/lyIPJ4DsA8cKp50w/logo/dark.svg?fit=max\u0026auto=format\u0026n=lyIPJ4DsA8cKp50w\u0026q=85\u0026s=41a5abf124fdc224b1607f0535b73774"},"favicon":"https://mintcdn.com/bitrobot/lyIPJ4DsA8cKp50w/favicon.svg?fit=max\u0026auto=format\u0026n=lyIPJ4DsA8cKp50w\u0026q=85\u0026s=1f1da64f08642134cd1e468955181b78","navbar":{"links":[{"icon":"discord","href":"https://discord.gg/VzgKQAba2A","label":"Community"}],"primary":{"type":"button","label":"App","href":"https://app.bitrobot.ai"}},"footer":{"socials":{"x":"https://x.com/bitrobotnetwork","github":"https://github.com/bitrobot-foundation"}},"contextual":{"options":["copy","view","chatgpt","claude","perplexity","mcp","cursor","vscode"],"display":"header"},"styling":{"latex":false},"navigation":{"global":{"anchors":[{"anchor":"Website","icon":"globe","href":"https://bitrobot.ai"}]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"bitrobot","hasAudioNarration":false,"actualSubdomain":"bitrobot","customDomains":["docs.bitrobot.ai"],"gitSource":{"type":"github","owner":"bitrobot-foundation","repo":"bitrobot-public-docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ad531f219affb9b01b0418f","collectionId":"045ed5c0-da9a-4dc0-977c-a160f47c7dcf","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ad531f219affb9b01b0418f"},"entitlements":{},"buildId":"6ad531f219affb9b01b0418f","clientVersion":"0.0.4076","searchFilterCounts":[{"language":"default","tag":"API reference","count":12},{"language":"default","tag":"Guides","count":8},{"language":"default","tag":"Getting started","count":8},{"language":"default","tag":"Subnets","count":4},{"language":"default","tag":"Task Batch Uploads","count":2},{"language":"default","tag":"Task Runs","count":2},{"language":"default","tag":"Connect","count":1},{"language":"default","tag":"Events","count":1},{"language":"default","tag":"API documentation","count":1},{"language":"default","tag":"Points","count":1}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"api-reference/events/create-a-new-event","slug":"/api-reference/events/create-a-new-event","pageMetadata":{"openapi":"post /subnets/{subnet_id}/events","title":"Create a new event","description":"Creates a new event in the system. The behavior depends on the `event_type` provided:\n\n- **register_resource**: Registers a new resource (robot/bot) in the system\n- **task_start**: Creates a new task run\n- **task_end**: Completes an existing task run\n- **task_validate**: Validates a completed task run and awards VRW points\n- **points_grant**: Grants uncapped Subnet Points to a user. The grant is recorded in the current open distribution window; the server assigns the timestamp and epoch, so callers cannot specify them.\n- **points_revoke**: Revokes previously granted Subnet Points from a user. A revoke that identifies the user by `recipient` debits their unconverted Subnet Points (points not yet converted to BitRobot Bolts) immediately. A revoke that names a grant by `original_client_ref` takes exactly `points` from that grant, up to what's left of it: right away if the grant hasn't converted to Bolts, or, if it has, through a reversal request the API files for exactly `points`, responding `202 Accepted`. A BitRobot admin reviews the request, and nothing is debited unless they approve it.\n","href":"/api-reference/events/create-a-new-event"},"description":{"compiledSource":"\"use strict\";\nconst {Fragment: _Fragment, jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n code: \"code\",\n li: \"li\",\n p: \"p\",\n strong: \"strong\",\n ul: \"ul\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_Fragment, {\n children: [_jsxs(_components.p, {\n children: [\"Creates a new event in the system. The behavior depends on the \", _jsx(_components.code, {\n children: \"event_type\"\n }), \" provided:\"]\n }), \"\\n\", _jsxs(_components.ul, {\n children: [\"\\n\", _jsxs(_components.li, {\n children: [_jsx(_components.strong, {\n children: \"register_resource\"\n }), \": Registers a new resource (robot/bot) in the system\"]\n }), \"\\n\", _jsxs(_components.li, {\n children: [_jsx(_components.strong, {\n children: \"task_start\"\n }), \": Creates a new task run\"]\n }), \"\\n\", _jsxs(_components.li, {\n children: [_jsx(_components.strong, {\n children: \"task_end\"\n }), \": Completes an existing task run\"]\n }), \"\\n\", _jsxs(_components.li, {\n children: [_jsx(_components.strong, {\n children: \"task_validate\"\n }), \": Validates a completed task run and awards VRW points\"]\n }), \"\\n\", _jsxs(_components.li, {\n children: [_jsx(_components.strong, {\n children: \"points_grant\"\n }), \": Grants uncapped Subnet Points to a user. The grant is recorded in the current open distribution window; the server assigns the timestamp and epoch, so callers cannot specify them.\"]\n }), \"\\n\", _jsxs(_components.li, {\n children: [_jsx(_components.strong, {\n children: \"points_revoke\"\n }), \": Revokes previously granted Subnet Points from a user. A revoke that identifies the user by \", _jsx(_components.code, {\n children: \"recipient\"\n }), \" debits their unconverted Subnet Points (points not yet converted to BitRobot Bolts) immediately. A revoke that names a grant by \", _jsx(_components.code, {\n children: \"original_client_ref\"\n }), \" takes exactly \", _jsx(_components.code, {\n children: \"points\"\n }), \" from that grant, up to what’s left of it: right away if the grant hasn’t converted to Bolts, or, if it has, through a reversal request the API files for exactly \", _jsx(_components.code, {\n children: \"points\"\n }), \", responding \", _jsx(_components.code, {\n children: \"202 Accepted\"\n }), \". A BitRobot admin reviews the request, and nothing is debited unless they approve it.\"]\n }), \"\\n\"]\n })]\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){return _jsx(_Fragment,{})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"openapi":"post /subnets/{subnet_id}/events","title":"Create a new event","description":"Creates a new event in the system. The behavior depends on the `event_type` provided:\n\n- **register_resource**: Registers a new resource (robot/bot) in the system\n- **task_start**: Creates a new task run\n- **task_end**: Completes an existing task run\n- **task_validate**: Validates a completed task run and awards VRW points\n- **points_grant**: Grants uncapped Subnet Points to a user. The grant is recorded in the current open distribution window; the server assigns the timestamp and epoch, so callers cannot specify them.\n- **points_revoke**: Revokes previously granted Subnet Points from a user. A revoke that identifies the user by `recipient` debits their unconverted Subnet Points (points not yet converted to BitRobot Bolts) immediately. A revoke that names a grant by `original_client_ref` takes exactly `points` from that grant, up to what's left of it: right away if the grant hasn't converted to Bolts, or, if it has, through a reversal request the API files for exactly `points`, responding `202 Accepted`. A BitRobot admin reviews the request, and nothing is debited unless they approve it.\n","href":"/api-reference/events/create-a-new-event"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"summary":"Create a new event","description":"Creates a new event in the system. The behavior depends on the `event_type` provided:\n\n- **register_resource**: Registers a new resource (robot/bot) in the system\n- **task_start**: Creates a new task run\n- **task_end**: Completes an existing task run\n- **task_validate**: Validates a completed task run and awards VRW points\n- **points_grant**: Grants uncapped Subnet Points to a user. The grant is recorded in the current open distribution window; the server assigns the timestamp and epoch, so callers cannot specify them.\n- **points_revoke**: Revokes previously granted Subnet Points from a user. A revoke that identifies the user by `recipient` debits their unconverted Subnet Points (points not yet converted to BitRobot Bolts) immediately. A revoke that names a grant by `original_client_ref` takes exactly `points` from that grant, up to what's left of it: right away if the grant hasn't converted to Bolts, or, if it has, through a reversal request the API files for exactly `points`, responding `202 Accepted`. A BitRobot admin reviews the request, and nothing is debited unless they approve it.\n","operationId":"createEvent","tags":["Events"],"security":["c2fdcfc3-e35c-42d7-bcc6-552523c87f74"],"parameters":["ef531f2c-bfa7-4f04-8200-4aed215aed20","ad873899-edd5-4691-89b4-d4a9d5dfb483"],"requestBody":"947e8738-2df1-4c6b-9938-4b96a44cb145","responses":{"200":"831fbc9e-93fe-4ce8-bc02-0ee3f47bb2bd","202":"bdf54c1e-1c91-40f9-a61b-ce4cdab06a98","401":"b8aa179d-941e-4a74-8b84-10c5fb9ea595","409":"3ddde183-5b53-442b-a99d-b8ff50167733","422":"5536db65-ad7e-477e-916a-adde1cc62e94"},"method":"post","type":"path","servers":["18c7761c-57e3-463e-b8a0-01325bbf5691","bd8a040d-e936-4914-b056-69885413b6c2"],"path":"/subnets/{subnet_id}/events","baseUrlOptions":["https://api-stage.bitrobot.ai","https://api.bitrobot.ai"],"title":"Create a new event","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"ef531f2c-bfa7-4f04-8200-4aed215aed20":{"name":"subnet_id","in":"path","required":true,"description":"The unique identifier of the subnet (ULID format)","schema":{"type":"string","pattern":"^[0-9A-HJKMNP-TV-Z]{26}$","isRequired":true,"description":"The unique identifier of the subnet (ULID format)","uniqueKey":"","typeLabel":"string"},"example":"01ARZ3NDEKTSV4RRFFQ69G5FAV"},"ad873899-edd5-4691-89b4-d4a9d5dfb483":{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":255,"isRequired":false,"description":"Optional replay key, unique per event attempt. Repeating a request with the same key within 24 hours replays the stored response (with an `Idempotency-Replayed: true` header) instead of creating a second event; a different body under the same key answers 409.","uniqueKey":"","typeLabel":"string"},"description":"Optional replay key, unique per event attempt. Repeating a request with the same key within 24 hours replays the stored response (with an `Idempotency-Replayed: true` header) instead of creating a second event; a different body under the same key answers 409."}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"oneOf":[{"type":"object","title":"Register Resource Event","required":["event_type","resource_name","resource_subtype","owner"],"example":{"event_type":"register_resource","resource_name":"bot_001","resource_subtype":"frodobot","owner":"HN7cABqLq46Es1jh92dQQisAq662SmxELLLsHHe4YWrH","ent_metadata":{"name":"Frodobot #001","symbol":"FRODO","description":"Autonomous delivery robot","image":"https://example.com/images/frodobot-001.png"}},"properties":{"event_type":{"type":"string","enum":["register_resource"],"description":"The type of event","isRequired":true,"uniqueKey":"oneOf.0.event_type","typeLabel":"enum\u003cstring>"},"resource_name":{"type":"string","description":"The name of the resource to register. ENT resource names are limited to 32 characters (on-chain NFT name limit); longer names are rejected with 422.","example":"bot_001","maxLength":32,"isRequired":true,"uniqueKey":"oneOf.0.resource_name","typeLabel":"string"},"resource_subtype":{"type":"string","description":"The subtype of the resource (e.g., 'frodobot', 'delivery-drone', etc.)","example":"frodobot","isRequired":true,"uniqueKey":"oneOf.0.resource_subtype","typeLabel":"string"},"owner":{"type":"string","description":"The Solana wallet address of the resource owner. Used to create a wallet record in the system and associate it with the resource for reward tracking. Required.","example":"HN7cABqLq46Es1jh92dQQisAq662SmxELLLsHHe4YWrH","isRequired":true,"uniqueKey":"oneOf.0.owner","typeLabel":"string"},"resource_type":{"type":"string","enum":["ent","resource"],"default":"ent","description":"The type of resource to register. Use 'ent' (default) for full ENT NFT resources, or 'resource' for lightweight non-NFT participants that still earn rewards.","uniqueKey":"oneOf.0.resource_type","typeLabel":"enum\u003cstring>"},"ent_owner_email":{"oneOf":[{"type":"string","format":"email","description":"Email address of the resource owner. Required on subnets that pay VRW points to email identities whenever the resource is created by name, or is referenced by `resource_id` but has no owner yet; a resource that already has an owner needs no identity. Optional on other subnets (recorded for attribution). Mutually exclusive with `ent_owner_discord_id`. The address is resolved to a BitRobot account (a placeholder is created for an unknown address) and VRW points for this resource go to that account.","example":"[email protected]","uniqueKey":"oneOf.0.ent_owner_email.oneOf.0","typeLabel":"string\u003cemail>"},{"type":"null","format":"email","description":"Email address of the resource owner. Required on subnets that pay VRW points to email identities whenever the resource is created by name, or is referenced by `resource_id` but has no owner yet; a resource that already has an owner needs no identity. Optional on other subnets (recorded for attribution). Mutually exclusive with `ent_owner_discord_id`. The address is resolved to a BitRobot account (a placeholder is created for an unknown address) and VRW points for this resource go to that account.","example":"[email protected]","uniqueKey":"oneOf.0.ent_owner_email.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.0.ent_owner_email","typeLabel":"string\u003cemail> | null"},"ent_owner_discord_id":{"oneOf":[{"type":"string","description":"Discord user ID (snowflake) of the resource owner. Required on subnets that pay VRW points to Discord identities, under the same rules as `ent_owner_email`. Mutually exclusive with `ent_owner_email`.","example":"1471164890898104436","uniqueKey":"oneOf.0.ent_owner_discord_id.oneOf.0","typeLabel":"string"},{"type":"null","description":"Discord user ID (snowflake) of the resource owner. Required on subnets that pay VRW points to Discord identities, under the same rules as `ent_owner_email`. Mutually exclusive with `ent_owner_email`.","example":"1471164890898104436","uniqueKey":"oneOf.0.ent_owner_discord_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.0.ent_owner_discord_id","typeLabel":"string | null"},"ent_metadata":{"type":"object","description":"Metadata for the ENT (Entity NFT) that represents this resource on-chain, following the Metaplex token standard. Provide this alongside ent_owner (on task_start) or owner (on register_resource) to mint a named, attributed NFT. If omitted, a placeholder metadata URI is used.","properties":{"name":{"type":"string","description":"Name of the ENT","example":"Frodobot #001","uniqueKey":"oneOf.0.ent_metadata.name","typeLabel":"string"},"symbol":{"type":"string","description":"Symbol for the ENT","example":"FRODO","uniqueKey":"oneOf.0.ent_metadata.symbol","typeLabel":"string"},"description":{"type":"string","description":"Description of the ENT","example":"Autonomous delivery robot","uniqueKey":"oneOf.0.ent_metadata.description","typeLabel":"string"},"image":{"type":"string","format":"uri","description":"URI pointing to the ENT's image","example":"https://example.com/images/frodobot-001.png","uniqueKey":"oneOf.0.ent_metadata.image","typeLabel":"string\u003curi>"},"animation_url":{"type":"string","format":"uri","description":"Optional URI pointing to an animation or video file","example":"https://example.com/animations/frodobot-001.mp4","uniqueKey":"oneOf.0.ent_metadata.animation_url","typeLabel":"string\u003curi>"},"external_url":{"type":"string","format":"uri","description":"Optional external URL for more information","example":"https://example.com/ents/frodobot-001","uniqueKey":"oneOf.0.ent_metadata.external_url","typeLabel":"string\u003curi>"},"attributes":{"type":"array","description":"Optional array of attributes","items":{"type":"object","properties":{"trait_type":{"type":"string","example":"Model","uniqueKey":"oneOf.0.ent_metadata.attributes.items.[INDEX].trait_type","typeLabel":"string"},"value":{"oneOf":[{"type":"string","example":"X-2000","uniqueKey":"oneOf.0.ent_metadata.attributes.items.[INDEX].value.oneOf.0","typeLabel":"string"},{"type":"number","example":"X-2000","uniqueKey":"oneOf.0.ent_metadata.attributes.items.[INDEX].value.oneOf.1","typeLabel":"number"}],"uniqueKey":"oneOf.0.ent_metadata.attributes.items.[INDEX].value","typeLabel":"string | number"}},"uniqueKey":"oneOf.0.ent_metadata.attributes.items.[INDEX]","typeLabel":"object"},"uniqueKey":"oneOf.0.ent_metadata.attributes","typeLabel":"object[]"},"properties":{"type":"object","description":"Optional additional properties","additionalProperties":true,"properties":{"files":{"type":"array","description":"Optional array of files associated with the ENT","items":{"type":"object","properties":{"uri":{"type":"string","format":"uri","uniqueKey":"oneOf.0.ent_metadata.properties.files.items.[INDEX].uri","typeLabel":"string\u003curi>"},"type":{"type":"string","uniqueKey":"oneOf.0.ent_metadata.properties.files.items.[INDEX].type","typeLabel":"string"}},"uniqueKey":"oneOf.0.ent_metadata.properties.files.items.[INDEX]","typeLabel":"object"},"uniqueKey":"oneOf.0.ent_metadata.properties.files","typeLabel":"object[]"},"category":{"type":"string","description":"Optional category","example":"robot","uniqueKey":"oneOf.0.ent_metadata.properties.category","typeLabel":"string"}},"uniqueKey":"oneOf.0.ent_metadata.properties","typeLabel":"object"}},"additionalProperties":true,"example":{"name":"Frodobot #001","symbol":"FRODO","description":"Autonomous delivery robot with advanced navigation capabilities","image":"https://example.com/images/frodobot-001.png","external_url":"https://example.com/ents/frodobot-001","attributes":[{"trait_type":"Model","value":"X-2000"},{"trait_type":"Generation","value":2}],"properties":{"category":"robot","files":[{"uri":"https://example.com/images/frodobot-001.png","type":"image/png"}]}},"uniqueKey":"oneOf.0.ent_metadata","typeLabel":"object"}},"uniqueKey":"oneOf.0","typeLabel":"Register Resource Event · object"},{"type":"object","title":"Task Start Event","required":["event_type","task_id","event_id"],"example":{"event_type":"task_start","task_id":"01ARZ3NDEKTSV4RRFFQ69G5FAV","event_id":"ride_123456","resource_name":"bot_001","resource_subtype":"frodobot","task_vrw_spec":{"input_vars":{"distance":"metrics.distance_traveled"},"formula":"distance * 1.2"},"task_collateral_slash_spec":{"max_grasp_attempts":5},"ent_metadata":{"name":"Frodobot #001","symbol":"FRODO","description":"Autonomous delivery robot","image":"https://example.com/images/frodobot-001.png"},"ent_owner":"HN7cABqLq46Es1jh92dQQisAq662SmxELLLsHHe4YWrH"},"properties":{"event_type":{"type":"string","enum":["task_start"],"description":"The type of event","isRequired":true,"uniqueKey":"oneOf.1.event_type","typeLabel":"enum\u003cstring>"},"task_id":{"type":"string","pattern":"^[0-9A-HJKMNP-TV-Z]{26}$","description":"The unique identifier of an existing task in your subnet (ULID format). Tasks are created via the BitRobot dashboard.","example":"01ARZ3NDEKTSV4RRFFQ69G5FAV","isRequired":true,"uniqueKey":"oneOf.1.task_id","typeLabel":"string"},"event_id":{"type":"string","description":"A caller-defined unique identifier for this event. You can use it to associate the task run with records in your own system, or supply any unique string.","example":"ride_123456","isRequired":true,"uniqueKey":"oneOf.1.event_id","typeLabel":"string"},"task_run_id":{"oneOf":[{"type":"string","pattern":"^[0-9A-HJKMNP-TV-Z]{26}$","description":"Optional caller-supplied identifier for this task run (ULID format). If not provided, a ULID will be generated automatically. Either way, the task_run_id is returned in the response and is required when ending the run.","example":"01BXC4MDEKTSV4RRFFQ69G5FBW","uniqueKey":"oneOf.1.task_run_id.oneOf.0","typeLabel":"string"},{"type":"null","pattern":"^[0-9A-HJKMNP-TV-Z]{26}$","description":"Optional caller-supplied identifier for this task run (ULID format). If not provided, a ULID will be generated automatically. Either way, the task_run_id is returned in the response and is required when ending the run.","example":"01BXC4MDEKTSV4RRFFQ69G5FBW","uniqueKey":"oneOf.1.task_run_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.1.task_run_id","typeLabel":"string | null"},"resource_id":{"oneOf":[{"type":"string","pattern":"^[0-9A-HJKMNP-TV-Z]{26}$","description":"The ULID of a previously registered resource. Either resource_id OR both resource_name and resource_subtype must be provided.","example":"01ARZ3NDEKTSV4RRFFQ69G5FAY","uniqueKey":"oneOf.1.resource_id.oneOf.0","typeLabel":"string"},{"type":"null","pattern":"^[0-9A-HJKMNP-TV-Z]{26}$","description":"The ULID of a previously registered resource. Either resource_id OR both resource_name and resource_subtype must be provided.","example":"01ARZ3NDEKTSV4RRFFQ69G5FAY","uniqueKey":"oneOf.1.resource_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.1.resource_id","typeLabel":"string | null"},"resource_name":{"oneOf":[{"type":"string","description":"The name of the resource performing the task. Required if resource_id is not provided. ENT resource names are limited to 32 characters (on-chain NFT name limit); longer names are rejected with 422.","example":"bot_001","maxLength":32,"uniqueKey":"oneOf.1.resource_name.oneOf.0","typeLabel":"string"},{"type":"null","description":"The name of the resource performing the task. Required if resource_id is not provided. ENT resource names are limited to 32 characters (on-chain NFT name limit); longer names are rejected with 422.","example":"bot_001","maxLength":32,"uniqueKey":"oneOf.1.resource_name.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.1.resource_name","typeLabel":"string | null"},"resource_subtype":{"oneOf":[{"type":"string","description":"The subtype of the resource (e.g., 'frodobot', 'delivery-drone', etc.). Required if resource_id is not provided.","example":"frodobot","uniqueKey":"oneOf.1.resource_subtype.oneOf.0","typeLabel":"string"},{"type":"null","description":"The subtype of the resource (e.g., 'frodobot', 'delivery-drone', etc.). Required if resource_id is not provided.","example":"frodobot","uniqueKey":"oneOf.1.resource_subtype.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.1.resource_subtype","typeLabel":"string | null"},"resource_type":{"oneOf":[{"type":"string","enum":["ent","resource"],"description":"The type of resource performing the task. Defaults to 'ent'. Use 'resource' for non-ENT participants. Only relevant when the resource is being created implicitly via resource_name/resource_subtype.","example":"resource","uniqueKey":"oneOf.1.resource_type.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","enum":["ent","resource"],"description":"The type of resource performing the task. Defaults to 'ent'. Use 'resource' for non-ENT participants. Only relevant when the resource is being created implicitly via resource_name/resource_subtype.","example":"resource","uniqueKey":"oneOf.1.resource_type.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.1.resource_type","typeLabel":"enum\u003cstring> | null"},"task_vrw_spec":{"type":"object","description":"Optional Verifiable Robotic Work (VRW) specification that defines how to calculate rewards based on task metrics. This is a flexible JSON object that can contain any properties relevant to your VRW calculation.","additionalProperties":true,"example":{"input_vars":{"distance":"metrics.distance_traveled"},"formula":"distance * 1.2"},"uniqueKey":"oneOf.1.task_vrw_spec","typeLabel":"object"},"task_collateral_slash_spec":{"type":"object","description":"Optional collateral slashing specification that defines conditions and rules for slashing collateral. This is a flexible JSON object that can contain any properties relevant to your slashing criteria.","additionalProperties":true,"example":{"max_grasp_attempts":5},"uniqueKey":"oneOf.1.task_collateral_slash_spec","typeLabel":"object"},"ent_metadata":{"type":"object","description":"Metadata for the ENT (Entity NFT) that represents this resource on-chain, following the Metaplex token standard. Provide this alongside ent_owner (on task_start) or owner (on register_resource) to mint a named, attributed NFT. If omitted, a placeholder metadata URI is used.","properties":{"name":{"type":"string","description":"Name of the ENT","example":"Frodobot #001","uniqueKey":"oneOf.1.ent_metadata.name","typeLabel":"string"},"symbol":{"type":"string","description":"Symbol for the ENT","example":"FRODO","uniqueKey":"oneOf.1.ent_metadata.symbol","typeLabel":"string"},"description":{"type":"string","description":"Description of the ENT","example":"Autonomous delivery robot","uniqueKey":"oneOf.1.ent_metadata.description","typeLabel":"string"},"image":{"type":"string","format":"uri","description":"URI pointing to the ENT's image","example":"https://example.com/images/frodobot-001.png","uniqueKey":"oneOf.1.ent_metadata.image","typeLabel":"string\u003curi>"},"animation_url":{"type":"string","format":"uri","description":"Optional URI pointing to an animation or video file","example":"https://example.com/animations/frodobot-001.mp4","uniqueKey":"oneOf.1.ent_metadata.animation_url","typeLabel":"string\u003curi>"},"external_url":{"type":"string","format":"uri","description":"Optional external URL for more information","example":"https://example.com/ents/frodobot-001","uniqueKey":"oneOf.1.ent_metadata.external_url","typeLabel":"string\u003curi>"},"attributes":{"type":"array","description":"Optional array of attributes","items":{"type":"object","properties":{"trait_type":{"type":"string","example":"Model","uniqueKey":"oneOf.1.ent_metadata.attributes.items.[INDEX].trait_type","typeLabel":"string"},"value":{"oneOf":[{"type":"string","example":"X-2000","uniqueKey":"oneOf.1.ent_metadata.attributes.items.[INDEX].value.oneOf.0","typeLabel":"string"},{"type":"number","example":"X-2000","uniqueKey":"oneOf.1.ent_metadata.attributes.items.[INDEX].value.oneOf.1","typeLabel":"number"}],"uniqueKey":"oneOf.1.ent_metadata.attributes.items.[INDEX].value","typeLabel":"string | number"}},"uniqueKey":"oneOf.1.ent_metadata.attributes.items.[INDEX]","typeLabel":"object"},"uniqueKey":"oneOf.1.ent_metadata.attributes","typeLabel":"object[]"},"properties":{"type":"object","description":"Optional additional properties","additionalProperties":true,"properties":{"files":{"type":"array","description":"Optional array of files associated with the ENT","items":{"type":"object","properties":{"uri":{"type":"string","format":"uri","uniqueKey":"oneOf.1.ent_metadata.properties.files.items.[INDEX].uri","typeLabel":"string\u003curi>"},"type":{"type":"string","uniqueKey":"oneOf.1.ent_metadata.properties.files.items.[INDEX].type","typeLabel":"string"}},"uniqueKey":"oneOf.1.ent_metadata.properties.files.items.[INDEX]","typeLabel":"object"},"uniqueKey":"oneOf.1.ent_metadata.properties.files","typeLabel":"object[]"},"category":{"type":"string","description":"Optional category","example":"robot","uniqueKey":"oneOf.1.ent_metadata.properties.category","typeLabel":"string"}},"uniqueKey":"oneOf.1.ent_metadata.properties","typeLabel":"object"}},"additionalProperties":true,"example":{"name":"Frodobot #001","symbol":"FRODO","description":"Autonomous delivery robot with advanced navigation capabilities","image":"https://example.com/images/frodobot-001.png","external_url":"https://example.com/ents/frodobot-001","attributes":[{"trait_type":"Model","value":"X-2000"},{"trait_type":"Generation","value":2}],"properties":{"category":"robot","files":[{"uri":"https://example.com/images/frodobot-001.png","type":"image/png"}]}},"uniqueKey":"oneOf.1.ent_metadata","typeLabel":"object"},"ent_owner":{"type":"string","description":"The Solana wallet address to associate with the resource owner in the system. Used for reward tracking and BRB points attribution.","example":"HN7cABqLq46Es1jh92dQQisAq662SmxELLLsHHe4YWrH","uniqueKey":"oneOf.1.ent_owner","typeLabel":"string"},"ent_owner_email":{"oneOf":[{"type":"string","format":"email","description":"Email address of the resource owner. Required on subnets that pay VRW points to email identities whenever the resource is created by name, or is referenced by `resource_id` but has no owner yet; a resource that already has an owner needs no identity. Optional on other subnets (recorded for attribution). Mutually exclusive with `ent_owner_discord_id`. The address is resolved to a BitRobot account (a placeholder is created for an unknown address) and VRW points for this resource go to that account.","example":"[email protected]","uniqueKey":"oneOf.1.ent_owner_email.oneOf.0","typeLabel":"string\u003cemail>"},{"type":"null","format":"email","description":"Email address of the resource owner. Required on subnets that pay VRW points to email identities whenever the resource is created by name, or is referenced by `resource_id` but has no owner yet; a resource that already has an owner needs no identity. Optional on other subnets (recorded for attribution). Mutually exclusive with `ent_owner_discord_id`. The address is resolved to a BitRobot account (a placeholder is created for an unknown address) and VRW points for this resource go to that account.","example":"[email protected]","uniqueKey":"oneOf.1.ent_owner_email.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.1.ent_owner_email","typeLabel":"string\u003cemail> | null"},"ent_owner_discord_id":{"oneOf":[{"type":"string","description":"Discord user ID (snowflake) of the resource owner. Required on subnets that pay VRW points to Discord identities, under the same rules as `ent_owner_email`. Mutually exclusive with `ent_owner_email`.","example":"1471164890898104436","uniqueKey":"oneOf.1.ent_owner_discord_id.oneOf.0","typeLabel":"string"},{"type":"null","description":"Discord user ID (snowflake) of the resource owner. Required on subnets that pay VRW points to Discord identities, under the same rules as `ent_owner_email`. Mutually exclusive with `ent_owner_email`.","example":"1471164890898104436","uniqueKey":"oneOf.1.ent_owner_discord_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.1.ent_owner_discord_id","typeLabel":"string | null"},"started_at":{"oneOf":[{"type":"string","format":"date-time","description":"The real-world time when the task run actually started (ISO 8601). Use this to record when the robot began the operation, which may differ from when the event was ingested.","example":"2024-01-15T10:30:00Z","uniqueKey":"oneOf.1.started_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","description":"The real-world time when the task run actually started (ISO 8601). Use this to record when the robot began the operation, which may differ from when the event was ingested.","example":"2024-01-15T10:30:00Z","uniqueKey":"oneOf.1.started_at.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.1.started_at","typeLabel":"string\u003cdate-time> | null"}},"uniqueKey":"oneOf.1","typeLabel":"Task Start Event · object"},{"type":"object","title":"Task End Event","description":"End a task run. `raw_data_uri` and `raw_data_cid` are required **unless** `force_end: true` is set — see the `force_end` field for the escape hatch.","required":["event_type","task_run_id"],"example":{"event_type":"task_end","task_run_id":"01BXC4MDEKTSV4RRFFQ69G5FBW","raw_data_uri":"https://example.com/data/task_123_raw_data.json","raw_data_cid":"QmNZNUx3scL8WvGzXy6bsbTZPACBL17HURMZmGsG5HavYB","ended_at":"2024-01-15T10:45:00Z"},"properties":{"event_type":{"type":"string","enum":["task_end"],"description":"The type of event","isRequired":true,"uniqueKey":"oneOf.2.event_type","typeLabel":"enum\u003cstring>"},"task_run_id":{"type":"string","pattern":"^[0-9A-HJKMNP-TV-Z]{26}$","description":"The unique identifier of the task run to complete (ULID format). This is the task_run_id returned from the task_start response.","example":"01BXC4MDEKTSV4RRFFQ69G5FBW","isRequired":true,"uniqueKey":"oneOf.2.task_run_id","typeLabel":"string"},"raw_data_uri":{"type":"string","format":"uri","description":"URI pointing to the raw output of the task run (e.g. a video file). BitRobot stores this data on-chain, making the run verifiably linked to real-world output. The URI must be publicly accessible when the event is processed. Required unless `force_end` is true.","example":"https://example.com/data/task_run_123.mp4","uniqueKey":"oneOf.2.raw_data_uri","typeLabel":"string\u003curi>"},"raw_data_cid":{"type":"string","description":"IPFS CID of the raw data file, computed locally using `ipfs add -n --raw-leaves --chunker=size-1048576 -Q \u003cfile>`. BitRobot verifies the CID matches the file at `raw_data_uri`; if it does not, the run is marked invalid and cannot be validated. Required unless `force_end` is true.","example":"QmNZNUx3scL8WvGzXy6bsbTZPACBL17HURMZmGsG5HavYB","uniqueKey":"oneOf.2.raw_data_cid","typeLabel":"string"},"force_end":{"type":"boolean","default":false,"description":"Set to `true` to end a run that produced no raw output (e.g. mid-run hardware failure, aborted operation). When `true`, `raw_data_uri` and `raw_data_cid` are not required and are ignored if provided; the run is ended on chain against placeholder values and the row is flagged as force-ended so downstream logic can treat it differently. Use this *only* when no artifact will ever exist — not as a way to defer sending data.","example":false,"uniqueKey":"oneOf.2.force_end","typeLabel":"boolean"},"ended_at":{"oneOf":[{"type":"string","format":"date-time","description":"The real-world time when the task run actually ended (ISO 8601). Use this to record when the robot completed the operation, which may differ from when the event was ingested.","example":"2024-01-15T10:45:00Z","uniqueKey":"oneOf.2.ended_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","description":"The real-world time when the task run actually ended (ISO 8601). Use this to record when the robot completed the operation, which may differ from when the event was ingested.","example":"2024-01-15T10:45:00Z","uniqueKey":"oneOf.2.ended_at.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.2.ended_at","typeLabel":"string\u003cdate-time> | null"}},"uniqueKey":"oneOf.2","typeLabel":"Task End Event · object"},{"type":"object","title":"Task Validate Event","required":["event_type","task_run_id","vrw_points"],"example":{"event_type":"task_validate","task_run_id":"01BXC4MDEKTSV4RRFFQ69G5FBW","vrw_points":120},"properties":{"event_type":{"type":"string","enum":["task_validate"],"description":"The type of event","isRequired":true,"uniqueKey":"oneOf.3.event_type","typeLabel":"enum\u003cstring>"},"task_run_id":{"type":"string","pattern":"^[0-9A-HJKMNP-TV-Z]{26}$","description":"The unique identifier of the task run to validate (ULID format). This is the task_run_id returned from the task_start response.","example":"01BXC4MDEKTSV4RRFFQ69G5FBW","isRequired":true,"uniqueKey":"oneOf.3.task_run_id","typeLabel":"string"},"vrw_points":{"type":"integer","minimum":0,"description":"The number of Verifiable Robotic Work (VRW) points to award for this task run.","example":120,"isRequired":true,"uniqueKey":"oneOf.3.vrw_points","typeLabel":"integer"}},"uniqueKey":"oneOf.3","typeLabel":"Task Validate Event · object"},{"type":"object","title":"Points Grant Event","description":"Grants uncapped Subnet Points to a recipient identified by exactly one of `bitrobot_user_id`, `email`, `discord_user_id`, or `wallet_address` in the `recipient` object. The grant is recorded against the current open distribution window; the server assigns the timestamp and epoch automatically. Caller-supplied `granted_at` and `brb_epoch_id` fields are not accepted.","required":["event_type","recipient","points","reason"],"example":{"event_type":"points_grant","recipient":{"bitrobot_user_id":"01HQXK5V7YWQZ8NGQB2RJVT9MS"},"points":100,"reason":"Task completion bonus","client_ref":"task_123_completion"},"properties":{"event_type":{"type":"string","enum":["points_grant"],"description":"The type of event","isRequired":true,"uniqueKey":"oneOf.4.event_type","typeLabel":"enum\u003cstring>"},"recipient":{"title":"Reward Recipient","type":"object","description":"Exactly one of `bitrobot_user_id`, `email`, `discord_user_id`, or `wallet_address` must be provided. On grants, `email`, `discord_user_id`, and `wallet_address` support pre-registration attribution: if the recipient is not yet on BitRobot, the grant is held on a placeholder and applied when they create a BitRobot account or connect the wallet. `bitrobot_user_id` must reference an existing user, and revocations always require a recipient who already exists.","properties":{"bitrobot_user_id":{"type":"string","pattern":"^[0-9A-HJKMNP-TV-Z]{26}$","description":"BitRobot user ID (ULID format).","uniqueKey":"oneOf.4.recipient.bitrobot_user_id","typeLabel":"string"},"email":{"type":"string","format":"email","description":"Email address for pre-signup reward attribution.","uniqueKey":"oneOf.4.recipient.email","typeLabel":"string\u003cemail>"},"discord_user_id":{"type":"string","description":"Stable Discord user ID for pre-signup reward attribution.","uniqueKey":"oneOf.4.recipient.discord_user_id","typeLabel":"string"},"wallet_address":{"type":"string","description":"Solana wallet address for pre-registration reward attribution.","uniqueKey":"oneOf.4.recipient.wallet_address","typeLabel":"string"}},"example":{"bitrobot_user_id":"01HQXK5V7YWQZ8NGQB2RJVT9MS"},"isRequired":true,"uniqueKey":"oneOf.4.recipient","typeLabel":"Reward Recipient · object"},"points":{"type":"integer","minimum":1,"description":"The number of points to grant (must be greater than 0)","example":100,"isRequired":true,"uniqueKey":"oneOf.4.points","typeLabel":"integer"},"reason":{"type":"string","maxLength":256,"description":"The reason for granting these points","example":"Task completion bonus","isRequired":true,"uniqueKey":"oneOf.4.reason","typeLabel":"string"},"client_ref":{"type":"string","maxLength":64,"description":"Optional client reference ID for idempotency and tracking. Duplicate values for the same subnet are rejected.","example":"task_123_completion","uniqueKey":"oneOf.4.client_ref","typeLabel":"string"}},"uniqueKey":"oneOf.4","typeLabel":"Points Grant Event · object"},{"type":"object","title":"Points Revoke Event","description":"Revokes previously granted Subnet Points from a user. Identify the user with exactly one of `bitrobot_user_id`, `email`, `discord_user_id`, or `wallet_address` in the `recipient` object, or, instead of `recipient`, name the exact grant you're revoking from with `original_client_ref` (the `client_ref` you sent on the original `points_grant`).\n\nBy `recipient`: if the user's unconverted Subnet Points on your subnet cover `points`, they are debited immediately and the response is `200` with `outcome: \"revoked\"`. The maximum amount you can revoke this way equals the user's `current_period_points` value from the List balances endpoint. Subnet Points that have already been included in a Bolts conversion can't be debited directly, and a revoke by `recipient` never files a reversal request, because it doesn't say which grant to reverse.\n\nBy `original_client_ref`: the grant you named comes first, and `points` can be any amount up to what's left of it (its full points, less what earlier revokes and approved reversal requests took). If the grant hasn't converted to BitRobot Bolts, exactly `points` are revoked from it right away and the response is `200` with `outcome: \"revoked\"`. If it has converted, the API files a reversal request for exactly `points` and responds `202 Accepted` with `outcome: \"reversal_requested\"`; the user's other unconverted points are never debited in its place. Nothing is debited unless a BitRobot admin approves the request, which reverses exactly `reversal_request.points` and rebalances the Bolts from that conversion. Approving part of a grant leaves the rest of it in place, so you can revoke more of it later. A grant can have only one pending reversal request, and while one is pending a revoke files nothing. The API returns the pending request with `already_requested: true` when this event is a re-send of it, or when it was filed from the dashboard or before BitRobot accepted partial reversals (those are for all that's left of the grant, whatever `points` and `client_ref` you send), and otherwise refuses the revoke. Send a `client_ref`, so that sending the same event again tells you whether its request is pending (`202`), approved (`200` with `outcome: \"reversal_approved\"`), or rejected (`200` with `outcome: \"reversal_rejected\"`).","required":["event_type","points","reason"],"example":{"event_type":"points_revoke","recipient":{"discord_user_id":"123456789012345678"},"points":50,"reason":"Duplicate grant correction","client_ref":"revoke-task-001"},"properties":{"event_type":{"type":"string","enum":["points_revoke"],"description":"The type of event","isRequired":true,"uniqueKey":"oneOf.5.event_type","typeLabel":"enum\u003cstring>"},"points":{"type":"integer","minimum":1,"description":"The number of points to revoke (must be greater than 0). With `recipient`, at most the user's remaining unconverted Subnet Points balance. With `original_client_ref`, at most what's left of the grant (its full points, less what earlier revokes and approved reversal requests took): exactly this many are revoked from an unconverted grant, or requested for reversal from a converted one.","example":50,"isRequired":true,"uniqueKey":"oneOf.5.points","typeLabel":"integer"},"reason":{"type":"string","maxLength":256,"description":"The reason for revoking these points. When a reversal request is filed, this is the reason BitRobot's admins see on it","example":"Duplicate grant correction","isRequired":true,"uniqueKey":"oneOf.5.reason","typeLabel":"string"},"recipient":{"type":"object","title":"Reward Recipient","description":"The user to revoke from: exactly one of `bitrobot_user_id`, `email`, `discord_user_id`, or `wallet_address`. Required unless you send `original_client_ref`; don't send both.","example":{"bitrobot_user_id":"01HQXK5V7YWQZ8NGQB2RJVT9MS"},"properties":{"bitrobot_user_id":{"type":"string","pattern":"^[0-9A-HJKMNP-TV-Z]{26}$","description":"BitRobot user ID (ULID format).","uniqueKey":"oneOf.5.recipient.bitrobot_user_id","typeLabel":"string"},"email":{"type":"string","format":"email","description":"Email address for pre-signup reward attribution.","uniqueKey":"oneOf.5.recipient.email","typeLabel":"string\u003cemail>"},"discord_user_id":{"type":"string","description":"Stable Discord user ID for pre-signup reward attribution.","uniqueKey":"oneOf.5.recipient.discord_user_id","typeLabel":"string"},"wallet_address":{"type":"string","description":"Solana wallet address for pre-registration reward attribution.","uniqueKey":"oneOf.5.recipient.wallet_address","typeLabel":"string"}},"uniqueKey":"oneOf.5.recipient","typeLabel":"Reward Recipient · object"},"original_client_ref":{"type":"string","maxLength":64,"description":"The `client_ref` you sent on the original `points_grant`, naming the exact grant to revoke from. The revocation applies to the user that grant was made to. Mutually exclusive with `recipient`. Required to revoke part of a specific grant, and to request a reversal of a grant that has converted to Bolts.","example":"task_123_completion","uniqueKey":"oneOf.5.original_client_ref","typeLabel":"string"},"client_ref":{"type":"string","maxLength":64,"description":"Optional client reference ID for idempotency and tracking. Duplicate values for the same subnet are rejected, with one exception: a revoke by `original_client_ref` that sends the `client_ref` of the reversal request it filed reports where that request stands instead of filing or debiting anything.","example":"revoke-task-001","uniqueKey":"oneOf.5.client_ref","typeLabel":"string"}},"uniqueKey":"oneOf.5","typeLabel":"Points Revoke Event · object"}],"uniqueKey":"","typeLabel":"Register Resource Event · object | Task Start Event · object | Task End Event · object | Task Validate Event · object | Points Grant Event · object | Points Revoke Event · object"},"examples":{"registerResource":{"title":"registerResource","value":{"event_type":"register_resource","resource_name":"bot_001","resource_subtype":"frodobot"}},"registerResourceWithOwner":{"title":"registerResourceWithOwner","value":{"event_type":"register_resource","resource_name":"bot_001","resource_subtype":"frodobot","owner":"HN7cABqLq46Es1jh92dQQisAq662SmxELLLsHHe4YWrH","ent_metadata":{"name":"Frodobot #001","symbol":"FRODO","description":"Autonomous delivery robot with advanced navigation capabilities","image":"https://example.com/images/frodobot-001.png","external_url":"https://example.com/ents/frodobot-001","attributes":[{"trait_type":"Model","value":"X-2000"},{"trait_type":"Generation","value":2}]}}},"registerNonEntResource":{"title":"registerNonEntResource","value":{"event_type":"register_resource","resource_type":"resource","resource_name":"bot_001","resource_subtype":"frodobot","owner":"HN7cABqLq46Es1jh92dQQisAq662SmxELLLsHHe4YWrH"}},"taskStartWithResourceId":{"title":"taskStartWithResourceId","value":{"event_type":"task_start","task_id":"01ARZ3NDEKTSV4RRFFQ69G5FAV","event_id":"ride_123456","resource_id":"01ARZ3NDEKTSV4RRFFQ69G5FAY"}},"taskStartWithTaskId":{"title":"taskStartWithTaskId","value":{"event_type":"task_start","task_id":"01ARZ3NDEKTSV4RRFFQ69G5FAV","event_id":"ride_123456","resource_name":"bot_001","resource_subtype":"frodobot"}},"taskStartWithOwnerEmail":{"title":"taskStartWithOwnerEmail","value":{"event_type":"task_start","event_id":"ride_123456","resource_name":"bot_001","resource_subtype":"frodobot","ent_owner":"HN7cABqLq46Es1jh92dQQisAq662SmxELLLsHHe4YWrH","ent_owner_email":"[email protected]"}},"taskStartNonEntResource":{"title":"taskStartNonEntResource","value":{"event_type":"task_start","task_id":"01ARZ3NDEKTSV4RRFFQ69G5FAV","event_id":"ride_123456","resource_name":"bot_001","resource_subtype":"frodobot","resource_type":"resource","ent_owner":"HN7cABqLq46Es1jh92dQQisAq662SmxELLLsHHe4YWrH"}},"taskStartWithCustomRunId":{"title":"taskStartWithCustomRunId","value":{"event_type":"task_start","task_id":"01ARZ3NDEKTSV4RRFFQ69G5FAV","task_run_id":"01BXC4MDEKTSV4RRFFQ69G5FBW","event_id":"ride_123456","resource_name":"bot_001","resource_subtype":"frodobot"}},"taskStartWithSpecs":{"title":"taskStartWithSpecs","value":{"event_type":"task_start","task_id":"01ARZ3NDEKTSV4RRFFQ69G5FAV","event_id":"ride_123456","resource_name":"bot_001","resource_subtype":"frodobot","task_vrw_spec":{"input_vars":{"distance":"metrics.distance_traveled"},"formula":"distance * 1.2"},"task_collateral_slash_spec":{"max_grasp_attempts":5}}},"taskStartWithEntMetadata":{"title":"taskStartWithEntMetadata","value":{"event_type":"task_start","task_id":"01ARZ3NDEKTSV4RRFFQ69G5FAV","event_id":"ride_123456","resource_name":"bot_001","resource_subtype":"frodobot","ent_metadata":{"name":"Frodobot #001","symbol":"FRODO","description":"Autonomous delivery robot with advanced navigation capabilities","image":"https://example.com/images/frodobot-001.png","external_url":"https://example.com/ents/frodobot-001","attributes":[{"trait_type":"Model","value":"X-2000"},{"trait_type":"Generation","value":2}]},"ent_owner":"HN7cABqLq46Es1jh92dQQisAq662SmxELLLsHHe4YWrH"}},"taskEnd":{"title":"taskEnd","value":{"event_type":"task_end","task_run_id":"01BXC4MDEKTSV4RRFFQ69G5FBW","raw_data_uri":"https://example.com/data/task_123_raw_data.json","raw_data_cid":"QmNZNUx3scL8WvGzXy6bsbTZPACBL17HURMZmGsG5HavYB"}},"taskValidate":{"title":"taskValidate","value":{"event_type":"task_validate","task_run_id":"01BXC4MDEKTSV4RRFFQ69G5FBW","vrw_points":120}},"taskEndForceEnd":{"title":"taskEndForceEnd","value":{"event_type":"task_end","task_run_id":"01BXC4MDEKTSV4RRFFQ69G5FBW","force_end":true}},"pointsGrant":{"title":"pointsGrant","value":{"event_type":"points_grant","recipient":{"bitrobot_user_id":"01HQXK5V7YWQZ8NGQB2RJVT9MS"},"points":100,"reason":"Task completion bonus","client_ref":"task_123_completion"}},"pointsGrantByEmail":{"title":"pointsGrantByEmail","value":{"event_type":"points_grant","recipient":{"email":"[email protected]"},"points":100,"reason":"Task completion bonus","client_ref":"task_123_completion"}},"pointsGrantByWallet":{"title":"pointsGrantByWallet","value":{"event_type":"points_grant","recipient":{"wallet_address":"HN7cABqLq46Es1jh92dQQisAq662SmxELLLsHHe4YWrH"},"points":100,"reason":"Task completion bonus","client_ref":"task_123_completion"}},"pointsRevoke":{"title":"pointsRevoke","value":{"event_type":"points_revoke","recipient":{"discord_user_id":"123456789012345678"},"points":50,"reason":"Duplicate grant correction","client_ref":"revoke-task-001"}},"pointsRevokeByOriginalClientRef":{"title":"pointsRevokeByOriginalClientRef","value":{"event_type":"points_revoke","original_client_ref":"task_123_completion","points":100,"reason":"Grant issued in error","client_ref":"revoke_task_123_completion"}}},"exampleType":"examples"}},"exampleType":"examples"},"responses":{"831fbc9e-93fe-4ce8-bc02-0ee3f47bb2bd":{"description":"Event created successfully. The response data contains different fields depending on the event type - see examples for details. A `points_revoke` event that files a reversal request instead of revoking, or finds one pending, returns `202`. Sending a `points_revoke` again with the `client_ref` of a reversal request a BitRobot admin has decided returns `200` with `outcome` `reversal_approved` or `reversal_rejected`.","content":{"application/json":{"schema":{"type":"object","required":["status","data"],"properties":{"status":{"type":"string","enum":["success"],"example":"success","isRequired":true,"uniqueKey":"status","typeLabel":"enum\u003cstring>"},"data":{"type":"object","properties":{"outcome":{"type":"string","enum":["revoked","reversal_approved","reversal_rejected"],"description":"What a points_revoke event did (returned for points_revoke events). `revoked`: the points were debited, from the user's unconverted balance (by `recipient`) or from the unconverted grant you named (by `original_client_ref`). `reversal_approved` and `reversal_rejected` answer a points_revoke sent again with the `client_ref` of the reversal request it filed, once a BitRobot admin has decided that request: approved means it reversed `points_revoked` points; rejected means nothing was taken (`points_revoked` is 0). Neither files a new request or debits anything. When a reversal request is filed or still pending, the response is `202` with `outcome: \"reversal_requested\"`.","example":"revoked","uniqueKey":"data.outcome","typeLabel":"enum\u003cstring>"},"task_run_id":{"type":"string","pattern":"^[0-9A-HJKMNP-TV-Z]{26}$","description":"ID of the task run (returned for task_start and task_end events)","example":"01BXC4MDEKTSV4RRFFQ69G5FBW","uniqueKey":"data.task_run_id","typeLabel":"string"},"task_id":{"type":"string","pattern":"^[0-9A-HJKMNP-TV-Z]{26}$","description":"ID of the task (returned for task_start and task_end events)","example":"01ARZ3NDEKTSV4RRFFQ69G5FAV","uniqueKey":"data.task_id","typeLabel":"string"},"ledger_id":{"type":"string","pattern":"^[0-9A-HJKMNP-TV-Z]{26}$","description":"ID of the points ledger entry","example":"01ARZ3NDEKTSV4RRFFQ69G5FAX","uniqueKey":"data.ledger_id","typeLabel":"string"},"points_revoked":{"type":"integer","description":"Number of points revoked (returned for points_revoke events). With `outcome` `reversal_approved`, the points the approved reversal request reversed; with `reversal_rejected`, 0","example":50,"uniqueKey":"data.points_revoked","typeLabel":"integer"},"remaining_unconverted_points":{"type":"integer","description":"Remaining unconverted points after revocation (returned for points_revoke events with `outcome` `revoked`)","example":150,"uniqueKey":"data.remaining_unconverted_points","typeLabel":"integer"},"remaining_grant_points":{"type":"integer","description":"Returned for points_revoke events that name a grant by `original_client_ref`: what's left of that grant after this event, which is its full points less everything revokes and approved reversal requests have taken from it","example":40,"uniqueKey":"data.remaining_grant_points","typeLabel":"integer"},"reversal_request":{"title":"Points Revoke Reversal Request","type":"object","description":"A reversal request for points of a grant that has converted to BitRobot Bolts. A `202` response returns it `pending`. A `200` response to a points_revoke sent again with the request's `client_ref` returns it `approved` or `rejected`, once a BitRobot admin has decided it. Approval reverses exactly `points` and rebalances the Bolts from that grant's conversion by the same amount; rejection takes nothing.","required":["id","status","grant_id","points","requested_at"],"properties":{"id":{"type":"string","pattern":"^[0-9A-HJKMNP-TV-Z]{26}$","description":"ID of the reversal request","example":"01JA0B6Q9TQ7X2N4ZK8M3V5R1C","isRequired":true,"uniqueKey":"data.reversal_request.id","typeLabel":"string"},"status":{"type":"string","enum":["pending","approved","rejected"],"description":"`pending` until a BitRobot admin approves or rejects the request. Always `pending` in a `202` response","example":"pending","isRequired":true,"uniqueKey":"data.reversal_request.status","typeLabel":"enum\u003cstring>"},"grant_id":{"type":"string","pattern":"^[0-9A-HJKMNP-TV-Z]{26}$","description":"ID of the grant's points ledger entry (the `ledger_id` returned when it was granted)","example":"01ARZ3NDEKTSV4RRFFQ69G5FAX","isRequired":true,"uniqueKey":"data.reversal_request.grant_id","typeLabel":"string"},"points":{"type":"integer","description":"Exactly what approval takes from the user: the `points` the revoke asked for, which can be part of the grant. A request filed from the dashboard, or before BitRobot accepted partial reversals, takes what's left of the grant","example":60,"isRequired":true,"uniqueKey":"data.reversal_request.points","typeLabel":"integer"},"requested_at":{"type":"string","format":"date-time","description":"When the request was filed","example":"2026-10-13T15:04:05Z","isRequired":true,"uniqueKey":"data.reversal_request.requested_at","typeLabel":"string\u003cdate-time>"},"already_revoked_points":{"type":"integer","description":"Only when earlier revokes or approved reversal requests had already taken part of the grant when this request was filed: the points they took. Approval takes only `points`, so nothing is taken twice","example":40,"uniqueKey":"data.reversal_request.already_revoked_points","typeLabel":"integer"},"client_ref":{"oneOf":[{"type":"string","maxLength":64,"description":"The `client_ref` of the points_revoke that filed the request. Send the same event again with it to see where the request stands. `null` for a request filed from the dashboard, by a revoke that sent no `client_ref`, or before BitRobot accepted partial reversals","example":"revoke_task_123_completion_part","uniqueKey":"data.reversal_request.client_ref.oneOf.0","typeLabel":"string"},{"type":"null","maxLength":64,"description":"The `client_ref` of the points_revoke that filed the request. Send the same event again with it to see where the request stands. `null` for a request filed from the dashboard, by a revoke that sent no `client_ref`, or before BitRobot accepted partial reversals","example":"revoke_task_123_completion_part","uniqueKey":"data.reversal_request.client_ref.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.reversal_request.client_ref","typeLabel":"string | null"},"reviewed_at":{"oneOf":[{"type":"string","format":"date-time","description":"When a BitRobot admin approved or rejected the request, or `null` while it is pending","example":"2026-10-14T09:12:44Z","uniqueKey":"data.reversal_request.reviewed_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","description":"When a BitRobot admin approved or rejected the request, or `null` while it is pending","example":"2026-10-14T09:12:44Z","uniqueKey":"data.reversal_request.reviewed_at.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.reversal_request.reviewed_at","typeLabel":"string\u003cdate-time> | null"}},"uniqueKey":"data.reversal_request","typeLabel":"Points Revoke Reversal Request · object"},"resolved_user_id":{"type":"string","pattern":"^[0-9A-HJKMNP-TV-Z]{26}$","description":"ID of the BitRobot user the grant or revocation was applied to (returned for points_grant and points_revoke events)","example":"01HQXK5V7YWQZ8NGQB2RJVT9MS","uniqueKey":"data.resolved_user_id","typeLabel":"string"},"resolved_by":{"type":"string","enum":["bitrobot_user_id","email","discord","wallet_address","original_client_ref"],"description":"Which identifier matched the user (returned for points_grant and points_revoke events). `discord` means `recipient.discord_user_id`. `original_client_ref` is returned only for points_revoke events that named the grant by `original_client_ref`.","example":"bitrobot_user_id","uniqueKey":"data.resolved_by","typeLabel":"enum\u003cstring>"},"created_placeholder_user":{"type":"boolean","description":"Whether a placeholder account was created because the recipient was not yet a BitRobot user (returned for points_grant and points_revoke events). Always `false` for points_revoke, which never creates an account.","example":false,"uniqueKey":"data.created_placeholder_user","typeLabel":"boolean"},"resource_id":{"type":"string","pattern":"^[0-9A-HJKMNP-TV-Z]{26}$","description":"ID of the registered resource","example":"01ARZ3NDEKTSV4RRFFQ69G5FAY","uniqueKey":"data.resource_id","typeLabel":"string"},"ent_address":{"type":"string","description":"On-chain address (PDA) of the ENT created for this resource. Returned for register_resource events once the ENT has been created on-chain.","example":"4uQeVj5tqViQh7yWWGStvkEG1Zmhx6uasJtWCJziofM","uniqueKey":"data.ent_address","typeLabel":"string"}},"isRequired":true,"uniqueKey":"data","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"registerResourceSuccess":{"title":"registerResourceSuccess","value":{"status":"success","data":{"resource_id":"01ARZ3NDEKTSV4RRFFQ69G5FAY","ent_address":"4uQeVj5tqViQh7yWWGStvkEG1Zmhx6uasJtWCJziofM"}}},"taskStartSuccess":{"title":"taskStartSuccess","value":{"status":"success","data":{"task_run_id":"01BXC4MDEKTSV4RRFFQ69G5FBW","task_id":"01ARZ3NDEKTSV4RRFFQ69G5FAV"}}},"taskEndSuccess":{"title":"taskEndSuccess","value":{"status":"success","data":{"task_run_id":"01BXC4MDEKTSV4RRFFQ69G5FBW","task_id":"01ARZ3NDEKTSV4RRFFQ69G5FAV"}}},"taskValidateSuccess":{"title":"taskValidateSuccess","value":{"status":"success","data":{"task_run_id":"01BXC4MDEKTSV4RRFFQ69G5FBW","task_id":"01ARZ3NDEKTSV4RRFFQ69G5FAV"}}},"pointsGrantSuccess":{"title":"pointsGrantSuccess","value":{"status":"success","data":{"ledger_id":"01ARZ3NDEKTSV4RRFFQ69G5FAX"}}},"pointsRevokeSuccess":{"title":"pointsRevokeSuccess","value":{"status":"success","data":{"outcome":"revoked","ledger_id":"01ARZ3NDEKTSV4RRFFQ69G5FAX","points_revoked":50,"remaining_unconverted_points":150,"resolved_user_id":"01HQXK5V7YWQZ8NGQB2RJVT9MS","resolved_by":"bitrobot_user_id","created_placeholder_user":false}}},"pointsRevokeFromGrant":{"title":"pointsRevokeFromGrant","value":{"status":"success","data":{"outcome":"revoked","ledger_id":"01JA0B7C2M4N6P8Q0R2S4T6V8W","points_revoked":60,"remaining_unconverted_points":90,"remaining_grant_points":40,"resolved_user_id":"01HQXK5V7YWQZ8NGQB2RJVT9MS","resolved_by":"original_client_ref","created_placeholder_user":false}}},"pointsRevokeReversalApproved":{"title":"pointsRevokeReversalApproved","value":{"status":"success","data":{"outcome":"reversal_approved","points_revoked":60,"reversal_request":{"id":"01JA0B6Q9TQ7X2N4ZK8M3V5R1C","status":"approved","grant_id":"01ARZ3NDEKTSV4RRFFQ69G5FAX","points":60,"client_ref":"revoke_task_123_completion_part","requested_at":"2026-10-13T15:04:05Z","reviewed_at":"2026-10-14T09:12:44Z"},"remaining_grant_points":40,"resolved_user_id":"01HQXK5V7YWQZ8NGQB2RJVT9MS","resolved_by":"original_client_ref","created_placeholder_user":false}}},"pointsRevokeReversalRejected":{"title":"pointsRevokeReversalRejected","value":{"status":"success","data":{"outcome":"reversal_rejected","points_revoked":0,"reversal_request":{"id":"01JA0B6Q9TQ7X2N4ZK8M3V5R1C","status":"rejected","grant_id":"01ARZ3NDEKTSV4RRFFQ69G5FAX","points":60,"client_ref":"revoke_task_123_completion_part","requested_at":"2026-10-13T15:04:05Z","reviewed_at":"2026-10-14T09:12:44Z"},"remaining_grant_points":100,"resolved_user_id":"01HQXK5V7YWQZ8NGQB2RJVT9MS","resolved_by":"original_client_ref","created_placeholder_user":false}}}},"exampleType":"examples"}},"exampleType":"examples"},"bdf54c1e-1c91-40f9-a61b-ce4cdab06a98":{"description":"Accepted - returned only for a `points_revoke` event that names a grant by `original_client_ref`. Nothing was debited; a reversal request covers the points instead. Either the grant has converted to BitRobot Bolts and this event filed a request for exactly `points` (`already_requested: false`), or a request for the grant was already pending and this event returned it (`already_requested: true`): the request this event's `client_ref` filed, a request filed by a revoke without a `client_ref` for the same `points`, or a request filed from the dashboard or before BitRobot accepted partial reversals, which is for all that's left of the grant and is returned whatever `points` and `client_ref` you send. A returned request keeps its own `points` and `client_ref`: approval takes its `points`, and when its `client_ref` isn't yours, nothing was recorded under your `client_ref`. The request stays `pending` until a BitRobot admin approves or rejects it. BitRobot doesn't notify your subnet of the decision; send the same event again with the same `client_ref` (and a new `Idempotency-Key`, if you use one) to see where the request stands.","content":{"application/json":{"schema":{"type":"object","required":["status","data"],"properties":{"status":{"type":"string","enum":["success"],"example":"success","isRequired":true,"uniqueKey":"status","typeLabel":"enum\u003cstring>"},"data":{"type":"object","required":["outcome","already_requested","reversal_request","remaining_grant_points","resolved_user_id","resolved_by","created_placeholder_user"],"properties":{"outcome":{"type":"string","enum":["reversal_requested"],"description":"Always `reversal_requested`: a reversal request covers the points and nothing was debited","example":"reversal_requested","isRequired":true,"uniqueKey":"data.outcome","typeLabel":"enum\u003cstring>"},"already_requested":{"type":"boolean","description":"`false` when this event filed the request. `true` when a request for the grant was already pending (filed by an earlier event with this `client_ref`, by one without a `client_ref` for the same `points`, or from the dashboard or before BitRobot accepted partial reversals, whatever `points` and `client_ref` you send) and this event returned it without filing another. That request keeps its own `points` and `client_ref`","example":false,"isRequired":true,"uniqueKey":"data.already_requested","typeLabel":"boolean"},"reversal_request":{"title":"Points Revoke Reversal Request","type":"object","description":"A reversal request for points of a grant that has converted to BitRobot Bolts. A `202` response returns it `pending`. A `200` response to a points_revoke sent again with the request's `client_ref` returns it `approved` or `rejected`, once a BitRobot admin has decided it. Approval reverses exactly `points` and rebalances the Bolts from that grant's conversion by the same amount; rejection takes nothing.","required":["id","status","grant_id","points","requested_at"],"properties":{"id":{"type":"string","pattern":"^[0-9A-HJKMNP-TV-Z]{26}$","description":"ID of the reversal request","example":"01JA0B6Q9TQ7X2N4ZK8M3V5R1C","isRequired":true,"uniqueKey":"data.reversal_request.id","typeLabel":"string"},"status":{"type":"string","enum":["pending","approved","rejected"],"description":"`pending` until a BitRobot admin approves or rejects the request. Always `pending` in a `202` response","example":"pending","isRequired":true,"uniqueKey":"data.reversal_request.status","typeLabel":"enum\u003cstring>"},"grant_id":{"type":"string","pattern":"^[0-9A-HJKMNP-TV-Z]{26}$","description":"ID of the grant's points ledger entry (the `ledger_id` returned when it was granted)","example":"01ARZ3NDEKTSV4RRFFQ69G5FAX","isRequired":true,"uniqueKey":"data.reversal_request.grant_id","typeLabel":"string"},"points":{"type":"integer","description":"Exactly what approval takes from the user: the `points` the revoke asked for, which can be part of the grant. A request filed from the dashboard, or before BitRobot accepted partial reversals, takes what's left of the grant","example":60,"isRequired":true,"uniqueKey":"data.reversal_request.points","typeLabel":"integer"},"requested_at":{"type":"string","format":"date-time","description":"When the request was filed","example":"2026-10-13T15:04:05Z","isRequired":true,"uniqueKey":"data.reversal_request.requested_at","typeLabel":"string\u003cdate-time>"},"already_revoked_points":{"type":"integer","description":"Only when earlier revokes or approved reversal requests had already taken part of the grant when this request was filed: the points they took. Approval takes only `points`, so nothing is taken twice","example":40,"uniqueKey":"data.reversal_request.already_revoked_points","typeLabel":"integer"},"client_ref":{"oneOf":[{"type":"string","maxLength":64,"description":"The `client_ref` of the points_revoke that filed the request. Send the same event again with it to see where the request stands. `null` for a request filed from the dashboard, by a revoke that sent no `client_ref`, or before BitRobot accepted partial reversals","example":"revoke_task_123_completion_part","uniqueKey":"data.reversal_request.client_ref.oneOf.0","typeLabel":"string"},{"type":"null","maxLength":64,"description":"The `client_ref` of the points_revoke that filed the request. Send the same event again with it to see where the request stands. `null` for a request filed from the dashboard, by a revoke that sent no `client_ref`, or before BitRobot accepted partial reversals","example":"revoke_task_123_completion_part","uniqueKey":"data.reversal_request.client_ref.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.reversal_request.client_ref","typeLabel":"string | null"},"reviewed_at":{"oneOf":[{"type":"string","format":"date-time","description":"When a BitRobot admin approved or rejected the request, or `null` while it is pending","example":"2026-10-14T09:12:44Z","uniqueKey":"data.reversal_request.reviewed_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","description":"When a BitRobot admin approved or rejected the request, or `null` while it is pending","example":"2026-10-14T09:12:44Z","uniqueKey":"data.reversal_request.reviewed_at.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.reversal_request.reviewed_at","typeLabel":"string\u003cdate-time> | null"}},"isRequired":true,"uniqueKey":"data.reversal_request","typeLabel":"Points Revoke Reversal Request · object"},"remaining_grant_points":{"type":"integer","description":"What's left of the grant: its full points less everything revokes and approved reversal requests have taken from it. A pending request hasn't taken anything yet, so this doesn't count it","example":100,"isRequired":true,"uniqueKey":"data.remaining_grant_points","typeLabel":"integer"},"resolved_user_id":{"type":"string","pattern":"^[0-9A-HJKMNP-TV-Z]{26}$","description":"ID of the BitRobot user the grant was made to","example":"01HQXK5V7YWQZ8NGQB2RJVT9MS","isRequired":true,"uniqueKey":"data.resolved_user_id","typeLabel":"string"},"resolved_by":{"type":"string","enum":["original_client_ref"],"description":"Always `original_client_ref` in this response","example":"original_client_ref","isRequired":true,"uniqueKey":"data.resolved_by","typeLabel":"enum\u003cstring>"},"created_placeholder_user":{"type":"boolean","description":"Always `false` in this response","example":false,"isRequired":true,"uniqueKey":"data.created_placeholder_user","typeLabel":"boolean"}},"isRequired":true,"uniqueKey":"data","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"pointsRevokeReversalRequested":{"title":"pointsRevokeReversalRequested","value":{"status":"success","data":{"outcome":"reversal_requested","already_requested":false,"reversal_request":{"id":"01JA0B6Q9TQ7X2N4ZK8M3V5R1C","status":"pending","grant_id":"01ARZ3NDEKTSV4RRFFQ69G5FAX","points":100,"client_ref":"revoke_task_123_completion","requested_at":"2026-10-09T15:04:05Z","reviewed_at":null},"remaining_grant_points":100,"resolved_user_id":"01HQXK5V7YWQZ8NGQB2RJVT9MS","resolved_by":"original_client_ref","created_placeholder_user":false}}},"pointsRevokeReversalRequestedForPart":{"title":"pointsRevokeReversalRequestedForPart","value":{"status":"success","data":{"outcome":"reversal_requested","already_requested":false,"reversal_request":{"id":"01JA0B6Q9TQ7X2N4ZK8M3V5R1C","status":"pending","grant_id":"01ARZ3NDEKTSV4RRFFQ69G5FAX","points":60,"client_ref":"revoke_task_123_completion_part","requested_at":"2026-10-13T15:04:05Z","reviewed_at":null},"remaining_grant_points":100,"resolved_user_id":"01HQXK5V7YWQZ8NGQB2RJVT9MS","resolved_by":"original_client_ref","created_placeholder_user":false}}},"pointsRevokeReversalRequestedAfterEarlierRevoke":{"title":"pointsRevokeReversalRequestedAfterEarlierRevoke","value":{"status":"success","data":{"outcome":"reversal_requested","already_requested":false,"reversal_request":{"id":"01JA0B6Q9TQ7X2N4ZK8M3V5R1C","status":"pending","grant_id":"01ARZ3NDEKTSV4RRFFQ69G5FAX","points":60,"client_ref":"revoke_task_123_completion_rest","requested_at":"2026-10-13T15:04:05Z","reviewed_at":null,"already_revoked_points":40},"remaining_grant_points":60,"resolved_user_id":"01HQXK5V7YWQZ8NGQB2RJVT9MS","resolved_by":"original_client_ref","created_placeholder_user":false}}},"pointsRevokeReversalAlreadyRequested":{"title":"pointsRevokeReversalAlreadyRequested","value":{"status":"success","data":{"outcome":"reversal_requested","already_requested":true,"reversal_request":{"id":"01JA0B6Q9TQ7X2N4ZK8M3V5R1C","status":"pending","grant_id":"01ARZ3NDEKTSV4RRFFQ69G5FAX","points":100,"client_ref":"revoke_task_123_completion","requested_at":"2026-10-09T15:04:05Z","reviewed_at":null},"remaining_grant_points":100,"resolved_user_id":"01HQXK5V7YWQZ8NGQB2RJVT9MS","resolved_by":"original_client_ref","created_placeholder_user":false}}}},"exampleType":"examples"}},"exampleType":"examples"},"b8aa179d-941e-4a74-8b84-10c5fb9ea595":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"string","description":"Description of the error","example":"Invalid or missing API key","isRequired":true,"uniqueKey":"error","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"example":{"error":"Invalid or missing API key"},"examples":{"Example":{"title":"Example","value":{"error":"Invalid or missing API key"}}},"exampleType":"examples"}},"exampleType":"examples"},"3ddde183-5b53-442b-a99d-b8ff50167733":{"description":"Conflict - The task_end cannot proceed because the run's resource (ENT) is currently committed to another in-flight task_run. End that run first before retrying.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"string","description":"Description of the error","example":"Invalid or missing API key","isRequired":true,"uniqueKey":"error","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"examples":{"resourceCommittedElsewhere":{"title":"resourceCommittedElsewhere","value":{"status":"error","error":"Cannot end task_run 01BXC4MDEKTSV4RRFFQ69G5FBW: resource is currently committed to task_run 01ARZ3NDEKTSV4RRFFQ69G5FAV (event_id ride_001). End that run first."}}},"exampleType":"examples"}},"exampleType":"examples"},"5536db65-ad7e-477e-916a-adde1cc62e94":{"description":"Unprocessable Entity - Invalid event data or unknown event type","content":{"application/json":{"schema":{"type":"object","required":["status","error"],"properties":{"status":{"type":"string","enum":["error"],"example":"error","isRequired":true,"uniqueKey":"status","typeLabel":"enum\u003cstring>"},"error":{"type":"string","description":"Description of the error","example":"Unknown event type: invalid_type","isRequired":true,"uniqueKey":"error","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"examples":{"unknownEventType":{"title":"unknownEventType","value":{"status":"error","error":"Unknown event type: invalid_type"}},"rawDataRequired":{"title":"rawDataRequired","value":{"status":"error","error":"raw_data_uri and raw_data_cid are required on task_end unless force_end is true"}},"validationError":{"title":"validationError","value":{"status":"error","error":"Exactly one recipient identity is required: bitrobot_user_id, email, discord_user_id, or wallet_address"}},"revokeAlreadyConverted":{"title":"revokeAlreadyConverted","value":{"status":"error","error":"Only unconverted points can be revoked via the subnet events API. To request a reversal of a grant that has converted to Bolts, send its original_client_ref instead of recipient."}},"revokeExceedsUnconverted":{"title":"revokeExceedsUnconverted","value":{"status":"error","error":"Requested revocation exceeds the user's remaining unconverted points. To request a reversal of a grant that has converted to Bolts, send its original_client_ref instead of recipient."}},"revokeMoreThanIsLeftOfGrant":{"title":"revokeMoreThanIsLeftOfGrant","value":{"status":"error","error":"Requested revocation exceeds what is left of this grant: earlier revokes already took 40 of its 100 points, so at most 60 can be revoked"}},"revokeGrantAlreadyReversed":{"title":"revokeGrantAlreadyReversed","value":{"status":"error","error":"This grant has already been reversed"}},"revokeReversalPendingForGrant":{"title":"revokeReversalPendingForGrant","value":{"status":"error","error":"A reversal request for 60 points of this grant is already pending (reversal request 01JA0B6Q9TQ7X2N4ZK8M3V5R1C). Wait until it is approved or rejected, then send this revoke again."}},"revokeClientRefFiledForAnotherGrant":{"title":"revokeClientRefFiledForAnotherGrant","value":{"status":"error","error":"client_ref revoke_task_123_completion_part already filed reversal request 01JA0B6Q9TQ7X2N4ZK8M3V5R1C for another grant"}},"wrongSubnetError":{"title":"wrongSubnetError","value":{"status":"error","error":"Task 01ARZ3NDEKTSV4RRFFQ69G5FAV belongs to subnet 01ARZ3NDEKTSV4RRFFQ69G5FAW, not 01ARZ3NDEKTSV4RRFFQ69G5FAV"}},"missingOwnerIdentity":{"title":"missingOwnerIdentity","value":{"status":"error","error":"Missing ent_owner_email: this subnet grants Subnet Points to email identities"}},"entNameTooLong":{"title":"entNameTooLong","value":{"status":"error","error":"Validation failed: Name must be 32 characters or fewer for ENT resources (on-chain NFT name limit)"}}},"exampleType":"examples"}},"exampleType":"examples"}},"security":{"c2fdcfc3-e35c-42d7-bcc6-552523c87f74":{"BearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"API Key","description":"API key authentication. Your API key should start with `brb_`.\n\nExample: `Authorization: Bearer brb_1234567890abcdef`\n","scopes":[],"schemeName":"BearerAuth"}}},"servers":{"18c7761c-57e3-463e-b8a0-01325bbf5691":{"url":"https://api-stage.bitrobot.ai","description":"Staging server"},"bd8a040d-e936-4914-b056-69885413b6c2":{"url":"https://api.bitrobot.ai","description":"Production server"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","bearerFormat":"API Key","description":"API key authentication. Your API key should start with `brb_`.\n\nExample: `Authorization: Bearer brb_1234567890abcdef`\n","scopes":[],"schemeName":"BearerAuth"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"API key authentication. Your API key should start with `brb_`.\n\nExample: `Authorization: Bearer brb_1234567890abcdef`\n","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"BearerAuth","name":"Authorization"}],"title":"BearerAuth"}]},"originalFileLocation":"openapi.json"},"subdomain":"bitrobot","siteName":"BitRobot","title":"Create a new event - BitRobot","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-16T12:46:13.486Z","originalFileLocation":"api-reference/events/create-a-new-event.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Creates a new event in the system. The behavior depends on the event_type provided: - register_resource: Registers a new resource (robot/bot) in the system - task_start: Creates a new task run - task_end: Completes an existing task run - task_validate: Validates a completed task run and awards VRW points - points_grant: Grants uncapped Subnet Points to a user. The grant is recorded in the current open distribution window; the server assigns the timestamp and epoch, so callers cannot specify them. - points_revoke: Revokes previously granted Subnet Points from a user. A revoke that identifies the user by recipient debits their unconverted Subnet Points (points not yet converted to BitRobot Bolts) immediately. A revoke that names a grant by original_client_ref takes exactly points from that grant, up to what\u0026#x27;s left of it: right away if the grant hasn\u0026#x27;t converted to Bolts, or, if it has, through a reversal request the API files for exactly points, responding 202 Accepted. A BitRobot admin reviews the request, and nothing is debited unless they approve it.\">\u003cmeta data-mint-head name=\"application-name\" content=\"BitRobot\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/bitrobot/E0cmnQBcZQQi9OJz/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/bitrobot/E0cmnQBcZQQi9OJz/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/bitrobot/E0cmnQBcZQQi9OJz/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/bitrobot/E0cmnQBcZQQi9OJz/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/bitrobot/E0cmnQBcZQQi9OJz/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/bitrobot/E0cmnQBcZQQi9OJz/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/bitrobot/E0cmnQBcZQQi9OJz/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/bitrobot/E0cmnQBcZQQi9OJz/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/bitrobot/E0cmnQBcZQQi9OJz/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Create a new event - BitRobot\">\u003cmeta data-mint-head property=\"og:description\" content=\"Creates a new event in the system. The behavior depends on the event_type provided: - register_resource: Registers a new resource (robot/bot) in the system - task_start: Creates a new task run - task_end: Completes an existing task run - task_validate: Validates a completed task run and awards VRW points - points_grant: Grants uncapped Subnet Points to a user. The grant is recorded in the current open distribution window; the server assigns the timestamp and epoch, so callers cannot specify them. - points_revoke: Revokes previously granted Subnet Points from a user. A revoke that identifies the user by recipient debits their unconverted Subnet Points (points not yet converted to BitRobot Bolts) immediately. A revoke that names a grant by original_client_ref takes exactly points from that grant, up to what\u0026#x27;s left of it: right away if the grant hasn\u0026#x27;t converted to Bolts, or, if it has, through a reversal request the API files for exactly points, responding 202 Accepted. A BitRobot admin reviews the request, and nothing is debited unless they approve it.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"BitRobot\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.bitrobot.ai/api-reference/events/create-a-new-event\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://bitrobot.mintlify.site/_mintlify/api/og/v2?division=Events\u0026amp;title=Create+a+new+event\u0026amp;description=Creates+a+new+event+in+the+system.+The+behavior+depends+on+the+%60event_type%60+provided%3A%0A%0A-+**register_resource**%3A+Registers+a+new+resource+%28robot%2Fbot%29+in+the+syst\u0026amp;theme=3517e46cd36d37f8c655c380\u0026amp;signature=6734a6e2508748ac2a6f8579c0b9ce1623360900e40367314dc49b1dedc07b51\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Create a new event - BitRobot\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Creates a new event in the system. The behavior depends on the event_type provided: - register_resource: Registers a new resource (robot/bot) in the system - task_start: Creates a new task run - task_end: Completes an existing task run - task_validate: Validates a completed task run and awards VRW points - points_grant: Grants uncapped Subnet Points to a user. The grant is recorded in the current open distribution window; the server assigns the timestamp and epoch, so callers cannot specify them. - points_revoke: Revokes previously granted Subnet Points from a user. A revoke that identifies the user by recipient debits their unconverted Subnet Points (points not yet converted to BitRobot Bolts) immediately. A revoke that names a grant by original_client_ref takes exactly points from that grant, up to what\u0026#x27;s left of it: right away if the grant hasn\u0026#x27;t converted to Bolts, or, if it has, through a reversal request the API files for exactly points, responding 202 Accepted. A BitRobot admin reviews the request, and nothing is debited unless they approve it.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://bitrobot.mintlify.site/_mintlify/api/og/v2?division=Events\u0026amp;title=Create+a+new+event\u0026amp;description=Creates+a+new+event+in+the+system.+The+behavior+depends+on+the+%60event_type%60+provided%3A%0A%0A-+**register_resource**%3A+Registers+a+new+resource+%28robot%2Fbot%29+in+the+syst\u0026amp;theme=3517e46cd36d37f8c655c380\u0026amp;signature=6734a6e2508748ac2a6f8579c0b9ce1623360900e40367314dc49b1dedc07b51\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/bitrobot/E0cmnQBcZQQi9OJz/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"BitRobot\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#5d4bff\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.bitrobot.ai/api-reference/events/create-a-new-event\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/events/create-a-new-event.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.bitrobot.ai/#organization\",\"name\":\"BitRobot\",\"url\":\"https://docs.bitrobot.ai\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/bitrobot/lyIPJ4DsA8cKp50w/logo/light.svg?fit=max\u0026auto=format\u0026n=lyIPJ4DsA8cKp50w\u0026q=85\u0026s=18accea02ce6ad7a85f82b988d3bac87\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.bitrobot.ai#website\",\"name\":\"BitRobot\",\"url\":\"https://docs.bitrobot.ai\",\"publisher\":{\"@id\":\"https://docs.bitrobot.ai/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.bitrobot.ai/api-reference/events/create-a-new-event#webpage\",\"url\":\"https://docs.bitrobot.ai/api-reference/events/create-a-new-event\",\"name\":\"Create a new event\",\"description\":\"Creates a new event in the system. The behavior depends on the event_type provided: - register_resource: Registers a new resource (robot/bot) in the system - task_start: Creates a new task run - task_end: Completes an existing task run - task_validate: Validates a completed task run and awards VRW points - points_grant: Grants uncapped Subnet Points to a user. The grant is recorded in the current open distribution window; the server assigns the timestamp and epoch, so callers cannot specify them. - points_revoke: Revokes previously granted Subnet Points from a user. A revoke that identifies the user by recipient debits their unconverted Subnet Points (points not yet converted to BitRobot Bolts) immediately. A revoke that names a grant by original_client_ref takes exactly points from that grant, up to what's left of it: right away if the grant hasn't converted to Bolts, or, if it has, through a reversal request the API files for exactly points, responding 202 Accepted. A BitRobot admin reviews the request, and nothing is debited unless they approve it.\",\"dateModified\":\"2026-10-16T12:46:13.486Z\",\"isPartOf\":{\"@id\":\"https://docs.bitrobot.ai#website\"},\"breadcrumb\":{\"@id\":\"https://docs.bitrobot.ai/api-reference/events/create-a-new-event#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.bitrobot.ai/api-reference/events/create-a-new-event#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"BitRobot\",\"item\":\"https://docs.bitrobot.ai\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Create a new event\",\"item\":\"https://docs.bitrobot.ai/api-reference/events/create-a-new-event\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.bitrobot.ai/api-reference/events/create-a-new-event#apireference\",\"headline\":\"Create a new event\",\"name\":\"Create a new event\",\"description\":\"Creates a new event in the system. The behavior depends on the event_type provided: - register_resource: Registers a new resource (robot/bot) in the system - task_start: Creates a new task run - task_end: Completes an existing task run - task_validate: Validates a completed task run and awards VRW points - points_grant: Grants uncapped Subnet Points to a user. The grant is recorded in the current open distribution window; the server assigns the timestamp and epoch, so callers cannot specify them. - points_revoke: Revokes previously granted Subnet Points from a user. A revoke that identifies the user by recipient debits their unconverted Subnet Points (points not yet converted to BitRobot Bolts) immediately. A revoke that names a grant by original_client_ref takes exactly points from that grant, up to what's left of it: right away if the grant hasn't converted to Bolts, or, if it has, through a reversal request the API files for exactly points, responding 202 Accepted. A BitRobot admin reviews the request, and nothing is debited unless they approve it.\",\"url\":\"https://docs.bitrobot.ai/api-reference/events/create-a-new-event\",\"mainEntityOfPage\":{\"@id\":\"https://docs.bitrobot.ai/api-reference/events/create-a-new-event#webpage\"},\"dateModified\":\"2026-10-16T12:46:13.486Z\",\"publisher\":{\"@id\":\"https://docs.bitrobot.ai/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.bitrobot.ai#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"BitRobot\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"BitRobot","nav":{"global":{"anchors":[{"anchor":"Website","icon":"globe","href":"https://bitrobot.ai"}]},"tabs":[{"tab":"Guides","pages":[{"title":"Guides","href":""}]},{"tab":"API reference","groups":[{"group":"API documentation","pages":[{"title":"Introduction","description":"BitRobot API documentation for event tracking and management","href":"/api-reference/introduction"}]},{"group":"Events","pages":[{"openapi":"post /subnets/{subnet_id}/events","title":"Create a new event","href":"/api-reference/events/create-a-new-event"}]},{"group":"Task Runs","pages":[{"openapi":"get /subnets/{subnet_id}/task_runs/{id}/status","title":"Get task run status","description":"Returns the current state of a single task run, including whether it has reached on-chain end and how long it has been since its last update. Use this to poll after `task_end` if you need to know when the on-chain end has landed before queuing downstream work (e.g. `task_validate`).","href":"/api-reference/task-runs/get-task-run-status"},{"openapi":"get /subnets/{subnet_id}/task_runs/pending","title":"List pending task runs","href":"/api-reference/task-runs/list-pending-task-runs"}]},{"group":"Points","pages":[{"openapi":"post /subnets/{subnet_id}/points/grants","title":"Grant Subnet Points","href":"/api-reference/points/grant-subnet-points"}]},{"group":"Connect","pages":[{"openapi":"post /subnets/{subnet_id}/connect/confirm","title":"Confirm a wallet connection","href":"/api-reference/connect/confirm-wallet-connection"}]},{"group":"Subnets","pages":[{"openapi":"get /subnets/{subnet_id}/balances","title":"List balances","href":"/api-reference/subnets/list-balances"},{"openapi":"get /subnets/{subnet_id}/points/history","title":"List points history","href":"/api-reference/subnets/list-points-history"},{"openapi":"get /subnets/{subnet_id}/conversions","title":"List conversions","href":"/api-reference/subnets/list-conversions"},{"openapi":"get /subnets/{subnet_id}/resources/by-wallet","title":"List resources by wallet","href":"/api-reference/subnets/list-resources-by-wallet"}]},{"group":"Task Batch Uploads","pages":[{"openapi":"post /subnets/{subnet_id}/task_batch_uploads","title":"Upload a task batch CSV","href":"/api-reference/task-batch-uploads/upload-a-task-batch-csv"},{"openapi":"get /subnets/{subnet_id}/task_batch_uploads/{id}","title":"Get task batch upload status","href":"/api-reference/task-batch-uploads/get-task-batch-upload-status"}]}]}]},"basePath":"","title":"Create a new event - BitRobot","buildId":"dpl_8LJbrAiZvr1K98WQNZXCyY5AvT34","deploymentId":"dpl_8LJbrAiZvr1K98WQNZXCyY5AvT34","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-i2a3QZ8E.js","utils-ChLwp8m0.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-DRktVTDc.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-CA2pEs4T.js","snippetPresets-ClQ6XrKD.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-Ct_Lv36y.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-Cn2PYw9e.js","shallow-rkyymjXQ.js","getApiPlaygroundDisplay-BB9vkXtE.js","CodeSnippet-Bm5RU7m1.js","CodeSnippets-BgU9Deuz.js","Page-BUDYNlhG.js","getPastedJson-BD-6NNum.js","icon-8Z6tud2e.js","MethodPill-Tuzr4g3V.js","DuplicateIcon-0ceWFYhN.js","createIcon-FBXow_ST.js","DynamicMarkdown-CD8713Yy.js","SectionHeading-7zgzQbH-.js","axios-vUo_bRtp.js","Markdown-D7Ofw1oz.js","clsx-eKJ4rcii.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-CwjSCXIK.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-9EK5IAXV.js"]}