# Scripted REST Resource

{% hint style="info" %}
When you create a Process, Unifi will automatically create the corresponding Scripted REST Resources (see [Automated Creation of REST Service](https://docs.sharelogic.com/unifi/3.1/configuration/process#fields)).
{% endhint %}

This guide is supplementary to the Bidirectional Asynchronous Incident Guide and assumes the Process (& subsequent Scripted REST Resources) are already in place (See the [Web Service](https://docs.sharelogic.com/unifi/3.1/integration-guides/bidirectional-asynchronous-incident-guide/web-service) page of that guide for details). &#x20;

We will now examine the automatically generated Attachment Resource.  If you are manually updating an existing Resource to cater for inbound streaming, ensure that it looks like the this.

## Attachment Resource

*The following code is extracted from the automatically generated Attachment Scripted REST Resource:*

```javascript
(function process( /*RESTAPIRequest*/ request, /*RESTAPIResponse*/ response) {

    var helper = new x_snd_eb.RestHelper('incident_guides'); // the API name of the Unifi Process
    processAttachment(helper.getRequest().getRecord());
    helper.processRequest(request, response, 'POST'); // the HTTP method of the resource

    /**
     * This scripted REST API allows an attachment to be sent into Unifi in a
     * similar way to the OOB api/now/attachment REST API, but it processes it
     * in Unifi.
     *
     */
    function processAttachment(target_record) {
        var file_name = request.queryParams.file_name;
        var reference = request.queryParams.reference;
        var mime_type = request.getHeader('Content-Type');

        if (!file_name || !reference || !mime_type) return;

        var ga = new GlideSysAttachment();

        // save the body to an attachment on the request
        var attachment_id = ga.writeContentStream(target_record, file_name, mime_type, request.body.dataStream);

        // return custom payload for the body to process
        helper._getRequestBody = function _getRequestBody() {
            return '{\n' +
                '"message":    { "name": "AddAttachment" },\n' +
                '"reference":  "' + reference + '",\n' +
                '"attachment": "<x-attachment-data sys_id="' + attachment_id + '" />"\n' +
                '}';
        };
    }

})(request, response);
```

{% hint style="info" %}
Note: the above script is processing the inbound attachment using the `"AddAttachment"` message. If your message is named differently then simply update.

You may need to update the `api_name` in the `x_snd_eb.RestHelper()` function.  It must be the same as the one you set in the Process record.
{% endhint %}

With the Message & Scripted REST Resource in place, you are now ready to **Test** the **AddAttachment** Message.
