Skip to main content
The Marketplace API is in a private beta. It answers only for accounts Investorlift has enabled. Access says how to ask for one. A route shape on these pages can change before the beta ends. The changelog records every change.
Every refusal is an RFC 9457 application/problem+json body. Switch on code, never on title or detail: the codes are stable, and the wording can change. The type URL points at this page, anchored at the code. The God Mode API has its own catalogue (Errors), and the two share no code list.
Some codes add a member the caller needs to act:
  • scope on insufficient_scope
  • role and required_roles on insufficient_role
  • designation on designation_required
  • agreement_id on terms_required
  • verification_url on idv_required
  • unknown_parameters on unknown_parameter
  • agreement (id and url) on agreement_required
The reference states these members on each operation that answers the code. A 400 invalid_parameter names the parameter in parameter. A 409 deal_changed carries the current terms of the deal. A 409 offer_exists and a 409 offer_superseded name the open round. Every 429 and a 409 idempotency_in_progress carry Retry-After. A 405 carries Allow. The gateway at api.investorlift.com answers four codes before a request reaches the origin. It answers 401 unauthorized for a token it cannot verify, and 429 rate_limited for its request limits. It also answers 403 not_enabled and 503 origin_unconfigured. Every other code comes from the origin. Identifiers and the envelope states the rule that picks 409, 422 and 429.

400 Bad request

401 Unauthorized

402 Payment required

403 Forbidden

404 Not found

405 Method not allowed

409 Conflict

422 Unprocessable content

429 Too many requests

503 Service unavailable

Each code

One section per code, the anchor the type URL points at. The first line is the status and the title. The second is the recovery sentence. A third line, where one exists, names the members the body adds.

invalid_id

400 Identifier malformed. Send the public id with its type prefix, for example mdl_a1b2c3d4e5f6. Identifiers and the envelope lists the prefixes.

invalid_parameter

400 Parameter unusable. Correct the query parameter the detail names, then repeat the call. The body names the parameter in parameter. A cursor from another account or another query, and a missing or overlong Idempotency-Key header, answer this code too.

invalid_body

400 Body unusable. Send a JSON body with the content type application/json.

unknown_parameter

400 Parameter unknown. Remove the parameter the detail names, because this operation reads no such field. The body lists the names in unknown_parameters. Every schema is strict, so a field the operation does not read is a refusal, never a silent drop.

unauthorized

401 Not authenticated. Send a current access token for this API, and start a new authorization when the token is expired. A token without the marketplace audience, a suspended or deleted account, and an account with no verified email address answer this code too.

insufficient_balance

402 Balance too low. Add credits to the organization on Investorlift, then publish the draft again. The API never charges a card.

forbidden

403 Refused. Ask Investorlift support why the account, the client or the organization is stopped.

insufficient_scope

403 Scope missing. Start a new authorization that asks for the scope named in the detail. The body names the scope in scope.

insufficient_role

403 Role too low. Ask an owner or an admin of the organization to run this call, or to raise your role. The body names the roles that run the operation in required_roles. It names your role in role, or null when you hold none.

no_organization

403 No organization. Create an organization on Investorlift, then repeat the call.

designation_required

403 Designation missing. Finish the onboarding of the side you call, then repeat the call. The body names the side in designation: seller or buyer.

terms_required

403 Terms not accepted. Accept the Marketplace API Terms on the consent page, then start a new authorization. The body names the agreement in agreement_id.

client_limit

403 Too many clients. Remove a connected application in your account settings, then connect this one again. A dynamically registered client holds consent from one organization and three users.

api_offers_disabled

403 Seller refuses API offers. Contact the seller outside the API, because this seller takes no offer through it.

idv_required

403 Identity verification required. Finish identity verification at the verification_url of this answer, then repeat the call. The body carries the link in verification_url.

not_a_member

403 Not a member. Name a user who is a member of the organization, then repeat the call.

not_found

404 Not found. Check the id, and check that the account you call with owns the resource. A resource of another account answers this code, never a 403.

method_not_allowed

405 Method not allowed. Use one of the methods the documentation lists for this path. The Allow header lists them.

address_unavailable

409 Address taken. Wait for the other deal on this address to close, or publish a different property. When the other deal is your own organization’s, the body names it. Otherwise the body names no owner.

deal_closed

409 Deal closed. Read the deal to see the current status, and act on an open deal instead.

deal_changed

409 Deal changed. Read the current terms in the body, take a new preview, then submit again.

draft_under_review

409 Draft under review. Wait for the Deal Desk to finish its review of this draft, then repeat the call. Every route under /sell/drafts/{draft_id} can answer this code, the read included.

resource_exists

409 Already exists. Read the resource, because this account already holds the one you create. POST /sell/reviews/{review_id}/response answers this code for a review that already carries a response.

resource_limit

409 Limit reached. Delete one of these resources, then create the new one. One buyer keeps five buy boxes, and the sixth POST /buy/buy-boxes answers this code.

offer_required

409 Offer required. Send the id of the accepted offer in the body, because this status needs one.

offer_exists

409 Offer already open. Withdraw or finish your open offer on this deal, then make a new one. The body names the open round.

offer_superseded

409 Round closed. Read the id of the open round in the body, then act on that round.

wrong_side

409 Other side acts next. Wait for the counterparty to answer, because the current round belongs to them.

idempotency_conflict

409 Key reused with a different body. Send a new Idempotency-Key for this body, because the stored key holds another one. Idempotency has the key rules.

idempotency_in_progress

409 Key in progress. Wait one second, then repeat the call with the same Idempotency-Key. The response carries Retry-After: 1.

agreement_required

409 Agreement required. Read the agreement at agreement.url, then send accept_agreement with its id member set to agreement.id. The body of the 409 carries agreement: { id, url }. The address block of the deal read carries the same agreement.id and agreement.url, with accepted. Show the agreement at the URL to the person. Then send accept_agreement: { "id": "<agreement.id>" } with the address request. This accepts the Non-Circumvention Agreement for that deal.

organization_required

409 Organization required. Create an organization on Investorlift, because the agreement binds to one.

lead_locked

409 Lead locked. Read the lead to see its current status, because a closed lead takes no change.

person_exists

409 Person already a lead. Read the leads of this deal, because this person is already one of them. The body names no id, because the API does not reveal the match.

strike_exists

409 Strike already filed. Read the buyer, because this organization already filed its one strike against them. GET /sell/buyers/{buyer_id} carries that strike in strike.

strike_window_closed

409 Strike window closed. File a strike inside 90 days of the last act of the buyer on your deal. Trust and limits has the strike rules.

webhook_limit

409 Too many endpoints. Delete an endpoint of this side, then create the new one. Each side holds ten endpoints.

validation_failed

422 Body failed validation. Correct each field the detail names, then repeat the call.

deal_incomplete

422 Draft incomplete. Add each field the detail names to the draft, then publish it again.

preview_expired

422 Preview expired. Take a new preview, then submit inside five minutes.

preview_mismatch

422 Preview does not match. Take a new preview for the terms you submit, then submit that token.

below_floor

422 Offer below the floor. Raise the offer amount, then submit a new preview and a new offer. The body names no figure unless the seller disclosed the floor.

requirement_unmet

422 Seller requirement unmet. Meet the requirement the detail names, then submit a new preview and a new offer.

proof_of_funds_missing

422 Proof of funds missing. Upload a proof of funds document, then repeat the call.

proof_of_funds_expired

422 Proof of funds expired. Upload a current proof of funds document, then repeat the call.

invalid_transition

422 Transition not allowed. Read the resource, then pick a status the detail lists as a next step.

webhook_url_refused

422 Webhook URL refused. Send an https URL on a public host, because a private address takes no delivery. Webhooks and events lists the checks.

cap_reached

429 Cap reached. Wait for the time in Retry-After, or raise your trust tier with the step in GET /me. The body names the cap. Trust and limits has the table.

daily_cap_reached

429 Daily cap reached. Wait for the next day in UTC, or raise your trust tier with the step in GET /me. Retry-After counts the seconds to the next midnight UTC.

duplicate_inquiry

429 Inquiry already sent. Send one inquiry of each type for one deal in 24 hours, then repeat the call. The two types are inquiry and address_request. The response carries Retry-After: 86400, and the body names deal_id and type.

rate_limited

429 Too many requests. Wait for the time in Retry-After, then repeat the call.

origin_error

503 Service unavailable. Repeat the call in a minute, and tell Investorlift support when the answer stays the same.

Answers from the gateway

The gateway at api.investorlift.com answers four codes before a request reaches the origin. Two of them, 401 unauthorized and 429 rate_limited, have their sections above. The two below are the gateway’s own. Every body has the same shape as the codes above, with a request_id. Every other code comes from the origin.

not_enabled

403 Marketplace API not enabled. The release flag is off for your account. Ask support@investorlift.com for access with the subject “Marketplace API access”. Access says what the email carries. The gateway forwards nothing while the flag is off.

origin_unconfigured

503 Service unavailable. The gateway environment has no marketplace origin. This is an operator’s error, not yours. Repeat the call in a minute, and tell Investorlift support when the answer stays the same.