image, volume,
vpc or iam_role. Where supported, the same field accepts a UUID, a Cloud
Resource Name (CRN), or a name. Each field’s API description defines its accepted
kinds and scope; a resource having a name does not mean every operation can
resolve that name.
How a reference is classified
Classification uses the input syntax, before looking for a resource:- A literal, case-sensitive
crn:prefix selects CRN parsing. A malformed CRN is an error; it is never retried as a name. - A 36-character UUID in
8-4-4-4-12hexadecimal form selects UUID lookup. Hexadecimal letters may be upper- or lowercase. - Everything else selects name validation and lookup for that resource kind.
crn: or use a UUID spelling, including compact,
braced and URN UUID spellings. Each service also enforces its own name syntax.
These reserved shapes keep names separate from identifiers.
Canonical identities
A reference chooses an existing resource. Responses return its canonical identity, not the spelling you submitted. Relationship bindings retain the resolved UUID; reusing a deleted resource’s name does not retarget an existing binding. A CRN has this shape:platform
account slot.
For every resource with a unique, user-chosen name, that name is its CRN identity.
Names and therefore CRNs are immutable. A mutable display label is a separate
property: IAM user and organization names, account display names and security-key
labels do not become name-based reference identities. Account identity uses its
immutable handle.
Resources without a unique user-chosen name use UUID identities where they expose
resource CRNs. Examples include floating IPs, DNS records, database backups,
load-balancer listeners and rules, IAM users and organizations, credentials,
audit events and billing records. A DNS record’s owner name is protocol data and
can occur on several records. A backup label or a floating IP address is not a
resource name reference. Numbered secret versions and catalog/protocol tokens
follow their endpoint’s explicit contract.
Parent-scoped CRNs
A child appends a type/identity pair to its parent’s complete CRN. The parent CRN is a literal prefix, preserving every ancestor:inline-policy/<name> to
their principal CRN.
Protocol payloads have explicit exceptions to structural pairs: bucket object
keys remain opaque slash-bearing keys after the bucket name, and log-group names
can themselves contain slashes. Policy wildcard expressions are policy patterns,
not concrete request references.
Resource paths
Use the returned UUID in a resource path declared as a UUID, such asGET /v1/instances/{instance_id}. Do not put a name or slash-bearing CRN in that
path. Protocol paths, including bucket names and database user/database names,
retain the parameter types shown by their operations.
Resolution scopes
Compute and database network requests do not provide the VPC needed for a bare
subnet lookup. Use a subnet UUID or complete nested CRN. Load-balancer creation
provides a VPC and can resolve a subnet name in it. A subnet update can derive
its VPC from the owned subnet. A reference never bypasses ownership, parent
membership, readiness, trust or permission checks.
Certificate CRNs use an empty region slot even though certificate requests use
a regional endpoint. Copy canonical response CRNs instead of inferring their
scope from a hostname.
Image names and versions
Image reference fields support these forms:
Name and
name:version lookups use the request architecture, defaulting to
amd64 when omitted. A CRN supplies its own architecture and version; a UUID
already identifies one build. Names consider your account and public platform
images. Among usable matches, your account wins over the platform. An explicit
CRN selects only its stated owner. Another customer’s images and private platform
images are unavailable to you, even if you know their UUIDs.
A current name can select a newer build on a later request. A UUID, version tag
or full CRN pins a build; instance-pool templates store the resolved image UUID.
Withdrawal does not redirect a pinned reference to a replacement. A withdrawn
image returns IMAGE_NOT_FOUND; when end-of-life information is available, its
message explains the withdrawal. Usable visible matches take precedence over
withdrawal diagnostics. Treat the error code as stable and the message as text
for a person.
Errors and protocol boundaries
For relationship resolution, malformed syntax, an unsupported reference kind, a wrong service/type or incomplete ancestry produces a validation error. The shared resolver also rejects a wrong region as invalid input. A missing target or foreign account is reported as not found. Services retain their documented resource-specific codes and permission errors; inspect the operation’s error responses. Do not retry another reference kind after an error. An exact collection filter is a selector, not a relationship lookup. A valid foreign or mismatched CRN selects no rows. Malformed or empty CRNs return 400; endpoint-specific validation details are listed below. An empty result is not a failed attempt to resolve a name. Region parameters use region codes such assa-saopaulo-1, not UUIDs, CRNs or
display names. Audit resource and actor selectors search historical UUID/CRN
snapshots without requiring the target to still exist; bare names are not
historical references. The audit collection’s crn selects the event itself.
Object keys, upload/version tokens, DNS record content, OAuth client identifiers,
trace/span identifiers, metric names, log-stream labels and literal IP targets
retain their protocol meaning. Log-group and KMS reference fields still follow
their declared resource contracts. In particular, S3 bucket encryption’s AES256
placeholder does not imply support for a KMS target.
Exact lists
Where declared,name and crn are exact predicates combined with AND, with
ownership, parent and other filters applied before pagination. name=web-* does
not mean a prefix search. An omitted filter differs from an explicitly empty
one: name= retains an empty predicate, and crn= follows the endpoint-specific
validation below. Never remove an
empty filter and retry, because that would broaden the request.
Top-level subnet and route-table name lists require vpc; interface name lists
require subnet (and vpc when that subnet is itself a bare name). Snapshot name
lists require volume. A complete child CRN supplies its own ancestry, but any
additional parent filter must agree. Instance NIC lists instead match interface
names within that instance’s bindings, so duplicate names from different subnets
can yield multiple matches.
A declared name selector need not identify a unique resource. IAM display-name
lists, DNS record owner names, and image names across architectures/versions can
match several rows. DNS zone names are lowercased for matching. Lists of unnamed
resources that declare name return no matches for it: this includes floating
IPs, routes, security-group rules, database backups and load-balancer child
resources. Database engine/parameter catalogs have no resource CRN and match no
CRN selector; storage volume-type names are exact display labels (SSD, NVMe),
with token-based catalog CRNs. Secret versions expose numbered child CRNs and no
name filter. include_deleted can make a secret name match multiple identities.
List validation details
Malformed syntax and empty CRN selectors return 400 on resource collections below, including log groups, IAM, KMS and secrets. Valid foreign identities and mismatched name/CRN predicates return an empty collection, not a relationship-not-found error. Strict ancestry validation in compute, network, storage, database, IAM, KMS and secrets also rejects incomplete child chains. DNS record and certificate lists parse syntax first and treat a structurally parseable but incompatible kind or ancestry as an empty match. Certificate lists reject an invalid certificate-name segment. Secret-version lists reject invalid version numbers, including zero and noncanonical numbers such as01.
Parent path authorization still applies to nested lists. Exact selectors do not
turn an inaccessible parent into a successful empty collection.
Collection operations
Each link below gives the operation’s exact parameters, response shape and pagination contract. “Protocol” means use that operation’s documented selectors; it has no generic resourcename/crn pair.
Fetch one resource by any reference
Classify the input using the rules above. For a UUID, call the resource’s UUID GET operation directly. For a name or CRN, query its collection with the matching exact filter and required parent scope. Follow pagination until you can establish whether exactly one resource matches. Zero matches means no visible match; multiple matches require a more specific scope or canonical CRN. Never choose the first row arbitrarily. Use the returnedid for subsequent UUID-path calls.
If that GET returns not found, the resource may have been deleted between calls.
These are HTTP request targets; sign each request using your
normal authentication and account context. Query values must be URL-encoded.
web-01:
/v1/subnets?vpc=production&name=private; for a snapshot
name, use /v1/snapshots?volume=data&name=daily.
Image relationship tags are not literal image-list names: query name and architecture with all_versions=true, then match the returned
version and apply the documented caller/platform precedence. There is no public
version query parameter. A full image CRN selects the pinned identity; use
all_versions=true when looking through superseded builds. Protocol collections and resources without a UUID GET use their
operation’s own retrieval contract.
Released CLI
CLI v0.13.0 accepts a reference forget on resources with a list and a get
operation. Configure your profile and selected account as described in
CLI; replace the example identities with your resources.
--vpc is refused with 400,
name requires the resource's parent filter. A complete child CRN supplies
its ancestry. Parent IDs that are positional arguments remain IDs; use the
command’s --help for its scope flags.
The reference getter does not change other verbs: delete, start and other
ID-taking commands still need the returned ID. Relationship flags such as
instance create --image have their own documented reference contracts.
Released Go SDK
Usegithub.com/basaltic-sh/sdk-go v0.15.0. Configure credentials, account and
region through BASALTIC_ACCESS_KEY_ID, BASALTIC_SECRET_ACCESS_KEY,
BASALTIC_ACCOUNT_ID and BASALTIC_REGION. This example reads the same instance
by its three reference forms and reads a subnet with its VPC scope:
GetInstanceByReference and GetSubnetByReference call the UUID getter for a
UUID and the exact collection filter for a name or CRN. No match is a not-found
error; multiple matches produce AmbiguousReferenceError. Neither retries a
different reference kind. The final scope argument may be nil when no parent
or additional filter is needed. Use the returned ID with ordinary SDK methods
such as GetInstance and StartInstance.
The released clients have no database commands or database SDK package. Use
the database page’s HTTP examples for those operations. Image relationship
name:version tags are not generic getter names; use the image-list procedure
above to select a build.