bitlync Docs

Concepts

Writes

dry_run defaults true. That is a preview with no side effect. Commit by sending dry_run false. After Bitlync creates a ticket, you can update it, append a note, close with evidence, or POST hours on that ticket only. You can close a ticket once they accept the connection. Auto-close when a finding is fixed is a separate switch. Hours take stated billable and a required member. Pick the member id from GET /tenants/{tenant_id}/members (Halo and ConnectWise live when permitted; Autotask → honest 501; permission miss is honest English — ConnectWise may 403 without System Members inquire). Empty list stays empty — never invent. No notes on time. Not field-level ticket sync.

Reads include vendor: { connector, native_id, native }. native is the same payload as .raw. .raw is read-only. Ticket writes accept optional vendor_native on POST /tickets and POST /tickets/write.

Mechanism

Preview first. Then commit with the same body and an idempotency_key on writes that support it. If a fan-out is only partial, that failure is explicit. It is never collapsed into a single silent success.

What the caller sees

A dry run does not create a ticket. A commit does. Partial failure is visible on the response, not hidden.

dry_run then commit
{
  "summary": "Printer offline",
  "dry_run": true,
  "idempotency_key": "ticket-1"
}

{
  "summary": "Printer offline",
  "dry_run": false,
  "idempotency_key": "ticket-1"
}

Halo ticket create, update, close, reopen, notes, and time commit when dry_run is false. ConnectWise ticket create, update, close, notes, and time commit when dry_run is false. Ticket create, write-back, and time for Autotask run on fixtures and dry_run. dry_run defaults true. Halo pulls agreements and line items, the same objects as ConnectWise and Autotask. ConnectWise, Autotask, and Halo write line items on an existing agreement: add, rewrite, end, replace. ConnectWise, Autotask, and Halo pull the project container and write on an existing project. We do not mint a project header. Baseline cannot take that write. ConnectWise and Halo list ticket statuses, boards, and priorities live and enrich ticket display (GET /tenants/{tenant_id}/ticket-boards, ticket-statuses, ticket-priorities). Ticket create and update accept those list ids for board, status, and priority; unknown id → 422. Autotask has no boards/statuses/priorities list in this slice — we do not invent them. Contacts are list and match only — no contact create. Exact PSA company name to one ISV customer may auto-fill Match only — never auto-import. Ambiguous names stay Needs match. Per leftover row the MSP sees Match, company import from PSA, Skip, or Needs match (unset only). When the ISV book supports company import from PSA, Import creates a leftover in the ISV after preview (bulk Import unmatched uses the same path). When that write is unavailable, Import returns 501. We never create the company in the PSA. Company create is off unless the MSP turns it on for your grant. We always match first. If two records match, we refuse. Pax8 matches a company it already has, then creates the rest. Matching then creating at a distributor is not a PSA create.

The MSP can approve or dismiss a mapped line item. Approve writes the line on an existing agreement. Dismiss does not change the agreement. ConnectWise only.

What we write lists the locks and refusals.

Validation

The payload is checked against that vendor’s rules before it leaves Bitlync.

Mechanism

A bad field fails on the request you sent. It does not create a ticket.

What the caller sees

HTTP 422. Branch on stable code validation.

422 on your request
HTTP 422

{
  "status": 422,
  "code": "validation"
}

No “send it anyway and let the PSA reject it.”