Monochrome API Ship Checklist
(Backend)


success: true, a friendly message, and a data payload that matches the endpoint’s purpose. An error response must always return success: false, a friendly message, and an error object with a stable code. The response should never mix success data and error data in the same call, and it should never require the mobile app to guess what happened based on missing keys._id, and must expose id instead. Timestamps must be ISO strings and consistently named as createdAt, updatedAt, startsAt, endsAt, or expiresAt depending on purpose. Any location fields must use latitude and longitude. Booleans must read clearly as is…, has…, can…, or should…, and must never be returned as 0/1 or "true"/"false" strings. userId inside each address item unless the endpoint supports multiple users in a single response. If a field is not used by the client or not needed for decision-making, it should not be included “just because it exists in the database.” A shipping endpoint should contain only the fields that a client can actually use right now, or fields that are clearly required for backward compatibility.null unless the client is expected to handle that field as optional and the null has meaning. Arrays should never be null; they must be an empty array when there are no items. Numeric fields should not default to 0 unless the true value is genuinely zero; unknown values should be omitted or returned as null depending on what the client needs. The endpoint must be safe even when the database has missing fields, and it must never throw or crash because a nested property is absent.error.code that is short, consistent, and machine-friendly, and that does not change over time. The message can be friendly and human, but clients must be able to rely on error.code for logic. If validation fails, the endpoint must return a clear list of field problems so the app can highlight the exact inputs that need fixing. The endpoint must not return raw database or stack trace errors to the client.meta object and include enough information to request the next page without guesswork. If pagination does not exist, meta should not exist.