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.
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:
scopeoninsufficient_scoperoleandrequired_rolesoninsufficient_roledesignationondesignation_requiredagreement_idonterms_requiredverification_urlonidv_requiredunknown_parametersonunknown_parameteragreement(idandurl) onagreement_required
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 thetype 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 atapi.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.