> For the complete documentation index, see [llms.txt](https://hub.equipme.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://hub.equipme.io/development/api-reference-app/inventory-or-service-instance-attachments.md).

# Inventory | Service Instance Attachments

## GET /v1/inventory/service-instances/{instanceId}/attachments

> List attachments of a service instance (customer view)

```json
{"openapi":"3.0.4","info":{"title":"Equipme Customer API","version":"v1"},"tags":[{"name":"Inventory | Service Instance Attachments"}],"security":[{"ApiKey":[]}],"components":{"securitySchemes":{"ApiKey":{"type":"apiKey","description":"Required for authorization in every request. You can request an API-Key for your tenant in the integrations section of the equipme App.","name":"X-API-KEY","in":"header"}},"schemas":{"AttachmentList":{"required":["self","total"],"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/AttachmentDto"},"description":"The attachment items.","nullable":true},"total":{"type":"integer","format":"int32"},"self":{"$ref":"#/components/schemas/ResourceLink"}},"additionalProperties":false},"AttachmentDto":{"required":["id","self"],"type":"object","properties":{"fileName":{"type":"string","description":"Original filename as supplied by the uploader.","nullable":true},"contentType":{"type":"string","description":"Sniffed MIME type.","nullable":true},"size":{"type":"integer","description":"File size in bytes.","format":"int64"},"scope":{"type":"string","description":"Visibility scope: \"public\" or \"internal\".","nullable":true},"note":{"type":"string","description":"Optional note.","nullable":true},"created":{"type":"string","description":"Upload timestamp (UTC).","format":"date-time"},"authorTenantUuid":{"type":"string","description":"Tenant SID of the customer who uploaded this attachment. Clients use this to determine whether PATCH/DELETE is permitted (author-tenant only).","format":"uuid"},"createdBy":{"$ref":"#/components/schemas/UserReference"},"modifiedBy":{"$ref":"#/components/schemas/UserReference"},"content":{"$ref":"#/components/schemas/ResourceLink"},"id":{"type":"integer","format":"int32"},"self":{"$ref":"#/components/schemas/ResourceLink"}},"additionalProperties":false},"UserReference":{"required":["self"],"type":"object","properties":{"id":{"type":"integer","description":"The identifier of the employee.","format":"int32"},"firstName":{"type":"string","description":"The first/given name of the employee.","nullable":true},"lastName":{"type":"string","description":"The last/family name of the employee.","nullable":true},"email":{"type":"string","description":"The contact and login mail address.","nullable":true},"username":{"type":"string","description":"The username to log in to the app. The value has to be an e-mail address.","nullable":true},"self":{"$ref":"#/components/schemas/ResourceLink"}},"additionalProperties":false},"ResourceLink":{"type":"object","properties":{"href":{"type":"string","nullable":true},"method":{"type":"string","nullable":true}},"additionalProperties":false},"ErrorResponse":{"type":"object","properties":{"errorCode":{"type":"string","nullable":true},"errorDescription":{"type":"string","nullable":true},"data":{"nullable":true}},"additionalProperties":false}}},"paths":{"/v1/inventory/service-instances/{instanceId}/attachments":{"get":{"tags":["Inventory | Service Instance Attachments"],"summary":"List attachments of a service instance (customer view)","parameters":[{"name":"instanceId","in":"path","description":"The identifier of the service instance.","required":true,"schema":{"type":"integer","format":"int32"}}],"responses":{"200":{"description":"OK: List of attachments.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AttachmentList"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}}}}
```

## POST /v1/inventory/service-instances/{instanceId}/attachments

> Upload one or more attachments to a service instance (customer view)

```json
{"openapi":"3.0.4","info":{"title":"Equipme Customer API","version":"v1"},"tags":[{"name":"Inventory | Service Instance Attachments"}],"security":[{"ApiKey":[]}],"components":{"securitySchemes":{"ApiKey":{"type":"apiKey","description":"Required for authorization in every request. You can request an API-Key for your tenant in the integrations section of the equipme App.","name":"X-API-KEY","in":"header"}},"schemas":{"AttachmentScope":{"enum":["public","internal"],"type":"string","description":"Defines who can see an attachment.\npublic: visible to all tenants with access to the owner | internal: visible only to the author tenant."},"AttachmentList":{"required":["self","total"],"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/AttachmentDto"},"description":"The attachment items.","nullable":true},"total":{"type":"integer","format":"int32"},"self":{"$ref":"#/components/schemas/ResourceLink"}},"additionalProperties":false},"AttachmentDto":{"required":["id","self"],"type":"object","properties":{"fileName":{"type":"string","description":"Original filename as supplied by the uploader.","nullable":true},"contentType":{"type":"string","description":"Sniffed MIME type.","nullable":true},"size":{"type":"integer","description":"File size in bytes.","format":"int64"},"scope":{"type":"string","description":"Visibility scope: \"public\" or \"internal\".","nullable":true},"note":{"type":"string","description":"Optional note.","nullable":true},"created":{"type":"string","description":"Upload timestamp (UTC).","format":"date-time"},"authorTenantUuid":{"type":"string","description":"Tenant SID of the customer who uploaded this attachment. Clients use this to determine whether PATCH/DELETE is permitted (author-tenant only).","format":"uuid"},"createdBy":{"$ref":"#/components/schemas/UserReference"},"modifiedBy":{"$ref":"#/components/schemas/UserReference"},"content":{"$ref":"#/components/schemas/ResourceLink"},"id":{"type":"integer","format":"int32"},"self":{"$ref":"#/components/schemas/ResourceLink"}},"additionalProperties":false},"UserReference":{"required":["self"],"type":"object","properties":{"id":{"type":"integer","description":"The identifier of the employee.","format":"int32"},"firstName":{"type":"string","description":"The first/given name of the employee.","nullable":true},"lastName":{"type":"string","description":"The last/family name of the employee.","nullable":true},"email":{"type":"string","description":"The contact and login mail address.","nullable":true},"username":{"type":"string","description":"The username to log in to the app. The value has to be an e-mail address.","nullable":true},"self":{"$ref":"#/components/schemas/ResourceLink"}},"additionalProperties":false},"ResourceLink":{"type":"object","properties":{"href":{"type":"string","nullable":true},"method":{"type":"string","nullable":true}},"additionalProperties":false},"ErrorResponse":{"type":"object","properties":{"errorCode":{"type":"string","nullable":true},"errorDescription":{"type":"string","nullable":true},"data":{"nullable":true}},"additionalProperties":false}}},"paths":{"/v1/inventory/service-instances/{instanceId}/attachments":{"post":{"tags":["Inventory | Service Instance Attachments"],"summary":"Upload one or more attachments to a service instance (customer view)","parameters":[{"name":"instanceId","in":"path","description":"The identifier of the service instance.","required":true,"schema":{"type":"integer","format":"int32"}}],"requestBody":{"content":{"multipart/form-data":{"schema":{"required":["Files"],"type":"object","properties":{"Files":{"type":"array","items":{"type":"string","format":"binary"},"description":"One or more files to upload — max 20 MB of total content per request (e.g. one 20 MB file or several smaller files, max 20 files), max 200 per owner overall. Upload several large files in separate requests."},"Scope":{"$ref":"#/components/schemas/AttachmentScope"},"Note":{"maxLength":500,"type":"string","description":"Optional shared note for all files in the batch."}}},"encoding":{"Files":{"style":"form"},"Scope":{"style":"form"},"Note":{"style":"form"}}}}},"responses":{"201":{"description":"Created: The created attachment list.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AttachmentList"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}}}}
```

## GET /v1/inventory/service-instances/{instanceId}/attachments/{id}

> Retrieve a single attachment of a service instance (customer view)

```json
{"openapi":"3.0.4","info":{"title":"Equipme Customer API","version":"v1"},"tags":[{"name":"Inventory | Service Instance Attachments"}],"security":[{"ApiKey":[]}],"components":{"securitySchemes":{"ApiKey":{"type":"apiKey","description":"Required for authorization in every request. You can request an API-Key for your tenant in the integrations section of the equipme App.","name":"X-API-KEY","in":"header"}},"schemas":{"AttachmentDto":{"required":["id","self"],"type":"object","properties":{"fileName":{"type":"string","description":"Original filename as supplied by the uploader.","nullable":true},"contentType":{"type":"string","description":"Sniffed MIME type.","nullable":true},"size":{"type":"integer","description":"File size in bytes.","format":"int64"},"scope":{"type":"string","description":"Visibility scope: \"public\" or \"internal\".","nullable":true},"note":{"type":"string","description":"Optional note.","nullable":true},"created":{"type":"string","description":"Upload timestamp (UTC).","format":"date-time"},"authorTenantUuid":{"type":"string","description":"Tenant SID of the customer who uploaded this attachment. Clients use this to determine whether PATCH/DELETE is permitted (author-tenant only).","format":"uuid"},"createdBy":{"$ref":"#/components/schemas/UserReference"},"modifiedBy":{"$ref":"#/components/schemas/UserReference"},"content":{"$ref":"#/components/schemas/ResourceLink"},"id":{"type":"integer","format":"int32"},"self":{"$ref":"#/components/schemas/ResourceLink"}},"additionalProperties":false},"UserReference":{"required":["self"],"type":"object","properties":{"id":{"type":"integer","description":"The identifier of the employee.","format":"int32"},"firstName":{"type":"string","description":"The first/given name of the employee.","nullable":true},"lastName":{"type":"string","description":"The last/family name of the employee.","nullable":true},"email":{"type":"string","description":"The contact and login mail address.","nullable":true},"username":{"type":"string","description":"The username to log in to the app. The value has to be an e-mail address.","nullable":true},"self":{"$ref":"#/components/schemas/ResourceLink"}},"additionalProperties":false},"ResourceLink":{"type":"object","properties":{"href":{"type":"string","nullable":true},"method":{"type":"string","nullable":true}},"additionalProperties":false},"ErrorResponse":{"type":"object","properties":{"errorCode":{"type":"string","nullable":true},"errorDescription":{"type":"string","nullable":true},"data":{"nullable":true}},"additionalProperties":false}}},"paths":{"/v1/inventory/service-instances/{instanceId}/attachments/{id}":{"get":{"tags":["Inventory | Service Instance Attachments"],"summary":"Retrieve a single attachment of a service instance (customer view)","parameters":[{"name":"instanceId","in":"path","description":"The identifier of the service instance.","required":true,"schema":{"type":"integer","format":"int32"}},{"name":"id","in":"path","description":"The identifier of the attachment.","required":true,"schema":{"type":"integer","format":"int32"}}],"responses":{"200":{"description":"OK: The attachment.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AttachmentDto"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}}}}
```

## DELETE /v1/inventory/service-instances/{instanceId}/attachments/{id}

> Delete an attachment (customer view, author tenant only)

```json
{"openapi":"3.0.4","info":{"title":"Equipme Customer API","version":"v1"},"tags":[{"name":"Inventory | Service Instance Attachments"}],"security":[{"ApiKey":[]}],"components":{"securitySchemes":{"ApiKey":{"type":"apiKey","description":"Required for authorization in every request. You can request an API-Key for your tenant in the integrations section of the equipme App.","name":"X-API-KEY","in":"header"}},"schemas":{"ErrorResponse":{"type":"object","properties":{"errorCode":{"type":"string","nullable":true},"errorDescription":{"type":"string","nullable":true},"data":{"nullable":true}},"additionalProperties":false}}},"paths":{"/v1/inventory/service-instances/{instanceId}/attachments/{id}":{"delete":{"tags":["Inventory | Service Instance Attachments"],"summary":"Delete an attachment (customer view, author tenant only)","parameters":[{"name":"instanceId","in":"path","description":"The identifier of the service instance.","required":true,"schema":{"type":"integer","format":"int32"}},{"name":"id","in":"path","description":"The identifier of the attachment.","required":true,"schema":{"type":"integer","format":"int32"}}],"responses":{"204":{"description":"NoContent: Delete successful."},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"text/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"text/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"text/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}}}}
```

## PATCH /v1/inventory/service-instances/{instanceId}/attachments/{id}

> Update scope, note or filename of an attachment (customer view, author tenant only)

```json
{"openapi":"3.0.4","info":{"title":"Equipme Customer API","version":"v1"},"tags":[{"name":"Inventory | Service Instance Attachments"}],"security":[{"ApiKey":[]}],"components":{"securitySchemes":{"ApiKey":{"type":"apiKey","description":"Required for authorization in every request. You can request an API-Key for your tenant in the integrations section of the equipme App.","name":"X-API-KEY","in":"header"}},"schemas":{"Operation":{"type":"object","properties":{"value":{"nullable":true},"path":{"type":"string","nullable":true},"op":{"type":"string","nullable":true},"from":{"type":"string","nullable":true}},"additionalProperties":false},"ErrorResponse":{"type":"object","properties":{"errorCode":{"type":"string","nullable":true},"errorDescription":{"type":"string","nullable":true},"data":{"nullable":true}},"additionalProperties":false}}},"paths":{"/v1/inventory/service-instances/{instanceId}/attachments/{id}":{"patch":{"tags":["Inventory | Service Instance Attachments"],"summary":"Update scope, note or filename of an attachment (customer view, author tenant only)","parameters":[{"name":"instanceId","in":"path","description":"The identifier of the service instance.","required":true,"schema":{"type":"integer","format":"int32"}},{"name":"id","in":"path","description":"The identifier of the attachment.","required":true,"schema":{"type":"integer","format":"int32"}}],"requestBody":{"description":"JSON Patch document for Scope, Note and/or FileName.","content":{"application/json-patch+json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Operation"}}},"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Operation"}}}}},"responses":{"204":{"description":"NoContent: Update successful."},"400":{"description":"Bad request","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"text/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"text/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"text/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"text/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}}}}
```

## GET /v1/inventory/service-instances/{instanceId}/attachments/{id}/download

> Stream the content of an attachment (customer view)

```json
{"openapi":"3.0.4","info":{"title":"Equipme Customer API","version":"v1"},"tags":[{"name":"Inventory | Service Instance Attachments"}],"security":[{"ApiKey":[]}],"components":{"securitySchemes":{"ApiKey":{"type":"apiKey","description":"Required for authorization in every request. You can request an API-Key for your tenant in the integrations section of the equipme App.","name":"X-API-KEY","in":"header"}},"schemas":{"ErrorResponse":{"type":"object","properties":{"errorCode":{"type":"string","nullable":true},"errorDescription":{"type":"string","nullable":true},"data":{"nullable":true}},"additionalProperties":false}}},"paths":{"/v1/inventory/service-instances/{instanceId}/attachments/{id}/download":{"get":{"tags":["Inventory | Service Instance Attachments"],"summary":"Stream the content of an attachment (customer view)","parameters":[{"name":"instanceId","in":"path","description":"The identifier of the service instance.","required":true,"schema":{"type":"integer","format":"int32"}},{"name":"id","in":"path","description":"The identifier of the attachment.","required":true,"schema":{"type":"integer","format":"int32"}}],"responses":{"200":{"description":"OK: The file content."},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"text/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"text/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"text/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}}}}
```


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## 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, and the optional `goal` query parameter:

```
GET https://hub.equipme.io/development/api-reference-app/inventory-or-service-instance-attachments.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

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.
