Webhook Documentation

The purpose of this document is to cover the available options and data with respect to Webhooks from One Click Contractor (OCC). These webhooks can be utilized to extend connectivity to platforms outside of OCC to enhance the overall functionality a

Endpoint Return Requirements

Once an event is triggered on the OCC system, an event is immediately backgrounded for delivery to your webhook. Depending on traffic and utilization, these webhooks can be delayed anywhere from a few seconds to a couple of minutes.


It is expected that your endpoint would return an HTTP 2xx response to indicate successful processing and receipt of the webhook. In the event a non HTTP 2xx response is returned, the system will retry a total of 2 more times with a gradual backoff as detailed below. Meaning ALL webhooks will be attempted until a successful response is returned for a maximum of three attempts.

Error Handling and Retries

In the event of a non HTTP 2xx response, the system will attempt a retry 5 minutes later. If that second attempt also returns a non HTTP 2xx response, a third and final attempt will be made 10 minutes after the second attempt fails.


Here is a brief example of the timeframe of webhook event retries:


  • 10/25/2023 at 5:00PM - Initial Webhook is sent and endpoint returns HTTP 500
  • 10/25/2023 at 5:05PM - Second attempt of the same webhook payload is sent and the endpoint returns HTTP 500
  • 10/25/2023 at 5:15PM - Third and final attempt of the same webhook payload is sent. Regardless of the HTTP response returned the system will not try again.

Configuring Webhooks

Webhooks are available for ORG_ADMIN users when accessing the Administration section of OCC. They can be found and configured from a new “Webhooks” tab available on the organization.


 

  • When creating a Webhook, you will need to fill out the following items:
    • Name
    • Webhook URL
    • Webhook Authentication Methods
      • You can use No Auth or Basic Auth (depending on the receiving system).
    • Events to send 
      • There are a number of different events and types which are organized by kind. For more details and specifics on the types of events, reference the Webhook Delivery section of this document. 

Note: When adding a webhook the URL MUST be https. We do NOT send webhooks to non-secure URLs.

  • Once you’ve created a webhook, you’ll be taken back to the webhook listing where you can view a list of the webhooks and check the status. By default, when you create a webhook, it will be in a “deactivated” state. To turn it on, simply toggle the toggle button to the on position.


  • Once you’ve toggled it to the On position, the system will begin delivering payloads to your endpoint once one of the selected events is triggered. It will be indicated as “activated” when it looks like the screenshot below.


  • Debugging webhooks is also supported on this screen. To access or edit the webhook, click the pencil next to the specific webhook to bring back up the detail screen.
  • On the detail screen, there is a section called “Log History” which will include all of the webhook events which are generated for this webhook.

  • For each of these items, the following information is displayed:
    • ID: The internal id of the event sent to the system
    • Date/Time: - The date/time the event was created
    • Event: The type of event (Job Created, etc.) which was sent
    • Webhook URL: The endpoint which was called
    • Response: The latest response returned from the receiving URL (HTTP status code)
    • You’ll also notice there is an expand icon which is available to view details.
  • The Log History Modal also has additional information:


  • ID, Event, and Webhook URL same as the previous screen
  • Payload, which includes the full JSON payload of all the data included in the webhook.
  • Webhook Attempts - The system expects to receive an HTTP 2xx response when it sends a webhook to the URL.
    • If the system does NOT receive a 2xx response, it will retry again in 5 minutes.
    • If it fails again in 5 minutes, it will attempt again in 10 minutes.
    • At the point it has failed 3x it will not retry again.
  • For each of the attempts, the system logs the status, date, time, and response code returned from the endpoint which was called.
  • To find more details out about each attempt, you can click to expand the accordion next to each attempt to expose the Response Code, Response Headers, and Response Body for each attempt.

Webhook Delivery

General Overview

Webhooks from OCC are delivered utilizing a POST method to an endpoint provided. There are a number of different types of webhooks which have been organized by kind below.

Job Events

Event Name

Event Type

Description

Created

job.created

When the job is created.

Updated

job.updated

When the job is updated.

Assigned

job.assigned

When the job is assigned/reassigned to a different user.

Image Created

job.image_created

When an image is created on the job.

Document Created

job.document_created

When a document is created on the job.

Status Changed

job.status_changed

When the status is changed on the job

Estimate Events

Event Name

Event Type

Description

Created

estimate.created

When the estimate is created.

Updated

estimate.updated

When the estimate is updated.

Manually Triggered

estimate.manual_trigger

When the estimate is manually triggered or pushed from the Estimator.

Signed Document Events

In the OCC system we have a Signed Document object. These documents are typically referred to as a “Contract” or “Agreement”. These signed document objects are associated with an estimate and have pricing information.


Event Name

Event Type

Description

Signed

signed_document.signed

When the signed document is fully executed by all parties/signers.

Signable Document Events

In the OCC system we also have a type of document we refer to as a Signable Document. These are sometimes referred to as “one-off” documents. They are NOT associated with an estimate and are rather associated with a job. Some examples of these types of documents are HOA authorization forms, Change Orders (not on an estimate), etc.


Event Name

Event Type

Description

Signed

signable_document.signed

When the signable document is fully executed by all parties/signers.

Payment Events

If an organization is subscribed to One Click Payments we also have the ability to provide additional webhook events for payment related events.


Note: In order to receive these webhook events, an organization MUST be subscribed to One Click Payments.


Event Name

Event Type

Description

Created

payment.created

When a payment is created in the system (regardless of success or failure).

Refunded

payment.refunded

When a refund is created in the system.

HTTP vs HTTPS

Webhooks can ONLY be delivered to an HTTPS endpoint. There is NO option to have a webhook delivered to a non-SSL endpoint.

Webhook Authentication

Webhooks from OCC currently support two options for authentication:


  • No Authentication: The webhook is simply sent without any authentication headers.
  • Basic Authentication: The username:password will be base64 encoded and included in the authorization header of the request.
    • An example with:
      • Username of username
      • Password of password

Basic dXNlcm5hbWU6cGFzc3dyZA==

Object Overview

As it relates to objects in OCC, it is important to understand the hierarchy of objects in the system.


Here is a list of objects and their descriptions


Object

Description

Org

Org is short for organization and is typically the equivalent of a “Company” or a branch of a larger enterprise. Typically there is a single org but an enterprise could be made up of multiple organizations.

Job

A job is the object that stores all job/customer related information (name, address, phone numbers, etc.)

Estimate

An estimate is related to a single job and stores high level information (name, total, etc.)

Estimate Group

An estimate group is associated with a single Estimate and can either be “included” or an “optional” group. Included groups are included in the total amount of the estimate.


An estimate can have multiple estimate groups.

Estimate Line Item

An estimate line item is associated with a single Estimate Group. An estimate line item stores the name, description, quantity, unit of measure, and pricing information for the line item.


An estimate group can have multiple estimate line items.

Estimate Line Item Option

An estimate line item option is associated with a single Estimate Line item. An estimate line item option stores the name, description, quantity, unit of measure, and pricing information for the estimate line item option.


An estimate line item can have multiple line item options.


Note: Options are most often utilized for configured products such as windows. Where an estimate line item would be Double Hung Window and a line item option would be Grids are Prairie or Color is white, etc.

Signed Document

A signed document is associated with a single Estimate. A signed document is typically referred to as an Agreement or Contract and contains the fully executed version of said Agreement/Contract. In the payload there is also estimate information which is provided.

Document

A Document is associated with a Job.


Note: Documents can be deleted.

Image

An Image is associated with a Job.


Note: Images can be deleted.

Signable Document

A Signable document is associated with a single job. A signable document is typically referred to as a “one off” document as it is NOT a part of an estimate, etc. This would be a form or group of forms which has been completed by all signer(s).

Payment

A payment object which can be associated with a Job, Org, and User

Object Hierarchy

Here is the basic overview/hierarchy of objects in the system.

  • Org
    • Jobs
      • Estimates
        • Estimate Groups
          • Estimate Line Items
            • Estimate Line Item Options
        • Signed Documents
      • Documents
      • Images
      • Signable Document

Anatomy of a Webhook Payload

High Level Items

The overall layout of a webhook payload from OCC will be common between each kind of payload. Here are the high-level components of the payload.


  • event_type: The type of event (referenced above) of this webhook.
  • event_id: A GUID assigned to an instance of a webhook event.
  • payload: The full payload of the webhook. In the case of a job event, it will be a job, estimate will be an estimate, etc.

Job Payload Overview

The following is a detailed explanation of all job payload values.


  • id: This is the unique ID (number) for the specific job
  • name: The name of the Job
  • customer_name: The customer name from the job.
  • email: The email associated with the job (can be a comma-separated list of emails)
  • lead_source: A string representation of the lead source for the job.
  • metadata: This is an object which may have other items, values, etc. stored in there for links to other systems such as CRMs, etc.
  • created_at: The time the job was created (in UTC time)
  • updated_at: The time the job was last updated (in UTC time)
  • additional_info: A free form text field on the job
  • archived: A boolean indicated whether or not the job was archived in OCC.
  • raw_state: The state/status of the job with no capitalization or spaces.
  • pretty_state: The state/status of the job in a “pretty format” with capitalization and spaces
  • address: Object representing the job
    • id: The unique Id of the address object
    • line_1: Line 1 of the Job Address
    • line_2: Line 2 of the Job Address
    • city: City of the Job Address
    • state: State of the Job Address
    • postal_code: Postal code of the Job Address
    • country: Country of the Job Address
    • lat: Latitude of the Job Address
    • lon: Longitude of the Job Address
    • created_at: The date/time the Job Address was created
    • updated_at: The date/time the Job Address was last updated
  • customer_address: Object representing the job (the same as job address unless the user chose to change it)
    • id: The unique Id of the address object
    • line_1: Line 1 of the Customer Address
    • line_2: Line 2 of the Customer Address
    • city: City of the Customer Address
    • state: State of the Customer Address
    • postal_code: Postal code of the Customer Address
    • country: Country of the Customer Address
    • lat: Latitude of the Customer Address
    • lon: Longitude of the Customer Address
    • created_at: The date/time the Customer Address was created
    • updated_at: The date/time the Customer Address was last updated
  • org: Object for the Organization
    • id: Unique ID of the organization the job was created at.
    • name: Name of the organization
  • job_types array of job types for the job
    • id: id of the job type
    • name: Name of the job type
  • created_by object with the user who created the job
    • id: User ID of the user who created the job
    • first_name: First name of the user who created the job
    • last_name: Last name of the user who created the job
    • email: Email address of the user who created the job
  • job_assignment Object detailing who the job is assigned to
    • user: object with details on the user
      • id: User ID of the job’s assigned user
      • first_name: First name of the job’s assigned user
      • last_name: Last name of the job’s assigned user
      • email: Email address of the job’s assigned user
    • id: Unique ID of the job assignment
    • status: Status of the job assignment (typically just active)
    • created_at: When the job assignment record was created.
  • additional_job_assignment: Object detailing who the job is assigned to as a “secondary” job assignment
    • user: object with details on the user
      • id: User ID of the job’s assigned user
      • first_name: First name of the job’s assigned user
      • last_name: Last name of the job’s assigned user
      • email: Email address of the job’s assigned user
    • id: Unique ID of the job assignment
    • status: Status of the job assignment (typically just active)
    • created_at: When the job assignment record was created.
  • phone_numbers: Array of objects with phone numbers
    • id: Unique ID for the phone number
    • name: The name for the phone number (mobile, office, home, etc.)
    • number: The phone number (this is a string as it can have extensions, etc.)
  • note: Array of note objects
    • id: Unique ID of the note
    • user_id: User ID who created the note
    • created_at: Date/time the note was created (in UTC time)
    • updated_at: Date/time the note was last updated (in UTC time)
  • images: Array of image objects
    • id: Unique ID of the image
    • name: The name of the image
    • api_authenticated_url: The API endpoint you can use to securely retrieve the file at any time (with appropriate credentials)
    • created_at: Date/time the image was created (in UTC time)
    • updated_at: Date/time the image was last updated (in UTC time)
    • presigned_url: A Presigned URL with access to download the image.
      • Note: This URL is only guaranteed to be good for up to 5 minutes.
  • documents: Array of document objects
    • id: Unique ID of the document
    • name: The name of the document
    • api_authenticated_url: The API endpoint you can use to securely retrieve the file at any time (with appropriate credentials)
    • created_at: Date/time the document was created (in UTC time)
    • updated_at: Date/time the document was last updated (in UTC time)
    • presigned_url: A Presigned URL with access to download the image.
      • Note: This URL is only guaranteed to be good for up to 5 minutes.

Estimate Payload Overview

The following is a detailed explanation of all values of the estimate payload.


  • id: The unique ID of the estimate
  • name: The name of the estimate (can be the same as the ID if the user didn’t change it)
  • subtotal: The subtotal of the estimate
  • tax_rate: The tax rate of the estimate
  • tax_total: The total amount of tax calculated on the estimate
  • discount: The total calculated discount
  • taxable_amount: The taxable amount calculated on the estimate
  • total: The total of the estimate
  • labor_markup: The markup percentage for Labor on the estimate
  • product_markup: The markup percentage for Product on the estimate
  • estimated_start: The estimated start date for the project
  • estimated_end: The estimated end date for the project
  • created_at: Date/time the estimate was created (in UTC time)
  • updated_at: Date/time the estimate was last updated (in UTC time)
  • archived: A boolean to indicate whether the estimate was archived or not
  • estimated_commission: An estimated commission amount (only provided if the organization is utilizing our Commission Calculator functionality).
  • job: Object of the associated job, see the Job Payload Overview section for details.
  • discounts: Array of discount objects
    • name: The name of the discount
    • amount: The amount of the discount (like $100 or 3%)
    • calculated: The calculated amount of the discount
    • limit: An amount the discount is limited to
    • kind: A string of the type of discount (percent, flat, percent_limit)
  • payment_terms: Object detailing the payment terms for the project
    • name: Name of the payment term selection
    • description: Description of the payment term selection
    • kind: The type of payment term selected
    • financed_amount: The amount “financed” from the payment term selection
    • payments: Object detailing each of the payments in the payment terms
      • amount: The amount of the payment (an amount of 10 and a kind of percent means 10%)
      • type: The type of payment (flat, percent)
      • description: A description for the payment.
  • groups: Array of Estimate groups on the estimate
    • id: Unique ID for the estimate group.
    • included: Boolean indicated if this estimate group is included in the total
    • name: Name of the estimate group
    • subtotal: Subtotal for the estimate group
    • total: Total for the estimate group
    • line_items: Array of line items included in the group
      • id: Unique ID of the line item
      • name: Name of the line item
      • description: Description of the line item
      • product_price: Product price for the line item
      • labor_price: Labor price for the line item
      • cost: Cost of the line item
      • quantity: Quantity of the line item
      • ext_price: Extended price of the line item (quantity *(product_price + labor_price))
      • uom: Unit of measure for the line item
      • sku: SKU of the line item
      • options: Array of objects containing line item options.
        • id: Unique ID of the Line Item Option
        • name: Name of the line item option
        • product_option_group_name: Name of the product option group
        • product_price: Product price of the line item option
        • labor_price: Labor price of the line item option
        • cost: Cost of the line item option
        • ext_price: Extended price of the line item option
        • quantity: Quantity of the line item option
        • uom: Unit of measure for the line item option
        • sku: SKU of the line item option

Signed Document Payload Overview

The following is a detailed explanation of all values of the Signed Document payload.


This payload will be exactly the same as the Estimate Payload above with a slight difference: the addition of a signed_document object.


  • signed_document: Object for the signed document
    • id: Unique ID of the signed document
    • name: The name of the signed document
    • api_authenticated_url: The API endpoint you can use to securely retrieve the file at any time (with appropriate credentials)
    • presigned_url: A Presigned URL with access to download the document.
      • Note: This URL is only guaranteed to be good for up to 5 minutes.

Signable Document Payload Overview

The following is a detailed explanation of all values of the Signable Document payload.


  • job: Object for the job, see Job Payload for details
  • signable_document: Object for the signable document
    • id: Unique ID of the signable document
    • name: The name of the signable document
    • api_authenticated_url: The API endpoint you can use to securely retrieve the file at any time (with appropriate credentials)
    • presigned_url: A Presigned URL with access to download the document.
      • Note: This URL is only guaranteed to be good for up to 5 minutes.

Payment Payload Overview

The following is a detailed explanation of all values of the Payment payload.


    • customer_name: Name of the customer who received the payment
  • payment_amount: The amount of the payment in floating point decimal format $###.##
    • payment_status: The status of the payment
    • card_type: The card type of the payment
    • payment_kind: A string value detailing the kind of payment (will always be one_click_payments) 
  • date_completed: Date/time of when the payment was completed (in UTC time)
  • payin: Object for the Payment
    • chargebacks: Array detailing information around the chargeback
    • method_metadata: Object with information regarding the payment method
    • refusal_desc: The description explaining the reason for the refusal if the payin or refund failed to process. This will be a human-readable value that may be presented to the end user.
      • This value will be null if the payin or refund succeeded.
    • detailed_refusal_code: The detailed_refusal_code
    • cvc_result_code: The card verification code result code.
    • payin_config: Object containing the configuration of the payin
      • amount: The total amount requested for processing, in minor units. For example, 1000 is 10.00 USD.
      • payin_config_id: The unique payin config identifier. Prefix is "cfg"
    • is_partially_authorized: Boolean indicating if payin was authorized for a partial amount.
    • non_refundable_reason_code: Why the payin is nonrefundable. Provided when refundable_amount is 0.
      • Options: VOIDED, FAILED, FULLY_REFUNDED, HAS_CHARGEBACKS, HAS_ACH_RETURN, IN_ACH_RETURN_WINDOW, IN_SETTLEMENT_WINDOW
    • method_type: The method of payment (CARD, ACH, or APPLE_PAY)
    • billing_type: The merchant billing type. (NET or GROSS)
    • payin_id: The unique payin identifier that was voided or refunded. Prefix is "pyi"
    • idempotency_key: A unique identifier provided by the platform.
    • refunds: Array containing refund objects
      • refund_id: The unique refund identifier. Prefix is "rfd"
      • payin_id: The unique payin identifier that was voided or refunded. Prefix is "pyi"
      • merchant_id: The unique merchant identifier. Prefix is "mid"
      • amount: The amount refunded, in minor units. For example, 1000 is 10.00 USD.
      • currency_code: Three-letter ISO currency code, in uppercase. Currently, only USD is supported.
      • merchant_fees: Object detailing merchant fees 
        • total_amount:
          • amount: The amount, in monitor units. For example 1000 is 10.00 USD
          • currency_code: Three-letter ISO currency code, in uppercase. Currently, only USD is supported.
      • reason: The reason a refund was issued.
      • status: The status of the refund.
        • Options: CREATED, PROCESSING, SUCCEEDED, FAILED, CANCELED, IN_REVIEW
      • refusal_code: The code explaining the reason for the refusal if the payin or refund failed to process. This value will be null if the payin or refund succeeded.
      • refusal_desc: The description explaining the reason for the refusal if the payin or refund failed to process. This will be a human-readable value that may be presented to the end user. This value will be null if the payin or refund succeeded.
      • auth_code: The authorization code if the refund was approved.
      • amount_splits: The amount splits of the refund.
      • created_at: Date and time void or refund was created at in UTC RFC 3339 format.
      • updated_at: Date and time void or refund was last updated at in UTC RFC 3339 format.
    • status: The status of the payin.
      • Options: AUTHORIZED, CANCELED, CREATED, FAILED, IN_REVIEW, PRESENTING, PROCESSING, RETURNED, SUCCEEDED
    • updated_at: Date and time payin was last updated at in UTC RFC 3339 format.
    • has_chargebacks: Boolean indicating that the payin has one or more chargebacks created.
    • threeds_attempt: 3DS attempt details.
    • refusal_code: The code explaining the reason for the refusal if the payin or refund failed to process. This value will be null if the payin or refund succeeded.
      • Options: DECLINED, DO_NOT_HONOR, EXPIRED_CARD, FRAUDULENT_CARD, INCORRECT_PAYMENT_INFORMATION, INSUFFICIENT_FUNDS, INVALID_CARD_SECURITY_CODE, INVALID_EXPIRATION_DATE, INVALID_PIN, LOST_CARD, NO_CARD_NUMBER_ON_FILE_WITH_ISSUER, NO_SUCH_CARD_ISSUER, OVER_LIMIT, PROCESSING_ERROR, RESTRICTED_CARD_TYPE, RISK_DECLINE, STOLEN_CARD, THREEDS_CHALLENGE_FAILED, UNEXPECTED_PAYIN_TOKEN, UNSUPPORTED_CARD_TYPE
    • avs_result_code: The address verification service result code.
    • billing_contact: Object containing Billing contact details.
      • address_line_1: First line of street address.
      • address_line_2: Second line of street address, if required.
      • city: City for address.
      • country: 2-digit country code.
        • Find country codes here: https://www.iso.org/obp
      • email: Email address.
      • name: First and last name.
      • phone: Phone number, including extension.
      • postal_code: Postal code or ZIP code for address.
      • state: State, province, or region for address.
    • card: Card payment method details.
      • brand: Card brand.
        • Options: VISA, MASTERCARD, DISCOVER, AMERICAN_EXPRESS, OTHER
      • brand_desc: Card brand in a friendly language.
        • Options: Visa, Mastercard, Discover, American Express, Other
      • exp_month: The card expiration month.
      • exp_year: The card expiration year, in 4-digits.
      • last_4: Last 4 digits of the card number.
      • type: Card type. (CREDIT, DEBIT, or PREPAID)
    • ach: Object for account information (if ACH was the payment method)
      • account_number_last_4: The last 4 digits of the account number. 
      • routing_number: The 9-digit routing number.
      • bank_name: The bank name.
      • account_type: The account type. Defaulted to CHECKING if omitted.
        • Options: CHECKING, SAVINGS
      • account_holder_type: The account holder type.
        • Options: PERSONAL, BUSINESS
    • apple_pay: Object for Apple Pay payment method details.
      • brand: Card brand.
        • Options: VISA, MASTERCARD, DISCOVER, AMERICAN_EXPRESS, OTHER
      • brand_desc: Card brand in a friendly language.
        • Options: Visa, Mastercard, Discover, American Express, Other
      • description: A human-readable description of the payment method provided by Apple.
      • type: Card type. (CREDIT, DEBIT, or PREPAID)
    • has_ach_return: Boolean indicating that the payin has an ACH return.
    • payment_method_config_id: The unique payment method config identifier. Prefix is "pmc"
    • payment_method_id: The unique payment method identifier. Prefix is "mtd"
    • ach_return": null,
    • refundable_amount: The amount of the payin that can still be refunded, in minor units. For example, 1000 is 10.00 USD.
    • merchant_fees: Object detailing merchant fees 
      • total_amount:
        • amount: The amount, in monitor units. For example 1000 is 10.00 USD
        • currency_code: Three-letter ISO currency code, in uppercase. Currently, only USD is supported.
    • auth_code: The authorization code if the payin was approved.
    • threeds_attempt_id: The unique threeds attempt identifier. Prefix is "tds"
    • payin_config_id: The unique payin config identifier. Prefix is "cfg"
    • has_refunds: Boolean indicating that the payin has one or more refunds created.
    • amount: The amount of the payin, in minor units. For example, 1000 is 10.00 USD.
    • metadata: Object storing specific metadata for the payment. This information includes a description, job_id, org_id, and user_id who took the payment if applicable.
    • merchant_id: The unique merchant identifier. Prefix is "mid"
    • created_at: Date and time payin was created at in UTC RFC 3339 format
  • job: Object for the job, see Job Payload for details
  • org: Object for the org
    • id: the ID of the Organization
    • name: The name of the Organization
  • estimate: Object for the estimate, see Estimate Payload for details 

Event Specific Payload Examples

Below is a list of specific payloads generated for each of the events. In some cases, information, details were omitted for brevity and readability. The following string included in the example payloads signifies the payload has been omitted for brevity and readability purposes. The actual payloads will include this detailed information.


/* … */

Job Events

job.created

When a job is initially created, a payload similar to the one below will be delivered.

{

  "event_type": "job.created",

  "created": "2023-10-26T19:07:43",

  "payload": {

    "id": 127619,

    "name": "Customer Name",

    "customer_name": "Customer Name",

    "email": "customer@email.com",

    "lead_source": "Word of Mouth",

    "metadata": {},

    "created_at": "2023-10-26T19:07:41.967Z",

    "updated_at": "2023-10-26T19:07:42.373Z",

    "additional_info": null,

    "archived": false,

    "raw_state": "new",

    "pretty_state": "New",

    "address": {

      "id": 244537,

      "line_1": "5810 Corralberry Ct",

      "line_2": "",

      "city": "Carmel",

      "state": "Indiana",

      "postal_code": "46033",

      "country": "United States",

      "lat": "39.986218",

      "lon": "-86.058437",

      "created_at": "2023-10-26T19:07:42.103Z",

      "updated_at": "2023-10-26T19:07:42.103Z"

    },

    "customer_address": {

      "id": 244538,

      "line_1": "879 W Carmel Drive",

      "line_2": "",

      "city": "Carmel",

      "state": "Indiana",

      "postal_code": "46032",

      "country": "United States",

      "lat": null,

      "lon": null,

      "created_at": "2023-10-26T19:07:42.130Z",

      "updated_at": "2023-10-26T19:07:42.130Z"

    },

    "org": { "id": 2661, "name": "Company Name" },

    "job_types": [

      { "id": 107, "name": "Roofing" },

      { "id": 8, "name": "Windows" }

    ],

    "created_by": {

      "id": 2,

      "first_name": "Sales",

      "last_name": "Rep",

      "email": "salesrep@company.com"

    },

    "job_assignment": {

      "user": {

        "id": 2,

        "first_name": "Sales",

        "last_name": "Rep",

        "email": "salesrep@company.com"

      },

      "id": 137670,

      "status": "active",

      "created_at": "2023-10-26T19:07:42.054Z"

    },

    "additional_job_assignment": {

      "user": {

        "id": 3,

        "first_name": "Sales",

        "last_name": "Rep2",

        "email": "salesrep2@company.com"

      },

      "id": 137671,

      "status": "active",

      "created_at": "2023-10-28T19:07:42.054Z"

    },

    "phone_numbers": [

      { "id": 127971, "name": "Mobile", "number": "555-555-5555" },

      { "id": 127970, "name": "Office", "number": "877-320-2391" }

    ],

    "notes": [],

    "images": [],

    "documents": []

  },

  "event_id": "c7524dc5-175f-4433-aab5-6fb0e017f017"

}

job.assigned

Each time a job is assigned or reassigned to a different sales rep, a payload similar to the one below will be delivered.


{

  "event_type": "job.assigned",

  "created": "2023-10-26T19:42:23",

  "payload": {

    "id": 127619,

    "name": "Job Name",

    "customer_name": "Customer Name",

    "email": "customer@email.com",

    "lead_source": "Word of Mouth",

    "metadata": {},

    "created_at": "2023-10-26T19:07:41.967Z",

    "updated_at": "2023-10-26T19:42:21.720Z",

    "additional_info": null,

    "archived": false,

    "raw_state": "scheduled",

    "pretty_state": "Scheduled",

    "address": { /* … */ },

    "customer_address": { /* … */ },

    "org": { "id": 2661, "name": "Company Name" },

    "job_types": [

      { "id": 107, "name": "Roofing" },

      { "id": 8, "name": "Windows" }

    ],

    "created_by": { /* … */ },

    "job_assignment": {

      "user": {

        "id": 5127,

        "first_name": "Other",

        "last_name": "Rep",

        "email": "otherrep@company.com"

      },

      "id": 137671,

      "status": "active",

      "created_at": "2023-10-26T19:42:21.663Z"

    },

    "additional_job_assignment": {

      "user": {

        "id": 5128,

        "first_name": "Other",

        "last_name": "Rep2",

        "email": "otherrep2@company.com"

      },

      "id": 137679,

      "status": "active",

      "created_at": "2023-10-28T19:42:21.663Z"

    },

    "phone_numbers": [

      { "id": 127971, "name": "Mobile", "number": "555-555-5555" },

      { "id": 127970, "name": "Office", "number": "877-320-2391" }

    ],

    "notes": [],

    "images": [],

    "documents": []

  },

  "event_id": "a9d7d392-4c11-4440-83df-43b1ca74f31d"

}

job.updated

Each time a job is updated, a payload similar to the one below will be delivered.


{

  "event_type": "job.updated",

  "created": "2023-10-26T19:09:48",

  "payload": {

    "id": 127619,

    "name": "Job Name",

    "customer_name": "Customer Name",

    "email": "customer@email.com",

    "lead_source": "Word of Mouth",

    "metadata": {},

    "created_at": "2023-10-26T19:07:41.967Z",

    "updated_at": "2023-10-26T19:09:46.776Z",

    "additional_info": null,

    "archived": false,

    "raw_state": "new",

    "pretty_state": "New",

    "address": { /* … */ },

    "customer_address": { /* … */ },

    "org": { "id": 2661, "name": "Company Name" },

    "job_types": [

      { "id": 107, "name": "Roofing" },

      { "id": 8, "name": "Windows" }

    ],

    "created_by": { /* … */ },

    "job_assignment": { /* … */ },

    "additional_job_assignment": { /* … */ },

    "phone_numbers": [ /* … */ ],

    "notes": [],

    "images": [],

    "documents": []

  },

  "event_id": "4e3d24aa-8ca6-40a1-838b-14182f1f769e"

}

job.image_created

Each time a photo is created on a job, a payload similar to the one below will be delivered.


Note: All images associated with the job are included in the payload.


{

  "event_type": "job.image_created",

  "created": "2023-10-26T19:12:39",

  "payload": {

    "id": 127619,

    "name": "Job Name",

    "customer_name": "Customer Name",

    "email": "customer@email.com",

    "lead_source": "Word of Mouth",

    "metadata": {},

    "created_at": "2023-10-26T19:07:41.967Z",

    "updated_at": "2023-10-26T19:12:17.620Z",

    "additional_info": null,

    "archived": false,

    "raw_state": "new",

    "pretty_state": "New",

    "address": { /* … */ },

    "customer_address": { /* … */ },

    "org": { "id": 2661, "name": "Company Name" },

    "job_types": [ /* … */ ],

    "created_by": { /* … */ },

    "job_assignment": { /* … */ },

    "additional_job_assignment": { /* … */ },

    "phone_numbers": [ /* … */ ],

    "notes": [ /* … */ ],

    "images": [

      {

        "id": 6334200,

        "name": "front-angle-right.jpg",

        "api_authenticated_url": "https://storage-staging.remotesf.com/api/v2/images/6334200/url",

        "created_at": "2023-10-26T19:12:16.755Z",

        "updated_at": "2023-10-26T19:12:17.615Z",

        "presigned_url": "https://rsfstaging.s3.us-east-2.amazonaws.com/uploads/image/file/6334200/front-angle-right.jpg?X-Amz-Expires=1200\u0026X-Amz-Date=20231026T191239Z\u0026X-Amz-Algorithm=AWS4-HMAC-SHA256\u0026X-Amz-Credential=AKIAIPQPFDQ2O77AFQPQ%2F20231026%2Fus-east-2%2Fs3%2Faws4_request\u0026X-Amz-SignedHeaders=host\u0026X-Amz-Signature=234d7bbbe8fde53d1877b21b5214040e0e88a64b4aaff12c513bfa64f039b16c"

      }

    ],

    "documents": [ /* … */ ]

  },

  "event_id": "d471531e-860c-49ad-a6eb-b0237ed495a3"

}

job.document_created

Each time a document is created on a job, a payload similar to the one below will be delivered.


Note: All documents associated with the job are included in the payload.


{

  "event_type": "job.document_created",

  "created": "2023-10-26T19:14:57",

  "payload": {

    "id": 127619,

    "name": "Job Name",

    "customer_name": "Customer Name",

    "email": "customer@email.com",

    "lead_source": "Word of Mouth",

    "metadata": {},

    "created_at": "2023-10-26T19:07:41.967Z",

    "updated_at": "2023-10-26T19:14:56.124Z",

    "additional_info": null,

    "archived": false,

    "raw_state": "new",

    "pretty_state": "New",

    "address": { /* … */ },

    "customer_address": { /* … */ },

    "org": { "id": 2661, "name": "Company Name" },

    "job_types": [ /* … */ ],

    "created_by": { /* … */ },

    "job_assignment": { /* … */ },

    "additional_job_assignment": { /* … */ },

    "phone_numbers": [ /* … */ ],

    "notes": [ /* … */ ],

    "images": [ /* … */ ],

    "documents": [

      {

        "id": 159542,

        "name": "Sold Job Cover Sheet.pdf",

        "api_authenticated_url": "https://storage-staging.remotesf.com/api/v2/documents/159542/url",

        "created_at": "2023-10-26T19:14:55.585Z",

        "updated_at": "2023-10-26T19:14:56.118Z",

        "presigned_url": "https://occstaging.s3.us-east-2.amazonaws.com/uploads/document/file/159542/Sold%20Job%20Cover%20Sheet.pdf?X-Amz-Expires=1200\u0026X-Amz-Date=20231026T191457Z\u0026X-Amz-Algorithm=AWS4-HMAC-SHA256\u0026X-Amz-Credential=AKIAIPQPFDQ2O77AFQPQ%2F20231026%2Fus-east-2%2Fs3%2Faws4_request\u0026X-Amz-SignedHeaders=host\u0026X-Amz-Signature=335842baf208fdc3c8a6139d93e14987ee14b99bd375dd77fe5c0e5473aeda03"

      }

    ]

  },

  "event_id": "3204d6ab-2b15-43a8-a65d-61060357d223"

}

job.status_changed

Each time a job’s status is changed, a payload similar to the one below will be delivered.


{

  "event_type": "job.status_changed",

  "created": "2023-10-26T19:17:06",

  "payload": {

    "id": 127619,

    "name": "Job Name",

    "customer_name": "Customer Name",

    "email": "customer@email.com",

    "lead_source": "Word of Mouth",

    "metadata": {},

    "created_at": "2023-10-26T19:07:41.967Z",

    "updated_at": "2023-10-26T19:17:05.788Z",

    "additional_info": null,

    "archived": false,

    "raw_state": "scheduled",

    "pretty_state": "Scheduled",

    "address": { /* … */ },

    "customer_address": { /* … */ },

    "org": { "id": 2661, "name": "Company Name" },

    "job_types": [ /* … */ ],

    "created_by": { /* … */ },

    "job_assignment": { /* … */ },

    "additional_job_assignment": { /* … */ },

    "phone_numbers": [ /* … */ ],

    "notes": [],

    "images": [ /* … */ ],

    "documents": [ /* … */ ]

  },

  "event_id": "abe6e7ef-3306-4370-9f4a-8804b2fe1b0a"

}

Estimate Events

estimate.created

When an estimate is created on a job, a payload similar to the one below is delivered.


{

  "event_type": "estimate.created",

  "created": "2023-10-26T19:20:24",

  "payload": {

    "id": 12420,

    "name": "12420",

    "subtotal": 36722.64,

    "tax_rate": 0.0,

    "tax_total": 0.0,

    "discount": 0.0,

    "taxable_amount": 0.0,

    "total": 36722.64,

    "labor_markup": 0,

    "product_markup”: 0,

    "estimated_start": null,

    "estimated_end": null,

    "updated_at": "2023-10-26T19:20:22.902Z",

    "created_at": "2023-10-26T19:20:22.678Z",

    "archived": false,

    "estimated_commission": null,

    "job": { /* … */ },

    "discounts": [

      {

        "name": "Cash/Check",

        "amount": 3,

        "calculated": 1101.68,

        "limit": 0,

        "kind": "percent"

      },

      {

        "name": "Friends and Family",

        "amount": 3,

        "calculated": 1068.63,

        "limit": 0,

        "kind": "percent"

      },

      {

        "name": "Patriot",

        "amount": 10,

        "calculated": 100,

        "limit": 100,

        "kind": "percent_limit"

      }

    ],

    "payment_terms": {

      "name": "",

      "description": "",

      "kind": null,

      "financed_amount": 36722.64,

      "payments": [

        {

          "amount": 30,

          "type": "percent",

          "description": "Upon Acceptance",

          "calculated": 11016.79

        },

        {

          "amount": 70,

          "type": "percent",

          "description": "Upon Completion",

          "calculated": 25705.85

        }

      ]

    },

    "groups": [

      {

        "id": 26640,

        "included": true,

        "name": "Timberline Roof",

        "subtotal": 20008.9,

        "total": 20008.9,

        "line_items": [

          {

            "id": 24772,

            "name": "GAF Shingles \u003e Timberline HD",

            "description": "Timberline HD - Architectural shingle combining durability, beauty, and performance. Wood shake look. this is the testing description just to test the description. if it is overlapping with the image or not. i think the text is now enough.",

            "product_price": 577.5,

            "labor_price": 150.0,

            "cost": 200.0,

            "quantity": 21.0,

            "ext_price": 15277.5,

            "uom": "sq",

            "sku": "",

            "options": []

          },

          {

            "id": 24773,

            "name": "Roofing Accessories \u003e Hip and Ridge Cap Shingles \u003e Seal-A-Ridge",

            "description": "A high-quality, cost effective ridge cap that helps protect against leaks at the hips and ridges, and complements the look of your GAF shingles",

            "product_price": 7.8,

            "labor_price": 0.0,

            "cost": 0.0,

            "quantity": 96.92,

            "ext_price": 755.98,

            "uom": "lft",

            "sku": "",

            "options": []

          },

          {

            "id": 24774,

            "name": "Roofing Accessories \u003e Leak Barriers \u003e StormGuard Film-Surfaced Leak Barrier",

            "description": "10 ft section",

            "product_price": 32.0,

            "labor_price": 0.0,

            "cost": 0.0,

            "quantity": 30.0,

            "ext_price": 960.0,

            "uom": "ea",

            "sku": "",

            "options": []

          },

          {

            "id": 24775,

            "name": "Roofing Accessories \u003e Roof Deck Protection \u003e FeltBuster High-Traction Synthetic Roofing Felt",

            "description": null,

            "product_price": 0.95,

            "labor_price": 0.0,

            "cost": 0.0,

            "quantity": 2218.7,

            "ext_price": 2107.77,

            "uom": "sqft",

            "sku": "",

            "options": []

          },

          {

            "id": 24776,

            "name": "Tear Off \u003e Extra Layers Tear Off",

            "description": null,

            "product_price": 0.0,

            "labor_price": 0.45,

            "cost": 0.0,

            "quantity": 2017.0,

            "ext_price": 907.65,

            "uom": "sqft",

            "sku": "",

            "options": []

          }

        ]

      },

      {

        "id": 26641,

        "included": true,

        "name": "Windows",

        "subtotal": 16713.74,

        "total": 16713.74,

        "line_items": [

          {

            "id": 24777,

            "name": "Beechworth \u003e Windows \u003e Double Hung \u003e 54-65 UI",

            "description": "STANDARD FEATURES\n- Exterior Fiberglass\n- Interior Pine (Unfinished)\n- Double Glass\n-  Cardinal LoE-366\n-  Argon Gas\n-  Full Screen\n-  .27 U-Factor\n-  Dual Cam Locks\n-  Tilt-Latch\n-  Wool Pile Gaskets\n-  Interlocking Meeting Rail\n- Recessed Lower Sash\n- Block \u0026 Tackle Weight Management System",

            "product_price": 684.63,

            "labor_price": 0.0,

            "cost": 0.0,

            "quantity": 3.0,

            "ext_price": 2053.89,

            "uom": "ea",

            "sku": "",

            "options": [

              {

                "id": 3851,

                "name": "SDL (Per Lite)",

                "product_option_group_name": "Grille Options",

                "product_price": 31.88,

                "labor_price": 0.0,

                "cost": 0.0,

                "ext_price": 95.64,

                "price": "31.88",

                "quantity": 1.0,

                "uom": "ea",

                "sku": ""

              },

              {

                "id": 3852,

                "name": "Tempered Standard Glass",

                "product_option_group_name": "Glass Options",

                "product_price": 51.05,

                "labor_price": 0.0,

                "cost": 0.0,

                "ext_price": 153.15,

                "price": "51.05",

                "quantity": 1.0,

                "uom": "ea",

                "sku": ""

              },

              {

                "id": 3853,

                "name": "Mulling (Per mull)",

                "product_option_group_name": "Other Options",

                "product_price": 80.88,

                "labor_price": 0.0,

                "cost": 0.0,

                "ext_price": 242.64,

                "price": "80.88",

                "quantity": 1.0,

                "uom": "ea",

                "sku": ""

              },

              {

                "id": 3854,

                "name": "Brushed Nickel Hardware",

                "product_option_group_name": "Hardware Options",

                "product_price": 75.0,

                "labor_price": 0.0,

                "cost": 37.5,

                "ext_price": 225.0,

                "price": "75.0",

                "quantity": 1.0,

                "uom": "ea",

                "sku": ""

              }

            ]

          },

          {

            "id": 24778,

            "name": "Beechworth \u003e Windows \u003e Double Hung \u003e 66-75 UI",

            "description": "STANDARD FEATURES\n- Exterior Fiberglass\n- Interior Pine (Unfinished)\n- Double Glass\n-  Cardinal LoE-366\n-  Argon Gas\n-  Full Screen\n-  .27 U-Factor\n-  Dual Cam Locks\n-  Tilt-Latch\n-  Wool Pile Gaskets\n-  Interlocking Meeting Rail\n- Recessed Lower Sash\n- Block \u0026 Tackle Weight Management System",

            "product_price": 755.53,

            "labor_price": 0.0,

            "cost": 0.0,

            "quantity": 8.0,

            "ext_price": 6044.24,

            "uom": "ea",

            "sku": "",

            "options": [

              {

                "id": 3855,

                "name": "SDL (Per Lite)",

                "product_option_group_name": "Grille Options",

                "product_price": 31.88,

                "labor_price": 0.0,

                "cost": 0.0,

                "ext_price": 255.04,

                "price": "31.88",

                "quantity": 1.0,

                "uom": "ea",

                "sku": ""

              },

              {

                "id": 3856,

                "name": "Tempered Standard Glass",

                "product_option_group_name": "Glass Options",

                "product_price": 64.75,

                "labor_price": 0.0,

                "cost": 0.0,

                "ext_price": 518.0,

                "price": "64.75",

                "quantity": 1.0,

                "uom": "ea",

                "sku": ""

              },

              {

                "id": 3857,

                "name": "Brushed Nickel Hardware",

                "product_option_group_name": "Hardware Options",

                "product_price": 75.0,

                "labor_price": 0.0,

                "cost": 37.5,

                "ext_price": 600.0,

                "price": "75.0",

                "quantity": 1.0,

                "uom": "ea",

                "sku": ""

              }

            ]

          },

          {

            "id": 24779,

            "name": "Beechworth \u003e Windows \u003e Double Hung \u003e 83-89 UI",

            "description": "STANDARD FEATURES\n- Exterior Fiberglass\n- Interior Pine (Unfinished)\n- Double Glass\n-  Cardinal LoE-366\n-  Argon Gas\n-  Full Screen\n-  .27 U-Factor\n-  Dual Cam Locks\n-  Tilt-Latch\n-  Wool Pile Gaskets\n-  Interlocking Meeting Rail\n- Recessed Lower Sash\n- Block \u0026 Tackle Weight Management System",

            "product_price": 892.48,

            "labor_price": 0.0,

            "cost": 0.0,

            "quantity": 6.0,

            "ext_price": 5354.88,

            "uom": "ea",

            "sku": "",

            "options": [

              {

                "id": 3858,

                "name": "SDL (Per Lite)",

                "product_option_group_name": "Grille Options",

                "product_price": 31.88,

                "labor_price": 0.0,

                "cost": 0.0,

                "ext_price": 191.28,

                "price": "31.88",

                "quantity": 1.0,

                "uom": "ea",

                "sku": ""

              },

              {

                "id": 3859,

                "name": "Tempered Standard Glass",

                "product_option_group_name": "Glass Options",

                "product_price": 88.33,

                "labor_price": 0.0,

                "cost": 0.0,

                "ext_price": 529.98,

                "price": "88.33",

                "quantity": 1.0,

                "uom": "ea",

                "sku": ""

              },

              {

                "id": 3860,

                "name": "Brushed Nickel Hardware",

                "product_option_group_name": "Hardware Options",

                "product_price": 75.0,

                "labor_price": 0.0,

                "cost": 37.5,

                "ext_price": 450.0,

                "price": "75.0",

                "quantity": 1.0,

                "uom": "ea",

                "sku": ""

              }

            ]

          }

        ]

      },

      {

        "id": 26642,

        "included": false,

        "name": "Optional Items",

        "subtotal": 0.0,

        "total": 0.0,

        "line_items": []

      }

    ]

  },

  "event_id": "50ea4d34-9099-46d2-918a-436abf6be78a"

}

estimate.updated

Each time an estimate is updated, a payload similar to the one below will be delivered.


{

  "event_type": "estimate.updated",

  "created": "2023-10-26T19:22:29",

  "payload": {

    "id": 12420,

    "name": "12420",

    "subtotal": 36722.64,

    "tax_rate": 0.0,

    "tax_total": 0.0,

    "discount": 2270.31,

    "taxable_amount": 0.0,

    "total": 34452.33,

    "labor_markup": 0,

    "product_markup”: 0,

    "estimated_start": "2023-11-17",

    "estimated_end": "2023-12-08",

    "updated_at": "2023-10-26T19:22:28.307Z",

    "created_at": "2023-10-26T19:20:22.678Z",

    "archived": false,

    "estimated_commission": null,

    "job": { /* … */ },

    "discounts": [ /* … */ ],

    "payment_terms": { /* … */ },

    "groups": [ /* … */ ]

  },

  "event_id": "e5e5b9ca-061c-4ea1-8624-12440ea30693"

}

estimate.manually_triggered

There is an option which can be turned on via a user permission which will allow someone to “manually trigger” an estimate event which will send over a payload similar to the one below.


{

  "event_type": "estimate.manually_triggered",

  "created": "2024-02-12T22:22:31",

  "payload": {

    "id": 12420,

    "name": "12420",

    "subtotal": 36722.64,

    "tax_rate": 0.0,

    "tax_total": 0.0,

    "discount": 2270.31,

    "taxable_amount": 0.0,

    "total": 34452.33,

    "labor_markup": 0,

    "product_markup”: 0,

    "estimated_start": "2023-11-17",

    "estimated_end": "2023-12-08",

    "updated_at": "2023-10-26T19:22:28.307Z",

    "created_at": "2023-10-26T19:20:22.678Z",

    "archived": false,

    "estimated_commission": null,

    "job": { /* … */ },

    "discounts": [ /* … */ ],

    "payment_terms": { /* … */ },

    "groups": [ /* … */ ]

  },

  "event_id": "4d8d5c11-ea01-4fa9-b3c1-ec5ec171e4f5"

}

Signed Document Events

signed_document.signed

Once all parties/signers have fully executed the document, a payload similar to the one below will be delivered.


{

  "event_type": "signed_document.signed",

  "created": "2023-10-26T19:24:50",

  "payload": {

    "id": 12420,

    "name": "12420",

    "subtotal": 36722.64,

    "tax_rate": 0.0,

    "tax_total": 0.0,

    "discount": 2270.31,

    "taxable_amount": 0.0,

    "total": 34452.33,

    "labor_markup": 0,

    "product_markup”: 0,

    "estimated_start": "2023-11-17",

    "estimated_end": "2023-12-08",

    "updated_at": "2023-10-26T19:22:28.307Z",

    "created_at": "2023-10-26T19:20:22.678Z",

    "archived": false,

    "estimated_commission": null,

    "job": { /* … */ },

    "discounts": [ /* … */ ],

    "payment_terms": { /* … */ },

    "signed_document": {

      "id": 7101,

      "name": "Signed_Job Name - 10-26-2023 15:24 - Agreement.pdf",

      "api_authenticated_url": "https://storage-staging.remotesf.com/api/v2/documents/159545/url",

      "presigned_url": "https://occstaging.s3.us-east-2.amazonaws.com/uploads/document/file/159545/Signed_Job_Name_-_10-26-2023_15_24_-_Agreement.pdf?X-Amz-Expires=300\u0026X-Amz-Date=20231026T192450Z\u0026X-Amz-Algorithm=AWS4-HMAC-SHA256\u0026X-Amz-Credential=AKIAIPQPFDQ2O77AFQPQ%2F20231026%2Fus-east-2%2Fs3%2Faws4_request\u0026X-Amz-SignedHeaders=host\u0026X-Amz-Signature=5fa4ead6f6348f97acb74b8dd1796d8a409ee4a2d8e25a2e64b3dd3537056af4"

    },

    "groups": [ /* … */ ]

  },

  "event_id": "71079a62-aeca-4519-b635-895f47ad624a"

}

Signable Document Events

signable_document.signed

When a signable document has been fully executed by all parties/signers, a payload similar to the one below will be delivered.


{

  "event_type": "signable_document.signed",

  "created": "2023-10-26T19:29:25",

  "payload": {

    "job": { /* … */ },

    "signable_document": {

      "id": 7102,

      "name": "Signed_One_Off_Document.pdf",

      "api_authenticated_url": "https://storage-staging.remotesf.com/api/v2/documents/159551/url",

      "presigned_url": "https://occstaging.s3.us-east-2.amazonaws.com/uploads/document/file/159551/Signed_One_Off_Document.pdf?X-Amz-Expires=300\u0026X-Amz-Date=20231026T192925Z\u0026X-Amz-Algorithm=AWS4-HMAC-SHA256\u0026X-Amz-Credential=AKIAIPQPFDQ2O77AFQPQ%2F20231026%2Fus-east-2%2Fs3%2Faws4_request\u0026X-Amz-SignedHeaders=host\u0026X-Amz-Signature=458120e64beabc90844049e2988fac4835b8012fa87a446447057b07cf9975e0"

    }

  },

  "event_id": "3bca5b01-5f8e-42e2-9268-7817ea58ebb6"

}

Payment Events

payment.created

When a payment is created a payload similar to the one below is delivered.

{

    "event_type": "payment.created",

    "created": "2024-11-13T20:45:49",

    "payload": {

        "customer_name": null,

        "payment_amount": "987.12",

        "payment_status": "Authorized",

        "card_type": null,

        "payment_kind": "one_click_payments",

        "date_completed": "2024-11-13T20:45:46Z",

        "payin": {

            "chargebacks": [],

            "method_metadata": {},

            "refusal_desc": null,

            "detailed_refusal_code": null,

            "cvc_result_code": "M",

            "device_registration_id": null,

            "payin_config": {

                "amount": 98712,

                "currency_code": "USD",

                "payin_config_id": "abc123"

            },

            "is_partially_authorized": false,

            "detailed_refusal_desc": null,

            "non_refundable_reason_code": null,

            "method_type": "CARD",

            "billing_type": "NET",

            "payin_id": "pyi_abc123",

            "idempotency_key": "xyz123",

            "refunds": [],

            "status": "PROCESSING",

            "updated_at": "2024-11-13T20:45:46.773168Z",

            "has_chargebacks": false,

            "threeds_attempt": null,

            "refusal_code": null,

            "avs_result_code": "Y",

            "billing_contact": {

                "address_line_1": "5810 Corralbery Ct",

                "address_line_2": null,

                "city": "Carmel",

                "country": null,

                "email": "customer@email.com",

                "name": "Customer Name",

                "phone": null,

                "postal_code": "46033",

                "state": "IN"

            },

            "card": {

                "brand": "AMERICAN_EXPRESS",

                "brand_desc": "American Express",

                "exp_month": 12,

                "exp_year": 2030,

                "last_4": "0005",

                "type": "CREDIT"

            },

            "apple_pay": null,

            "has_ach_return": false,

            "payment_method_config_id": "pmc_abc123",

            "payment_method_id": "mtd_abc123",

            "device_data": null,

            "ach_return": null,

            "refundable_amount": 98712,

            "merchant_fees": {

                "total_amount": {

                    "amount": 2991,

                    "currency_code": "USD"

                }

            },

            "currency_code": "USD",

            "auth_code": "approved",

            "threeds_attempt_id": null,

            "payin_config_id": "cfg_abc123",

            "ach": null,

            "has_refunds": false,

            "amount": 98712,

            "metadata": {

                "description": "Customer Name",

                "job_id": 127619,

                "org_id": 2661,

                "user_id": 5127

            },

            "merchant_id": "mid_abc123",

            "created_at": "2024-11-13T20:45:46.025163Z",

            "result_code": ""

        },
        "org": { "id": 2661, "name": "Company Name" },

 "job": { /* … */ },

        "estimate": {}

    },

    "event_id": "bcd10584-526b-4cf4-b478-81fb73f737b7"

}


payment.refunded

When a payment is refunded a payload similar to the one below is delivered.

{

  "event_type": "payment.refunded",

  "created": "2023-10-26T19:29:25",


payment.chargeback

When a chargeback is created a payload similar to the one below is delivered.

Appendix

Accessing Documents/Images

A separate Postman Collection with details on authentication and access to the objects (documents, images, signed_documents, and signable_documents) located at api_authenticated_url values is available upon request.