API Documentation

API Endpoint

Pulses

Pulses

A Pulse is an automated report delivery service that makes it easy to stay updated without having to manually check your reports. You can set up Pulses for any of your reports, choosing how often you’d like to receive them — whether it’s daily, weekly, bi-weekly, or monthly. This way, important data arrives straight to your inbox or Slack, keeping you informed at your preferred schedule.

More about Pulses in our help center

Supported filter params

  • filter_id (array)
GET /api/v2/pulses
Requestsreturns pulses

GET  /api/v2/pulses

Headers
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Content-Type: application/vnd.api+json
Responses200
Headers
Content-Type: application/vnd.api+json; charset=utf-8
Body
{
  "data": [
    {
      "id": "1",
      "type": "pulses",
      "attributes": {
        "deactivated_at": null,
        "document_format_id": 1,
        "export_params": {},
        "repeat_schedule_id": 1,
        "schedule_day_id": null,
        "schedule_frame_id": null,
        "schedule_hour": 9,
        "skip_if_empty": true,
        "slack_channel": null,
        "test_pulse": false,
        "type_id": 1,
        "recipients": []
      },
      "relationships": {
        "organization": {
          "data": {
            "type": "organizations",
            "id": "1021"
          }
        },
        "creator": {
          "meta": {
            "included": false
          }
        },
        "filter": {
          "meta": {
            "included": false
          }
        },
        "memberships": {
          "meta": {
            "included": false
          }
        }
      }
    },
    {
      "id": "2",
      "type": "pulses",
      "attributes": {
        "deactivated_at": null,
        "document_format_id": 1,
        "export_params": {},
        "repeat_schedule_id": 1,
        "schedule_day_id": null,
        "schedule_frame_id": null,
        "schedule_hour": 9,
        "skip_if_empty": true,
        "slack_channel": null,
        "test_pulse": false,
        "type_id": 1,
        "recipients": []
      },
      "relationships": {
        "organization": {
          "data": {
            "type": "organizations",
            "id": "1021"
          }
        },
        "creator": {
          "meta": {
            "included": false
          }
        },
        "filter": {
          "meta": {
            "included": false
          }
        },
        "memberships": {
          "meta": {
            "included": false
          }
        }
      }
    },
    {
      "id": "3",
      "type": "pulses",
      "attributes": {
        "deactivated_at": null,
        "document_format_id": 1,
        "export_params": {},
        "repeat_schedule_id": 1,
        "schedule_day_id": null,
        "schedule_frame_id": null,
        "schedule_hour": 9,
        "skip_if_empty": true,
        "slack_channel": null,
        "test_pulse": false,
        "type_id": 1,
        "recipients": []
      },
      "relationships": {
        "organization": {
          "data": {
            "type": "organizations",
            "id": "1021"
          }
        },
        "creator": {
          "meta": {
            "included": false
          }
        },
        "filter": {
          "meta": {
            "included": false
          }
        },
        "memberships": {
          "meta": {
            "included": false
          }
        }
      }
    }
  ],
  "links": {
    "first": "http://api-test.productive.io/api/v2/pulses?page%5Bnumber%5D=1&page%5Bsize%5D=30",
    "last": "http://api-test.productive.io/api/v2/pulses?page%5Bnumber%5D=1&page%5Bsize%5D=30"
  },
  "meta": {
    "current_page": 1,
    "total_pages": 1,
    "total_count": 3,
    "page_size": 30,
    "max_page_size": 200
  }
}

Get pulses
GET/api/v2/pulses


GET /api/v2/pulses/1
Requestsreturns pulse

GET  /api/v2/pulses/4

Headers
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Content-Type: application/vnd.api+json
Responses200
Headers
Content-Type: application/vnd.api+json; charset=utf-8
Body
{
  "data": {
    "id": "4",
    "type": "pulses",
    "attributes": {
      "deactivated_at": null,
      "document_format_id": 1,
      "export_params": {},
      "repeat_schedule_id": 1,
      "schedule_day_id": null,
      "schedule_frame_id": null,
      "schedule_hour": 9,
      "skip_if_empty": true,
      "slack_channel": null,
      "test_pulse": false,
      "type_id": 1,
      "recipients": []
    },
    "relationships": {
      "organization": {
        "data": {
          "type": "organizations",
          "id": "1022"
        }
      },
      "creator": {
        "meta": {
          "included": false
        }
      },
      "filter": {
        "meta": {
          "included": false
        }
      },
      "memberships": {
        "meta": {
          "included": false
        }
      }
    }
  },
  "meta": {}
}

Gets a pulse
GET/api/v2/pulses/{id}

URI Parameters
HideShow
id
number (required) Example: 1

pulse id


POST /api/v2/pulses
Requestscreates the pulsereturns error

POST  /api/v2/pulses

Headers
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Content-Type: application/vnd.api+json
Body
{
  "data": {
    "type": "pulses",
    "attributes": {
      "id": null,
      "account_id": 1023,
      "filter_id": 58,
      "created_at": null,
      "updated_at": null,
      "deleted_at": null,
      "skip_if_empty": true,
      "repeat_schedule_id": 1,
      "schedule_hour": 9,
      "schedule_day_id": null,
      "schedule_frame_id": null,
      "creator_id": 3817,
      "updater_id": null,
      "export_params": {},
      "document_format_id": 1,
      "type_id": 1,
      "slack_channel": null,
      "test_pulse": false,
      "deactivated_at": null,
      "last_scheduled_at": null,
      "version": null,
      "recipients": [
        "admin@productive.io"
      ]
    }
  }
}
Responses201
Headers
Content-Type: application/vnd.api+json; charset=utf-8
Body
{
  "data": {
    "id": "5",
    "type": "pulses",
    "attributes": {
      "deactivated_at": null,
      "document_format_id": 1,
      "export_params": {},
      "repeat_schedule_id": 1,
      "schedule_day_id": null,
      "schedule_frame_id": null,
      "schedule_hour": 9,
      "skip_if_empty": true,
      "slack_channel": null,
      "test_pulse": false,
      "type_id": 1,
      "recipients": [
        "admin@productive.io"
      ]
    },
    "relationships": {
      "organization": {
        "data": {
          "type": "organizations",
          "id": "1023"
        }
      },
      "creator": {
        "meta": {
          "included": false
        }
      },
      "filter": {
        "meta": {
          "included": false
        }
      },
      "memberships": {
        "meta": {
          "included": false
        }
      }
    }
  },
  "meta": {}
}

POST  /api/v2/pulses

Headers
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Content-Type: application/vnd.api+json
Body
{
  "data": {
    "type": "pulses",
    "attributes": {
      "id": null,
      "account_id": 1033,
      "filter_id": 0,
      "created_at": null,
      "updated_at": null,
      "deleted_at": null,
      "skip_if_empty": true,
      "repeat_schedule_id": 1,
      "schedule_hour": 9,
      "schedule_day_id": null,
      "schedule_frame_id": null,
      "creator_id": 3837,
      "updater_id": null,
      "export_params": {},
      "document_format_id": 1,
      "type_id": 1,
      "slack_channel": null,
      "test_pulse": false,
      "deactivated_at": null,
      "last_scheduled_at": null,
      "version": null,
      "recipients": [
        "admin@productive.io"
      ]
    }
  }
}
Responses422
Headers
Content-Type: application/vnd.api+json; charset=utf-8
Body
{
  "errors": [
    {
      "status": "422",
      "code": "invalid_attribute",
      "title": "Invalid Attribute",
      "detail": "attribute is invalid",
      "source": {
        "pointer": "data/attributes/filter"
      }
    }
  ]
}

Creates a pulse
POST/api/v2/pulses

URI Parameters
HideShow
filter_id
number (required) Example: 1

filter id

type_id
number (optional) Example: 1

how is the pulse delivered (1: email - default, 2: slack)

skip_if_empty
boolean (required) Example: true

if set to true, pulse won’t be sent when there is no data in the report

repeat_schedule_id
number (required) Example: 1

how often is the pulse sent (1: daily, 2: weekly, 3: monthly)

schedule_hour
number (required) Example: 9

time the pulse is sent (0-23)

schedule_day_id
number (required) Example: 1

day in week when the pulse is sent (1: monday, …, 7: sunday)

schedule_frame_id
number (required) Example: 1

when pulse is sent monthly, frame determins if sent on first(id: 1)/last(id: 2) schedule_day of the month, or in the middle(id: 3) of the month (15th)


PATCH /api/v2/pulses/1
Requestsupdates pulsereturns error

PATCH  /api/v2/pulses/10

Headers
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Content-Type: application/vnd.api+json
Body
{
  "data": {
    "type": "pulses",
    "attributes": {
      "schedule_hour": 15,
      "recipients": [
        "admin@productive.io"
      ]
    }
  }
}
Responses200
Headers
Content-Type: application/vnd.api+json; charset=utf-8
Body
{
  "data": {
    "id": "10",
    "type": "pulses",
    "attributes": {
      "deactivated_at": null,
      "document_format_id": 1,
      "export_params": {},
      "repeat_schedule_id": 1,
      "schedule_day_id": null,
      "schedule_frame_id": null,
      "schedule_hour": 15,
      "skip_if_empty": true,
      "slack_channel": null,
      "test_pulse": false,
      "type_id": 1,
      "recipients": [
        "admin@productive.io"
      ]
    },
    "relationships": {
      "organization": {
        "data": {
          "type": "organizations",
          "id": "1035"
        }
      },
      "creator": {
        "meta": {
          "included": false
        }
      },
      "filter": {
        "meta": {
          "included": false
        }
      },
      "memberships": {
        "meta": {
          "included": false
        }
      }
    }
  },
  "meta": {}
}

PATCH  /api/v2/pulses/11

Headers
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Content-Type: application/vnd.api+json
Body
{
  "data": {
    "type": "pulses",
    "attributes": {
      "schedule_hour": null
    }
  }
}
Responses422
Headers
Content-Type: application/vnd.api+json; charset=utf-8
Body
{
  "errors": [
    {
      "status": "422",
      "code": "invalid_attribute",
      "title": "Invalid Attribute",
      "detail": "can't be blank",
      "source": {
        "pointer": "data/attributes/schedule_hour"
      }
    },
    {
      "status": "422",
      "code": "invalid_attribute",
      "title": "Invalid Attribute",
      "detail": "is not included in the list",
      "source": {
        "pointer": "data/attributes/schedule_hour"
      }
    }
  ]
}

Updates a pulse
PATCH/api/v2/pulses/{id}

URI Parameters
HideShow
id
number (required) Example: 1

pulse id


DELETE /api/v2/pulses/1
Requestsdeletes pulse

DELETE  /api/v2/pulses/13

Headers
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Content-Type: application/vnd.api+json
Responses204
This response has no content.

Deletes a pulse
DELETE/api/v2/pulses/{id}

URI Parameters
HideShow
id
number (required) Example: 1

pulse id


Generated by aglio on 26 Jul 2025