Introduction

The Follow API is organized around REST. Our API is designed to have predictable, resource-oriented URLs and to use HTTP response codes to indicate API errors. We use built-in HTTP features, like HTTP authentication and HTTP verbs, which can be understood by off-the-shelf HTTP clients, and we support cross-origin resource sharing to allow you to interact securely with our API from a client-side web application (though you should remember that you should never expose your secret API key in any public website's client-side code). JSON will be returned in all responses from the API, including errors.

We've made a publically avaliable dashboard to view the uptime status of our API at status.follow.net.
API Endpoint
https://api.follow.net
Summary of Resource URL Patterns
  • /v3/me
  • /v3/users
  • /v3/emails
  • /v3/emails/{email_id}
  • /v3/usage
  • /v3/domain_usages
  • /v3/premium_usages/{premium_usage_id}
  • /v3/premium_usages
  • /v3/notifications
  • /v3/follow_notifications/{follow_notification_id}
  • /v3/follow_notifications
  • /v3/referrals
  • /v3/rewards
  • /v3/earnings
  • /v3/commissions
  • /v3/plans/{plan_id}
  • /v3/plans
  • /v3/plan_groups/{plan_group_id}
  • /v3/plan_groups
  • /v3/portfolios
  • /v3/portfolios/{portfolio_id}
  • /v3/portfolios/{portfolio_id}/members
  • /v3/portfolios/{portfolio_id}/members/{member_id}/reinvite
  • /v3/portfolios/{portfolio_id}/members/{member_id}
  • /v3/portfolios/{portfolio_id}/follows
  • /v3/portfolios/{portfolio_id}/follows/{follow_id}
  • /v3/portfolios/{portfolio_id}/tags
  • /v3/portfolios/{portfolio_id}/tags/{tag_id}
  • /v3/portfolios/{portfolio_id}/tags/{tag_id}/follows
  • /v3/portfolios/{portfolio_id}/follows/{follow_id}/tags
  • /v3/portfolios/{portfolio_id}/follows/{follow_id}/tags/{tag_id}
  • /v3/domains/{domain_name}
  • /v3/domains
  • /v3/portfolios/{portfolio_id}/domains/{domain_name}/reverseips
  • /v3/stories
  • /v3/story_types
  • /v3/events/{event_id}
  • /v3/event_types
  • /v3/webhooks
  • /v3/webhooks/{webhook_id}

Terms of Use

Please see our API terms of use here - follow.net/terms#api. Those are the default terms, please email us if you'd like to work out a custom API deal. We look forward to speaking with you!

Authentication

You authenticate to the Follow API by providing one of your API keys in the request. You can manage your API keys from your account. You can have multiple API keys active at one time. Your API keys carry many privileges, so be sure to keep them secret!
Authentication to the API occurs via HTTP Basic Auth. Provide your API key as the basic auth username. You do not need to provide a password.
All API requests must be made over HTTPS. Calls made over plain HTTP will fail. You must authenticate for all requests.
$ curl https://api.follow.net/v3/domains/google.com \ -u sk-4f8ae86206e39419k2h: curl uses the -u flag to pass basic auth credentials (adding a colon after your API key will prevent it from asking you for a password). A sample test API key has been provided in all the examples on the page, so you can test out any example right away.

Errors

Follow uses conventional HTTP response codes to indicate success or failure of an API request. In general, codes in the 2xx range indicate success, codes in the 4xx range indicate an error that resulted from the provided information (e.g. a required parameter was missing, a charge failed, etc.), and codes in the 5xx range indicate an error with Follow's servers.

Not all errors map cleanly onto HTTP response codes, however. When a request is valid but does not complete successfully (e.g. a charge is declined), we return a 402 error code.

The error object

Attributes
type: The type of error returned. Can be invalid_request_error or api_error.
message: A human-readable message giving more details about the error.
params: optional
The parameters the error relates to if the error is parameter-specific. You can use this to display a message near the correct form field, for example.

HTTP Status Code Summary

  • 200 OK - Everything worked as expected.
  • 201 Created - Object created as expected.
  • 400 Bad Request - Often missing a required parameter.
  • 401 Unauthorized - No valid API key provided.
  • 402 Request Failed - Parameters were valid but request failed.
  • 404 Not Found - The requested item doesn't exist.
  • 500, 502, 503, 504 Server errors - something went wrong on Follow's end.

Error Types

  • invalid_request_error - Invalid request errors arise when your request has invalid parameters.
  • api_error - API errors cover any other type of problem (e.g. a temporary problem with Follow's servers) and should turn up only very infrequently.

Users

The user object

Attributes
id: string
deleted: boolean

Retrieve user

Returns
Returns the user object.
GET https://api.follow.net/v3/me $ curl 'https://api.follow.net/v3/me' \ -u sk-4f8ae86206e39419k2h: { "id": "usr-3527f3152db211ed", "object": "user", "fname": "John", "lname": "Doe", "phone": null, "phone_call_requested": false, "title": null, "created": 1354488139, "company": "", "company_employees": null, "description": "...", "plan_id": "free", "paying": false, "customer_id": null, "timezone": "US\/Pacific", "language": "English", "intercom_hash": "ca81f7235b104539eb0e3b0c57a41f79283544d70b5ed5e1199580006b8b3743", "referral_urls": { "object": "list", "url": null, "data": [ { "url_address": "http:\/\/follow.net\/?ref=usr-3527f3152db211ed" } ], "total_count": 1, "locked_count": null, "has_more": false }, "referral_domains": { "object": "list", "url": null, "data": [], "total_count": 0, "locked_count": null, "has_more": null }, "walkthrough_completed": true, "primary_email_address": "johndoe@follow.net", "last_used_portfolio_id": "port-22d354faa67abfd", "verified": true }

Create a user

Arguments
fname: string (required)
lname: string (required)
phone: string
title: string
company: string
company_employees: integer
description: string (required)
email: string (required)
password: string (required)
member_invite_token: string
referred_by_user_id: string
phone_call_requested: boolean
Returns
Returns the user object.
POST https://api.follow.net/v3/users $ curl 'https://api.follow.net/v3/users' \ -u sk-4f8ae86206e39419k2h: \ -X POST \ -d fname=John \ -d lname=Doe \ -d company= \ -d description=Lorem+ispum... \ -d password=MmyQP8sw3kXg \ -d email=johndoe%40follow.net { "id": "usr-3527f3152db211ed", "object": "user", "fname": "John", "lname": "Doe", "phone": null, "phone_call_requested": false, "title": null, "created": 1354488139, "company": "", "company_employees": null, "description": "...", "plan_id": "free", "paying": false, "customer_id": null, "timezone": "US\/Pacific", "language": "English", "intercom_hash": "ca81f7235b104539eb0e3b0c57a41f79283544d70b5ed5e1199580006b8b3743", "referral_urls": { "object": "list", "url": null, "data": [ { "url_address": "http:\/\/follow.net\/?ref=usr-3527f3152db211ed" } ], "total_count": 1, "locked_count": null, "has_more": false }, "referral_domains": { "object": "list", "url": null, "data": [], "total_count": 0, "locked_count": null, "has_more": null }, "walkthrough_completed": true, "primary_email_address": "johndoe@follow.net", "last_used_portfolio_id": "port-22d354faa67abfd", "verified": true }

Update user

Arguments
fname: string
lname: string
company: string
description: string
walkthrough_completed: boolean
last_used_portfolio_id: string
phone_call_requested: boolean
Returns
Returns the user object.
PUT https://api.follow.net/v3/me $ curl 'https://api.follow.net/v3/me' \ -u sk-4f8ae86206e39419k2h: \ -X PUT \ -d fname=John \ -d lname=Doe \ -d company=Doe+Corporation%2C+Inc { "id": "usr-3527f3152db211ed", "object": "user", "fname": "John", "lname": "Doe", "phone": null, "phone_call_requested": false, "title": null, "created": 1354488139, "company": "Doe Corporation, Inc", "company_employees": null, "description": "...", "plan_id": "free", "paying": false, "customer_id": null, "timezone": "US\/Pacific", "language": "English", "intercom_hash": "ca81f7235b104539eb0e3b0c57a41f79283544d70b5ed5e1199580006b8b3743", "referral_urls": { "object": "list", "url": null, "data": [ { "url_address": "http:\/\/follow.net\/?ref=usr-3527f3152db211ed" } ], "total_count": 1, "locked_count": null, "has_more": false }, "referral_domains": { "object": "list", "url": null, "data": [], "total_count": 0, "locked_count": null, "has_more": null }, "walkthrough_completed": true, "primary_email_address": "johndoe@follow.net", "last_used_portfolio_id": "port-22d354faa67abfd", "verified": true }

Delete user

Deletes the user and unsubscribes them from Intercom emails. However, they are still left on the Follow Weekly emails.
DELETE https://api.follow.net/v3/me $ curl 'https://api.follow.net/v3/me' \ -u sk-4f8ae86206e39419k2h: \ -X DELETE { "id": "usr-3527f3152db211ed", "deleted": true }

Emails

The email object

Attributes
id: string
object: string
address: string
timestamp: integer
verified: boolean
primary: boolean
user_id: string

Create a new email

Arguments
address: string (required)
password: string (required)
Returns
Returns the email object
POST https://api.follow.net/v3/emails $ curl 'https://api.follow.net/v3/emails' \ -u sk-4f8ae86206e39419k2h: \ -X POST \ -d address=johndoe%40follow.net \ -d password=user_password { "id": "em-8e1652f7b60bdc6e", "object": "email", "address": "johndoe@follow.net", "timestamp": 1411599172, "verified": true, "primary": true, "user_id": "usr-3527f3152db211ed" }

Retrieve an email

Arguments
email_id: string (required)
Returns
Returns the email object
GET https://api.follow.net/v3/emails/{email_id} $ curl 'https://api.follow.net/v3/emails/em-8e1652f7b60bdc6e' \ -u sk-4f8ae86206e39419k2h: { "id": "em-8e1652f7b60bdc6e", "object": "email", "address": "johndoe@follow.net", "timestamp": 1411599172, "verified": true, "primary": true, "user_id": "usr-3527f3152db211ed" }

Update an email

Mark an email as the primary user's email address.
Arguments
email_id: string (required)
primary: boolean (required)
Returns
Returns the email object
PUT https://api.follow.net/v3/emails/{email_id} $ curl 'https://api.follow.net/v3/emails/em-8e1652f7b60bdc6e' \ -u sk-4f8ae86206e39419k2h: \ -X PUT \ -d primary=1 { "id": "em-8e1652f7b60bdc6e", "object": "email", "address": "johndoe@follow.net", "timestamp": 1411599172, "verified": true, "primary": true, "user_id": "usr-3527f3152db211ed" }

Delete an email

Delete a user's non-primary email, you can not delete the primary email.
Arguments
email_id: string (required)
Returns
Returns the deleted email object
DELETE https://api.follow.net/v3/emails/{email_id} $ curl 'https://api.follow.net/v3/emails/em-8e1652f7b60bdc6e' \ -u sk-4f8ae86206e39419k2h: \ -X DELETE { "id": "em-8e1652f7b60bdc6e", "deleted": true }

List all emails

Arguments
verified: boolean
Returns
Returns the a list of email objects
GET https://api.follow.net/v3/emails $ curl 'https://api.follow.net/v3/emails' \ -u sk-4f8ae86206e39419k2h: { "object": "list", "url": null, "data": [ { "id": "em-8e1652f7b60bdc6e", "object": "email", "address": "johndoe@follow.net", "timestamp": 1411599172, "verified": true, "primary": true, "user_id": "usr-3527f3152db211ed" } ], "total_count": "1", "locked_count": null, "has_more": false }

Account Usage

The account usage object

Attributes
user_id: string
object: string
email_address: string
plan_name: string
plan_status: string
follow_plan: integer
follow_rewards: integer
follow_limit: integer
follow_count: integer
data_plan: integer
data_rewards: integer
data_limit: integer
lookup_plan: integer
lookup_rewards: integer
lookup_limit: integer
lookup_count: integer
premium_limit: integer
premium_count: integer
premium_overage_cost: integer
premium_count_resets_on: integer

Retrieve account usage

GET https://api.follow.net/v3/usage $ curl 'https://api.follow.net/v3/usage' \ -u sk-4f8ae86206e39419k2h: { "user_id": "usr-3527f3152db211ed", "object": "usage", "email_address": "johndoe@follow.net", "plan_name": "Free", "plan_status": "active", "follow_plan": 5, "follow_rewards": 0, "follow_limit": 5, "follow_count": 3, "data_plan": 50, "data_rewards": 20, "data_limit": 70, "lookup_plan": 50, "lookup_rewards": 5, "lookup_limit": 55, "lookup_count": 0, "premium_limit": 0, "premium_count": 0, "premium_overage_cost": 0, "premium_count_resets_on": 1514929339 }

Domain Usage

The domain usage object

Attributes
object: string
url: NULL
data: array
total_count: integer
locked_count: NULL
has_more: NULL

List all domain usage

GET https://api.follow.net/v3/domain_usages $ curl 'https://api.follow.net/v3/domain_usages' \ -u sk-4f8ae86206e39419k2h: { "object": "list", "url": null, "data": [], "total_count": 0, "locked_count": null, "has_more": null }

Premium Usage

The premium usage object

Attributes
id: string
object: string
vendor: string
report: string
domain_name: string
member_id: string
user_id: string
api_units: integer
overage_units: NULL
overage_cost: NULL
timestamp: integer

Retrieve premium usage

Arguments
premium_usage_id: string (required)
GET https://api.follow.net/v3/premium_usages/{premium_usage_id} $ curl 'https://api.follow.net/v3/premium_usages/1' \ -u sk-4f8ae86206e39419k2h: { "id": "555", "object": "premiumusage", "vendor": "compete", "report": "gender", "domain_name": "example.com", "member_id": "mem-5277", "user_id": "usr-3527f3152db211ed", "api_units": 5, "overage_units": null, "overage_cost": null, "timestamp": 1513269689 }

List all premium usages

Arguments
portfolio_id: string
GET https://api.follow.net/v3/premium_usages $ curl 'https://api.follow.net/v3/premium_usages?portfolio_id=port-22d354faa67abfd' \ -u sk-4f8ae86206e39419k2h: { "object": "list", "url": null, "data": [], "total_count": 0, "locked_count": null, "has_more": null }

Account Notifications

The account notification object

Attributes
object: string
user_id: string
newsletter: boolean
intercom: boolean
commission_created: boolean
bonus_created: boolean
referral_created: boolean
quota_exceeded: boolean
newsfeed_default: string
portfolio_activity: boolean

Retrieve notifications

Returns
Returns the notifications object
GET https://api.follow.net/v3/notifications $ curl 'https://api.follow.net/v3/notifications' \ -u sk-4f8ae86206e39419k2h: { "object": "notification", "user_id": "usr-3527f3152db211ed", "newsletter": false, "intercom": true, "commission_created": true, "bonus_created": true, "referral_created": true, "quota_exceeded": false, "newsfeed_default": "daily", "portfolio_activity": true }

Update notifications

Arguments
bonus_created: boolean
commission_created: boolean
intercom: boolean
mailchimp: boolean
newsfeed_default: boolean
portfolio_activity: boolean
portfolios: array
Returns
Returns the notifications object
PUT https://api.follow.net/v3/notifications $ curl 'https://api.follow.net/v3/notifications' \ -u sk-4f8ae86206e39419k2h: \ -X PUT \ -d mailchimp=1 { "object": "notification", "user_id": "usr-3527f3152db211ed", "newsletter": false, "intercom": true, "commission_created": true, "bonus_created": true, "referral_created": true, "quota_exceeded": false, "newsfeed_default": "daily", "portfolio_activity": true }

Follow Notifications

The follow notification object

Attributes
id: string
object: string
follow_id: string
portfolio_id: string
member_id: string
domain_name: string
enabled: boolean
email_frequency: string

Retrieve follow notification

Arguments
follow_notification_id: string (required)
GET https://api.follow.net/v3/follow_notifications/{follow_notification_id} $ curl 'https://api.follow.net/v3/follow_notifications/3084' \ -u sk-4f8ae86206e39419k2h: { "id": "3084", "object": "follownotification", "follow_id": "82103", "portfolio_id": "port-22d354faa67abfd", "member_id": "mem-5277", "domain_name": "tracking202.com", "enabled": true, "email_frequency": "never" }

Update domain notification

Arguments
follow_notification_id: string (required)
email_frequency: string 'never','daily','weekly'
PUT https://api.follow.net/v3/follow_notifications/{follow_notification_id} $ curl 'https://api.follow.net/v3/follow_notifications/3084' \ -u sk-4f8ae86206e39419k2h: \ -X PUT \ -d email_frequency=never { "id": "3084", "object": "follownotification", "follow_id": "82103", "portfolio_id": "port-22d354faa67abfd", "member_id": "mem-5277", "domain_name": "tracking202.com", "enabled": true, "email_frequency": "never" }

List all follow notifications

Arguments
portfolio_id: string
GET https://api.follow.net/v3/follow_notifications $ curl 'https://api.follow.net/v3/follow_notifications' \ -u sk-4f8ae86206e39419k2h: { "object": "list", "url": null, "data": [ { "id": "3084", "object": "follownotification", "follow_id": "82103", "portfolio_id": "port-22d354faa67abfd", "member_id": "mem-5277", "domain_name": "tracking202.com", "enabled": true, "email_frequency": "never" }, {...}, {...} ], "total_count": 3, "locked_count": null, "has_more": false }

Referrals

The referral object

Attributes
object: string
url: NULL
data: array
total_count: string
locked_count: NULL
has_more: boolean

List all referrals

Arguments
limit: integer
GET https://api.follow.net/v3/referrals $ curl 'https://api.follow.net/v3/referrals?limit=2' \ -u sk-4f8ae86206e39419k2h: { "object": "list", "url": null, "data": [], "total_count": "0", "locked_count": null, "has_more": false }

Rewards

The reward object

Attributes
object: string
type: string
description: NULL
data: string
follows: string
stories: string
created: integer

List all rewards

Arguments
limit: integer
GET https://api.follow.net/v3/rewards $ curl 'https://api.follow.net/v3/rewards?limit=2' \ -u sk-4f8ae86206e39419k2h: { "object": "list", "url": null, "data": [ { "object": "userbonus", "type": "Beta User", "description": null, "data": "0", "follows": "0", "stories": "0", "created": 1385376051 } ], "total_count": "1", "locked_count": null, "has_more": false }

Earnings

The earning object

Attributes
commission_rate: string
commission_first_tier_amount_min: string
commission_tiers: string
commissions_pending_amount: integer
commissions_approved_amount: integer
commissions_paid_amount: integer
commissions_due_amount: integer
object: string

Retrieve earnings

GET https://api.follow.net/v3/earnings $ curl 'https://api.follow.net/v3/earnings' \ -u sk-4f8ae86206e39419k2h: { "commission_rate": "20", "commission_first_tier_amount_min": "10", "commission_tiers": "2", "commissions_pending_amount": 123, "commissions_approved_amount": 123, "commissions_paid_amount": 123, "commissions_due_amount": 123, "object": "earnings" }

Commissions

Commissions are generated when a referral pays money. Commissions are approved or rejected 30 days later, and can be rejected up to 365 days later if a payment was chargedback or refunded.

The commission object

Attributes
id: string
object: string
status: string
created: integer
tier: integer
paid: boolean
amount: string

List all commissions

Arguments
limit: integer
GET https://api.follow.net/v3/commissions $ curl 'https://api.follow.net/v3/commissions?limit=2' \ -u sk-4f8ae86206e39419k2h: { "object": "list", "url": null, "data": [ { "id": "ch_1038eP2gHQrDQnCxmijVAy8X", "object": "commission", "status": "approved", "created": 1387283841, "tier": 1, "paid": false, "amount": "10" } ], "total_count": 1, "locked_count": null, "has_more": false }

Plans

The plan object

Attributes
id: string
object: string
name: string
description: string
interval: string
plan_group_id: string
amount: string
paying: boolean
follows: integer
lookups: integer
data: integer
premium_points: integer
print_report_on: boolean

Retrieve plan

Arguments
plan_id: string (required)
Returns
Returns a list of plans
GET https://api.follow.net/v3/plans/{plan_id} $ curl 'https://api.follow.net/v3/plans/month_19' \ -u sk-4f8ae86206e39419k2h: { "id": "month_19", "object": "plan", "name": "$19 \/ month", "description": "", "interval": "monthly", "plan_group_id": "5", "amount": "19", "paying": true, "follows": 20, "lookups": 5000, "data": 100, "premium_points": 0, "print_report_on": true }

List all plans

Returns
Returns a list of plans
GET https://api.follow.net/v3/plans $ curl 'https://api.follow.net/v3/plans' \ -u sk-4f8ae86206e39419k2h: { "object": "list", "url": null, "data": [ { "id": "free", "object": "plan", "name": "Free", "description": "", "interval": "none", "plan_group_id": "1", "amount": "0", "paying": false, "follows": 5, "lookups": 50, "data": 50, "premium_points": 0, "print_report_on": false }, {...}, {...} ], "total_count": 7, "locked_count": null, "has_more": false }

Plan Groups

The plan group object

Attributes
id: string
object: string
paying: boolean
follows: integer
data: integer
premium_points: integer
lookups: integer
plans: array

Retrieve plan group

Arguments
plan_id: string (required)
Returns
Returns a list of plans
GET https://api.follow.net/v3/plan_groups/{plan_group_id} $ curl 'https://api.follow.net/v3/plan_groups/2' \ -u sk-4f8ae86206e39419k2h: { "id": "2", "object": "plangroup", "paying": true, "follows": 20, "data": 100, "premium_points": 0, "lookups": 500, "plans": { "object": "list", "url": null, "data": [ { "id": "month_37", "object": "plan", "name": "$37 \/ month", "description": "", "interval": "monthly", "plan_group_id": "2", "amount": "37", "paying": true, "follows": 20, "lookups": 500, "data": 100, "premium_points": 0, "print_report_on": true }, {...} ], "total_count": null, "locked_count": null, "has_more": null } }

List all plan groups

Returns
Returns a list of plan groups
GET https://api.follow.net/v3/plan_groups $ curl 'https://api.follow.net/v3/plan_groups' \ -u sk-4f8ae86206e39419k2h: { "object": "list", "url": null, "data": [ { "id": "1", "object": "plangroup", "paying": false, "follows": 5, "data": 50, "premium_points": 0, "lookups": 50, "plans": { "object": "list", "url": null, "data": [ { "id": "free", "object": "plan", "name": "Free", "description": "", "interval": "none", "plan_group_id": "1", "amount": "0", "paying": false, "follows": 5, "lookups": 50, "data": 50, "premium_points": 0, "print_report_on": false } ], "total_count": null, "locked_count": null, "has_more": null } }, {...}, {...} ], "total_count": 3, "locked_count": null, "has_more": false }

Portfolios

Portfolio object consists of xyz

The portfolio object

Attributes
id: string
object: string
name: string
paid_access: boolean
invoices_overdue: boolean
shared: boolean
allow_member_share: boolean
owner_member_id: string

Create a new portfolio

This is how you create a new portfolio.
Arguments
name: string
Returns
Returns the portfolio object.
POST https://api.follow.net/v3/portfolios $ curl 'https://api.follow.net/v3/portfolios' \ -u sk-4f8ae86206e39419k2h: \ -X POST \ -d name=Demo+Portfolio { "id": "port-22d354faa67abfd", "object": "portfolio", "name": "Demo Portfolio", "paid_access": false, "invoices_overdue": false, "shared": false, "allow_member_share": true, "owner_member_id": "mem-5277" }

Retrieve a portfolio

Retrieves the details of an an existing portfolio
Arguments
portfolio_id: string (required)
Returns
Returns the portfolio object.
GET https://api.follow.net/v3/portfolios/{portfolio_id} $ curl 'https://api.follow.net/v3/portfolios/port-22d354faa67abfd' \ -u sk-4f8ae86206e39419k2h: { "id": "port-22d354faa67abfd", "object": "portfolio", "name": "Demo Portfolio", "paid_access": false, "invoices_overdue": false, "shared": false, "allow_member_share": true, "owner_member_id": "mem-5277" }

Update a portfolio

Retrieves the details of an an existing portfolio
Arguments
portfolio_id: string (required)
name: string
allow_member_share: boolean
owner_member_id: string
Returns
Returns the portfolio object.
PUT https://api.follow.net/v3/portfolios/{portfolio_id} $ curl 'https://api.follow.net/v3/portfolios/port-22d354faa67abfd' \ -u sk-4f8ae86206e39419k2h: \ -X PUT \ -d name=New+Portfolio+Name { "id": "port-22d354faa67abfd", "object": "portfolio", "name": "New Portfolio Name", "paid_access": false, "invoices_overdue": false, "shared": false, "allow_member_share": true, "owner_member_id": "mem-5277" }

Delete a portfolio

Arguments
id: string
Returns
The deleted portfolio object.
DELETE https://api.follow.net/v3/portfolios/{portfolio_id} $ curl 'https://api.follow.net/v3/portfolios/port-22d354faa67abfd' \ -u sk-4f8ae86206e39419k2h: \ -X DELETE { "id": "port-22d354faa67abfd", "deleted": true }

List all portfolios

Arguments
count: int (optional) default is 10
offset: int (optional) default is 0
GET https://api.follow.net/v3/portfolios $ curl 'https://api.follow.net/v3/portfolios' \ -u sk-4f8ae86206e39419k2h: { "object": "list", "url": null, "data": [ { "id": "port-22d354faa67abfd", "object": "portfolio", "name": "Demo Portfolio", "paid_access": false, "invoices_overdue": false, "shared": false, "allow_member_share": true, "owner_member_id": "mem-5277" }, {...} ], "total_count": 2, "locked_count": null, "has_more": false }

Members

The member object

Attributes
id: string
object: string
name: string
email_address: string
portfolio_id: string
user_id: string
joined: boolean
owner: boolean

Create a new member

Arguments
portfolio_id: string (required)
email_address: string (required)
name: string
Returns
object
POST https://api.follow.net/v3/portfolios/{portfolio_id}/members $ curl 'https://api.follow.net/v3/portfolios/port-22d354faa67abfd/members' \ -u sk-4f8ae86206e39419k2h: \ -X POST \ -d email_address=johndoe%40follow.net \ -d name=John+Doe { "id": "mem-5277", "object": "member", "name": "John Doe", "email_address": "johndoe@follow.net", "portfolio_id": "port-22d354faa67abfd", "user_id": "usr-3527f3152db211ed", "joined": true, "owner": true }

Reinvite a member

Arguments
portfolio_id: string (required)
member_id: string (required)
Returns
object
POST https://api.follow.net/v3/portfolios/{portfolio_id}/members/{member_id}/reinvite $ curl 'https://api.follow.net/v3/portfolios/port-22d354faa67abfd/members/mem-5277/reinvite' \ -u sk-4f8ae86206e39419k2h: \ -X POST { "id": "mem-5277", "object": "member", "name": null, "email_address": "johndoe@follow.net", "portfolio_id": "port-22d354faa67abfd", "user_id": null, "joined": false, "owner": true }

Retrieve a member

Arguments
portfolio_id: string (required)
member_id: string (required)
Returns
object
GET https://api.follow.net/v3/portfolios/{portfolio_id}/members/{member_id} $ curl 'https://api.follow.net/v3/portfolios/port-22d354faa67abfd/members/mem-5277' \ -u sk-4f8ae86206e39419k2h: { "id": "mem-5277", "object": "member", "name": "John Doe", "email_address": "johndoe@follow.net", "portfolio_id": "port-22d354faa67abfd", "user_id": "usr-3527f3152db211ed", "joined": true, "owner": true }

Update a member

Updates a member's email address for the specified portfolio
Arguments
portfolio_id: string (required)
member_id: string (required)
email_address: string (required)
Returns
object
PUT https://api.follow.net/v3/portfolios/{portfolio_id}/members/{member_id} $ curl 'https://api.follow.net/v3/portfolios/port-22d354faa67abfd/members/mem-5277' \ -u sk-4f8ae86206e39419k2h: \ -X PUT \ -d email_address=johndoe%40follow.net { "id": "mem-5277", "object": "member", "name": "John Doe", "email_address": "johndoe@follow.net", "portfolio_id": "port-22d354faa67abfd", "user_id": "usr-3527f3152db211ed", "joined": true, "owner": true }

Delete a member

Arguments
portfolio_id: string (required)
member_id: string (required)
Returns
object
DELETE https://api.follow.net/v3/portfolios/{portfolio_id}/members/{member_id} $ curl 'https://api.follow.net/v3/portfolios/port-22d354faa67abfd/members/mem-5277' \ -u sk-4f8ae86206e39419k2h: \ -X DELETE { "id": "mem-5277", "deleted": true }

List members

Arguments
portfolio_id: string (required)
Returns
object
GET https://api.follow.net/v3/portfolios/{portfolio_id}/members $ curl 'https://api.follow.net/v3/portfolios/port-22d354faa67abfd/members' \ -u sk-4f8ae86206e39419k2h: { "object": "list", "url": null, "data": [ { "id": "mem-5277", "object": "member", "name": "John Doe", "email_address": "johndoe@follow.net", "portfolio_id": "port-22d354faa67abfd", "user_id": "usr-3527f3152db211ed", "joined": true, "owner": true } ], "total_count": 1, "locked_count": null, "has_more": false }

Follows

The follow object

Attributes
object: string
id: NULL
domain_name: string
portfolio_id: string
tags: array

Create a new follow

Arguments
portfolio_id: string (required)
domain_name: string (required)
Returns
object
POST https://api.follow.net/v3/portfolios/{portfolio_id}/follows $ curl 'https://api.follow.net/v3/portfolios/port-22d354faa67abfd/follows' \ -u sk-4f8ae86206e39419k2h: \ -X POST \ -d domain_name=tracking202.com { "object": "follow", "id": null, "domain_name": "tracking202.com", "portfolio_id": "port-22d354faa67abfd", "tags": { "object": "list", "url": null, "data": [ { "id": "tag-229f3ccb5dad5a4", "object": "tag", "name": "Example Tag", "portfolio_id": "port-22d354faa67abfd" } ], "total_count": null, "locked_count": null, "has_more": null } }

Retrieve a follow

Arguments
portfolio_id: string (required)
domain_name: string (required)
Returns
object
GET https://api.follow.net/v3/portfolios/{portfolio_id}/follows/{follow_id} $ curl 'https://api.follow.net/v3/portfolios/port-22d354faa67abfd/follows/82103' \ -u sk-4f8ae86206e39419k2h: { "id": "82103", "object": "follow", "domain_name": "tracking202.com", "portfolio_id": "port-22d354faa67abfd", "tags": { "object": "list", "url": null, "data": [ { "id": "tag-229f3ccb5dad5a4", "object": "tag", "name": "Example Tag", "portfolio_id": "port-22d354faa67abfd" } ], "total_count": null, "locked_count": null, "has_more": null } }

Delete a follow

Arguments
portfolio_id: string (required)
domain_name: string (required)
Returns
object
DELETE https://api.follow.net/v3/portfolios/{portfolio_id}/follows/{follow_id} $ curl 'https://api.follow.net/v3/portfolios/port-22d354faa67abfd/follows/82103' \ -u sk-4f8ae86206e39419k2h: \ -X DELETE { "deleted": true }

List all follows

Arguments
portfolio_id: string (required)
Returns
object
GET https://api.follow.net/v3/portfolios/{portfolio_id}/follows $ curl 'https://api.follow.net/v3/portfolios/port-22d354faa67abfd/follows' \ -u sk-4f8ae86206e39419k2h: { "object": "list", "url": null, "data": [ { "id": "82103", "object": "follow", "domain_name": "tracking202.com", "portfolio_id": "port-22d354faa67abfd", "tags": { "object": "list", "url": null, "data": [ { "id": "tag-229f3ccb5dad5a4", "object": "tag", "name": "Example Tag", "portfolio_id": "port-22d354faa67abfd" } ], "total_count": null, "locked_count": null, "has_more": null } }, {...} ], "total_count": 2, "locked_count": null, "has_more": false }

Tags

The tag object

Attributes
id: string
deleted: boolean

Create a new tag

Arguments
portfolio_id: string (required)
domain_name: string (required)
Returns
object
POST https://api.follow.net/v3/portfolios/{portfolio_id}/tags $ curl 'https://api.follow.net/v3/portfolios/port-22d354faa67abfd/tags' \ -u sk-4f8ae86206e39419k2h: \ -X POST \ -d name=Example+Tag { "id": "tag-229f3ccb5dad5a4", "object": "tag", "name": "Example Tag", "portfolio_id": "port-22d354faa67abfd" }

Retrieve a tag

Arguments
portfolio_id: string (required)
tag_id: string (required)
Returns
object
GET https://api.follow.net/v3/portfolios/{portfolio_id}/tags/{tag_id} $ curl 'https://api.follow.net/v3/portfolios/port-22d354faa67abfd/tags/tag-229f3ccb5dad5a4' \ -u sk-4f8ae86206e39419k2h: { "id": "tag-229f3ccb5dad5a4", "object": "tag", "name": "Example Tag", "portfolio_id": "port-22d354faa67abfd" }

Update a tag

Arguments
portfolio_id: string (required)
tag_id: string (required)
Returns
object
PUT https://api.follow.net/v3/portfolios/{portfolio_id}/tags/{tag_id} $ curl 'https://api.follow.net/v3/portfolios/port-22d354faa67abfd/tags/tag-229f3ccb5dad5a4' \ -u sk-4f8ae86206e39419k2h: \ -X PUT \ -d name=New+Tag+Name { "id": "tag-229f3ccb5dad5a4", "object": "tag", "name": "New Tag Name", "portfolio_id": "port-22d354faa67abfd" }

Delete a tag

Arguments
portfolio_id: string (required)
tag_id: string (required)
Returns
object
DELETE https://api.follow.net/v3/portfolios/{portfolio_id}/tags/{tag_id} $ curl 'https://api.follow.net/v3/portfolios/port-22d354faa67abfd/tags/tag-229f3ccb5dad5a4' \ -u sk-4f8ae86206e39419k2h: \ -X DELETE { "id": "tag-229f3ccb5dad5a4", "deleted": true }

List tags

Arguments
portfolio_id: string (required)
Returns
object
GET https://api.follow.net/v3/portfolios/{portfolio_id}/tags $ curl 'https://api.follow.net/v3/portfolios/port-22d354faa67abfd/tags' \ -u sk-4f8ae86206e39419k2h: { "object": "list", "url": null, "data": [ { "id": "tag-229f3ccb5dad5a4", "object": "tag", "name": "Example Tag", "portfolio_id": "port-22d354faa67abfd" }, {...} ], "total_count": 2, "locked_count": null, "has_more": false }

List domains in tag

Arguments
portfolio_id: string (required)
tag_id: string (required)
Returns
object
GET https://api.follow.net/v3/portfolios/{portfolio_id}/tags/{tag_id}/follows $ curl 'https://api.follow.net/v3/portfolios/port-22d354faa67abfd/tags/tag-229f3ccb5dad5a4/follows' \ -u sk-4f8ae86206e39419k2h: { "object": "list", "url": null, "data": [ { "id": "tag-229f3ccb5dad5a4", "object": "tagdomain", "domain_name": "tracking202.com" }, {...} ], "total_count": 2, "locked_count": null, "has_more": false }

Add tag to follow

Arguments
portfolio_id: string (required)
tag_id: string (required)
domain_name: string (required)
Returns
object
POST https://api.follow.net/v3/portfolios/{portfolio_id}/follows/{follow_id}/tags $ curl 'https://api.follow.net/v3/portfolios/port-22d354faa67abfd/follows/82103/tags' \ -u sk-4f8ae86206e39419k2h: \ -X POST \ -d tag_id=tag-229f3ccb5dad5a4 { "id": "tag-229f3ccb5dad5a4", "object": "tagdomain", "domain_name": "tracking202.com" }

Delete tag from follow

Arguments
portfolio_id: string (required)
tag_id: string (required)
domain_name: string (required)
Returns
object
DELETE https://api.follow.net/v3/portfolios/{portfolio_id}/follows/{follow_id}/tags/{tag_id} $ curl 'https://api.follow.net/v3/portfolios/port-22d354faa67abfd/follows/82103/tags/tag-229f3ccb5dad5a4' \ -u sk-4f8ae86206e39419k2h: \ -X DELETE { "deleted": true }

Domains

The domain object

Attributes
object: string
name: string

Retrieve domain

Arguments
domain_name: string (required)
Returns
domain object
GET https://api.follow.net/v3/domains/{domain_name} $ curl 'https://api.follow.net/v3/domains/google.com' \ -u sk-4f8ae86206e39419k2h: { "object": "domain", "name": "google.com" }

List domains

Arguments
q: string - search query parameter, can be a url or a domain name
Returns
list object
GET https://api.follow.net/v3/domains $ curl 'https://api.follow.net/v3/domains' \ -u sk-4f8ae86206e39419k2h: { "object": "list", "url": null, "data": [ { "object": "domain", "name": "" }, {...}, {...} ], "total_count": 5, "locked_count": null, "has_more": false }

Reverse IPs

The reverse ip object

Attributes
object: string
domain_name: string
reverse_subdomain_name: string
last_seen: integer

List all Reverse IPs

Reveals other domain names hosted on servers with the same IP addresses.
Arguments
portfolio_id: string (required)
domain_name: string (required)
limit: integer
offset: integer
Returns
object
GET https://api.follow.net/v3/portfolios/{portfolio_id}/domains/{domain_name}/reverseips $ curl 'https://api.follow.net/v3/portfolios/port-22d354faa67abfd/domains/follow.net/reverseips' \ -u sk-4f8ae86206e39419k2h: { "object": "list", "url": null, "data": [ { "object": "reverseip", "domain_name": "follow.net", "reverse_subdomain_name": "app.follow.net", "last_seen": 1512086400 }, {...} ], "total_count": "2", "locked_count": 0, "has_more": false }

Stories

The storie object

Attributes
object: string
url: NULL
data: array
total_count: string
locked_count: NULL
has_more: boolean

List all stories

By default, this API method provides you with a list of stories for the domains you've followed. You can also query individual domains.

/stories
/portfolios/{portfolio_id}/stories
/portfolios/{portfolio_id}/untagged/stories =>
/portfolios/{portfolio_id}/stories?filter=untagged
/portfolios/{portfolio_id}/tagged/stories =>
/portfolios/{portfolio_id}/stories?filter=tagged
/portfolios/{portfolio_id}/tags/{tag_id}/stories =>
/portfolios/{portfolio_id}/stories?tag_id={tag_id}
/portfolios/{portfolio_id}/domains/{domain_name}/stories =>
/portfolios/{portfolio_id}/stories?domain_name={domain_name}
Arguments
portfolio_id: string
domain_name: string
tag_id: string
filter: string ('tagged','untagged')
story_type_id: string
page: string
limit: string
GET https://api.follow.net/v3/stories $ curl 'https://api.follow.net/v3/stories?domain_name=follow.net' \ -u sk-4f8ae86206e39419k2h: { "object": "list", "url": null, "data": [], "total_count": "0", "locked_count": null, "has_more": false }

Story Types

The story type object

Attributes
id: string
object: string
name: string
count: string

List all story types

/story_types
/portfolios/{portfolio_id}/story_types
/portfolios/{portfolio_id}/untagged/story_types =>
/portfolios/{portfolio_id}/story_types?filter=untagged
/portfolios/{portfolio_id}/tagged/story_types =>
/portfolios/{portfolio_id}/story_types?filter=tagged
/portfolios/{portfolio_id}/tags/{tag_id}/story_types =>
/portfolios/{portfolio_id}/story_types?tag_id={tag_id}
/portfolios/{portfolio_id}/domains/{domain_name}/story_types =>
/portfolios/{portfolio_id}/story_types?domain_name={domain_name}
Arguments
portfolio_id: string
domain_name: string
tag_id: string
filter: string ('tagged','untagged')
GET https://api.follow.net/v3/story_types $ curl 'https://api.follow.net/v3/story_types' \ -u sk-4f8ae86206e39419k2h: { "object": "list", "url": null, "data": [ { "id": "web-mention", "object": "storytype", "name": "Web Mentions", "count": "123" }, {...}, {...} ], "total_count": null, "locked_count": null, "has_more": null }

Events

The event object

Attributes
id: string
object: string
created: integer
data: array
type: string

Retrieve event

Returns
object
GET https://api.follow.net/v3/events/{event_id} $ curl 'https://api.follow.net/v3/events/{event_id}' \ -u sk-4f8ae86206e39419k2h: { "id": "evt-mock-99999999", "object": "event", "created": 1354488139, "data": { "object": { "id": "usr-3527f3152db211ed", "object": "user", "fname": "John", "lname": "Doe", "phone": null, "phone_call_requested": false, "title": null, "created": 1354488139, "company": "", "company_employees": null, "description": "...", "plan_id": "free", "paying": false, "customer_id": null, "timezone": "US\/Pacific", "language": "English", "intercom_hash": "ca81f7235b104539eb0e3b0c57a41f79283544d70b5ed5e1199580006b8b3743", "referral_urls": { "object": "list", "url": null, "data": [ { "url_address": "http:\/\/follow.net\/?ref=usr-3527f3152db211ed" } ], "total_count": 1, "locked_count": null, "has_more": false }, "referral_domains": { "object": "list", "url": null, "data": [], "total_count": 0, "locked_count": null, "has_more": null }, "walkthrough_completed": true, "primary_email_address": "johndoe@follow.net", "last_used_portfolio_id": "port-22d354faa67abfd", "verified": true } }, "type": "user.created" }

Event Types

The event type object

Attributes
object: string
name: string

List all event types

Returns
list
GET https://api.follow.net/v3/event_types $ curl 'https://api.follow.net/v3/event_types' \ -u sk-4f8ae86206e39419k2h: { "object": "list", "url": null, "data": [ { "object": "eventtype", "name": "story.created" }, {...} ], "total_count": 2, "locked_count": null, "has_more": false }

Webhooks

The webhook object

Attributes
id: string
object: string
url_address: string
user_id: string
created: integer
subscriptions: array

Create a new webhook

Arguments
url_address: string (required)
event: string (required)
Returns
object
POST https://api.follow.net/v3/webhooks $ curl 'https://api.follow.net/v3/webhooks' \ -u sk-4f8ae86206e39419k2h: \ -X POST \ -d url_address=http%3A%2F%2Fexample.com%2F \ -d event=story.created { "id": "wbk-mock-0101010101", "object": "webhook", "url_address": "http:\/\/example.com\/", "user_id": "usr-3527f3152db211ed", "created": 1513269691, "subscriptions": { "object": "list", "url": null, "data": [], "total_count": null, "locked_count": null, "has_more": null } }

Retrieve a webhook

Arguments
webhook_id: string (required)
Returns
object
GET https://api.follow.net/v3/webhooks/{webhook_id} $ curl 'https://api.follow.net/v3/webhooks/wbk-mock-0101010101' \ -u sk-4f8ae86206e39419k2h: { "id": "wbk-mock-0101010101", "object": "webhook", "url_address": "http:\/\/example.com\/", "user_id": "usr-3527f3152db211ed", "created": 1513269691, "subscriptions": { "object": "list", "url": null, "data": [], "total_count": null, "locked_count": null, "has_more": null } }

Delete a webhook

Arguments
webhook_id: string (required)
Returns
object
DELETE https://api.follow.net/v3/webhooks/{webhook_id} $ curl 'https://api.follow.net/v3/webhooks/wbk-mock-0101010101' \ -u sk-4f8ae86206e39419k2h: \ -X DELETE { "id": "wbk-mock-0101010101", "deleted": true }

List all webhooks

Returns
list
GET https://api.follow.net/v3/webhooks $ curl 'https://api.follow.net/v3/webhooks' \ -u sk-4f8ae86206e39419k2h: { "object": "list", "url": null, "data": [], "total_count": 0, "locked_count": null, "has_more": null }