PersonalCRM Docs
API

API Overview

Programmatic access to everything the web app can do.

The PersonalCRM API gives you full programmatic access to your data: contacts, networks, pings, meetings and follow-ups. It is built for AI agents, scripts and integrations: everything you can do in the web app, you can do over HTTP.

Quick start

  1. In the app, go to Settings → API Keys → Create key and copy your key. It is shown exactly once.
  2. Call the API with the key as a Bearer token:
curl -H "Authorization: Bearer pcrm_..." \
  https://personalcrm.me/api/v1/contacts

Reference

The full endpoint reference is generated from the code and always up to date:

Endpoints at a glance

ResourceOperations
/api/v1/contactslist, create, get, update, delete, photo upload
/api/v1/networkslist, create, update, delete
/api/v1/pingslist, create, delete
/api/v1/follow-upslist, create, update (incl. complete), delete
/api/v1/meetingslist, create, get, update, delete (attendees included)
/api/v1/meget profile, update (name, timezone), delete account

All list endpoints support page and pageSize (max 200), plus resource-specific filters:

  • Contacts: search, networkId, needsPing
  • Meetings: contactId (attendee), search (name and location)
  • Pings: contactId
  • Follow-ups: contactId, completed

Contact photos

Photos live in a private bucket, so uploads and reads both use signed URLs:

  1. POST /contacts/{id}/photo-upload with the file extension → returns a signed uploadUrl and a storage path.
  2. PUT the raw image bytes (max 5MB, JPG/PNG/WebP) to that uploadUrl, then PATCH /contacts/{id} with photoUrl set to the returned path.

On reads, photoUrl is a short-lived signed URL, not the stored path. Set photoUrl: null to remove a photo.

Limits

  • 120 requests per minute per key
  • Request bodies up to 1 MB
  • Validation rules match the web app exactly: same field lengths, same formats

On this page