# v1.3.0

Substantial cleanup of the public Issue & Transfer / Get SRR endpoints. The endpoint paths and request bodies are unchanged; the responses and webhook payloads are slimmer.

## Issue & Transfer SRR — `POST /port/api/v1/commerce/srrs`

* **Response slimmed.** `results[*].srr` now contains only `tokenId`, `metadataCID`, `metadataURL` and `collectionContractAddress`.
* **`metadataURL` added.** Convenience HTTPS URL that resolves the SRR metadata via the [Startrail IPFS CDN gateway](/subgraph/ipfs-cdn-gateway.md) (`https://cdn.startrail.io/ipfs/<cid>`).
* **Removed from response:** `srr.collection` (object), `srr.artist`, `srr.issuer`, `srr.isPrimaryIssuer`, `srr.issuedAt`, `srr.metadata.json`, `srr.metadata.originalJson`, `srr.metadata.digest`, `srr.createdAt`, `srr.updatedAt`. Get this data from the [subgraph](/subgraph/subgraph.md) and the IPFS CDN gateway after the transaction is mined.
* **Documented the attachment-files behavior.** The API resolves each `attachmentFiles[*].url` to its GCS path, reads the precomputed SHA-256, and folds `{category, hash}` entries into `metadata.digitalComponents` (`artwork`) or `metadata.attachmentFiles` (other categories) before issuance — callers no longer need to populate those metadata sub-fields themselves.
* **Documented the `externalUrls` payload field.**

## Get Owned SRRs — `GET /port/api/v1/ownerAddress/{ownerAddress}/ownedSrrs`

* Now returns the **subgraph-aggregated SRR shape** (`AggregatedSRR[]`). New fields include `id`, `metadataDigest`, `transferCommitment`, `lockExternalTransfer`, `royaltyReceiver`, `royaltyBasisPoints`, `metadataHistory[]`, `history[]`, `provenance[]`, `transfers[]`. `issuer` / `artist` use `walletAddress` (not `contractAddress`) and gain `salt`, `owners`, `threshold`. `collection` gains `id` and `ownerAddress`.
* The `srrOwnable` wrapper, `status`, `issuedAt`, and the `metadata.{digest,json,createdAt,updatedAt,cid}` envelope are gone. `metadata` is now the raw on-chain JSON.
* **Query params:** `offset` is no longer honored. Use `page` + `limit` only.

## Get SRR by Collection + Token Id — `GET /port/api/v1/collection/{collectionContractAddress}/srr/{tokenId}`

* Now returns the **subgraph `BasicSRR` shape** (no aggregated `metadata` JSON, no `customHistories`, no `transfers`).
* Fetch the `metadata` JSON yourself from `https://cdn.startrail.io/ipfs/<metadataDigest>`, or query the subgraph for richer relations.

## Webhooks

* **`data[*].metadata` shape change** (all SRR-related events): `metadata` is now the raw SRR metadata JSON, no longer wrapped in `{ digest, json, createdAt, updatedAt, cid }`.
* **`transferExecutionComplete`** no longer includes `transferCid`. Look up the transfer's provenance entry on the [subgraph](/subgraph/subgraph.md) by `srrId` if needed.
* **`transferReservationComplete`** payload contains only the generic SRR fields (`groupId`, `srrId`, `metadata`). The legacy `dataUrl`, `encryptedTransferKey` and `transferCid` fields had already been removed in an earlier release; the docs are now updated to reflect that.

## Recommended new pages

* [Startrail IPFS CDN gateway](/subgraph/ipfs-cdn-gateway.md) — the recommended gateway for resolving any IPFS CID surfaced by the platform (metadata, images, attachment files).


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.startrail.io/issue-transfer-api/change-logs/v1.3.0.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
