← Back to Docs Index

General Information

  • Base URL: slserver.objectid.io (optoinal on premisis installation available)
  • HTTP Method: POST
  • Content-Type: application/json
  • Authentication: based on Ed25519 seed

Each endpoint triggers a Move smart contract execution on the IOTA Rebased network. All requests are stateless and self-contained.

controllerCap, OIDcontrollerCap, and creditToken can be obtained through the dApp at https://dapp.objectid.io after successfully acquiring a Domain Linked Verifiable Credential (DLVC) and receiving credit tokens.


Endpoints

POST /create_object

Creates a new object on-chain.

Request Body:

  • seed: string
  • network: string
  • creditToken: string
  • OIDcontrollerCap: string
  • object_type: string
  • product_url: string
  • description: string
  • op_code: string
  • immutable_metadata: object
  • mutable_metadata: object
  • geo_location: string

Response:

jsonCopyEdit{
  "success": true,
  "txDigest": "0x...",
  "newObjectId": "0x..."
}

On failure:

jsonCopyEdit{
  "success": false,
  "txDigest": "0x...",
  "error": "Execution error message"
}

POST /update_object_mutable_metadata

Updates mutable metadata of an object.

Request Body:

  • seed: string
  • network: string
  • creditToken: string
  • controllerCap: string
  • object: string
  • new_mutable_metadata: string (JSON stringified)

Response:

jsonCopyEdit{
  "success": true,
  "txDigest": "0x..."
}

POST /update_owner_did

Updates the owner DID of an object.

Request Body:

  • seed: string
  • network: string
  • creditToken: string
  • controllerCap: string
  • object: string
  • new_owner_did: string

Response: as above.


POST /update_agent_did

Updates the agent DID of an object.

Request Body:

  • seed: string
  • network: string
  • creditToken: string
  • controllerCap: string
  • object: string
  • new_agent_did: string

Response: same as above.


POST /update_geo_location

Updates the geolocation field.

Request Body:

  • seed: string
  • network: string
  • creditToken: string
  • controllerCap: string
  • object: string
  • new_location: string

Response: same as above.


POST /delete_object

Deletes an existing object.

Request Body:

  • seed: string
  • network: string
  • creditToken: string
  • controllerCap: string
  • object: string

Response: same as above.


POST /create_event

Creates and links an event to an object.

Request Body:

  • seed: string
  • network: string
  • creditToken: string
  • controllerCap: string
  • object: string
  • event_type: string
  • immutable_metadata: string
  • mutable_metadata: string

Response: same as above.


POST /update_event_mutable_metadata

Updates the mutable metadata of an event.

Request Body:

  • seed: string
  • network: string
  • creditToken: string
  • controllerCap: string
  • event: string
  • new_mutable_metadata: string

Response: same as above.


POST /delete_event

Deletes an event.

Request Body:

  • seed: string
  • network: string
  • creditToken: string
  • controllerCap: string
  • object: string
  • event: string

Response: same as above.


POST /create_counter

Creates a counter linked to an object.

Request Body:

  • seed: string
  • network: string
  • creditToken: string
  • controllerCap: string
  • object: string
  • value: number
  • unit: string
  • step: number
  • immutable_metadata: string
  • mutable_metadata: string

Response: same as above.


POST /delete_counter

Deletes a counter.

Request Body:

  • seed: string
  • network: string
  • creditToken: string
  • controllerCap: string
  • object: string
  • counter: string

Response: same as above.


POST /counter_stepup

Increments the counter.

Request Body:

  • seed: string
  • network: string
  • creditToken: string
  • controllerCap: string
  • object: string
  • counter: string

Response: same as above.


POST /counter_stepdown

Decrements the counter.

Request Body:

  • seed: string
  • network: string
  • creditToken: string
  • controllerCap: string
  • objectId: string
  • counter: string

Response: same as above.


POST /counter_set_value

Sets a counter to a specific value.

Request Body:

  • seed: string
  • network: string
  • creditToken: string
  • controllerCap: string
  • objectId: string
  • counter: string
  • new_value: number

Response: same as above.


POST /get_object

Retrieves an object from the chain.

Request Body:

  • seed: string (can be "000..." placeholder)
  • network: string
  • objectId: string

Response:

jsonCopyEdit{
  "success": true,
  "objectData": {
    // object structure
  }
}

POST /get_objects

Retrieves a list of all known objects of a specific type (OIDObject), using the configured package ID.

Request Body

FieldTypeDescription
seedstringEd25519 seed (can be a placeholder like "000...000")
networkstringIOTA network name (e.g., "testnet")
afterstring or nullObject ID cursor for pagination. If null, fetches the first page

Response

jsonCopyEdit{
  "success": true,
  "objectsList": [
    {
      "node": {
        "objectId": "0xabc...",
        "type": "product",
        "creator": "0x123...",
        "owner_did": "did:iota:...",
        "geo_location": "9C3X+5V Berlin",
        ...
      },
      "cursor": "0xabc..."
    },
    ...
  ]
}
  • The cursor field (inside each ObjectEdge) can be used as the after parameter in the next request to retrieve the following page.
  • If objectsList.length < pageSize, then the end of the list has been reached.

Example Usage for Pagination

First request:

{
“seed”: “000.”,
“network”: “testnet”,
“after”: null
}

Response:

{
“success”: true,
“objectsList”: [
{ “node”: { . }, “cursor”: “0xabc.” },
.
]
}

Next request:

{
“seed”: “000.”,
“network”: “testnet”,
“after”: “0xabc.”
}

This pagination follows a cursor-based model (not offset-based), ensuring consistent traversal even as data changes.

← Back to Docs Index


ObjectID Storage REST API

The ObjectID Storage dApp uses a separate API for temporary uploads, sponsored storage transactions and IPFS pin/provider checks.

GET /health

Returns service status and public upload configuration.

{
  "ok": true,
  "service": "objectid-storage-api",
  "baseUrl": "https://api.storage.objectid.io",
  "uploadUrlExample": "https://api.storage.objectid.io/uploads/{id}",
  "baseUrlIsLocalOnly": false
}

POST /uploads

Creates a temporary upload consumed by oracle nodes.

Content-Type: multipart/form-data

file: binary
ttlSeconds: optional number

Returns id, fileName, mimeType, size, sha256, temporary url and expiresAtMs.

GET /uploads/{id}

Downloads a temporary upload. Returns 410 Upload expired when the temporary record has expired and 404 Upload not found when the ID is unknown.

DELETE /uploads/{id}

Deletes a temporary upload record. This does not remove IPFS content or on-chain storage objects.

POST /sponsored-transactions/prepare

Validates an unsigned storage transaction kind, sets the backend as gas sponsor and returns transaction bytes for user signing. The backend accepts only storage Move calls: create_storage_with_oracle_task and extend_storage_retention_with_oracle_top_up.

{
  "network": "testnet",
  "sender": "0xUSER_ADDRESS",
  "sponsoredIota": "100000000",
  "transactionKindBytes": "BASE64_TRANSACTION_KIND"
}

POST /sponsored-transactions/execute

Combines the user signature with the sponsor signature, executes the transaction and returns the IOTA transaction effect including object changes and events.

{
  "network": "testnet",
  "sponsoredIota": "100000000",
  "transactionBlockBytes": "BASE64_TRANSACTION_BLOCK",
  "userSignature": "USER_SIGNATURE"
}

GET /ipfs/pins

Checks pin status, provider visibility and gateway reachability for up to 100 CIDs.

GET /ipfs/pins?cids=bafy...1,bafy...2

The response includes total, pinned, unpinned, providerCount, gatewayReachable, apiConfigured and an items array with per-CID details.