Reference

API reference

Every public endpoint, with field-level documentation. Lists return { items, page, perPage, total }; resources return the object directly. Money is integer cents, timestamps are ISO 8601 in UTC.

Open the spec
Prefer machine-readable? The same data lives in our OpenAPI 3.1 spec at /v1/openapi.json.

Health

GET/v1/ping

Liveness probe. Always 200 unless the platform is unreachable.

json
{
  "ok": true,
  "time": "2026-05-03T08:14:22.103Z"
}

Companies

Operations on the organization the API key belongs to. There is no path-level org id; the key carries the binding.

GET/v1/companies/mecompany:read

Org identity, legal data, KYB status, active subscription plan.

Response

  • idstringrequired
    Opaque organization identifier.
  • namestringrequired
    Display name.
  • legalNamestring
    Registered legal name. Snapshotted onto invoices at issue time.
  • countryCodestring
    ISO 3166-1 alpha-2 country code.
  • taxIdstring
    Local tax identifier (e.g. NIF in Spain).
  • vatIdstring
    EU VAT id when applicable.
  • typestring
    company for orgs with employees / contractors; freelancer_solo for one-person shops.
    companyfreelancer_solo
  • kybStatusstring
    Outcome of the KYB review.
    pendingin_reviewapprovedrejected
  • planstring
    Active subscription plan key (trial, core, professional, global, enterprise, aor, custom_*).
  • subscriptionStatusstring
    Stripe subscription status.
    trialingactivepast_duecanceledunpaid
  • createdAtISO 8601required
    Org creation timestamp.
json
{
  "id": "org_2024_AbCd",
  "name": "Acme Corp",
  "legalName": "Acme Corporation S.L.",
  "countryCode": "ES",
  "taxId": "B12345678",
  "vatId": "ESB12345678",
  "type": "company",
  "kybStatus": "approved",
  "plan": "global",
  "subscriptionStatus": "active",
  "createdAt": "2024-08-12T09:31:24.000Z"
}
GET/v1/companies/me/statscompany:read

Quick aggregates: total / active projects, member count.

json
{
  "organizationId": "org_2024_AbCd",
  "totalProjects": 42,
  "activeProjects": 9,
  "memberCount": 14
}

Projects

Engagements and listings owned by the organization.

GET/v1/companies/me/projectsprojects:read

Paginated list of projects the org owns.

Query parameters

  • pageinteger
    1-indexed. Default 1.
  • perPageinteger
    1–100. Default 25.
  • statusstring
    Filter by lifecycle status.
  • searchstring
    Substring match against title (case-insensitive).
  • sortstring
    Sort key. Default -createdAt.
json
{
  "items": [
    {
      "id": "prj_2025_8f3a",
      "type": "internal",
      "title": "Mobile app rewrite",
      "status": "active",
      "currency": "EUR",
      "budgetCents": 4500000,
      "budgetHours": null,
      "skills": ["react-native", "typescript", "graphql"],
      "publishedAt": "2025-09-18T10:00:00.000Z",
      "createdAt": "2025-09-12T15:42:08.000Z"
    }
  ],
  "page": 1,
  "perPage": 25,
  "total": 9
}
GET/v1/companies/me/projects/:idprojects:read

Single project, full payload.

Response

  • idstringrequired
    Opaque project identifier.
  • typestringrequired
    marketplace = public listing accepting applications. internal = direct engagement with named members.
    marketplaceinternal
  • titlestringrequired
    Project title.
  • slugstring
    URL slug (only on marketplace projects).
  • statusstring
    Lifecycle status. The set of valid values depends on type.
    draftopenactiveon_holdclosedcancelledarchived
  • currencystring
    ISO 4217 currency code for budget figures.
  • budgetCentsinteger
    Project budget in cents. null when not set.
  • budgetHoursinteger
    Capped hours when applicable. null when not set.
  • skillsstring[]
    Skill slugs the project needs.
  • startDateISO 8601
    Engagement start (planned).
  • endDateISO 8601
    Engagement end (planned). null for ongoing.
  • publishedAtISO 8601
    When the project was opened to applications. null for unpublished drafts.
  • createdAtISO 8601required
    When the project was created.

Freelancers

People with at least one project membership in your organization.

GET/v1/companies/me/freelancersfreelancers:read

Distinct freelancers across all projects.

Query parameters

  • pageinteger
    1-indexed. Default 1.
  • perPageinteger
    1–100. Default 25.

Item shape

  • userIdstringrequired
    User identifier.
  • namestring
    Display name.
  • emailstring
    Primary email.
  • slugstring
    Public profile slug at /freelance/<slug>.
  • headlinestring
    One-line professional headline.
GET/v1/companies/me/freelancers/:userIdfreelancers:read

User + freelancer profile. Returns 404 if the freelancer has no project relationship with you.

json
{
  "user": {
    "id": "usr_a4ef",
    "name": "Marta López",
    "email": "marta@example.com",
    "isFreelancer": true
  },
  "profile": {
    "userId": "usr_a4ef",
    "slug": "marta-lopez",
    "headline": "Senior backend engineer · Go / Postgres"
  }
}

Invoices

Issued and received invoices, including consolidated MoR billing, self-billing and credit notes.

GET/v1/companies/me/invoicesinvoices:read

Paginated list. The org is matched as either issuer or recipient.

Query parameters

  • pageinteger
    1-indexed. Default 1.
  • perPageinteger
    1–100. Default 25.
  • statusstring
    Filter by status. Multiple values comma-separated.
  • typestring
    Filter by invoice type.

Item shape

  • idstringrequired
    Opaque invoice id.
  • typestringrequired
    Invoice category. consolidated = MoR billing; self_billing = platform paying freelancer.
    consolidatedself_billingsubscriptioncredit_noteproformalocal
  • statusstringrequired
    Lifecycle.
    draftissuedsentpaidoverduecancelledcredited
  • invoiceNumberstring
    Sequential issuer-side number. null while draft.
  • issuerOrganizationIdstring
    Issuer org. Snapshot of the issuer fields stays on the invoice forever.
  • recipientOrganizationIdstring
    Recipient org (when the recipient is a legal entity).
  • recipientUserIdstring
    Recipient user (for self-billing scenarios).
  • currencystringrequired
    ISO 4217.
  • subtotalCentsintegerrequired
    Pre-tax total.
  • taxAmountCentsintegerrequired
    Tax accumulated across breakdown rows.
  • totalCentsintegerrequired
    Customer-facing total (subtotal + tax).
  • paidCentsinteger
    Sum of payments received against this invoice.
  • taxModelstring
    Resolved tax rule for this invoice.
    standard_vatreverse_chargeexemptirnrexport
  • issueDateYYYY-MM-DD
    Issue date. null while draft.
  • dueDateYYYY-MM-DD
    Customer payment deadline.
  • paidAtISO 8601
    When the last reconciliation flipped status to paid.
  • downloadTokenstring
    Public token for /v1/invoices/public/:token download. null until issued.

Payments

Inbound payments to the organization.

GET/v1/companies/me/paymentspayments:read

Paginated list, ordered by created date descending.

Query parameters

  • pageinteger
    1-indexed. Default 1.
  • perPageinteger
    1–100. Default 25.
  • statusstring
    Filter by status. Multiple values comma-separated.

Item shape

  • idstringrequired
    Opaque payment id.
  • railstringrequired
    Money rail used.
    stripe_cardsepa_transferwise_inboundbridge_usdc
  • statusstringrequired
    Payment lifecycle.
    pendingprocessingsucceededfailedrefunded
  • amountCentsintegerrequired
    Amount the payer was charged.
  • currencystringrequired
    ISO 4217.
  • feeCentsinteger
    Worksible/PSP fees deducted before settlement.
  • netCentsinteger
    Amount that actually settled into the wallet (amount minus fees).
  • payerEmailstring
    Email of the payer. Captured from the payment session.
  • createdAtISO 8601required
    Payment creation.
  • succeededAtISO 8601
    When the payment cleared.
More endpoints coming
Contracts, timesheets and payouts surfaces ship in 2026 Q3 alongside webhooks. Subscribe to the changelog to be notified.