MENU navbar-image

Introduction

Good2Go provides an HTTP-based API for integrating with your existing backend. Many functionalities of Good2Go are accessible through these REST APIs. You can use any scripting language to call these APIs. These APIs virtually allow Good2Go to be driven by external systems like an MIS solution, or drive downstream applications such as workflow automation solutions.

This documentation aims to provide necessary information you need to work with our API.

Preface

In Good2Go, everything revolve around job, job properties and job actions. The first point for a consumer of API is to learn four basic tasks:

Two most frequently use APIs are - (1) getting list of available jobs and (2) getting intrinsic properties of job. To get list of the jobs, simply use the API: api/v1/jobs. This returns list of jobs already available on the Good2Go for the given user. Each job in the list has a unique GUID.

If the GUID of the job is known then intrinsic properties of job can be retrieve using API: api/v1/jobs/{job}. Where in {job} need to be replaced with GUID of the job. Various properties returned by this API are documented in the respective section.

There are APIs to upload and download the document associated with a job.

There are APIs to add task to a job and send reminders, or update existing task.

There are also few APIs to retrieve past history of the job, get list of reminders, get the customer associated with the job, etc.

API Integration Overview

Job and actions

Each job is associated with several properties. Some properties are fundamental properties of job. Through API, these properties can be read and updated. There are also optional properties which are available (readonly) only when certain condition is meet. The following fundamental properties are worth to mention here:

Also several actions can be performed on jobs, such as sending a review request to customer, or sending email for quote approval etc. They are defined in Job notifications section.

Webhook

Good2Go service internally can notify about a precise event on job. This is a great way to received an event rather than continuously polling the job data from Good2Go to identify changes. Webhook are efficient way to receive events. Webhooks can be used as alerts to keep your workflow or your applications in sync with jobs inside Good2Go. Good2Go webhook can send events to any publicly accessible server.

Authentication and Security

You can include HTTP Basic Authentication to the endpoint URL to verify the request is coming from Good2Go servers.

The webhook endpoint are always called from following IP address:

You can configure endpoint to refuse other IP addresses.

Retry

Good2Go will attempt to send this notification to the specified endpoint(s). The endpoint must respond with a 2XX status code in timely manner. If failed to receive correct status, Good2Go will try two more time after 30 and 300 seconds respectively.

Payload

It sent only JSON data. The common structure of the event payload is as follows:

For the structure of job parameter refer to Get job information. The data parameter is specific to the event.

Event Type

Method

Endpoint is always called with HTTP POST request.

Authenticating requests

To authenticate requests, include an Authorization header with the value "Bearer {YOUR_AUTH_KEY}".

All authenticated endpoints are marked with a requires authentication badge in the documentation below.

The authentication key can be retrieved after logging to Good2Go Review application. Visit to integration page, go to API Keys section, register an application name and click Create API token.

Job management

APIs for managing jobs and job information.

Get job list

requires authentication

The jobs are filtered by query parameters as defined below.

Example request:
curl --request GET \
    --get "https://www.review.good2gosoftware.com/api/v1/jobs?date_for=reviewed_at.&sort_column=created_at&sort_direction=ASC" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://www.review.good2gosoftware.com/api/v1/jobs"
);

const params = {
    "date_for": "reviewed_at.",
    "sort_column": "created_at",
    "sort_direction": "ASC",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://www.review.good2gosoftware.com/api/v1/jobs';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'query' => [
            'date_for' => 'reviewed_at.',
            'sort_column' => 'created_at',
            'sort_direction' => 'ASC',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):


{
    "ac": {
        "can_assign": true,
        "can_delete": true,
        "can_edit": true,
        "can_view": true,
        "control_job": true,
        "delete_options": {
            "action": "trash"
        },
        "doc_token": null
    },
    "data": [
        {
            "ac": {
                "can_delete": true,
                "can_download": true,
                "can_edit": true,
                "can_view": true
            },
            "asg_email": "tom.jerry@tj.com",
            "c_email": "my.customer@domain.com",
            "created_at": "2022-06-20T17:05:45.000Z",
            "cus_download": true,
            "deleted_at": null,
            "due_at": "2022-06-30T14:54:22.000Z",
            "guid": "3d6daf30-6f86-4980-8b82-8520e5872986",
            "has_comment": false,
            "is_folder": false,
            "is_own": true,
            "is_portal": false,
            "is_watching": false,
            "locked": false,
            "name": "Image Test File.png",
            "newly_assigned": false,
            "parent_guid": "b17a8274-184c-4cb8-a9a7-5f006f41c0ac",
            "p_email": "partner@domain.com",
            "path_url": "http://localhost:8000/review/file/3d6daf30-6f86-4980-8b82-8520e5872986/document/Image%20Test%20File.png?version=25",
            "reminded_at": null,
            "set_to_me": false,
            "size": 14975,
            "source": "in-app",
            "status": "approved",
            "type": "image/png",
            "updated_at": "2022-06-20T17:05:45.000Z",
            "user_email": "niranjanbai@yahoo.com",
            "version": 25
        },
        {
            "ac": {
                "can_delete": true,
                "can_download": true,
                "can_edit": true,
                "can_view": true
            },
            "asg_email": null,
            "c_email": null,
            "created_at": "2022-06-17T18:28:51.000Z",
            "cus_download": false,
            "deleted_at": null,
            "due_at": null,
            "guid": "fe4a0d40-34fd-4050-90ae-f8622b5ac528",
            "has_comment": false,
            "is_folder": true,
            "is_own": true,
            "is_portal": false,
            "is_watching": false,
            "locked": true,
            "name": "Test Folder",
            "newly_assigned": false,
            "parent_guid": "b17a8274-184c-4cb8-a9a7-5f006f41c0ac",
            "p_email": null,
            "path_url": null,
            "reminded_at": null,
            "set_to_me": false,
            "size": 0,
            "source": "in-app",
            "status": "new",
            "type": null,
            "updated_at": "2022-06-17T18:28:51.000Z",
            "user_email": "niranjanbai@yahoo.com",
            "version": 1
        }
    ],
    "guid": "b17a8274-184c-4cb8-a9a7-5f006f41c0ac",
    "links": {
        "first": "http://www.good2gosoftware.com/api/v1/jobs?page=1",
        "last": "http://www.good2gosoftware.com/api/v1/jobs?page=2",
        "prev": null,
        "next": "http://www.good2gosoftware.com/api/v1/jobs?page=2"
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 2,
        "path": "http://www.good2gosoftware.com/api/v1/jobs",
        "per_page": 10,
        "to": 10,
        "total": 12
    },
    "name": "Customer Folder",
    "parent_guid": "",
    "p_email": null
}
 

Request   

GET api/v1/jobs

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

Query Parameters

assignee   string  optional  

The assignee options [ any, none, only, user ]
any - jobs assigned to current user or owned by current user
none - jobs which are not assigned to any one
only - jobs are assigned to current user or owned by current user but assigned to another user
user - jobs assigned to current user

customer   string  optional  

Customer email address.

date_for   string  optional  

The associated field for start and end date. The valid values are [assigned_at, created_at, due_at, reviewed_at, updated_at]. By default, if parameter is not provided, it assume the dates are for 'due_at'. Example: reviewed_at.

dir_only   boolean  optional  

If defined then files are ignored and only folders are selected. (Note: Its value is ignored)

end_date   string  optional  

The end date for field defined in 'date_for'. (ISO UTC datetime). For example, 2021-01-25T14:13:10.000Z.

flat   boolean  optional  

If 'true' then all kind of jobs (file and folder) are returned. See also 'parent' parameter.

file_only   boolean  optional  

If defined then folders are ignored and only files are selected. (Note: Its value is ignored)

name   string  optional  

Name of the job to match.

page   integer  optional  

The page number. Number items returns per page depends upon the settings.

parent   string  optional  

The GUID of the parent. If empty then top level items are returned.

p_email   string  optional  

Partner email address.

sort_column   string  optional  

Valid values are:

  • asg_email
  • created_at
  • customer
  • due_at
  • name
  • owner
  • p_email
  • size
  • updated_at
Example: `created_at`
sort_direction   string  optional  

Valid values are [ ASC, DESC]. Example: ASC

state   string  optional  

Supported values [ deleted ].
deleted - Returned items found in trash.

status   string  optional  

Valid values are [ new, approved, rejected, pending, processing, expired ].

start_date   string  optional  

The start date for field defined in 'date_for' (ISO UTC datetime). For example, 2021-01-25T14:13:10.000Z.

type   string  optional  

The document mime type associated with job. For example, application/pdf, text/plain, image/png, etc.

Response

Response Fields

ac   object   

Hint about access control, if any, on this returned data.

data   string[][]   

An array of jobs which match the url query

guid   string   

The GUID of the folder. This is same as parent GUID passed on the url query. It could be empty which mean the root folder.

meta   object   

The pagination information about current query

name   string   

The name of folder. It could be empty which mean the root folder.

parent_guid   string   

The GUID of the parent folder, if any.

Get job information

requires authentication

Get information about the job identified by given GUID.

The return JSON provides all the information about a given job. Few properties worth to mention here are:

  1. Status of the job,
  2. To whom the job being assigned,
  3. The customer of the job,
  4. Any comments added to the job by print buyer,
  5. The size of the job,
  6. File mime type,
  7. The current job version,
  8. Also it provides some more information about given job type (pdf, image etc.).
Example request:
curl --request GET \
    --get "https://www.review.good2gosoftware.com/api/v1/jobs/b507769f-f7ec-40d2-bd29-f3825adf83ca." \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://www.review.good2gosoftware.com/api/v1/jobs/b507769f-f7ec-40d2-bd29-f3825adf83ca."
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://www.review.good2gosoftware.com/api/v1/jobs/b507769f-f7ec-40d2-bd29-f3825adf83ca.';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):


{
    "ac": {
        "can_assign": true,
        "can_delete": true,
        "can_download": false,
        "can_edit": true,
        "can_view": true,
        "control_job": true,
        "delete_options": {
            "action": "trash"
        }
    },
    "asg_email": "tom.jerry@tj.com",
    "asg_name": "Tom",
    "c_email": "my.customer@domain.com",
    "c_name": "My Customer",
    "created_at": "2021-02-06T10:21:06.000Z",
    "cus_download": true,
    "deleted_at": null,
    "due_at": null,
    "guid": "b7926eb4-6726-4917-abfd-e6eed3476e56",
    "has_comment": false,
    "is_folder": false,
    "is_own": true,
    "is_portal": false,
    "is_watching": false,
    "locked": false,
    "more_info": {
        "annotations": {
            "annot_cnt": 0,
            "annot_cnt_plus": false
        },
        "pageCount": 1,
        "pages": [
            {
                "bits": 0,
                "color": "UNKNOWN",
                "height": 922,
                "mime": "image/png",
                "width": 1616
            }
        ]
    },
    "name": "A Test File.png",
    "newly_assigned": false,
    "parent_guid": "f1096786-687e-4e40-87c7-bdb90ef631e7",
    "p_email": "forward.partner@domain.com",
    "path_url": "http://www.good2gosoftware.com/review/file/b7926eb4-6726-4917-abfd-e6eed3476e56/document/A%20Test%20File.png?version=1",
    "p_name": "DEF Printer",
    "size": 582817,
    "source": "in-app",
    "status": "new",
    "type": "image/png",
    "updated_at": "2021-02-06T10:21:06.000Z",
    "version": 1
}
 

Example response (404):


{
    "error": {
        "message": "Resource not found.",
        "status_code": 404
    }
}
 

Request   

GET api/v1/jobs/{job_guid}

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

job_guid   string   

The GUID of the job. This can be derived from the list of jobs returned from api api/v1/jobs (Get job information). Example: b507769f-f7ec-40d2-bd29-f3825adf83ca.

Response

Response Fields

ac   object   

Hint about access control, if any, on this returned data.

asg_email   string   

The email of user to whom this job has been assigned.

assigned_at      

Job assigned/unassigned date.

c_email   string   

Customer email address.

created_at   string   

Job creation date.

cus_download   boolean   

Whether print buyer will be allowed to download the file or not. Default value is 'false'.

deleted_at   string   

When the job was moved to trash. Default value is 'null'.

due_at      

Due date of the job to complete. Default value is 'null'.

guid   string   

GUID of this job.

has_comment   boolean   

If a comment has been made on the job by print buyer or partner or assignee. Default value is 'false'.

is_folder   boolean   

If this job is a file or folder.

is_own   boolean   

If the current user own this job or not. Default value is 'true'.

is_portal   boolean   

If this folder is used for job portal.

locked   boolean   

If this job (applicable for file only) is locked or not.

more_info   object   

Extra info about this job. This is job specific (type or source or metadata).

name   string   

The name of the job.

newly_assigned   boolean   

If the job is recently assigned to a user and no update found after assignment.

parent_guid   string   

The GUID of the parent folder, if any. Default value is 'null'.

p_email   string   

The partner email for job forward.

path_url   string   

The url path to view the file. Return null in case of folder.

reviewed_at      

Job reviewed date (approved/rejected/change-requested).

size   integer   

The size of the original file associated with the job. Default value is 0 (zero). Especially in case folder it is always 0 (zero).

status   string   

The status of the job. Valid values are [ new, approved, rejected, pending, processing, expired ]. Default value is 'new'.

type   string   

The mime-type of the document associated with the job. For folder it value is null.

updated_at   string   

The last updated date and time.

version   integer   

The current version of the document. Each time a new document is uploaded the version is incremented. Default value is 1 (one).

Create a new job

requires authentication

This method can be used basically to create a folder. You can create a folder by setting the parameter 'is_folder' to 'true'.

Example request:
curl --request POST \
    "https://www.review.good2gosoftware.com/api/v1/jobs" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"parent_guid\": \"2e52307f-c06e-34ff-9dd7-8422c0f8e589\",
    \"alt_text\": \"This is test job. MIS order #12345.\",
    \"c_email\": \"michael.tillman@example.com\",
    \"cus_download\": false,
    \"due_at\": \"2024-11-30T08:37:46.000Z\",
    \"is_folder\": false,
    \"is_portal\": true,
    \"label\": \"Send for review\",
    \"name\": \"10 Pack Art Side Label - 10mg proof.pdf\",
    \"p_email\": \"qjerde@example.org\",
    \"show_job_spec\": true,
    \"show_preflight\": false,
    \"status\": \"processing\",
    \"type\": \"application\\/pdf\"
}"
const url = new URL(
    "https://www.review.good2gosoftware.com/api/v1/jobs"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "parent_guid": "2e52307f-c06e-34ff-9dd7-8422c0f8e589",
    "alt_text": "This is test job. MIS order #12345.",
    "c_email": "michael.tillman@example.com",
    "cus_download": false,
    "due_at": "2024-11-30T08:37:46.000Z",
    "is_folder": false,
    "is_portal": true,
    "label": "Send for review",
    "name": "10 Pack Art Side Label - 10mg proof.pdf",
    "p_email": "qjerde@example.org",
    "show_job_spec": true,
    "show_preflight": false,
    "status": "processing",
    "type": "application\/pdf"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://www.review.good2gosoftware.com/api/v1/jobs';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'parent_guid' => '2e52307f-c06e-34ff-9dd7-8422c0f8e589',
            'alt_text' => 'This is test job. MIS order #12345.',
            'c_email' => 'michael.tillman@example.com',
            'cus_download' => false,
            'due_at' => '2024-11-30T08:37:46.000Z',
            'is_folder' => false,
            'is_portal' => true,
            'label' => 'Send for review',
            'name' => '10 Pack Art Side Label - 10mg proof.pdf',
            'p_email' => 'qjerde@example.org',
            'show_job_spec' => true,
            'show_preflight' => false,
            'status' => 'processing',
            'type' => 'application/pdf',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):


{
    "ac": {
        "can_assign": true,
        "can_delete": true,
        "can_download": false,
        "can_edit": true,
        "can_view": true,
        "control_job": true,
        "delete_options": {
            "action": "trash"
        }
    },
    "asg_email": "tom.jerry@tj.com",
    "asg_name": "Tom",
    "c_email": "my.customer@domain.com",
    "c_name": "My Customer",
    "created_at": "2021-02-06T10:21:06.000Z",
    "cus_download": true,
    "deleted_at": null,
    "due_at": null,
    "guid": "b7926eb4-6726-4917-abfd-e6eed3476e56",
    "has_comment": false,
    "is_folder": false,
    "is_own": true,
    "is_portal": false,
    "is_watching": false,
    "locked": false,
    "more_info": {
        "annotations": {
            "annot_cnt": 0,
            "annot_cnt_plus": false
        },
        "pageCount": 1,
        "pages": [
            {
                "bits": 0,
                "color": "UNKNOWN",
                "height": 922,
                "mime": "image/png",
                "width": 1616
            }
        ]
    },
    "name": "A Test File.png",
    "newly_assigned": false,
    "parent_guid": "f1096786-687e-4e40-87c7-bdb90ef631e7",
    "p_email": "forward.partner@domain.com",
    "path_url": "http://www.good2gosoftware.com/review/file/b7926eb4-6726-4917-abfd-e6eed3476e56/document/A%20Test%20File.png?version=1",
    "p_name": "DEF Printer",
    "size": 582817,
    "source": "in-app",
    "status": "new",
    "type": "image/png",
    "updated_at": "2021-02-06T10:21:06.000Z",
    "version": 1
}
 

Example response (404):


{
    "error": {
        "message": "Resource not found",
        "status_code": 404
    }
}
 

Request   

POST api/v1/jobs

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

Body Parameters

parent_guid   string  optional  

The parent folder GUID or null for Desktop folder. Must be a valid UUID. Example: 2e52307f-c06e-34ff-9dd7-8422c0f8e589

alt_text   string  optional  

Alternative text to describe the file or folder. Must not be greater than 255 characters. Example: This is test job. MIS order #12345.

c_email   string  optional  

Customer email, if any. If the email is not found then it is added to settings for future reference. Must be a valid email address. Example: michael.tillman@example.com

cus_download   boolean  optional  

Enable or disable download of file by customer. Example: false

due_at   string  optional  

The due date and time of the job. Must be a valid date in the format Y-m-d\TH:i:s.v\Z. Example: 2024-11-30T08:37:46.000Z

is_folder   boolean   

Whether the job is file or folder. This can be set only during job creation. Once set, it can't be changed later, e.g. during job update. For folder set it to true; for file set it to false. Refer to job upload method for creating file. Example: false

Must be one of:
  • 1
is_portal   boolean  optional  

Whether the folder is defined as portal or not. If folder is defined as portal then order can be created inside the portal through portal link. Example: true

label   string  optional  

Assign one of the user defined label. This field is very useful for defining internal workflow state. Must not be greater than 64 characters. Example: Send for review

name   string   

The name of the job. It is case insensitive. Must not be greater than 255 characters. Example: 10 Pack Art Side Label - 10mg proof.pdf

p_email   string  optional  

Partner email, if any. If the email is not found then it is added to settings for future reference. Must be a valid email address. Example: qjerde@example.org

show_job_spec   boolean  optional  

Show or hide job specification data to customer. Example: true

show_preflight   boolean  optional  

Show or hide preflight summary data to customer. Example: false

status   string  optional  

The status of the job. Valid values are [ new, approved, rejected, expired ]. There are two internal status [ pending, processing ] related to workflow which can't be changed or assigned. Example: processing

Must be one of:
  • approved
  • change-requested
  • done
  • expired
  • new
  • pending
  • processing
  • rejected
type   string  optional  

The mime data type of the job. Must not be greater than 255 characters. Example: application/pdf

Update an existing job

requires authentication

Example request:
curl --request PUT \
    "https://www.review.good2gosoftware.com/api/v1/jobs/b507769f-f7ec-40d2-bd29-f3825adf83ca." \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"parent_guid\": \"d0e17d60-98d1-3e72-b4fa-0687fbd1cd70\",
    \"alt_text\": \"This is test job. MIS order #12345.\",
    \"c_email\": \"bergnaum.elisha@example.net\",
    \"cus_download\": false,
    \"due_at\": \"2024-11-30T08:37:46.000Z\",
    \"is_folder\": false,
    \"is_portal\": false,
    \"label\": \"Send for review\",
    \"name\": \"10 Pack Art Side Label - 10mg proof.pdf\",
    \"p_email\": \"xfranecki@example.com\",
    \"show_job_spec\": true,
    \"show_preflight\": false,
    \"status\": \"processing\",
    \"type\": \"application\\/pdf\"
}"
const url = new URL(
    "https://www.review.good2gosoftware.com/api/v1/jobs/b507769f-f7ec-40d2-bd29-f3825adf83ca."
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "parent_guid": "d0e17d60-98d1-3e72-b4fa-0687fbd1cd70",
    "alt_text": "This is test job. MIS order #12345.",
    "c_email": "bergnaum.elisha@example.net",
    "cus_download": false,
    "due_at": "2024-11-30T08:37:46.000Z",
    "is_folder": false,
    "is_portal": false,
    "label": "Send for review",
    "name": "10 Pack Art Side Label - 10mg proof.pdf",
    "p_email": "xfranecki@example.com",
    "show_job_spec": true,
    "show_preflight": false,
    "status": "processing",
    "type": "application\/pdf"
};

fetch(url, {
    method: "PUT",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://www.review.good2gosoftware.com/api/v1/jobs/b507769f-f7ec-40d2-bd29-f3825adf83ca.';
$response = $client->put(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'parent_guid' => 'd0e17d60-98d1-3e72-b4fa-0687fbd1cd70',
            'alt_text' => 'This is test job. MIS order #12345.',
            'c_email' => 'bergnaum.elisha@example.net',
            'cus_download' => false,
            'due_at' => '2024-11-30T08:37:46.000Z',
            'is_folder' => false,
            'is_portal' => false,
            'label' => 'Send for review',
            'name' => '10 Pack Art Side Label - 10mg proof.pdf',
            'p_email' => 'xfranecki@example.com',
            'show_job_spec' => true,
            'show_preflight' => false,
            'status' => 'processing',
            'type' => 'application/pdf',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):


{
    "ac": {
        "can_assign": true,
        "can_delete": true,
        "can_download": false,
        "can_edit": true,
        "can_view": true,
        "control_job": true,
        "delete_options": {
            "action": "trash"
        }
    },
    "asg_email": "tom.jerry@tj.com",
    "asg_name": "Tom",
    "c_email": "my.customer@domain.com",
    "c_name": "My Customer",
    "created_at": "2021-02-06T10:21:06.000Z",
    "cus_download": true,
    "deleted_at": null,
    "due_at": null,
    "guid": "b7926eb4-6726-4917-abfd-e6eed3476e56",
    "has_comment": false,
    "is_folder": false,
    "is_own": true,
    "is_portal": false,
    "is_watching": false,
    "locked": false,
    "more_info": {
        "annotations": {
            "annot_cnt": 0,
            "annot_cnt_plus": false
        },
        "pageCount": 1,
        "pages": [
            {
                "bits": 0,
                "color": "UNKNOWN",
                "height": 922,
                "mime": "image/png",
                "width": 1616
            }
        ]
    },
    "name": "A Test File.png",
    "newly_assigned": false,
    "parent_guid": "f1096786-687e-4e40-87c7-bdb90ef631e7",
    "p_email": "forward.partner@domain.com",
    "path_url": "http://www.good2gosoftware.com/review/file/b7926eb4-6726-4917-abfd-e6eed3476e56/document/A%20Test%20File.png?version=1",
    "p_name": "DEF Printer",
    "size": 582817,
    "source": "in-app",
    "status": "new",
    "type": "image/png",
    "updated_at": "2021-02-06T10:21:06.000Z",
    "version": 1
}
 

Example response (404):


{
    "error": {
        "message": "Resource not found",
        "status_code": 404
    }
}
 

Request   

PUT api/v1/jobs/{job_guid}

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

job_guid   string   

The GUID of the job. This can be derived from the list of jobs returned from api api/v1/jobs (Get job information). Example: b507769f-f7ec-40d2-bd29-f3825adf83ca.

Body Parameters

parent_guid   string  optional  

The parent folder GUID or null for Desktop folder. Must be a valid UUID. Example: d0e17d60-98d1-3e72-b4fa-0687fbd1cd70

alt_text   string  optional  

Alternative text to describe the file or folder. Must not be greater than 255 characters. Example: This is test job. MIS order #12345.

c_email   string  optional  

Customer email, if any. If the email is not found then it is added to settings for future reference. Must be a valid email address. Example: bergnaum.elisha@example.net

cus_download   boolean  optional  

Enable or disable download of file by customer. Example: false

due_at   string  optional  

The due date and time of the job. Must be a valid date in the format Y-m-d\TH:i:s.v\Z. Example: 2024-11-30T08:37:46.000Z

is_folder   boolean  optional  

Whether the job is file or folder. This can be set only during job creation. Once set, it can't be changed later, e.g. during job update. For folder set it to true; for file set it to false. Refer to job upload method for creating file. Example: false

is_portal   boolean  optional  

Whether the folder is defined as portal or not. If folder is defined as portal then order can be created inside the portal through portal link. Example: false

label   string  optional  

Assign one of the user defined label. This field is very useful for defining internal workflow state. Must not be greater than 64 characters. Example: Send for review

name   string  optional  

The name of the job. It is case insensitive. Must not be greater than 255 characters. Example: 10 Pack Art Side Label - 10mg proof.pdf

p_email   string  optional  

Partner email, if any. If the email is not found then it is added to settings for future reference. Must be a valid email address. Example: xfranecki@example.com

show_job_spec   boolean  optional  

Show or hide job specification data to customer. Example: true

show_preflight   boolean  optional  

Show or hide preflight summary data to customer. Example: false

status   string  optional  

The status of the job. Valid values are [ new, approved, rejected, expired ]. There are two internal status [ pending, processing ] related to workflow which can't be changed or assigned. Example: processing

Must be one of:
  • approved
  • change-requested
  • done
  • expired
  • new
  • pending
  • processing
  • rejected
type   string  optional  

The mime data type of the job. Must not be greater than 255 characters. Example: application/pdf

Delete an existing job

requires authentication

If the trash-on-delete is enabled in the user setting then a live job is moved to trash. If trash-on-delete is disabled in the user setting then job is permanently deleted.

If the delete method is called for a trashed job then it is permanently deleted.

Example request:
curl --request DELETE \
    "https://www.review.good2gosoftware.com/api/v1/jobs/b507769f-f7ec-40d2-bd29-f3825adf83ca." \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://www.review.good2gosoftware.com/api/v1/jobs/b507769f-f7ec-40d2-bd29-f3825adf83ca."
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://www.review.good2gosoftware.com/api/v1/jobs/b507769f-f7ec-40d2-bd29-f3825adf83ca.';
$response = $client->delete(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):


{}
 

Example response (404):


{
    "error": {
        "message": "Resource not found",
        "status_code": 404
    }
}
 

Request   

DELETE api/v1/jobs/{job_guid}

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

job_guid   string   

The GUID of the job. This can be derived from the list of jobs returned from api api/v1/jobs (Get job information). Example: b507769f-f7ec-40d2-bd29-f3825adf83ca.

Duplicate document

requires authentication

It is often useful to be able to create a new document using a previously uploaded file. This avoid repeating the upload process.

This will copy the document and their latest preflight and image metadata, (and annotation for PDF files, if any).

Example request:
curl --request POST \
    "https://www.review.good2gosoftware.com/api/v1/jobs/b507769f-f7ec-40d2-bd29-f3825adf83ca/duplicate" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"c_email\": \"vsteuber@example.net\"
}"
const url = new URL(
    "https://www.review.good2gosoftware.com/api/v1/jobs/b507769f-f7ec-40d2-bd29-f3825adf83ca/duplicate"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "c_email": "vsteuber@example.net"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://www.review.good2gosoftware.com/api/v1/jobs/b507769f-f7ec-40d2-bd29-f3825adf83ca/duplicate';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'c_email' => 'vsteuber@example.net',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):


{
    "ac": {
        "can_assign": true,
        "can_delete": true,
        "can_download": false,
        "can_edit": true,
        "can_view": true,
        "control_job": true,
        "delete_options": {
            "action": "trash"
        }
    },
    "asg_email": "tom.jerry@tj.com",
    "asg_name": "Tom",
    "c_email": "my.customer@domain.com",
    "c_name": "My Customer",
    "created_at": "2021-02-06T10:21:06.000Z",
    "cus_download": true,
    "deleted_at": null,
    "due_at": null,
    "guid": "b7926eb4-6726-4917-abfd-e6eed3476e56",
    "has_comment": false,
    "is_folder": false,
    "is_own": true,
    "is_portal": false,
    "is_watching": false,
    "locked": false,
    "more_info": {
        "annotations": {
            "annot_cnt": 0,
            "annot_cnt_plus": false
        },
        "pageCount": 1,
        "pages": [
            {
                "bits": 0,
                "color": "UNKNOWN",
                "height": 922,
                "mime": "image/png",
                "width": 1616
            }
        ]
    },
    "name": "A Test File.png",
    "newly_assigned": false,
    "parent_guid": "f1096786-687e-4e40-87c7-bdb90ef631e7",
    "p_email": "forward.partner@domain.com",
    "path_url": "http://www.good2gosoftware.com/review/file/b7926eb4-6726-4917-abfd-e6eed3476e56/document/A%20Test%20File.png?version=1",
    "p_name": "DEF Printer",
    "size": 582817,
    "source": "in-app",
    "status": "new",
    "type": "image/png",
    "updated_at": "2021-02-06T10:21:06.000Z",
    "version": 1
}
 

Example response (404):


{
    "error": {
        "message": "Resource not found",
        "status_code": 404
    }
}
 

Request   

POST api/v1/jobs/{job_guid}/duplicate

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

job_guid   string   

The guid of the job. This can be derived from the list of jobs returned from api 'api/v1/jobs'. Example: b507769f-f7ec-40d2-bd29-f3825adf83ca

Body Parameters

c_email   string  optional  

Customer email, if any. If the email is not found then it is added to settings for future reference. Must be a valid email address. Example: vsteuber@example.net

Customer

Get job's customer information

requires authentication

This returns information available about the customer associated with this job.

Example request:
curl --request GET \
    --get "https://www.review.good2gosoftware.com/api/v1/jobs/b507769f-f7ec-40d2-bd29-f3825adf83ca./customer" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://www.review.good2gosoftware.com/api/v1/jobs/b507769f-f7ec-40d2-bd29-f3825adf83ca./customer"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://www.review.good2gosoftware.com/api/v1/jobs/b507769f-f7ec-40d2-bd29-f3825adf83ca./customer';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):


{
    "address": "3456, N Park Meadow Way",
    "alt_phone": "1234567890",
    "c_email": "test.good2go@gmail.com",
    "c_name": "Test Good2Go",
    "city": "New York",
    "company": "Good2Go",
    "created_at": "2020-10-23T16:53:35.000Z",
    "group": "Sales Team",
    "id": 2,
    "identity": "0123456789",
    "phone": "9876543210",
    "state": "NY",
    "updated_at": "2021-02-10T11:20:44.000Z",
    "valid_email": 1,
    "zip_code": "12345"
}
 

Example response (404):


{
    "error": {
        "message": "Customer email not defined.",
        "status_code": 404
    }
}
 

Request   

GET api/v1/jobs/{job_guid}/customer

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

job_guid   string   

The GUID of the job. This can be derived from the list of jobs returned from api api/v1/jobs (Get job information). Example: b507769f-f7ec-40d2-bd29-f3825adf83ca.

Response

Response Fields

address   string   

Customer's address.

alt_phone   string   

Customer's alternative phone number.

c_email   string   

Customer's email address.

c_name   string   

Customer's name.

city   string   

Customer's city in the address.

company   string   

Customer's company name.

group   string   

Specific group assigned to customer.

identity   string   

Identity of the customer (reference to other database/record), if any.

phone   string   

Customer's phone number.

state   string   

Customer's city in the address.

zip_code   string   

Customer's zip code in the address.

Update job's customer

requires authentication

Example request:
curl --request PUT \
    "https://www.review.good2gosoftware.com/api/v1/jobs/b507769f-f7ec-40d2-bd29-f3825adf83ca./customer" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"address\": \"40 North Canal Street, Shickshinny, PA 12345, United States\",
    \"alt_phone\": \"123-456-7890\",
    \"c_email\": \"citlalli.kautzer@example.com\",
    \"c_name\": \"Tom Jerry\",
    \"city\": \"Shickshinny\",
    \"company\": \"Good2Go Software\",
    \"group\": \"abc-company\",
    \"identity\": \"acf093ed\",
    \"phone\": \"234-567-8901\",
    \"state\": \"PA\",
    \"zip_code\": \"12345\"
}"
const url = new URL(
    "https://www.review.good2gosoftware.com/api/v1/jobs/b507769f-f7ec-40d2-bd29-f3825adf83ca./customer"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "address": "40 North Canal Street, Shickshinny, PA 12345, United States",
    "alt_phone": "123-456-7890",
    "c_email": "citlalli.kautzer@example.com",
    "c_name": "Tom Jerry",
    "city": "Shickshinny",
    "company": "Good2Go Software",
    "group": "abc-company",
    "identity": "acf093ed",
    "phone": "234-567-8901",
    "state": "PA",
    "zip_code": "12345"
};

fetch(url, {
    method: "PUT",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://www.review.good2gosoftware.com/api/v1/jobs/b507769f-f7ec-40d2-bd29-f3825adf83ca./customer';
$response = $client->put(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'address' => '40 North Canal Street, Shickshinny, PA 12345, United States',
            'alt_phone' => '123-456-7890',
            'c_email' => 'citlalli.kautzer@example.com',
            'c_name' => 'Tom Jerry',
            'city' => 'Shickshinny',
            'company' => 'Good2Go Software',
            'group' => 'abc-company',
            'identity' => 'acf093ed',
            'phone' => '234-567-8901',
            'state' => 'PA',
            'zip_code' => '12345',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):


{
    "address": "3456, N Park Meadow Way",
    "alt_phone": "1234567890",
    "c_email": "test.good2go@gmail.com",
    "c_name": "Test Good2Go",
    "city": "New York",
    "company": "Good2Go",
    "created_at": "2020-10-23T16:53:35.000Z",
    "group": "Sales Team",
    "id": 2,
    "identity": "0123456789",
    "phone": "9876543210",
    "state": "NY",
    "updated_at": "2021-02-10T11:20:44.000Z",
    "valid_email": 1,
    "zip_code": "12345"
}
 

Example response (200):


{
    "address": "3456, N Park Meadow Way",
    "alt_phone": "1234567890",
    "c_email": "test.good2go@gmail.com",
    "c_name": "Test Good2Go",
    "city": "New York",
    "company": "Good2Go",
    "created_at": "2020-10-23T16:53:35.000Z",
    "group": "Sales Team",
    "id": 2,
    "identity": "0123456789",
    "phone": "9876543210",
    "state": "NY",
    "updated_at": "2021-02-10T11:20:44.000Z",
    "valid_email": 1,
    "zip_code": "12345"
}
 

Request   

PUT api/v1/jobs/{job_guid}/customer

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

job_guid   string   

The GUID of the job. This can be derived from the list of jobs returned from api api/v1/jobs (Get job information). Example: b507769f-f7ec-40d2-bd29-f3825adf83ca.

Body Parameters

address   string  optional  

The customer or partner mailing address. Example: 40 North Canal Street, Shickshinny, PA 12345, United States

alt_phone   string  optional  

Alternative phone number of customer. Example: 123-456-7890

c_email   string   

Email of customer. Must be a valid email address. Example: citlalli.kautzer@example.com

c_name   string  optional  

Name of customer. Example: Tom Jerry

city   string  optional  

City in mailing address. Example: Shickshinny

company   string  optional  

Company name. Example: Good2Go Software

group   string  optional  

Specific group assigned to customer. Must not be greater than 64 characters. Example: abc-company

identity   string  optional  

Identity of the customer (reference to other database/record), if any. Must not be greater than 64 characters. Example: acf093ed

phone   string  optional  

Phone number. Example: 234-567-8901

state   string  optional  

State in mailing address. Example: PA

zip_code   string  optional  

Zip code or PIN of mailing address. Example: 12345

Response

Response Fields

address   string   

Partner's address.

alt_phone   string   

Partner's alternative phone number.

c_email   string   

Partner's email address.

c_name   string   

Partner's name.

city   string   

Partner's city in the address.

company   string   

Partner's company name.

group   string   

Specific group assigned to customer.

identity   string   

Identity of the customer (reference to other database/record), if any.

phone   string   

Partner's phone number.

state   string   

Partner's city in the address.

zip_code   string   

Partner's zip code in the address.

Unassign job's customer

requires authentication

Remove job customer associated with given job.

Example request:
curl --request DELETE \
    "https://www.review.good2gosoftware.com/api/v1/jobs/b507769f-f7ec-40d2-bd29-f3825adf83ca./customer" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://www.review.good2gosoftware.com/api/v1/jobs/b507769f-f7ec-40d2-bd29-f3825adf83ca./customer"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://www.review.good2gosoftware.com/api/v1/jobs/b507769f-f7ec-40d2-bd29-f3825adf83ca./customer';
$response = $client->delete(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):


{}
 

Request   

DELETE api/v1/jobs/{job_guid}/customer

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

job_guid   string   

The GUID of the job. This can be derived from the list of jobs returned from api api/v1/jobs (Get job information). Example: b507769f-f7ec-40d2-bd29-f3825adf83ca.

Ownership

Get job owner information

requires authentication

Example request:
curl --request GET \
    --get "https://www.review.good2gosoftware.com/api/v1/jobs/03a71fd0-cc06-4432-bfef-44baa7a1d7c6./ownership" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://www.review.good2gosoftware.com/api/v1/jobs/03a71fd0-cc06-4432-bfef-44baa7a1d7c6./ownership"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://www.review.good2gosoftware.com/api/v1/jobs/03a71fd0-cc06-4432-bfef-44baa7a1d7c6./ownership';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):


{
     "guid": "f6ac15ca-e4fa-4e1f-bb94-088ec04d7dab",
     "owner": {
         "email": "abc.pqr@mail.com",
         "full_name": "Abc Pqr",
         ...
     },
     "parent": {
         "c_email": "customer@mail.com"
         "guid": "292fb01f-23ad-4d42-b126-251bd95d2637",
         "name": "Test folder",
         ...
     },
     "parent_guid": "292fb01f-23ad-4d42-b126-251bd95d2637"
}
 

Example response (404):


{
    "error": {
        "message": "Resource not found",
        "status_code": 404
    }
}
 

Request   

GET api/v1/jobs/{job_guid}/ownership

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

job_guid   string   

The GUID of the job. This can be derived from the list of jobs returned from api api/v1/jobs (Get job information). Example: 03a71fd0-cc06-4432-bfef-44baa7a1d7c6.

Response

Response Fields

guid   string   

The GUID of the job.

owner   object   

The information about job owner.

parent   object   

The complete information about parent folder.

parent_guid   string   

The GUID of parent folder.

Update job owner and parent folder.

requires authentication

This API is especially useful for moving a job either from one folder to another or from one user to another, or both.

Example request:
curl --request POST \
    "https://www.review.good2gosoftware.com/api/v1/jobs/03a71fd0-cc06-4432-bfef-44baa7a1d7c6./ownership" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"parent_guid\": \"velit\"
}"
const url = new URL(
    "https://www.review.good2gosoftware.com/api/v1/jobs/03a71fd0-cc06-4432-bfef-44baa7a1d7c6./ownership"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "parent_guid": "velit"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://www.review.good2gosoftware.com/api/v1/jobs/03a71fd0-cc06-4432-bfef-44baa7a1d7c6./ownership';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'parent_guid' => 'velit',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):


{
    "ac": {
        "can_assign": true,
        "can_delete": true,
        "can_download": false,
        "can_edit": true,
        "can_view": true,
        "control_job": true,
        "delete_options": {
            "action": "trash"
        }
    },
    "asg_email": "tom.jerry@tj.com",
    "asg_name": "Tom",
    "c_email": "my.customer@domain.com",
    "c_name": "My Customer",
    "created_at": "2021-02-06T10:21:06.000Z",
    "cus_download": true,
    "deleted_at": null,
    "due_at": null,
    "guid": "b7926eb4-6726-4917-abfd-e6eed3476e56",
    "has_comment": false,
    "is_folder": false,
    "is_own": true,
    "is_portal": false,
    "is_watching": false,
    "locked": false,
    "more_info": {
        "annotations": {
            "annot_cnt": 0,
            "annot_cnt_plus": false
        },
        "pageCount": 1,
        "pages": [
            {
                "bits": 0,
                "color": "UNKNOWN",
                "height": 922,
                "mime": "image/png",
                "width": 1616
            }
        ]
    },
    "name": "A Test File.png",
    "newly_assigned": false,
    "parent_guid": "f1096786-687e-4e40-87c7-bdb90ef631e7",
    "p_email": "forward.partner@domain.com",
    "path_url": "http://www.good2gosoftware.com/review/file/b7926eb4-6726-4917-abfd-e6eed3476e56/document/A%20Test%20File.png?version=1",
    "p_name": "DEF Printer",
    "size": 582817,
    "source": "in-app",
    "status": "new",
    "type": "image/png",
    "updated_at": "2021-02-06T10:21:06.000Z",
    "version": 1
}
 

Request   

POST api/v1/jobs/{job_guid}/ownership

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

job_guid   string   

The GUID of the job. This can be derived from the list of jobs returned from api api/v1/jobs (Get job information). Example: 03a71fd0-cc06-4432-bfef-44baa7a1d7c6.

Body Parameters

parent_guid   string   

The parent folder GUID or null for Desktop folder. Example: velit

Partner

Get job's partner information

requires authentication

This returns information available about the partner associated with this job.

Example request:
curl --request GET \
    --get "https://www.review.good2gosoftware.com/api/v1/jobs/b507769f-f7ec-40d2-bd29-f3825adf83ca./partner" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://www.review.good2gosoftware.com/api/v1/jobs/b507769f-f7ec-40d2-bd29-f3825adf83ca./partner"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://www.review.good2gosoftware.com/api/v1/jobs/b507769f-f7ec-40d2-bd29-f3825adf83ca./partner';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):


{
    "address": "3456, N Park Meadow Way",
    "alt_phone": "1234567890",
    "c_email": "test.good2go@gmail.com",
    "c_name": "Test Good2Go",
    "city": "New York",
    "company": "Good2Go",
    "created_at": "2020-10-23T16:53:35.000Z",
    "group": "Sales Team",
    "id": 2,
    "identity": "0123456789",
    "phone": "9876543210",
    "state": "NY",
    "updated_at": "2021-02-10T11:20:44.000Z",
    "valid_email": 1,
    "zip_code": "12345"
}
 

Example response (404):


{
    "error": {
        "message": "Partner email not defined.",
        "status_code": 404
    }
}
 

Request   

GET api/v1/jobs/{job_guid}/partner

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

job_guid   string   

The GUID of the job. This can be derived from the list of jobs returned from api api/v1/jobs (Get job information). Example: b507769f-f7ec-40d2-bd29-f3825adf83ca.

Response

Response Fields

address   string   

Partner's address.

alt_phone   string   

Partner's alternative phone number.

c_email   string   

Partner's email address.

c_name   string   

Partner's name.

city   string   

Partner's city in the address.

company   string   

Partner's company name.

group   string   

Specific group assigned to customer.

identity   string   

Identity of the customer (reference to other database/record), if any.

phone   string   

Partner's phone number.

state   string   

Partner's city in the address.

zip_code   string   

Partner's zip code in the address.

Update job's partner

requires authentication

Example request:
curl --request PUT \
    "https://www.review.good2gosoftware.com/api/v1/jobs/b507769f-f7ec-40d2-bd29-f3825adf83ca./partner" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"address\": \"40 North Canal Street, Shickshinny, PA 12345, United States\",
    \"alt_phone\": \"123-456-7890\",
    \"c_email\": \"goodwin.savanah@example.org\",
    \"c_name\": \"Tom Jerry\",
    \"city\": \"Shickshinny\",
    \"company\": \"Good2Go Software\",
    \"group\": \"abc-company\",
    \"identity\": \"acf093ed\",
    \"phone\": \"234-567-8901\",
    \"state\": \"PA\",
    \"zip_code\": \"12345\"
}"
const url = new URL(
    "https://www.review.good2gosoftware.com/api/v1/jobs/b507769f-f7ec-40d2-bd29-f3825adf83ca./partner"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "address": "40 North Canal Street, Shickshinny, PA 12345, United States",
    "alt_phone": "123-456-7890",
    "c_email": "goodwin.savanah@example.org",
    "c_name": "Tom Jerry",
    "city": "Shickshinny",
    "company": "Good2Go Software",
    "group": "abc-company",
    "identity": "acf093ed",
    "phone": "234-567-8901",
    "state": "PA",
    "zip_code": "12345"
};

fetch(url, {
    method: "PUT",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://www.review.good2gosoftware.com/api/v1/jobs/b507769f-f7ec-40d2-bd29-f3825adf83ca./partner';
$response = $client->put(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'address' => '40 North Canal Street, Shickshinny, PA 12345, United States',
            'alt_phone' => '123-456-7890',
            'c_email' => 'goodwin.savanah@example.org',
            'c_name' => 'Tom Jerry',
            'city' => 'Shickshinny',
            'company' => 'Good2Go Software',
            'group' => 'abc-company',
            'identity' => 'acf093ed',
            'phone' => '234-567-8901',
            'state' => 'PA',
            'zip_code' => '12345',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):


{
    "address": "3456, N Park Meadow Way",
    "alt_phone": "1234567890",
    "c_email": "test.good2go@gmail.com",
    "c_name": "Test Good2Go",
    "city": "New York",
    "company": "Good2Go",
    "created_at": "2020-10-23T16:53:35.000Z",
    "group": "Sales Team",
    "id": 2,
    "identity": "0123456789",
    "phone": "9876543210",
    "state": "NY",
    "updated_at": "2021-02-10T11:20:44.000Z",
    "valid_email": 1,
    "zip_code": "12345"
}
 

Example response (200):


{
    "address": "3456, N Park Meadow Way",
    "alt_phone": "1234567890",
    "c_email": "test.good2go@gmail.com",
    "c_name": "Test Good2Go",
    "city": "New York",
    "company": "Good2Go",
    "created_at": "2020-10-23T16:53:35.000Z",
    "group": "Sales Team",
    "id": 2,
    "identity": "0123456789",
    "phone": "9876543210",
    "state": "NY",
    "updated_at": "2021-02-10T11:20:44.000Z",
    "valid_email": 1,
    "zip_code": "12345"
}
 

Request   

PUT api/v1/jobs/{job_guid}/partner

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

job_guid   string   

The GUID of the job. This can be derived from the list of jobs returned from api api/v1/jobs (Get job information). Example: b507769f-f7ec-40d2-bd29-f3825adf83ca.

Body Parameters

address   string  optional  

The customer or partner mailing address. Example: 40 North Canal Street, Shickshinny, PA 12345, United States

alt_phone   string  optional  

Alternative phone number of customer. Example: 123-456-7890

c_email   string   

Email of customer. Must be a valid email address. Example: goodwin.savanah@example.org

c_name   string  optional  

Name of customer. Example: Tom Jerry

city   string  optional  

City in mailing address. Example: Shickshinny

company   string  optional  

Company name. Example: Good2Go Software

group   string  optional  

Specific group assigned to customer. Must not be greater than 64 characters. Example: abc-company

identity   string  optional  

Identity of the customer (reference to other database/record), if any. Must not be greater than 64 characters. Example: acf093ed

phone   string  optional  

Phone number. Example: 234-567-8901

state   string  optional  

State in mailing address. Example: PA

zip_code   string  optional  

Zip code or PIN of mailing address. Example: 12345

Response

Response Fields

address   string   

Partner's address.

alt_phone   string   

Partner's alternative phone number.

c_email   string   

Partner's email address.

c_name   string   

Partner's name.

city   string   

Partner's city in the address.

company   string   

Partner's company name.

group   string   

Specific group assigned to customer.

identity   string   

Identity of the customer (reference to other database/record), if any.

phone   string   

Partner's phone number.

state   string   

Partner's city in the address.

zip_code   string   

Partner's zip code in the address.

Unassign job's partner

requires authentication

Remove job partner associated with given job.

Example request:
curl --request DELETE \
    "https://www.review.good2gosoftware.com/api/v1/jobs/b507769f-f7ec-40d2-bd29-f3825adf83ca./partner" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://www.review.good2gosoftware.com/api/v1/jobs/b507769f-f7ec-40d2-bd29-f3825adf83ca./partner"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://www.review.good2gosoftware.com/api/v1/jobs/b507769f-f7ec-40d2-bd29-f3825adf83ca./partner';
$response = $client->delete(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):


{}
 

Request   

DELETE api/v1/jobs/{job_guid}/partner

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

job_guid   string   

The GUID of the job. This can be derived from the list of jobs returned from api api/v1/jobs (Get job information). Example: b507769f-f7ec-40d2-bd29-f3825adf83ca.

File upload

APIs to upload a new document or update an existing document in a job.

Upload a file revision

requires authentication

Example request:
curl --request POST \
    "https://www.review.good2gosoftware.com/api/v1/jobs/2dd7f609-d85c-4409-8c12-9fbb494bf549/revision" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: multipart/form-data" \
    --header "Accept: application/json" \
    --form "comments=File from
     example customer."\
    --form "default[comments]=1"\
    --form "default[task]="\
    --form "default[reviewers]="\
    --form "schedule=now"\
    --form "task[category]=assign-task"\
    --form "task[due_at]=2024-05-21T15:26:01.000Z"\
    --form "task[req_confirm]="\
    --form "task[status]=architecto"\
    --form "reason=reset-task"\
    --form "recipient=tom.jerry@tj.com"\
    --form "reviewers[]=et"\
    --form "alt_text=File from example customer."\
    --form "label=ysbgdghvsmvwsbpx"\
    --form "name=Test-File.pdf"\
    --form "parent=852215c9-2871-4a28-b9fc-b70b4c166e41"\
    --form "puid=iymzpwvrqw"\
    --form "file_url=https://www.bergnaum.org/dolores-voluptatum-aut-quod-neque-voluptas"\
    --form "size=789012"\
    --form "type=application/pdf"\
    --form "filekey=@/tmp/php4Fua0k" 
const url = new URL(
    "https://www.review.good2gosoftware.com/api/v1/jobs/2dd7f609-d85c-4409-8c12-9fbb494bf549/revision"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "multipart/form-data",
    "Accept": "application/json",
};

const body = new FormData();
body.append('comments', 'File from
     example customer.');
body.append('default[comments]', '1');
body.append('default[task]', '');
body.append('default[reviewers]', '');
body.append('schedule', 'now');
body.append('task[category]', 'assign-task');
body.append('task[due_at]', '2024-05-21T15:26:01.000Z');
body.append('task[req_confirm]', '');
body.append('task[status]', 'architecto');
body.append('reason', 'reset-task');
body.append('recipient', 'tom.jerry@tj.com');
body.append('reviewers[]', 'et');
body.append('alt_text', 'File from example customer.');
body.append('label', 'ysbgdghvsmvwsbpx');
body.append('name', 'Test-File.pdf');
body.append('parent', '852215c9-2871-4a28-b9fc-b70b4c166e41');
body.append('puid', 'iymzpwvrqw');
body.append('file_url', 'https://www.bergnaum.org/dolores-voluptatum-aut-quod-neque-voluptas');
body.append('size', '789012');
body.append('type', 'application/pdf');
body.append('filekey', document.querySelector('input[name="filekey"]').files[0]);

fetch(url, {
    method: "POST",
    headers,
    body,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://www.review.good2gosoftware.com/api/v1/jobs/2dd7f609-d85c-4409-8c12-9fbb494bf549/revision';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'multipart/form-data',
            'Accept' => 'application/json',
        ],
        'multipart' => [
            [
                'name' => 'comments',
                'contents' => 'File from
     example customer.'
            ],
            [
                'name' => 'default[comments]',
                'contents' => '1'
            ],
            [
                'name' => 'default[task]',
                'contents' => ''
            ],
            [
                'name' => 'default[reviewers]',
                'contents' => ''
            ],
            [
                'name' => 'schedule',
                'contents' => 'now'
            ],
            [
                'name' => 'task[category]',
                'contents' => 'assign-task'
            ],
            [
                'name' => 'task[due_at]',
                'contents' => '2024-05-21T15:26:01.000Z'
            ],
            [
                'name' => 'task[req_confirm]',
                'contents' => ''
            ],
            [
                'name' => 'task[status]',
                'contents' => 'architecto'
            ],
            [
                'name' => 'reason',
                'contents' => 'reset-task'
            ],
            [
                'name' => 'recipient',
                'contents' => 'tom.jerry@tj.com'
            ],
            [
                'name' => 'reviewers[]',
                'contents' => 'et'
            ],
            [
                'name' => 'alt_text',
                'contents' => 'File from example customer.'
            ],
            [
                'name' => 'label',
                'contents' => 'ysbgdghvsmvwsbpx'
            ],
            [
                'name' => 'name',
                'contents' => 'Test-File.pdf'
            ],
            [
                'name' => 'parent',
                'contents' => '852215c9-2871-4a28-b9fc-b70b4c166e41'
            ],
            [
                'name' => 'puid',
                'contents' => 'iymzpwvrqw'
            ],
            [
                'name' => 'file_url',
                'contents' => 'https://www.bergnaum.org/dolores-voluptatum-aut-quod-neque-voluptas'
            ],
            [
                'name' => 'size',
                'contents' => '789012'
            ],
            [
                'name' => 'type',
                'contents' => 'application/pdf'
            ],
            [
                'name' => 'filekey',
                'contents' => fopen('/tmp/php4Fua0k', 'r')
            ],
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):


{
    "ac": {
        "can_assign": true,
        "can_delete": true,
        "can_download": false,
        "can_edit": true,
        "can_view": true,
        "control_job": true,
        "delete_options": {
            "action": "trash"
        }
    },
    "asg_email": "tom.jerry@tj.com",
    "asg_name": "Tom",
    "c_email": "my.customer@domain.com",
    "c_name": "My Customer",
    "created_at": "2021-02-06T10:21:06.000Z",
    "cus_download": true,
    "deleted_at": null,
    "due_at": null,
    "guid": "b7926eb4-6726-4917-abfd-e6eed3476e56",
    "has_comment": false,
    "is_folder": false,
    "is_own": true,
    "is_portal": false,
    "is_watching": false,
    "locked": false,
    "more_info": {
        "annotations": {
            "annot_cnt": 0,
            "annot_cnt_plus": false
        },
        "pageCount": 1,
        "pages": [
            {
                "bits": 0,
                "color": "UNKNOWN",
                "height": 922,
                "mime": "image/png",
                "width": 1616
            }
        ]
    },
    "name": "A Test File.png",
    "newly_assigned": false,
    "parent_guid": "f1096786-687e-4e40-87c7-bdb90ef631e7",
    "p_email": "forward.partner@domain.com",
    "path_url": "http://www.good2gosoftware.com/review/file/b7926eb4-6726-4917-abfd-e6eed3476e56/document/A%20Test%20File.png?version=1",
    "p_name": "DEF Printer",
    "size": 582817,
    "source": "in-app",
    "status": "new",
    "type": "image/png",
    "updated_at": "2021-02-06T10:21:06.000Z",
    "version": 1
}
 

Request   

POST api/v1/jobs/{job_guid}/revision

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: multipart/form-data

Accept      

Example: application/json

URL Parameters

job_guid   string   

The guid of the job. Example: 2dd7f609-d85c-4409-8c12-9fbb494bf549

Body Parameters

comments   string  optional  

Comment, if any, associated sending notification. This field is relevant when upload is associated with a task. Example: File from example customer.

default   object  optional  

The default value to be used for task related fields. If defined, it auto fill those properties.

comments   boolean  optional  

Whether to use default comments, if comments field is not defined. Example: true

task   boolean  optional  

Whether to use default value for task sub-properties, if they are not defined. Example: false

reviewers   boolean  optional  

Whether to use existing reviewer, if reviewers field is not defined. Example: false

schedule   string  optional  

When to schedule the task. The valid values are [now, later]. Example: now

task   object  optional  

The task associated with this job. (Click to see more options.)

category   string  optional  

The task category. The supported values are [assign-task, forward-task, review-task, revision-task, and upload-task]. Example: assign-task

due_at   string  optional  

Due date of the task to complete. Default value is 'null'. Example: 2024-05-21T15:26:01.000Z

req_confirm   boolean  optional  

Whether required confirmation is enabled or not. Example: false

status   string  optional  

The status of the job. Valid values are [new, paused, processing, and done]. Example: architecto

reason   string   

Example: reset-task

Must be one of:
  • notify-task
  • reset-task
  • send-message
  • send-message-all
  • update-task
recipient   email  optional  

Email ID of the customer associated with the job. Example: tom.jerry@tj.com

reviewers   string[]  optional  

List of reviewers of this task.

email   string  optional  

Must be a valid email address. Example: demarcus.crooks@example.org

group   string  optional  

Example: nihil

alt_text   string  optional  

Alternative text to describe the file or folder. Example: File from example customer.

label   string  optional  

Must not be greater than 64 characters. Example: ysbgdghvsmvwsbpx

name   string  optional  

The name of the file. If not provided then file name is extracted from name parameter of HTTP file upload. This is required when file URL is provided. Example: Test-File.pdf

parent   string  optional  

Parent folder GUID. If not provided then the file will retain previous parent folder. Example: 852215c9-2871-4a28-b9fc-b70b4c166e41

puid   string  optional  

Must not be greater than 80 characters. Example: iymzpwvrqw

file_url   string   

A public downloadable URL which can be used to download the file. Maximum length is 2000 characters. Must be present when filekey is absent. Example: https://www.bergnaum.org/dolores-voluptatum-aut-quod-neque-voluptas

filekey   file   

The attached document. The file key to be used in multipart form data shall be filekey. Example: /tmp/php4Fua0k

size   integer  optional  

The size of the file in bytes. This field is required and shall be valid size when file_url is provided. It is ignored in the case of direct file upload. Example: 789012

type   string  optional  

The file mime type. This field is required and shall be valid mime type when file_url is provided. It is ignored in the case of direct file upload. Example: application/pdf

Response

Response Fields

ac   object   

Hint about access control, if any, on this returned data.

c_email   string   

Customer email address.

guid   string   

required The unique GUID of the job.

parent_guid   string   

The GUID of the parent folder, if any.

Upload and create a file

requires authentication

Example request:
curl --request POST \
    "https://www.review.good2gosoftware.com/api/v1/upload" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: multipart/form-data" \
    --header "Accept: application/json" \
    --form "comments=Please
     review this file."\
    --form "default[comments]="\
    --form "default[task]="\
    --form "default[reviewers]="\
    --form "schedule=now"\
    --form "task[category]=review-task"\
    --form "task[due_at]=2024-05-21T15:26:01.000Z"\
    --form "task[req_confirm]=1"\
    --form "task[status]=paused"\
    --form "reason=update-task"\
    --form "recipient=tom.jerry@tj.com"\
    --form "reviewers[]=rerum"\
    --form "alt_text=File from example customer."\
    --form "label=iure"\
    --form "name=Test-File.pdf"\
    --form "parent=852215c9-2871-4a28-b9fc-b70b4c166e41"\
    --form "puid=syxoigeivq"\
    --form "file_url=http://hintz.com/placeat-voluptatem-itaque-distinctio-sint-et-aut"\
    --form "size=15"\
    --form "type=application/img"\
    --form "filekey=@/tmp/phpVhFSHw" 
const url = new URL(
    "https://www.review.good2gosoftware.com/api/v1/upload"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "multipart/form-data",
    "Accept": "application/json",
};

const body = new FormData();
body.append('comments', 'Please
     review this file.');
body.append('default[comments]', '');
body.append('default[task]', '');
body.append('default[reviewers]', '');
body.append('schedule', 'now');
body.append('task[category]', 'review-task');
body.append('task[due_at]', '2024-05-21T15:26:01.000Z');
body.append('task[req_confirm]', '1');
body.append('task[status]', 'paused');
body.append('reason', 'update-task');
body.append('recipient', 'tom.jerry@tj.com');
body.append('reviewers[]', 'rerum');
body.append('alt_text', 'File from example customer.');
body.append('label', 'iure');
body.append('name', 'Test-File.pdf');
body.append('parent', '852215c9-2871-4a28-b9fc-b70b4c166e41');
body.append('puid', 'syxoigeivq');
body.append('file_url', 'http://hintz.com/placeat-voluptatem-itaque-distinctio-sint-et-aut');
body.append('size', '15');
body.append('type', 'application/img');
body.append('filekey', document.querySelector('input[name="filekey"]').files[0]);

fetch(url, {
    method: "POST",
    headers,
    body,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://www.review.good2gosoftware.com/api/v1/upload';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'multipart/form-data',
            'Accept' => 'application/json',
        ],
        'multipart' => [
            [
                'name' => 'comments',
                'contents' => 'Please
     review this file.'
            ],
            [
                'name' => 'default[comments]',
                'contents' => ''
            ],
            [
                'name' => 'default[task]',
                'contents' => ''
            ],
            [
                'name' => 'default[reviewers]',
                'contents' => ''
            ],
            [
                'name' => 'schedule',
                'contents' => 'now'
            ],
            [
                'name' => 'task[category]',
                'contents' => 'review-task'
            ],
            [
                'name' => 'task[due_at]',
                'contents' => '2024-05-21T15:26:01.000Z'
            ],
            [
                'name' => 'task[req_confirm]',
                'contents' => '1'
            ],
            [
                'name' => 'task[status]',
                'contents' => 'paused'
            ],
            [
                'name' => 'reason',
                'contents' => 'update-task'
            ],
            [
                'name' => 'recipient',
                'contents' => 'tom.jerry@tj.com'
            ],
            [
                'name' => 'reviewers[]',
                'contents' => 'rerum'
            ],
            [
                'name' => 'alt_text',
                'contents' => 'File from example customer.'
            ],
            [
                'name' => 'label',
                'contents' => 'iure'
            ],
            [
                'name' => 'name',
                'contents' => 'Test-File.pdf'
            ],
            [
                'name' => 'parent',
                'contents' => '852215c9-2871-4a28-b9fc-b70b4c166e41'
            ],
            [
                'name' => 'puid',
                'contents' => 'syxoigeivq'
            ],
            [
                'name' => 'file_url',
                'contents' => 'http://hintz.com/placeat-voluptatem-itaque-distinctio-sint-et-aut'
            ],
            [
                'name' => 'size',
                'contents' => '15'
            ],
            [
                'name' => 'type',
                'contents' => 'application/img'
            ],
            [
                'name' => 'filekey',
                'contents' => fopen('/tmp/phpVhFSHw', 'r')
            ],
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):


{
    "ac": {
        "can_assign": true,
        "can_delete": true,
        "can_download": false,
        "can_edit": true,
        "can_view": true,
        "control_job": true,
        "delete_options": {
            "action": "trash"
        }
    },
    "asg_email": "tom.jerry@tj.com",
    "asg_name": "Tom",
    "c_email": "my.customer@domain.com",
    "c_name": "My Customer",
    "created_at": "2021-02-06T10:21:06.000Z",
    "cus_download": true,
    "deleted_at": null,
    "due_at": null,
    "guid": "b7926eb4-6726-4917-abfd-e6eed3476e56",
    "has_comment": false,
    "is_folder": false,
    "is_own": true,
    "is_portal": false,
    "is_watching": false,
    "locked": false,
    "more_info": {
        "annotations": {
            "annot_cnt": 0,
            "annot_cnt_plus": false
        },
        "pageCount": 1,
        "pages": [
            {
                "bits": 0,
                "color": "UNKNOWN",
                "height": 922,
                "mime": "image/png",
                "width": 1616
            }
        ]
    },
    "name": "A Test File.png",
    "newly_assigned": false,
    "parent_guid": "f1096786-687e-4e40-87c7-bdb90ef631e7",
    "p_email": "forward.partner@domain.com",
    "path_url": "http://www.good2gosoftware.com/review/file/b7926eb4-6726-4917-abfd-e6eed3476e56/document/A%20Test%20File.png?version=1",
    "p_name": "DEF Printer",
    "size": 582817,
    "source": "in-app",
    "status": "new",
    "type": "image/png",
    "updated_at": "2021-02-06T10:21:06.000Z",
    "version": 1
}
 

Request   

POST api/v1/upload

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: multipart/form-data

Accept      

Example: application/json

Body Parameters

comments   string  optional  

Comment, if any, associated sending notification. This field is relevant when upload is associated with a task. Example: Please review this file.

default   object  optional  

The default value to be used for task related fields. If defined, it auto fill those properties.

comments   boolean  optional  

Whether to use default comments, if comments field is not defined. Example: false

task   boolean  optional  

Whether to use default value for task sub-properties, if they are not defined. Example: false

reviewers   boolean  optional  

Whether to use existing reviewer, if reviewers field is not defined. Example: false

schedule   string  optional  

When to schedule the task. The valid values are [now, later]. Example: now

task   object  optional  

The task associated with this job. (Click to see more options.)

category   string  optional  

The task category. The supported values are [assign-task, forward-task, review-task, revision-task, and upload-task]. Example: review-task

due_at   string  optional  

Due date of the task to complete. Default value is 'null'. Example: 2024-05-21T15:26:01.000Z

req_confirm   boolean  optional  

Whether required confirmation is enabled or not. Example: true

status   string  optional  

The status of the job. Valid values are [new, paused, processing, and done]. Example: paused

reason   string   

Example: update-task

Must be one of:
  • notify-task
  • reset-task
  • send-message
  • send-message-all
  • update-task
recipient   email  optional  

Email ID of the customer associated with the job. Example: tom.jerry@tj.com

reviewers   string[]  optional  

List of reviewers of this task.

email   string  optional  

Must be a valid email address. Example: brielle70@example.org

group   string  optional  

Example: eum

alt_text   string  optional  

Alternative text to describe the file or folder. Example: File from example customer.

label   string  optional  

Assign one of the user defined label. Example: iure

name   string  optional  

The name of the file. If not provided then file name is extracted from name parameter of HTTP file upload. This is required when file URL is provided. Example: Test-File.pdf

parent   string  optional  

Parent folder GUID. If not provided then the file is added to the root folder. Example: 852215c9-2871-4a28-b9fc-b70b4c166e41

puid   string  optional  

Must not be greater than 80 characters. Example: syxoigeivq

file_url   string   

A public downloadable URL which can be used to download the file. Maximum length is 2000 characters. Must be present when filekey is absent. Example: http://hintz.com/placeat-voluptatem-itaque-distinctio-sint-et-aut

filekey   file   

The attached document. The file key to be used in multipart form data shall be filekey. Example: /tmp/phpVhFSHw

size   integer  optional  

The size of the file in bytes. This field is required and shall be valid size when file_url is provided. It is ignored in the case of direct file upload. Example 345678 Example: 15

type   string  optional  

The file mime type. This field is required and shall be valid mime type when file_url is provided. It is ignored in the case of direct file upload. Example: application/img

Response

Response Fields

ac   object   

Hint about access control, if any, on this returned data.

c_email   string   

Customer email address.

guid   string   

required The unique GUID of the job.

parent_guid   string   

The GUID of the parent folder, if any.

File download

Download document

This method does not need authentication. If you have the job GUID and name, then file can be downloaded.

Example request:
curl --request GET \
    --get "https://www.review.good2gosoftware.com/review/download/minima/document/accusamus" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://www.review.good2gosoftware.com/review/download/minima/document/accusamus"
);

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://www.review.good2gosoftware.com/review/download/minima/document/accusamus';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (503):

Show headers
cache-control: no-cache, private
content-type: application/json
 

{
    "message": "Service Unavailable"
}
 

Request   

GET review/download/{job_guid}/document/{name}

Headers

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

job_guid   string   

The guid of the job. This can be derived from the list of jobs returned from api api/v1/jobs. Example: minima

name   string   

The name of the job. This can be derived from the list of jobs returned from api api/v1/jobs. Example: accusamus

Job tasks

APIs to send, view, update or delete job related tasks and reminders.

There are several different kind of tasks:

Get default task

requires authentication

Return a sample default task of given kind. This can be used to construct a task. If given task kind already exist for the job then existing task is returned.

Example request:
curl --request GET \
    --get "https://www.review.good2gosoftware.com/api/v1/jobs/tasks/default?job_category=order&kind=review-task" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://www.review.good2gosoftware.com/api/v1/jobs/tasks/default"
);

const params = {
    "job_category": "order",
    "kind": "review-task",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://www.review.good2gosoftware.com/api/v1/jobs/tasks/default';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'query' => [
            'job_category' => 'order',
            'kind' => 'review-task',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):


{
    "assigned_to": "tom.jerry@abc.com",
    "category": "review-reminders",
    "created_at": "2021-01-21T06:21:19.000Z",
    "due_at": "2021-01-28T15:42:36.000Z",
    "executed_at": "2021-01-24T06:37:06.000Z",
    "id": 10,
    "job_status": "approved",
    "req_confirm": true,
    "status": "done",
    "updated_at": "2021-01-25T09:45:10.000Z"
}
 

Request   

GET api/v1/jobs/tasks/default

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

Query Parameters

job_category   string  optional  

The job category. The supported values are [file, folder, and order]. Default value is file. Example: order

kind   string   

The task category. The supported values are [assign-task, forward-task, quote-review-task, review-task, revision-task and upload-task]. Example: review-task

Response

Response Fields

assigned_to   string   

The assignee of the task.

category   string   

The task category. The expected values are [assign-task, forward-task, quote-review-task, review-task, revision-task and upload-task].

created_at   string   

Task creation date.

due_at   string   

Due date of the task to complete. Default value is 'null'.

executed_at   string   

Last task execution date. Default value is 'null'.

id   string   

The id of this task. Id is especially useful for updating a given task.

job_status   string   

The job status selected by the assignee.

req_confirm   boolean   

Whether required confirmation is enabled or not.

status   string   

The status of the job. Valid values are [new, paused, processing, and done]. Default value is 'new'.

updated_at   string   

Task update date.

Get task list

requires authentication

Return all tasks associated with the given job.

Example request:
curl --request GET \
    --get "https://www.review.good2gosoftware.com/api/v1/jobs/2dd7f609-d85c-4409-8c12-9fbb494bf549./tasks?kind=review-task&default=" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://www.review.good2gosoftware.com/api/v1/jobs/2dd7f609-d85c-4409-8c12-9fbb494bf549./tasks"
);

const params = {
    "kind": "review-task",
    "default": "0",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://www.review.good2gosoftware.com/api/v1/jobs/2dd7f609-d85c-4409-8c12-9fbb494bf549./tasks';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'query' => [
            'kind' => 'review-task',
            'default' => '0',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):


[
    {
        "assigned_to": "tom.jerry@abc.com",
        "category": "review-reminders",
        "created_at": "2021-01-21T06:21:19.000Z",
        "due_at": "2021-01-28T15:42:36.000Z",
        "executed_at": "2021-01-24T06:37:06.000Z",
        "id": 10,
        "job_status": "pending",
        "req_confirm": false,
        "status": "paused",
        "updated_at": "2021-01-25T09:45:10.000Z"
    }
]
 

Request   

GET api/v1/jobs/{job_guid}/tasks

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

job_guid   string   

The GUID of the job. This can be derived from the list of jobs returned from api api/v1/jobs (Get job information). Example: 2dd7f609-d85c-4409-8c12-9fbb494bf549.

Query Parameters

kind   string  optional  

The task category. The supported values are [review-task, upload-task, revision-task, and assign-task]. May have multiple entries. Example: review-task

default   boolean  optional  

Get default for task category, if not found. Example: false

Response

Response Fields

assigned_to   string   

The assignee of the task.

category   string   

The task category. The expected values are [assign-task, forward-task, quote-review-task, review-task, revision-task and upload-task].

created_at   string   

Task creation date.

due_at   string   

Due date of the task to complete. Default value is 'null'.

executed_at   string   

Last task execution date. Default value is 'null'.

id   string   

The id of this task. Id is especially useful for updating a given task.

job_status   string   

The job status selected by the assignee.

req_confirm   boolean   

Whether required confirmation is enabled or not.

status   string   

The status of the job. Valid values are [new, paused, processing, and done]. Default value is 'new'.

updated_at   string   

Task last update date.

Get task information

requires authentication

Return the information associated with given task of a job.

Example request:
curl --request GET \
    --get "https://www.review.good2gosoftware.com/api/v1/jobs/2dd7f609-d85c-4409-8c12-9fbb494bf549./tasks/290" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://www.review.good2gosoftware.com/api/v1/jobs/2dd7f609-d85c-4409-8c12-9fbb494bf549./tasks/290"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://www.review.good2gosoftware.com/api/v1/jobs/2dd7f609-d85c-4409-8c12-9fbb494bf549./tasks/290';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):


{
    "assigned_to": "tom.jerry@abc.com",
    "category": "review-reminders",
    "created_at": "2021-01-21T06:21:19.000Z",
    "due_at": "2021-01-28T15:42:36.000Z",
    "executed_at": "2021-01-24T06:37:06.000Z",
    "id": 10,
    "job_status": "approved",
    "req_confirm": true,
    "status": "done",
    "updated_at": "2021-01-25T09:45:10.000Z"
}
 

Request   

GET api/v1/jobs/{job_guid}/tasks/{id}

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

job_guid   string   

The GUID of the job. This can be derived from the list of jobs returned from api api/v1/jobs (Get job information). Example: 2dd7f609-d85c-4409-8c12-9fbb494bf549.

id   integer   

The ID of the task. Example: 290

Response

Response Fields

assigned_to   string   

The assignee of the task.

category   string   

The task category. The expected values are [assign-task, forward-task, quote-review-task, review-task, revision-task and upload-task].

created_at   string   

Task creation date.

due_at   string   

Due date of the task to complete. Default value is 'null'.

executed_at   string   

Last task execution date. Default value is 'null'.

id   string   

The id of this task. Id is especially useful for updating a given task.

job_status   string   

The job status selected by the assignee.

req_confirm   boolean   

Whether required confirmation is enabled or not.

status   string   

The status of the job. Valid values are [new, paused, processing, and done]. Default value is 'new'.

updated_at   string   

Task last update date.

Create a new task

requires authentication

Create a new task and also newly created task is executed immediately.

Example request:
curl --request POST \
    "https://www.review.good2gosoftware.com/api/v1/jobs/2dd7f609-d85c-4409-8c12-9fbb494bf549./tasks" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"assigned_to\": \"abc@xyz.com.\",
    \"category\": \"review-task.\",
    \"due_at\": \"2024-01-24T06:37:06.000Z.\",
    \"job_status\": \"Pending.\",
    \"req_confirm\": true,
    \"status\": \"new.\"
}"
const url = new URL(
    "https://www.review.good2gosoftware.com/api/v1/jobs/2dd7f609-d85c-4409-8c12-9fbb494bf549./tasks"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "assigned_to": "abc@xyz.com.",
    "category": "review-task.",
    "due_at": "2024-01-24T06:37:06.000Z.",
    "job_status": "Pending.",
    "req_confirm": true,
    "status": "new."
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://www.review.good2gosoftware.com/api/v1/jobs/2dd7f609-d85c-4409-8c12-9fbb494bf549./tasks';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'assigned_to' => 'abc@xyz.com.',
            'category' => 'review-task.',
            'due_at' => '2024-01-24T06:37:06.000Z.',
            'job_status' => 'Pending.',
            'req_confirm' => true,
            'status' => 'new.',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):


{
    "assigned_to": "tom.jerry@abc.com",
    "category": "review-reminders",
    "created_at": "2021-01-21T06:21:19.000Z",
    "due_at": "2021-01-28T15:42:36.000Z",
    "executed_at": "2021-01-24T06:37:06.000Z",
    "id": 10,
    "job_status": "approved",
    "req_confirm": true,
    "status": "done",
    "updated_at": "2021-01-25T09:45:10.000Z"
}
 

Request   

POST api/v1/jobs/{job_guid}/tasks

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

job_guid   string   

The GUID of the job. This can be derived from the list of jobs returned from api api/v1/jobs (Get job information). Example: 2dd7f609-d85c-4409-8c12-9fbb494bf549.

Body Parameters

assigned_to   string   

The assignee of the task. Example: abc@xyz.com.

category   string   

The task category. The supported values are [assign-task, forward-task, quote-review-task, review-task, revision-task and upload-task]. Example: review-task.

due_at   string  optional  

Deadline of the task to complete. It can be 'null'. Example: 2024-01-24T06:37:06.000Z.

job_status   string  optional  

The associated job status, if any. Refer to job related APIs for more information. Example: Pending.

req_confirm   boolean  optional  

Whether to enable confirmation checkbox for approval. Example: true

status   string  optional  

The status of the job. If provided, the value shall be new. Example: new.

Response

Response Fields

assigned_to   string   

The assignee of the task.

category   string   

The task category. The expected values are [assign-task, forward-task, quote-review-task, review-task, revision-task and upload-task].

created_at   string   

Task creation date.

due_at   string   

Due date of the task to complete. Default value is 'null'.

executed_at   string   

Last task execution date. Default value is 'null'.

id   string   

The id of this task. Id is especially useful for updating a given task.

job_status   string   

The job status selected by the assignee.

req_confirm   boolean   

Whether required confirmation is enabled or not.

status   string   

The status of the job. Valid values are [new, paused, processing, and done]. Default value is 'new'.

updated_at   string   

Task last update date.

Update existing task

requires authentication

Update an existing task with new information.

Example request:
curl --request PUT \
    "https://www.review.good2gosoftware.com/api/v1/jobs/2dd7f609-d85c-4409-8c12-9fbb494bf549./tasks/290" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"category\": \"review-task\",
    \"due_at\": \"2024-11-30T08:37:46.000Z\",
    \"job_status\": \"expired\",
    \"req_confirm\": false,
    \"status\": \"closed\"
}"
const url = new URL(
    "https://www.review.good2gosoftware.com/api/v1/jobs/2dd7f609-d85c-4409-8c12-9fbb494bf549./tasks/290"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "category": "review-task",
    "due_at": "2024-11-30T08:37:46.000Z",
    "job_status": "expired",
    "req_confirm": false,
    "status": "closed"
};

fetch(url, {
    method: "PUT",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://www.review.good2gosoftware.com/api/v1/jobs/2dd7f609-d85c-4409-8c12-9fbb494bf549./tasks/290';
$response = $client->put(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'category' => 'review-task',
            'due_at' => '2024-11-30T08:37:46.000Z',
            'job_status' => 'expired',
            'req_confirm' => false,
            'status' => 'closed',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):


{
    "assigned_to": "tom.jerry@abc.com",
    "category": "review-reminders",
    "created_at": "2021-01-21T06:21:19.000Z",
    "due_at": "2021-01-28T15:42:36.000Z",
    "executed_at": "2021-01-24T06:37:06.000Z",
    "id": 10,
    "job_status": "approved",
    "req_confirm": true,
    "status": "done",
    "updated_at": "2021-01-25T09:45:10.000Z"
}
 

Request   

PUT api/v1/jobs/{job_guid}/tasks/{id}

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

job_guid   string   

The GUID of the job. This can be derived from the list of jobs returned from api api/v1/jobs (Get job information). Example: 2dd7f609-d85c-4409-8c12-9fbb494bf549.

id   integer   

The ID of the task. Example: 290

Body Parameters

category   string  optional  

The task category. Read the job task documentation for more information. The value and category must match. Example: review-task

due_at   string  optional  

For auto reminder set the deadline. Must be a valid date in the format Y-m-d\TH:i:s.v\Z. Example: 2024-11-30T08:37:46.000Z

job_status   string  optional  

The associated job status selected by assignee. Must not be one of pending or processing. Example: expired

Must be one of:
  • approved
  • change-requested
  • done
  • expired
  • new
  • pending
  • processing
  • rejected
req_confirm   boolean  optional  

Whether confirmation is required during approval. Example: false

status   string  optional  

The status of the task, if any. Example: closed

Must be one of:
  • closed
  • done
  • paused
  • processing

Response

Response Fields

assigned_to   string   

The assignee of the task. Example: abc@xyz.com.

category   string   

The task category. The expected values are [assign-task, forward-task, quote-review-task, review-task, revision-task and upload-task]. Example: review-task.

created_at   string   

Task creation date.

due_at   string   

Due date of the task to complete. Default value is 'null'.

executed_at   string   

Last task execution date. Default value is 'null'.

id   string   

The id of this task. Id is especially useful for updating a given task.

job_status   string   

The job status selected by the assignee.

req_confirm   boolean   

Whether required confirmation is enabled or not. Example: false.

status   string   

The status of the job. Valid values are [new, paused, processing, and done]. Default value is 'new'.

updated_at   string   

Task last update date.

Send notification email

requires authentication

Send an email to assignee of task.

Example request:
curl --request PUT \
    "https://www.review.good2gosoftware.com/api/v1/jobs/2dd7f609-d85c-4409-8c12-9fbb494bf549./tasks/290/notify" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"comments\": \"eaque\",
    \"default\": {
        \"comments\": false,
        \"task\": false
    },
    \"schedule\": \"totam\",
    \"task\": {
        \"category\": \"review-task\",
        \"due_at\": \"2024-05-21T15:26:01.000Z\",
        \"req_confirm\": false,
        \"status\": \"paused\"
    },
    \"reason\": \"est\"
}"
const url = new URL(
    "https://www.review.good2gosoftware.com/api/v1/jobs/2dd7f609-d85c-4409-8c12-9fbb494bf549./tasks/290/notify"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "comments": "eaque",
    "default": {
        "comments": false,
        "task": false
    },
    "schedule": "totam",
    "task": {
        "category": "review-task",
        "due_at": "2024-05-21T15:26:01.000Z",
        "req_confirm": false,
        "status": "paused"
    },
    "reason": "est"
};

fetch(url, {
    method: "PUT",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://www.review.good2gosoftware.com/api/v1/jobs/2dd7f609-d85c-4409-8c12-9fbb494bf549./tasks/290/notify';
$response = $client->put(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'comments' => 'eaque',
            'default' => [
                'comments' => false,
                'task' => false,
            ],
            'schedule' => 'totam',
            'task' => [
                'category' => 'review-task',
                'due_at' => '2024-05-21T15:26:01.000Z',
                'req_confirm' => false,
                'status' => 'paused',
            ],
            'reason' => 'est',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):


{
    "assigned_to": "tom.jerry@abc.com",
    "category": "review-reminders",
    "created_at": "2021-01-21T06:21:19.000Z",
    "due_at": "2021-01-28T15:42:36.000Z",
    "executed_at": "2021-01-24T06:37:06.000Z",
    "id": 10,
    "job_status": "approved",
    "req_confirm": true,
    "status": "done",
    "updated_at": "2021-01-25T09:45:10.000Z"
}
 

Request   

PUT api/v1/jobs/{job_guid}/tasks/{task_id}/notify

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

job_guid   string   

The GUID of the job. This can be derived from the list of jobs returned from api api/v1/jobs (Get job information). Example: 2dd7f609-d85c-4409-8c12-9fbb494bf549.

task_id   integer   

The ID of the task. Example: 290

Body Parameters

comments   string  optional  

Comment, if any, associated with this notification. If not provided, then last comment is used for notification. Example: eaque

default   object  optional  

The default value to be used for task related fields. If defined, it auto fill those properties.

comments   boolean  optional  

Whether to use default comments, if comments field is not defined. Example: false

task   boolean  optional  

Whether to use default value for task sub-properties, if they are not defined. Example: false

schedule   string   

When to schedule this reminder. The valid values are [now, later]. Example: totam

task   object  optional  

The task associated with this notification.

category   string  optional  

The task category. Read the job task documentation for more information. This field is required when task is present. Example: review-task

Must be one of:
  • assign-task
  • forward-task
  • review-task
  • revision-task
due_at   string  optional  

For auto reminder set the due date. Must be a valid date in the format Y-m-d\TH:i:s.v\Z. Example: 2024-05-21T15:26:01.000Z

req_confirm   boolean  optional  

Whether confirmation is required during approval. Example: false

status   string  optional  

The status of the task, if any. Example: paused

Must be one of:
  • new
  • paused
  • processing
reason   string  optional  

The notification reason. It shall have one of the following values:

  • notify-task: Send notification for given task (default)
  • reset-task: Reset given task and status, and bring to the initial state
  • send-message: Send a simple message for given task
  • update-task: Simply update the task without sending notification Example: est

Response

Response Fields

assigned_to   string   

The assignee of the task.

category   string   

The task category. The expected values are [assign-task, forward-task, quote-review-task, review-task, revision-task and upload-task].

created_at   string   

Task creation date.

due_at   string   

Due date of the task to complete. Default value is 'null'.

executed_at   string   

Last task execution date. Default value is 'null'.

id   string   

The id of this task. Id is especially useful for updating a given task.

job_status   string   

The job status selected by the assignee.

req_confirm   boolean   

Whether required confirmation is enabled or not.

status   string   

The status of the job. Valid values are [new, paused, processing, and done]. Default value is 'new'.

updated_at   string   

Task last update date.

Delete a job task

requires authentication

Delete given task related to a job.

Example request:
curl --request DELETE \
    "https://www.review.good2gosoftware.com/api/v1/jobs/2dd7f609-d85c-4409-8c12-9fbb494bf549./tasks/290" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://www.review.good2gosoftware.com/api/v1/jobs/2dd7f609-d85c-4409-8c12-9fbb494bf549./tasks/290"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://www.review.good2gosoftware.com/api/v1/jobs/2dd7f609-d85c-4409-8c12-9fbb494bf549./tasks/290';
$response = $client->delete(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):


{}
 

Request   

DELETE api/v1/jobs/{job_guid}/tasks/{task_id}

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

job_guid   string   

The GUID of the job. This can be derived from the list of jobs returned from api api/v1/jobs (Get job information). Example: 2dd7f609-d85c-4409-8c12-9fbb494bf549.

task_id   integer   

The ID of the task. Example: 290

Job reminders

APIs to list, view, update or delete job specific reminder set. This set will be used by various tasks to send auto reminders based upon task due date.

Get list of reminders

requires authentication

This method list down reminders specifically assigned to given job.

Example request:
curl --request GET \
    --get "https://www.review.good2gosoftware.com/api/v1/jobs/03a71fd0-cc06-4432-bfef-44baa7a1d7c6./reminders" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://www.review.good2gosoftware.com/api/v1/jobs/03a71fd0-cc06-4432-bfef-44baa7a1d7c6./reminders"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://www.review.good2gosoftware.com/api/v1/jobs/03a71fd0-cc06-4432-bfef-44baa7a1d7c6./reminders';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):


[
    {
        "cancelled": true,
        "comparator": "before",
        "created_at": "2021-02-06T17:37:17.000Z",
        "date": "2021-12-01T14:54:22.000Z",
        "id": 1,
        "is_auto": true,
        "job_guid": "1ff38f4e-9c0d-4b1b-a665-3ef5aff896fb",
        "quantity": 2,
        "schedule": "later",
        "unit": "days",
        "updated_at": "2021-02-06T17:37:17.000Z"
    },
    {
        "cancelled": false,
        "comparator": "before",
        "created_at": "2020-08-19T17:11:11.000Z",
        "date": "2021-12-02T14:54:22.000Z",
        "id": 1,
        "is_auto": true,
        "job_guid": "1ff38f4e-9c0d-4b1b-a665-3ef5aff896fb",
        "quantity": 1,
        "schedule": "later",
        "unit": "days",
        "updated_at": "2021-01-07T10:17:33.000Z"
    },
    {
        "cancelled": false,
        "comparator": "none",
        "date": "2020-11-15T14:48:07.000Z",
        "id": -1,
        "is_auto": false,
        "job_guid": "1ff38f4e-9c0d-4b1b-a665-3ef5aff896fb",
        "quantity": 0,
        "schedule": "later",
        "unit": "none"
    },
    {
        "cancelled": false,
        "comparator": "none",
        "date": "2020-11-13T02:43:28.000Z",
        "id": -1,
        "is_auto": false,
        "job_guid": "1ff38f4e-9c0d-4b1b-a665-3ef5aff896fb",
        "quantity": 0,
        "schedule": "later",
        "unit": "none"
    },
    {
        "cancelled": false,
        "comparator": "none",
        "date": "2020-10-17T05:12:30.000Z",
        "id": -1,
        "is_auto": false,
        "job_guid": "1ff38f4e-9c0d-4b1b-a665-3ef5aff896fb",
        "quantity": 0,
        "schedule": "later",
        "unit": "none"
    }
]
 

Request   

GET api/v1/jobs/{job_guid}/reminders

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

job_guid   string   

The GUID of the job. This can be derived from the list of jobs returned from api api/v1/jobs (Get job information). Example: 03a71fd0-cc06-4432-bfef-44baa7a1d7c6.

Response

Response Fields

cancelled   boolean   

[Optional] If the reminder was cancelled in past. It is only available for job associated reminders.

comparator   string   

The comparator with reference to due date and time. The valid value are [equal, before, after, now].

created_at   string   

Reminder creation date.

id   string   

The id of this reminder.

job_guid   string   

[Optional] The GUID of the job. It is only available for job associated reminders.

quantity   number   

The quantity part of auto reminder (see also unit)

unit   string   

The unit part of auto reminder. The supported values are [none, minutes, hours, days].

updated_at   string   

The last updated date and time.

Get job reminder information

requires authentication

Return the reminder associated with given job.

Example request:
curl --request GET \
    --get "https://www.review.good2gosoftware.com/api/v1/jobs/03a71fd0-cc06-4432-bfef-44baa7a1d7c6./reminders/5" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://www.review.good2gosoftware.com/api/v1/jobs/03a71fd0-cc06-4432-bfef-44baa7a1d7c6./reminders/5"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://www.review.good2gosoftware.com/api/v1/jobs/03a71fd0-cc06-4432-bfef-44baa7a1d7c6./reminders/5';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):


{
    "cancelled": true,
    "comparator": "before",
    "created_at": "2021-02-06T17:37:17.000Z",
    "id": 123,
    "job_guid": "1ff38f4e-9c0d-4b1b-a665-3ef5aff896fb",
    "quantity": 5,
    "unit": "hours",
    "updated_at": "2021-02-06T17:37:17.000Z"
}
 

Request   

GET api/v1/jobs/{job_guid}/reminders/{id}

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

job_guid   string   

The GUID of the job. This can be derived from the list of jobs returned from api api/v1/jobs (Get job information). Example: 03a71fd0-cc06-4432-bfef-44baa7a1d7c6.

id   integer   

The ID of the reminder. Example: 5

Create a new reminder

requires authentication

All the values are with reference to due date defined for the job. Let us say a reminder to be set 5 hours before due date then the parameters will be { 'quantity': 5, 'unit': 'hours', 'comparator': 'before' }

Example request:
curl --request POST \
    "https://www.review.good2gosoftware.com/api/v1/jobs/03a71fd0-cc06-4432-bfef-44baa7a1d7c6./reminders" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"quantity\": 82,
    \"unit\": \"none\",
    \"comparator\": \"now\",
    \"job_guid\": \"e3cac0b1-b092-3fe3-a6b8-09f390820c5d\",
    \"cancelled\": true
}"
const url = new URL(
    "https://www.review.good2gosoftware.com/api/v1/jobs/03a71fd0-cc06-4432-bfef-44baa7a1d7c6./reminders"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "quantity": 82,
    "unit": "none",
    "comparator": "now",
    "job_guid": "e3cac0b1-b092-3fe3-a6b8-09f390820c5d",
    "cancelled": true
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://www.review.good2gosoftware.com/api/v1/jobs/03a71fd0-cc06-4432-bfef-44baa7a1d7c6./reminders';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'quantity' => 82,
            'unit' => 'none',
            'comparator' => 'now',
            'job_guid' => 'e3cac0b1-b092-3fe3-a6b8-09f390820c5d',
            'cancelled' => true,
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):


{
    "cancelled": true,
    "comparator": "before",
    "created_at": "2021-02-06T17:37:17.000Z",
    "id": 123,
    "job_guid": "1ff38f4e-9c0d-4b1b-a665-3ef5aff896fb",
    "quantity": 5,
    "unit": "hours",
    "updated_at": "2021-02-06T17:37:17.000Z"
}
 

Request   

POST api/v1/jobs/{job_guid}/reminders

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

job_guid   string   

The GUID of the job. This can be derived from the list of jobs returned from api api/v1/jobs (Get job information). Example: 03a71fd0-cc06-4432-bfef-44baa7a1d7c6.

Body Parameters

quantity   integer   

The quantity part of auto reminder. Must not be greater than 3600. Must be at least 0. Example: 82

unit   string   

The unit part of auto reminder. Example: none

Must be one of:
  • none
  • minutes
  • hours
  • days
comparator   string   

The comparator with reference to due date and time. Example: now

Must be one of:
  • none
  • equal
  • before
  • after
  • now
job_guid   string   

Must be a valid UUID. Example: e3cac0b1-b092-3fe3-a6b8-09f390820c5d

cancelled   boolean   

Whether this reminder was cancelled. Example: true

Update existing job reminder

requires authentication

Example request:
curl --request PUT \
    "https://www.review.good2gosoftware.com/api/v1/jobs/03a71fd0-cc06-4432-bfef-44baa7a1d7c6./reminders/17" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"quantity\": 59,
    \"unit\": \"hours\",
    \"comparator\": \"after\",
    \"job_guid\": \"63400704-1f51-395a-b79d-343fe267d4d2\",
    \"cancelled\": true
}"
const url = new URL(
    "https://www.review.good2gosoftware.com/api/v1/jobs/03a71fd0-cc06-4432-bfef-44baa7a1d7c6./reminders/17"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "quantity": 59,
    "unit": "hours",
    "comparator": "after",
    "job_guid": "63400704-1f51-395a-b79d-343fe267d4d2",
    "cancelled": true
};

fetch(url, {
    method: "PUT",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://www.review.good2gosoftware.com/api/v1/jobs/03a71fd0-cc06-4432-bfef-44baa7a1d7c6./reminders/17';
$response = $client->put(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'quantity' => 59,
            'unit' => 'hours',
            'comparator' => 'after',
            'job_guid' => '63400704-1f51-395a-b79d-343fe267d4d2',
            'cancelled' => true,
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):


{
    "cancelled": true,
    "comparator": "before",
    "created_at": "2021-02-06T17:37:17.000Z",
    "id": 123,
    "job_guid": "1ff38f4e-9c0d-4b1b-a665-3ef5aff896fb",
    "quantity": 5,
    "unit": "hours",
    "updated_at": "2021-02-06T17:37:17.000Z"
}
 

Request   

PUT api/v1/jobs/{job_guid}/reminders/{id}

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

job_guid   string   

The GUID of the job. This can be derived from the list of jobs returned from api api/v1/jobs (Get job information). Example: 03a71fd0-cc06-4432-bfef-44baa7a1d7c6.

id   integer   

The ID of the reminder. Example: 17

Body Parameters

quantity   integer   

The quantity part of auto reminder. Must not be greater than 3600. Must be at least 0. Example: 59

unit   string   

The unit part of auto reminder. Example: hours

Must be one of:
  • none
  • minutes
  • hours
  • days
comparator   string   

The comparator with reference to due date and time. Example: after

Must be one of:
  • none
  • equal
  • before
  • after
  • now
job_guid   string   

Must be a valid UUID. Example: 63400704-1f51-395a-b79d-343fe267d4d2

cancelled   boolean  optional  

Whether this reminder was cancelled. Example: true

Delete a job reminder

requires authentication

Delete a reminder related to a job.

Example request:
curl --request DELETE \
    "https://www.review.good2gosoftware.com/api/v1/jobs/03a71fd0-cc06-4432-bfef-44baa7a1d7c6./reminders/6" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://www.review.good2gosoftware.com/api/v1/jobs/03a71fd0-cc06-4432-bfef-44baa7a1d7c6./reminders/6"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://www.review.good2gosoftware.com/api/v1/jobs/03a71fd0-cc06-4432-bfef-44baa7a1d7c6./reminders/6';
$response = $client->delete(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):


{}
 

Request   

DELETE api/v1/jobs/{job_guid}/reminders/{reminder_id}

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

job_guid   string   

The GUID of the job. This can be derived from the list of jobs returned from api api/v1/jobs (Get job information). Example: 03a71fd0-cc06-4432-bfef-44baa7a1d7c6.

reminder_id   integer   

The ID of the reminder. Example: 6

Job notifications

APIs to send job notifications for review and approve document, to upload a new document or to update a file revision or job assignment. There are six different kinds of task:

Get notifications history log

requires authentication

Get list of all notification associated with the given job. This includes both manual notification sent in past, auto reminders associated with the job and cancelled reminders, etc.

Example request:
curl --request GET \
    --get "https://www.review.good2gosoftware.com/api/v1/jobs/et/notifications/history?kind=optio" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://www.review.good2gosoftware.com/api/v1/jobs/et/notifications/history"
);

const params = {
    "kind": "optio",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://www.review.good2gosoftware.com/api/v1/jobs/et/notifications/history';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'query' => [
            'kind' => 'optio',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):


[
    {
        "cancelled": true,
        "comparator": "before",
        "created_at": "2021-02-06T17:37:17.000Z",
        "date": "2021-12-01T14:54:22.000Z",
        "id": 1,
        "is_auto": true,
        "job_guid": "1ff38f4e-9c0d-4b1b-a665-3ef5aff896fb",
        "quantity": 2,
        "schedule": "later",
        "unit": "days",
        "updated_at": "2021-02-06T17:37:17.000Z"
    },
    {
        "cancelled": false,
        "comparator": "before",
        "created_at": "2020-08-19T17:11:11.000Z",
        "date": "2021-12-02T14:54:22.000Z",
        "id": 1,
        "is_auto": true,
        "job_guid": "1ff38f4e-9c0d-4b1b-a665-3ef5aff896fb",
        "quantity": 1,
        "schedule": "later",
        "unit": "days",
        "updated_at": "2021-01-07T10:17:33.000Z"
    },
    {
        "cancelled": false,
        "comparator": "none",
        "date": "2020-11-15T14:48:07.000Z",
        "id": -1,
        "is_auto": false,
        "job_guid": "1ff38f4e-9c0d-4b1b-a665-3ef5aff896fb",
        "quantity": 0,
        "schedule": "later",
        "unit": "none"
    },
    {
        "cancelled": false,
        "comparator": "none",
        "date": "2020-11-13T02:43:28.000Z",
        "id": -1,
        "is_auto": false,
        "job_guid": "1ff38f4e-9c0d-4b1b-a665-3ef5aff896fb",
        "quantity": 0,
        "schedule": "later",
        "unit": "none"
    },
    {
        "cancelled": false,
        "comparator": "none",
        "date": "2020-10-17T05:12:30.000Z",
        "id": -1,
        "is_auto": false,
        "job_guid": "1ff38f4e-9c0d-4b1b-a665-3ef5aff896fb",
        "quantity": 0,
        "schedule": "later",
        "unit": "none"
    }
]
 

Request   

GET api/v1/jobs/{job_guid}/notifications/history

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

job_guid   string   

The GUID of the job. This can be derived from the list of jobs returned from api 'api/v1/jobs'. Example: et

Query Parameters

kind   string  optional  

The task category. The supported values are [assign-task, forward-task, quote-review-task, review-task, revision-task and upload-task]. Example: optio

Response

Response Fields

cancelled   boolean   

If the reminder was cancelled in past.

comparator   string   

The comparator with reference to due date and time. The valid value are [equal, before, after, now].

created_at   string   

Reminder creation date.

date   string   

The date and time of last reminder was sent or will be send in future.

id   string   

The id of this reminder. Its value is undefined for manual reminder.

is_auto   boolean   

If the reminder is part of auto reminder or manual reminder.

job_guid   string   

The GUID of the job.

quantity   number   

The quantity part of auto reminder (see also unit)

schedule   string   

Whether to schedule the reminder now or later. Default value is now.

unit   string   

The unit part of auto reminder. The supported values are [none, minutes, hours, days].

updated_at   string   

The last updated date and time.

Get notification

requires authentication

Get notification associated with the given task for a job.

Example request:
curl --request GET \
    --get "https://www.review.good2gosoftware.com/api/v1/jobs/ex/notifications/consequuntur" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://www.review.good2gosoftware.com/api/v1/jobs/ex/notifications/consequuntur"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://www.review.good2gosoftware.com/api/v1/jobs/ex/notifications/consequuntur';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):


{
    "comments": "Review instructions",
    "recipient": "tom.jerry@xyz,com",
    "reviewer": [
        {
            "email": "reviewer1@design.com"
        },
        {
            "email": "reviewer2@design.com"
        },
        {
            "group": "External Review Group"
        }
    ],
    "task": {
        "category": "review-task",
        "due_at": "2021-01-28T15:42:36.000Z",
        "req_confirm": true,
        "status": "processing"
    }
}
 

Request   

GET api/v1/jobs/{job_guid}/notifications/{kind}

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

job_guid   string   

The GUID of the job. This can be derived from the list of jobs returned from api 'api/v1/jobs'. Example: ex

kind   string   

The task category. The supported values are [assign-task, forward-task, quote-review-task, review-task, revision-task, and upload-task]. Example: consequuntur

Response

Response Fields

comments   string   

Past comment, if any, associated with this notification.

recipient   string   

This represent responsible customer or partner assigned to the job. Customer are associated with job review and partner are associated with job forward.

task   object   

The task object associated with given task kind requested in query parameter.

category   string   

The task category. The supported values are [assign-task, forward-task, quote-review-task, review-task, revision-task, and upload-task]. This is same as query parameters passed to call this API.

due_at   string   

Due date of the task to complete. Default value is 'null'.

req_confirm   boolean   

Whether required confirmation is enabled or not.

status   string   

The status of the task. Valid values are [new, paused, processing, and done]. Default value is 'new'.

Create a new manual notification

requires authentication

This method can be used to create task and send manual notification for a given task of the job. If the given task already exists then it updates the existing task with new information. Each reviewer has one to one map with task that is created in the background. A task is created or updated for each reviewers based upon reason value.

Example request:
curl --request POST \
    "https://www.review.good2gosoftware.com/api/v1/jobs/culpa/notifications" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"comments\": \"exercitationem\",
    \"default\": {
        \"comments\": true,
        \"task\": false,
        \"reviewers\": true
    },
    \"schedule\": \"vero\",
    \"task\": {
        \"category\": \"dolor\",
        \"due_at\": \"accusantium\",
        \"req_confirm\": false,
        \"status\": \"quae\"
    },
    \"reason\": \"nihil\",
    \"recipient\": \"ab\",
    \"reviewers\": [
        \"ducimus\"
    ]
}"
const url = new URL(
    "https://www.review.good2gosoftware.com/api/v1/jobs/culpa/notifications"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "comments": "exercitationem",
    "default": {
        "comments": true,
        "task": false,
        "reviewers": true
    },
    "schedule": "vero",
    "task": {
        "category": "dolor",
        "due_at": "accusantium",
        "req_confirm": false,
        "status": "quae"
    },
    "reason": "nihil",
    "recipient": "ab",
    "reviewers": [
        "ducimus"
    ]
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://www.review.good2gosoftware.com/api/v1/jobs/culpa/notifications';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'comments' => 'exercitationem',
            'default' => [
                'comments' => true,
                'task' => false,
                'reviewers' => true,
            ],
            'schedule' => 'vero',
            'task' => [
                'category' => 'dolor',
                'due_at' => 'accusantium',
                'req_confirm' => false,
                'status' => 'quae',
            ],
            'reason' => 'nihil',
            'recipient' => 'ab',
            'reviewers' => [
                'ducimus',
            ],
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):


{
    "comments": "Review instructions",
    "reason": "notify-task",
    "recipient": "tom.jerry@xyz,com",
    "reviewer": [
        {
            "email": "reviewer1@design.com"
        },
        {
            "email": "reviewer2@design.com"
        },
        {
            "group": "External Review Group"
        }
    ],
    "schedule": "now",
    "task": {
        "category": "review-task",
        "due_at": "2021-01-28T15:42:36.000Z",
        "req_confirm": true,
        "status": "paused"
    }
}
 

Request   

POST api/v1/jobs/{job_guid}/notifications

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

job_guid   string  optional  

The GUID of the job Example: culpa

Body Parameters

comments   string  optional  

Comment, if any, associated with this notification. Example: exercitationem

default   object  optional  

Use default for undefined properties, such as comments, task.due_at, etc. It auto fill those properties if not defined.

comments   boolean  optional  

Whether to use default comments, if comments field is not defined. Example: true

task   boolean  optional  

Whether to use default value for task sub-properties, if they are not defined. Example: false

reviewers   boolean  optional  

Whether to use existing reviewer, if reviewers field is not defined. Example: true

schedule   string   

When to schedule this reminder. The valid values are [now, later]. Example: vero

task   object   

The task associated with this job.

category   string   

The task category. The supported values are [assign-task, forward-task, quote-review-task, review-task, revision-task and upload-task]. Example: dolor

due_at   string  optional  

Due date of the task to complete. Default value is 'null'. Example: accusantium

req_confirm   boolean  optional  

Whether required confirmation is enabled or not. Example: false

status   string  optional  

The status of the job. Valid values are [new, paused, processing, and done]. Example: quae

reason   string  optional  

The notification reason. It shall have one of the following values:

  • notify-task: Send notification for given task (default)
  • reset-task: Reset all tasks and status, and bring to the initial state
  • send-message: Send a simple message for given task
  • update-task: Simply update the task without sending notification Example: nihil
recipient   email  optional  

The customer or partner to be updated in the job. Example: ab

reviewers   string[]  optional  

List of reviewers of this task.

email   string  optional  

Must be a valid email address. Example: rohan.kaci@example.com

group   string  optional  

Example: reprehenderit

Response

Response Fields

comments   string   

The comment sent through this notification.

reason   string   

The notification reason. Refer to body parameters.

recipient   string   

This represent responsible customer or partner assigned to the job. Customer are associated with job review and partner are associated with job forward.

schedule   string   

required When to schedule this reminder. The valid values are [now, later].

task   object   

required The task associated with this job.

category   string   

The task category. The supported values are [assign-task, forward-task, quote-review-task, review-task, revision-task, and upload-task]. This is same as query parameters passed to call this API.

due_at   string   

Due date of the task to complete. Default value is 'null'.

req_confirm   boolean   

Whether required confirmation is enabled or not.

status   string   

The status of the task. Valid values are [new, paused, processing, and done]. Default value is 'new'.

Miscellaneous endpoints

Apply a job action

requires authentication

Three kind of actions are supported at this moment:

If job is expired, by calling the renew action, it bring the job to previous state.

Example request:
curl --request POST \
    "https://www.review.good2gosoftware.com/api/v1/jobs/atque/action/adipisci" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"ignore\": [
        \"quos\"
    ]
}"
const url = new URL(
    "https://www.review.good2gosoftware.com/api/v1/jobs/atque/action/adipisci"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "ignore": [
        "quos"
    ]
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://www.review.good2gosoftware.com/api/v1/jobs/atque/action/adipisci';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'ignore' => [
                'quos',
            ],
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):


{
    "asg_email": "tom.jerry@tj.com",
    "asg_name": "Tom",
    "c_email": "my.customer@domain.com",
    "c_name": "My Customer",
    "created_at": "2021-02-06T10:21:06.000Z",
    "deleted_at": null,
    "due_at": null,
    "guid": "b7926eb4-6726-4917-abfd-e6eed3476e56",
    "has_comment": false,
    "is_folder": false,
    "is_own": true,
    "name": "A Test File.png",
    "newly_assigned": false,
    "parent_guid": "f1096786-687e-4e40-87c7-bdb90ef631e7",
    "path_url": "http://www.good2gosoftware.com/review/file/b7926eb4-6726-4917-abfd-e6eed3476e56/document/A%20Test%20File.png?version=1",
    "size": 582817,
    "status": "new",
    "type": "image/png",
    "updated_at": "2021-02-06T10:21:06.000Z",
    "version": 1
}
 

Example response (403):


{
    "error": {
        "message": "User access not permitted.",
        "status_code": 403
    }
}
 

Example response (406):


{
    "error": {
        "message": "Acceptable action ids are [ 'inherit', 'renew', 'send-to-mis' ].",
        "status_code": 406
    }
}
 

Example response (422):


{
    "error": {
        "message": "Parent job is not a folder.",
        "status_code": 422
    }
}
 

Request   

POST api/v1/jobs/{job_guid}/action/{action}

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

job_guid   string   

The guid of the job. This can be derived from the list of jobs returned from api 'api/v1/jobs'. Example: atque

action   string   

One of the value [ 'inherit', 'renew', 'send-to-mis' ]. Example: adipisci

Body Parameters

ignore   string[]  optional  

List of properties that can be ignored when inherit action is applied. The supported properties are [ alt_text, c_email, due_at, p_email, cus_download, show_job_spec, and show_preflight]

  • alt_text: Alternative text
  • c_email: Customer email
  • due_at: Deadline
  • p_email: Partner email
  • cus_download: Customer download
  • show_job_spec: Show job specification
  • show_preflight: Show preflight summary

Assign to team member

requires authentication

Assign a job to a team member. Job can only be assigned to team members who are part same team. Visit account page got more information about team and team members.

Example request:
curl --request POST \
    "https://www.review.good2gosoftware.com/api/v1/jobs/b507769f-f7ec-40d2-bd29-f3825adf83ca/assign" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"comments\": \"ipsa\",
    \"default\": {
        \"comments\": false,
        \"task\": true
    },
    \"schedule\": \"now\",
    \"task\": {
        \"category\": \"ut\",
        \"due_at\": \"fugiat\",
        \"req_confirm\": false,
        \"status\": \"in\"
    },
    \"reason\": \"send-message\",
    \"recipient\": \"abc@mno.com\",
    \"assignee\": \"abc@mno.com\"
}"
const url = new URL(
    "https://www.review.good2gosoftware.com/api/v1/jobs/b507769f-f7ec-40d2-bd29-f3825adf83ca/assign"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "comments": "ipsa",
    "default": {
        "comments": false,
        "task": true
    },
    "schedule": "now",
    "task": {
        "category": "ut",
        "due_at": "fugiat",
        "req_confirm": false,
        "status": "in"
    },
    "reason": "send-message",
    "recipient": "abc@mno.com",
    "assignee": "abc@mno.com"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://www.review.good2gosoftware.com/api/v1/jobs/b507769f-f7ec-40d2-bd29-f3825adf83ca/assign';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'comments' => 'ipsa',
            'default' => [
                'comments' => false,
                'task' => true,
            ],
            'schedule' => 'now',
            'task' => [
                'category' => 'ut',
                'due_at' => 'fugiat',
                'req_confirm' => false,
                'status' => 'in',
            ],
            'reason' => 'send-message',
            'recipient' => 'abc@mno.com',
            'assignee' => 'abc@mno.com',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):


{
    "assignee": "tom.jerry@disney.com",
    "comments": "Can you update the bleed?",
    "task": {
        "category": "assign-task",
        "created_at": "2021-08-25T08:30:59.000Z",
        "due_at": null,
        "executed_at": "2021-08-25T10:01:37.460Z",
        "id": 15,
        "status": "new"
    }
}
 

Example response (422):


{
    "error": {
        "message": "User abc.pqr@xyz.com is not a team member.",
        "status_code": 422
    }
}
 

Request   

POST api/v1/jobs/{job_guid}/assign

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

job_guid   string   

The guid of the job. This can be derived from the list of jobs returned from api 'api/v1/jobs'. Example: b507769f-f7ec-40d2-bd29-f3825adf83ca

Body Parameters

comments   string  optional  

Comment, if any, associated with assignment. Example: ipsa

default   object  optional  
comments   boolean  optional  

Example: false

task   boolean  optional  

Example: true

schedule   string   

The notification schedule time. Example: now

Must be one of:
  • now
  • later
task   object   

The task associated with this job

category   string   

The task category. Only supported values is assign-task. Example: ut

due_at   string  optional  

Due date of the task to complete. Default value is 'null'. Example: fugiat

req_confirm   boolean  optional  

Whether confirmation is required during approval. Example: false

status   string  optional  

The status of the job. Valid values are [new, paused, processing, and done]. Example: in

reason   string   

Example: send-message

Must be one of:
  • notify-task
  • reset-task
  • send-message
  • send-message-all
  • update-task
recipient   string  optional  

Email address of team member. Either provide recipient or recipient. If both are provided, then the assignee takes precedence. Must be a valid email address. Example: abc@mno.com

assignee   string   

Email address of team member. Example: abc@mno.com

Response

Response Fields

assignee   string   

required Email address of team member.

comments   string   

The comment sent through this notification.

task   object   

required The task associated with this job

category   string   

required The task category. The supported values are [review-task, upload-task, revision-task, and assign-task].

due_at   string   

Due date of the task to complete. Default value is 'null'.

status   string   

The status of the job. Valid values are [new, paused, processing, and done]. Default value is 'new'.

Get job history

requires authentication

It returns array (list) of job history.

Example request:
curl --request GET \
    --get "https://www.review.good2gosoftware.com/api/v1/jobs/id/changelogs" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://www.review.good2gosoftware.com/api/v1/jobs/id/changelogs"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://www.review.good2gosoftware.com/api/v1/jobs/id/changelogs';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):


[
    {
        "category": "comments",
        "comments": "Update email send to test.good2go@gmail.com",
        "created_at": "2021-02-08T16:46:56.000Z",
        "from_email": "test.good2go@yahoo.com",
        "id": 702,
        "job_guid": "d92430f7-ba9c-490c-a070-4eeff0da9d54"
    },
    {
        "category": "notification.manual",
        "comments": "Reminder email sent to test.good2go@gmail.com",
        "created_at": "2021-02-08T15:20:44.000Z",
        "from_email": "test.good2go@yahoo.com",
        "id": 699,
        "job_guid": "d92430f7-ba9c-490c-a070-4eeff0da9d54"
    },
    {
        "category": "comments.approval",
        "comments": "(Status: approved) Looks to be okay",
        "created_at": "2020-12-12T06:56:43.000Z",
        "from_email": "test.good2go@yahoo.com",
        "id": 481,
        "job_guid": "d92430f7-ba9c-490c-a070-4eeff0da9d54"
    },
    {
        "category": "comments.assigned",
        "comments": "(Assigned to: team.member@gmail.com) Please add bleed to this job.",
        "created_at": "2020-12-10T18:21:11.000Z",
        "from_email": "test.good2go@yahoo.com",
        "id": 478,
        "job_guid": "d92430f7-ba9c-490c-a070-4eeff0da9d54"
    },
    {
        "category": "image-info",
        "comments": "{\"width\":320,\"height\":215,\"mime\":\"image/png\",\"color\":\"UNKNOWN\",\"bits\":0}",
        "created_at": "2020-12-06T05:19:14.000Z",
        "from_email": "test.good2go@yahoo.com",
        "id": 448,
        "job_guid": "d92430f7-ba9c-490c-a070-4eeff0da9d54"
    },
    {
        "category": "comments",
        "comments": "A first version uploaded - 1",
        "created_at": "2020-12-06T05:19:14.000Z",
        "from_email": "test.good2go@yahoo.com",
        "id": 449,
        "job_guid": "d92430f7-ba9c-490c-a070-4eeff0da9d54"
    }
]
 

Request   

GET api/v1/jobs/{job_guid}/changelogs

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

job_guid   string   

The guid of the job. This can be derived from the list of jobs returned from api 'api/v1/jobs'. Example: id

Response

Response Fields

category   string   

The record category. This is used for internal purpose and can change in future.

comments   string   

The comments added to the job.

created_at   string   

When this record was made in ISO UTC datetime format.

from_email   string   

The email ID of Goo2Go user or customer who created this record.

Get latest job comments

requires authentication

It returns latest job comment.

Example request:
curl --request GET \
    --get "https://www.review.good2gosoftware.com/api/v1/jobs/doloribus/changelogs/latest" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://www.review.good2gosoftware.com/api/v1/jobs/doloribus/changelogs/latest"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://www.review.good2gosoftware.com/api/v1/jobs/doloribus/changelogs/latest';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):


{
    "category": "comments.approval",
    "comments": "(Status: approved) Looks to be okay",
    "created_at": "2020-12-12T06:56:43.000Z",
    "from_email": "test.good2go@yahoo.com",
    "id": 481,
    "job_guid": "d92430f7-ba9c-490c-a070-4eeff0da9d54"
}
 

Request   

GET api/v1/jobs/{job_guid}/changelogs/latest

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

job_guid   string   

The guid of the job. This can be derived from the list of jobs returned from api 'api/v1/jobs'. Example: doloribus

Response

Response Fields

category   string   

The record category. This is used for internal purpose and can change in future.

comments   string   

The comments added to the job.

created_at   string   

When this record was made in ISO UTC datetime format.

from_email   string   

The email ID of Goo2Go user or customer who created this record.

Get lock state of a job

requires authentication

Example request:
curl --request GET \
    --get "https://www.review.good2gosoftware.com/api/v1/jobs/rem/locking" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://www.review.good2gosoftware.com/api/v1/jobs/rem/locking"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://www.review.good2gosoftware.com/api/v1/jobs/rem/locking';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):


{
    "guid": "f6ac15ca-e4fa-4e1f-bb94-088ec04d7dab",
    "locked": true
}
 

Example response (404):


{
    "error": {
        "message": "Resource not found",
        "status_code": 404
    }
}
 

Request   

GET api/v1/jobs/{job_guid}/locking

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

job_guid   string   

The guid of the job. This can be derived from the list of jobs returned from api 'api/v1/jobs'. Example: rem

Response

Response Fields

locked   boolean   

If this file is locked or not.

Lock or unlock a job

requires authentication

Example request:
curl --request POST \
    "https://www.review.good2gosoftware.com/api/v1/jobs/voluptatem/locking" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"locked\": true
}"
const url = new URL(
    "https://www.review.good2gosoftware.com/api/v1/jobs/voluptatem/locking"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "locked": true
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://www.review.good2gosoftware.com/api/v1/jobs/voluptatem/locking';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'locked' => true,
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):


{
    "ac": {
        "can_assign": true,
        "can_delete": true,
        "can_download": false,
        "can_edit": true,
        "can_view": true,
        "control_job": true,
        "delete_options": {
            "action": "trash"
        }
    },
    "asg_email": "tom.jerry@tj.com",
    "asg_name": "Tom",
    "c_email": "my.customer@domain.com",
    "c_name": "My Customer",
    "created_at": "2021-02-06T10:21:06.000Z",
    "cus_download": true,
    "deleted_at": null,
    "due_at": null,
    "guid": "b7926eb4-6726-4917-abfd-e6eed3476e56",
    "has_comment": false,
    "is_folder": false,
    "is_own": true,
    "is_portal": false,
    "is_watching": false,
    "locked": false,
    "more_info": {
        "annotations": {
            "annot_cnt": 0,
            "annot_cnt_plus": false
        },
        "pageCount": 1,
        "pages": [
            {
                "bits": 0,
                "color": "UNKNOWN",
                "height": 922,
                "mime": "image/png",
                "width": 1616
            }
        ]
    },
    "name": "A Test File.png",
    "newly_assigned": false,
    "parent_guid": "f1096786-687e-4e40-87c7-bdb90ef631e7",
    "p_email": "forward.partner@domain.com",
    "path_url": "http://www.good2gosoftware.com/review/file/b7926eb4-6726-4917-abfd-e6eed3476e56/document/A%20Test%20File.png?version=1",
    "p_name": "DEF Printer",
    "size": 582817,
    "source": "in-app",
    "status": "new",
    "type": "image/png",
    "updated_at": "2021-02-06T10:21:06.000Z",
    "version": 1
}
 

Example response (404):


{
    "error": {
        "message": "Resource not found",
        "status_code": 404
    }
}
 

Request   

POST api/v1/jobs/{job_guid}/locking

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

job_guid   string   

The guid of the job. This can be derived from the list of jobs returned from api 'api/v1/jobs'. Example: voluptatem

Body Parameters

locked   boolean   

Example: true

Send status update

requires authentication

Example request:
curl --request POST \
    "https://www.review.good2gosoftware.com/api/v1/jobs/000054ea-adb6-4d1a-aba5-f27b6fbdcf80/send/update" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"label\": \"Send for review\"
}"
const url = new URL(
    "https://www.review.good2gosoftware.com/api/v1/jobs/000054ea-adb6-4d1a-aba5-f27b6fbdcf80/send/update"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "label": "Send for review"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://www.review.good2gosoftware.com/api/v1/jobs/000054ea-adb6-4d1a-aba5-f27b6fbdcf80/send/update';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'label' => 'Send for review',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):


{
    "ac": {
        "can_assign": true,
        "can_delete": true,
        "can_download": false,
        "can_edit": true,
        "can_view": true,
        "control_job": true,
        "delete_options": {
            "action": "trash"
        }
    },
    "asg_email": "tom.jerry@tj.com",
    "asg_name": "Tom",
    "c_email": "my.customer@domain.com",
    "c_name": "My Customer",
    "created_at": "2021-02-06T10:21:06.000Z",
    "cus_download": true,
    "deleted_at": null,
    "due_at": null,
    "guid": "b7926eb4-6726-4917-abfd-e6eed3476e56",
    "has_comment": false,
    "is_folder": false,
    "is_own": true,
    "is_portal": false,
    "is_watching": false,
    "locked": false,
    "more_info": {
        "annotations": {
            "annot_cnt": 0,
            "annot_cnt_plus": false
        },
        "pageCount": 1,
        "pages": [
            {
                "bits": 0,
                "color": "UNKNOWN",
                "height": 922,
                "mime": "image/png",
                "width": 1616
            }
        ]
    },
    "name": "A Test File.png",
    "newly_assigned": false,
    "parent_guid": "f1096786-687e-4e40-87c7-bdb90ef631e7",
    "p_email": "forward.partner@domain.com",
    "path_url": "http://www.good2gosoftware.com/review/file/b7926eb4-6726-4917-abfd-e6eed3476e56/document/A%20Test%20File.png?version=1",
    "p_name": "DEF Printer",
    "size": 582817,
    "source": "in-app",
    "status": "new",
    "type": "image/png",
    "updated_at": "2021-02-06T10:21:06.000Z",
    "version": 1
}
 

Example response (404):


{
    "error": {
        "message": "Resource not found",
        "status_code": 404
    }
}
 

Request   

POST api/v1/jobs/{job_guid}/send/update

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

job_guid   string   

Example: 000054ea-adb6-4d1a-aba5-f27b6fbdcf80

Body Parameters

label   string   

Assign one of the user defined label. Must not be greater than 64 characters. Example: Send for review

Get analytical data

requires authentication

Return consolidated data of user of all jobs.

Example request:
curl --request GET \
    --get "https://www.review.good2gosoftware.com/api/v1/analytics/jobs" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://www.review.good2gosoftware.com/api/v1/analytics/jobs"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://www.review.good2gosoftware.com/api/v1/analytics/jobs';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):


{
    "approved": 1,
    "created_at": "2021-01-24T17:56:03.000Z",
    "data_size_mb": "6852489",
    "due_cnt": 0,
    "guid": "63c56c5e-3aa6-4768-bbd8-01c0b4e5ccaa",
    "id": 1,
    "live_files": 24,
    "locked_at": "2021-01-25T14:13:10.000Z",
    "name": "Large Files Test",
    "processed": 40,
    "rejected": 2,
    "signed_at": "2021-02-12T07:41:37.000Z",
    "updated_at": "2021-02-08T15:20:44.000Z"
}
 

Request   

GET api/v1/analytics/jobs

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

Response

Response Fields

approved   integer   

Number of files or folders approved.

data_size_mb   integer   

Size of memory usage in mega bytes (MB).

due_cnt   integer   

Number of files due today.

live_files   integer   

Total number of live files at this moment.

locked_at   string   

The last time when user account was locked.

name   string   

The name of the parent folder (root).

processed   integer   

Number of files processed by user so far.

rejected   integer   

Number of files or folders rejected so far.

signed_at   string   

Last date on which user has successfully login to Good2Go review application (in ISO UTC datetime format).

Get analytical data for files in a folder

requires authentication

Return consolidated data of user for jobs in a given folder.

Example request:
curl --request GET \
    --get "https://www.review.good2gosoftware.com/api/v1/analytics/jobs/error" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://www.review.good2gosoftware.com/api/v1/analytics/jobs/error"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://www.review.good2gosoftware.com/api/v1/analytics/jobs/error';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):


{
    "approved": 1,
    "created_at": "2021-01-24T17:56:03.000Z",
    "data_size_mb": "6852489",
    "due_cnt": 0,
    "guid": "63c56c5e-3aa6-4768-bbd8-01c0b4e5ccaa",
    "id": 1,
    "live_files": 24,
    "locked_at": "2021-01-25T14:13:10.000Z",
    "name": "Large Files Test",
    "processed": 40,
    "rejected": 2,
    "signed_at": "2021-02-12T07:41:37.000Z",
    "updated_at": "2021-02-08T15:20:44.000Z"
}
 

Example response (422):


{
    "error": {
        "message": "This job is not a folder.",
        "status_code": 422
    }
}
 

Request   

GET api/v1/analytics/jobs/{job_guid}

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

job_guid   string  optional  

The guid of the folder. This can be derived from the list of jobs returned from api 'api/v1/jobs'. Example: error

Response

Response Fields

approved   integer   

Number of files or folders approved.

data_size_mb   integer   

Size of memory usage in mega bytes (MB).

due_cnt   integer   

Number of files due today.

guid   string   

The guid of parent folder. Null in case of root folder.

live_files   integer   

Total number of live files at this moment.

locked_at   string   

The last time when user account was locked.

name   string   

The name of the parent folder.

processed   integer   

Number of files processed by user so far.

rejected   integer   

Number of files or folders rejected so far.

signed_at   string   

Last date on which user has successfully login to Good2Go review application (in ISO UTC datetime format).